mercoledì 20 luglio 2011

Domotizziamo l'acquario...

In questo articolo vediamo come realizzare una lampada con tecnologia LED che possa essere comandata da un PC remoto tramite collegamento in rete LAN Wi-Fi.
Il sistema qui descritto viene impiegato per illuminare un acquario da 50 litri con effetto alba tramonto e notte (LED blu), il tutto gestito da un software che gira su un PC connesso in Wi-Fi.


Quello che ci occorre è: un convertitore Wi-Fi – Serila RS232 CSW80 della Sollae (link prodotto), un PIC 16F628A e relativo quarzo da 10Mhz, due LED Luxeon da 3W bianchi 5500K (o equivalenti) un LED BLU da 1W e due driver per LED ZXLD1362ET5TA e pochi altri componenti discreti.
Quest'ultimo è un interessante driver a basso costo che con pochi componenti discreti è in grado di pilotare LED ad alta potenza con un ottimo rendimento.
Di seguito è disponibile il semplice schema elettrico da realizzare:

La lampada va alimentata con un alimentatore (si consiglia di tipo switching) in grado di erogare una tensione continua di 5 V ed una corrente di almeno 1.5A (consumo di circa 7.5W).


Il modulo Sollae CSW80 prima di essere collegato all'unità lampada va configurato tramite il software ezManager (www.sollae.com) per impostare: i dati del proprio Access Point, l'indirizzo IP, la porta TCP/IP su cui restare in ascolto (1470 per default) e la velocità della seriale (19200bps). Completata e salvata la configurazione è possibile ri-collegare il convertitore alla lampada.


Il funzionamento del firmware da caricare nella memoria del PIC è estremamente semplice,
alla ricezione sulla seriale del pacchetto esadecimale

0x66 0x03 0x01 0x01 0x01 0x00

provvede ad accende i LED Luxeon in maniera progressiva fino al raggiungimento dell'intesità massima. Quando il firmware riceve il comando esadecimale

0x66 0x03 0x01 0x01 0x00 0x00

I due Luxeon vanno progressivamente spegnendosi lasciando acceso solo il LED Blu per l'effetto notte :) .
Ad ogni comando da 6 byte inviato il programma ritorna un pacchetto sempre sa 6 byte con lo stato dei LED.
Per esempio inviando il comando 0x66 0x03 0x01 0x01 0x01 0x00 riceveremo come risposta

0x55 0x03 0x01 0x01 0x01 0x00

LED accesi.

Per interrogare il sistema è possibile inviare il comando:

0x66 0x04 0x01 0x00 0x00 0x00

come risposta riceveremo

0x55 0x04 0x01 0x00 0x01 0x00

se i LED sono accessi o

0x55 0x04 0x01 0x00 0x00 0x00

se i led sono spenti.



Un modulo RFID facile da usare e molto economico...

Vediamo una carrellata di esempi su come interfaccaiare il Modulo OEM RFID reader da 125Khz, alle schede di Area SX.

Descrizione Hardware del RFID Reader

Il modulo RFID reader proposto da Area SX è un compatto PCB di soli 45x24mm dotato di interfaccia seriale RS232 (TTL 0-5V) e Wiegand, ideale per leggere TAG da 125Khz. Alcune delle principali caratteristiche tecniche:

  • Interfaccia seriale:TTL, 9600bps, N, 8, 1
  • Interfaccia Wiegand: TTL, formato wiegand da 26 bits (1 even verify bit,24 data bits,1 odd verify bit)
  • Distanza massima di sensibilità: 7cm
  • Alimentazione:5V CC
  • Consumo: 45mA
  • Dimensioni: 45 mm x 25 mm
Grazie all'interfaccia seriale il reader può essere facilmente interfacciato con tutti i microprocessori dotati di una porta RS232 TTL(0-5V) o CMOS(0-3.3V).
In questo articoli vediamo alcuni esempi pratici di interfacciamento del modulo OEM.

Interfaccia tramite connessione USB

Iniziamo con l'interfacciamento del lettore RFID 125Khz più semplice, tramite USB ad un normale PC. Come convertitore USB <-> Seriale RS232 TTL usiamo una SX20 (SX20: connettività USB e XBee su tutte le schede di Area SX)


Sulla SX20 è necessario posizionare i dipswitch etichettati con la "U" (1 e 4) su ON mentre vanno messi ad OFF tutti gli altri.
L'interfaccia USB che equipaggia la SX20 è basata sul popolare chip FT232R della FTDI compatibile con tutti i sistemi operativi attualmente in commercio (Windows, Linux e MacOS) e con buona parte dei sistemi embedded (come FOX e SX ARM Linux).
Per maggiori informazioni sulla compatibilità e la disponibilità di driver per il chip FTDI, si consiglia di visitare il sito del produttore: www.ftdichip.com
I collegamenti da effettuare tra la SX20 e il lettore di tag sono riportati nella tabella che segue:

