Search Programmazione WxWidgets CodeBlocks Android Elettronica Arduino 1-Wire

AA

A

ott

07
2012

Arduino e sensore 1wire DS18B20
1-Wire, Arduino, Elettronica Add comments

69.164.218.62 Utente non autenticato Registrati Collegati

Nella scorso articolo abbiamo visto come creare un convertitore 1wire- RS232, oggi estendiamo l’argomento e colleghiamo il
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

Italiano English

pdfcrowd.com

sensore DS18B20 direttamente ad Arduino. Se ricordate, avevamo detto che le porte digitali di Arduino sono l’ideale per collegare direttamente questo tipo di sensori dato che forniscono segnali da 0 a 5V nativamente, senza nessuna interposizione di alcun tipo di adattatore. Tutto ciò che ci servirà sarà, oltre ad Arduino, il sensore, qualche centimetro di cavo e una resistenza da 4.7K. In questo primo articolo vediamo come fare i collegamenti ed il software mentre in un secondo articolo vedremo come usare l’ethernet shield per inviare i dati ad un web-server per visualizzare i dati raccolti tramite una pagina web. Lo schema di collegamento è molto semplice ed è riassunto qui sotto; in particolare vi ho allegato sia lo schema con alimentazione diretta del sensore che con alimentazione parassita. Mi raccomando, in quest’ultimo caso, di mettere a massa il pin Vdd (il terzo), ve lo dico perchè in rete ho trovato degli schemi sbagliati in cui questo pin è lasciato vuoto, senza collegamenti.
RSS McMajan Libreria Ss_TFT Arduino, relè e infrarossi. IteadStudio 2.8 TFT Display shield: Una nuova libreria Arduino e RS485: piccoli approfondimenti Arduino – cos’è? (per principianti e anche meno)

Categorie Elettronica (36) 1-Wire (8) Arduino (30) Programmazione (26) Android (7) CodeBlocks (9) wxWidgets (11) Senza categoria (1)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

WEB (1) Wordpress (1) Elettronica Sito ufficiale Arduino Programmazione HomePage Code::Blocks HomePage wxWidgets Blog QR Code Come vedete nulla di complicato. non è mia intenzione entrare in questo lungo capitolo. Non preoccupatevi.com . i suoi timing ed iniziare a preparare il software di comunicazione. ma capirete che se dovessimo fare tutto da noi dovremmo iniziare a studiare il bus 1wire. lavoro tutt’altro che semplice. Il software invece è un po’ più complicato rispetto ai precedenti esempi di base. ricorderete che accennavo ai timing nella comunicazione con il sensore. Se ricordt l’articolo introduttivo u 1-wire. con una bradbord ci vuole davvero pochissimo tempo per collegare il sensore. Infatti la comunicazione avviente inviando sequenze di bit con tempistiche ben precise. Per fortuna però c’è chi open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.

etc. quindi ci sarà una nuova cartella OneWire in mezzo alle pre-esisteniti SPI. Le temperature vengono inviate sulla porta seriale dopo il codice esadecimale del singolo sensore.questo lavoro l’ha già fatto per cui non ciresta che scaricare la libreria già pronta.com . Fra essi verifica quali sono i sensori di temperatura e ne memorizza gli indirizzi in un array.Servo. Il software funziona in questo modo: nella fase di inizializzazione scansiona il bus 1wire alla ricerca dei sensori connessi.h che va’ appunto ad includere la libreria 1Wire che avevamo scaricato precedentemente. Nelle riche successive vengono definite alcune variabili globali che sono G_addr dimensionata per memorizzare gli indirizzi di 10 sensori e G_Devices che memorizza quanti sensori open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.SD. Finita questa fase entra nel loop principale nel quale và a leggere la temperatura di tutti i sensori per poi attendere 5 secondi e riprendere il ciclo di lettura. Per farlo andate sulla pagina per il download.Ethernet. Nella parte iniziale del software vediamo l’inclusione di OneWire. scaricate la libreria e scompattatela direttamente nella directory libraries che trovate nel toolkit di sviluppo di arduino.

