Ampliando las capacidades de tu Raspberry Pi con un convertidor ADC: lo que necesitas saber

Raspberry Pi es un dispositivo excelente para diversos proyectos electrónicos, pero al utilizar un convertidor ADC, puede ampliar sus capacidades para medir señales analógicas e interactuar con una gama más amplia de dispositivos.

La Raspberry Pi normalmente carece de entradas analógicas. Esto la sitúa en desventaja en comparación con las placas basadas en microcontroladores como la Arduino.

Pero no te desesperes: hay muchas opciones a considerar. Puedes comenzar con una Raspberry Pi y un ADC externo. En esta guía, le brindaremos una descripción general completa de cómo usar un convertidor ADC con una Raspberry Pi, centrándonos en los pasos clave y los posibles beneficios. Continúe leyendo para descubrir cómo puede aprovechar al máximo su dispositivo e integrarlo en sus proyectos electrónicos de manera efectiva. Verificar ¿Qué es un convertidor analógico a digital (ADC)? Comprender su trabajo y su importancia en la era de la tecnología digital..

Ampliando las capacidades de tu Raspberry Pi con un convertidor ADC: Lo que necesitas saber - Raspberry Pi

¿Por qué querrías agregar entradas?

El mundo real está lleno de fenómenos que pueden describirse fácilmente utilizando voltaje, si se cuenta con los circuitos adecuados. Convierta estos voltajes eléctricos a formato digital y podrá registrarlos, procesarlos y usarlos para controlar parámetros y otros dispositivos.

Tal vez quieras controlar la humedad del suelo, la temperatura de tu invernadero o el peso de tu hámster. Quizás estés buscando agregar un control de volumen a tu Pi, construir un ecualizador o diseñar un joystick desde cero. Las posibilidades, más o menos, son ilimitadas.

Opciones de ADC

Entonces, ¿qué ADC es mejor para principiantes?

Entre las opciones más populares y sencillas se encuentran los conjuntos de chips. MCP3004 (Y MCP3008) de Microchip. Obtendrá cuatro (u ocho) canales de 10 bits, que pueden leer hasta 200k SPS. Por otro lado, están los dispositivos ADS111x de Texas Instruments, que leen 16 bits a 860 SPS. Por lo tanto, existe un equilibrio entre velocidad y precisión (y, por supuesto, precio).

Muchos microcontroladores vienen con convertidores ADC integrados. El ATMega que se encuentra en el Arduino promedio proporcionará varios canales de 10 bits, además de todo lo demás. Esto es lo que permite a Arduino proporcionar entradas analógicas donde Raspberry Pi no puede. Si ya tiene un Arduino involucrado en su configuración y 10 bits es suficiente precisión, este puede ser el método más sencillo.

Aquí lo haremos simple, con el ADS1115 de Adafruit. Verificar Los pros y los contras de usar un clon de Arduino en tus proyectos.

Ampliando las capacidades de tu Raspberry Pi con un convertidor ADC: Lo que necesitas saber - Raspberry Pi

¿Qué es un amplificador de ganancia programable?

Este chip viene con algunas características interesantes, incluido un amplificador de ganancia programable (PGA). Lo que le permitirá ajustar digitalmente el rango de valores deseado, hasta una fracción de voltaje. Con la cantidad de valores que pueden representar 16 bits, esto te permitirá detectar diferencias tan pequeñas como unos pocos microvoltios.

La ventaja aquí es que puedes cambiar la ganancia en el medio. Otros chips, como el MCP3004, adoptan un enfoque diferente; Viene con un pin adicional, al que puedes proporcionar un voltaje de referencia.

¿Qué pasa con la multiplexación?

Un multiplexor (o mux) es un interruptor que le permite leer múltiples entradas con un solo ADC. Si su chip ADC tiene múltiples puertos de entrada, entonces se está produciendo alguna multiplexación interna. El mux del ADS1115 permite cuatro entradas, que puede seleccionar mediante registros internos.

Manejo de registros

El ADS1115 ofrece estas opciones, además de algunas otras. Puede manipular el multiplexor, ajustar la ganancia, activar el comparador incorporado, cambiar la frecuencia de muestreo y poner el dispositivo en modo de suspensión de bajo consumo, todo tocando algunas teclas.

