Sunteți pe pagina 1din 9

En la mayora de proyectos que realizamos con Arduino necesitamos

que la placa conozca magnitudes del mundo real, como pueden ser de luz
o temperatura, para que esta active una serie de actuadores, como pueden
ser motores o leds. Para ello las placas de Arduino cuentan con entradas
analgicas con las que, a travs, de sensores, medimos dichas magnitudes.

Las dudas vienen, cuando nos planteamos que un ordenador o


microcontrolador en este caso, es un sistema digital y las magnitudes
que deseamos medir son analgicas, por ello necesitamos un sistema
que pase de analgico a digital, el cual llamaremos ADC (Analog digital
coverter). Como es lgico Arduino cuenta con un ADC.

Este conversor ADC va conectado a un multiplexor, para que as, con uno
solo de estos podamos tener varas entradas, como es en el caso de las
placas Arduino que normalmente cuenta con 6 de estas. La Arduino
MEGA en cambio cuenta con 16 entradas analgicas.

El tiempo de muestreo, es el tiempo que transcurres entre dos


mediciones consecutivas, es fundamental para la adquisicin de
datos y se suele expresar en frecuencia. Siempre que midamos un
sistema como puede ser el sonido, necesitamos que nuestra frecuencia de
muestro sea superior a la frecuencia del sistema, de no ser as, la
representacin que obtengamos con nuestro muestreo, del sistema, no
ser correcta.

A continuacin, haremos un programa con Arduino para calcular


el tiempo de muestreo que tiene nuestra placa. Para este ejemplo
solo requerimos de una placa Arduino y el cdigo ser el siguiente:

void setup(){

Serial.begin(9600);
muestreo();

void loop(){
}

void muestreo(){

unsigned long time1=0;


unsigned long time=0;
Serial.println("*************************");
Serial.println("ENSAYO TIEMPO DE MUESTRO:");
Serial.println("*************************");
for(byte i =0; i<4; i++){
time1=micros();
int A=analogRead(A0);
time=micros()-time1;
Serial.print(" Muestra: ");
Serial.print(i+1);
Serial.print(" Tiempo: ");
Serial.println(time);
}

Activando el serial monitor podremos ver los resultados de nuestro


experimento:

Excepto en la primera medida, las dems tiene un tiempo de muestreo de


112 micro segundos, lo que equivale a una frecuencia de muestreo
de 8.928 kHz, podemos tomar por valido ya que estoy utilizando una
placa Arduino UNO. A dems debemos tener en cuenta una pequea
perdida de tiempo que tenemos al guardar y calcular las variables time1 y
time.

Otro factor a tener en cuenta del ADC es su resolucin, para ello


hablamos de los bits de resolucin que tiene, los bits no permiten hacer
combinaciones, cuantos mas tengamos mayor numero de combinaciones
podremos hacer, cada una de estas combinaciones muestra una medida
del sistema analgico, la cantidad de medidas que tenemos sern 2
elevado al numero de bits de resolucin. Puesto que Arduino UNO, en
mi caso, tiene un ADC de 10 bits de resolucin tendr 1024
combinaciones. La placa Arduino DUE por ejemplo cuenta con
un ADC de 12 bits (4096 combinaciones).

Pero hay un segundo factor que interviene en la resolucin, es el rango de


medida, El rango de Voltae de las placas Arduino por defecto es de
5v o 3.3v. Con esto sabemos que en voltios tenemos una resolucin igual
a;
A continuacin haremos un ejemplo con Arduino de la resolucin
midiendo el voltaje en un potencimetro, iremos girando las manecilla del
potencimetro y veremos que conversin da el ADC y a que corresponde
en voltaje. Comprobaremos a dems que el paso calculado antes de
4.88mV es correcto.

El cdigo que utilizaremos es el siguiente:

int contador;

void setup(){

contador=1;
Serial.begin(9600);
Serial.println("*****************");
Serial.println("ENSAYO RESOLUCION");
Serial.println("*****************");
}

void loop(){

muestreo();
contador++;
}

void muestreo(){

int A=analogRead(A0);
float B= float(A)*5/1023;
Serial.print(" Muestra: ");
Serial.print(contador);
Serial.print(" Medida Digital: ");
Serial.print(A);
Serial.print(" Medida Analogica: ");
Serial.println(B, 5);

delay(1000);
}

Una vez compilado, abrimos el serial monitor y comenzamos a rotar el


potencimetro para ver que sucede, si ha sido montado correctamente, os
saldr lo siguiente:

A partir de estos datos reales podemos conocer el resolucin tenemos


cuando trabajamos en el rango de voltaje de 0 a 5v, para ello cogemos dos
muestras cuales quieras, por ejemplo la 21 y la 22 y hacemos lo siguiente:

La resolucin medida ha cuadrado con la terica.

//

//
En ocasiones, utilizaremos sensores cuyo rango de voltaje no ser igual a
[0, 5v]. En primer lugar, tenemos que tener en cuenta, que no debemos
introducir en la placa Arduino voltajes mayores de 5v o 3.3v, partiendo
de esto podemos cambiar el lmite superior del rango de voltaje. De
manera interna o externa:

La manera interna de cambiarlo, es utilizando sowftware nicamente,


para ello utilizaremos la funcin analogReference(). Esta funcin
nos permitir cambiar el lmite superior del rango de voltaje, en la
placa Arduino UNO por ejemplo, si introducimos como
parmetro INTERNAL el lmite de voltaje superior ser de 1.1v. En la
placa Arduino mega podemos introducir como
parmetro INTERNAL1V1 y INTERNAL2V56 siendo el nuevo lmite
1.1v y 2.56v respectivamente.

A continuacin haremos un nuevo ejemplo anlogo al anterior, con una


placa Arduino utilizando la funcin interna analogReference para
que su voltaje de referencia sea 1.1v. Para alimentar el potencimetro
requeriremos una fuente de 1.1v, para crearla utilizaremos un divisor de
tensin y un seguidos de tensin:

Una vez montado cargamos el siguiente programa, para verificar que


funciona correctamente:

int contador;
void setup(){
analogReference(INTERNAL);
contador=1;
Serial.begin(9600);
Serial.println("******************");
Serial.println("ENSAYO RESOLUCION");
Serial.println("REFERENCIA INTERNA");
Serial.println("******************");
}

void loop(){

muestreo();
contador++;
}

void muestreo(){

int A=analogRead(A0);
float B= float(A)*1.1/1023;
Serial.print(" Muestra: ");
Serial.print(contador);
Serial.print(" Medida Digital: ");
Serial.print(A);
Serial.print(" Medida Analogica: ");
Serial.println(B, 5);

delay(1000);
}
Como hicimos antes podemos tomar dos muestras, la 19 y 20, por ejemplo
y calcular la nueva resolucin que tenemos:

Conseguimos pues una resolucin casi 5 veces mayor que la anterior.

Finalmente, queda la manera externa para cambiar el voltaje de


referencia, para ello utilizaremos el pin AREF. El funcionamiento de este
pin es sencillo el voltaje que introduzcamos por el, ser la nueva
referencia, pero cuidado, dicho voltaje debe estar entre entre 1.1v y 5v.

Para el siguiente ensayo utilizaremos la configuracin anterior,


generaremos con el divisor de tensin y el seguidor de
tensin 2.5v, y los llevaremos al pin AREF, el resto lo dejaremos igual.
Respecto al cdigo utilizaremos el siguientes:

int contador;

void setup(){
analogReference(EXTERNAL);
contador=1;
Serial.begin(9600);
Serial.println("******************");
Serial.println("ENSAYO RESOLUCION");
Serial.println("REFERENCIA EXTERNA");
Serial.println("******************");
}

void loop(){

muestreo();
contador++;
}

void muestreo(){

int A=analogRead(A0);
float B= float(A)*2.5/1023;
Serial.print(" Muestra: ");
Serial.print(contador);
Serial.print(" Medida Digital: ");
Serial.print(A);
Serial.print(" Medida Analogica: ");
Serial.println(B, 5);

delay(1000);
}

Activamos el Serial monitor y vemos los resultados:

S-ar putea să vă placă și