Un termometru ușor de construit cu o placă de dezvoltare Arduino, un senzor digital DS18B20 și un LCD.
DS18B20 este un integrat programabil ce include memorie EEPROM. Această memorie poate fi utilizată pentru programarea unor praguri de alarmă. La fiecare citire a temperaturii, DS18B20 compară valoarea cu pragul de alarmă, și dacă este cazul setează un bit ce poate fi citit de procesor.
Montajul prezentat nu utilizează memoria integratului. Temperatura citiă este afișată pe un ecran LCD 16x2. Temperatura minimă și cea maximă, înregistrate de la începutul execuției programului sunt afișate de asemenea, pe al doilea rând al ecranului LCD. Aceste temperaturi sunt resetate o dată cu resetarea procesorului.
![]() |
Termometru cu senzor DS18B20 și afișaj 16x2 |
LCD-ul este conectat la placa de dezvoltare urmând conexiunile shield-ului cu keypad pe care l-am folosit (a se vedea poza de sus). Acest shield nu este necesar pentru realizarea montajului, LCD-ul putând fi conectat direct la placa de dezvoltare, așa cum se vede în schema realizată cu Fritzing. De asemenea, eu am folosit un senzor montat pe o plăcuță, ce face parte dintr-un kit de senzori.
Codul sursă este următorul.
#include <LiquidCrystal.h> #include <OneWire.h> #include <DallasTemperature.h> #define SIMBOL_GRAD (char)223 float minTemp = 200, maxTemp = 0; // memoreaza minima, respectiv maxima // minima si maxima sunt resetate o data cu procesorul // LCD conectat conform schemei shield-ului LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Senzorul de temperatura este conectat la pinul 2 OneWire w1(2); DallasTemperature sensor(&w1); void setup() { pinMode(10, INPUT); // necesar doar pentru shield-ul LCD lcd.begin(16, 2); // initializeaza LCD-ul cu 2 randuri de 16 caractere lcd.print("Actual: "); sensor.begin(); // initializeaza senzorul } void loop() { // citire temperatura sensor.requestTemperatures(); float tempActual = sensor.getTempCByIndex(0); lcd.setCursor(8, 0); if ((tempActual < 100) && (tempActual > 0)) lcd.print(' '); // pentru temperaturi de 2 cifre lcd.print(tempActual, 2); // se afizeaza, cu 2 zecimale lcd.print(SIMBOL_GRAD); lcd.print('C'); if (tempActual < minTemp) { // am citit o minima minTemp = tempActual; // se memoreaza lcd.setCursor(0, 1); // si se afizeaza if ((minTemp < 100) && (minTemp > 0)) lcd.print(' '); lcd.print(minTemp, 2); lcd.print(SIMBOL_GRAD); } if (tempActual > maxTemp) { // am citit o maxima maxTemp = tempActual; // se memoreaza lcd.setCursor(8, 1); if ((maxTemp < 100) && (maxTemp > 0)) lcd.print(' '); lcd.print(maxTemp, 2); lcd.print(SIMBOL_GRAD); } delay(1000); }Temperatura este citită o dată pe secundă. În funcție de temperatura citită, codul sursă poate fi adaptat și montajul extins astfel încât să acționeze diverse dispozitive.
Niciun comentariu :
Trimiteți un comentariu
Vă recomandăm să citiți regulamentul comentariilor înainte de a scrie un comentariu.