¿Pero dónde están esas llaves? Existen dentro del paquete, en forma de fragmentos de memoria muy pequeños llamados registros. Para activar una característica particular, simplemente establezca el bit correspondiente en 1, en lugar de 0.

Mirando una hoja de datos ADS111xDescubrirá que estos modelos vienen con cuatro registros, incluidos registros de configuración que gobiernan el comportamiento del dispositivo.

Ampliando las capacidades de tu Raspberry Pi con un convertidor ADC: Lo que necesitas saber - Raspberry Pi

Por ejemplo, los bits 14 a 12 controlan el multiplexor. Usando estos tres bits, puedes elegir entre ocho configuraciones. El número que desea aquí es “100”, que dará la diferencia entre la entrada cero y el mínimo. Por otro lado, los bits 7 al 5 controlan la frecuencia de muestreo. Si desea un máximo de 860 muestras por segundo, puede configurarlo en "111".

Una vez que sepa qué opciones desea configurar, tendrá dos bytes para enviar al ADC. Si luego desea configurar un solo bit aquí o allá, puede manejarlos individualmente usando operadores de bits.

Aquí es donde puede resultar confuso. En este caso, el binario no representa un valor, sino los valores de los transformadores individuales. Puede expresar estas variables como un número grande, en decimal o hexadecimal. Pero si quieres evitar el estrés, deberías ceñirte a la versión binaria, que es más fácil de leer.

Cables de conexión

Puede conectar este adaptador directamente al panel único. Aceptará entradas de voltaje positivo entre 2 y 5.5 voltios, lo que significa que el riel de 3.3 voltios de la Raspberry Pi funcionará bien.

Conecte las entradas SDA y SCL a sus contrapartes en el RPi y haga lo mismo con tierra y 3.3V. Coloque un voltímetro entre las líneas de tierra y de voltaje, luego coloque el cable del medio en la primera entrada del ADC. ¡Eso es todo lo que necesitas para empezar!

Lidiando con I2C

Diferentes ADC operan sobre diferentes protocolos. En el caso del ADS1115 usaremos I2C.

El siguiente ejemplo interactuará con el ADC usando Python. Pero antes de hacer eso, deberás configurarlo. Las versiones recientes del sistema operativo Raspberry Pi han hecho que esto sea muy simple. Ir a Preferencias > Configuración de Raspberry Pi. Luego, desde la pestaña Interfaces, active I2C.

Ampliando las capacidades de tu Raspberry Pi con un convertidor ADC: Lo que necesitas saber - Raspberry Pi

Para verificar que todo esté funcionando, abra Terminal y ejecute:

sudo i2cdetect -y 1

Este comando generará una malla. Suponiendo que todo esté funcionando y que lo haya conectado correctamente, verá aparecer un nuevo valor en la cuadrícula. Esta es la dirección de su ADC. Tenga en cuenta aquí que es un valor hexadecimal, por lo que debe anteponerle "0x" cuando lo use en el código siguiente. Y aquí está 0x48:

Ampliando las capacidades de tu Raspberry Pi con un convertidor ADC: Lo que necesitas saber - Raspberry Pi

Una vez que tenga la dirección, puede usar la biblioteca SMBus para enviar comandos I2C. Aquí abordará dos métodos. El primero es escribir_palabra_datos(), que acepta tres argumentos: la dirección del dispositivo, el registro en el que estás escribiendo y el valor que quieres escribir.

El segundo es leer_palabra_datos(), Que solo acepta la dirección y el historial del dispositivo. El ADC leerá los voltajes continuamente y almacenará el resultado en el registro de conmutación. Con este método, puede recuperar el contenido de este registro.

Puedes embellecer un poco el resultado y luego imprimirlo. Antes de volver al principio del bucle, realice una breve pausa. Esto asegurará que no se sienta abrumado por los datos.

from smbus import SMBus
import time
addr = 0x48
bus = SMBus(1)

# set the registers for reading
CONFIGREG = 1
CONVERSIONREG = 0

# set the address register to point to the config register
# write to the config registers
bus.write_word_data(addr, CONFIGREG, (0b00000100 << 8 | 0b10000010)) 

# define the top of the range
TOP = 26300

