27 dicembre 2011

6 - Arduino comanda led RGB


In questo progetto ho usato il mio Arduino per controllare l'illuminazione di due casette in legno che andranno ad allestire una vetrina natalizia.

Componenti utilizzati:
Due casette in legno, Arduino UNO, 2 led RGB, 2 led a luce bianca e alcune resistenze:

Descrizione:
Dopo aver costruito le casette ho pensato di mettere un illuminazione interna per renderle più carine, ho così inserito un led RGB e un led al luce bianca in ognuna di esse.
Essendo un led RGB ad anodo comune ho alimentato il piedino più lungo del led con i 5 volt di Arduino servendomi di un' opportuna resistenza, mentre gli altri 3 piedini li ho collegati ai pin 9,10,11 di Arduino. Così facendo, tramite la funzione "analogWrite" sono riuscito a controllare l'intensità dei 3 colori principali Red, Green e Blue ottenendo diverse tonalità di colore.
La funzione "analogWrite" permette di impostare un valore in uscita del pin che varia da 0 a 255.
Nel mio caso, avendo un led ad anodo comune otterrò:

AnalogWrite(PinRed, 0)  ------> luce rossa accesa
AnalogWrite(PinRed,255) -----> luce rossa spenta
AnalogWrite(PinRed,125) -----> luce rossa a mezza tonalità
...e così via!

Allo stesso modo comando sia la luce verde che la luce blu.
Per creare un gioco di luci in continuo cambiamento mi sono servito di cicli "For" per ottenere diverse tonalità di colore.
In fine per poter illuminare la parte laterale delle casette ho introdotto un semplice led a luce bianca che accendo e spengo casualmente.

Sketch Arduino:
Puoi scaricarlo qui!

Video:

5 - Arduino IR: pilotare macchinina con telecomando della TV


Descrizione:
In questo progetto ho realizzato una macchinina pilotabile dal telecomando della TV servendomi di un semplice ricevitore IR con preamplificatore e della libreria "IRremote".

Componenti utilizzati: ArduinoUNO, macchina telecomandata, driver L298N, batteria per macchinina telecomandata, telecomando televisore SONY, ricevitore IR preamplificato.



Procedimento:
1- Smontare un macchinina telecomandata mantenendo solamente i motori;
2 - Creare e caricare lo sketch per Arduino (potete usare il mio!);
3 - Preparare una piccola antenna per la macchinina con in cima il il ricevitore IR che andrà collegato ad Arduino in modo che il segnale arrivi sul pin 9;
4 - Collegare i motori della macchinina ad Arduino servendosi del driver L298N;
5 - Alimentare il tutto con una batteria.

Come funziona il programma?
Grazie al ricevitore IR e alla libreria IRremote.h possiamo leggere la codifica esadecimale del pulsante del telecomando che abbiamo premuto.
Nel mio caso, usando un telecomando SONY, ho usato i seguenti tasti:

TASTO TELECOMANDO   >      CODIFICA     >   MOVIMENTO CONTROLLATO

                   2                         >         810               >                 AVANTI
                   1                         >         10                 >                 AVANTI A SINISTRA
                   3                         >         410               >                 AVANTI A DESTRA
                   4                         >         C10              >                 SINISTRA (inutile)
                   5                         >         210               >                 FRENO (spegne i motori)
                   6                         >         A10              >                 DESTRA (inutile)
                   7                         >         610               >                 INDIETRO A SINISTRA
                   8                         >         E10              >                 INDIETRO
                   9                         >         110               >                 INDIETRO A DESTRA


Sketch Arduino:
Scaricare sketch Arduino da qui!


Osservazioni e suggerimenti:
La libreria IRremote.h non contiene la codifica dei telecomandi di tutte le marche!
Nel mio sketch ho lasciato la possibilità di leggere tramite monitor seriale la codifica del tasto schiacciato sul telecomando.
Per verificare la compatibilità del proprio telecomando basterà premere un tasto e se Arduino stamperà su monitor seriale una codifica esadecimale vorrà dire che la libreria "IRremote.h"comprende quella marca.

Video:


3 novembre 2011

4 - Arduino salva dati inviati da PROCESSING nella EEPROM

In questo programma ho utilizzato la EEPROM del mio Arduino per salvare le coordinate del mouse inviate da PROCESSING.


Componenti utilizzati: Arduino UNO, PROCESSING, led.


