Como ler sinais analógicos no Raspberry Pi usando ADS1015/ADS1115

Cómo leer señales analógicas en Raspberry Pi usando ADS1015/ADS1115

Raspberry Pi es la computadora de placa única más popular. Al tratarse de un microordenador integrado, la adquisición de datos es casi esencial en la Raspberry Pi. Aunque Pi tiene varios pines GPIO (entrada/salida de uso general), no tiene ningún convertidor analógico a digital incorporado. Por lo tanto, Pi por sí solo no puede muestrear datos de sensores analógicos. En aplicaciones integradas, a menudo se utilizan sensores analógicos. De hecho, muchos sensores, como las resistencias dependientes de la luz (LDR) y los sensores de infrarrojos, simplemente no están disponibles en formato digital. En este caso, los sensores analógicos pueden interactuar con la Raspberry Pi de dos formas. Una es utilizar un convertidor analógico a digital externo; el segundo es muestrear datos de sensores analógicos usando un microcontrolador y transferir todos los datos capturados a Raspberry Pi a través de una interfaz en serie.

Conectar la Raspberry Pi con un microcontrolador solo para obtener datos analógicos no es una solución viable. Un ADC externo es la mejor solución cuando Raspberry Pi funciona como una microcomputadora integrada independiente y se requiere adquisición de datos analógicos.

Adquirir datos analógicos en Raspberry Pi aporta varios beneficios. Es mucho más fácil aplicar algoritmos de aprendizaje automático y modelos de aprendizaje profundo en una microcomputadora como Raspberry Pi que en cualquier microcontrolador. Los microcontroladores tienen muchas funciones limitadas y herramientas de software y API limitadas para aplicar algoritmos de aprendizaje automático o implementar redes de aprendizaje profundo. Las herramientas de software de aprendizaje automático y aprendizaje profundo disponibles para microcontroladores también tienen capacidades limitadas. Por ejemplo, las aplicaciones de visión por computadora a menudo requieren una gran cantidad de RAM y sensores de cámara eficientes para cualquier aplicación práctica. Las herramientas de aprendizaje automático para microcontroladores no son muy eficaces para aplicaciones integradas que consumen muchos recursos.

ADS1015 ADS1115

Este proyecto explorará cómo realizar la adquisición de datos analógicos en Raspberry Pi utilizando chips ADC ADS1115 o ADS1015. En el mismo contexto, también discutiremos cómo podemos leer datos analógicos de sensores IR en Raspberry Pi para la detección de obstáculos en un robot Raspberry Pi.

Componentes necesarios

  1. Frambuesa Pi 3B/4B x1
  2. ADS1115/ADS1015 ADC x1
  3. Sensores de infrarrojos x1
  4. Placa de pruebas x1
  5. Cables de conexión/cables de puente

ADS1115/ADS1015 Pi frente a. microcontroladores
Como ya se mencionó, tenemos dos formas de muestrear datos analógicos en Raspberry Pi. Antes de analizar el uso de ADC externos como ADS1115/ADS1015, vale la pena señalar la diferencia entre los dos enfoques. Cuando conectamos un microcontrolador como una placa Arduino con Raspberry Pi, conectamos una solución integrada completamente separada con la microcomputadora. Si la placa Arduino funciona a un nivel de voltaje diferente, como la mayoría de las placas Arduino son circuitos de 5 V, debemos utilizar con precaución un convertidor de nivel lógico TTL entre el microcontrolador y la Raspberry Pi. De lo contrario dañaremos toda la Pi, o al menos los pines de la placa. En el caso de un ADC externo, podemos controlar el ADC desde las salidas de voltaje de la Raspberry Pi.

