Leyendo en analógico

Como has aprendido anteriormente, las señales digitales solo tienen dos estados opuestos: 1 ó 0. Si presionas un botón, su estado cambiará de uno a otro. Un LED está encendido o apagado.

El mundo real sin embargo, no es digital. El agua por ejemplo, no sólo está caliente o fría, puede también estar templada. Para poder medir eso, y otras cosas del mundo real, no podemos usar sólo señales digitales. En lugar de ello, empleamos señales analógicas.

En vez de 2 estados opuestos, las señales analógicas tienen niveles continuos. Así que si tienes un sensor de luz, puedes obtener muchos valores diferentes que expresan cómo de iluminada está la habitación, y no sólo clara/oscura. O en el caso de un termómetro, te dice la temperatura mediante un número, en lugar de fría/caliente.

Con Arduino, puedes obtener los valores analógicos de los Pins analógicos. Sobre la placa puedes ver un grupo de Pins marcados como analog in, que llevan el nombre de A0 a A5. Cuando se les aplica tensión, ellos reportan valores de 0 a 1023; de este modo, cuando no hay voltaje en un Pin, la lectura es 0. Si le aplicas 5V, la lectura será 1023. Con una entrada de 2.5V, te dará 512. Para leer estos valores desde un Pin analógico tienes que utilizar la función analogRead(), en lugar de digitalRead().

Para seguir explicando las señales analógicas, necesitamos introducir el potenciómetro. Un potenciómetro es un control que funciona mediante el giro de un brazo. Por ejemplo, el regulador de volumen de un estéreo es un potenciómetro. Con dos Pins exteriores al potenciómetro, conectados a GND y 5V respectivamente, puedes utilizar el potenciómetro para controlar la cantidad de tensión que quieres que haya en el Pin central, siempre dentro del rango de 0V a 5V.

Aquí vamos a experimentar un poco usando un potenciómetro para controlar el parpadeo de un LED. Conecta el Pin central del potenciómetro al Pin analógico A5, los otros Pins conéctalos a 5V y GND. Usaremos el LED on-board, incluido en la placa, como salida.

int ledPin = 13;

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

void loop() {
int val = analogRead(A5);
digitalWrite(ledPin, HIGH);
delay(val);
digitalWrite(ledPin, LOW);
delay(val);
}

Puedes encontrar un nuevo comando:

  • analogRead (pinNumber): Este comando coge la lectura de un Pin analógico especificado por la variable pinNumber, que puede ser desde A0 hasta A5. El valor leído variará entre 0 (0V) y 1023 (5V).
  • Los pines analógicos sólo se pueden usar como entradas, por lo que no es necesario declarar el pin mode en el setup.

La lectura del potenciómetro conectado al pin analógico A5 cambiará el tiempo de retardo, delay, y por lo tanto la velocidad con la que parpadea el LED on-board del pin 13. Cuando gires el brazo del potenciómetro, podrás ver el cambio en la frecuencia de parpadeo.

¡Sigue experimentando!

  • El valor de analogRead() tiene 1024 niveles – entre 0 y 1023. ¿Se te ocurre una manera de procesar un valor utilizando menos niveles? Imagina que sólo necesitamos 10 valores diferentes, manteniendo 0V como 0 pero 5V como 10, en lugar de 1023.(SUGERENCIA: Busca una función llamada map() en la referencia de Arduino.)
  • ¿Qué sucede si reduces el número de niveles de analogRead a solamente dos valores, 0 y 1? Intenta aplicarlo al ejemplo del botón digital. ¿Sientes que has entendido la relación entre las señales analógicas y digitales?