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:

image-14