Pin SX20DescrizionePin Reader
1N.C.
2N.C.
3N.C.
4LED STAT (pin 15 Xbee)
5RX (Input)3
6TX (Output)4
7N.C.
8VCC +5V2
9GND1

Per verificare il corretto funzionamento del lettore alleghiamo un semplice tool per windows che va lanciato con la sintassi che segue:

c:\TOOLTEST\RFID-test_tool.exe [porta com assegnata alla SX20]



Download Programma di test per Windows: RFID-TEST-TOOL.zip

Interfaccia con modulo Rabbit

Di seguito è descritto l'interfacciamento del tag reader con un micrprodessore Rabbit RCM3700 montato sulla scheda di sviluppo SX3000 (SX3000EVO tutta la versatilità del modulo RCM3700 e della tecnologia ZigBee in pochi cm).


Di seguito vengono riportati i collegamenti da effettuare tra il reader e la SX3000:

SX3000 JP6DescrizioneReader
1RX (Input)3
2TX (Output)4
9Vcc (+5V)2
10GND1

Per testare il corretto funzionamento con il modulo Rabbit RCM3700 è necessario compilare e caricare tramite il Dynamic C nella memoria del processore il programma di test allegato di seguito:
Download Programma di test per Rabbit: RFID_READER_RABBIT.zip

Interfaccia con modulo BasicX 24

Di seguito è descritto l'interfacciamento del tag reader con un micrprodessore della Netmedia BX24 montato sulla scheda di sviluppo SX18-BX24 (SX18 -BasicX24: una scheda completa per lavorare con i BasicX24).


Di seguito vengono riportati i collegamenti da effettuare tra il reader e la SX18:

SX18 JP3DescrizioneReader
1RX (Input)3
2TX (Output)4
9Vcc (+5V)2
10GND1

Per testare il corretto funzionamento con il modulo BasicX 24 è necessario compilare e caricare tramite l'apposito SDK della Netmedia nella memoria del processore il programma allegato di seguito:
Download Programma di test per BX24: RFID_READER_BX24.zip

Interfaccia con il modem TELIT GM862-PY

Di seguito è descritto l'interfacciamento del tag reader con un modem Telit GM862-PY montato sulla scheda di sviluppo SXPY (Guida all'utilizzo della SX-PY).

Di seguito vengono riportati i collegamenti da effettuare tra il reader e la SXPY:

SXPY EXP2DescrizioneReader
1RX (Input)4
2TX (Output)3
9Vcc (+5V)2
10GND1


Per testare il corretto interfacciamento con il modem della Telit è necessario caricare tramite il tool SxPyDownload il file TEST_RFID.pyo presente nel file compresso di seguito allegato:
Download Programma di test per BX24: RFID_READER_SXPY.zip
La corretta esecuzione del programma e il riconoscimento dei TAG può essere ispezionato tramite console seriale:

Download

Download Datasheet 125K_RFID_Readerv0.9b.pdf

martedì 13 aprile 2010

Un display TFT Touch Screen con interfaccia seriale


Reach Technology propone una serie di controller per display LCD a colori (da 4" fino a 10") con touch-screen, interamente gestibili attraverso una semplice porta seriale o USB.
I moduli della Reach Technology possono essere implementati in un qualsiasi progetto senza alcuna variazione all'hardware già esistente o l'uso di software o driver particolari; è sufficiente un semplice collegamento seriale per inviare comandi e per ricevere gli eventi generati, per esempio dalla pressione di un tasto disegnato sul display LCD.

Ma vediamo in pratica in 4 semplici passaggi quanto è semplice scrivere sul display
la classica videata "hello word".
Pronti ? via.....

