Arduino: progetto per un accelerometro wireless

L'accelerometro wireless progettato con Arduino invia dati al computer

Volete costruire un accelerometro wireless con Arduino? Ecco come fare! Vi serviranno: XBee 2mW serie 2.5, Arduino XBee (con modulo XBee serie 2.5), USB Explorer XBee e ADXL330. XBee vi servirà per leggere i dati in arrivo dall’accelerometro. Poi, seguendo alcuni semplici passaggi, potrete portare a termine il vostro progetto. Cosa state aspettando? Questa è proprio la settimana giusta per iniziare!

Tutto quello che vi serve per l’accelerometro wireless

Un accelerometro wireless con Arduino: volete provare a costruirlo? Ecco quello che vi serve: XBee 2mW serie 2.5, Arduino XBee (con modulo XBee serie 2.5), USB Explorer XBee, ADXL330.

La prima cosa da fare è configurare e aggiornare il firmware di XBee. Per fare questo, avrete bisogno di X-CTU che, purtroppo, è disponibile solo per Windows. Ma, funziona benissimo da VMware. Per prima cosa, dovete collegare XBee al computer per leggere i dati in arrivo dall’accelerometro wireless.

Inserite uno degli XBee in Explorer (è anche possibile farlo da Arduino spostando i due XBee/USB a USB e rimuovendo l’MCU) e collegarlo alla porta USB. Ora accendete la X-CTU e selezionate la porta di comunicazione USB. Fate clic su “Modem Configuration” e poi “Read”. Questo servirà a determinare con cosa sarà collegato XBee e quale firmware c’è sul dispositivo. Adesso selezionate “Always update firmware” e cliccate su “Download new versions”.

Selezionate la versione più recente di ZNet 2,5 Router/Device API Fine. La versione API è necessaria per leggere i dati in arrivo sul computer. Solo il firmware API scrive i dati dei sensori in arrivo su UART in modo che possano essere letti attraverso la porta USB.

Fate clic su “Write”. È possibile che si ottenga un messaggio di errore dopo la scrittura, ma è normale. Questo perché avete cambiato il modo in cui XBee comunica tramite UART. Tornate alla scheda “PC Settings”, selezionate “Enable API” e quindi cliccate di nuovo su “Read” nella scheda “Modem Configuration”. In “Networking”, cambiate NI (Node Identifier) in qualcosa come “Arduino”. Cliccate su “Write” e collegatelo al computer. Questo è l’XBee a cui il vostro accelerometro invierà i dati.

Ora bisogna collegare XBee all’accelerometro wireless. Seguite la stessa procedura di prima fino ad arrivare alla selezione del firmware. Selezionate la versione più recente di ZNet 2.5 Router/End Device. In “Networking”, cambiate l’NI in qualcosa come “Accelerometer”. Su “I/O Settings”, cambiate D0-D2 in 2-ADC. Questi pin saranno utilizzati per leggere l’accelerometro.

Ancora in “I/O Settings,” cambiate la IR (frequenza di campionamento) in 1F4 (esadecimale per 500 millisecondi). Cliccate su “Write”. Andate nella scheda “Terminal”. Per attivare la modalità di comando su XBee, inviate “+++”, ma non premete invio). Risponderà con “OK”. Poi digitate “ATDNARDUINO” (o come avete chiamato l’altro vostro XBee). Questo definirà il nodo di destinazione per XBee. Dovrebbe rispondere “OK”. Successivamente, inviate “ATWR”: questo consentirà di scrivere le impostazioni di memoria in modo che non vadano perse quando XBee è spento.

Infine, collegate XBee e ADXL330. È possibile alimentare entrambi con 3.3V. Purtroppo, gli XBee 2.5 series ADC accettano solo tensioni nel range di 0-1.2V. Per ottenere risultati migliori, è necessario aggiungere i divisori di tensione sugli assi X, Y e Z.

Test finale dell’accelerometro wireless

Ora, si dovrebbe essere in grado di testare che l’accelerometro wireless funzioni. Connettete XBee Arduino con il terminale X-CTU. Se l’accelerometro XBee è acceso, dovreste vedere molti dati. I dati vengono trasmessi in pacchetti API su UART di XBee, sul chip FTDI, fino al dispositivo USB del computer. La specifica del pacchetto API è nel manuale XBee 2.5. Esiste una XBee Python Library, ma attualmente non supporta i moduli di serie 2.5.

import serial  # pySerial
import struct
import sys

THRESHOLD = 5

tty = sys.argv[1]

s = serial.Serial(tty, 9600)
movement = None
while True:
if s.read() == chr(0x7e):  # Packet start indicator.
  length, api_id = struct.unpack('>Hc', s.read(3))
  if api_id == chr(0x92):  # IO packet type.
    # Lots of bytes we don't care about followed by 3 shorts.
    z, y, x = struct.unpack('>xxxxxxxxxxxxxxxHHH',
                            s.read(length - 1))
    print z, y, x
    if (movement is not None and
        abs(z + y + x - movement) > THRESHOLD):
      print 'You moved!'
    movement = z + y + x

Un’ultima nota tecnica… Le antenne chip sono abbastanza direzionali, perciò le interferenze potrebbero creare dei problemi all’accelerometro wireless.

La scheda Arduino disponibile da Farnell

15 Comments

  1. Alex87ai 28 febbraio 2011
  2. stewe 22 febbraio 2011
  3. Alex87ai 22 febbraio 2011
  4. mingoweb 22 febbraio 2011
  5. Fabrizio87 22 febbraio 2011
  6. linus 22 febbraio 2011
  7. gaetech45 22 febbraio 2011
  8. stewe 22 febbraio 2011
  9. stewe 22 febbraio 2011
  10. Alex87ai 22 febbraio 2011
  11. stewe 22 febbraio 2011
  12. stewe 28 febbraio 2011
  13. stewe 23 febbraio 2011
  14. giuskina 28 febbraio 2011
  15. giuskina 25 febbraio 2011

Leave a Reply