Dobrý den,
na úvod řeknu, že jsem začátečník okolo elektrotechniky (...teda, kdysi jsem měl voltíka, jestli se to počítá ) a co se týče programování...no, myslím si, že můj nick to vystihuje docela dobře. Ale než otočíte oči vsloup a kliknete na šipku "ZPĚT", řeknu rychle, že základy programování ze střední a vysoké stále mám a nějaké programátorské evergreeny typu "Ahoj světe!" po dnech a nocích úmorného programování jsem schopný stvořit. No a nechybí mi nadšení a touha se něčemu novému naučit, která u nového koníčku je vždy důležitá
Abych ale vysvětlil proč píšu - jako spousta lidí jsem si vymyslel projekt, který se mi zdá užitečný a zároveň i ne nemožný naprogramovat. Jedná se o samozalévací systém. Nějakou základní kostru první verze programu jsem si vymyslel a začal po malých částech programovat...Bohužel, mé začátečnické znalosti mě zastavily poměrně záhy. Sedím nad tímhle poměrně dlouho a protože doopravdy nevím už kudy kam, tak jsem spolkl všechnu svou pýchu a rozhodl se, že se zeptám Vás - zkušenějších a moudřejších.
Bude se jednat o samozavlažovací systém, kde bude celkově 5 rostlin- všechny budou mít svůj vlhkoměr v hlíně. Ze začátku vše testuju ale pouze na 1 - 2 rostlinách, kde již mám zastrčené senzory vlhkosti v půdě. Z nějakého předchozího testování vím, že na nějakou konkrétní hodnotu se nedá spolehnout a proto chci počítat nějakou průměrnou hodnotu všech truhlíků. Pokud bude překročena určitá průměrná hodnota, program bude pokračovat dál...
Konktrétní problém se jedná v tom, že jsem si vytvořil return funkci (zjistiVlhkost, viz. níže přiložená část kódu), která mi načítá během zadaného časového úseku v určitých intervalech hodnotu vlhkosti z jednoho vlhkoměru. Return je průměr naměřených hodnot. Funkce funguje ok, ale pouze pro jeden vlhkoměr. Pokud mám zapojené na arduinu vlhkoměry dva, tak první se změrí v pohodě (rozsah se pohybuje cca od 200 - 1000), ale druhý už naměří hodnoty, které ne, že jsou odchýlené- jsou úplně mimo. A taky se nemění v čase. Hodnoty se pobybují od 8 - 18 a výše nejdou ani po několika dnech.
Má otázka zní následovně. Co dělám špatně, že arduino mi nedokáže změřit dvě najednou zapojená čidla? Předem děkuji za jakoukoliv reakci. Přeji hezký den
P.S. omlouvám se za tu roztahanost textu, je to holt můj styl vyjadřování se na papíře
Ještě pár poznámek:
- napájení vlhkoměrů řeším pomocí digitálních pinů 2 a 4, místo 3.3V, protože nechci aby jely nonstop a tím bych zkracoval jejich životnost. Vždy jen zapnu na změření a opět je vypínám.
- zjisťuji analogovou hodnotu vlhkoměru
- nemyslím si, že by problém by ve funkci, spíš ve špatném zapojení vlhkoměrů na arduino. Mohl bych je zapojit na 3.3V, nicméně nevím, jak bych je vypnul aby nejely nonstop, popřípadě jak se v programu adresovat na konkrétní vlhkoměr.
- jsem začátečník, ale rozhodně nehodlám s tím seknout, protože mi někdo na netu řekne ať to udělám, když nic nevím, tak prosím na to myslete při tvorby odpovědi
- o vadné vlhkoměry se nejedná, dohromady jich mám už doma 5 ks a samostatně fungujou všechny OK
Kód: Vybrat vše
void setup() {
Serial.begin(9600);
pinMode(vlhA0, INPUT);
pinMode(vlhA1, INPUT);
pinMode(vlh0VCC, OUTPUT);
pinMode(vlh1VCC, OUTPUT);
digitalWrite(vlh0VCC, LOW);
digitalWrite(vlh1VCC, LOW);
}
//Kód funkce
int zjistiVlhkost(int vlhkomerVcc, int vlhkomerAnalog, int interval, int pocetOpak){
int opak = 0;
long int prubeznaHodnota = 0;
int prumernaHodnota = 0;
while(opak != pocetOpak){
digitalWrite(vlhkomerVcc, HIGH);
int analog = analogRead(vlhkomerAnalog);
digitalWrite(vlhkomerVcc, LOW);
prubeznaHodnota = prubeznaHodnota + analog;
delay(interval);
opak = opak + 1;
}
prumernaHodnota = prubeznaHodnota / pocetOpak;
return prumernaHodnota;
}