Misura temperatura liquido

Tesine 2015-18

Scritto da Attili Michael

Attili Michael - Classe 5A-IPAI -  Esame di Stato: 2016-2017          UK
Misura temperatura liquido
Applicazione con Arduino e sensore Waterproof DS18B20

Descrizione:
Il circuito è in grado, attraverso una sonda DS18B20 di rilevare la temperatura di un liquido e determinare tramite software, nell'arco di un intervallo di tempo la Tmin e la Tmax. I dati acquisiti vengono visualizzati sul display.
In figura 1 è riportato lo schema elettrico e la foto dell'assemblaggio del sistema.
Schema elettrico assemblaggio2 attili

Lo schema è costituito dalle seguenti parti/moduli
a) Arduino UNO
b) Sensore di temperatura DS18B20 Waterproof
c) Display LCD I2C 20x4
d) Gruppo led Verde/Rosso (avviso luminoso)

 

 

 

 

 

 

a) Arduino UNO: Sistema di sviluppo programmabile
Arduino è un sistema (framework) open source che permette la prototipazione rapida e l'apprendimento veloce dei principi fondamentali dell'elettronica e della programmazione. È composto da una piattaforma hardware per il physical computing sviluppata presso l'Interaction Design Institute, un istituto di formazione post- dottorale con sede a Ivrea, fondato da Olivetti e Telecom Italia.  Questa si basa su un circuito stampato che integra un microcontrollore con pin connessi alle porte I/O, un regolatore di tensione e un'interfaccia USB che permette la comunicazione con il computer. A questo hardware viene affiancato un ambiente di sviluppo integrato (IDE) multipiattaforma (Linux, Apple Macintosh e Windows). Questo software permette di scrivere programmi (sketch ) con un linguaggio semplice e intuitivo derivato da C/C++ chiamato Wiring (cablare, collegare con cavi).  Arduino può essere utilizzato per lo sviluppo di oggetti interattivi stand-alone (funzionare da solo)ma può anche interagire, tramite collegamento, con software residenti su computer. La particolarità del progetto è che le informazioni sull'hardware e soprattutto i progetti sono disponibili per chiunque: si tratta quindi di un hardware open source.

Specifiche tecniche Arduino UNO    

Microcontrollore: 

Atmel ATmega328 arduinouno     
Tensione operativa: 5V
Input Voltage: (consigliata) 7-12V
Input Voltage: (limiti) 6-20V 6-20V
Pin di I/O Digitali:  20 (6 PWM)
Canali di Input Analogici: 6
DC Current per I/O Pin:  40 mA
DC Current per Pin alimentati a 3.3V 50 mA
Flash Memory:  32 KB di cui 0,5 KB usata dal bootloader
SRAM: 2 KB
EEPROM 1 KB
Frequenza di Clock 16 MHz

b) Sensore di temperatura DS18B20 Waterproof
ds18b20w1Sensore di temperatura digitale DS18B10 prodotto dalla Maxim, inglobato in contenitore a tenuta stagna, completo di cavo a 3 fili. Riporta la temperatura in un range da -55 a 125°C con una precisione di +/- 0,5 ed una risoluzione impostabile da 9 a 12bits. Ogni sensore possiede un numero seriale a 64bit che permette di utilizzare più sensori sulla stessa linea di comunicazione. Questo tipo di sensore è molto diffuso e ci sono molti tutorial in rete che insegnano ad utilizzarlo. Per il funzionamento è richiesta una resistenza 4.7 Kohm, detta resistenza di pull-up, essa viene posta tra il cavo del segnale ed il positivo (cavo rosso). Oltre alla modalità di alimentazione normale che prevede l'utilizzo di 3 fili è possibile sfruttare un'altra utile caratteristica che prevede una modalità di alimentazione parassita, la quale consente di prelevare la tensione di alimentazione direttamente dalla linea dati e di ridurre quindi a 2 il numero di collegamenti necessari. La sonda ha un diametro di 7mm ed è lunga circa 26mm, la lunghezza totale del cavo è di circa 2metri.

 

 c) Display LCD I2C 20x4

displayUKThis module LCD 20x4 (20 characters and 4 lines), is based on the HD44780 controller. It has white character for a further legibility, a trimmer for regolate contrast and the blue backlight. Another important feature of this LCD module is the integrated I2C communication interface located on the backside which simplify the use of this module.

Specification: 
Supply voltage: 5V
Interface: I2C -  I2C address: 0x27 - Pin definition: GND- VCC- SDA- SCL
Contrast adjust: potentiometer
The module is a low-power consumption character LCD module with a built-in controller
The module can be easily interfaced with a MCU
Display format: 20 Characters x 4 lines
Fully assembled and tested serial LCD 20 x 4 module

White text- blue backlight - 
Size: 9.8 x 6 x 1.2mm
 

ita

Questo modulo LCD 20x4 (20 caratteri e 4 linee) è basato sul controllore HD44780. Dispone di caratteri bianchi per una maggior leggibilità, di un trimmer per la regolazione del contrasto e di retroilluminazione blu selezionabile tramite un ponticello. Un'importante caratteristica di questo modulo LCD è l'interfaccia di comunicazione I2C integrata posta sul retro che e rende estremamente semplice l'utilizzo con arduino. 

d) Gruppo led Verde/Rosso (avviso luminoso)
gruppo LEDNell' applicazione possiamo trovare due led, uno rosso e uno verde, montati in serie con una resistenza da 330ohm.

La loro funzione è quella di indicare il range della temperatura, perchè attraverso il programma sappiamo che se la temperatura è maggiore di 25 gradi si accenderà il led verde(Tmax), mentre se la temperatura (Tmin) è minore di 25 gradi si accenderà il led rosso.

 

 

 

 

 

 

 

 

 

 

 

 

Software

Di seguito è riportato il software (Sketch) di gestione

/*
Misura temperatura liquido
Applicazione con Arduino e sensore Waterproof DS18B20
--- Attili Michael - Esame di Stato A.S.2016-2017 - CL:5AIPAI
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
float Tmin, Tmax, Tliq;
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);// Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire);// Pass our oneWire reference to Dallas Temperature.

void setup()
{
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Temperatura Liquido");
lcd.setCursor(0,1);
lcd.print("Temp= ");
lcd.print(char(223));
lcd.print("C");
lcd.setCursor(0,2);
lcd.print("TMin= ");
lcd.print(char(223));
lcd.print("C");
lcd.setCursor(0,3);
lcd.print("TMax= ");
lcd.print(char(223));
lcd.print("C");
sensors.begin();// Start up the library
Tmin=sensors.getTempCByIndex(0);
Tmax=sensors.getTempCByIndex(0);
}

void loop()
{
sensors.requestTemperatures(); // Send the command to get temperatures
Tliq=sensors.getTempCByIndex(0);
if (Tliq<=Tmin){Tmin=Tliq;}
if (Tliq>=Tmax){Tmax=Tliq;}
lcd.setCursor(5,1);
lcd.print(Tliq, 2);
lcd.setCursor(5,2);
lcd.print(Tmin, 2);
lcd.setCursor(5,3);
lcd.print(Tmax, 2);
if(Tliq>=25.00)
{
digitalWrite(9,HIGH);
digitalWrite(8,LOW);
}
else
{
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
}
delay (500);

}

Bibliografia:
1) Appunti scolastici
2)