#include <LiquidCrystal_I2C.h> //Dodanie biloteki wyświetlacza lcd dla połączenie interfejscem i2c
LiquidCrystal_I2C lcd(0x27,20,4); // Ustawienie adresu LCD na 0x27 oraz zadeklarowanie, że wyświetlacz ma 20 znaków w linii i 4 wiersze
#include "DHT.h" //Dodanie biloteki czujnkia DHT22, który mierzy temperature i wilgotność
#define DHTTYPE DHT22 //Zdefinowanie czujnika temperatury i wilgotnośći
#define DHTPIN 2 //Zdefiniowanie połaczenia czujnika DHT22
DHT czujnik(DHTPIN, DHTTYPE); //Utworzenie obiektu czujnika DHT o nazwie czujnik
//Utworzenie zmiennych
int temperatura = 0;
int wilgotnosc = 0;
int oswietlenie = 0;
bool pojemnik_wody = false;
//Utworzenie progu zadziałania pompy wody aby nawilżyć roślinę
int wilgotnosc_minmalna = 50;
//Zmienna dotycząca upływu czasu
unsigned long czas = millis();
void setup()
{
czujnik.begin(); //ropoczęcie pracy czujnika DHT22
lcd.init(); //Inicjalizacja wyświetlacza
lcd.backlight(); //Podświetlenie wyświetlacza
pinMode(5,OUTPUT); //zadeklarowanie wyjścia
pinMode(12,INPUT_PULLUP); //zadeklarowanie wejścia
}
//Funkcja służąca wyświetlaniu
void wyswietlanie(){
//Wyświetlanei temperatura
lcd.setCursor(0,0);
lcd.print("Temperatura = ");
//Czysczenie poprzedniego odczytu
lcd.setCursor(14,0);
lcd.print(" ");
lcd.setCursor(14,0);
lcd.print(temperatura);
lcd.setCursor(0,1);
lcd.print("Wilgotnosc = ");
//Czysczenie poprzedniego odczytu
lcd.setCursor(13,1);
lcd.print(" ");
lcd.setCursor(13,1);
lcd.print(wilgotnosc);
lcd.setCursor(0,2);
lcd.print("Oswietlenie = ");
//Czysczenie poprzedniego odczytu
lcd.setCursor(14,2);
lcd.print(" ");
lcd.setCursor(14,2);
lcd.print(oswietlenie);
//Wyswietlanie napisu dotczacego poziomu wody w zbiorniku
if(pojemnik_wody == false){
lcd.setCursor(0,3);
lcd.print("Brak wody ");
}
else
{
lcd.setCursor(0,3);
lcd.print("Jest woda ");
}
}
//Funkcja dokonuje pomiaru wszsystkich dostępnych czujników
void pomiar(){
//Dokonanie pomiaru temperatury
temperatura = czujnik.readTemperature();
//Dokonanie pomiaru wilgotności
wilgotnosc = czujnik.readHumidity();
//Dokonanie pomiaru oświetlenia
unsigned long o = (1023-analogRead(A0));
float oo = o/10;
oswietlenie = oo;
}
//Funkcja do załączania pompy wody
void pompa(){
if(wilgotnosc < wilgotnosc_minmalna && (millis() - czas > (10* 1000))){
czas = millis();
digitalWrite(5,HIGH);
delay(400);
digitalWrite(5,LOW);
}
else
{
digitalWrite(5,LOW);
}
}
//Funkcja do sprawdzania czy jest wystarczająco wody w zbiorniku
void woda(){
if(digitalRead(12) == LOW){
pojemnik_wody = false;
}
else{
pojemnik_wody = true;
}
}
void loop()
{
//Sprawdzanie czy jest dość wdy w zbiorniku
woda();
//Wywołanie fukncji dotyczącej pomiaru z czujników
pomiar();
//Wywołanie funkcji, która jest odpoweidzialana za wyświetlanie
wyswietlanie();
//Wywołanie funkcji pompa
pompa();
}