Approved Reseller
Approved Reseller
En este tutorial veremos como manejar las entradas y salidas GPIO analógicas de tu Raspberry Pi Pico. Para desarrollar este tutorial necesitas los siguientes materiales.
A diferencia de las señales digitales que sólo manejan dos valores posibles, cero o uno, apagado o encendido, las señales analógicas pueden comprender un amplio rango de valores. Las señales analógicas son muy utiles cuando tratamos con magnitudes que no se pueden interpretar como cierto o falso, abierto o cerrado; por ejemplo, muy frío, tibio, caliente o hirviendo. Las señales analógicas pueden provenir de sensores de gas, luz, temperatura, micrófonos etc.
Para que un dispositivo digital pueda leer una señal analógica necesita de un elemento llamado convertidor analógico-digital o ADC por sus siglas en inglés. Para poder configurar el convertidor digital necesitamos simplemente especificar el pin por donde se va a leer la señal. Usaremos la función machine.ADC() con el pin dentro de la función. En este caso, leemos el valor directamente con potentiometer.read_u16(), lo multiplicamos por un factor de conversión e imprimimos el valor en la pantalla.
import machine import utime potentiometer = machine.ADC(26) conversion_factor = 3.3 / (65535) while True: voltage = potentiometer.read_u16() * conversion_factor print(voltage) utime.sleep(0.1)
Para seguir leyendo…
Ahora, para que nuestro Raspberry Pi Pico pueda devolver una señal analógica a partir de datos digitales necesitamos un convertidor digital-analógico o DAC. En este caso, la técnica que usamos para convertir la señal es por medio de PWM. A grandes rasgos el PWM contiene la información modulada dentro de una señal cuadrada con frecuencia fija, con ancho de pulso variable.
Para configurar la salida analógica debemos decirle al código que pin vamos a usar con PWM() y la frecuencia de la señal con pwm.freq(). En este caso usamos el pin 15 y la frecuencia es de 1000 Hertz.
from machine import Pin, PWM from time import sleep pwm = PWM(Pin(15)) pwm.freq(1000) while True: for duty in range(65025): pwm.duty_u16(duty) sleep(0.000001) for duty in range(65025, 0, -1): pwm.duty_u16(duty) sleep(0.000001)
También puedes reemplazar el LED por un buzzer pasivo, solo necesitas quitar la resistencia limitadora de corriente. Como estamos cambiando el ancho de pulso, la frecuencia se mantendrá fija pero el timbre del pitido deberá cambiar ligeramente. Prueba a modificar la frecuencia de la señal y experimenta que pasa.
Por último podemos juntar ambos conceptos para controlar el brillo de un LED con el valor analógico leído por un potenciómetro. Para esto, usamos el siguiente código. El valor que lee del ponteciómetro se manda directamente al ancho de pulso de la salida analógica, por lo que no hace falta hacer una conversión.
import machine import utime potentiometer = machine.ADC(26) led = machine.PWM(machine.Pin(15)) led.freq(1000) while True: led.duty_u16(potentiometer.read_u16())
Conclusiones:
Ya aprendimos a usar las entradas y salidas GPIO analógicas. Ahora podemos reemplazar el potenciómetro por otro sensor analógico, como un sensor de temperatura o un micrófono. La salida analógica, en este caso, es todavía una señal cuadrada, por lo que debe filtrarse para obtener valores analógicos puros. Pero para fines didácticos, funciona muy bien.
Referencias:
Getting started with the Raspberry Pi Pico – Control LED brightness with PWM
Getting started with the Raspberry Pi Pico – Control an LED with analogue input