Descrizione:
ArduinoUNO è dotato di 1Kb (1024byte) di memoria EEPROM  per cui avremo spazio per 1024 dati da salvare.
Avendo a disposizione solamente 8 bit, ogni dato che salveremo nella EEPROM non dovrà superare il valore 255, in quanto con 8 bit possiamo esprimere al massimo 256 numeri.
Per facilitare le cose e, per il motivo sopra citato, ho deciso di creare una finestra di disegno con PROCESSING che non supera i 255 pixel d' altezza e di larghezza!
Per gestire la memoria EEPROM di Arduino ho usato la libreria "EEPROM.h" dove le tre funzioni principali sono:
-"EEPROM.clear()" per azzerare la memoria;
-"EEPROM.write(indirizzo,valore)" per scrivere i dati in memoria;
-"EEPROM.read(indirizzo)" per leggere i dati in memoria;

Con PROCESSING ho scritto un semplice programma che creare una finestra (255 x 255) e  trasmette i dati delle coordinate X e Y del mouse (solamente se premuto) ad Arduino tramite porta seriale.
Il primo dato inviato su seriale corrisponde alla coordinata X del mouse, mentre il secondo dato inviato corrisponde alla coordinata Y del mouse.

Avendo a disposizione solamente 1024 indirizzi di memoria EEPROM di Arduino ho deciso di salvare nei primi 512 indirizzi le coordinate di X e nei restanti 512 indirizzi le coordinate di Y, per cui dall'indirizzo 0 all'indirizzo 511 ci saranno le coordinate X e dall'indirizzo 512 all'indirizzo 1023 ci saranno le coordinate di Y.
La prima operazione che svolge lo Sketch di Arduino è quella di azzerare la memoria, dopo di che si mette in attesa di ricevere dati dalla porta seriale. Il primo dato che leggerà (coordinata X del mouse) verrà salvato all'indirizzo di memoria 0, mentre il secondo dato che riceverà (coordinata Y del mouse) verrà salvato all'indirizzo di memoria 512. IL dato successivo (coordinata X) verrà salvato all'indirizzo di memoria 1 e il dato dopo (coordinata Y) verrà salvato all'indirizzo 513, e così via.
Finiti gli indirizzi di memoria a disposizione, Arduino accenderà un led di avviso collegato al pin 13.
Così facendo abbiamo salvato le coordinate di dove siamo passati con il mouse nella nostra EEPROM.
Per fare una verifica basterà caricare su Arduino lo Sketch d'esempio "eeprom_read" per andare a leggere tutti i nostri dati salvati nella EEPROM.
Attenzione!!! bisogna  modificare lo Sketch nellla riga dove c'è:
(if == 512)
sostituendo il 512 con 1024. In questo modo il programma ci stamperà tutti i 1024 dati che abbiamo salvato.

Osservazioni:
Prima di effettuare la verifica dell'avvenuta memorizzazione delle coordinate X eY del mouse nella memoria EEPROM è necessario terminare l'esecuzione del programma scritto con PROCESSING altrimenti ci sarà la comunicazione seriale di Arduino occupata e non possiamo utilizzare il nostro monitor seriale.
Nello sketch di Arduino creato da me al termine della scrittura dei dati in memoria c'è una funzione chiamata "inizio()" che fa attendere ad Arduino 1 minuto prima di ricominciare il ciclo. Questa funzione potrà essere modificata in modo da utilizzare i dati salvati nella EEPROM  per svolgere determinate azioni:
per esempio si potrebbero collegare due attuatori lineari (formati da due motori passo a passo) che eseguono su un foglio di carta la scritta o il disegno fatti con il muose nella finestra di PROCESSING.


Programma con PROCESSING:
Puoi scaricare il file qui!

Sketch per Arduino:
Puoi scaricare il file qui!

Video:




2 novembre 2011

3 - Arduino Web Server per macchina WiFi




Descrizione:
Ispirato dalla tecnologia del "Ar drone" (quadricottero comandabile da iPhone tramite rete WiFi) ho pensato di applicarla ad una macchina telecomandata servendomi di pezzi trovati per casa!
L'obbiettivo sarà quello di creare una macchinina che trasmetta una rete WiFi in modo da poterla comandare da qualsiasi dispositivo in grado di connettersi ad essa: iPhone, Pc, Wii, PS3.....

