Sei sulla pagina 1di 12

Search Programmazione WxWidgets CodeBlocks Android Elettronica Arduino 1-Wire

AA

lug

01
2013

iButton: creare chiavi elettroniche con Arduino.


1-Wire, Arduino, Elettronica Add comments

69.164.218.62 Utente non autenticato Registrati Collegati

Del bus 1-wire abbiamo parlato in modo esteso in precedenti articoli, abbiamo visto in modo molto dettagliato come funzionano i segnali
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

Italiano English

pdfcrowd.com

che transitano sul bus e abbiamo visto come usare i sensori DS18B20 sia con Arduino che via RS232 da PC. Se non conoscete i prodotti iButton della Maxim, diciamo subito che sono una famiglia di prodotti funzionanti con il bus 1-Wire e che hanno vagamente la forma esteriore simile a quello delle classiche batterie a bottone. C unintera schiera di prodotti, si v da sensori di temperatura ed umidit a memorie, orologi, eprom, switch e quantaltro. Quelle che andiamo a studiare oggi sono le chiavi iButton. Potremmo definirle come delle chiavi elettroniche che quando sono appoggiate allapposito lettore permettono di scambiare con esso il loro numero di serie a 64bit. Alcune hanno anche una memoria aggiuntiva o altre funzioni, ma ci limiteremo alla funzionalit pi basilare che appunto quella del riconoscimento della chiave.
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

Nella foto qui sopra potete vedere il mio set di 10 chiavi con due lettori (in inglese le trovate come probe sonda). Esistono anche lettori con led integrati per la visione notturna, anche con la possibilit di cambiare colore attraverso il nostro circuito di controllo. Il collegamento elettrico del lettore rispecchia quello degli altri dispositivi 1Wire, ci sono solamente due cavetti, uno rosso ed uno nero, ed sufficiente una sola resistenza da 4.7K per collegarla al nostro Arduino nello stesso modo visto nel caso di alimentazione passiva del DS18B20.

Programmazione HomePage Code::Blocks HomePage wxWidgets

Blog QR Code

open in browser PRO version

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

pdfcrowd.com

Una volta preparato il circuito di prova possiamo passare alla componente software che in gran parte ricalca quanto gi visto nei precedenti articoli. In particolare se ci soffermiamo alla parte di software che ricerca i dispositivi 1-wire sul bus, abbiamo di fatto gi finito il lavoro. Ma attenzione. Se collegate il lettore ad Arduino e ricercate dispositivi 1-wire sul bus non avrete nessuna risposta. La risposta, la ottenete solamente se vi collegate la rispettiva chiave, infatti il codice identificativo a 64bit v ad identificare la chiave e NON la sonda di lettura. In questo modo basta eseguire un loop continuo che ricerca dispositivi 1wire sul bus e, non appena viene poggiata la chiave sul lettore, avremmo in risposta il codice della chiave letta. Lunica avvertenza che lindirizzo di queste chiavi comincia con un 001 (identificativo della famiglia di dispositivi) a differenza dello 028 dei sensori di temperatura precedentemente studiati.

open in browser PRO version

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

pdfcrowd.com

#include <OneWire.h>

unsigned char G_addr[10][8]; //qui memorizzo fino a 10 indirizzi da 8 bytes (6 byte G_Devices; // variabile usata per tenere traccia del numero di sensori ri OneWire ow(8); // inizializza il bus onewire sulla porta n8 (se avete collega void PrintAddress(byte *); void lookUpSensors(); int CheckSensor(byte *);

