Arduactivate (ita)

 

Questa applicazione serve a far attivare un'uscita digitale di Arduino sfruttando la localizzazione GPS del proprio iPhone.

Ecco cosa ci serve oltre all'applicazione:

- 1 iPhone (iOS >= 4.2.x)

- 1 Arduino (io ho utilizzano la versione Uno)

- 1 Ethernet Shield con microSD (Io ho utilizzato quello con il chipset Wiznet W5100)

- Lo sketch standard del TinyWebServer, scaricalo seguendo il link qui sotto

- 1 connessione ad Internet

Sfrutteremo una delle uscite digitali di Arduino per andare a comandare un interruttore che a sua volta azionerà l'apertura di un cancello (ma potrebbe azionare qualsiaasi altra cosa ovviamente).

Dividiamo il sistema in 3 elementi:

- l'applicazione per iPhone, che "stimolerà" l'azione di Arduino

- Arduino assemblato allo shield ethernet e al codice caricato, che servirà a premere per noi il pulsante del telecomando

- un telecomando che dovremo leggermente modificare.

Le istruzioni passo passo sono le seguenti:

1) Se ancora non lo avete, scaricate il software per programmare Arduino (attenzione testato con la versione 0022!!!) a questo indirizzo, ed installatelo. Collegate Arduino con la presa Usb, avviate il software e provate a caricare l'esempio standard andando su:

"File"-> "Examples" -> "Basics" -> "Blink". Per compilarlo ed uploadarlo usate il tasto apposito o andate su "File" -> "Upload to Board". Dopo qualche secondo dovreste vedere che il led di sistema di Arduino sul pin 13 semplicemente inizierà a lampeggiare.

Se qualcosa va storto fermatevi qui e controllate almeno due cose:

- "Tools"-> "Serial ports" è selezionata la porta usb giusta?

- "Tools"-> "Board" è selezionato il vostro Arduino?

Per proseguire oltre dovremo dare per scontato che sappiate caricare gli sketch di Arduino correttamente.

2) Attaccate lo shield Ethernet ad Arduino; lo shield deve avere uno slot per microSD in cui dovrete inserire una piccola schedina formattata in FAT, questa andrà a contenere le (poche) pagine web che ci serviranno per far andare lo sketch TinyWebServer. Dunque se non l'avete già fatto scaricate il codice di cui stiamo parlando, scompattate il file e carichiamo nel software di Arduino l'esempio che troverete in questo percorso: 

/TinyWebServer/examples/BlinkLed/BlinkLed.pde

Al suo interno è necessario modificare la riga 61 in cui è scritto:

byte ip[] = { 192, 42, 172, 237 };

inserendo al suo posto un indirizzo ip valido e non utilizzato all'interno della propria rete. Ad esempio se dovessimo inserire 192.168.0.13 la riga diventerebbe:

byte ip[] = { 192, 168, 0, 13 };

Trovate poi la funzione di nome "blink_led_handler" ed aggiungete in fondo, prima dell'ultima parentesi graffa il seguente codice:

 doSomething();

 Serial << F("APRO CANCELLO\n");

Dopo la chiusura della funzione copite/incollate il seguente codice:

void doSomething()

{

  digitalWrite(7, HIGH); 

  delay(3000);

  digitalWrite(7, LOW);

}

che serve a dare un impulso di 3 secondi al pin n. 7.

Salvate lo sketch, compilatelo, uploadatelo su Arduino, e collegate il cavo ethernet allo shield.

Prima di testarlo, leggete il file README.txt che c'è nella stessa cartella in quanto contiene le istruzioni per copiare i file necessari nella microSD.

