Serial – Lectura datos

Un Arduino puede enviar valores numéricos de un sensor por medio del conector USB en forma Serial (secuencial).

Los datos recibidos por una computadora mediante el puerto USB pueden procesarse usando Python. Para ésto debe conocer el puerto «com» y la velocidad de transmisión en los baudios usada por el arduino.

Ejemplo:

Se muestra una lectura de valores numéricos enteros, a partir del cual se puede modificar otros requerimientos.

El ejemplo usa los resultados de la sección Morse para el receptor: TxRx Inalambrico 433Mhz ASK/OOK

0
0
0
1017
1017
1018
1021
1017
1019
1018
1018
1016
1018
1016
1017
1019
1018
1016
1020
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1017
1017
1016
1017
1016

Instrucciones en Python

# Datos desde puerto Serial
# generados desde arduino

import numpy as np
import matplotlib.pyplot as plt
import serial, time

# INGRESO
puerto = 'com5'
baudios = 9600
ventana = 200 # tamaño ventana datos
datos=[] # vector para graficar

# PROCEDIMIENTO
arduino = serial.Serial(puerto, baudios)
arduino.setDTR(False)
time.sleep(0.3)

# limpia buffer de datos anteriores
arduino.flushInput()  
arduino.setDTR()  
time.sleep(0.3)
print('\nEstado del puerto: ',arduino.isOpen())
print('Nombre del dispositivo conectado: ', arduino.name)
print('Dump de la configuración:\n ',arduino)
print('\n###############################################\n')

# Lectura de datos
while True:
    #esperar hasta recibir un dato
    while (arduino.inWaiting()==0):
        pass 

    # lee linea desde puerto serial
    lectura = arduino.readline()
    # binario a texto, elimina /r/n
    texto = lectura.decode().strip()
    valor = int(texto)
    datos.append(valor)
    
    # mantiene el tamaño "ventana" de datos 
    if (len(datos)>=ventana):
        datos.pop(0)
    print(valor)
    
# Cerrar el puerto serial.
serial.Serial.close

Publicado por

Edison Del Rosario

edelros@espol.edu.ec / Profesor del FIEC/FCNM-ESPOL

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *