- Cómo funciona
- Componentes requeridos
- Esquemas
- Código de osciloscopio Arduino
- Secuencia de comandos de Python (Plotter)
- Código Arduino
- Osciloscopio Arduino en acción
El osciloscopio es una de las herramientas más importantes que encontrará en el banco de trabajo de cualquier ingeniero o fabricante electrónico. Se utiliza principalmente para ver formas de onda y determinar niveles de voltaje, frecuencia, ruido y otros parámetros de señales aplicadas en su entrada que pueden cambiar con el tiempo. También lo utilizan los desarrolladores de software integrado para depurar códigos y los técnicos para solucionar problemas de dispositivos electrónicos durante la reparación. Estas razones hacen que el osciloscopio sea una herramienta imprescindible para cualquier ingeniero. El único problema es que pueden ser muy costosos, los osciloscopios que realizan las funciones más básicas con la menor precisión pueden costar entre $ 45 y $ 100 mientras que los más avanzados y eficientes cuestan más de $ 150. Hoy estaré demostrando cómo usar Arduinoy un software, que se desarrollará con mi lenguaje de programación favorito Python, para construir un osciloscopio Arduino de 4 canales de bajo costo capaz de realizar las tareas para las que se implementan algunos de los osciloscopios baratos como la visualización de formas de onda y la determinación de niveles de voltaje. para señales.
Cómo funciona
Hay dos partes para este proyecto;
- El convertidor de datos
- El trazador
Los osciloscopios generalmente involucran la representación visual de una señal analógica aplicada a su canal de entrada. Para lograr esto, primero debemos convertir la señal de analógica a digital y luego trazar los datos. Para la conversión, aprovecharemos el ADC (convertidor analógico a digital) en el microcontrolador atmega328p utilizado por Arduino para convertir los datos analógicos en la entrada de señal en una señal digital. Después de la conversión, el valor por tiempo se envía a través de UART desde Arduino a la PC, donde el software del trazador que se desarrollará usando Python convertirá el flujo de datos entrante en una forma de onda al trazar cada dato contra el tiempo.
Componentes requeridos
Se requieren los siguientes componentes para construir este proyecto;
- Arduino Uno (se puede utilizar cualquiera de las otras placas)
- Tablero de circuitos
- Resistencia de 10k (1)
- LDR (1)
- Cables de puente
Softwares requeridos
- IDE de Arduino
- Pitón
- Bibliotecas de Python: Pyserial, Matplotlib, Drawnow
Esquemas
El esquema del osciloscopio Arduino es simple. Todo lo que tenemos que hacer es conectar la señal que se examinará al pin analógico especificado del Arduino. Sin embargo, usaremos el LDR en una configuración simple de divisor de voltaje para generar la señal que se examinará, de modo que la forma de onda generada describirá el nivel de voltaje, según la intensidad de la luz alrededor del LDR.
Conecte los componentes como se muestra en los esquemas siguientes;
Después de la conexión, a la configuración le debería gustar la imagen de abajo.
Con las conexiones hechas, podemos proceder a escribir el código.
Código de osciloscopio Arduino
Escribiremos códigos para cada una de las dos secciones. Para el Plotter como se mencionó anteriormente, escribiremos un script de Python que acepta los datos de Arduino a través de UART y Plots, mientras que para el convertidor, escribiremos un boceto de Arduino que toma los datos del ADC y los convierte a niveles de voltaje que se envían al trazador.
Secuencia de comandos de Python (Plotter)
Dado que el código de Python es más complejo, comenzaremos con él.
Usaremos un par de bibliotecas que incluyen; drawnow, Matplotlib y Pyserial con el script Python como se mencionó anteriormente. Pyserial nos permite crear un script de Python que puede comunicarse a través del puerto serie, Matplotlib nos da la capacidad de generar gráficos a partir de los datos recibidos a través del puerto serie y drawnow nos proporciona un medio para actualizar el gráfico en tiempo real.
Hay varias formas de instalar estos paquetes en su PC, siendo la más sencilla a través de pip . Pip se puede instalar a través de la línea de comandos en una máquina Windows o Linux. PIP está empaquetado con python3, por lo que le aconsejaré que instale python3 y marque la casilla sobre agregar python a la ruta. Si tiene problemas con la instalación de pip, consulte este sitio web oficial de Python para obtener consejos.
Con pip instalado, ahora podemos instalar las otras bibliotecas que necesitamos.
Abra el símbolo del sistema para usuarios de Windows, terminal para usuarios de Linux e ingrese lo siguiente;
pip instalar pyserial
Una vez hecho esto, instale matplotlib usando;
pip instalar matplotlib
Drawnow a veces se instala junto con matplotlib, pero solo para estar seguro, ejecútelo;
pip instalar drawnow
Con la instalación completa, ahora estamos listos para escribir el script de Python.
La secuencia de comandos de Python para este proyecto es similar a la que escribí para el osciloscopio basado en Raspberry Pi.
Comenzamos importando todas las bibliotecas necesarias para el código;
import time import matplotlib.pyplot as plt from drawnow import * import pyserial
A continuación, creamos e inicializamos las variables que se utilizarán durante el código. La matriz val se utilizará para almacenar los datos recibidos desde el puerto serie y cnt se utilizará para contar. Los datos de la ubicación 0 se eliminarán después de cada 50 recuentos de datos. Esto se hace para que los datos se muestren en el osciloscopio.
val = cnt = 0
A continuación, creamos el objeto de puerto serie a través del cual Arduino se comunicará con nuestro script de Python. Asegúrese de que el puerto com especificado a continuación sea el mismo puerto com a través del cual su placa Arduino se comunica con el IDE. La velocidad en baudios de 115200 utilizada anteriormente se utilizó para garantizar una comunicación de alta velocidad con Arduino. Para evitar errores, el puerto serie Arduino también debe estar habilitado para comunicarse con esta velocidad en baudios.
puerto = serial.Serial ('COM4', 115200, tiempo de espera = 0.5)
A continuación, hacemos que la trama sea interactiva usando;
plt.ion ()
necesitamos crear una función para generar el gráfico a partir de los datos recibidos, creando el límite superior y mínimo que estamos esperando, que en este caso es 1023 basado en la resolución del ADC de Arduino. También establecemos el título, etiquetamos cada eje y agregamos una leyenda para facilitar la identificación del gráfico.
#crea la función de figura def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscopio') plt.grid (True) plt.ylabel ('salidas ADC') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' inferior derecha ')
Con esto hecho, ahora estamos listos para escribir el bucle principal que toma los datos del puerto serie cuando están disponibles y los traza. Para sincronizar con Arduino, la secuencia de comandos de Python envía un protocolo de enlace de datos al Arduino para indicar que está listo para leer datos. Cuando el Arduino recibe los datos del protocolo de enlace, responde con datos del ADC. Sin este apretón de manos, no podremos trazar los datos en tiempo real.
while (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # si el arduino responde value = port.readline () # lee la respuesta print (value) #print para que podamos supervisarlo número = int (valor) #convertir los datos recibidos a la impresión entera ('Canal 0: {0}'. formato (número)) # Dormir durante medio segundo. time.sleep (0.01) val.append (int (number)) drawnow (makeFig) #update plot para reflejar la nueva entrada de datos plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) #mantener la trama fresca borrando los datos en la posición 0
El código python completo para el osciloscopio arduino se proporciona al final de este artículo que se muestra a continuación.
Código Arduino
El segundo código es el boceto de Arduino para obtener los datos que representan la señal del ADC, luego espere a recibir la señal de reconocimiento del software del trazador. Tan pronto como recibe la señal de reconocimiento, envía los datos adquiridos al software del trazador a través de UART.
Comenzamos declarando el pin del pin Analógico del Arduino al que se aplicará la señal.
int sensorpin = A0;
A continuación, inicializamos y comenzamos la comunicación en serie con una velocidad de 115200 baudios.
void setup () { // inicializa la comunicación en serie a 115200 bits por segundo para que coincida con la del script de Python: Serial.begin (115200); }
Por último, la función voidloop () que maneja la lectura de los datos y envía los datos en serie al trazador.
void loop () { // leer la entrada en el pin analógico 0: float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (datos == 's') { Serial.println (sensorValue); retraso (10); // retraso entre lecturas para estabilidad } }
El código completo del osciloscopio Arduino se proporciona a continuación, así como al final de este artículo que se muestra a continuación.
int sensorpin = A0; void setup () { // inicializa la comunicación en serie a 115200 bits por segundo para que coincida con la del script de Python: Serial.begin (115200); } void loop () { // leer la entrada en el pin analógico 0: ################################ ##################### float sensorValue = analogRead (sensorpin); datos de bytes = Serial.read (); if (datos == 's') { Serial.println (sensorValue); retraso (10); // retraso entre lecturas para estabilidad } }
Osciloscopio Arduino en acción
Sube el código a la configuración de Arduino y ejecuta el script de Python. Debería ver que los datos comienzan a transmitirse a través de la línea de comando de Python y que la gráfica varía con la intensidad de la luz, como se muestra en la imagen a continuación.
Así es como se puede usar Arduino como osciloscopio, también se puede hacer usando Raspberry pi, consulte aquí el tutorial completo sobre el osciloscopio basado en Raspberry Pi.