arduino-tutorial

05 - Les entrades analògiques

Objectius

Material requerit

Imatge Descripció
Arduino Uno o compatible
Una protoboard
Cables de connexió
Un díode led
Una resistència 330 Ohms
Un potenciòmetre

Els potenciòmetres

Fins ara hem usat sempre resistències fixes, d’un valor donat. Però a vegades és convenient disposar d’un senyal variable per a controlar el circuit que ens interessa. Imagineu el volum d’un equip de música, o el dial que sintonitza una emissora en una ràdio FM.

Un potenciòmetre és, simplement, un mecanisme per a proporcionar una resistència variable.

Hi ha potenciòmetres de tantes grandàries, formes i acolorisca,s com pugueu imaginar, però al final són una resistència fixa d’un valor donat (10 kΩ en el nostre cas actual) i un mecanisme que permeta lliscar un dial conductor sobre aqueixa resistència, que ens permeta prendre una part d’aqueix valor.

Per això un potenciòmetre sempre té 3 pins en fila. Els de l’extrem es comporten com una resistència del valor de fons d’escala del potenciòmetre, i un pin central que va prenent valors de resistència en funció del moviment que fem amb l’ajust.

Muntarem un circuit com aquest (en el qual el potenciòmetre aquesta retolat Pot1):

Esquema elèctric

La idea és connectar 5V i GND als extrems del Potenciòmetre (no importa com és l’un i l’altre) i després connectar el pin central al positiu de un LED i el negatiu a GND directe, passant per una resistència de limitació.

D’aquesta manera quan girem el potenciòmetre estarem modificant la tensió que apliquem a l’entrada del LED, que variara entre 0 i 5V (Encara que ara semble estrany és molt senzill) i haurem aconseguit un regulador d’intensitat del LED.

Circuit per a protoboard

El muntatge en la protoboard seria similar a això ja que utilitzarem el Arduino simplement per a donar tensió al circuit i res més, Veureu que la intensitat de la llum vària de manera contínua en girar el potenciòmetre.

Potenciòmetre mès led

Arduino i les entrades analògiques

Amb Arduino hem vist que podem influir en el món exterior aplicant eixides tot / res en els pins digitals i també que usant PWM podem simular bastant satisfactòriament senyals analògics en alguns d’aqueixos pins.

També hem vist com detectar pulsacions de botons, definint com a entrades els pins digitals. Però en moltes ocasions els sensors que usem per a supervisar el món exterior, ens entreguen un senyal analògic. És el cas dels sensors de temperatura o distància, de pressió, d’intensitat de corrent en un circuit o de cabal d’aigua en una canonada.

Per a llegir aquest tipus de senyals continus necessitem un convertidor analògic a digital (o ADC per les seues sigles en anglés) i que ens permet llegir el valor d’un senyal analògic en un moment donat.

Aquests convertidors prenen una mostra del valor actual del senyal i ens entreguen el seu valor instantani, mesurat en Volts.

Mitjançant la lectura repetida de mostres al llarg del temps podem reconstruir el senyal original amb major o menor precisió, depenent de l’exactitud de la nostra mesura i de la velocitat a la qual puga prendre aqueixes mostres.

Conversió analógic-digital

Arduino UNO disposa de sis convertidors analògic a digital, nominats d’A0 fins a A5, retolades com ANALOG IN:

Entrades analògiques

Vegem com usar les entrades analògiques amb un circuit com aquest, en el qual donem tensió als extrems d’un potenciòmetre i connectem el pin central (el variable) a l’entrada de la porta A5 de Arduino:

Esquema de muntatge

La primera curiositat és que no necessitem declarar en el setup() que usarem una porta analògica. I la segona és que per a prendre una mostra (llegir) del pin A5, usarem la instrucció:

int Val = analogRead(A5) ;

Escriurem un programa que llija el valor del pin A5 i l’envie a la consola perquè puguem visualitzar-lo.

Usant les portes analògiques

Prova aquest programa:

//Codi: ARD_05_01

void setup()
{
    Serial.begin(9600); // Iniciem la porta serie
}

void loop()
{
    int Lectura = analogRead(A5) ;
    Serial.println( Lectura);
    delay(200) ;
}

Quan ho bolques, arranca la consola i voràs que a mesura que gires l’ajust les lectures varien de manera contínua reflectint la posició del potenciòmetre, les lectures reflecteixen la caiguda en volts.

Monitor sèrie

No puc resistir-me a proposar-vos aquesta prova: Desconnecta el potenciòmetre de la porta A5 i observa els resultats que Arduino envia a la consola. Perquè ixen aqueixos valors?

Un últim comentari

Déiem en una lliçó anterior, que la fidelitat amb què podem mostrejar un senyal analògic depenia, bàsicament, de la resolució de la mostra i de la velocitat a la qual podíem mostrejar el senyal (Sample Rate en anglés).

Ja vam dir que la família Arduino, disposa de convertidors de 10 bits pel que la nostra resolució és de 2^10 = 1.024 i en el cas del DUE de 2^12 = 4.096. Però fins ara no hem vist a quina velocitat podem prendre mostres amb el nostre Arduino. Ho comprovarem, amb aquest mateix circuit.

Tenim una funció anomenada millis() que ens indica en mil·lisegons el temps transcorregut des que iniciem Arduino i la podem usar per a veure quantes mostres podem prendre per segon.

//Codi: ARD_05_02}

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    unsigned long T ;
    int n = 0 ;
    T = millis();
    while (millis() \<= T + 1000) // Mentre no passe un Segon = 1000 ms
    {
        analogRead( A5) ;
        n++ ; // Comptem cada vegada que llegim
    }
    Serial.println(n);
}

Si correu aquest programa en un Arduino UNO us donarà, si fa no fa, un resultat de 8.940 mostres o lectures per segon. No està malament.

És adequat per a mostrejar senyals que no varien massa ràpid amb el temps, com són quasi tots els sensors habituals en la indústria, però que es quedarà curt si voleu mostrejar senyals d’àudio.

Resum de la lliçò

Veure també