[PRZYKŁAD] Analogowy czujnik pH Gravity oraz KAmduino UNO
Teraz można przejść do projektowania kodu na platformę Arduino. Firma DFRobot dostarcza przykładowego kodu do obsługi sensora na swojej stronie wiki (Dostępny także w sekcji „do pobrania”). Kod mierzy napięcie na czujniku, uśrednia pomiary oraz oblicza na jego podstawie pH i wyświetla je na porcie szeregowym.
Rys. 3. Działanie przykładowego kodu firmy DFRobot
Kod został przeze mnie zmodyfikowany tak, aby wartości pH były wyświetlane na ekranie LCD oraz w zależności od charakteru odczynu zapalała sie odpowiednia dioda. Musiałem też wymusić zmianę pinu analogowego, na którym wykonywany jest pomiar, gdyż pin A0 jest zajęty przez przyciski nakładki.
Na początku kodu umieściłem definicje pinów diod oraz czujnika. Dodałem także bibliotekę odpowiedzialną za obsługę ekranu LCD – LiquidCrystal.
#include "LiquidCrystal.h" //włączenie biblioteki odpowiedzialnej za obsluge LCD #define SensorPin A3 //pin czujnika #define LED_R 13 //definicje pinów diod LED #define LED_G 12 #define LED_B 11
Dalej znajduje się definicja ekranu LCD razem z przypisaniem pinów:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // inicjalizacja klasy obslugi ekranu LCD
W funkcji setup znajduje się inicjalizacja pinów obsługujących diody oraz ekranu LCD:
void setup(void) { pinMode(LED_R,OUTPUT); // inicjalizacja pinów diod LED pinMode(LED_G,OUTPUT); pinMode(LED_B,OUTPUT); lcd.begin(16,2); //inicjalizacja ekranu LCD }
W pętli głównej została dodana obsługa ekranu LCD. Na ekranie są wyświetlane wyniki pomiaru.
/* Wypisanie obsługi na ekran LCD*/ lcd.setCursor(0,0); lcd.print ("Pomiar pH: "); lcd.setCursor(0,1); lcd.print (pHValue);
Ponadto został zaprogramowany wskaźnik charakteru odczynu za pomocą trzech kolorowych diod LED:
/*Zapalanie odpowiedniej diody*/ if (pHValue > 6.5 & pHValue < 7,5) { digitalWrite(LED_R, 1); digitalWrite(LED_G, 0); digitalWrite(LED_B, 1); } if (pHValue <= 6.5) { digitalWrite(LED_R, 0); digitalWrite(LED_G, 1); digitalWrite(LED_B, 1); } if (pHValue >= 7.5){ digitalWrite(LED_R, 1); digitalWrite(LED_G, 1); digitalWrite(LED_B, 0); }
Działanie przykładu zaprezentowano na poniższym materiale wideo: