Pierwszy program: odczyt temperatury
Okej, to jak już się przebiliśmy przez cały proces konfiguracji to możemy wyświetlić nasze dane:

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <OneWire.h> //dodaj biblitekę LiquidCrystal.h #include <DallasTemperature.h> //dodaj biblitekę LiquidCrystal.h #include <LiquidCrystal.h> //dodaj biblitekę LiquidCrystal.h int one_wire = 10; //Transmisja 1-Wire na pinie 10 OneWire oneWire(one_wire); //wywołujemy transmisję 1-Wire na pinie 10 DallasTemperature sensors(&oneWire); //informujemy Arduino, ze przy pomocy 1-Wire //chcemy komunikowac sie z czujnikiem LiquidCrystal lcd(3,4,5,6,7,8,9); //konfiguracja pinów dla LCD byte znak_stopnia[8] = { //tworzymy znak stopnia 0b00100, 0b01010, 0b10001, 0b01010, 0b00100, 0b00000, 0b00000, 0b00000 }; void setup(void) { lcd.createChar(0, znak_stopnia); //utworz znak stopnia sensors.begin(); //rozpocznij odczyt z czujnika lcd.begin(20,4); //ustaw rozdzielczość ekranu 20x4 } void loop(void) { sensors.requestTemperatures(); //zazadaj odczyt temperatury z czujnika lcd.clear(); //wyczysc ekran lcd.setCursor(0,0); //ustaw kursor w pozycji 0,0 lcd.print("Temperatura: "); //wyswietl "Temperatura: " lcd.print(sensors.getTempCByIndex(0)); //wyswietl wartosc z czujnika 0 lcd.print((char)0); //wyswietl znak stopnia lcd.print("C"); delay(50); //odczekaj 50ms } |
Najpierw dodajemy do naszego programu biblioteki obsługujące 1-Wire, czujniki Dallas i wyświetlacz LCD. Następnie przypisujemy alias pinowi odpowiedzialnemu za transmisję 1-Wire. Teraz wywołujemy tą transmisję oraz „chęć komunikacji” z czujnikiem DS18B20. Następnie wpisujemy konfigurację pinów dla LCD oraz konfigurację znaku stopnia. W setup() tworzymy znak stopnia z konfiguracji, rozpoczynamy transmisję z czujnika oraz ustawiamy rozdzielczość ekranu 20×4. W pętli głównej programu na samym początku powinniśmy zażądać odczytu danych z czujnika. Teraz przygotowujemy nasz ekran do działania. W tym celu czyścimy go pozbywając się śmieciowych danych z linii transmisyjnej. Ustawiamy kursor w pozycji 0,0, czyli lewy górny róg. Następnie przechodzimy do wyświetlenia wartości temperatury. Wyświetlamy napis temperatura, a następnie przy pomocy funkcji sensors.getTempCByIndex(0) wyświetlamy naszą temperaturę. Na sam koniec dodajemy znak stopnia oraz literkę C. Pętlę główną zamyka opóźnienie 50ms, aby odczyt był w miarę szybko aktualizowany.
Po zastosowaniu takiego programu powinniśmy otrzymać efekt jak poniżej:

Gdy już nasz program spełnia podstawową funkcję to teraz możemy pomyśleć nad lekkim rozbudowaniem naszego programu.
Przykład realizacji alarmu:
Skoro nasza funkcja sensors.getTempCByIndex(0) podaje wartość dziesiętną naszej temperatury to na jej podstawie możemy stworzyć prosty alarm. Założenie. Jeżeli wartość temperatury będzie równa lub większa 30 stopni Celsjusza to włącz alarm w przeciwnym wypadku nie włączaj.

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#include <OneWire.h> //dodaj biblitekę LiquidCrystal.h #include <DallasTemperature.h> //dodaj biblitekę LiquidCrystal.h #include <LiquidCrystal.h> //dodaj biblitekę LiquidCrystal.h int one_wire = 10; //Transmisja 1-Wire na pinie 10 int buzzer = 12; //pin 12 jako buzzer LiquidCrystal lcd(3,4,5,6,7,8,9); //konfiguracja pinów dla LCD OneWire oneWire(one_wire); //wywołujemy transmisję 1-Wire na pinie 10 DallasTemperature sensors(&oneWire); //informujemy Arduino, ze przy pomocy 1-Wire //chcemy komunikowac sie z czujnikiem byte znak_stopnia[8] = { //tworzymy znak stopnia 0b00100, 0b01010, 0b10001, 0b01010, 0b00100, 0b00000, 0b00000, 0b00000 }; void setup(void) { lcd.createChar(0, znak_stopnia); //utworz znak stopnia pinMode(buzzer,OUTPUT); //ustawiamy buzzer jako output sensors.begin(); //rozpocznij odczyt z czujnika lcd.begin(20,4); //ustaw rozdzielczość ekranu 20x4 lcd.clear(); //wyczysc ekran } void loop(void) { sensors.requestTemperatures(); //zazadaj odczyt temperatury z czujnika lcd.clear(); //wyczysc ekran lcd.setCursor(0,0); //ustaw kursor w pozycji 0,0 lcd.print("Temperatura: "); //wyswietl "Temperatura: " lcd.print(sensors.getTempCByIndex(0)); //wyswietl wartosc z czujnika 0 lcd.print((char)0); //wyswietl znak stopnia lcd.print("C"); delay(50); //odczekaj 50ms if(sensors.getTempCByIndex(0) >= 30) //jezeli temperatura jest >= 30 digitalWrite(buzzer, HIGH); //uruchom alaram //tutaj mozesz wstawic program odpowiedzialny //np. za uruchomienie chlodzenia aby obnizyc //temperature else //w przeciwnym wypadku digitalWrite(buzzer, LOW); //nie uruchamiaj alarmu } |
Program jest ten sam co wcześniej, tylko dopisaliśmy funkcję warunkową, która będzie uruchamiać alarm. Jak widać nie jest to trudny program. Po wgraniu programu powinniśmy otrzymać taki efekt:
(radzę lekko przyciszyć ze względu na buzzer ;) )