- Flujo del proyecto:
- Requerimientos del proyecto
- Diagrama de circuito:
- Instalar dependencias para el osciloscopio Raspberry Pi:
- Código Python para el osciloscopio Raspberry Pi:
- Osciloscopio Raspberry Pi en acción:
Hola chicos, bienvenidos a la publicación de hoy. Una de las cosas más fascinantes de ser un creador es saber cómo desarrollar herramientas improvisadas, nunca te quedarás atascado trabajando en ningún proyecto cuando tienes ese tipo de versatilidad. Así que hoy, compartiré cómo construir una versión improvisada basada en Raspberry Pi de una de las herramientas más importantes en ingeniería eléctrica / electrónica; El osciloscopio.
El osciloscopio es un instrumento de prueba electrónico que permite la visualización y observación de voltajes de señal variables, generalmente como un gráfico bidimensional con una o más señales representadas contra el tiempo. El proyecto de hoy buscará replicar las capacidades de visualización de señal del osciloscopio usando la Raspberry Pi y un módulo conversor de analógico a digital.
Flujo del proyecto:
Replicar la visualización de la señal del osciloscopio usando la Raspberry Pi requerirá los siguientes pasos;
1. Realice la conversión digital a analógica de la señal de entrada
2. Preparar los datos resultantes para su representación.
3. Trace los datos en un gráfico de tiempo en vivo.
Un diagrama de bloques simplificado para este proyecto se vería como el diagrama siguiente.
Requerimientos del proyecto
El requisito para este proyecto se puede clasificar en dos:
- Requisitos de hardware
- Requisitos de Software
Requisitos de hardware
Para construir este proyecto, se requieren los siguientes componentes / parte;
- Raspberry pi 2 (o cualquier otro modelo)
- Tarjeta SD de 8 o 16 GB
- Cable LAN / Ethernet
- Fuente de alimentación o cable USB
- ADS1115 ADC
- LDR (opcional ya que está destinado a la prueba)
- Resistencia de 10k o 1k
- Cables de puente
- Tablero de circuitos
- Monitor o cualquier otra forma de ver el escritorio de pi (VNC incluido)
Requisitos de Software
Los requisitos de software para este proyecto son básicamente los módulos de Python ( matplotlib y drawnow ) que se utilizarán para la visualización de datos y el módulo Adafruit para interactuar con el chip ADC ADS1115. Mostraré cómo instalar estos módulos en la Raspberry Pi a medida que avancemos.
Si bien este tutorial funcionará independientemente del sistema operativo raspberry pi utilizado, usaré el sistema operativo Raspberry Pi y asumiré que está familiarizado con la configuración de Raspberry Pi con el sistema operativo Raspbian stretch, y que sabe cómo SSH en el raspberry pi usando un software de terminal como putty. Si tiene problemas con algo de esto, hay toneladas de Tutoriales de Raspberry Pi en este sitio web que pueden ayudar.
Con todos los componentes de hardware en su lugar, creemos los esquemas y conectemos los componentes.
Diagrama de circuito:
Para convertir las señales de entrada analógicas en señales digitales que se pueden visualizar con la Raspberry Pi, usaremos el chip ADC ADS1115. Este chip se vuelve importante porque la Raspberry Pi, a diferencia de Arduino y la mayoría de los microcontroladores, no tiene un convertidor analógico a digital (ADC) integrado. Si bien podríamos haber usado cualquier chip ADC compatible con Raspberry Pi, prefiero este chip debido a su alta resolución (16 bits) y su hoja de datos bien documentada e instrucciones de uso de Adafruit. También puede consultar nuestro tutorial de Raspberry Pi ADC para obtener más información al respecto.
El ADC es un dispositivo basado en I2C y debe conectarse a Raspberry Pi como se muestra en los esquemas a continuación.
Para mayor claridad, la conexión de pines entre los dos componentes también se describe a continuación.
Conexiones ADS1115 y Raspberry Pi:
VDD - 3,3 V
GND - GND
SDA - SDA
SCL - SCL
Con todas las conexiones hechas, encienda su pi y proceda a instalar las dependencias mencionadas a continuación.
Instalar dependencias para el osciloscopio Raspberry Pi:
Antes de comenzar a escribir el script Python para extraer datos del ADC y trazarlos en un gráfico en vivo, debemos habilitar la interfaz de comunicación I2C de la raspberry pi e instalar los requisitos de software que se mencionaron anteriormente. Esto se hará en los pasos a continuación, por lo que es fácil de seguir:
Paso 1: Habilite la interfaz Raspberry Pi I2C
Para habilitar el I2C, desde el terminal, ejecute;
sudo raspi-config
Cuando se abran los paneles de configuración, seleccione las opciones de interfaz, seleccione I2C y haga clic en habilitar.
Paso 2: actualiza la Raspberry pi
Lo primero que hago antes de iniciar cualquier proyecto es actualizar el Pi. A través de esto, estoy seguro de que todo en el sistema operativo está actualizado y no experimentaré problemas de compatibilidad con ningún software más reciente que elija instalar en el Pi. Para hacer esto, ejecute debajo de dos comandos:
sudo apt-get update sudo apt-get upgrade
Paso 3: Instale la biblioteca Adafruit ADS1115 para ADC
Con la actualización realizada, ahora estamos listos para instalar las dependencias comenzando con el módulo de Python Adafruit para el chip ADS115. Asegúrese de estar en el directorio de inicio de Raspberry Pi ejecutando;
cd ~
luego instale los elementos esenciales de compilación ejecutando;
sudo apt-get install build-essential python-dev python-smbus git
Luego, clone la carpeta git de Adafruit para la biblioteca ejecutando;
clon de git https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Cambie al directorio del archivo clonado y ejecute el archivo de instalación;
cd Adafruit_Python_ADS1x1z sudo python setup.py instalar
Después de la instalación, su pantalla debería verse como la imagen a continuación.
Paso 4: Pruebe la biblioteca y la comunicación 12C.
Antes de continuar con el resto del proyecto, es importante probar la biblioteca y asegurarse de que el ADC pueda comunicarse con la raspberry pi a través de I2C. Para hacer esto usaremos un script de ejemplo que viene con la biblioteca.
Mientras todavía está en la carpeta Adafruit_Python_ADS1x15, cambie el directorio al directorio de ejemplos ejecutando;
ejemplos de cd
A continuación, ejecute el ejemplo sampletest.py que muestra el valor de los cuatro canales en el ADC en forma tabular.
Ejecute el ejemplo usando:
python simpletest.py
Si el módulo I2C está habilitado y las conexiones son buenas, debería ver los datos como se muestra en la imagen a continuación.
Si ocurre un error, verifique que el ADC esté bien conectado al PI y que la comunicación I2C esté habilitada en el Pi.
Paso 5: Instale Matplotlib
Para visualizar los datos necesitamos instalar el módulo matplotlib que se utiliza para trazar todo tipo de gráficos en Python. Esto se puede hacer ejecutando;
sudo apt-get install python-matplotlib
Debería ver un resultado como el de la imagen de abajo.
Paso 6: Instale el módulo de Python Drawnow
Por último, necesitamos instalar el módulo de python drawnow . Este módulo nos ayuda a proporcionar actualizaciones en vivo del gráfico de datos.
Vamos a instalar drawNow a través de la instalación del paquete de pitón; pip , por lo que debemos asegurarnos de que esté instalado. Esto se puede hacer ejecutando;
sudo apt-get install python-pip
Luego podemos usar pip para instalar el paquete drawnow ejecutando:
sudo pip instalar drawnow
Debería obtener un resultado como la imagen de abajo después de ejecutarlo.
Con todas las dependencias instaladas, ahora estamos listos para escribir el código.
Código Python para el osciloscopio Raspberry Pi:
El código de Python para este osciloscopio Pi es bastante simple, especialmente si está familiarizado con el módulo matplotlib de Python. Antes de mostrarnos el código completo, intentaré dividirlo en partes y explicar qué está haciendo cada parte del código para que pueda tener el conocimiento suficiente para extender el código y hacer más cosas.
En esta etapa, es importante cambiar a un monitor o usar el visor VNC, cualquier elemento a través del cual pueda ver el escritorio de su Raspberry Pi, ya que el gráfico que se está trazando no se mostrará en el terminal.
Con el monitor como interfaz, abra un nuevo archivo de Python. Puedes llamarlo como quieras, pero yo lo llamaré scope.py.
sudo nano scope.py
Con el archivo creado, lo primero que hacemos es importar los módulos que estaremos usando;
import time import matplotlib.pyplot como plt desde drawnow import * import Adafruit_ADS1x15
A continuación, creamos una instancia de la biblioteca ADS1x15 especificando el ADC ADS1115
adc = Adafruit_ADS1x15.ADS1115 ()
A continuación, configuramos la ganancia del ADC. Hay diferentes rangos de ganancia y deben elegirse en función del voltaje que espera en la entrada del ADC. Para este tutorial, estamos estimando un 0 - 4.09v, por lo que usaremos una ganancia de 1. Para obtener más información sobre la ganancia, puede consultar la hoja de datos ADS1015 / ADS1115.
GANANCIA = 1
A continuación, necesitamos crear las variables de matriz que se utilizarán para almacenar los datos que se trazarán y otra que sirva como recuento.
Val = cnt = 0
A continuación, damos a conocer nuestras intenciones de hacer que la trama sea interactiva para que podamos trazar los datos en vivo.
plt.ion ()
A continuación, iniciamos la conversión ADC continua especificando el canal ADC, en este caso, el canal 0 y también especificamos la ganancia.
Cabe señalar que los cuatro canales ADC en el ADS1115 se pueden leer al mismo tiempo, pero 1 canal es suficiente para esta demostración.
adc.start_adc (0, ganancia = GANANCIA)
A continuación, creamos una función def makeFig , para crear y establecer los atributos del gráfico que mantendrá nuestro gráfico en vivo. En primer lugar, establecemos los límites del eje y usando ylim , después de lo cual ingresamos el título del gráfico y el nombre de la etiqueta antes de especificar los datos que se trazarán y su estilo y color del gráfico usando plt.plot (). También podemos indicar el canal (como se indicó el canal 0) para poder identificar cada señal cuando se estén utilizando los cuatro canales del ADC. plt.legend se utiliza para especificar dónde queremos que se muestre la información sobre esa señal (por ejemplo, el canal 0) en la figura.
plt.ylim (-5000,5000) plt.title ('Osciloscopio') plt.grid (Verdadero) plt.ylabel ('Salidas ADC') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'abajo a la derecha')
A continuación vamos a escribir el tiempo de bucle que será utilizado constantemente los datos leídos de la ADC y actualizar en consecuencia la trama.
Lo primero que hacemos es leer el valor de conversión de ADC
valor = adc.get_last_result ()
A continuación, imprimimos el valor en la terminal solo para darnos otra forma de confirmar los datos graficados. Esperamos unos segundos después de imprimir y luego agregamos los datos a la lista (val) creada para almacenar los datos de ese canal.
print ('Channel 0: {0}'. format (value)) time.sleep (0.5) val.append (int (value))
Luego llamamos a drawnow para actualizar el gráfico.
dibujar ahora (makeFig)
Para garantizar que los datos más recientes son los que están disponibles en el gráfico, eliminamos los datos en el índice 0 después de cada 50 recuentos de datos.
cnt = cnt + 1 si (cnt> 50): val.pop (0)
¡Eso es todo!
El código completo de Python se proporciona al final de este tutorial.
Osciloscopio Raspberry Pi en acción:
Copie el código de Python completo y péguelo en el archivo de Python que creamos anteriormente, recuerde que necesitaremos un monitor para ver el gráfico, por lo que todo esto debe hacerse con VNC o con un monitor o pantalla conectados.
Guarde el código y ejecútelo usando;
sudo python scope.py
Si usó un nombre diferente que no sea scope.py, no olvide cambiarlo para que coincida.
Después de unos minutos, debería ver que los datos de ADC se imprimen en el terminal. Ocasionalmente, puede recibir una advertencia de matplotlib (como se muestra en la imagen a continuación) que debe suprimirse, pero no afecta los datos que se muestran o el gráfico de ninguna manera. Sin embargo, para suprimir la advertencia, se pueden agregar las siguientes líneas de código después de las líneas de importación en nuestro código.
Importar advertencias importar matplotlib.cbook warnings.filterwarnings ("ignorar", categoría = matplotlib.cbook.mplDeprecation)
Eso es todo por este tutorial, chicos, para probar completamente su osciloscopio, puede conectar un dispositivo analógico como un potenciómetro a un canal en el ADC y debería ver los datos cambiar con cada giro del potenciómetro. O puede ingresar una onda sinusoidal o una onda cuadrada para probar la salida.
Gracias por leer, si tiene alguna pregunta o algo que le gustaría que agregue, simplemente déjeme un comentario.
Hasta la próxima, ¡sigue haciendo!