domenica 26 gennaio 2014

Interfacciare Arduino alle Philips Hue - parte 2 - il progetto

Prosegue la mia sperimentazione con le Philips Hue. L'idea di base era quella di rimpiazzare una lampada rotta in ufficio dotata di sensore di movimento (pir) e di luce, in grado di autonomamente determinare la presenza di una persona e di accendere le lampade fluorescenti dimmerandone la luminosità in funzione della reale illuminazione naturale della stanza.
Per replicare il funzionamento ho pensato di interfacciare le Phlips Hue con una scheda Arduino Ethernet, un sensore di presenza di tipo infrarosso (pir) e un sensore di luce.
Questa volta ho fatto la spesa su Exp-Tech che ha prezzi in linea con il resto del mercato, ma con un assortimento e disponibilità decisamente sopra la media.

  
Per una contenuta spesa di 71 euro ho portato a casa anche una Skeleton Box, ovvero un piccolo case trasparente in metallo e plexyglass tutto montabile senza viti, con dei semplici rivetti in plastica a pressione.
Il primo prototipo lo potete vedere in questa foto:


Come ben visibile, i due sensori li ho volutamente lasciati appesi all'esterno con del filo di ferro, in modo da poterne facilmente variare l'orientamento.
In particolare il sensore PIR è quello più delicato, in quanto pur avendo una copertura su quasi 180°, di fatto ha una copertura "a macchia di leopardo", per cui è bene avere ampia libertà di posizionamento per evitare poi malfunzionamenti una volta posizionato in modo definitivo il case.

domenica 12 gennaio 2014

Interfacciare Arduino alle Philips Hue - parte 1 - le REST API

Sono arrivate in ufficio questa settimana le Philips Hue, per la precisione lo started kit acquistabile sull'Apple Store

Non sono delle comuni lampade a led, bensì della lampade dotate di trasmettitore a standard ZigBee a sua volta interfacciato con un accessorio denominato Bridge, che ha il compito di dialogare con tutte le lampade "a tiro di fucile" e mettere a disposizione il controllo delle stesse su rete Ethernet.
Per gli utenti meno smaliziati è disponibile una app gratuita chiamata appunto Philips Hue, che permette di pilotare le lampade singolarmente o a gruppi (fino a un massimo di 50 lampade), scegliendo la colorazione in base a una qualsiasi foto caricabile nell'app e trascinando le icone rappresentanti le lampade sul punto desiderato all'interno dell'immagine o foto. Il risultato, immediato, è il cambio di colorazione della lampada con l'esatta tonalità scelta.
Questo il video ufficiale di Philips:

lunedì 6 gennaio 2014

Rilevatore presenze - parte 4 - il codice (client)

Nel precedente post ho mostrato le porzioni principali del codice su Arduino.
Per effettuare la chiamata al server, viene invocata una chiamata HTTP in modalità GET, ovvero passando i parametri direttamente in query string.

E' previsto un unico tipo di chiamata, usato indifferentemente sia per l'entrata che per l'uscita.
Si noti che non è il client arduino a decidere se si tratta di una timbratura di entrata o di uscita, bensì il server secondo delle logiche applicative ben precise, dovute alla sequenza di chiamate.

La sintassi della chiamata è la seguente:

http://SERVER/presenze.aspx?code=CODICERFID&dataora=DATAORA

dove SERVER è ovviamente l'ip del vostro web server, presenze.aspx il nome della pagina aspx invocata, CODICERFID il codice della tag rfid rilevata e DATAORA la data/ora in formato yyyymmddhhMMss letta dalla rtc shield montata su Arduino.

La risposta del server è una stringa in questo formato
  • XyyyymmddhhMMss 
dove:
  • X: vale E per entrata, U per uscita
  • yyyymmddhhMMss :data/ora del server

Il valore X serve per determinare il messaggio da mostrare all'utente quale conferma della timbratura.

lunedì 23 dicembre 2013

Domotica in mezzora: dimmerare un led dall'ipad via wifi (NetIO app) - parte 2

L'app NetIO su iPad non necessita praticamente di alcuna configurazione. 
E' necessario esclusivamente utilizzare lo stesso account usato sul sito http://netio.davideickhoff.de/editor per poter caricare l'interfaccia disegnata con il designer UI.
Appena lanciata l'applicazione è sufficiente "scrollare" l'iPad per aprire il menu di gestione. In alternativa è possibile fare uno swipe a 2 dita dal basso verso l'alto, tecnica sconsigliata perchè è davvero facile che l'iPad interpreti il comando mostrando il menu rapido di iPad introdotto con iOS7.



dopo aver inserito le credenziali, appariranno i layout salvati online.
Il file di configurazione in formato json può essere salvato dal web tramite il pulsante Download.
Questo il mio layout mostrato nel post precedente:

{
 "name": "test1",
 "connections": [
  {
   "host": "192.168.5.50",
   "port": 2560,
   "name": "board",
   "initialsend": "Local"
  }
 ],
 "version": 1.3,
 "device": "iPad",
 "type": "NetIOConfiguration",
 "pages": [
  {
   "sound": "active",
   "name": "Arduino",
   "items": [
    {
     "comment": "Fire light ON button",
     "sends": [
      "LED9 on"
     ],
     "top": 20,
     "height": 80,
     "width": 160,
     "shape": "rounded",
     "left": 20,
     "type": "button",
     "icon": "lamp_on",
     "interval": 2000
    },
    {
     "comment": "Fire light OFF button",
     "sends": [
      "LED9 off"
     ],
     "top": 110,
     "height": 80,
     "width": 160,
     "shape": "rounded",
     "left": 20,
     "label": "",
     "type": "button",
     "icon": "lamp_off"
    },
    {
     "comment": "Fire lights slider",
     "minValue": 0,
     "textcolor": "0,0,0",
     "sends": "set brightness {value}",
     "parseResponse": "\\d+",
     "top": 300,
     "maxValue": 255,
     "height": 450,
     "width": 30,
     "reads": "get brightness",
     "showValue": true,
     "type": "slider",
     "left": 20
    },
    {
     "offSend": "LED9 off",
     "parseResponse": "\\d+",
     "top": 200,
     "offText": "Off",
     "height": 50,
     "width": 100,
     "reads": "LED9 status",
     "onValue": "1",
     "onText": "On",
     "onSend": "LED9 on",
     "type": "switch",
     "formatResponse": "{0}",
     "left": 20
    }
   ],
   "label": "Home",
   "width": 1024,
   "connection": "board",
   "background": "NetIOTest iPadbackground.png",
   "sounds": "keyboardsetting",
   "height": 768
  }
 ],
 "orientation": "landscape",
 "navigation": "fix",
 "pagebuttonwidth": "static"
}


Dopo il caricamento i comandi saranno subito operativi, a patto che il vostro server arduino risponda correttamente via rete. In caso di comunicazione non possibile, tutti i controlli della vostra interfaccia rimarranno inesorabilmente in stato disabilitato e quindi di colore grigio.


Purtroppo non ho trovato il modo per gestire dinamicamente l'indirizzo direttamente dall'iPad, per modificare l'indirizzo del server è necessario modificare l'oggetto Connection da Designer UI e poi ricaricare il layout sull'iPad. Un'altra cosa su cui stare attenti è che non è sufficiente uscire e rientrare in NetIO per veder caricata la nuova versione dell'interfaccia, ma è necessario aprire il menu, aggiornare (tasto con le frecce) e ricliccare sull'interfaccia da caricare.

Test del sistema

Per effettuare il test del sistema agite sui bottoni:
i due pulsanti in alto permetteranno di accendere e spegnere il led. L'interruttore farà esattamente la stessa cosa. Lo slider rappresenta la funzione più interessante perchè ci permetterà di dimmerare, ovvero accendere parzialmente il led, modificandone la luminosità proporzionalmente alla posizione dello slider. Se torniamo al codice del post precedente, si può notare come semplicemente il valore dello slider viene letto come valore nel range 0-255, che viene poi inviato alla porta 9 come valore analogico, e quindi come segnale pwm.



sabato 21 dicembre 2013

Domotica in mezzora: dimmerare un led dall'ipad via wifi (NetIO app) - parte 1

Un piccolo esempio di domotica: voglio controllare l'accensione/spegnimento e luminosità di un led pilotato da Arduino, tramite iPad in rete wifi.
Potrebbe essere l'esempio per un sistema base per il controllo delle luci in un ambiente o per altre periferiche tipiche dei sistemi domotici (porte, finestre, climatizzatore, ecc).
L'esempio è molto semplice e non richiede la programmazione su iPad. Infatti la programmazione in ambiente iOS richieste conoscenze specifiche e l'ambiente XCode. Al di là della difficoltà di approcciare a un ambiente IDE diverso da quello di Arduino, anche presupponendo di saper programmare in objC in ambiente XCode, è richiesto un certificato per sviluppatori per poter installare l'app creata sul proprio device, senza questo è possibile unicamente utilizzare l'emulatore sul Mac.
Per riuscire in mezzora a creare una app utilizzabile da tutti senza scrivere mezza riga di codice, utilizzerò l'app NetIO disponibile in AppStore a questo indirizzo https://itunes.apple.com/it/app/netio/id464924297?mt=8 . Il costo è modesto, meno di 7 euro, e considerato i risultati che permette di ottenere in pochissimi minuti la consiglio caldamente.



domenica 8 dicembre 2013

Rilevatore presenze - parte 3 - il codice (client)

Il codice di controllo è molto banale, astraendoci dal funzionamento delle singole librerie.
Vediamo brevemente il controllo delle periferiche:

Buzzer

è basato su un'unico pin. Il buzzer si attiva inviando lo stato HIGH all'uscita. Per ottenerere un beep udibile è sufficiente un impulso di qualche decina di millisecondi. 

const int chipBuzzerPin =2; 

void beep()
{
   digitalWrite(2, HIGH);
   delay(120);   
   digitalWrite(2, LOW);
   delay(120);   
}

void beepLong()
{
   digitalWrite(2, HIGH);
   delay(2000);   
   digitalWrite(2, LOW);
   delay(120);   
}

void setupBuzzer()
{
  pinMode(chipBuzzerPin,OUTPUT);    
  digitalWrite(chipBuzzerPin, LOW);    
}

venerdì 6 dicembre 2013

Self Balancing Robot - parte 9 - assemblaggio del robot

Eccoci arrivati ai dettagli dell'assemblaggio del robot.
Non sono richieste abilità particolari, a parte l'uso del saldatore basta un minimo di attitudine al bricolage.

La lista completa (o quasi) delle componenti è questa, con l'indicazione del prezzo.