Posts tagged Arduino UNO
Trasmissione di 2 bit tramite infrarossi
2Come annunciato nell’articolo precedente, ho cominciato a lavorare con le comunicazioni a infrarossi. Ho realizzato un piccolo progettino che consente l’invio di due bit da un Arduino (stand alone su breadboard) ad un’altro Arduino (sulla board UNO) che riceve i dati e li visualizza al pc tramite il serial monitor.
Tramite due deviatori posso stabilire il valore dei due bit (0 – GND o 1 – VCC).
Il protocollo, se così si può definire, è rappresentato nella seguente figura:
Inizialmente il trasmettitore invia una richiesta di attenzione che dura 100 ms (invia una frequenza di 38KHz che viene rilevata dal ricevitore), il ricevitore controlla se effettivamente si tratta della richiesta di invio dati (se riceve un valore alto per più di 85ms si tratta della richiesta), successivamente il trasmettitore invia il primo bit per 50 ms, il ricevitore dopo aver atteso per 125 ms (si troverà esattamente a 25ms dall’inizio della trasmissione del primo bit) ne leggerà il valore immagazinandolo nella variabile “val1″, successivamente lo stesso avviene per il secondo bit.
Se entrambi i bit sono a “1″ il led nella scheda Arduino (al pin 13) si accenderà.
N.B.
Il ricevitore funziona con una logica negata, ovvero, quando legge una frequenza di 38KHz da in uscita un valore logico basso (0), viceversa quando non legge nulla da in uscita un valore logico alto (1).
Ecco il video della realizzazione:
Sorgente trasmettitore:
/* Test di trasmissioni a infrarossi tramite XP (Xfox's Protocol)
Invio di 2 bit
-----------------
Trasmettitore |
----------------- */
int bit1 = 2;
int bit2 = 3;
int out = 5;
int val1 = 0;
int val2 = 0;
int freq[] = {
0, 38000};
void setup(){
pinMode(bit1, INPUT);
pinMode(bit2, INPUT);
pinMode(out, OUTPUT);
}
void loop(){
val1 = digitalRead(bit1);
val2 = digitalRead(bit2);
//Inizio comunicazione, richiesta di attenzione da parte del ricevitore
tone(out, freq[1]);
delay(100);
noTone(out);
delay(100);
tone(out,freq[val1]);
delay(50);
noTone(out);
tone(out, freq[val2]);
delay(50);
noTone(out);
}
Sorgente ricevitore:
/* Test di trasmissioni a infrarossi tramite XP (Xfox's Protocol)
Invio di 2 bit
-----------------
Ricevitore |
----------------- */
int in = 2;
int val1 = 0;
int val2 = 0;
long temp1 = 0;
long temp2 = 0;
long wait = 0;
void setup(){
pinMode(in, INPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop(){
temp1 = 0;
temp2 = millis();
while (digitalRead(in) == 0){
temp1 = millis() - temp2;
}
if (temp1 > 85){
delay(125);
val1 = !digitalRead(in);
delay(50);
val2 = !digitalRead(in);
}
if((val1 == 1) && (val2 == 1))
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
scrivi();
}
void scrivi(){
if(wait < millis()){
wait = millis() + 100;
Serial.print("Temp1: ");
Serial.print(temp1);
Serial.print("\tVal1 :");
Serial.print(val1);
Serial.print("\tVal2: ");
Serial.println(val2);
}
}
Il tutto è realizzato con due ricetrasmettitori ad infrarossi di un vecchio robot della DeAgostini (come detto nell’articolo precedente).
La cosa potrebbe farsi più interessante sfruttando questi componenti sia come trasmettitori che ricevitori, mentre nel mio progetto ho utilizzato ogni componente o come trasmettitore o come ricevitore. Adesso cercherò di creare un protocollo vero e proprio che mi permetta di inviare un byte alla volta in tempi più brevi.
Prossimo passo: sensore di distanza
0Ultimamente mi sono dedicato all’Xfox’s Robot, ancora in versione di sperimentazione poichè non è in grado di eseguire operazioni autonomamente. Avevo pensato di aggiungere due foto-resistenze (le stesse del progetto “Arduino UNO – Inseguitore di luce“) per far si che il robot seguisse la luce, devo dire che sono riuscito con risultati abbastanza soddisfacenti anche se non molto accurati.
Il prossimo passo sarà utilizzare dei sensori di distanza (ad infrarossi o ad ultrasuoni) per rendere il robot autonomo.
Cambiando un’attimo argomento, mi sono ritrovato a casa dei ricetrasmettitori ad infrarossi di un vecchio robot della Deagostini, li utilizzerò per cominciare a fare qualche lavoretto con le trasmissioni senza fili (oltre ovviamente il modulo xBee).

Scheda UC1-IR TX-RX – Telecomando
Arduino UNO – Inseguitore di luce
2
Ecco il mio primo progetto Arduino con ServoMotore. :D
Inseguitore di luce, è questo il nome della mia nuova creazione, in sostanza, due fotoresistenze mi rilevano i valori di luce e ne fanno la media, se la media è inferiore ad un certo valore (dipende dall’ambiente in cui si utilizza) ed il valore di differenza fra i due sensori di luce (fotoresistenze) è maggiore a 150, il servomotore si sposta dalla parte più luminosa.
Ecco il link del video:
Arduino UNO – Inseguitore di luce
Di seguito il codice:
Contapersone by Xfox
0Come avevo promesso negli articoli precedenti, ho finalmente realizzato il video del programma “contapersone”.
Il codice è cambiato un pochino e ho aggiunto un display LCD che visualizza il totale delle persone presenti.
Ecco il video:
Arduino UNO – Supercar LED
0
Nell’articolo precedente avevo annunciato l’arrivo del fantastico Arduino UNO, dopo 3 giorni è finalmente arrivato.
Il programma che avevo scritto funziona (anche se non ho potuto ancora fare un video del funzionamento, ma lo farò al più presto), nel frattempo ho scritto un’altro programmino. :)
Sicuramente tutti conoscono supercar, ricordate le lucette che facevano avanti e indietro? Beh, ho realizzato lo stesso effetto, con la differenza che la velocità è regolabile tramite una manopola oppure tramite il computer.
Ecco il video:
Putroppo il video non è dei migliori ma in linea di massima si capisce.
Di seguito il codice:
Arduino UNO
0
Da qualche giorno sono in attesa dell’arduino UNO (immagine a sinistra)
Arduino Uno è una scheda elettronica basata sul microcontrollore Atmega328.
Dispone di 14 linee di ingresso/uscita digitali di cui 6 possono essere utilizzate come uscite PWM, 6 ingressi analogici, un’oscillatore a 16 MHz, una connesione USB e molto altro.
Si programma in C ed utilizza un programma davvero semplice ed intuitivo da utilizzare (reperibile qui: Download the Arduino Software).
Tramite la sezione Learning del sito di arduino è semplicissimo capire come funziona quest’ultimo.
Ecco un programmino che ho scritto (ancor prima di avere l’arduino fra le mani :P), in poche parole conta quante persone ci sono in una stanza (monitora le persone che escono o che entrano e mostra il numero al computer).
Non appena realizzerò questo progetto posterò un video.
Ecco le caratteristiche tecniche dell’arduino UNO:
-
Microcontrollore: ATmega328
-
Tensione di funzionamento: 5 V
-
Tensione di alimentazione (raccomandata): da 7 a 12 V
-
Tensione di alimentazione (limiti): 6-20V
-
Ingressi/uscite Digitali: 14 (di cui 6 possono essere utilizzate come uscite PWM)
-
Ingressi analogici: 6
-
Corrente Dc per pin I/O: 40 mA
-
Corrente DC per pin 3,3 V: 50 mA
-
Memoria Flash: 32 kB (di cui 0,5 kB utilizzati dal bootloader)
-
SRAM: 2 kB
-
EEPROM: 1 kB
-
Velocità di Clock : 16 MHz





