L9V Python Comunicación Serial Arduino
L9V Python Comunicación Serial Arduino
LENGUAJES DE PROGRAMACIÓN
II Ciclo
1. Objetivos
● Comprender el uso del módulo Pyserial
2. Seguridad
Advertencia:
●Obligatorio el uso de Mascarilla y careta de protección
●Desinfectar las manos con alcohol al ingreso del laboratorio
●Mantener siempre la distancia durante el laboratorio
●No obstruir las vías de evacuación con mochilas, sillas en mala
posición, etc.
●Ubicar maletines y/o mochilas al final del aula o en los casilleros
asignados al estudiante.
●No ingresar con líquidos, ni comida al aula de Laboratorio.
●Al culminar la sesión de laboratorio apagar correctamente la
computadora y la pantalla, y ordenar las sillas utilizadas.
●En este laboratorio está prohibida la manipulación del hardware,
conexiones eléctricas o de red
3. Equipos y Materiales
Una computadora con:
● Windows 7 o superior
● Conexión a la red
● Python 3.9 o superior, VS Code
● PySerial
● ELTIMA Virtual Serial Port Driver
● PlatfomIO IDE
● PICSimLab
4. Fundamento Teórico
PySerial: Este módulo encapsula el acceso al puerto serie y proporciona los Back-Ends (Capa de
acceso a datos), para que Python se ejecute en Windows. Este módulo selecciona
automáticamente el backend apropiado.
Lab. N° 9 Python-Comunicación Serial-
Arduino
po
Nota: En caso de que no puedan instalar mediante el CMD pueden descargar e instalar manualmente
desde la página oficial: https://pypi.org/project/pyserial/, si ya estan instalados los paquetes te saldra
el aviso: Requirement already satisfied
Nota: los paquetes instalados solo estarán disponibles para una sola versión de Python y no para
todas las versiones.
Descargar e instalar la última versión de prueba (15 días) de Virtual Serial Port Driver en:
https://drive.google.com/drive/folders/1066bThZ7QoPZbKe2qw9U8eUqiwpwxiKs?usp=sharing
En main.cpp realizamos nuestro programa para cargar en el Arduino y realizar la comunicación serial
con el Python.
#include <Arduino.h>
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
if(Serial.available()>0){
char dato=Serial.read(); //dato que llega al puerto serie
if(dato == 'a'){
digitalWrite(13, HIGH); // Enciende Led en pin 8
Serial.println("ON");
}
else if(dato == 'b'){
digitalWrite(13, LOW); //Apaga led en pin 8
Serial.println("OFF");
}
else{
Serial.println("dato incorrecto");
}
}
}
Una vez generado el archivo firmware.hex, buscamos la dirección de la carpeta donde se encuentra
para cargarlo en el PICSimLab.
En File configuramos el COM3, ya que es el puerto que configuramos anteriormente con el VSPD.
Volvemos a File y ahora seleccionamos Load Hex y cargamos el archivo firmware.hex de la carpeta
abierta anteriormente en el PlatformIO IDE.
Vamos a Módulos y seleccionamos Spare parts (repuestos), para simular el encendido de un led.
Para abrir el simulador de leds, vamos al menú Outputs y seleccionamos LEDs, luego le hacemos
clic normal en la parte superior izquierda del la pantalla en negro y aparecerá el simulador de leds.
Finalmente conectamos el primer led (Pin 1) al pin digital 13 del Arduino (19 PB5/13).
No olvidarse que para escribir en el puerto serial del Arduino (PICSimLab) debemos conectarnos al
COM4, para que el Arduino reciba la información.
La notación ‘b’ se usa para especificar una cadena de bytes en Python. En comparación con las
cadenas normales, que tienen caracteres ASCII, la cadena de bytes es una matriz de variables de
bytes donde cada elemento hexadecimal tiene un valor entre 0 y 255.
También podemos codificar cadenas regulares en cadenas de bytes con la función incorporada
encode( ). El programa siguiente nos muestra cómo codificar cadenas regulares en cadenas de bytes
con la función encode( ).
Codificamos la cadena regular Esta es una cadena en un formato de cadena de bytes con la función
encode ( ) en el código anterior. También podemos codificar una cadena en un formato de cadena de
bytes con la declaración b. El siguiente fragmento de código nos muestra cómo podemos hacer eso.
import serial as sr
uno = sr.Serial("COM4", 9600) #instanciamos la comunicación serial
while True:
dato = input("Ingrese letra: ")
dato = dato.lower()
if dato == "a":
uno.write(b"a")
elif dato == "b":
uno.write(b"b")
elif dato == "x":
uno.write(b"b")
uno.close() #cerramos la comunicación serial y la dejamos libre
break
else:
print("Letra incorrecta")
print("Programa finalizado")
uno.close()
Canvas
Canvas: es un objeto de tipo imagen para mostrar imágenes, el cual podemos usar como un lienzo y
colocar figuras sobre está.
Oval: es un objeto (elipse) que se genera dentro del canvas, La elipse se ajusta a un rectángulo
definido por las coordenadas (x0, y0) de la esquina superior izquierda y las coordenadas (x1, y1) de
un punto justo fuera de la esquina inferior derecha.
c = Canvas()
id = c.create_oval(x0, y0, x1, y1, option, ...)
#Programa en el python
import serial
arduino = serial.Serial("COM4", 9600) #instanciamos la comunicación serial
while True:
dato = input("Ingrese velocidad del motor (0-255): ")
if(dato.isdigit()):
if(int(dato)>=0 and int(dato)<=255):
arduino.write(dato.encode())
print(f"La velocidad del motor es: {dato}")
else:
print ("Rango de velocidad incorrecto")
elif dato == "x":
arduino.write(b"0")
arduino.close()
break
else:
print("La velocidad debe ser un número")
print("Programa finalizado")
Ejercicio 6 (Reto tecsup): Crear un programa utilizando el Tkinter, para el ejercicio anterior.
7. Conclusiones:
abc
8. Normas Generales:
1. Presentar como informe de laboratorio solo los entregables (Lo resaltado en amarillo).
2. Por cada captura de pantalla que se realice, se deberá comentar en no menos de 3 líneas
explicando la figura o procedimiento.
3. La presentación del informe se realiza por el Canvas, un día antes de que se cumpla la semana
de realizado el laboratorio (6 días), no se revisa por otro medio.
4. Se penalizará con puntos en contra las faltas de ortografía en la redacción del informe, la
presentación fuera del tiempo indicado, en especial la falta de orden.
5. Se evaluará con nota cero si el nombre de uno de los participantes no está incluido en el
informe, incluir a un alumno que no ha participado en la experiencia de laboratorio, el nombre del
profesor está mal escrito, la presentación del informe por otro medio que no sea el Canvas, o el
más mínimo intento de plagio.
6. Se dará una bonificación de un punto a aquel alumno que publique en el foro de consultas,
alguna información relevante del tema tratado en la semana o encuentre alguna falla de
redacción u ortografía en las presentaciones y guías de laboratorio, así como de algún error en el
Canvas.
7. Pasada una semana de la publicación de la nota en el SEVA, se dará por entendido la
conformidad del alumno con su nota, es responsabilidad del alumno la verificación de la
conformidad de su nota, en caso de algún reclamo pasada la semana, ya no será tomada en
cuenta.
9. Bibliografía
1. Desarrollo inicial: Charles Severance, Facultad de Información de la Universidad de Michigan
2. Charles R. Severance (2020). Python para todos “Explorando la información con Python 3”
Estados Unidos: Copyright ~2009- Charles Severance.