In sostanza, si tratta di aprire il file upload.sh mettendogli alla riga "ARDUINO=" lo stesso indirizzo ip che abbiamo impostato nello sketch, salvare il file ed eseguirlo, in questo modo i file vengono copiati sulla microSD. Per eseguire un file con estensione ".sh" se siamo su un sistema in cui possiamo lanciare degli script .sh (Linux, Mac) basterà aprire una shell e lanciarlo, se siamo su windows invece servirà un eseguibile di nome "curl" reperibile a questo indirizzo e poi aprendo una finestra del terminale ("Esegui"-> cmd), posizionarsi nella directory /TinyWebServer/examples/BlinkLed/static/

e lanciare i comandi:

curl -0 -T index.htm http://192.168.0.13/upload/

curl -0 -T jquery.js http://192.168.0.13/upload/

curl -0 -T lights.png http://192.168.0.13/upload/

curl -0 -T main.js http://192.168.0.13/upload/

curl -0 -T style.css http://192.168.0.13/upload/

Se tutto questo dovesse risultare complicato, e avete a disposizione un lettore di schede microSD, fate prima a copiarci dentro a mano i file che servono...

Ora dovreste avere Arduino con attaccato lo shield Ethernet, alimentato, con lo sketch appena modificato e collegato alla vostra rete. Per essere sicuri che tutto funzioni, aprite un browser e digitate l'indirizzo "http://192.168.0.13/ledstatus". Se vi appare una pagina bianca con solo uno "0" od un "1", è tutto corretto e potete proseguire, altrimenti c'è qualcosa che non va e bisogna fermarsi e capire cosa.

Per verificare il funzionamento dello shield, tenete Arduino collegato via usb e aprite il monitor seriale che trovate in "Tools" -> Serial Monitor. Alla richiesta "http://192.168.0.13/ledstatus" dovrebbe scrivere alcuni messaggi di stato da cui capire dov'è l'errore. Per precauzione potete cmq provare a resettare Arduino con il pulsante di reset, a volte è la microSD a fare i capricci.

Arrivati qui, funziona tutto? Il grosso è fatto... Ora avete il pin digitale numero 7 che è attivabile tramite una chiamata http, non ci resta che

- scaricare l'applicazione che fa la chiamata tramite iPhone

- collegare qualcosa di più di un led all'uscita del pin 7 (come ad esempio il nostro telecomando del cancello)

2) Scarica l'applicazione  ArduActivate da iTunes ed eseguila. Chiederà di abilitare i servizi di localizzazione.

3) Seleziona il pulsante "Active" in alto a sinistra in modo da poter cliccare sul pulsante "set default base" che cattura la vostra posizione attuale e la salva come posizione di riferimento per il calcolo della distanza.

4) Ora si può uscire ed andare nelle Impostazioni dell'iPhone, trovere in basso la categoria "ArduActivate", entrateci e vedrete una schermata simile a questa:

ArduActivate Settings

5) Nel campo di testo dal nome "Arduino Url signal" bisogna inserire l'indirizzo ip pubblico della nostra connessione di casa, oppure un nome che fa riferimento al nostro indirizzo pubblico.

Esistono infatti dei servizi gratuiti che abbinano un nome a vostra scelta ad un indirizzo ip, in modo che possiate più facilmente ricordarvelo e che al cambiamento dell'indirizzo ip (ad esempio a causa di una disconnessione), venga abbinato sempre il nuovo ip allo stesso nome. Dyndns è uno tra i più famosi ad offrire questo tipo di servizio, se non l'avete già vi consiglio di crearne uno ora.

Supponendo che il vostro indirizzo pubblico sia: arduino.dyndns.info , andremo a settare:

 Arduino Url read signal: arduino.dyndns.info/ledstatus

e

Arduino Url Switch set: arduino.dyndns.info/blinkled

Fate attenzione che va scritto senza "http://" 

Ora uscite dalle impostazioni.

6) Siamo quasi pronti per ricevere le chiamate dall'esterno, dobbiamo però fare in modo di istruire il nostro router o modem adsl che instradi le chiamate che arrivano dalla porta 80 all'indirizzo interno del nostro arduino (eg. 192.168.0.13). In genere è una impostazione che può chiamarsi "Inoltro porte", o "Virtual server", dipende dai modelli di router.

