In acest articol vom folosi senzorul de temperatura DS18B20.
Acest senzor poate citi valorile intre -55 si +125 grade Celsius.
Acurtetea acestui senzor este de + 0,5 grade Celsius iar alimentarea lui se face intre 3,3 si 5V.
Acest senzor vine in formatul TO-92 (casula uzuala a unui tranzistor de semnal mic) si are nevoie de un rezistor pullup de 4,7 KiloOhmi intre terminalul de date si pinul de alimentare.
De asemenea acest senzor se mai gaseste incapsulat pentru a putea fi folosit in diferite lichide.
Pentru a putea folosi acest senzor vom avea nevoie de 2 biblioteci aditionale: OneWire Library si Dallas Library.
Conectarea la Arduino se face pe un singur fir si se poate folosi orice pin digital avem la dispozitie. In cazul nostru vom conecta senzorul la pinul D22 al Arduino Mega.
Sketchul folosit pentru monitorizarea temperaturii pe terminalul serial este urmatorul:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 22 //pinul digital unde conectam senzorul
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress senzor;
void setup(void)
{
Serial.begin(9600);
Serial.println("Testare senzor DS18B20 impreuna cu Arduino");
sensors.begin();
}
void loop(void)
{
Serial.print("Citire temperatura...");
sensors.requestTemperatures();
Serial.println("OK");
if (sensors.getAddress(senzor, 0)) {
float tempC = sensors.getTempC(senzor);
Serial.print("Temp: ");
Serial.print(tempC);
Serial.print(" ºC");
Serial.print(" Temp: ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
Serial.println(" ºF");
}
delay(1000);
}
De asemenea putem afisa temperaturile si pe un display LCD 2004.
Conectarea displayului este conform informatiilor din acest articol.
Codul folosit este in sketchul de mai jos:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 22 //pinul digital unde conectam senzorul
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress senzor;
byte celsius[] = {
B00110,
B01001,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000
};
void setup()
{
sensors.begin();
lcd.begin(16,4);
lcd.setCursor ( 0, 0 );
lcd.print (" www.");
lcd.setCursor (0, 1 );
lcd.print ("electronicstore");
lcd.setCursor (0, 2 );
lcd.print (" .ro");
lcd.setCursor (0, 3 );
lcd.print ("****************");
delay (1000);
lcd.clear();
lcd.setCursor ( 0, 0 );
lcd.print ("Testarea senzor");
lcd.setCursor (0, 1 );
lcd.print ("DS18B20 ");
lcd.setCursor (0, 2 );
lcd.print ("");
lcd.setCursor (0, 3 );
lcd.print ("****************");
delay (1000);
lcd.clear();
lcd.createChar(0, celsius);
}
void loop() {
//lcd.clear();
sensors.requestTemperatures();
if (sensors.getAddress(senzor, 0)) {
float tempC = sensors.getTempC(senzor);
lcd.setCursor (0, 0 );
lcd.print ("Temperatura... ");
lcd.setCursor(0, 1);
lcd.print(tempC);
lcd.print(" ");
lcd.write(byte(0));
lcd.print("C");
lcd.setCursor(0, 2);
lcd.print(DallasTemperature::toFahrenheit(tempC));
lcd.print(" ");
lcd.write(byte(0));
lcd.print("F");
} else {
lcd.clear();
lcd.setCursor (0, 0 );
lcd.print ("Senzor defect!");
}
delay (100);
}
Mai jos un filmulet cu montajul in functiune:
Lasa un comentariu