Un microcontrolador funcionará de forma independiente con su ciclo de muestreo de datos. En este caso, será necesario un script de Python en la Raspberry Pi para mantener la velocidad de muestreo del microcontrolador. Esto también significa que el control de la adquisición de datos permanece en el microcontrolador y no en la Raspberry Pi. A veces, esto resulta útil cuando se implementan aplicaciones en las que el tiempo es crítico, donde los datos de los sensores deben procesarse inmediatamente para una respuesta rápida. En el caso de un ADC, la Raspberry Pi controla la adquisición de datos y la velocidad de muestreo. Algunos desarrolladores creen que Raspberry Pi que ejecuta un sistema operativo normal puede retrasar la adquisición y el procesamiento de datos analógicos con ADC externos, ya que otros procesos pueden anular los scripts de Python que se ejecutan actualmente. Sin embargo, este problema se puede resolver fácilmente delegando la detección de datos analógicos a un subproceso paralelo, empleando subprocesos múltiples.

Solo se debe utilizar un microcontrolador con Raspberry Pi cuando es necesario ejecutar en paralelo varias tareas integradas en las que el tiempo es crítico. En este caso, la Raspberry Pi se puede implementar en el backend para realizar análisis de datos extensos, implementar modelos de aprendizaje automático o aprendizaje profundo en datos de sensores, administrar la comunicación con una plataforma en la nube y administrar operaciones de IoT (Internet de las cosas).

ADS115/ADS1015 ADC
ADS1015 y ADS1115 son convertidores analógico-digital de alta precisión y baja potencia. Se utilizan mucho con Raspberry Pi ya que estos chips también funcionan a un voltaje de 3V3. ADS1015 es un ADC de 12 bits con cuatro canales de entrada analógica. ADS1115 es un ADC de 16 bits con cuatro canales de entrada analógica.

En este proyecto, usaremos ADS1115. El ADS1115 admite dos tipos de adquisición de datos: de un solo extremo y diferencial. En la conversión de un solo extremo, los datos analógicos de cada uno de los cuatro pines de entrada analógica se muestrean de forma independiente. La diferencia entre los voltajes en dos pines de entrada analógica se muestrea en un modo de operación diferencial. El ADS1115 tiene una resolución de 16 bits, de los cuales un bit queda reservado para el signo más/menos de la diferencia de voltaje en modo diferencial, y los 15 bits restantes se utilizan para almacenar valores de voltaje convertidos. El chip tiene una interfaz I2C para la comunicación de datos en serie con un microordenador/microcontrolador.

La frecuencia de muestreo del ADS1115 se puede configurar entre 8 y 860 muestras por segundo. Mayor es la frecuencia de muestreo; Cuanto más corto sea el tiempo que le toma al ADC capturar y convertir la señal analógica. El chip también tiene un amplificador de ganancia incorporado, que amplifica las señales de voltaje débiles de 2 a 3 veces a 16 veces. La conversión (uniterminal o diferencial) se puede realizar de dos formas. La conversión la inicia la Raspberry Pi (o el microordenador/microcontrolador de control) en un método. El valor convertido se almacena en un registro en el ADS1115. Luego, la Raspberry Pi lee el registro. En el segundo método, la conversión la realiza continuamente el ADS1115. La señal se muestrea a una velocidad preprogramada (8~860 sps) y el valor convertido se actualiza repetidamente en un registro en el ADS1115. La Raspberry Pi debe leer repetidamente el registro ADS1115 según la frecuencia de muestreo programada. Si Raspberry Pi lee el registro a una velocidad menor, perderá varias muestras capturadas. Por otro lado, si la Raspberry Pi lee el registro a una velocidad mayor, registrará múltiples valores redundantes para las mismas muestras.

ADS1115 tiene el siguiente diagrama de pines.

ADS1015 Configuración de pines ADS1115

Cableado ADS115/ADS1015 con Raspberry Pi
ADS1115 y ADS1015 toman muestras de datos analógicos de sensores y transfieren los valores convertidos a Raspberry Pi a través de la interfaz I2C. Ambos chips utilizan el mismo protocolo I2C y tienen la misma configuración de pines. Para conectar el ADS1015/ADS1115, siga las conexiones del circuito que se resumen en la siguiente tabla.

Habilitación de I2C en Raspberry Pi La salida analógica de un sensor debe estar conectada a A0, A1, A2 o A3 del ADS1015/ADS1115. Se pueden conectar un máximo de cuatro sensores al ADS1015/ADS1115. El sensor puede recibir voltaje de la propia Raspberry Pi. Si una fuente externa alimenta el sensor, no debe exceder los 3,3 V.

