chci si udelat zalevac kytek co bude obsluhovat 6 kvetinacu. Mam to uz tak nejak vymysleny ale budu rad kdyz mne napisete svoje postrehy.
Melo by to 2x za den zkontrolovat vlhkost pudy. Kdyz bude nizka, tak zalejt ten kvetinac kde nameril nizkou hodnotu, pockat 10s a opakovat mereni.
Az bude dostatecna vlhkost tak prejit na dalsi kvetinac.
Pro parametry jednotlivych kvetinacu jsem si vytvoril promennou pole - tam bude ulozena pozadovana vlhkost, doba proudu vody a vykon motoru.
Motor bude regulovany PWM. Dale bude kontrola hladiny vody - jeste nevim uplne jak.
Arduino bude napajeno stejnym zdrojem jako motor, takze jsem resil i nejake to odruseni viz schema.
Ovladaci "plosnak" si chci udelat sam, prikladam schema.
Momentalne premyslim jak udelat spusteni loopu 2x za den.....nasel jsem reseni pres millis()....je to dobry napad?
Seznam soucastek:
Arduino UNO
6x vlhkomer https://www.gme.cz/modul-pudniho-vlhkomeru
6x solenoid https://www.ebay.com/itm/12V-DC-Small-P ... SwywRaNx-9
1X motorek ostrikovacu (nevim co je zac)
1x napajeci zdroj https://www.gme.cz/napajeci-adapter-sit ... m-t2-vigan
soucastky na plosnak dle schematka.....
Kód: Vybrat vše
int motor = 6;
int beh = 0;
int vlhkost = 100;
// 6x info: vlhkost, doba zalevani, rychlost zalevani
int poledata[6][3]={
{60,3,70}, //1
{70,3,30}, //2
{50,3,60}, //3
{50,6,50}, //4
{40,10,1}, //5
{60,3,40} //6
};
void setup() {
Serial.begin(9600);
// Vystupy pro sensory
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
//Vystupy pro solenoidy
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
//kontrola hladiny vody
pinMode(7, INPUT);
//PWM pro motor (6)
pinMode(motor, OUTPUT);
//Vstupy od sensoru
pinMode(14, INPUT);
pinMode(15, INPUT);
pinMode(16, INPUT);
pinMode(17, INPUT);
pinMode(18, INPUT);
pinMode(19, INPUT);
}
void loop()
{
Serial.println((String) "Novy loop pri " + millis());
for (int i = 1; i <= 6; i = i + 1) // 6 kytek
{ if (digitalRead(7) == LOW) nenivoda();
beh = 0; // reset pocitadla
do
{
if (beh!=0)
// --- zaliti kytky ---
{
digitalWrite(i+7, HIGH); //otevre solenoid
delay(300); //stabilizace solenoidu
analogWrite(motor, map(poledata[i-1][2], 0, 100, 0, 255)); //spusti motor zadanou rychlosti (%)
delay((poledata[i-1][1])/beh*1000); //doba behu motoru - kdyz zaleva podruhe je polovicni
analogWrite(motor, 0); //vypne motor
digitalWrite(i+7, LOW); //zavre solenoid
delay(10000); //pockej az se to vcakne: 10000
Serial.println((String) "Kytka cislo " + i + " Zalil sem ji " + beh + "x" + " Posledni vlhkost byla " + vlhkost);
}
// --- nacteni vlhkosti ---
digitalWrite(i-1, HIGH); //zapne napajeni sensoru
delay(300); //stabilizace sensoru
vlhkost = map(analogRead(i+13), 0, 1023, 0, 100); //nacteni hodnoty sensoru
digitalWrite(i-1, LOW); //vypne napajeni sensoru
beh = beh + 1; //pocitadlo
Serial.println((String) "kytka: " + i);
Serial.println((String) "reference: " + poledata[i-1][0]);
Serial.println((String) "naměřeno: " + vlhkost);
} while ((vlhkost < poledata[i-1][0]) and (beh < 3));
}
}
void nenivoda()
{
do
{
Serial.println((String) "Neni voda");
delay(10000);
}
while (digitalRead(7) == LOW);
}