temperature - Massari Electronics

  • MassaBus Temperature Sensor

    I DISPOSITIVI MASSABUS SONO ORA IN VENDITA COMPLETI E AGGIORNATI QUI!

    La scheda Temperature sensor è una scheda del sistema domotico MassaBus che provvede a misurare la temperatura in un ambiente o su una cosa. Per effettuare ciò utilizza un sensore di temperatura digitale della Dallas Semiconductor DS18S20 che permette di rilevare temperature da -55 a +125°C con una accuratezza di +/- 0,5°C. Essendo il sensore di tipo digitale esso può essere posto anche a distanza di qualche metro dalla scheda di gestione, permettendo l’attacco in maniera semplice su un oggetto di cui vi è necessario monitorare la temperatura.

    SCHEMA A BLOCCHI


    La scheda collegata al bus permette di fornire al sistema MassaBus la temperatura ambientale o di una cosa che potrà essere elaborata dal sistema domotico per eseguire azioni di vario genere. La scheda ha come cuore centrale in microcontrollore PIC 16F628 che si occupa di gestire sia il sensore, sia il bus domotico. La scheda può essere alimentata direttamente con l’alimentazione centralizzata del sistema MassaBus essendo dotata di stabilizzatore.

    Il microcontrollore PIC 16F628

    Il microcontrollore PIC 16F628 fa parte della stessa famiglia del microcontrollore PIC 16F876 utilizzato nella scheda “Multi I/O Device”, pertanto in questo capitolo verranno descritte solo le differenze che presenta rispetto al 16F876. Innanzitutto questo microcontrollore dispone di un package più piccolo a 18 pin , meno periferiche e meno memoria disponibile. Permette però di adattarsi meglio, rispetto al 16F876, ai sistemi più semplici garantendo compattezza e più economicità.


    Le sue principali caratteristiche sono:

    • CPU RISC ad alte prestazioni, cioè dispone di un ridotto set di istruzioni in assembly aventi tempi di esecuzione simile.
    • La maggior parte delle istruzioni richiede un solo ciclo della CPU per essere eseguita, un ciclo corrispondono a 4 impulsi di clock.
    • Supporta differenti tipi di generatori di clock e frequenze di clock fino a 20Mhz, dispone anche al suo interno di un oscillatore RC impostabile a 4 MHz o 37 KHz .
    • Power on timer e watchdog timer e Brown-out Reset.
    • Alto range di tensioni di funzionamento: da 3 a 5,5V.
    • Uscite in grado di supportare fino a 20mA continuativamente.
    • 2Kbyte di memoria FLASH interna.
    • 10 tipi di interrupt supportati.
    • 3 porte di I/O denominate PORTA, PORTB, PORTC.
    • Dispone di molte periferiche interne, tra cui: 3 timer, USART interno implementato a livello hardware e una EEPROM interna di 128 byte.

    In figura sotto è visibile lo schema a blocchi dell’architettura interna del microcontrollore.

    Per la descrizione dei componenti si rimanda alla descrizione fatta nell'articolo di descrizione della scheda "Multi I/O Device" essendo il PIC 16F876 della stessa famiglia del microcontrollore 16F628.

    Sensore di temperatura ad alta precisione DS18S20

    Il sensore di temperatura DS18S20 della Dallas Semiconductor è un trasduttore di temperatura digitale che consente di misurare temperature da -55 a 125°C con una accuratezza di +/- 0,5°C e di fornire direttamente in digitale la temperatura appena misurata. Nella figura superiore è possibile osservare l’aspetto esteriore del sensore di temperatura. Come si può notare esso presenta tre terminali di cui 2 necessari all’alimentazione ed uno per la comunicazione dati. Per la comunicazione questo sensore di temperatura utilizza uno speciale protocollo chiamato OneWire che permette a sensore di comunicare in maniera bidirezionale con un unico filo conduttore.

    Il sensore di temperatura dispone internamente di un convertitore analogico digitale con una risoluzione di 9 bit, di una memoria che mantiene memorizzati gli ultimi valori e alcune impostazioni e di una interfaccia per il controllo del bus OneWire.

    Le sue caratteristiche principali, da datasheet, sono:

    • Protocollo di comunicazione OneWire.
    • Possibilità di connessione multipla avendo ogni sensore un proprio indirizzo.
    • Range di alimentazione da 3 a 5,5V.
    • Range di temperatura misurata da -55 a +125°C.
    • Accuratezza della misura di +/- 0,5°C
    • Risoluzione conversione analogico digitale di 9 bit.
    • Tempo di conversione massimo pari a 750ms.
    • Permette il settaggio di temperature di allarme.
    • Possibilità di alimentare l’unità tramite l’apposito terminale o direttamente dal bus OneWire.

    Per interfacciare il sensore all’unità di controllo (es. microcontrollore) è necessario collegare il pin del protocollo OneWire a un terminale del microcontrollore di tipo Open-Collector (vedere la figura sotto) e collegare una resistenza di pull-up da 4,7K, inoltre è necessario alimentare il sensore tramite l’apposito pin o tramite una speciale modalità che non essendo usata non viene descritta. Per effettuare una misurazione è necessario fornire nel terminale del protocollo OneWire delle parole di comando che fanno capo sempre ad un reset del sensore.

    La misurazione di una temperatura si articola in due fasi: inizio della conversione e lettura della misura nella memoria (la cui struttura è visibile in figura sotto) dopo almeno i 750ms necessari alla conversione. Come si può notare nella struttura della memoria la temperatura viene salvata nei primi due byte della memoria, mentre gli altri byte vengono utilizzati per alcune funzioni non utilizzate nella scheda.

    I primi due byte assumono i valori visibili in figura sotto associati alla temperatura misurata. Si può notare come il primo byte meno significativo rappresenta il valore binario di temperatura convertito (che moltiplicato per 0,5°C fornisce il valore diretto della temperatura in gradi celsius), mentre il secondo byte più significativo rappresenta il segno.

    Nella scheda si è scelto di consentire l’uso di un solo sensore, pertanto in questo caso andranno forniti al sensore una successione di comandi ben definiti senza utilizzare l’indirizzamento opzionale del sensore (per maggiori dettagli fare riferimento al datasheet).

    1. Comando di reset
    2. Comando di salto senza indirizzamento (detto skip rom)
    3. Comando della funzione (es. inizio conversione, lettura etc)

    Per i dettagli sui comandi si faccia riferimento al datasheet e al firmware della scheda descritto di seguito e nei file allegati.

        FIRMWARE DI GESTIONE

        Il firmware di gestione è stato progettato, come per le altre schede aventi microcontrollore PIC, attraverso il compilatore mikroBasic pertanto valgono le stesse considerazioni fatte precedentemente. Il compilatore contiene al suo interno una libreria chiamata OneWire che permette la gestione diretta dei sensori di temperatura DS18S20 e del pin del microcontrollore adibito alla comunicazione con il sensore, attraverso delle subroutine apposite:

        • Ow_Reset(Porta, pin) che effettua il reset del sensore di temperatura e restituisce 1 se il sensore non viene rilevato;
        • Ow_Read(Porta, pin) che permette di leggere un dato nel bus OneWire;
        • Ow_Write(Porta, pin, dato) che permette di scrivere un dato nel bus OneWire.

        Vengono utilizzate inoltre anche le librerie EEPROM per la gestione della omonima memoria e la libreria UART per il controllo della seriale. Essendo il tempo di conversione di 750ms per non rallentare il funzionamento del bus si è scelto di articolare il funzionamento della scheda con due tipi di funzioni normali: una per la partenza della conversone e una per il prelievo del valore convertito.

        Le funzioni svolte dal firmware sono le seguenti:

        • Provvede ad implementare le caratteristiche del protocollo MassaBus nella comunicazione con il bus.
        • La funzione di partenza della conversione della temperatura può essere effettuata singolarmente e in broadcast consentendo di inviare un unico comando di conversione a tutte le schede e permettendo successivamente di prelevare in maniera veloce il valore a tutte le schede senza attendere più volte il tempo di 750ms necessario alla conversione.
        • Il firmware utilizza il timer1 a 16 bit configurato per fornire un interrupt ogni 524ms (come nella scheda Multi I/O Device) che permette di scandire il tempo necessario alla conversione senza impegnare l’esecuzione del programma. Essendo l’unità temporale dell’interrupt di 524ms per effettuare un conversione coprendo i 750ms del sensore sono necessari due interrupt per poter poi prelevare il valore di temperatura.
        • In accordo con le funzioni del sensore la scheda può rilevare la presenza del sensore.
        • Essendo la conversione in broadcast senza conferma, il firmware della scheda può permettere tramite una funzione una sola lettura a conversione, permettendo di capire se il comando era stato ricevuto correttamente.
        • Gestione del transceiver MAX485 per permettere la comunicazione nel bus condiviso.
        • Programmazione degli indirizzi diretta via software.

        Di seguito è possibile osservare il diagramma di flusso del programma inserito nel pic. In esso si fa riferimento a delle procedure esterne (decodifica dati, controllo input e codifica dati) che possono essere ritrovate in dettaglio nel firmware in linguaggio BASIC fornito.

        Nel diagramma di flusso progettato, analogamente a quello della Multi I/O Device, vi è presente un ciclo continuo (LOOP) che si occupa in questo caso principalmente di verificare la fine di un eventuale conversione del sensore iniziata precedentemente e la presenza di dati in transito nel bus. Se la scheda è richiamata (direttamente o tramite indirizzo di Broadcast) il firmware si occupa di effettuare l’operazione richiesta. Come in tutte le schede slave del sistema MassaBus è presente un speciale modalità (selezionabile sulla scheda tramite deviatore) che permette la programmazione degli indirizzi direttamente via software.

         

        Il firmware è disponibile nei download della scheda (a fondo pagina), è comprensivo di sorgenti e file HEX per programmare il microcontrollore.

         

        SCHEMA ELETTRICO

        In figura sopra è visibile lo schema elettrico progettato della scheda sensore di temperatura del sistema MassaBus. Si nota la presenza dello stabilizzatore 7805 (IC4) che provvede a fornire i 5V stabilizzati necessari al corretto funzionamento dei circuiti integrati della scheda. Il microcontrollore PIC (IC1) ha collegato il bus OneWire del sensore attraverso una sua particolare porta con uscita di tipo open-collector chiamata RA4 (presente nel package sul pin 3) e il cui schema interno è visibile in figura sotto dove è evidenziato il particolare circuito di output.

        In questa maniera è possibile utilizzare attraverso tale porta il protocollo OneWire utilizzato dal sensore, anche attraverso l’uso della resistenza di pull-up R3 da 4,7K prevista dal protocollo.

        A sinistra del microcontrollore si può notare il pulsate di reset P1 collegato al pin di reset generale del microcontrollore e i pin che collegano l’interfaccia UART interna al PIC con il transceiver MAX485 ed il relativo dip switch a 3, entrambi descritti nello schema elettrico della scheda Multi I/O Device. Sono presenti inoltre i componenti presenti in tutte le schede slave del sistema MassaBus, ovvero il led di segnalazione attività con l’opportuna resistenza di limitazione della corrente e il deviatore che consente di selezionare la modalità normale o la modalità programmazione. A destra del microcontrollore è presente il quarzo a 4 MHz con i relativi condensatori che garantisce una maggiore stabilità e precisione rispetto all’oscillatore a 4 MHz interno al microcontrollore.

        REALIZZAZIONE PRATICA

        Di seguito è possibile osservare il circuito su PCB, l'immagine è puramente indicativa. Per realizzare le schede fate riferimento ai file allegati. 

        Alcune immagini 

         

        Sono allegati al progetto i file programma del microcontrollore (diagramma per il programma Diagram Designer, programma in basic per mikroBasic Pro, file HEX precompilato da inserire direttamente nel PIC) e i file di realizzazione della scheda (in formato PDF e FidoCAD).

        Nota: Il programma mikroBasic permette nella sua versione gratuita di compilare con funzionalità complete programmi grandi fino a 2Kbyte, il programma di questa scheda è inferiore a questa soglia e pertanto potrete ricompilare a piacimento il programma utilizzando la versione FREE di mikroBasic.

        DOWNLOAD FILE PROGRAMMA MICROCONTROLLORE

         DOWNLOAD FILE REALIZZAZIONE SCHEDA

      • Termostato elettronico

        Il termostato è un dispositivo presente sotto più aspetti nelle nostre case, pensate solo al forno o al frigorifero. Il suo funzionamento è molto semplice: cambiare lo stato di una uscita quando la temperatura dell'ambiente o di una superficie supera o ritorna sotto una certa soglia solitamente impostabile. Spesso i termostati semplici (non i cronotermostati) sono realizzati sfruttando parti meccaniche che attraverso vari fenomeni fisici permettono la commutazione di un contatto elettrico. Questo termostato, invece, sfrutta componenti elettronici per rilevare la temperatura attraverso un sensore mentre lo stato di uscita del termostato è gestito da un comparatore.

        In questo articolo sono presentate due versioni di termostato elettronico: una con e una senza relè. La prima versione è quella con relè.

        VERSIONE CON RELE'

        SCHEMA ELETTRICO

        Osservando lo schema è possibile notare il modulo che provvede ad alimentare il termostato costituito dal classico stabilizzatore 7812 che fornisce al circuito una tensione di 12V stabilizzata partendo dai 15VDC in ingresso (o tensione superiore nei limiti del 7812). Il termostato è poi costituito da un partitore avente una resistenza fissa da 4,7Kohm e una termistore NTC da 4,7Kohm. Il termistore NTC è una particolare resistenza costituita da materiale semiconduttore che ha la particolarità di diminuire la propria resistenza all'aumentare della temperatura (al contrario delle normali resistenze o termoresistenze che, invece, aumentano la propria resistenza all'aumentare della temperatura). Altro particolare differente rispetto alla classiche resistenze è che le NTC non hanno un andamento della propria curva caratteristica lineare ma esponenziale: questo particolare per un termostato, al contrario di un termometro, è relativo visto che basta adattare opportunamente l'eventuale scala del cursore di selezione della temperatura d'intervento. La tensione uscente dal partitore contenente la sonda NTC rappresenta la temperatura convertita in una tensione elettrica infatti a 25°C (il valore di resistenza dell'NTC è riferito solitamente a questa temperatura) si avrà in uscita la metà della tensione di alimentazione del partitore (6V) avendo le due resistenze lo stesso valore in ohm. Se la temperatura sale oltre i 25°C la tensione in uscita dal partitore diminuirà poiché la resistenza NTC presenterà un valore in ohm minore rispetto all'altra resistenza da 4,7Kohm e pertanto la tensione cadrà più sulla resistenza fissa che sulla NTC, al contrario se la temperatura scende la tensione in uscita dal partitore aumenterà essendo il valore in ohm dell'NTC maggiore dell'altra resistenza fissa e pertanto sulla resistenza NTC si avrà una maggiore caduta di tensione. Questo vi permette anche di utilizzare una NTC diversa da 4,7K ohm tanto per mantenere questo funzionamento è sufficiente che le due resistenze del partitore siano uguali, mentre utilizzando valori diversi potrete anche avere vari range di misurazione utilizzando la formula caratteristica dell'NTC o la sperimentazione.


        L'altro partitore permette di selezionare attraverso un trimmer la temperatura di intervento con un range stabilito dalle due resistenze disposte ai capi del trimmer che permette di avere nel cursore come massimo 2/3 e come minimo 1/3 della tensione di alimentazione stabilizzata (queste resistenze possono essere anche un valore minore o addirittura omesse: il range aumenterà ma si avrà una maggiore difficoltà nella taratura). Così costituito il termostato dovrebbe avere un range di intervento dai 10 ai 40°C, ma dipende dalle caratteristiche della sonda NTC. Ovviamente cambiando i valori delle resistenze si possono ottenere altre combinazioni di range: ad esempio eliminando le due resistenze ai capi del trimmer si otterrà una selezione della temperatura più difficoltosa ma si potranno ottenere range che permettono di rilevare anche temperature oltre i 40°C per sostituire i classici termostati a contatto dei tubi di riscaldamento (soluzione adottata dal sottoscritto).

        Successivamente è presente un amplificatore operazionale configurato come comparatore di tensione con isteresi: quando all'ingresso non invertente (+) la tensione del partitore con il trimmer è superiore alla tensione dell'ingresso invertente (-), data dal partitore con la sonda NTC, l'uscita dell'operazionale si attiverà (si avrà in uscita la tensione di alimentazione positiva). Quando invece la tensione dell'ingresso invertente, con la sonda NTC, supererà la tensione dell'ingresso non invertente, data dal trimmer, l'uscita dell'operazione si disattiverà (portando la sua uscita alla tensione di alimentazione negativa). Essendo la tensione invertente data dalla NTC (diminuisce all'aumentare della temperatura) l'operazionale si attiverà solo quando il calore (e quindi l'NTC) farà diminuire la tensione dell'ingresso invertente sotto al livello di tensione impostato con il trimmer all'ingresso non invertente. La resistenza da 220Kohm tra l'ingresso non invertente e l'uscita permette di aggiungere una isteresi al funzionamento, cioè la soglia di tensione cambia in attivazione e disattivazione per evitare che l'operazionale inizi a oscillare con valori in ingresso vicini alla soglia impostata con il trimmer.

        Il circuito procede all'uscita dell'operazionale con un diodo zener da 4,7V e un diodo classico 1N4148. Questi due componenti permettono di ottenere una soglia di tensione in grado di non far pervenire al transistor l'offset di tensione che ha in uscita l'operazionale. Questo poiché l'operazionale TL081 non è progettato per operare in alimentazione singola e questo tipo di configurazione ad alimentazione singola (con la tensione negativa a massa) provoca un offset di tensione in uscita che manterrebbe attivo il transistor successivo anche quando non è richiesto. Inoltre con questa configurazione se si omettono le resistenze ai capi del trimmer si dovrà, nella taratura, mantenere il trimmer con il cursore non al minimo (altrimenti si noterà una attivazione anomala del circuito). 

        Il circuito si conclude con un transistor che funziona come interruttore, esso provvede ad attivare e disattivare il relè, mentre il diodo ai capi della bobina del relè provvede a proteggere il transistor dalle extratensioni inverse provocate dalla bobina durante la disattivazione del relè. Un led, infine, indica l'attivazione del relè.

        COLLEGAMENTO SONDA NTC E CARICO

        La sonda NTC va collegata agli appositi terminali presenti nello schema e nel circuito stampato, non è necessario rispettare alcuna polarità. Per misurare la temperatura di un ambiente è necessario porre la sonda a contatto dell'aria presente nell'ambiente da misurare collegando la sonda direttamente nella scheda, mentre per misurare la temperatura di tubi, altre superfici o ambienti separati è necessario collegare la sonda ad un cavo schermato o "twistato" e isolare i terminali con delle guaine termorestringenti o con del nastro isolante. La sonda va posta a diretto contatto della superficie, facendo attenzione alla temperatura massima sopportabile dalla sonda NTC (solitamente fino a 125°C). Nel caso sia necessario inserire la sonda in un liquido è necessario inserire la sonda in un contenitore del diametro più stretto possibile, possibilmente di materiale ad elevata conduzione termica e ovviamente impermeabile.


         Al relè sono accessibili 3 terminali: comune, normalmente aperto e normalmente chiuso. Applicando un filo del carico tra il comune e uno dei terminali normalmente aperto o normalmente chiuso è possibile far si che il carico si attivi quando la temperatura è al di sotto della soglia impostata (contatto normalmente chiuso) o al di sopra della soglia impostata (contatto normalmente aperto). Attenzione che nel caso in cui il termostato sia non alimentato il contatto normalmente chiuso rimarrà chiuso. Essendo quelli del relè contatti puliti è possibile collegare come carico qualsiasi tipo di dispositivo alimentato in continua o alternata: nel caso usiate la tensione di rete provvedete a stagnare le piste che portano dai morsetti al relè ed a mettere tutto il circuito dentro una scatola isolante o anche di metallo purché sia collegata a terra. Ovviamente valutate le possibilità in relazione al relè disponibile (nel mio caso un finder mod. 40.52). La figura sotto illustra come fare i collegamenti.

        CIRCUITO STAMPATO

        Il circuito stampato visibile sotto è indicativo, per realizzare la scheda utilizzate i file allegati!


         

        Il circuito stampato è monofaccia ed è stato realizzato utilizzando il programma gratuito FidoCAD, nel file .zip scaricabile dal link sottostante potete trovare, oltre al documento di fidocad, il master in pdf pronto da utilizzare e la disposizione dei componenti.


        FILE TERMOSTATO CON RELE'

        ALCUNE IMMAGINI

             

        VERSIONE COMPATTA SENZA RELE'

        SCHEMA ELETTRICO

        Lo schema è sostanzialmente uguale al progetto con relè fatta eccezione per l'utilizzo di un transistor BC337 con una uscita di tipo "open collector" a cui è possibile collegare un relè esterno o un ingresso digitale di una scheda I/O come nel mio progetto MassaBus. Ai morsetti viene resa la possibilità di utilizzare come positivo la tensione di 12V stabilizzata del termostato, ma è possibile utilizzare anche una tensione esterna  per un carico avente un assorbimento massimo di 800mA e una tensione di funzionamento non superiore a 45V logicamente in continua, data da un alimentatore avente la massa in comune con il termostato.  La resistenza di base del BC337 da 5,6Kohm può andar bene per carichi che assorbono fino a circa 80mA, dopodichè è necessario ricalcolare tale resistenza per garantire la saturazione, considerando l'hFE del BC337.

        COLLEGAMENTO CARICO

        Il carico può essere collegato direttamente ai morsetti di uscita rispettando le caratteristiche del circuito, del transistor e avendo cura di inserire un diodo a polarità invertita ai capi del carico se esso è un carico di tipo induttivo (vedere ad esempio la versione con relè). Attenzione ad accertarsi che il carico non abbia la propria massa in comune con quella del termostato, altrimenti il transistor essendo bypassato non può intervenire nella disattivazione del carico.

         

        CIRCUITO STAMPATO

        La caratterisitca principale di questa scheda è la sua compattezza grazie ai componenti montati in verticale.

        Il circuito stampato è monofaccia ed è stato realizzato utilizzando il programma gratuito FidoCAD, nel file .zip scaricabile dal link sottostante potete trovare, oltre al documento di fidocad, il master in pdf pronto da utilizzare e la disposizione dei componenti.

        FILE TERMOSTATO TRANSISTOR

        ALCUNE IMMAGINI

           

           

      temperature - Massari Electronics