ADS1015 y ADS1115 se comunican con Raspberry Pi mediante el protocolo I2C. Antes de conectar el ADS1015/ADS1115 con Raspberry Pi, el puerto I2C debe estar habilitado en la microcomputadora. Para hacer esto, navegue hasta Preferencias -> Configuración de Raspberry Pi.

Ventana de configuración de Raspberry Pi Se abrirá una ventana de configuración como se muestra a continuación.

Interfaces en la configuración de Raspberry Pi

Seleccione la pestaña Interfaces. Habilite I2C y haga clic en Aceptar.

Puerto I2C en Raspberry Pi Es eso. Ahora Raspberry Pi puede comunicarse a través de un puerto I2C. El puerto I2C de la Raspberry Pi se muestra en la siguiente imagen.

Para obtener más información sobre la comunicación I2C en Raspberry Pi. Quizás también te interese saber cómo funciona el protocolo I2C.

Biblioteca Python Adafruit ADS1x15 Raspberry Pi
Afortunadamente, tenemos la biblioteca Python Adafruit ADS1x15 disponible para trabajar con ADS1015 y ADS1115. No necesitamos escribir ningún script de Python desde cero para conectar ADS1015/ADS1115 con Raspberry Pi.

Instalación de la biblioteca Python ADS1x15 en Raspberry Pi
La biblioteca Python Adafruit ADS1x15 se puede instalar en Raspberry Pi manualmente o mediante el administrador de paquetes PiP. Para instalar la biblioteca desde el código fuente, abra la Terminal Bash navegando a Accesorios->Terminal o simplemente haciendo clic en el ícono de Terminal; luego ejecute los siguientes comandos.

sudo apt-obtener actualización
sudo apt-get install build-essential python-dev python-smbus git
disco compacto ~
clon
CD Adafruit_Python_ADS1x15
instalación de sudo python setup.py

Para instalar la biblioteca usando el administrador de paquetes PiP, abra la Terminal Bash navegando a Accesorios->Terminal o simplemente haciendo clic en el ícono de Terminal; luego ejecute los siguientes comandos.

sudo apt-obtener actualización
sudo apt-get install build-essential python-dev python-smbus python-pip
sudo pip instalar adafruit_ads1x15

Si está utilizando Python3, deberá instalar la biblioteca usando pip3 de la siguiente manera.
sudo pip3 instala adafruit_ads1x15

Una vez que la biblioteca se haya instalado correctamente en su instalación de Python, podrá usarla simplemente importando la biblioteca a un script.

Código Python para adquisición de datos analógicos usando ADS1115/ADS1015
Para usar la biblioteca Adafruit ADS1x15 en un script de Python, importe la biblioteca usando la siguiente declaración.

importar Adafruit_ADS1x15

Por lo tanto, necesita crear una instancia de un objeto de clase Adafruit_ADS1x15 usando la siguiente declaración. La instancia aquí se denomina 'adc'; puede ser cualquier identificador.

adc = Adafruit_ADS1x15.ADS1115

A continuación, debe configurar la ganancia del amplificador integrado. La ganancia debe configurarse de acuerdo con la tabla de ganancia del amplificador programable proporcionada en la hoja de datos ADS1015/ADS1115. En la siguiente tabla se resume una referencia rápida de la ganancia del amplificador y el rango de voltaje de detección deseado.


La ganancia se puede configurar usando las siguientes instrucciones.

GANANCIA = 1

La lectura de voltaje convertida varía de -32768 a +32767 para ADS1115 y de -2048 a +2047 para ADS1015. Un valor de 0 se refiere al nivel del suelo. El voltaje real detectado está determinado por la proporcionalidad del rango de voltaje definido por la ganancia del amplificador. Por ejemplo, si la ganancia se establece en 1, el valor de 32767 se refiere a un voltaje de 4,096 V en el ADS1115. Cualquier valor en el rango -32768~32767 se refiere a un voltaje analógico (4,096/32767)*a. La lectura analógica de la entrada analógica A0 del ADS1115/ADS1015 se puede leer usando la siguiente instrucción.
valor = adc.read_adc(0, ganancia=GANANCIA)

