použité komponenty:
2x merač vlhkosti pôdy https://www.aliexpress.com/item/1pcs-lo ... 89455.html
1x dvojité relé pre Adruino https://www.aliexpress.com/item/2-chann ... 35353.html
1x OLED displej https://www.aliexpress.com/item/0-91-In ... 15973.html
1x Arduino uno R3
a taktiež zdrojový kód:
Kód: Vybrat vše
#include "U8glib.h"
// inicializace OLED displeje z knihovny U8glib
U8GLIB_SSD1306_128X32 mujOled(U8G_I2C_OPT_NONE);
long int cas = 0;
long int milis = 0;
int hodnota = 0;
int Apin[] = {A3, A4};
int Dpin[] = {7, 8};
int k = 0;
int i = sizeof(Apin)/sizeof(int);
int j = sizeof(Dpin)/sizeof(int);
void setup() {
Serial.begin(9600);
}
void loop() {
if (k>=i) {
k=0;
}
else{
if(millis()-milis >300000){
Serial.println(vlhkost(Apin[k]));
rele(Dpin[k],vlaha(vlhkost(Apin[k])),casovac(vlaha(vlhkost(Apin[k]))));
vypis(vlhkost(Apin[k]),k);
milis=millis();
k++;
}
//delay(5000);
}
}
//zistim vlhkosť pody
int vlhkost (int Apin) {
//načíjta hodnotu zo snímačov
hodnota = analogRead(Apin);
//nastavenie minima a maxima
hodnota = constrain(hodnota,400,1023);
//prepísanie hodnôt : 400 bude ako 100% a 1023 bude ako 0%
hodnota = map(hodnota,400,1023,100,0);
return hodnota;
}
//ovladam rele podľa potreby
void rele (int Dpin, boolean vlaha, int casovac) {
digitalRead(Dpin);
if(vlaha == 1 && casovac != 0) {
digitalWrite(Dpin, HIGH);
}
else {
digitalWrite(Dpin, LOW);
}
}
//zistim ci je potrebne spustit zavlazenie
boolean vlaha (int vlhkost) {
if(vlhkost <= 60) {
return 1;
}
else {
return 0;
}
}
int casovac(boolean vlaha) {
if(vlaha == 1 && cas < 300000) {
return cas=millis();
}
else return cas=0;
}
void vypis(int vlhkost, int i) {
mujOled.setFont(u8g_font_6x13);
mujOled.firstPage();
do {
mujOled.setPrintPos(0,14);//30
String sprava = "Vlh.pody sn_";
sprava += i+1;
sprava += ": ";
sprava += vlhkost;
sprava += " %";
mujOled.print(sprava);
mujOled.setPrintPos(0,30);
String sprava2 = "Rele ";
sprava2 += i+1;
sprava2 += ": ";
// zisti, či je relé zapnuté alebo vypnuté
if(digitalRead(Dpin) == HIGH){
sprava2 += "zapnute";
}
else {
sprava2 += "vypnute";
}
mujOled.print(sprava2);
} while( mujOled.nextPage() );
}