INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[Projekt] Reifeschrank Klimasteuerung
19.03.2015, 14:09
Beitrag #65
RE: [Projekt] Reifeschrank Klimasteuerung
(19.03.2015 13:47)sleipneer schrieb:  hmm....irgendwie bringt mich PulseIn auch nicht weiter...
Wo haengt's? Stell mal Deine Coding-Versuche dazu hier ein.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2015, 14:12 (Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2015 14:12 von Wampo.)
Beitrag #66
RE: [Projekt] Reifeschrank Klimasteuerung
Ich vermute das was ich auch vergessen hatte.

Von den 12V die GND Leitung hängt die auch an deim Arduino am GND??

Wie Thorsten schon sagt, Coding zeigen und n bissl Setup Fotos wären Hilfreich.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2015, 14:14
Beitrag #67
RE: [Projekt] Reifeschrank Klimasteuerung
(19.03.2015 13:52)Wampo schrieb:  Hab den Tachpin immer über ein Interrupt laufen, pro Umdrehung bekommst du ein oder zwei Impulse. Diese kannst du ganz einfach auswerten mit dem Code (unten)
Koennte man das nicht etwas vereinfachen, in dem man in der Interrupt-Routine jeweils die Zeit seit dem letzten Impuls per micros() misst? Das muss man dann nur noch invertieren, um die Umdrehungszahl zu bekommen. Moeglicherweise ist das ein bisschen "verrauscht", aber das laesst sich mit exponentieller Glaettung rausrechnen.
Dann hat man zumindest kein langes delay().
...oder man laesst das mit dem delay() bleiben und prueft ueber millis(), ob man ein genuegend langes Messintervall hat.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2015, 14:18
Beitrag #68
RE: [Projekt] Reifeschrank Klimasteuerung
so, nächster Fehlversuch

Code:
/*
  RPM meter code (tested on device rotating at 10,000 rpm)
  rev.001
  * using a hall effect sensor
  http://www.adafruit.com/index.php?main_page=product_info&cPath=35&products_id=158
  * using a parallel LCD with
  LiquidCrystal Library
  http://www.ladyada.net/learn/lcd/charlcd.html
  http://www.arduino.cc/en/Tutorial/LiquidCrystal
  with pins 7,8,9,10,11,12
*/

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
//LiquidCrystal lcd(7,8,9,10,11,12);
// read the hall effect sensor on pin 2
const int hallPin=7;
const unsigned long sampleTime=1000;
const int maxRPM = 10200;

void setup()
{
  pinMode(hallPin,INPUT);
  pinMode(2, OUTPUT);
  pinMode(6, OUTPUT);
  digitalWrite(2, LOW);
  digitalWrite(6, HIGH);
  Serial.begin(9600);
  // set up the LCD's number of rows and columns:
//  lcd.begin(16, 2);
  // Print a message to the LCD.
//  lcd.print("initializing");
  delay(1000);
// lcd.clear();
}

void loop()
{
  delay(100);
  int rpm=getRPM();
//  lcd.clear();
  displayRPM(rpm);
  displayBar(rpm);
}

int getRPM()
{
  // sample for sampleTime in millisecs
  int kount=0;
  boolean kflag=LOW;
  unsigned long currentTime=0;
  unsigned long startTime=millis();
  while (currentTime<=sampleTime)
  {
    if (digitalRead(hallPin)==HIGH)
    {
      kflag=HIGH;
    }
    if (digitalRead(hallPin)==LOW && kflag==HIGH)
    {
      kount++;
      kflag=LOW;
    }
    currentTime=millis()-startTime;
  }
  int kount2rpm = int(60000./float(sampleTime))*kount;
  return kount2rpm;
}
    
void displayRPM(int rpm) {
//  lcd.clear();
  // set the cursor to column 0, line 1
// lcd.setCursor(0, 0);
  // print the number of seconds since reset:
  Serial.print(rpm,DEC);
//  lcd.setCursor(7,0);
  Serial.print("RPM");
}

void displayBar(int rpm)
{
  int numOfBars=map(rpm,0,maxRPM,0,15);
// lcd.setCursor(0,1);
  if (rpm!=0)
  {
  for (int i=0; i<=numOfBars; i++)
   {
    //    lcd.setCursor(i,1);
        Serial.write(1023);
      }
  }
}

ich krieg nur 0 RPM ausgeworfen Sad Sad Sad

