Convertitore A/D scheda microcontrollore Arduino
Arduino è una piattaforma hardware low-cost programmabile, con cui è possibile creare circuiti
"quasi" di ogni tipo per molte applicazioni, soprattutto in ambito di robotica ed automazione. Si
basa su un Microcontrollore della ATMEL, l'ATMega168/328: per esempio l'Arduino Uno monta
un ATMega328.
Nasce a Ivrea, nel 2005, da un'idea di un professore universitario, un Ingegnere Elettronico,
Massimo Banzi, che decise di creare una piattaforma per i propri studenti, così da facilitarli nello
studio dei microcontrollori. Fu un completo successo, a tal punto da spingere l'ingegnere a
rendere questa piattaforma, Open Source (in realtà è Open Hardware) cioè è possibile trovare sul
sito ufficiale www.arduino.cc, i circuiti, i componenti e addirittura le istruzioni per realizzarla da
soli. Ciò che dovrebbe interessare in realtà sono gli schemi circuitali: essendo Open, e quindi
visionabili da tutti, possono essere continuamente migliorati dalla comunità e grazie ad essi sono
state sviluppate un numero incredibile di librerie software che rendono davvero semplice
l'interfaccia con periferiche di qualsiasi tipo.
Arduino è studiato per artisti, designers, hobbiesti e chiunque sia interessato a creare oggetti
interattivi. La scheda Arduino è in grado di interagire con l'ambiente in cui si trova ricevendo
informazioni da una grande varietà di sensori. Ma non si parla solo di sensori, Arduino può
comandare luci, LED, motori e altri attuatori. Il linguaggio di programmazione è basato su
linguaggio C e C++. I progetti basati su arduino possono essere indipendenti oppure essere
interfacciati con altri software come Processing, MaxMSP, Flash e altri. Il design (EAGLE) e la
schematica (CAD), sono liberi, scaricabili e possono essere modificati a piacimento.
Circuito di prova dell’Ingresso Analogico
Il circuito è costituito da un potenziometro: una semplice manopola che fornisce una resistenza
variabile, che potete leggere nella scheda Arduino come un valore analogico.
In questo esempio, si collega un potenziometro ad uno degli ingressi analogici di Arduino per
controllare la velocità con cui il LED sul pin 13 , già presente sulla scheda, lampeggia.
Hardware richiesto
Arduino
Potenziometro
LED sul pin 13, già presente sullo stampato della scheda
Circuito
Collegare tre cavi alla scheda Arduino. Il primo va a terra da uno dei perni esterni del
potenziometro. Il secondo va da 5 volt all'altro perno esterno del potenziometro. Il terzo va da 0
ingresso analogico al pin centrale del potenziometro.
Per questo esempio, è possibile utilizzare sulla scheda Arduino il LED collegato al pin 13. Per
utilizzare un ulteriore LED, si può collegare il suo pin più lungo (pin positivo, o anodo), al pin
digitale 13, ed è più corto (pin negativo, o catodo) alla massa (GND) Pin accanto al pin 13.
Grazie alla bassa quantità di corrente proveniente dal pin digitale 13, non è necessario utilizzare
un resistore limitatore di corrente in questo.
SCHEMA
CONVERTIROE AD
Il convertitore A/D ha il compito di:
trasformare il segnale analogico presente al suo ingresso in un segnale digitale a n bit. Con un
convertitore A/D si effettua quindi la quantizzazione di un segnale analogico, ovvero la
trasformazione di un determinato valore analogico dei segnale in un codice binario.
Ogni convertitore ha un proprio range per la tensione analogica d'ingresso che deve essere
rispettato. Si hanno convertitori per i quali sono ammissibili valori delle tensioni d'ingresso sia
positivi che negativi, mentre altri accettano solo segnali positivi. Il valore massimo della tensione
d'ingresso, che non deve mai essere superato, è definito anche tensione di fondo scala (VFS).
Perché un convertitore funzioni correttamente deve essere applicato ad esso, oltre che il segnale
da convertire, anche una tensione continua e costante definita tensione di riferimento (V REF). Il
valore massimo della VREF che può essere applicato ad un convertitore dipende dalle
caratteristiche costruttive dei dispositivo e coincide generalmente con la tensione di fondo scala
(VFS).
La relazione che intercorre tra il valore analogico Vi, posto sull'ingresso di un convertitore A/D,
ed il corrispondente valore digitale dei dato convertito, è dato dalla relazione:
dove N rappresenta il valore digitale (espresso in formato decimale) del dato convertito, n è il
numero di bit del convertitore e VREF la tensione di riferimento.
Dalla relazione precedente può ricavarsi il valore di Vi se si conosce quello di Vi:
Programma con compilatore Arduino
All'inizio di questo programma, il sensorPin variabile è impostata su analogico pin 0, dove è
collegato il potenziometro, e ledPin è impostato al pin digitale 13. Potrai anche creare un'altra
variabile, SensorValue i per memorizzare i valori letti dal sensore.
Il comando analogRead () converte la tensione di ingresso, 0 a 5 volt, in un valore digitale tra 0 e
1023. Questo è fatto da un circuito convertitore A/D all'interno Arduino.
I controllori ATmega utilizzati per le schede Arduino possono contenere a bordo fino a 6 canali
analogico-digitale (A / D).
Il convertitore dispone di risoluzione a 10 bit, quindi la quantizzazione è sui numeri interi da 0 a
1023. Mentre la funzione principale dei piedini analogici per la maggior parte degli utilizzatori di
Arduino è leggere sensori analogici, i piedini analogici hanno anche tutte le funzionalità dei
piedini di input output, infatti, gli stessi piedini di input analogico possono essere usati per
input/output digitale indirizzati come piedini n° 14-19.
Ruotando l'albero del potenziometro, si modifica la quantità di resistenza su entrambi i lati del
perno centrale (o spazzola) del potenziometro. Questo cambia le resistenze relativi tra il piedino
centrale e i due piedini esterni, dando una tensione diversa all'ingresso analogico. Quando
l'albero viene girato completamente in una direzione, non c'è resistenza tra il perno centrale e il
perno collegato a terra. La tensione al pin centrale è quindi 0 volt, e analogRead () restituisce 0.
Quando l'albero viene girato completamente in direzione opposta, non c'è resistenza tra il perno
centrale e il perno collegato a 5 volt. La tensione al pin centrale è di 5 volt, e analogRead ()
restituisce 1023. Nel mezzo, analogRead () restituisce un numero compreso tra 0 e 1023 che è
proporzionale alla quantità di tensione applicata al perno.
Tale valore, memorizzata in SensorValue, consente di impostare un ritardo () per il ciclo di
lampeggio. Maggiore è il valore, più lungo è il ciclo, minore è il valore, più breve è il ciclo.
/*
Analog Input
Viene illustrato l'ingresso analogico per la lettura di un sensore analogico sul 0 pin analogico e
si procede ad accendere e spegnere un diodo emettitore di luce (LED) collegato al pin digitale
13.
La quantità di tempo che il LED si accende dipende di dal valore ottenuto analogRead ().
Il circuito:
* Il potenziometro collegato all' ingresso analogico 0
* tramite il Pin centrale del potenziometro
* Un piedino laterale (uno dei due) a terra
* l'altro collegato a +5 V
Anodo * LED (piedino lung0) collegato all'uscita digitale 13
* Catodo LED (piedino corto) collegato a terra
* Nota: poichè la maggior parte degli Arduino ha un LED già collegato al pin 13 della scheda,
il LED è opzionale.
*/
int sensorPin = A0; // Seleziono il pin di Arduino dove è collegato il centrale del
potenziometro
int ledPin = 13;
// seleziono il pin dove è collegato il LED
int sensorValue = 0; // variabile dove memorizzo il valore letto dal conv. A/D
void setup() {
// dichiariamo che il piedino 13 è un output digitale
pinMode(ledPin, OUTPUT);
Serial.begin(9600);//Inizializzo la seriale
}
void loop() {
// leggiamo il valore del nostro sensore
sensorValue = analogRead(sensorPin);
Serial.print(sensorValue,DEC);//Invio il valore letto dal convAD alla seriale in decimale
Serial.print(" ");
Serial.print(sensorValue,BIN);//Invio il valore letto dal convAD alla seriale in binario
Serial.println(" ");
// accendiamo il LED
digitalWrite(ledPin, HIGH);
// aspettiamo per un tempo pari a <sensorValue> milliseconds:
delay(sensorValue);
// spegniamo il LED
digitalWrite(ledPin, LOW);
// aspettiamo per un tempo pari a <sensorValue> milliseconds:
delay(sensorValue);
}