Crear un osciloscopio en tiempo real con Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Introducción

Este tutorial es una guía paso a paso sobre cómo crear un osciloscopio utilizando la biblioteca Matplotlib de Python. Un osciloscopio es un dispositivo utilizado para medir y mostrar señales de voltaje a lo largo del tiempo. En este tutorial, utilizaremos el módulo de animación de Matplotlib para crear una visualización en tiempo real de una señal de voltaje.

Consejos para la MV

Después de que la máquina virtual (VM) haya terminado de iniciar, haz clic en la esquina superior izquierda para cambiar a la pestaña Notebook y acceder a Jupyter Notebook para practicar.

A veces, es posible que debas esperar unos segundos para que Jupyter Notebook termine de cargar. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si encuentras problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona comentarios después de la sesión y resolveremos rápidamente el problema para ti.

Importar bibliotecas

Antes de comenzar a codificar, necesitamos importar las bibliotecas necesarias. Utilizaremos Matplotlib, NumPy y el módulo de animación.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
from matplotlib.lines import Line2D

Configurar la clase Scope

La clase Scope contendrá los datos y métodos necesarios para crear el osciloscopio. En el constructor, inicializamos las variables necesarias y configuramos la gráfica.

class Scope:
    def __init__(self, ax, maxt=2, dt=0.02):
        self.ax = ax
        self.dt = dt
        self.maxt = maxt
        self.tdata = [0]
        self.ydata = [0]
        self.line = Line2D(self.tdata, self.ydata)
        self.ax.add_line(self.line)
        self.ax.set_ylim(-.1, 1.1)
        self.ax.set_xlim(0, self.maxt)

Definir el método de actualización

El método de actualización se llama para cada fotograma de la animación. Recibe un nuevo valor y actualiza la gráfica en consecuencia.

def update(self, y):
        lastt = self.tdata[-1]
        if lastt >= self.tdata[0] + self.maxt:  ## reset the arrays
            self.tdata = [self.tdata[-1]]
            self.ydata = [self.ydata[-1]]
            self.ax.set_xlim(self.tdata[0], self.tdata[0] + self.maxt)
            self.ax.figure.canvas.draw()

        t = self.tdata[0] + len(self.tdata) * self.dt

        self.tdata.append(t)
        self.ydata.append(y)
        self.line.set_data(self.tdata, self.ydata)
        return self.line,

Crear la función emisor

La función emisor genera los datos que se pasarán al método de actualización. En este caso, estamos generando datos aleatorios con una probabilidad de 0.1.

def emitter(p=0.1):
    while True:
        v = np.random.rand()
        if v > p:
            yield 0.
        else:
            yield np.random.rand()

Configurar la gráfica

Creamos un nuevo objeto figura y eje y inicializamos la clase Scope. Luego, pasamos las funciones de actualización y emisor al método FuncAnimation para crear la animación.

fig, ax = plt.subplots()
scope = Scope(ax)

ani = animation.FuncAnimation(fig, scope.update, emitter, interval=50,
                              blit=True, save_count=100)

plt.show()

Resumen

En este tutorial, aprendimos cómo usar Matplotlib para crear un osciloscopio que muestra señales de voltaje en el tiempo. Definimos una clase Scope para contener los datos y métodos necesarios para el osciloscopio, creamos un método de actualización para actualizar la gráfica y usamos la función emisor para generar los datos. Finalmente, configuramos la gráfica y pasamos las funciones de actualización y emisor al método FuncAnimation para crear la animación.