De manera similar, las lecturas analógicas de las entradas analógicas A1~A3 del ADS1015/ADS1115 se pueden leer usando las siguientes instrucciones.
valor = adc.read_adc(1, ganancia=GANANCIA)
valor = adc.read_adc(2, ganancia=GANANCIA)
valor = adc.read_adc(3, ganancia=GANANCIA)

Aquí 'valor' es una variable en el script Python. Las lecturas de ADC se pueden obtener en un bucle si se conectan varios sensores analógicos a la Raspberry Pi a través de ADS1015/ADS1115. Los voltajes reales se pueden calcular usando la ecuación dada anteriormente. A continuación se muestra un ejemplo de cómo derivar la lectura de voltaje real.
GANANCIA = 1
valor = adc.read_adc(0, ganancia=GANANCIA)
voltaje_analógico = valor*(4,096/32767)

Interfaz de sensores IR con Raspberry Pi a través de ADS1115/ADS1015
Los sensores de infrarrojos son sensores de uso común que solo están disponibles en forma analógica. Los sensores IR se utilizan ampliamente en los robots Raspberry Pi para el seguimiento de líneas o la detección de obstáculos. Los sensores IR se pueden conectar fácilmente a Raspberry Pi mediante ADS1015/ADS1115. El sensor de infrarrojos tiene tres pines: VDD, GND y Salida. Conecte el pin de salida del sensor de infrarrojos con cualquier pin de entrada analógica del ADS1015/ADS1115 y suministre energía positiva y negativa al sensor desde la propia Raspberry Pi. Luego conecte el ADS1015/ADS1115 con Raspberry Pi como se mencionó anteriormente. De esta manera, ahora se conecta un sensor de infrarrojos, un sensor analógico, a la Raspberry Pi.

Script Python para leer la salida del sensor IR en Raspberry Pi
Ejecute el siguiente script para obtener lecturas del sensor IR analógico desde la consola Python.
tiempo de importación
importar Adafruit_ADS1x15
adc = Adafruit_ADS1x15.ADS1115
# Elija una ganancia de 1 para leer voltajes de 0 a 4,09 V.
# O elija una ganancia diferente para cambiar el rango de voltajes lea:
# – 2/3 = +/-6.144V
# – 1 = +/-4.096V
# – 2 = +/-2.048V
# – 4 = +/-1.024V
# – 8 = +/-0,512V
# – 16 = +/-0,256V
# Consulte la tabla 3 en la hoja de datos de ADS1015/ADS1115 para obtener más información sobre la ganancia.

GANANCIA = 1
mientras que Verdadero:
valor = adc.read_adc(0, ganancia=GANANCIA)
imprimir (valor)

tiempo.dormir(0.5)

Resultados
El sensor IR emite un voltaje mayor cuando no hay ningún obstáculo en su camino. Cuando el sensor se enfrenta a un obstáculo, su salida se reduce. La lectura del ADC cuando no hay obstáculos en el camino del sensor de infrarrojos es 24550 ~ 24729. Con una ganancia del amplificador de 1, estas lecturas corresponden a un voltaje de 3,06 ~ 3,09 V. La lectura del ADC cuando un obstáculo bloquea el sensor de infrarrojos es 660~670. Con una ganancia de amplificador de 1, estas lecturas corresponden a un voltaje de 0,081~0,083V. Cabe señalar que la salida del sensor IR depende de su calibración mediante el potenciómetro integrado.

Conclusión
ADS1015 y ADS1115 son convertidores analógicos a digitales de alta resolución y baja potencia. Se pueden interconectar fácilmente con Raspberry Pi y comunicarse a través del protocolo I2C. Estos circuitos integrados pueden detectar un máximo de cuatro voltajes analógicos simultáneamente en una configuración de un solo extremo. Por lo tanto, ADS1015 y ADS1115 son los mejores ADC para robots Raspberry Pi.

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.