Rilevazione Temperatura Interna-Esterna Liquido

Tesine 2015-18

Scritto da Curreri Gianluca - Del Prete Massimo

Curreri Gianluca - Del Prete Massimo - Classe 5A-IPAI -  Esame di Stato: 2017-2018        UK
Rilevazione Temperatura Interna-Esterna Liquido

Applicazione con Arduino e sensori di temperatura (LM35 e DS18B20Waterproof)

Descrizione generale
L'applicazione, Hardware/Software, basata su Arduino Uno è in grado di misurare la temperatura interna di un liquido, attraverso il sensore di temperatura DS18B20, e la temperatura esterna attraverso il sensore LM35.  Tramite software vengono letti ed elaborati i dati provenienti dai sensori. I valori insieme alla data ed all'ora del RTC DS1307 vengono visualizzati sul display LCD 20x4. Il display oltre alla temperatura attuale visualizza la temperatura minima (m) e la temperatura massima (M) rilevate nell'arco di tempo della misura.

In fig. 1 è riportato lo schema del sistema.

  Schema2   
Il progetto è suddiviso in una parte Hardware ed in una parte Software.
1) Arduino Uno (Sistema di sviluppo programmabile)

2) Sensore Temperatura interna: DS18B20WaterProof
3) Sensore Temperatura esterna: LM35
4) Modulo Orologio RTC DS 1307
5) Display LCD I2C 20x4

 
1) Arduino Uno
itaArduino è un sistema open source che permette la prototipazione rapida e l'apprendimento veloce dei principi fondamentali dell'elettronica e della 
Arduino UNO
programmazione. È composto da una scheda hardware per l'assemblaggio del prototipo. 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). 
In commercio esistono diversi modelli, in tabella sono riportate le caratteristiche tecniche di Arduino Uno.

  • Microcontrollore: ATmega328
  • Tensione operativa: 5 V Alimentazione: - da 7 a 12 V (tramite plug) - 5V (tramite porta USB) - Tensione di alimentazione (limiti): 6-20V
  • Ingressi/uscite Digitali: 14 (di cui 6 possono essere utilizzate come uscite PWM)
  • Ingressi analogici: 6
  • Corrente Dc per pin I/O: 40 mA - Corrente DC per pin 3,3 V: 50 mA
  • Memoria Flash: 32 kB (di cui 0,5 kB utilizzati dal bootloader) - SRAM: 2 kB -EEPROM: 1 kB
  • Velocità di Clock : 16 MHz

UKArduino is an open source system that allows rapid prototyping and fast learning of the fundamentals of electronics and programming. It consists of a hardware board for assembling the prototype. This is based on a circuit board that integrates a microcontroller with pins connected to the I / O ports, a voltage regulator, and a USB interface that allows communication with the computer. This hardware is complemented by a multi-platform integrated development environment (IDE) (Linux, Apple Macintosh, and Windows). This software allows you   write sketches with a simple and intuitive language derived from C / C ++ called Wiring (cabling, wiring).

2) Sensore Temperatura interna: DS18B20WaterProof
ds18b20 aIl Sensore di Temperatura DS18B20 Waterproof è una versione impermeabile del DS18B20 standard utilizzabile per effettuare misure per immersione o su superfici bagnate. Essendo un sensore digitale non si rischia che il segnale venga degradato anche sulle lunghe distanze. Il DS18B20 si collega tramite una interfaccia 1-Wire ed è in grado di effettuare delle letture con risoluzone a 9 oppure a 12 bit. Poiché ogni DS18B20 è identificato da un indirizzo univoco possono essere utilizzati diversi sensori sullo stesso bus 1-Wire, permettendo di effettuare delle misure in luoghi diversi. Per evitare di danneggiare la guaina di copertura è consigliabile operare sotto i 100 °C.
Caratteristiche tecniche:

  • Interfaccia 1-Wire
  • Allarme definibile dall'utente su temperatura mnima e massima (memorizzato nella memoria non volatile)
  • Può essere alimentato tramite il bus dati da 3.0V a 5.5V
  • Misura temperature comprese tra –55°C e +125°C
  • Precisione: ±0.5°C da –10°C a +85°C
  • Valore in uscita configurabile tra 9 bit e 12 bit
  • Utilzzabile per la misura della temperatura di liquidi

 

 

3) Sensore Temperatura esterna: LM35

