Analiza koda
Analiza koda
Analizirajmo u nastavku značenje linija koda koje se primjenjuju na softver pametnih uređaja za navodnjavanje.
Na početku programa definiramo neke varijable (adc_id, HistoryValue i printBuffer) kako bismo pohranili broj porta senzora, povijesnu vrijednost (za daljnju usporedbu) i niz za slanje predavanja na serijski port:
int adc_id = 0;
int HistoryValue = 0;
char printBuffer[128];Sljedeća linija definira Arduino pin koji se koristi za upravljanje relejem:
const int RELAY_PIN = A5; // the Arduino pin, which connects to the IN pin of relay
Te se linije izvršavaju jedanput:
● Serial.start otvorenu serijsku komunikaciju na 9600 baud stopa.
● pinMode inicijalizira relejni pin (A5) kao izlazni pin.
● digitalWrite isključuje pumpu (kako bi bili sigurni da je pumpa isključena kada se Arduino pokrene).
void setup()
{
Serial.begin(9600);
pinMode(RELAY_PIN, OUTPUT); // initialize digital pin A5 as an output.
digitalWrite(RELAY_PIN, LOW); // turn off pump
}
Pogledajmo sada prazninu petlje() skupine uputa. Sljedeći redak čita vrijednost iz senzora (A0):
int value = analogRead(adc_id); // get adc value from A0
Ovdje uspoređujemo HistoryValue. Te se linije izvršavaju samo ako je varijacija predavanja veća od deset (radi usporedbe s posljednjim predavanjem). Cilj je pratiti samo značajne varijacije. Funkcija sprintf gradi i sprema lanac za printBuffer varijablu, a zatim (Serial.print) šalje lanac na serijski port za nadzor (vrijednosti možete vidjeti otvaranjem Monitor kartice na lijevoj strani Arduino Web Editor). Konačno, HistoryValue se postavlja na zadnju vrijednost:
if(((HistoryValue >= value) && ((HistoryValue - value) > 10)) || ((HistoryValue < value) && ((value - HistoryValue) > 10)))
{
sprintf(printBuffer,"ADC%d level is %d\n",adc_id, value);
Serial.print(printBuffer);
HistoryValue = value;
}
Sljedećim se crtama utvrđuje odnos između senzora (senzora za otkrivanje razine vode) i aktivatora (pumpe za vodu). Nakon što je senzor fiksiran u konačnom položaju (u vodi) i spojen na Arduino Uno kontroler, trebali bismo pratiti niži i viši vodostaj. Zatim moramo urediti usporedbe i staviti ispravne vrijednosti gdje bi se crpka trebala uključiti ili isključiti:
if(value < 50) // parameter should be adjusted to the waterer low level
{
digitalWrite(RELAY_PIN, HIGH); // turn on pump
}
if(value > 600) // parameter should be adjusted to the waterer high level
{
digitalWrite(RELAY_PIN, LOW); // turn off pump
}
Nakon što je kod sastavljen i prenesen na Arduino Uno ploču, serijski monitor prikazuje vrijednosti očitanja senzora:
