Entradas y salidas analógicas

Ya hemos visto como trabajan las E/S digitales: son todo o nada, solo admiten esos dos estados. Para muchos proyectos esto nos sera útil pero para otros proyectos necesitaremos ir un paso mas allá y utilizaremos sensores o actuadores analógicos.

Las placas mas difundidas como la Arduino UNO o la Arduino Leonardo trabajan de 0 a 5 voltios, en la forma digital estos son los dos niveles lógicos: 0v para el nivel bajo (LOW) y 5v para el nivel alto (HIGH). Cuando hablamos de valores analógicos podremos trabajar con valores comprendidos entre el mínimo y el máximo. En el caso de las entradas analógicas (marcadas de A0 a A5) Arduino utiliza un convertidor analógico-digital de 10 bits, lo que nos da 1024 niveles intermedios entre 0 y 5 voltios numerados del 0 al 1023. Para las salidas analógicas Arduino UNO utiliza los pines 3, 5, 6, 9, 10 y 11 (en el caso de la Arduino Leonardo los mismos pines mas el numero 13) con una señal PWM de 8 bits, lo que nos da 256 niveles numerados del 0 al 255.

…Y hasta aquí la teoría.

Para hacer lecturas analógicas utilizamos el comando analogRead que tiene la siguiente sintaxis:

1
analogRead(número de pin);

Donde “número de pin” es uno de los pines marcados de A0 a A5. Este comando nos devolverá un valor de 0 a 1023, por lo que generalmente lo usaremos como asignación del valor a una variable:

1
Variable = analogRead(A0);

o como parte de una comparación:

1
2
3
4
If (analogRead(A0) <= 500))
{
// comandos
}

En el caso de las salidas analógicas utilizamos el comando analogWrite de la siguiente manera:

1
analogWrite(pinPWM, valor);

Como caso práctico vamos a ver un sencillo programa en el que utilizaremos uno de los potenciómetros del Shield de Prácticas para la toma del valor analógico y como salida uno de los colores del LED RGB, pues sus patillas están conectadas a las salidas PWM 9, 10 y 11.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int valor; // definimos una variable en la que almacenaremos el valor leído del potenciómetro
int pin = 9; // pin PWM de salida

void setup()
{
pinMode(led, OUTPUT);
}

void loop()
{
// tomamos una lectura analogica y la almacenamos en la variable valor
valor = analogRead(A0);

/* valor contiene un numero de 0 a 1023 y la salida la tenemos que dar de 0 a 255
por lo que tenemos que convertirla de un rango a otro, la forma mas sencilla es
dividir por 4 */

valor = valor / 4;

// ahora sacamos el valor analogico por el pin PWM
analogWrite(pin, valor);
}

Este sencillo ejemplo hace que al girar el potenciómetro con el correspondiente mando el LED RGB (solo un color) brille más o menos.


Si este tutorial te ha sido de utilidad puedes considerar hacerme un donativo, por pequeño que sea estarás contribuyendo a que siga con esta labor.


Deja un comentario

Campos requeridos marcados con *.


Una estúpida ley me obliga a molestarte con algo obvio: este sitio utiliza cookies. Aquí tienes el ladrillo en cuestión por si quieres leerlo