Il sensore LM35 fornisce una uscita analogica proporzionale alla temperatura ambiente.
La costante di proporzionalità ( K ) é di 10mV/°C . Nello zoom della figura è riportato il collegamento con Arduino, la piedinatura ed il grafico della caratteristica di trasferimento.  Es. :ad una temperatura di 20°C il sensore fornisce 200mV (0,2 V). Il valore viene inviato sul piedino Ao di Arduino (canale 0 del convertitore analogico digitale) e, tramite software convertito in digitale e visualizzato sul display.

Caratteristiche tecniche:

Calibrato direttamente in ° Celsius (Centigradi)
Scala lineare + 10.0 mV/?C
Accuratezza garantibile al 0.5°C (a +25?C)
Range misurabile −55° to +150°C
Adatto ad applicazioni remote
Basso costo
Tensione operativa: 4V~30V
Meno di 60 µA di consumo
Non linearita' tipica soltanto±0.25°C  

 

4) Modulo RTC DS1307
Un RTC (Real-Time Clock, orologio in tempo reale, è un dispositivo con funzione di orologio, solitamente costituito da un processore a circuito integrato specializzato per questa funzione, il quale conteggia il tempo reale (anno, mese, giorno, ore, minuti e secondi) anche quando l'utilizzatore viene spento. Viene usato in molti tipi di computer ed è presente in tutti i PC. L'RTC è presente anche in molti sistemi embedded nonché viene utilizzato anche in circuiti elettronici dove è necessario avere un preciso riferimento temporale.
Alcuni modelli di RTC integrati sono il DS1307 di Maxim, il PCF8563 di NXP Semiconductors (ex Philips) e le diverse soluzioni di Integrated Device Technology (IDT).
Per poter mantenere il conteggio del tempo anche a circuito non alimentato, i real-time clock hanno un oscillatore al quarzo a loro dedicato e sono alimentati da una speciale batteria autonoma rispetto all'alimentazione principale; in alcuni tipi anche il quarzo è installato all'interno del package. Al contrario, i clock che non sono real-time non funzionano quando il dispositivo è spento.

Gli RTC furono introdotti nei computer agli inizi degli anni ottanta: uno dei primi ad integrare un orologio in tempo reale fu l'Apple III. Successivamente anche IBM utilizzò un RTC nel suo PC AT del 1984, che integrava un RTC MC146818. Successivamente anche Dallas Semiconductor realizzò degli RTC. Gli orologi in tempo reale erano facilmente individuabili sulle schede madri dei vecchi PC grazie alla batteria tampone che avevano vicino e a dei disegni che indicavano la funzione del chip. Nei computer più recenti gli RTC sono integrati direttamente nel chipset del sistema. Gli RTC non devono essere confusi con il real-time o il clock della CPU.

Questo modulo è basato sul chip DS1307, orologio/calendario a basso consumo che implementa anche 56 bytes di memoria SRAM non volatile; il modulo RTC fornisce informazioni su secondi, minuti, ore, giorno, mese e anno. La data del fine mese è riconosciuta automaticamente per quei mesi con meno di 31 giorni, inclusi anche gli anni bisestili; l'orologio può operare sia in modalità 24-ore sia in modalità 12-ore con indicazione AM/PM.
Il modulo RTC utilizza il protocollo I2C per comunicare con Arduino tramite i pin analogici A5 (SCL) e A4 (SDA). Il DS1307 opera come slave sul bus I2C ed è allocato all’indirizzo 0x68 (Nel linguaggio C si usa il suffisso 0x per indicare un numero esadecimale).

5) Display LCD I2C 20x4

lcd1a

Modulo LCD 20x4 dispone di 4 righe e 20 colonne è basato sul controller HD44780; dotato di retroilluminazione blu, caratteri bianchi, regolazione del contrasto e di un'interfaccia di comunicazione I2C.Lo schermo a cristalli liquidi (LCD) è un display a schermo piatto, una visualizzazione elettronica o un video che utilizza le proprietà modulanti della luce dei cristalli liquidi. I cristalli liquidi non emettono direttamente la luce. Come mostrato nell'immagine, un'importante caratteristica di questo modulo LCD è l'interfaccia di comunicazione I2C integrata posta sul retro che ne rende estremamente semplice l'utilizzo con Arduino.