Il software utilizza la funzione lookUpSensors per la ricerca dei sensori sul bus.h> 002 open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. il costruttore OneWire ow(8). che definisce l’oggetto per la comunicazione col bus 1wire e che nello specifico caso indica essere collegato al pin digitale numero 8. Si noti. poche istruzioni più in basso. Anche questa funzione risulta incomprensibile senza aver prima approfondito il funzionamento del bus. restituisce la temperatura rilevata. Purtroppo non abbiamo ancora sufficienti conoscenze sul funzionamento del bus per poter comprendere esattamente come funziona. per ora basti comprendere che questa funzione memorizza gli indirizzi dei sensori trovati sul bus durante l’inizializzazione. per cui per ora non ci resta che adattarci al semplice copia e incolla. Altre funzioni presenti nel software sono PrintAddress che si occupa di stampare l’indirizzo esadecimale di un sensore sulla porta seriale e GetTemp che dato l’indirizzo di un sensore e l’oggetto OneWire associato. 001 #include <OneWire.com . Ho commentato i punti salienti del listato per migliorarne la comprensione.sono presenti nel bus. vedremo in uno specifico articolo i dettagli più complessi.

// inizializza il bus onewire sulla porta n°8 (se avete collegato i sensori su un'altro pin dovete modificare qui) 006 007 float GetTemp(OneWire *. // questo array conterrà l'indirizzo locale dei sensori 022 023 Serial.byte *). 011 012 void setup(void) 013 { 014 Serial.com . // avvia la ricerca delle sonde di temperatura 017 } 018 019 void lookUpSensors() 020 { 021 byte address[8]. // variabile usata per tenere traccia del numero di sensori riconosciuti nel bus 005 OneWire ow(8). 010 int CheckSensor(byte *). 008 void PrintAddress(byte *). // imposta a 0 il numero di sensori attualmente riconosciuti 016 lookUpSensors().print("--Ricerca avviata-open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. //qui memorizzo fino a 10 indirizzi 004 byte G_Devices. 009 void lookUpSensors().// inizializza la porta seriale a 9600 015 G_Devices=0.begin(9600).002 003 byte G_addr[10][8].

println(""). // avvia la ricerca e lo scrive sulla porta seriale 024 025 while (ow.search(address)) // loop finchè trova nuovi dispositivi 026 { 027 // Se il primo byte dell'indirizzo è 0x10.print("Found DS18B20 : "). se è 0x28 è un DS18B20 (notare la S e B) 030 if (address[0] == 0x10 || address[0] == 0x28) 031 { 032 if(CheckSensor(address)==1) //crc ok 033 { 034 Serial.com .aa++) G_addr[G_Devices][aa]=address[aa]. 035 if (address[0] == 0x10) Serial.print("--Ricerca avviata-"). // notare che la S invece che la B 036 else if (address[0] == 0x28) Serial. si tratta di una sonda DS18S20 028 // il primo byte dell'indirizzo identifica il tipo di sensore 029 // se 0x10 è un DS18S20.aa<8. 037 PrintAddress(address).023 Serial. 038 for(int aa=0. // incrementa il numero di devices memorizzati 040 } 041 } open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. // copia l'indirizzo 039 G_Devices++.print("Found DS18S20 : ").

// uso questa variabile per tenere la lettura della temperatura 051 for(int num=0.041 042 043 044 045 } }//end while Serial. Serial.println(""). 055 Serial.com .num++) // vado a leggere tutti i sensori registrati 052 { 053 temperatura=GetTemp(&G_addr[num][0]). 066 byte address[8]. 056 Serial.num<G_Devices.i<8. // aspetto 5 secondi prima di fare una nuova misurazione 059 } 060 061 float GetTemp(byte * addr) 062 { 063 byte present = 0.println(temperatura). 057 } 058 delay(5000). 067 for(i=0. 064 byte data[12].println("--Ricerca terminata--"). 046 } 047 048 void loop(void) 049 { 050 float temperatura. // lego la temperatura 054 PrintAddress(G_addr[num]).i++) open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. 065 int i.print(" -> ").