void setup(void) { Serial.begin(9600);// inizializza la porta seriale a 9600 bsaud G_Devices=0; // imposta a 0 il numero di sensori attualmente riconosciut lookUpKeys(); // avvia la ricerca delle sonde di lettura pinMode(13, OUTPUT); // imposta il pin 13 come output (per usare il led inte } void lookUpKeys() { byte address[8]; // questo array conterr l'indirizzo locale delle chiavi while (ow.search(address)) // loop finch trova nuovi dispositivi {
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

if (address[0] == 0x01) // identificata chiave 1-wire { if(CheckSensor(address)==1) //se il crc ok la lettura corretta { bool old=false; for (int i=0;i<G_Devices;i++) if(CheckAddress(G_addr[i],address)) {old=true if(!old) // se la chiave non ancora stata usata.... { for(int aa=0;aa<8;aa++) G_addr[G_Devices][aa]=address[aa]; // copia l'indi G_Devices++; // incrementa il numero di devices memorizzati Serial.println(""); // torno a capo sul terminale. PrintAddress(address); // stampo l'indirizzo della chiave } digitalWrite(13, HIGH); // accende il led sulla porta 13 delay(10); // aspetta un po'... digitalWrite(13, LOW); //..e spegne di nuovo il led sulla porta 13 } } }//end while (ricerca nuovi dispositivi) }

open in browser PRO version

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

pdfcrowd.com

bool CheckAddress(unsigned char *a,unsigned char *b) // controlla se un indiri { bool ck=true; for(int i=0;i<8;i++) if(*(a+i)!=*(b+i)) return(false); return(true); } void loop(void) // corpo principale del programma { lookUpKeys(); // loop principale...ricercachiavi continuamente delay(5); }

void PrintAddress(byte * address) // stampa l'indirizzo esadecimale della son { int i; for (i=0;i<8;i++) { if (address[i] < 9) Serial.print("0"); Serial.print(address[i],HEX); if (i<7) Serial.print("-"); } }

open in browser PRO version

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

pdfcrowd.com

int CheckSensor(byte * address) // verifica se la chiave stata letta corrett { if (OneWire::crc8(address, 7) != *(address+7)) return(-1);// faccio il contro else return(1); // cr8 OK, ritorno 1 }

Anzich creare un listato minimale come faccio di solito, ho aggiunto qualche funzione in pi che potrebbe essere utile nellutilizzo pratico delle chiavi. Il software memorizza fino a 10 indirizzi di chiavi diverse. Se la prima volta che utilizzate una certa chiave il software scriver a terminale il corrispondente indirizzo esadecimale a 64bit (utile per debug), se invece non il primo utilizzo si limita a far lampeggiare per un istante il LED sulla porta 13. Il listato stato ampiamente commentato per cui non dovrebbero esserci problemi nella sua comprensione. Chiaramente un sistema simile impiegato per far lampeggiare un LED non serve a nulla. Che applicazioni possiamo sviluppare con questo tipo di circuito? In realt tantissime, in tutti i casi in cui vogliamo sostituire una chiave tradizionale o ci interessa un sistema di attivazione / disattivazione sicuro. Ad esempio potremmo usare delle
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

serrature elettriche nelle porte di casa ed usare una chiave unica per aprirle tutte o fornire alcuni accessi ad una chiave, altri ad altre. Potremmo usare le chiavi per attivare e disattivare un sistema dallarme o il sistema di condizionamento, di riscaldamente, per aprire il portone del garage, abbassare le tende solari o quel che vi viene in mente. Ad esempio tutti i casi in cui abbiamo un tastierino numerico per inserire un codice, possiamo facilmente sostituire o aggiungere questo tipo di dispositivo. Possiamo anche pensare a cosa pi stravaganti come ad esempio il login di un PC o lavvio di funzioni software quali lavvio di un backup, tanto per dirne una o fare in modo che un datalogger invii i suoi dati via internet al riconoscimento di una specifica chiave. Come vedete le applicazioni sono molteplici. Be Sociable, Share!

open in browser PRO version

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

pdfcrowd.com

Tw eet

Like

Share

Articoli correlati: 1. Arduino e sensore 1wire DS18B20 2. Arduino, sensore 1wire DS18B20 e shield Ethernet. 3. RS232 con bus 1wire: dalla teoria alla pratica 4. RS232 con bus 1Wire: leggere la temperatura dai sensori ds18b20 5. RS232: interagire con il bus 1wire Articoli correlati elaborati dal plugin Yet Another Related Posts.

Stefano

open in browser PRO version

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

pdfcrowd.com

Stefano Smania, medico radiologo Programma in C dalla fine degli anni 80. Ha conoscenze discrete di C++, php, javascript, html, sql. Possiede approfondite conoscienze sullo standard DICOM. Bazzica con l'elettronica e unisce le diverse passioni in un progetto di domotica. Ha realizzato da solo un piano della propria casa, dal rivestimento termico, ai muri interni, l'impianto elettrico e domotico, idraulico, riscaldamento a pavimento, infissi e quant'altro vi venga in mente. Gli piace cucinare ma ha poco tempo per applicarvisi. Scrive questi articoli nella speranza che servano a qualcuno
Posted by Stefano at 09:52 Tagged w ith: 1w ire, arduino, chiave elettronica, ibutton

Leave a Reply
You must be logged in to post a comment.

74HC165: come espandere gli ingressi digitali di Arduino.

Costruirsi Arduino in casa

open in browser PRO version

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

pdfcrowd.com

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