Tecnología

Inicio

Cómo hacer un osciloscopio en Python

Osciloscopios se utilizan para medir los intervalos de diferentes tipos de ondas y señales eléctricas. Sus lecturas ayudan a proporcionar los investigadores dentro de penetración en la frecuencia y la fuerza de las ondas emitidas por los dispositivos eléctricos y otras fuentes. Para el hardware en un osciloscopio para el trabajo, que necesita ser conectado a un programa de software que interpreta las lecturas y los muestra en un gráfico.

Instrucciones

1 Abra una aplicación de edición de código o utilizar una aplicación de edición de texto como TextEdit en Mac OS X o el Bloc de notas de Microsoft Windows. Crear un nuevo documento para albergar la secuencia de comandos de Python el osciloscopio.

2 Definir los parámetros que serán utilizados en la escritura, así como las dos bibliotecas de Python necesarios para la secuencia de comandos mediante el código siguiente:

import os, sys
importación de imágenes
serie de importaciones
pygame importación
tiempo de importación

de importación pyBusPirateLite.UART


de importación pyBusPirateLite.BitBang

3 Definir la velocidad de datos y utilizar la función de impresión para que el programa pueda representar gráficamente las entradas realizadas por el osciloscopio:

DATA_RATE = 5720,0 # medidas / segundo (experimenticaly estimado)
DEFAULT_TIME_SCALE = RES_X / DATA_RATE #default tiempo en segundos para hacer relleno de una ventana
pygame.init ()
pb = UART (BUS_PIRATE_DEV, 115200)
print "Introducción binmode:",
si bp.BBmode ():

print "OK."

más:

print "failed."
sys.exit()

4 Definir los parámetros de la ventana de la aplicación mediante la función pygame.display:

Ventana = pygame.display.set_mode ((RES_X, RES_Y))
fondo = (0,0,0)
line = (0,255,0)
trig_color = (100,100,0)

5 Crear la secuencia de comandos para el propio osciloscopio mediante la definición de los parámetros que se escribirán en el gráfico y proporcionar argumentos para el X y el eje Y:

bp.port.write ( "\ x15")
mientras que 1:

plot = {}
voltage = {}
maxv = 0
minv = 100
time_scale = DEFAULT_TIME_SCALE * time_div
prev_voltage = 0
measure = 0;
if(trig_mode != NO_SYNC):
for k in range(1,2000):
prev_voltage = voltage
measure = bp.response(2, True)
voltage = ord(measure[0]) << 8
voltage = voltage + ord(measure[1])
voltage = (voltage/1024.0) * 6.6
#rising slope
if((voltage >= trigger_level) and (prev_voltage < (voltage * TRIG_CAL)) and (trig_mode == RISING_SLOPE)):
break
if((voltage < trigger_level) and (voltage > 0.01) and (prev_voltage > voltage/TRIG_CAL) and (trig_mode == FALLING_SLOPE)):
break
for i in range(RES_X):
for k in range(time_div - 1):
#ignoring (time_div-1) samples to achieve proper time resolution
bp.response(2, True)
measure = bp.response(2, True)
voltage = ord(measure[0]) << 8
voltage = voltage + ord(measure[1])
voltage = (voltage/1024.0) * 6.6
plot[i] = voltage
for i in range(1,RES_X):
if plot[i] > maxv:
maxv = plot[i]
if plot[i] < minv:
minv = plot[i]
y = (RES_Y) - plot[i]*(RES_Y/MAX_VOLTAGE) - OFFSET
x = i
px = i-1;
py = (RES_Y) - plot[i-1]*(RES_Y/MAX_VOLTAGE) - OFFSET
pygame.draw.line(window, line, (px, py), (x, y))
trig_y = RES_Y - trigger_level * (RES_Y/MAX_VOLTAGE)
pygame.draw.line(window, trig_color, (0, trig_y), (RES_X, trig_y))

6 Finalizar el osciloscopio mediante la definición de los parámetros de la interfaz gráfica de usuario del osciloscopio:

GUI)

font = pygame.font.Font(None, 19)
text_max_voltage = font.render("Max: %f V" % maxv, 1, (255, 255, 255))
text_min_voltage = font.render("Min: %f V" % minv, 1, (255, 255, 255))
text_time_scale = font.render("Timescale: %f s" % time_scale, 1, (255, 255, 255))
text_maxv_Rect = text_max_voltage.get_rect()
text_minv_Rect = text_min_voltage.get_rect()
text_time_scale_Rect = text_time_scale.get_rect()
text_maxv_Rect.x = 10
text_maxv_Rect.y = 10
text_minv_Rect.x = 10
text_minv_Rect.y = 30
text_time_scale_Rect.x = 10
text_time_scale_Rect.y = 50
window.blit(text_max_voltage, text_maxv_Rect)
window.blit(text_min_voltage, text_minv_Rect)
window.blit(text_time_scale, text_time_scale_Rect)