write(0xBE).print(data[i].reset(). Whole. 077 ow. i++) data[i] = ow.reset(). 089 SignBit = TReading & 0x8000. 075 076 ow. Fract. with parasite power on at the end 071 delay(1000).1). LowByte.// we need 9 bytes //Serial. 070 ow.com . //copia l'indirizzo nella stringa locale 068 ow. // start conversion. HEX). SignBit. 080 081 int HighByte.select(addr).i<8. but the reset will take care of it.i++) address[i]=*(addr+i). 087 088 TReading = (HighByte << 8) + LowByte. TReading.067 for(i=0.read(). 082 083 double result. Tc_100. // Read Scratchpad 078 079 for ( i = 0. maybe not 072 // we might do a ds. 086 HighByte = data[1]. // open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. 069 ow. // maybe 750ms is enough.depower() here. 073 074 present = ow.select(addr). i < 9. 084 085 LowByte = data[0].write(0x44.

099 result += ((double)Fract/100). 113 Serial.print("-").089 SignBit = TReading & 0x8000.HEX). 100 101 if(SignBit) result *= -1. 102 103 return result. open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. 110 for (i=0. // multiply by (100 * 0. 104 105 } 106 107 void PrintAddress(byte * address) 108 { 109 int i. 097 098 result = Whole. // separate off the whole and fractional portions 096 Fract = Tc_100 % 100.com .i<8. // 2's comp // negative 092 093 Tc_100 = (6 * TReading) + TReading / 4. // test most sig bit 090 091 if (SignBit) TReading = (TReading ^ 0xffff) + 1.25 094 095 Whole = Tc_100 / 100.i++) 111 { 112 if (address[i] < 9) Serial. 114 if (i<7) Serial.print("0").print(address[i].0625) or 6.

se fallito ritorno -1 121 else return(1).// faccio il controllo del CRC8. } } int CheckSensor(byte * address) { if (OneWire::crc8(address.114 115 116 117 118 119 120 if (i<7) Serial. ritorno 1 122 } Se avete compilato ed inviato la sketch ad Arduino. Nel mio caso ci sono due sensori. potete aprire il monitor seriale e vedrete una schermata simile alla seguente.com . ogni 5 secondi viene rilevata la temperatura e scritta vicino al codice open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.print("-"). 7) != *(address+7)) return(-1). // cr8 OK.

com . ma come li collegate 100 sensori? Secondo me il nocciolo della questione è questo: se vi serve un sensore unico posizionano vicino al vostro Arduino allora meglio usare un sensore analogico. Potreste obiettare che con un sensore analogico la via sarebbe molto più semplice. con pochi fili ed un sensore collegati ad Arduino conditi con poche linee di codice che potete benissimo copiare ottenete un termometro digitale. ma se pensate di mettere una miriade di sensori in giro per la casa il bus 1-wire è sicuramente la soluzione giusta per voi. Certo sarebbe meglio aggiungere un display e almeno un potenziometro per regolare la temperatura. Inoltre non dimentichiamoci che sul bus 1-wire possono essere collegati altri tipo di sensori / dispositivi e non solo sensori di temperatura. certo. Se unite i contenuti di questo articolo con quello in cui si spiegava il collegamento di un relè ecco che ne salta fuori un termostato che potete tranquillamente usare magari per sostituire un vechio termostato analogico. Mi rendo conto di aver trattato in modo superficiale l’intimo funzionamento del bus. ma già così com’è potrebbe essere usato come un rudimentale termostato a open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.esadecimale del sensore. ma vorrei che trasparisse che pur non conoscendo il reale funzionamento di questi sensori.

iButton: creare chiavi elettroniche con Arduino. sensore 1wire DS18B20 e shield Ethernet. 1wire DS18B20 e datalogger su internet 3. Share! Tw eet 0 Like 2 0 Share Articoli correlati: 1. Be Sociable. RS232 con bus 1wire: dalla teoria alla pratica open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. RS232 con bus 1Wire: leggere la temperatura dai sensori ds18b20 4. Arduino. 2.essere usato come un rudimentale termostato a temperatura fissa.com . 5. Arduino.

Scrive questi articoli nella speranza che servano a qualcuno Posted by Stefano at 00:26 Tagged w ith: arduino. Ha realizzato da solo un piano della propria casa. dallas. ai muri interni.com . dal rivestimento termico. javascript. Stefano Stefano Smania. sql. Gli piace cucinare ma ha poco tempo per applicarvisi. sensore 1wire DS18B20 e shield Ethernet. php.Articoli correlati elaborati dal plugin Yet Another Related Posts. idraulico. Ha conoscenze discrete di C++. medico radiologo Programma in C dalla fine degli anni 80. html. ds18b20. maxim 9 Responses to “Arduino e sensore 1wire DS18B20” 1. riscaldamento a pavimento. elettronica. Possiede approfondite conoscienze sullo standard DICOM. | Are you a developer? Try out the HTML to PDF API open in browser PRO version pdfcrowd. Arduino. l'impianto elettrico e domotico. Bazzica con l'elettronica e unisce le diverse passioni in un progetto di domotica. infissi e quant'altro vi venga in mente.

Immagino che con “nome” intendi qualcosa tipo “temperatura esterna”. complimenti per il sito e per i progetti interessantissimi.. ma ti sarà meno semplie del open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.. o “temperatura bagno”. complimenti Fare il login per rispondere Stefano says: %e %B %Y at %H:%M Ciao.] Arduino.e’ possibile nella schermata seriale sostituire i codici deisensori con un nome? mi piacerebbe aggiungere un display ed un paio di relais ma non riesco a capire come integrarli (a livello di sketch) grazie mille e di nuovo.] 2. etc.McMajan says: %e %B %Y at %H:%M [. Elettronica Add comments ott 132012 Oggi approfondiamo il precedente articolo e aggiungiamo l’ethernet shield in modo che il nostro Aruino possa inviare i dati [. innanzitutto. marco says: %e %B %Y at %H:%M ciao.com .. Certo che puoi farlo..

ma ciò implica un maggior numero di modifiche.Certo che puoi farlo. Per quanto riguarda l’applicazione pratica ti consiglio di aggiungere due array all’inizio. altrimenti lascia il numero della ROM. La via più semplice è quello di scovare le varie ROM dei sensori collegati. Poi nella PrintAddress fai prima un confronto per verificare la presenza o meno fra le ROM note e con un if decidi se stampare il nome open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. L’alternativa è sfruttare la porta usb per comunicare con la sketck. però non ho il materiale in casa per cui devo prima reperire i materiali che mi servono. altrimenti scrive il codice della ROM. aggiungere o rimuovere i nomi direttamente da PC. uno di tipo byte G_addr_Noti[10][8]. in questo caso si potrebbe configurare Arduino per accettare comandi dall’esterno e quindi diventerebbe possibile modificare.com . Devii perciò crearti un doppio array all’inizio per memorizzare sia gli indirizzo noti. Uno dei prossimi progetti sarà proprio un termostato con display. Il lato negativo di questo approccio è che per ogni sensore aggiunto devi modificare la sketch. A questo punto deve essere modificata la funzione PrintAddress che per prima cosa deve verificare se la ROM è tra quelle conosciute e nel caso affermativo stampa il nome da te scelto. ma ti sarà meno semplie del previsto. sia le stringhe da stampare. // previsti 30 caratteri per nome. Poi nella fase di inizializzazione copi metti i nomi delle ROM note nel primo array (mettendo a 0 quelle che non usi) e nell’altro ci metti i nomi. poi modificare la sketch in modo che se riconosce quel valore fra quelli noti ti scrive il nome da te scelto. ed uno G_addr_Nomi[10][30].

magari faccio io le modifiche e le metto in un articoletto di approfondimento. mi interessa molto per la domotica della mia casa per controllare le temperature ambientali e regolarle usando arduino come termostato che controlla le valvole dei termosifoni (on off delle mandate) . Mi interessa moltissimo questa modifica del nome. Fare il login per rispondere Roberto says: %e %B %Y at %H:%M Intanto ottime spiegazioni e complimenti. Se non ti bastano queste notizi fammi sapere.o la ROM.com . Fare il login per rispondere 3. magerluc says: %e %B %Y at %H:%M Ciao e vivissimi complimenti! Quanti sensori si riescono a leggere con la configurazione da te descritta? C’è un limite fisico oppure se ne possono mettere abbastanza da riempire tutta la casa? Grazie open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.

com . Comunque. Ricorda che questi sono limiti per singola linea ma nessuno ci vieta di usare in contemporanea più linee in parallelo open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. i limiti del bus 1wire sono trscurabili. la risposta era esposta nella breve descrizione del bus 1-wire che ho fatto nell’articolo che trovi al seguente indirizzo: http://www. senza scendere in dettagli. Comunque a meno che tu non abbia un castello come casa.com/mcmajanwpr/?p=971 . In rete esiste una guida tecnica molto dettagliata su come calcolare il numero di sensori in rapporto alla configurazione della rete 1-wire ma è molto tecnico e necessita di conoscenze più approfondite che in parte vengono descritte in 3 articoli successivi a questo.mcmajan. è sicuramente un’approsimazione ma va più che bene per capire se rientriamo nei limiti del nostro progetto. Per quanto riguarda la tua domanda. mi fanno sempre molto piacere. la cosa migliore è ricordare che possiamo mettere 100 sensori entro 100 metri di distanza. dove di parla di 1 wire e porta seriale.Fare il login per rispondere Stefano says: %e %B %Y at %H:%M Grazie per i complimenti.

They have pretty small dimensions. Key Factor: Since its flexible.com . Fare il login per rispondere open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. Fare il login per rispondere Wijdane says: %e %B %Y at %H:%M If you can’t manage to get the etirne circuit flexible. S hai altre domande scrivi pure. you may need to compromise on flexibility so that perhaps each square is stiff. I would be able to squeeze it where any other board wouldn’t fit. the number 1 priority should be durability.Potential Uses: I think I would put it on a RC battery inside of an RC car. magari con qualche giorno di ritardo ma rispondo sempre. but since this board is so small. To do this. but the ribbon connecting them is flexible.anche su singolo Arduino. showing the flexibility and durability of the newest Arduino. I would then connect the driving servo and the motor controller (ESC) to it and drive it around I would then put a review up on my site. These boards should last as long as the normal Arduino boards. a compromise would to make the strips connecting the boards to be flexible. or your customers will feel cheated.

1wire microlan – introduzione e Arduino.com .maximintegrated.com/products/1-wire/ Fare il login per rispondere Leave a Reply You must be logged in to post a comment. sensore 1wire DS18B20 e open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. carmine says: %e %B %Y at %H:%M Ciao. quali altri sensori 1-wire possono essere collegati ? Esiste un elenco completo ? Fare il login per rispondere Stefano says: %e %B %Y at %H:%M Per un elenco completo è sufficiente visitare il sito ufficiale. alla pagina http://www.4.

© 2011 McMajan Suffusion theme by Sayontan Sinha open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com .convertitore seriale shield Ethernet.