Archivio mensile:ottobre 2012

Tuco: Targhetta elettronica a porta con Arduino

Tuco 1.0 è una targhetta elettronica a porta: “intelligente”, open source e open hardware.

E’ stata concepita per essere installata (teoricamente) sulle porte degli studi della nostra università.

Lo scopo della targhetta è visualizzare in tempo reale informazioni del tipo: numero dello studio, docente/i, orari di ricevimento, contatti mail e/o telefonici etc etc… ma soprattutto avvisi presi in tempo reale da uno dei canali di comunicazione dell’università.

E’ stata realizzata sfruttando l’hardware del famoso progetto 100% Italiano chiamato “Arduino“.

Questo prototipo in particolare usa: Arduino Duemilanove, Ethernet Shield, un router (modificato) WiFi Fonera 2100 e un display grafico (G-LCD) parallelo KS0107

Quindi da oggi, le targhette stampate sulle porte della nostra università, potrebbero trasformarsi da queste:

32004523964655204561918

A qualcosa di molto simile a questa:

dscn1128h

Come è stato realizzato questo progetto?

Parte hardware:

Dopo aver configurato le impostazioni del firmware DD-WRT (open) correttamente, il nostro router Fonera deve collegarsi alla propria rete WiFi in modalità repeater WiFi (una valida alternativa della Fonera è il TL-WR702N)

Il router andrà collegato all’ethernet shield con un normale cavo RJ45

Il wiring fatto tra GLCD e Arduino si può trovare sulla documentazione ufficiale della librearia grafica GLCD per Arduino: http://www.arduino.cc/playground/Code/GLCDks0108

Avendo l’accortezza, però, di cambiare i pin:

GLCD – ARDUINO

9    -> D2
10 -> D3

e

16 -> A1
15 -> A2
Per poi ottenere questo:
fdsfsdfsd

Parte software:

Dopo aver scaricato e configurato la propria Arduino IDE, bisogna scaricare ed installare nel path giusto la libreria grafica GLCD.

All’interno della libreria grafica GLCD vanno modificato alcuni file in questo modo:

In:    glcd/glcd_Config.h

Bisogna: commentare #include “config/ks0108_Panel.h” e togliere il commento da //#include “config/ks0108_Manual_Config.h”

In: glcd/config/ks0108_Manual_Config.h

Bisgona: modificare la linea

#define glcdData2Pin        10
#define glcdData3Pin        11

in

#define glcdData2Pin        2
#define glcdData3Pin        3

Save & exit.

Questa modifica è necessaria in quanto sia l’etherne shield che il glcd hanno in comune i pin 10 e 11, dunque per evitare incompatibilità tra i due hardware, la libreria va modificata come sopra

Il firmware:

Il firmware, da me scritto, è presente nella mia cartella personale su: cliccami

Circa i punti salienti del firmware, posso aggiungere che la funzione principale loop (un loop infinito) è strutturata quanto segue:

void loop() { 
  logo();
  cornice();
  numero();
  mail();
  myConnect();
  parse();
  disconnect();
}

In particolare:

Logo

è una funzione che restituisce due immagini bitmap, opportunamente realizzate con un tool (in java e open) all’interno della libreria grafica glcd.

In particolare restituisce il logo della nostra università diviso in due metà.

Cornice

Grazie all’uso dell’oggetto gText ho strutturato il display in tre parti:

immaginerv

Questo mi permette di avere le informazioni divise per aree grafiche tematiche:

Nella superiore visualizzo nome e cognome del/dei docenti e numero dello studio.

Al centro tutte le informazioni DINAMICHE

Nella parte inferiore l’orario di ricevimento

numero e mail

Sono due funzioni che stampano sul gText.centrale rispettivamente: numero stanza e l’indirizzo email.

myConnect

E’ la funzione che mi permette di instaurare un collegamento in modalità client, tra la mia arduino ed il server sebeto.

In particolare myConnect cerca di instaurare il collegamento, ma se dopo tre tentativi non riesce a stabilire una connessione, avviene un hardreset grazie alla macro definita nell’header del firmware.

Una volta stabilita la connessione, effettuo il comando GET verso l’api news (settata in modo tale da  restituire un solo avviso)

parse

E’ la funzione che realizza il parsing del primo avviso restituito dall’api news, in particolare cerca la sottostringa content e memorizza il contenuto dei primi 300caratteri in un buffer.

Il buffer viene stampato char by char con un ritardo di 50ms tra un char e l’altro.

disconnect

realizza la disconnessione dell’arduino dal server.

Note finali:

  • Non avendo un sistema di avvisi centralizzato e comune, in questo prototipo, è stato utilizzato l’api news a scopo dimostrativo.
  • Se avessimo un sistema di avvisi centralizzato si potrebbe modificare il firmware in questo modo:
  1. una query join tra il numero di porta a cui è stato assegnato l’arduino e il DB dei docenti
  2. la query potrebbe restituire molte informazioni, ad esempio: nome, cognome, email, telefono etc etc
  3. il primo/i avviso di ogni docente di quello studio
  4. print delle informazioni scelte su glcd
  • Il limite degli avvisi in questo prototipo, è stato fissato a 300 per ragioni di memoria, leggibilità e perchè fa più figo pensare gli avvisi come dei tweet
  • Essendo open source, ogni idea e modifica è facilmente realizzabile
  • Nel video il display sembra rovinato o sbiadito: è un effetto dovuto ai filtri video di YouTube.
  • Eventuali combinazioni hardware possono essere:
  1. Router -> Ethernet Shield -> Arduino -> Glcd (è il mio prototipo)
  2. Router -> Arduino Ethernet -> Glcd
  3. Arduino WiFi Shield -> Arduino -> GLCD
  4. Arduino + WiFi (su singola pcb) -> Glcd (la combinazione migliore per spazio)

Alcune foto:

dscn1122t dscn1126yt dscn1127h

Tuco 1.0 firmware