Componenti utilizzati: ArduinoUNO, shield ethernet, macchina telecomandata, driver L298N, router WiFi, batteria per macchinina telecomandata, cavo ethernet.

Procedimento:
1- Smontare un macchinina telecomandata mantenendo solamente i motori;
2 - Procurarsi un router WiFi e smontarlo in modo da renderlo il più leggero possibile;
3 - Collegare Arduino all'apposito shield ethernet;
4 - Creare un web server e l'apposita pagina HTML dotata di 9 tasti per poter controllare la macchinina in ogni direzione;
5 - Caricare lo sketch creato su Arduino;
6 - Collegare i motori della macchinina ad Arduino servendosi del driver L298N;
7 - Montare il router sulla macchinina e collegarlo ad Arduino tramite un cavo ethernet;
8 - Alimentare il tutto con una batteria.

Abbiamo così creato una rete alla quale basterà agganciarsi tramite WiFi e digitando l'indirizzo del web server (192.168.1.177), caricato su Arduino, potremo comandare la nostra macchinina.
Il compito di Arduino sarà dunque quello di leggere la richiesta di movimento del client connesso al server ed eseguirla facendo muovere i motori della macchinina!



Sketch Arduino:
Scaricare sketch Arduino da qui!


Osservazioni e suggerimenti:
Volendo è possibile collegare un IP CAM al router della nostra macchinina per poter vedere dove andiamo direttamente dal pc:
Arduino - Macchinina WiFi Spia (post non ancora disponibile).

Video:

29 ottobre 2011

2 - Arduino modem GSM


A grande richiesta ho deciso di costruire un modem GSM in grado di monitorare la corrente elettrica e  nel caso di Black_Out avvisa con un SMS oppure con una telefonata sul cellulare. Questo modem creato con Arduino e shield GSM è possibile applicarlo ovunque ne abbiamo la necessità: casa, ufficio, azienda....
In un  secondo momento, ho aggiunto un sensore di luminosità che servirà a monitorare anche il sistema d' antintrusione di casa!

Componenti utilizzati:
Vecchio "case" di un Hard Disk, presa/lampadina di emergenza,  ArduinoUNO, shield GSM, sensore di luminosità, led, bottone, componenti elettronici vari e una SIM di qualsiasi operatore telefonico.

 Funzionamento presa/lampadina di emergenza: collegata ad una presa qualsiasi della corrente, in caso di Black_Out emette una luce tramite un led.

Descrizione:
CIRCUITO:
-Montare e saldare tutti i componenti che formano lo shield GMS;
-Collegare lo shield GSM ad Arduino;
-Smontare lampadina d'emergenza e saldare ai due piedini del led che troviamo dentro due cavetti che andranno collegati al nostro Arduino. In questo modo Arduino terrà monitorato il led che in caso di Black-out si accenderà facendo arrivare un aumento di tensione ad un pin analogico!
-Collegare 4 led (rosso, blu, verde, giallo) che ci serviranno per capire in che stato si trova il nostro modem.
-Collegare un bottone che ci servirà per resettare alcune funzioni;
-Per poter monitorare l'impianto d'antintrusione di casa, possiamo collegare due cavetti al led che segnale l'allarme (come fatto precedentemente con la lampadina d'emergenza) o servirci di un sensore di luminosità che andrà incollato sul led da monitorare.
Per abbellire il tutto ho deciso d inserire nel "case" del mio vecchio Hard Hisk il circuito creato.
Per quanto riguarda l'alimentazione sarà necessario collegare Arudino ad un gruppo di continuità in modo che, in caso di Black-Out, il nostro modem possa rimanere acceso qualche minuto per segnalarci l'evento.
Arduino dovrà essere alimentato a 12 volt per poter far funzionare senza problemi lo shield GSM!
La presa/lampada di emergenza dovrà essere collegata ad una presa di corrente qualsiasi.

