abril 15, 2024

BitCuco

¡Hola Mundo!

AnalogRead y AnalogWrite – Ejemplos con Arduino

analogRead
Fuente de imagen: Wikihow

Es importante aprender a utilizar los comandos analogRead y analogWrite para usarlos en Arduino.

El mundo real que nos rodea es analógico y Arduino, así como cualquier sistema digital, está inmerso en él. Por lo tanto, siempre se requerirá una etapa que permita su comunicación e interacción.

Así mismo, recordemos que el cerebro de cualquier microcontrolador es digital, es decir sólo entiende 1s y 0s.

En una publicación anterior, te platicamos sobre los pines Arduino de tipo analógico. Definimos algunos términos comunes, así como su diferencia con los pines digitales. También, te mostramos como funcionan en las placas Arduino.

En ésta nueva publicación te explicamos como se programan utilizando los comandos analogRead y analogWrite, así como te mostramos un ejemplo de uso.

Es importante mostrar al lector que el uso de éstas instrucciones requiere el uso de sensores analógicos para un correcto funcionamiento.

analogRead: Para los pines analógicos de entrada

analogWrite
Créditos de imagen: ShareTechNote.com

El comando analogRead se utiliza para los pines analógicos de entrada, los cuáles están identificados en la placa Arduino Uno con la letra “A“. Esto es, desde A0 hasta A5. Es decir se tienen 6 pines de entrada. Recordemos que todos se encuentran multiplexados a un sólo convertidor Analógico-Digital que está dentro del microcontrolador.

Además, el convertidor es de 10 bits y puede convertir voltajes dentro del rango de 0 V a 5 V. Es decir, si la entra de un pin analógico es de 0 V, después de la conversión obtendremos la cantidad binaria 0000000000 (corresponde al 0 en el sistema decimal).

De forma similar, si la entrada es de 5 V, después de la conversión se tendrá el número binario 1111111111 (corresponde al 1023 en el sistema decimal).

En primera, para leer un pin analógico se utiliza el comando:

analogRead(pinAnalog); 

El término analogRead, es una palabra reservada para leer y convertir el voltaje presente en un pin. En cambio, el término pinAnalog se debe sustituir por el pin analógico que se va a utilizar (A0A5).

Generalmente, el valor resultante de la conversión se guarda en una variable, que previamente debió declararse e indicarse como de tipo entera. Por ejemplo, si deseamos que el valor se guarde en una variable llamada sensor1, se debe declarar:

int sensor1 = 0;

Del mismo modo, supongamos que se quiere que el voltaje presente en el pin A3, se convierta a digital. Además se desea que el resultado se guarde en la variable sensor1. La instrucción para leer el pin utiliza analogRead y quedaría así:

sensor1 = analogRead(A3);

analogWrite: Para los pines analógicos de salida

La instrucción analogWrite se utiliza para la salida “analógica”. En la placa Arduino Uno se trata de un módulo PWM. Recordemos que esto significa que obtendremos un tren de pulsos digitales que utiliza el comando analogWrite. Esto es, en dichos pulsos varía el tiempo que se mantiene en 1 ó 0.

Lo mas importante, la relación del tiempo que se mantiene en 1 el pulso, respecto al periodo de la señal, se le llama ciclo de trabajo. Es decir, un pulso con ciclo de trabajo de 0.5, se mantendrá el mismo tiempo en 1 y en 0.

Así mismo, si el ciclo de trabajo es 0.25, el pulso se mantendrá en 1 la cuarta parte del ciclo del pulso y lo restante en 0.

Adicionalmente, un ciclo de trabajo de 0.75, mantendrá en 1 las tres cuartas partes del ciclo y en 0 la cuarta parte restante.

Las salidas PWM del Arduino están identificadas con el símbolo ~. En la placa Arduino Uno son aquellos identificados como 5, 6, 9, 10 y 11.

Para variar el ciclo de trabajo se manda un valor de entre 0 y 255 al pin deseado. Donde, para obtener un ciclo de trabajo de 0, se enviará el valor 0. Para un ciclo de trabajo de 0.5 se enviará el valor 127. Finalmente, por ejemplo, si se requiere un ciclo de trabajo de 1, se deberá enviar 255.

Para esto se utiliza la instrucción

analogWrite(pinSalida,valorSalida);

La palabra analogWrite indica que se desea generar una señal PWM con cierto ciclo de trabajo. Ahora, pinSalida, indica el pin donde se va a generar la señal PWM.

El valor del ciclo de trabajo de la señal PWM se indica donde está la palabra valorSalida.

Por ejemplo, supongamos que se quiere generar una señal PWM en el pin 9. Es mas, queremos que tenga un ciclo de trabajo de 0.25 (valor de 63). En consecuencia, el código es:

analogWrite(9,63);
analogRead
Pines Arduino de tipo analógico

Ejemplo con analogRead y analogWrite

A continuación te presentamos un ejemplo que utilizan los comandos analogRead y analogWrite. En primer lugar, se lee un voltaje presente en el pin analógico A0 y lo guarda en la variable de nombre sensor.

Segundamente, se mapea ese valor dentro de un rango de 0 a 255. En otras palabras, le pedimos a la placa de Arduino que reduzca el rango de conversión (0 a 1023), al rango de 0 a 255.

Ese rango sirve para modificar el ciclo de trabajo de la señal PWM de salida. Finalmente, mandamos ese valor al pin 5.

A continuación mostramos el código en C para llevar a cabo esa lectura con analogRead, y también el uso de analogWrite para la lectura del sensor.

El código compilado requiere el uso de sensores analógicos para funcionar.

int sensor = 0; // variable para conversión del voltaje
int valorPWM = 0; // variable para enviar ciclo de trabajo

void setup() {}

void loop() {
   sensor = analogRead(A0); // se lee el valor analógico en A0
   valorPWM = map(sensor, 0, 1023, 0, 255); //se mapea valor sensor
   analogWrite(5, valorPWM); //ajusta PWM del pin 5 con valorPWM
   delay(5); //retardo de 5 milisegundos
}

Además, la ultima instrucción delay(5); , le indica a Arduino que haga un retardo o pausa de 5 milisegundos. Esto es con el fin de que el ADC se reinicie y esté listo para una nueva lectura y conversión.

Conclusiones sobre analogRead y analogWrite

Como resultado, aprendimos sobre el funcionamiento de las palabras reservadas analogRead y analogWrite, el cuál nos permite agregar código para configurar y utilizar los pines Arduino tipo analógico.

Además se presentó y analizó un ejemplo de como utilizar los pines analógicos. Por consiguiente, recordamos como declarar una variable.

Finalmente, aprendimos la instrucción delay(), utilizada para pedirle al Arduino que haga una pausa en la ejecución de un programa.