while True:
    # read the register
    b = bus.read_word_data(addr, CONVERSIONREG)

    # swap the two bytes
    b = ((b & 0xFF) << 8) | ((b >> 8) & 0xFF)
    
    # subtract half the range to set ground to zero
    b -= 0x8000

    # divide the result by the range to give us a value between zero and one
    b /= TOP

    # cap at one
    b = min(b, 1)

    # bottom is zero
    b = max(b, 0)

    # two decimal places
    b = round(b, 2)
    print(b)
    time.sleep(.01)

Estas casi listo. Establezca el rango de valores que obtenga en el valor que prefiera y luego truncarlo al número deseado de decimales. Puede personalizar la función de impresión para que solo imprima un nuevo valor cuando sea diferente del último valor.

Lidiar con el ruido

Ahora, a menos que su configuración sea realmente agradable, limpia y ordenada, notará algo de ruido. Ésta es la desventaja inherente de utilizar 16 bits en lugar de sólo diez: esa pequeña cantidad de ruido será más notoria.

Al conectar la entrada adyacente (Entrada 1) a tierra y cambiar el modo para comparar la primera y la segunda entrada, puede obtener resultados más estables. También puede reemplazar los cables largos que recogen el ruido por otros más pequeños y agregar algunos condensadores a medida que realiza este ajuste. El valor de su potenciómetro también puede marcar la diferencia.

También hay opciones de software. Puede crear un promedio móvil o simplemente ignorar los pequeños cambios. La desventaja es que el código adicional impondrá un costo computacional. Si escribe declaraciones condicionales en un lenguaje de alto nivel como Python y toma miles de muestras cada segundo, estos costos se acumularán rápidamente. Verificar Guía de monitoreo de temperatura Raspberry Pi y Sense HAT: mejores pasos y consejos.

preguntas comunes

P1. ¿Qué es un convertidor ADC y cómo funciona con Raspberry Pi?

Un ADC (convertidor analógico a digital) es un dispositivo que convierte señales analógicas en señales digitales. Se puede conectar un ADC a una Raspberry Pi para permitirle leer señales analógicas de fuentes como sensores y variables ambientales.

P2. ¿Cuáles son los principales beneficios de utilizar un convertidor ADC con Raspberry Pi?

  • Ampliar las capacidades de medición: Le permite utilizar señales analógicas como luz, temperatura, sonido y más.
  • Mayor precisión: La conversión de señales analógicas a digitales proporciona una mayor precisión en las lecturas.
  • Admite una variedad de dispositivos: Se puede utilizar con una amplia gama de dispositivos electrónicos y proyectos Raspberry Pi.

P3. ¿Cómo conecto un convertidor ADC a una Raspberry Pi?

El convertidor ADC se puede conectar a la Raspberry Pi a través de la interfaz GPIO utilizando los cables y conectores adecuados. Debes tener cuidado y seguir la guía de comunicaciones incluida con el convertidor ADC.

P4. ¿Puedo usar el convertidor ADC con todas las versiones de Raspberry Pi?

Sí, el ADC se puede utilizar con la mayoría de las versiones de Raspberry Pi. Sin embargo, es posible que deba considerar conectar el adaptador al puerto GPIO apropiado para su versión de hardware particular.

P5. ¿El uso de un convertidor ADC requiere experiencia en programación?

Depende del alcance del proyecto. En casos sencillos, se pueden utilizar bibliotecas ya preparadas. Sin embargo, algunos proyectos pueden requerir habilidades de programación para utilizar los datos de manera eficaz.

Avanzando con varios posibles próximos pasos

Tomar lecturas a través de I2C es muy sencillo y lo mismo se aplica a otros métodos, como SPI. Si bien puede parecer que existen diferencias significativas entre las opciones de ADC disponibles, la verdad es que una vez que tienes una en ejecución, es fácil aplicar el conocimiento a las demás.

Entonces, ¿por qué no llevamos las cosas más lejos? Conecte varios potenciómetros juntos o intente leer la luz, el sonido o la temperatura. ¡Amplíe el controlador que acaba de crear y cree una configuración de Raspberry Pi que sea realmente funcional! Ahora puedes ver Desafíos potenciales de autohospedar sus proyectos de Raspberry Pi.

Ir al botón superior