STEP 1
Collegare la porta seriale AUX P2 del Kit Reach SLCD43, tramite cavo in dotazione, alla porta COM del proprio PC Windows ed alimentare l'unità LCD con l'apposito adattatore di rete 220V -5V.
In alternativa è possibile, utilizzando una prolunga USB (USB standard A <-> USB mini-B) collegare il modulo Reach SLCD43 alla porta USB del proprio PC (Se richiesti dal sistema operativo i driver per l'FT232R possono essere scaricati gratuitamente dall'indirizzo web: http://www.ftdichip.com/Drivers/). Solo controllando il modulo tramite USB non è necessario collegare l'adattatore di rete.

STEP 2
Individuare la porta COM assegnata dal sistema operativo al device della Reach.
In ambiente Windows è sufficiente visionare il pannello "gestione periferiche"

Sotto Linux, se nono sono collegati altri dispositivi con chip FTDI, il device seriale assegnato sarà /dev/ttyUSB0

STEP 3
Aprire una console seriale (si può usare Hyperterminal, Putty o Minicom) sulla porta individuata nello STEP2 e battere il tasto INVIO sulla console fino a quando il display ritorna il carattere di console ">".


STEP 4
A questo punto possiamo inviare i comandi al modulo per far comparire sul nostro display la classica scritta "hello word".
Digitare in sequenza sulla console i seguenti comandi ed attendere come conferma il carattere ">":

z

Il comando "z" resetta completamente lo schermo.

t "hello word" 100 120

Il comando "t" posiziona il testo "hello word" sullo schemro TFT a 100px per l'asse x e a 120px per l'asse y.
Di seguito il risultato:


Il set completo di comandi accettati dal modulo Reach SLCD43 è largamente descritto nella documentazione contenuta nel CD allegato al kit.

domenica 11 aprile 2010

Eseguire uno script Python su un modem Telit


I moduli Telit Python sono esteriormente e meccanicamente uguali ai modelli standard; la sostanziale differenza è racchiusa al loro interno. Infatti, oltre all'interprete Python 1.5, sono equipaggiati con ben 3MB di memoria per il salvataggio permanente degli script e 1.5MB di ram per la loro esecuzione.

Grazie a specifici moduli l'interprete Python può: inviare comandi AT direttamente al core modem GSM/GPRS, controllare i port di I/O e comunicare con la seriale supplementare che equipaggia solo alcuni modelli.

I moduli specifici del model Telit sono:

  • GPIOper comunicare con le linee di I/O (GPIO)
  • MDM per inviare comandi AT all'engine del modem
  • SER per comunicare con la seriale supplementare
  • MOD libreria d'interfaccia tra Python e le varie funzionalità del modulo
  • IIC libreria per la comunicazione I2C bus che può essere configurata per utilizzare qualsiasi GPIO disponibile
  • SPI libreria per la comunicazione SPI che, come la precedente, può essre configurata per utilizzare qualsiasi GPIO disponibile

La documentazione e la sintassi completa per usare le varie funzioni delle librerie appena elencate è disponibile nel PDF distribuito dal produttore e scaricabile dal seguente link: Telit_Easy_Script_Python_r10.pdf
Il sorgente che segue va copiato e salvato in un file con estensione .py ad esempio IO_SMS.py


#Importo i moduli

import MDM
import GPIO
import MOD



#VARIABILI
GSMNUMBER="xxxxxxxxxx"  #Numero del destinatario dell'SMS
SMSMESSAGE="Il modem Telit con python ti scrive ;)" #Messaggio dell'SMS inviato



#SETTO LA DIREZIONE DEI PORT
r=GPIO.setIOdir(5,0,1) #Setto GPIO5 come output e come valore di default 0
r=GPIO.setIOdir(6,0,1) #Setto GPIO6 come output e come valore di default 0
r=GPIO.setIOdir(7,0,1) #Setto GPIO7 come output e come valore di default 0
r=GPIO.setIOdir(4,0,0) #Setto GPIO4 come input




#lampeggio d'avvio
s=GPIO.setIOvalue(5,1) #Accendo il led su GPIO5
s=GPIO.setIOvalue(6,1) #Accendo il led su GPIO6
s=GPIO.setIOvalue(7,1) #Accendo il led su GPIO7
MOD.sleep(10) #Pausa per un secondo
s=GPIO.setIOvalue(5,0) #Spengo il led su GPIO5
s=GPIO.setIOvalue(6,0) #Spengo il led su GPIO6
s=GPIO.setIOvalue(7,0) #Spengo il led su GPIO7

#Abilito la modalità testo del modem
res = MDM.send('AT+CMGF=1\r', 0) #Invio comando AT
res = MDM.receive(3) #Attendo 3 sec
if(res.find('OK') != -1): #Ricevuto "OK"
  while (1): #Ciclo infinito
    s=GPIO.setIOvalue(6,1) #Accendo il led su GPIO6
    if(GPIO.getIOvalue(4)==0): #Verifico lo stato del port GPIO4
      s=GPIO.setIOvalue(5,1) #Accendo il led su GPIO5
      TXbuff="AT+CMGS=\"%s\"\r" % (GSMNUMBER)
      res = MDM.send(TXbuff, 0)
      res = MDM.receive(2) #Attendo 2 sec
      if(res.find('>') != -1): # se ricevo il prompt
        TXbuff = SMSMESSAGE + chr(26) + "\r" #appendo CTRL + Z
        res = MDM.send(TXbuff, 0) #invio la stringa al modem
        res = MDM.receive(3) #Attendo 3 sec
      s=GPIO.setIOvalue(5,0) #Spengo il led su GPIO5
    MOD.sleep(10) #Pausa per un secondo
    s=GPIO.setIOvalue(6,0) #Spengo il led su GPIO6
    MOD.sleep(10) #Pausa per un secondo
else: #Non ho ricevuto "OK"
  s=GPIO.setIOvalue(7,1) #Accendo il led su GPIO7
  MOD.sleep(10) #Pausa per un secondo
  s=GPIO.setIOvalue(7,0) #Spengo il led su GPIO7
  MOD.sleep(10) #Pausa per un secondo
  s=GPIO.setIOvalue(7,1) #Accendo il led su GPIO7
  MOD.sleep(10) #Pausa per un secondo
  s=GPIO.setIOvalue(7,0) #Spengo il led su GPIO7
  MOD.sleep(10) #Pausa per un secondo
  s=GPIO.setIOvalue(7,1) #Accendo il led su GPIO7
  MOD.sleep(10) #Pausa per un secondo




Per caricare il listato appena riportato nella memoria del modem l'unico software di cui abbiamo bisogno è Hyperterminal presente in qualsiasi versione di Windows (Start -> Programmi -> Accessori -> Comunicazioni ->Hyperterminal ).

Una volta lanciato Hyperterminal dobbiamo, nella finestra che ci appare, selezionare la porta COM del PC a su cui abbiamo collegato il modem Telit (SXPY, EZ863 o GT863) .
Successivamente impostiamo i parametri della comunicazione seriale con i seguenti valori: BPS 115200, Bit 8, Parità Nessuna, Bit di stop 1, Controllo di flusso Hardware; confermiamo cliccando su OK.
In automatico Hyperterminal& avvierà la connessione ma è necessario effettuare altre impostazioni; ci occorre quindi effettuare la disconnessione dal modem cliccando su: Chiama -> Disconnetti. A questo punto dal menu File selezioniamo Proprietà e nella finestra che appare Impostazioni.
Qui clicchiamo sul tasto Impostazioni ASCII.
Nella finestra che segue spuntiamo la voce "Aggiungi avanzamento riga ad ogni ritorno a capo inviato" sia in Trasmissione ASCII che in Ricezione ASCII . Conferminamo scegliendo due volte OK e ci connettiamo nuovamente con il modem cliccando su Chiama -> Chiama. Per vedere se il modem è correttamente connesso è sufficiente digitare sulla console il comando AT e aspettare la risposta OK.

Tra gli innumerevoli comandi AT supportati dal Telit EZ10-PY ve ne sono alcuni proprietari, aggiunti proprio per gestire gli script in Python. Uno dei più importanti è AT#WSCRIPT la cui sintassi completa è:

AT#WSCRIPT = "nome del file", size

Il parametro indica il nome con cui verrà salvato lo script nella memoria del modem, mentre il parametro indica lo spazio in byte occupato dallo script. Quest'ultimo valore si ricava cliccando con il tasto destro del mouse sul file .py (IO_SMS.py) precedentemente creato in cui abbiamo copiato il listato del nostro esempio di script e selezionando la voce Proprietà del menù a tendina che appare.

Come parametro dobbiamo mettere il valore per esteso indicato dalla voce "Dimensioni:".

Digitato sulla console il comando AT#WSCRIPT="t.py", 2826 e battendo invio dopo pochi attimi vediamo apparire il prompt ">>>", a questo punto dal menu Trasferimento di Hyperterminal clicchiamo sulla voce Invia file di testo.... e nella finestra che appare, selezioniamo la path di windows dove abbiamo salvato il file contente il sorgente Python di prova e clicchiamo su Apri.

Dopo pochi istanti riceviamo dal modem un OK a conferma del corretto download dello script. Da questo momento il nostro script è salvato permanentemente nei 3MB di memoria che equipaggiano il modem Telit.
Successivamente dobbiamo indicare quali sono gli script che vanno eseguiti al riavvio del modem, per far questo dobbiamo usare il comando AT#ESCRIPT con la sintassi che segue:

AT#ESCRIPT = "nome del file"

per abilitare il nostro file di test dobbiamo digitare sulla console il comando AT#ESCRIPT = "t.py" e attendere l'OK da parte del modem.

Da questo momento ad ogni riavvio del moden impostando il controllo di flusso DTE basso (basta tenere il modem scollegato dal PC) lo script Phyton t.py viene lanciato. La corretta esecuzione di quest'ultimo e rivelabile vedendo lampeggiare il LED sulla demo board connesso al port GPIO6 (pin 3 dell'RJ11 sul modem) . Cortocircuitando a massa con la pressione del pulsante montato sulla demo board il port GPIO4 dopo pochi attimi verrà inviato un SMS con il messaggio riportato nella variabile SMSMESSAGE al cellulare che ha per numero quello riportato nella variabile GSMNUMBER presente all'inizio del listato precedentemente riportato.

Per cancellare definitivamente uno script dalla memoria del modem basta digitare il comando AT#DSCRIPT rispettando la sintassi che segue

AT#DSCRIPT = "nome del file"