so langsam gehen mir die ideen aus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2015, 14:18 (Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2015 14:20 von Wampo.)
Beitrag #69
RE: [Projekt] Reifeschrank Klimasteuerung
Würde natürlich auch gehen, in der großen Wetterstation benutze ich dann diese messweise:
Wobei da auch wieder ein WHILE verbaut ist.

Aber jetzt warten wir mal seine Antwort ab und verwirren Ihn nicht noch mehr Big Grin
Code:
void Windgeschwindigkeit()
{  
   windgeschwindigkeitMessStart = startIntervall; // aktualiere Startzeit fuer Messung
   windgeschwindigkeitMessStartAlt = windgeschwindigkeitMessStart; // merken uns Startzeit
   windgeschwindigkeitPinZaehler = 0; // setze Pulszaehler auf 0
   windgeschwindigkeitPinStatusAlt = HIGH; // setze Pulsstatus auf HIGH
   // solange die o.a. Zeit noch nicht durch ist ...
   while ((windgeschwindigkeitMessStart - windgeschwindigkeitMessStartAlt) <= windmessDauer)
   {
      windgeschwindigkeitPinStatus = digitalRead(windgeschwindigkeitPin);
      if (windgeschwindigkeitPinStatus != windgeschwindigkeitPinStatusAlt) // wenn sich Pin-Status geaendert hat ...
      {                
         if (windgeschwindigkeitPinStatus == LOW) // und wenn  alter Status = HIGH
         {
            windgeschwindigkeitPinZaehler++; // erhöhe Zaehler um 1
         }
      }
      windgeschwindigkeitPinStatusAlt = windgeschwindigkeitPinStatus; // merken uns Pin-Status fuer naechsten Durchlauf
      windgeschwindigkeitMessStart = millis(); // aktualisieren Zeit
   }

Setze mal den PIN 2 mit einem Digital Pullup auf HIGH, der Tachopin zieht diesen ja auf ein LOW runter.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2015, 14:21
Beitrag #70
RE: [Projekt] Reifeschrank Klimasteuerung
(19.03.2015 14:09)Thorsten Pferdekämper schrieb:  
(19.03.2015 13:47)sleipneer schrieb:  hmm....irgendwie bringt mich PulseIn auch nicht weiter...
Wo haengt's? Stell mal Deine Coding-Versuche dazu hier ein.

Code:
// DHT22, TinyRTC (DS1307) und 1.8 Zoll TFT-Farb-Display (SainSmart ST7735)

#include "Adafruit_GFX.h"            // Adafruit Grafik-Bibliothek
#include "Adafruit_ST7735.h"         // Adafruit ST7735-Bibliothek
#include <SPI.h>                     // SPI-Bibliothek für den BMP085

#include <Wire.h>
//#include "Adafruit_BMP085.h"       // Adafruit BMP085-Bibliothek, für späteres Nachrüsten des Luftdrucksensors

#include "RTClib.h"                  //RTC-Bibliothek für die Echtzeituhr

#include <PWM.h>                     // PWM-Bibliothek zur Lüftersteuerung mittels PWM
//#include <PID_v1.h>
#include <DHT.h>                     //DHT Bibliothek für DHT Sensoren

// PIN Belegungen
#define DHTPIN 4                    // DHT an Arduino PIN 4
#define DHTTYPE DHT22               // DHT 22
#define RELAY1 2                    // Relais Kanal 1 -> Lüfter
#define RELAY2 3                    // Relais Kanal 2 -> Vernebler
#define FAN 6                       // PWM Kanal des Lüfters
#define TACHO 7                     // Tachosignal des Lüfters

// TFT-Display
#define CS   10                    // Arduino-Pin an Display CS  
#define DC   9                     // Arduino-Pin an Display A0
#define RST  8                     // Arduino Reset-Pin

#define UPDATE_ZYKLUS 1000 // Jede Sekunde 1 ms Ausgabe der Geschwindigkeit.
const int ANZAHL_INTERRUPTS = 1; // Anzahl der Interrupts pro Umdrehung (1 oder 2)

Adafruit_ST7735 tft = Adafruit_ST7735(CS, DC, RST);  // Display-Bibliothek Setup

RTC_DS1307 RTC;                    // Tiny RTC Modul

// Adafruit_BMP085 bmp;            // BMP085 (für späteres hinzufügen des Luftdrucksensors)

DHT dht(DHTPIN, DHTTYPE);          // Initialisierung des DHTs


DateTime now;
DateTime time_old;
DateTime date_old;

boolean night_mode=true;          // Invertiert das Display; Stromsparmaßnahme und zur verbesserten Lesbarkeit

int RELAY1state;
int RELAY2state;

int32_t frequency = 25000;         //Frequenz (in Hz)


void setup()
{
  Serial.begin(9600);             // zur zusätzlichen Ausgabe in der Seriellen Konsole
  pinMode(RELAY1, OUTPUT);          // Relais 1 als Ausgng festlegen
  pinMode(RELAY2, OUTPUT);          // Relais 2 als Ausgang festlegen

bool success = SetPinFrequencySafe(FAN, frequency); // Frequenz für FAN Pin setzen
pinMode(FAN, OUTPUT);               // Output PWM 0-255
//pinMode(TACHO, INPUT);
                      

// digitalWrite(RELAY1, LOW);        // Relais 1 "einschalten"
  digitalWrite(RELAY2, HIGH);        // Relais 2 "ausschalten"

RELAY1state = digitalRead(RELAY1);
RELAY2state = digitalRead(RELAY2);


  // Initialisiere RTC
  Wire.begin();
  RTC.begin();
  
  if (! RTC.isrunning()) {
                                    // Aktuelles Datum und Zeit setzen, falls die Uhr noch nicht läuft
    RTC.adjust(DateTime(__DATE__, __TIME__));

  }
  
//  bmp.begin();                    // BMP085 starten
  
  dht.begin();                     // DHT starten
  
  // Display
  tft.initR(INITR_BLACKTAB);        // ST7735-Chip initialisieren
  
  display_show();
  
}


float temp=1000;
float hum=1000;
//int32_t pressure=0;
float min_temp=1000;
float max_temp=-1000;
float min_humidity=1000;
float max_humidity=-1000;
//int32_t min_pressure=0;
//int32_t max_pressure=-0;

int tempct=0;



void loop() {
  

  
digitalWrite(RELAY1, LOW);


  DateTime now=RTC.now();
  
  if(now.minute()!=time_old.minute()){
    show_time(time_old,true);
    time_old=now;
    show_time(time_old,false);
  }
  if(now.day()!=date_old.day()){
    show_date(date_old,true);
    date_old=now;
    show_date(date_old,false);
  }

  float t=dht.readTemperature();
// else t=bmp.readTemperature();          // Alternativabfrage der Temp über den BMP085
if(isnan(t)){}
  else if((float)t!=(float)temp){
   show_temp(temp,true);
   temp=t;
   if(min_temp>temp)min_temp=temp;
   if(max_temp<temp)max_temp=temp;
   show_temp(temp,false);
  }
  tempct++;
  
  float h = dht.readHumidity();
  if(isnan(h)){}
  else if(h!=hum){
  show_hum(hum,true);
  hum=h;
   if(min_humidity>hum)min_humidity=hum;
   if(max_humidity<hum)max_humidity=hum;
   show_hum(hum,false);
  }

if (temp < 22.0)
{
  pwmWrite(FAN,0);
//  digitalWrite(RELAY1,HIGH);
}
if (temp >= 21.5)
{
  pwmWrite(FAN,255);
//  digitalWrite(RELAY1, LOW);
}


//if (hum >= 75.0)
//{
//  digitalWrite(RELAY2,HIGH);
//}
//if (hum <= 80.0)
//{
//  digitalWrite(RELAY2, LOW);
//}

// int32_t p=bmp.readPressure();
// if(p!=pressure){
//   show_pressure(pressure,true);
//   pressure=p;
//  if(min_pressure>pressure)min_pressure=pressure;
//   if(max_pressure<pressure)max_pressure=pressure;
//   show_pressure(pressure,false);
// }


   RELAY1state = digitalRead(RELAY1);                         //Abfrage und Speichern des Schaltzustands
{                                                             //der RelaisPINs
  show_RELAY1state(RELAY1state,true);
  show_RELAY1state(RELAY1state,false);
  }
  
  
   RELAY2state = digitalRead(RELAY2);
{
  show_RELAY2state(RELAY2state,true);
  show_RELAY2state(RELAY2state,false);
  }

  
  delay(2000);  

// Serial.print(temp);
// Serial.write(0xB0),Serial.print("C");
// Serial.print(" | ");
// Serial.print(hum);
// Serial.println("% rel. Luftfeuchte");


}

void show_temp(float temp,boolean clear){
  
  int clearcolor=night_mode?ST7735_BLACK:ST7735_WHITE;
  int textcolor=night_mode?ST7735_WHITE:ST7735_BLACK;
  
  byte xs=5;
  byte ys=66;
  String htemp=String((float)temp,1);
  
  set_text(xs,ys,htemp,clear?clearcolor:textcolor,2);
  set_text(xs+(3*htemp.length()*4),ys,"",(clear?clearcolor:textcolor),2);
  tft.write(247); // das °-Zeichen  
  tft.print("C");
  set_text(xs+81,ys+1,String((float)max_temp,1),clear?clearcolor:ST7735_RED,1​);
  tft.write(247);tft.print("C");
  set_text(xs+81,ys+11,String((float)min_temp,1),clear?clearcolor:ST7735_CYAN​,1);
  tft.write(247);tft.print("C");
}

void show_hum(float hum,boolean clear){

  int clearcolor=night_mode?ST7735_BLACK:ST7735_WHITE;
  int textcolor=night_mode?ST7735_WHITE:ST7735_BLACK;

  byte xs=5;
  byte ys=90;
  
  set_text(xs,ys,String((float)hum,1)+"%",clear?clearcolor:textcolor,2.5);
  set_text(xs+81,ys+1,String((float)max_humidity,1)+"%",clear?clearcolor:ST7735_GREEN,1);
  set_text(xs+81,ys+11,String((float)min_humidity,1)+"%",clear?clearcolor:ST7735_YELLOW,1);
}

//void show_pressure(float pressure,boolean clear){
  
//  int clearcolor=night_mode?ST7735_BLACK:ST7735_WHITE;
//  int textcolor=night_mode?ST7735_WHITE:ST7735_BLACK;
  
//  byte xs=12;
//  byte ys=130;
  
//  set_text(xs,ys,String((int32_t)pressure)+"Pa",clear?clearcolor:textcolor,1);
  
//  if(max_pressure>=100000)xs-=8;
//  set_text(xs+68,ys-5,String((int32_t)max_pressure)+"Pa",clear?clearcolor:ST7735_CYAN,1);
//  set_text(xs+68,ys+5,String((int32_t)min_pressure)+"Pa",clear?clearcolor:ST7735_MAGENTA,1);//
//}

String get_day_of_week(uint8_t dow){
  
  String dows="  ";
  switch(dow){
   case 0: dows="So"; break;
   case 1: dows="Mo"; break;
   case 2: dows="Di"; break;
   case 3: dows="Mi"; break;
   case 4: dows="Do"; break;
   case 5: dows="Fr"; break;
   case 6: dows="Sa"; break;
  }
  
  return dows;
}

void show_time(DateTime now, boolean clear){
  
  int clearcolor=night_mode?ST7735_BLACK:ST7735_WHITE;
  int textcolor=night_mode?ST7735_WHITE:ST7735_BLACK;

  tft.setTextColor(clear?clearcolor:textcolor);
      
  tft.setTextSize(3);
  tft.setCursor(21,21);
  if(now.hour()<10)tft.print(0);
  tft.print(now.hour(),DEC);
  tft.print(":");
  if(now.minute()<10)tft.print(0);
  tft.print(now.minute(),DEC);
//  tft.print(":");                                     // für Sekundenanzeige
//  if(now.second()<10)tft.print(0);                    // jedoch unpraktisch, weil erstens steigt die
//  tft.print(now.second(),DEC);                        // Rechenleistung an und zweitens der Aktualisierungsintervall
}                                                       // niedriger gestellt werden müsste

void show_date(DateTime now,boolean clear){
  
  int clearcolor=night_mode?ST7735_BLACK:ST7735_WHITE;
  int textcolor=night_mode?ST7735_WHITE:ST7735_BLACK;

  tft.setTextColor(clear?clearcolor:textcolor);
  tft.setTextSize(1);
  tft.setCursor(24,47);  
  tft.print(get_day_of_week(now.dayOfWeek()));
  tft.print(", ");
  if(now.day()<10)tft.print(0);
  tft.print(now.day(),DEC);
  tft.print(".");
  if(now.month()<10)tft.print(0);
  tft.print(now.month(),DEC);
  tft.print(".");
  tft.print(now.year(),DEC);
}

void show_RELAY1state(char, boolean clear){
  
  tft.setTextSize(1);
  tft.setCursor(100,132);  
  if ((digitalRead(RELAY1) == LOW))
{
   tft.setTextColor(ST7735_GREEN, ST7735_BLACK);
   tft.print("ON ");
  
}
  else
  {
  tft.setTextColor(ST7735_RED, ST7735_BLACK);  
  tft.print("OFF");
  }
}

void show_RELAY2state(char, boolean clear){
  
  tft.setTextSize(1);
  tft.setCursor(100,147);  
  if ((digitalRead(RELAY2) == LOW))
{
   tft.setTextColor(ST7735_GREEN, ST7735_BLACK);
   tft.print("ON ");
}
  else
  {
  tft.setTextColor(ST7735_RED, ST7735_BLACK);
  tft.print("OFF");
  }
}
void set_text(int x,int y,String text,int color,int size){
  
  tft.setTextSize(size);
  tft.setCursor(x,y);
  tft.setTextColor(color);
  tft.print(text);
}

void display_show(){

  tft.fillScreen(night_mode?ST7735_BLACK:ST7735_WHITE);
  
  set_text(13,4,"Klima",ST7735_CYAN,1);
  tft.write(129); // Umlaut (ü)
  set_text(50,4,"berwachung",ST7735_CYAN,1);
  set_text(5,120,"STATUS",ST7735_CYAN,1);
  set_text(5,132,"L",ST7735_WHITE,1);
  tft.write(129); // Umlaut (ü)
  set_text(16,132,"fter",ST7735_WHITE,1);  
  set_text(5,147,"Luftbefeuchter",ST7735_WHITE,1);
  time_old=date_old=RTC.now();
  
  show_time(time_old,false);
  show_date(date_old,false);  
}

das ist der reine Aufbau ohne die Tachoauslese.

Ich kann gerne ein Foto vom Setup machen, aber ob das hilfreich ist, wage ich zu bezweifeln.
Und in Fritzing komme ich nicht weiter, weil ich kein Bauteil habe, das meinem Relais-Shield entspricht! Sad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2015, 14:25 (Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2015 14:26 von Wampo.)
Beitrag #71
RE: [Projekt] Reifeschrank Klimasteuerung
http://www.thebestcasescenario.com/forum...PC-Fan-RPM
Hier wird der Tachopin auf 5vV hochgezogen und vom Tachopin bei einem Impuls auf LOW.
GND vom Arduino hängt auch immer auf dem 12V GND, Potentialausgleich und so
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2015, 14:33
Beitrag #72
RE: [Projekt] Reifeschrank Klimasteuerung
Hi sleipneer,
versuche Deine Sketche mal einfacher zu machen, wenn Du was neues probierst. Immer nur eine Sache und das Ergebnis per Serial.print ausgeben.
Der RPM-Meter code koennte funktionieren mit
pinMode(hallPin,INPUT_PULLUP); statt pinMode(hallPin,INPUT);.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Roboter (Projekt) Beginner linux248 1 325 30.11.2016 12:06
Letzter Beitrag: Thie
  Arduino Projekt (Einkauf/Beratung) pekinese 2 217 21.11.2016 13:44
Letzter Beitrag: pekinese
Rainbow WB2812B Projekt CrazyHawk 18 1.494 22.07.2016 17:45
Letzter Beitrag: CrazyHawk
  Cam Slider Projekt, die ersten Schritte T8T 3 1.154 30.04.2016 16:26
Letzter Beitrag: SkobyMobil
  Projekt: Türsensor _Aviciii_ 9 2.434 05.04.2016 18:50
Letzter Beitrag: hotsystems
  Erstes Projekt Claus_M 8 1.963 08.01.2016 07:36
Letzter Beitrag: Claus_M
  NwT-Projekt Kursstufe1 Jonas Halbgewachs 6 2.293 26.10.2015 10:47
Letzter Beitrag: Binatone
  Anfänger mit großem Bau Projekt (Useless Box 3.0) Wambo 7 4.134 02.10.2015 16:36
Letzter Beitrag: Klaus(i)
  Ardunio Anfänger mit vielen Fragen zu einem Design Projekt (mit Bildern) farbexot 0 1.531 01.08.2015 13:03
Letzter Beitrag: farbexot
  1. Arduino Projekt: Riesengrill Wotan 2 2.319 24.06.2015 14:45
Letzter Beitrag: Wotan

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste