Ott 042012
 

Se non conoscete il bus 1-Wire della Dallas Semiconductor Corporation  (ora sussidiaria della Maxim Integrated), questo articolo potrà farvi scoprire un mondo prima ignoto. Io ho scoperto questo bus qualche anno addietro, quando ero alla ricerca di un modo semplice ed economico per creare un sistema di rilevazione di temperature composto da decine di sensori. Tutto ciò che riuscivo a trovare era molto costoso e ben al di sopra del budget voluto: era infatti mia intenzione creare un sistema in grado di rilevare la temperatura di tutte le stanze della casa, la temperatura esterna e di tutto il sistema di impianto di riscaldamento a pavimento, quindi tutti i tubi di mandata e ritorno. Dopo lunghe ricerche ho scoperto il bus 1wire ed i sensori della Maxim. Questo bus permette di costruire reti di sensori (e non solo) in maniera economica, semplice ed affidabile.

La famiglia 1-wire (MicroLAN)

Il bus 1-wire è composto da una miriade di possibili componenti che funzionano tramite questo bus. Non ci sono solo i sensori di temperatura che cercavo a mio tempo, ma anche switch, memorie EPROM, orologi, RAM, oltre alle coppie lettore / device RF, sensori di umidità e molti altri: la lista completa la trovate qui. Le caratteristiche fondamentali di questo bus sono:

  • 1) Possibilità di usare l’alimentazione parassita, ossia lo stesso filo viene usato sia per trasferire dati che alimentare i dispositivi (basta un doppino massa – dati/alimentazione).
  • 2) Protocollo seriale bidirezionale con velocità fino15 kbps in modalità standard e 125 in overdrive (su brevi distanze). Il protocollo prevede un master e multipli slaves.
  • 3) Ogni dispositivo ha un identificativo univoco impresso nella ROM in fabbrica che lo identifica all’interno della rete 1-wire.
  • 4) iButton: alcuni dispositivi sono disponibili anche o solo nella forma iButton che ricorda le batterie a bottone, per intenderci.
  • 5) Lunghezza della linea, numero di sensori e tipo di cavo: Questi parametri sono inerconnessi fra loro e determinano la massima lunghezza della linea ed il numero di sensori. In linea di massima, giusto per farci un’idea,  possiamo dire che senza utilizzare particolari accorgimenti, possiamo arrivare ad un massimo di circa 200metri. Ad una distanza di 100metri è possibile installare approsimativamente un massimo di 100 sensori di temperatura. Io attualmente ho una rete di 10 sensori con un cablaggio di circa 25-30 metri.
  • 6) Bus free: anche se sono forniti drivers software pronti all’uso, tutte le informazioni tecniche sul bus sono libere e presenti sul sito per cui chiunque sia in grado di farlo può sviluppare software in grado di interfacciarsi ad ogni tipo di  sensore 1-wire.

Per ora non ci interessa approfondire più di tanto le peculiarità del bus, vorrei infatti spostare l’attenzione sul progetto di questo articolo, ossia la costruzione di un piccolo convertitore seriale-1wire che andremo ad utilizzare per misurare la tempertura ambiente tramite PC. In un successivo approfondimento vedremo come fare la stessa cosa utilizzando Arduino. In realtà gli adattatori li trovate già in commercio, ma ci vogliono davvero pochi componenti per costruirne uno. Leggendo le caratterisiche di sopra potreste obiettare che i sensori funzionano su un bus di tipo seriale, per cui perchè è necessario un adattatore per collegarci alla RS232? In realtà la risposta è molto semplice, infatti la rs232 lavora su valori compresi fra -12 e +12V mentre la 1wire lavora fra 0 e 5V che, vi faccio notare, è lo stesso range delle porte digitali di Arduino, motivo per cui è possibile usare i sensori 1Wire su Arduino senza interfacce interposte. Lo schema a lato dovrebbe chiarire il concetto.

Il convertitore

Il convertitore rs232-1Wire richiede davvero poco materiale. Innanzituto ci serve una porta seriale 9pin femmina. Volendo è utilizzabile anche quella a 25pin ma visto l’ingombro direi che non è certo il tipo di porta da usare per questo genere di applicazioni. Oltre alla porta vera e propria ci servono 2 diodi, due diodi Zener ed una resistenza da 1.5k. I due diodi Zener sono da 3.9V e 6.2V. Se cercate in rete vedrete che ci sono una miriade di siti che trattano l’argomento, in gran parte in inglese, ma fate molta attenzione al fatto che la disposizione dei pin della porta seriale talora è diversa da schema a schema per cui potreste essere tratti in errore. Ecco qui sotto lo schema. Si noti che i pin della porta seriare sono disposti dall’alto in basso per cui l’RXD sarà il 2 e GND sarà il 5.

 

 