Il modulo è dotato di 4 pin (Alimentazione: Vcc, Gnd) e (Dati: SDA, SCL)
Questo modulo permette di comunicare con un display LCD mediante il protocollo I2C che impegna quindi due sole porte. (Dati: SDA, SCL) oltre ai due terminali di alimentazione (VCC, GND).

Sul modulo è presente un potenziometro per la regolazione del contrasto ed un jumper rimovibile per l'attivazione della retroilluminazione. Se il jumper viene rimosso e tra i due pin viene inserita una resistenza, si può modificare l'intensità di retroilluminazione (ad esempio con una resistenza da 470 ohm 1/4w l'intensità si dimezza). Il display visualizza la temperatura interna tramite ds18b20 (Ti), la temperatura esterna tramite LM35 (Te), la temperatura massima (M) e minima (m) delle misure effettuate nell'arco di tempo di utilizzo del dispositivo.

Settaggio dell'indirizzo del modulo
Sono inoltre presenti tre connessioni denominate A1, A2 e A3 per il settaggio (a 3-bit) dell'indirizzo I2C tra 0x20 e 0x27. L'indirizzo di default è 0x27 (A0, A1 e A2 lasciati aperti). La chiusura di una coppia si effettua collegando tra loro le due rispettive piazzole. E’ ovvio che tale indirizzo hardware deve coincidere con l’indirizzo I2C nel software/libreria di gestione del Modulo. Il display viene gestito tramile la libreria LiquidCrystal_I2C.h.

 

Software
Di seguito è riportato il software (Sketch) di gestione

/*
--- Rilevazione parametri di un liquido:
--- Temperatura Interna-Esterna, applicazione con Arduino e sensori
----Temperatura: LM35 e DS18B20Waterproof
--- IPSIA - Antonio Guastaferro - San Benedetto del Tronto
--- Curreri Gianluca - Del Prete Massimo
--- Esame di Stato: 2017-2018 - CL:5A-IPAI
*/
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27,20,4);
RTC_DS1307 rtc;
#define DS1307_I2C_ADDRESS 0x68
float tot=0;
float Tint, Timin, Timax, Text, Temin, Temax ;
int Valore;
char ora[9];
char data[12];
void setup() {
Wire.begin();
sensors.begin();
rtc.begin();
//rtc.adjust(DateTime(__DATE__, __TIME__));
Timin=sensors.getTempCByIndex(0); Timax=Timin;
Temin=(4.8*analogRead(A0)/1024.0)/0.01;Temax=Temin;
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0); lcd.print("Parametri - Liquido");
lcd.setCursor(0,2); lcd.print("Temperatura-Int/Est");
delay(4000);
lcd.clear();
}
void loop()
{
DateTime now = rtc.now(); // Legge i dati dal modulo rtc DS1307
sprintf(data,"%02d-%02d-%d", now.day(), now.month(), now.year()); // Composizione stringa data
sprintf(ora, "%02d:%02d:%02d",now.hour(),now.minute(),now.second());// Composizione stringa ora
sensors.requestTemperatures(); // Invia il comando di lettura delle temperatura Interna
Tint=sensors.getTempCByIndex(0); //Lettura temperatura interna
if (Tint<=Timin){Timin=Tint;}
if (Tint>=Timax){Timax=Tint;}
Text=(5.0*analogRead(A0)/1024.0)/0.01;
if (Text<=Temin){Temin=Text;}
if (Text>=Temax){Temax=Text;}
// Visualizza i dati acquisiti ed elaborati sul display LCD 20x4
lcd.setCursor(0,0);lcd.print(data);lcd.setCursor(12,0);lcd.print(ora);
lcd.setCursor(0,2);lcd.print("Ti: C m/M: C");lcd.setCursor(3,2);lcd.print(Tint,1);
lcd.setCursor(13,2);lcd.print(Timin,0);lcd.setCursor(16,2);lcd.print(Timax,0);
lcd.setCursor(0,3);lcd.print("Te: C m/M: C");lcd.setCursor(3,3);lcd.print(Text,1);
lcd.setCursor(13,3);lcd.print(Temin,0);lcd.setCursor(16,3);lcd.print(Temax,0);
delay(1000); // Ritardo
}

 

 

Allegati:
Scarica questo file (ARDUINO_V2-PinOut.pdf)Arduino Uno [PinOut Diagram]243 kB
Scarica questo file (DS18B20.pdf)DS18B20[DataSheet]426 kB
Scarica questo file (lm35.pdf)LM35[DataSheet]1683 kB