Moin,
ich möchte eine Steuerung für eine Kühlung im Honiglager machen.
Die Temperatur wird im seriellen Monitor angezeigt und die Relais schalten.
Nur bein Display (20 x 4) zeigt nix an. Ein Scan ergab die Adresse 0x27.
Lg Dirk
[code]
/******************************************
* Steuerung für ein Honiglager *
* *
* (c) Dirk Unverzagt *
* *
* Display 4 X 20 *
* Anschlüsse: *
* DHT 1 Pin 7 *
* DHT 2 Pin 8 *
* Relais1 Pin 2 *
* Relais2 Pin 4 *
* *
******************************************/
#include <LCD.h>
#include "DHT.h"
#include "WiFiS3.h"
#include "NTP.h"
//#include "LCDIC2.h"
#include "Arduino_LED_Matrix.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Stellen Sie die LCD-I2C-Adresse auf UNO
// SDA A4, SCL A5
ArduinoLEDMatrix Matrix;
int maxtmp = 15;
int mintmp = 14;
float Temperatur = 0;
float Temperatur2 = 0;
float Luftfeuchtigkeit = 0;
float Luftfeuchtigkeit2 = 0;
String Zeit = "";
String kulung = "aus";
#define RELAY1_PIN 4
#define RELAY2_PIN 2
// Pin der Sensoren
int SENSOR_DHT = 7; // innen
int SENSOR_DHT2 = 8;// aussen
//Sensor temp
#define SensorTyp DHT22
#define SensorTyp2 DHT22
// Sensor einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
DHT dht2(SENSOR_DHT2, SensorTyp2);
// SSID und Passwort des Routers
char Router[] = "routername";
char Passwort[] = "nanananana";
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);
// Zeit bis zur nächsten Messung
static unsigned long GesicherteStartZeit = 0;
unsigned long Startzeit;
// alle 60 Sekunden aktualisieren, kann angepasst werden
int Intervall = 60000;
WiFiServer WiFiServer(80);
WiFiClient WiFiClient;
//------------------------------------------------------------
void setup()
{
lcd.begin(20, 4);
lcd.clear();
Serial.begin (9600);
Matrix.begin();
pinMode(RELAY1_PIN, OUTPUT); // Für 220 Volt Wechselstrom Motor
digitalWrite(RELAY1_PIN, LOW); // 2 Relais damit beide Pole
pinMode(RELAY2_PIN, OUTPUT); // geschaltet werden können
digitalWrite(RELAY2_PIN, LOW); //
while (!Serial) {
;
}
delay(1000);
// Verbindung aufbauen
WiFi.begin(Router, Passwort);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.print("Verbindung aufbauen mit ");
Serial.println(Router);
// IP des Servers/des verbundenen Computers anzeigen
Serial.print("Server: ");
Serial.println(WiFi.SSID());
// IP des Arduino anzeigen
Serial.print("IP Adresse Arduino ");
Serial.println(WiFi.localIP());
// Webserver starten
WiFiServer.begin();
/*
Zeitzone
CEST: Central European Summertime
Beginn europäische Sommerzeit letzter Sonntag im März 2 Uhr GMT + 2 Stunden
*/
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120);
// CET: Central European Time
// Beginn Normalzeit letzter Sonntag im Oktober 3 Uhr GMT + 1 Stunde
ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60);
// ntp starten
ntp.begin();
// Zeit holen
ntp.update();
dht.begin();
dht2.begin();
// beim Start Daten ausgeben
// Serieller Monitor
Temperatur = dht.readTemperature();
Serial.print("Temperatur:");
Serial.println(String(Temperatur) + " °C");
// Luftfeuchtigkeit
Luftfeuchtigkeit = dht.readHumidity();
Serial.print("Luftfeuchtigkeit: ");
Serial.println(String(Luftfeuchtigkeit) + " %");
lcd.setCursor(0, 0);
switch (ntp.weekDay()) {
case 0:
Serial.print("Sonntag");
lcd.print("So");
break;
case 1:
Serial.print("Montag");
lcd.print("Mo");
break;
case 2:
Serial.print("Dienstag");
lcd.print("Di");
break;
case 3:
Serial.print("Mittwoch");
lcd.print("Mi");
break;
case 4:
Serial.print("Donnerstag");
lcd.print("Do");
break;
case 5:
Serial.print("Freitag");
lcd.print("Fr");
break;
case 6:
Serial.print("Samstag");
lcd.print("Sa");
break;
}
Serial.print(", ");
// Zeit mit formatedTime() anzeigen:
// %d = Tag, %m = Monat, %Y = Jahr, %T = Zeit in Stunden, Minuten, Sekunden
Serial.println(ntp.formattedTime("%d.%m.%Y Uhrzeit: %T"));
lcd.setCursor(4, 0);
String Zeit = ntp.formattedTime("%d.%m.%Y %T");
// String Zeit nch Minuten kürzen
lcd.print(Zeit.substring(0, Zeit.indexOf(":") + 3));
lcd.setCursor(0, 1);
lcd.print(String(Temperatur) + " \337C" + " " + String(Luftfeuchtigkeit) + " % Innen");
lcd.setCursor(0, 2);
lcd.print(String(Temperatur2) + " \337C" + " " + String(Luftfeuchtigkeit2) + " % Außen");
// Cursor "verstecken"
//lcd.setCursor(false);
}//ende setup
void flocke() {
byte PfeilLinks[8][12] =
{
{ 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0 },
{ 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1 },
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
{ 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1 },
{ 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0 }
};
Matrix.renderBitmap(PfeilLinks, 8, 12);
}
void matrixAus() {
byte PfeilLinks[8][12] =
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
Matrix.renderBitmap(PfeilLinks, 8, 12);
}
//...................................................................
void loop()
{
// Startzeit setzen
Startzeit = millis();
// wenn das festgelegte Intervall erreicht ist
if (Startzeit - GesicherteStartZeit > Intervall)
{
lcd.clear();
// Startzeit zurücksetzen
GesicherteStartZeit = Startzeit;
// Zeit holen
ntp.update();
Serial.println("Temperatur und Luftfeuchtigkeit messen");
Serial.println("Letzte Messung: ");
// formatedTime() zeigt Wochentage in englischer Sprache
// -> müssen einzeln abgefragt werden
lcd.setCursor(0, 0);
switch (ntp.weekDay())
{
case 0:
Serial.print("Sonntag");
lcd.print("So");
break;
case 1:
Serial.print("Montag");
lcd.print("Mo");
break;
case 2:
Serial.print("Dienstag");
lcd.print("Di");
break;
case 3:
Serial.print("Mittwoch");
lcd.print("Mi");
break;
case 4:
Serial.print("Donnerstag");
lcd.print("Do");
break;
case 5:
Serial.print("Freitag");
lcd.print("Fr");
break;
case 6:
Serial.print("Samstag");
lcd.print("Sa");
break;
}//ende switch
Serial.print(", ");
Serial.println(ntp.formattedTime("%d.%m.%Y Uhrzeit: %T"));
// Temperatur
Temperatur = dht.readTemperature(); // im Kühlraum
Temperatur2 = dht2.readTemperature(); // ausserhalb
Serial.print("Temperatur innen:");
Serial.println(String(Temperatur) + " °C");
// Luftfeuchtigkeit
Luftfeuchtigkeit = dht.readHumidity();
Luftfeuchtigkeit2 = dht2.readHumidity();
Serial.print("Luftfeuchtigkeit innen: ");
Serial.println(String(Luftfeuchtigkeit) + " %");
Serial.print("Temperatur aussen:");
Serial.println(String(Temperatur2) + " °C");
Serial.print("Luftfeuchtigkeit aussen: ");
Serial.println(String(Luftfeuchtigkeit2) + " %");
Serial.println("Die Kühlung ist " + kulung);
Serial.println("Maximale Temperatur: " + String(maxtmp) );
Serial.println();
// Kühlung ein aus schalten
if (Temperatur > maxtmp ) {
digitalWrite(RELAY1_PIN, HIGH);
digitalWrite(RELAY2_PIN, HIGH);
kulung ="an";
flocke();
}
if (Temperatur < mintmp ) {
digitalWrite(RELAY1_PIN, LOW );
digitalWrite(RELAY2_PIN,LOW );
kulung ="aus";
matrixAus();
}
// Ausgabe LCD
Zeit = ntp.formattedTime("%d.%m.%Y %T");
lcd.setCursor(4, 0);
// String Zeit nch Minuten kürzen
lcd.print(Zeit.substring(0, Zeit.indexOf(":") + 3));
lcd.setCursor(0, 1);
lcd.print(String(Temperatur) + " \337C" + " " + String(Luftfeuchtigkeit) + " % Innen");
lcd.setCursor(0, 2);
lcd.print(String(Temperatur2) + " \337C" + " " + String(Luftfeuchtigkeit2) + " % Außen");
lcd.setCursor(0, 3);
lcd.print("Kühlung ist " + kulung);
}//ende if startzeit
// auf WiFiClienten warten ...
WiFiClient = WiFiServer.available();
if (WiFiClient)
{
// Seite aufbauen wenn SeiteAufbauen true ist
boolean SeiteAufbauen = true;
// solange der WiFiClient verbunden ist ...
while (WiFiClient.connected())
{
if (WiFiClient.available())
{
// Anforderung vom WiFiClienten lesen ...
char Zeichen = WiFiClient.read();
// wenn als Zeichen neue Zeile (\n) übergeben wird
// SeiteAufbauen true ist -> Seite anzeigen
if (Zeichen == '\n' && SeiteAufbauen)
{
WiFiClient.println("HTTP/1.1 200 OK");
WiFiClient.println("Content-type:text/html");
// Leerzeile zwingend erforderlich
WiFiClient.println();
WiFiClient.println( " <!DOCTYPE html>");
WiFiClient.println( "<html lang=\"de\">");
WiFiClient.println( " <head>");
WiFiClient.println( " <meta charset=\"utf-8\">");
WiFiClient.println( " <meta http-equiv=\"refresh\" content=\"90\" />");
WiFiClient.println( " <title>Temperatur im Honiglager</title>");
WiFiClient.println( " </head>");
WiFiClient.println( " <body>");
WiFiClient.println( " " + Zeit + " <br>");
WiFiClient.println( " Temperatur im Kühlraum " + String(Temperatur) + " °C <br>");
WiFiClient.println( " Temperatur ausserhalb Kühlraum " + String(Temperatur2) +" <br>");
WiFiClient.println( " Luftfeuchtigkeit im Kühlraum " + String(Luftfeuchtigkeit) +" % <br>");
WiFiClient.println( " Luftfeuchtigkeit ausserhalb Kühlraum " + String(Luftfeuchtigkeit2) +" <br>");
WiFiClient.println( " <br>");
WiFiClient.println( " </body>");
WiFiClient.println( " </html>");
// HTTP-Antwort endet mit neuer Zeile
WiFiClient.println();
// Seite vollständig geladen -> loop verlassen
break;
}//ende if (Zeichen == '\n' && SeiteAufbauen)
// neue Zeile -> SeiteAufbauen auf true setzen
if (Zeichen == '\n') SeiteAufbauen = true;
// die aktuelle Zeile enthält ein Zeichen
else if (Zeichen != '\r') SeiteAufbauen = false;
}
}// ende while wificonnect
delay(1);
WiFiClient.stop();
} //ende if wificlient
}
[/code]