Una volta fatto questo, testiamolo ancora aprendo un browser e andando alla pagina "http://nostrodns/ledstatus", ossia nel nostro esempio scriveremmo nell'indirizzo del browser:

http://arduino.dyndns.info/ledstatus

Anche in questo caso dovremmo vedere una pagina bianca con uno "0" o un "1".

7) Avviamo l'applicazione ArduActivate sul nostro iPhone e testiamola cliccando sul pulsante "Force Open", a questo punto dovrebbe attivare Arduino, e se nel pin digitale n.7 ci fosse un led, accenderlo per 3 secondi e rispegnerlo.

L'idea alla base di questa applicazione è stata quella di voler far aprire il cancello di casa automaticamente, senza mettere mani al telecomando. La situazione tipo è quando sono in moto e voglio evitare di dovermi fermare in strada con guanti, casco e cercare il telecomando di apertura. In questo modo, prima di partire per il ritorno, avvio l'applicazione e la lascio in tasca.

La barra che noterete in basso nell'applicazione serve a impostare a che distanza da casa far partire il segnale. Questo può dipendere da vari fattori, quali la velocità di apertura del cancello, il tempo per cui rimane aperto, la velocità con cui arrivate nei pressi... Nel mio caso un buon setting per trovarlo aperto è quello di impostarlo sui 200 metri circa.

Vi è una ulteriore funzione che riguarda lo switch  "Return Active" che vedete in alto a sinistra. Volevo evitare che partendo da casa e attivando l'applicazione, questa facesse scattare subito l'apertura del cancello (per l'apertura manuale si può sempre premere il pulsante "Force open"), quindi in sostanza se attiviamo l'app che siamo ancora dentro il raggio di metri impostato, non succederà nulla; superata quella soglia automaticamente si mette in modalità "Return" e tornando aprirà il cancello.

Rimane ancora un aspetto, come collegare il telecomando di casa al pin 7 di Arduino?

Nel mio caso il telecomando ha un solo tasto per l'apertura del cancello perciò ho scelto la strategia di fare un ponte tra i contatti del pulsante in questione (come se il pulsante fosse sempre premuto), e di controllare l'invio del segnale controllandone l'alimentazione.

Per controllare l'alimentazione ho utilizzato un Mosfet. Si sarebbe potuto utilizzare anche un relè, la differenza sta nel fatto che uno è controllato da differenza di voltaggio, l'altro da differenze di corrente, ma entrambi fungono da interruttori per controllare circuiti che sono alimentati differentemente. Arduino ha la sua alimentazione, il telecomando ne ha un'altra, i due circuiti sono e restano fisicamente separati; tramite il mosfet posso quindi controllare l'interruzione di un circuito che ha altri voltaggi rispetto a quello di funzionamento di Arduino.

Quindi:

- 1) Saldato i piedini del pulsante (effetto "sempre premuto")

2) Connesso i terminali della batteria del telecomando ad un Mosfet power kit che è controllato dal pin 7 di Arduino (filo bianco). 

Guardando il Mosfet power kit della foto sotto vediamo: il polo positivo (rosso) e negativo (nero) della parte alta che vanno nei morsetti rispettivi del circuito del telecomando (vedi foto sopra).

I poli positivo (rosso) e negativo (nero) della parte bassa vanno il primo al polo positivo della batteria, il secondo alla massa su Arduino. Collegate alla massa di Arduino anche il polo negativo della batteria.

Ecco tutto. Di seguito un video in cui si vede il funzionamento e le parti del kit. Nel video si vede un ulteriore Arduino con un modulo GSM, questo mi serve per dare la funzionalità di apri cancello anche tramite una chiamata di telefono (quindi trasformando ogni cellulare un possibile telecomando del cancello, ma questa è un'altra stora...) .

Video of ArduActivate in azione:

Video della versione 1.1 con caratteristica di background:

Un'ultima domanda...