¿Cómo controlo un pin analógico? ¿Cómo controlo un componente con AnalogWrite y AnalogRead?

Escribir o leer pines analógicos te permitirá controlar tus componentes y leer las medidas de tus sensores.

Esto es lo que veremos en este curso:

  • Controlar tu componente (analogWrite)
  • Leer el voltaje a través de un sensor (analogRead)
  • Convertir el valor obtenido o deseado (map)

Aquí están los pines analógicos controlados por analogWrite y analogRead:

¿Cuál es la diferencia entre analógico y digital?

Una señal digital puede tomar dos valores: ALTO o BAJO. HIGH corresponde a un estado alto y LOW a un estado bajo. Esta señal es muy útil para detectar el estado de un pulsador, por ejemplo, o para encender un LED.

Sin embargo, si quieres encender tu LED a la mitad de su intensidad, necesitarás una señal analógica.

Ésta puede tomar un número infinito de valores entre 0V y 5V. Esta señal será útil para medir y enviar valores mucho más precisos como 0,45V en lugar de 0V y 5V como en una señal digital.

Puede utilizar un convertidor analógico a digital para convertir la señal.

analogWrite ()

El analogWrite puede utilizarse para controlar componentes como LEDs, servomotores, etc. Gracias al pwm, el analogWrite puede controlar componentes con precisión, como dar la posición de un servomotor o la potencia de un LED.

analogWrite(pin, value);

El analogWrite se puede utilizar para generar valores intermedios entre 0 y 255 (en una placa Arduino estándar) ajustando el ciclo de trabajo de la tensión de salida. En otras palabras, modula la anchura del pulso para simular una tensión media diferente. Por ejemplo, si especificas un valor de 128 para la función analogWrite, esto significa que el pin producirá una señal de onda cuadrada con un ciclo de trabajo del 50%, generando una tensión media de alrededor de 2,5V.

Aquí tienes un ejemplo de la función analogWrite en el pin A3:

analogWrite(A3, 128);

analogRead ()

Si quieres leer el valor procedente de un sensor, necesitarás la función analogRead.

Aquí tienes un ejemplo de cómo utilizar la función analogRead():

analogRead(broche)

Pines: de A0 a A5

La función devuelve el valor del pin analógico, que es un valor entre 0 y 1023 correspondiente a la tensión leída en el pin. Veremos cómo convertirlo.

Conversión de valores

Map es una función matemática que transforma un valor dando los límites del valor antiguo y los límites a los que se quiere que pertenezca el valor convertido.

map(valor_convertido, valor_bajo_antiguo, valor_alto_antiguo, valor_bajo_nuevo, valor_alto_nuevo)
  • analogWrite () : Convierte el valor a % o grados entre 0 y 255

Como hemos dicho antes, la función analogWrite toma como parámetros valores entre 0 y 255. Pero el servomotor, por ejemplo, puede controlarse con valores entre 0° y 180°. El LED puede ser controlado entre 0% y 100%.

Así que vamos a convertir estos valores para que correspondan a la función analogWrite utilizando la función map.

Por ejemplo, si queremos la posición de 90° para nuestro actuador en el pines 7 :

int valor_del_servomotor=90;
valor_del_servomotor=map(valor_del_servomotor,0,180,0,255);
analogWrite(7,valor_del_servomotor);
  • analogRead () : Convertir el valor entre 0 y 1023 en una tensión entre 0 y 5V

El valor entre 0 y 1023 probablemente no signifique mucho para ti, así que vamos a ver cómo convertirlo entre 0V y 5V. Para ello, vamos a utilizar la función map, que nos permitirá convertir el valor obtenido:

int valor =analogRead(pines);
valor=map(valor,0,1023,0,5);