Je to systém, který umožňuje sledovat teplotu a vlhkost ve vašem bytě. Jeho nastavení je hodně snadné.
Vlastnosti:
- Možnost odesílání e-mailů
- Možnost vytváření grafů a dat do tabulek
- Možnost 24/7 monitorování
- Bzučák při překročení limitů
Skripty + knihovny:
- Vše funguje na kódu Arduina, který shromažďuje data a poté je monitoruje kód v PC.
- Knihovny: Wire.h, LiquidCrystal_I2C.h, ThreeWire.h, RtcDS1302.h, DHT.h
Jak to funguje?:
DHT11 odesílá informace do Arduina, které je naprogramováno tak, aby odesílalo informace na frekvenci 9600. Poté je převzat kódem Pythonu, který informace monitoruje a pokud je teplota/vlhkost mimo povolený rozsah, odešle e-mail!
Kód pro arduino:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ThreeWire.h>
#include <RtcDS1302.h>
#include <DHT.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
ThreeWire myWire(3, 4, 2); // dat, clk, rst!!!!!!!!!
RtcDS1302 rtc(myWire);
#define DHTPIN 5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define greenLed 8
#define redLed 9
#define buzzer 6
unsigned long lastBeepTime = 0;
bool beepState = false;
float lastHum = -1;
float lastTemp = -1;
bool sensorError = false;
unsigned long lastBlink = 0;
bool blinkState = false;
void fadeInDisplay(const char* l1, const char* l2) {
lcd.clear();
for (int i = 0; i <= 16; i++) {
lcd.setCursor(0, 0);
lcd.print(String(l1).substring(0, i));
lcd.setCursor(0, 1);
lcd.print(String(l2).substring(0, i));
delay(40);
}
}
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.backlight();
pinMode(greenLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(buzzer, LOW);
rtc.Begin();
dht.begin();
if (!rtc.GetIsRunning()) {
rtc.SetDateTime(RtcDateTime(__DATE__, __TIME__));
}
fadeInDisplay(" System Start ", " Initializing ");
delay(500);
lcd.clear();
}
void loop() {
float hum = dht.readHumidity();
float temp = dht.readTemperature();
RtcDateTime now = rtc.GetDateTime();
char dateBuffer[17];
snprintf(dateBuffer, sizeof(dateBuffer), " %02u/%02u/%04u ",
now.Day(), now.Month(), now.Year());
if (!isnan(hum) & !isnan(temp)) {
if (sensorError) {
lcd.clear();
sensorError = false;
}
bool outOfRange = (hum < 30.0 || hum > 70.0);
digitalWrite(greenLed, outOfRange ? LOW : HIGH);
digitalWrite(redLed, outOfRange ? HIGH : LOW);
if (outOfRange) {
if (millis() - lastBeepTime > 1000) {
beepState = !beepState;
digitalWrite(buzzer, beepState);
lastBeepTime = millis();
}
} else {
digitalWrite(buzzer, LOW);
}
if (abs(hum - lastHum) >= 0.1 || abs(temp - lastTemp) >= 0.1 || lastHum < 0) {
char humBuf[6], tempBuf[6];
dtostrf(hum, 4, 1, humBuf);
dtostrf(temp, 4, 1, tempBuf);
lcd.setCursor(0, 0);
lcd.print(dateBuffer);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(humBuf);
lcd.print("% | ");
lcd.print(tempBuf);
lcd.print((char)223);
lcd.print("C ");
Serial.print("H:");
Serial.print(humBuf);
Serial.print(",T:");
Serial.println(tempBuf);
lastHum = hum;
lastTemp = temp;
}
}
else {
if (!sensorError) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" NO SENSOR DATA ");
Serial.println("ERROR:SENSOR");
sensorError = true;
}
if (millis() - lastBlink > 500) {
blinkState = !blinkState;
digitalWrite(greenLed, blinkState);
digitalWrite(redLed, !blinkState);
lastBlink = millis();
}
digitalWrite(buzzer, LOW);
}
delay(250);
}
Odkaz na github projektu s obsahem Python kódu a dalších souborů: https://github.com/mavory/Arduino-Environmental-Alert-System