Ora non ci resta che costruirlo. Nel mio primo tentativo ho cercato di copiare un progetto preso su internet per cui ho usato una basetta millefori tagliata per stare all’interno della plastica che riveste il connettore db9 della porta seriale. Il risultato è stato deludente visto che alla fine non sono riuscito a farcelo stare dentro. Nel secondo tenttivo ho deciso di mettere i componenti senza nessun supporto. Ho preso una vecchia porta seriale dalla quale ho rimosso il circuito sulla quale era saldata, però il pezzo di basetta più vicino alla porta si è spezzato e non sono riuscito a toglierlo. Perchè ve lo dico? Perchè se avete un pezzo da metterci fatelo! E’ un isolante e, dato che tutti i pin usati sono sulla stessa fila di contatti, impedisce di cortocircuitare per errore qualche pin della fila sottostante. Per il resto non ho fatto altro che unire le estremità dei vari componenti per poi saldarli come si vede nelle foto qui sotto. L’importante è stare molto attenti a quale pin state saldando e le polarià dei diodi, per il resto è un gioco da ragazzi e nel giro di pochi minuti avrete già il vostro adattatore pronto.

 

Rispetto allo schema di sopra i componenti sono ruotati per cui lo schema potrebbe sembrarvi diverso. Qui sotto un paragone fra due schemi identici, quello originale ed una versione con i componenti ruotati, anche se non identica a quello reale, per motivi di disegno.

DS18B20

Che sigla complicata! Il DS18B20 è uno dei sensori di temperatura 1wire più famosi. L’aspetto esteriore è quello di un transistor. Le sue principali caratteristiche sono:

  • Range di temperatura: -55°C÷125°C
  • Precisione: 0.5° fra-10 e 85°
  • Campionamento: selezionabile da 9 a 12bit.
  • Velocità di campionamento: fino ad un massimo di 750 ms a 12 bit.

Per quanto riguarda il costo, lo trovate ad un minimo di circa 0.7 euro al pezzo sino a 2 euro a seconda di quanti ne prendete e da quanto è ladro il fornitore :-). Se avete il sensore non vi resta che collegarlo. Non dovete far altro che collegare GND e Vdd alla terra e DQ al cavo dati/alimentazione (wire data nello schema precedente). Questo passaggio vi potrebbe sorprendere e rendervi, giustamente, perplessi. In effetti questi sensori permettono di utilizzare l’alimentazione esterna sfruttando tutti e 3 i pin, ma l’adattatore visto sopra sfrutta una modalità detta alimentazione parassita che permette di usare lo stesso filo sia per trasmettere i dati che alimentare il sensore. Ovviamente le due cose non possono essere fatte in contemporanea, per cui dentro il DS18B20 (e gli altri dispositivi 1wire) c’è un piccolo condensatore che mantiene alimentato il sensore durante le fasi di trasmissione dati. Questa ovviamente è una semplificazione estrema usata per non andare a perderci nei meandri dei timing di comunicazione di questi sensori, argomento che è piuttosto complesso e che non affronterò se non in articoli futuri, qualora qualcuno ne sia interessato. La scelta di usare l’alimentazione parassita è data solo dalla mia necessità di ridurre al minimo il numero di cavi da tirare per le varie stanze della casa. Ovviamente questa tecnica ha l’handicap di dover caricare il condensatore prima di poter essere operativo ed inviare dati e ciò si traduce in un maggior tempo per la rilevazione della temperatura anche se parliamo comunque di tempi massimi di circa 750ms.

Se avete l’esigenza di mettere più sensori in parallelo,  non dovete fare altro che collegare tutte le masse e Vdd a GND e tutti i DQ alla linea dati / alimentazione.

Ma continuiamo con il nostro progettino. Se avete collegato anche il vostro sensore non resta che reperire un qualche software che ci permetta la lettura della temperatura. Ci sono software disponibili per tutte le piattaforme  io però, avento sotto mano solo PC windows-based, vi fornirò alcune informazioni per questo sistema. Ci sono comunque in rete molte informazioni sia per linux che, un po’ meno, per Mac.

Senza avventurarci in nulla di troppo sofisicato andiamo a questo indirizzo e scarichiamo il pacchetto drivers per windows della Maxim. Nel pachetto che andrete ad installare trovate non solo i drivers veri e propri, ma anche un rudimentale software che permette di interrogare il sensore e mostrare la temperatura a monitor. Se volete un programma più completo, che comunque deve essere installato DOPO i drivers, vi consiglio l’ottimo LogTemp, software che vi mostra anche a grafico i valori di tutti i sensori collegati ma permette anche di inviare i dati via ftp, sia dei grafici che delle tabelle con temperature correnti, minime, massime e molto altro come la registrazione dei dati su database, il salvataggio di grafici  settimanali e mensili, etc. Se volete un esempio qui trovate il grafico delle temperature di casa mia, sia l’esterna che alcuni sensori interni (sia stanze che collettori del riscaldamento a pavimento). Purtroppo al momento in cui vi scrivo non tutti i sensori sono collegati in quanto stò approffitando di questi articoli per aggiornare parallelamente il mio sistema, ma a breve conto di tornare alla piena funzionalità. Anzi, è mia intenzione spostare le funzioni di monitoraggio della temperature dal PC ad Arduino, cosa che andremo a vedere in un prossimo futuro.