COME FUNZIONA IL PROGRAMMA:
Il programma permette ad Arduino di agganciarsi alla rete GSM in modo da poter effettuare chiamate e invaire SMS, se ciò avviene correttamente si accenderà un led verde del modem!
In questo caso Arduino, tramite un pin analogico, tiene monitorato il led della lampadina d'emergenza e nel caso si accenda (BLACK-OUT) procede a effettuare due squilli sul numero di telefono da noi inserito, tenendo il led blu accesso. Fatto ciò rimarrà in un ciclo infinito fino a che non verrà ripristinata la corrente, facendo lampeggiare in modo alternato led rosso e led blu, continuando però a monitorare il sistema d'antintrusione di casa.
Una volta ripristinata la corrente Arduino smetterà di far lampeggiare i led rosso e blu e procederà ad inviare un SMS di notifica ("Corrente _ripristinata!") riaccendendo il led verde.
Nel caso scatti l'allarme di casa, Arduino lo rileverà tramite il sensore di luce piazzato sul led dell'allarme e procederà ad inviare un SMS d' avviso("Allarme_scattato!"), accendendo in seguito un led giallo.
Per poter permettere ad Arduino di ricominciare a monitorare l'allarme di casa sarà necessario tenere premuto il bottone fino a che il led giallo si spegne.

Osservazioni:
Per verificare il corretto aggancio del nostro modem alla rete GSM basterà controllare che il led verde sia acceso oppure, se siamo fuori casa, basterà telefonare al numero del nostro modem e verificare che dia la linea libera.

Sketch Arduino:
Scaricare lo sketch Arduino qui!

Video:

28 ottobre 2011

1 - Arduino multiplexer/demultiplexer




Definizioni:
MULTIPLEXER = dispositivo in grado di selezionare un singolo segnale elettrico fra 2^n segnali d'ingresso.
DEMULTIPLEXER = dispositivo in grado di selezionare una singola uscita fra 2^n uscite disponibili.
Componenti Utilizzati:
Arduino UNO, multiplexer 16 channel, 16 led, computer

Descizione:
In questo caso ho usato il dispositivo in funzione di demultiplexer servendomi solamente di 5 pin digitali di Arduino, per poter comandare 16 led!
Attraverso 1 pin di arduino indico il segnale d'uscita (HIGH o LOW) mentre con gli altri 4 pin scelgo in che uscita far arrivare il segnale:

ARDUINO -> DEMULTIPLEXER -> LED
   0-0-0-0   ->         uscita 0;             ->   1
   0-0-0-1   ->         uscita 1;             ->   2
   0-0-1-0   ->         uscita 2;             ->   3
   0-0-1-1   ->         uscita 3;             ->   4
   0-1-0-0   ->         uscita 4;             ->   5            
   0-1-0-1   ->         uscita 5;             ->   6
   0-1-1-0   ->         uscita 6;             ->   7
   0-1-1-1   ->         uscita 7;             ->   8
   1-0-0-0   ->         uscita 8;             ->   9
   1-0-0-1   ->         uscita 9;             ->   10
   1-0-1-0   ->         uscita 10;           ->   11
   1-0-1-1   ->         uscita 11;           ->   12
   1-1-0-0   ->         uscita 12;           ->   13
   1-1-0-1   ->         uscita 13;           ->   14
   1-1-1-0   ->         uscita 14;           ->   15
   1-1-1-1   ->         uscita 15;           ->   16

Osservazioni: 
Nello sketch che trovate qui sotto, è possibile scegliere quale led accendere mandando dei caratteri ad Arduino tramite monitor seriale:

il carattere  "\"  corrisponde al led 1;
                  "0"  corrisponde al led 2;
                  "1"  corrisponde al led 3;
                  "2"  corrisponde al led 4;
                  "3"  corrisponde al led 5;
                  "4"  corrisponde al led 6;
                  "5"  corrisponde al led 7;
                  "6"  corrisponde al led 8;
                  "7"  corrisponde al led 9;
                  "8"  corrisponde al led 10;
                  "9"  corrisponde al led 11;
                  "Q"  corrisponde al led 12;
                  "W"  corrisponde al led 13;
                  "E"  corrisponde al led 14;
                  "R"  corrisponde al led 15;
                  "T"  corrisponde al led 16;

Usando la funzione multiplexer è possibile leggere il valore di 16 input analogici servendosi solamente di 5 pin di Arduino: 4 pin serviranno sempre per scegliere il canale da leggere tra i 16 disponibili, mentre, il pin usato precedentemente per trasmettere il segnale HIGH o LOW ai led, ora lo si usa per leggere il valore dei sensori, basterà quindi collegarlo ad un pin analogico di Arduino ed usare la funzione "analogRead(pin)" per rilevare il valore trasmesso dal input (per esempio un sensore di temperatura).

Sketch Arduino: