Logo Studenta

Practica 9 Prog Av

¡Estudia con miles de materiales!

Vista previa del material en texto

INSTITUTO TECNOLÓGICO DE LA LAGUNA 
Práctica 9 
 
 
 
 
 
PROGRAMACIÓN AVANZADA 
Ingeniería Mecatrónica Semestre 8 
Alumno(s): Christian Enrique González Robles No. Control: 19131206 
 
2 
 
 
INSTITUTO TECNOLÓGICO DE LA LAGUNA 
Programa 1 
Realizar un programa en Windows form, visual studio, que permita por medio de dos botones 
dentro de la interfaz poder encender y apagar un Led por medio de comunicación serial con una 
tarjeta de desarrollo Arduino. 
Diseño de la GUI 
 
 
 
 
 
 
 
Script 
Primero, se declara una variable llamada Arduino 
que representa el puerto serie. Luego, en Form1, se 
configuran las propiedades del SerialPort. Se 
especifica que se va a utilizar el puerto COM6 y se 
establece la velocidad de transmisión en 9600 
baudios. Además, se abre el puerto para iniciar la 
comunicación. En el evento Form1 FormClosing, se 
verifica si el puerto Arduino está abierto y, en caso 
afirmativo, se cierra antes de cerrar el formulario. En 
el evento button1 Click, cuando se hace clic en el 
botón Encender, se envía el carácter "E" al Arduino 
utilizando el método Write del SerialPort. En el 
evento button2 Click, cuando se hace clic en el 
botón apagar, se envía el carácter "F" al Arduino 
utilizando el método Write del SerialPort. 
 
Se inicia la comunicación serial con una velocidad de 9600 
baudios mediante Serial.begin(9600). Además, se configura el pin 
13 como PIN_LED como una salida, lo que significa que se 
utilizará para controlar el LED. 
En la función loop, Se verifica si hay datos disponibles en el 
puerto serial a través de Serial.available. Si hay datos disponibles, 
se lee el carácter recibido mediante Serial.read y se almacena en la 
variable LeerCaracter. 
 
3 
 
 
INSTITUTO TECNOLÓGICO DE LA LAGUNA 
A continuación, se realiza una verificación condicional para determinar qué acción tomar en base al 
carácter recibido. Si el carácter es 'E', se activa el pin PIN_LED mediante digitalWrite(PIN_LED, 
HIGH), encendiendo el LED. Si el carácter es 'F', se desactiva el pin PIN_LED mediante 
digitalWrite(PIN_LED, LOW), apagando el LED. 
GUI funcional 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4 
 
 
INSTITUTO TECNOLÓGICO DE LA LAGUNA 
Programa 2 
Genere una GUI con un textbox que permita que por medio de la conexión a Arduino, se genere un 
mensaje con un conteo, solamente a partir de la conexión física del Arduino a la computadora y la 
inicialización de la GUI. 
Diseño de la GUI 
 
 
 
 
 
 
 
 
 
Script 
se inicializa una instancia de SerialPort llamada Port. Se 
configuran propiedades como el nombre del puerto 
PortName como "COM5", la velocidad de transmisión 
BaudRate como 9600 baudios y el tiempo de espera para la 
lectura ReadTimeout como 500 milisegundos. 
En el evento Form1_Load, que se ejecuta cuando el 
formulario se carga, se crea un hilo Thread llamado Hilo 
para escuchar los datos entrantes del puerto serial. Este hilo 
llama a un método llamado EscucharSerial. 
 
El método 
EscucharSerial se ejecuta en un bucle mientras la 
variable IsClosed sea falsa. Dentro del bucle, se 
intenta leer una línea de datos del puerto serial 
mediante Port.ReadLine. Luego, se actualiza el 
contenido de un TextBox (textBox1) con la cadena 
leída utilizando Invoke para asegurar que se 
actualice desde el hilo principal. En el evento 
Form1_FormClosed, que se dispara cuando el 
formulario se cierra, se establece la variable 
IsClosed como verdadera para salir del bucle en 
EscucharSerial. Además, si el puerto Port está abierto, se cierra. 
En este código de Arduino, se realiza un conteo ascendente y se envía el número a través del puerto 
serial. En la función setup, que se ejecuta una vez al iniciar el dispositivo, se realiza la 
configuración inicial. Se inicia la comunicación serial con una velocidad de 9600 baudios mediante 
Serial.begin(9600). Además, se inicializa una variable llamada num con el valor inicial de 0. 
 
5 
 
 
INSTITUTO TECNOLÓGICO DE LA LAGUNA 
En la función loop, que se ejecuta continuamente en un ciclo, se lleva a cabo el código principal. El 
valor de num se incrementa en 1 mediante num = num + 1. Luego, se envía el número a través del 
puerto serial utilizando Serial.print y Serial.println. El número se envía como una cadena precedida 
por el texto "Número: ". Después de enviar el número, se hace una pausa de 1 segundo utilizando 
delay(1000). En resumen, este código de Arduino realiza un conteo ascendente y envía el número a 
través del puerto serial. 
GUI funcional 
 
 
 
 
 
 
 
 
 
 
 
 
Programa 3 
Diseñe un programa en Visual studio, Windows forms que por medio de comunicación serial con 
Arduino, permita controlar la velocidad de un motor de CD con PWM y su sentido de giro. 
Diseño de la GUI 
 
 
 
 
 
 
6 
 
 
INSTITUTO TECNOLÓGICO DE LA LAGUNA 
Script 
En este código se establece una comunicación serial con 
un Arduino para controlar un motor de CD. La interfaz 
gráfica tiene botones y controles deslizantes para controlar 
el sentido de giro y la velocidad del motor. 
En el evento button1 Click, que se activa al hacer clic en 
el primer botón, se envía una señal al Arduino a través del 
puerto serial para que el motor se detenga. Luego, se cierra 
el puerto serial. 
En el evento button2 Click, que se activa al hacer clic en 
el segundo botón, se envía una señal al Arduino para 
establecer el sentido de giro del motor hacia la derecha y 
la velocidad. La dirección de giro se envía como "1" y el 
valor actual del control deslizante trackBar1 (que controla 
la velocidad) se envía a través del puerto serial. 
Finalmente, se cierra el puerto serial. 
En el evento button3 Click, que se activa al hacer clic en 
el tercer botón, se envía una señal al Arduino para cambiar 
el sentido de giro hacia la izquierda del motor y se ajusta 
la velocidad utilizando el valor actual del control 
deslizante trackBar1. Luego, se cierra el puerto serial. 
El evento trackBar1 Scroll se activa cuando el usuario 
ajusta el control deslizante trackBar1. En este evento, se 
actualiza el texto del control deslizante con el valor actual. 
Luego, se envía el valor actual a través del puerto 
serial para ajustar la velocidad del motor. Finalmente, 
se cierra el puerto serial. 
En el evento Form1 Load, que se ejecuta cuando se 
carga el formulario, se llena un ComboBox 
(comboBox1) con los nombres de los puertos serial 
disponibles. Se selecciona el primer puerto de la lista 
y se establece la velocidad de transmisión en 9600 
baudios. 
 
 
En el evento comboBox1 SelectedIndexChanged, que 
se activa cuando se selecciona un puerto en el 
ComboBox, se actualiza el puerto serial serialPort1 con 
el nombre del puerto seleccionado. Este código de 
Windows Forms establece una comunicación serial con 
un Arduino para controlar el sentido de giro y la 
velocidad de un motor de CD mediante señales PWM. 
 
7 
 
 
INSTITUTO TECNOLÓGICO DE LA LAGUNA 
Los botones y controles deslizantes en la interfaz gráfica permiten enviar 
comandos al Arduino a través del puerto serial para controlar el motor de 
manera interactiva. 
En este código de Arduino, se establece la comunicación serial y se 
utiliza PWM para controlar un motor de CD. El objetivo es permitir el 
control del sentido de giro y la velocidad del motor desde un programa 
externo. La variable velocidad se utiliza para almacenar la velocidad del 
motor, mientras que ma y mb representan los pines de salida conectados 
al motor. 
En el método setup, se configuran los pines ma y mb como salidas 
digitales y se inicializa la comunicación serial a una velocidad de 9600 
baudios. En el método loop, no hay código específico en este momento. 
Aquí puedes agregar el código que deseas que se ejecute repetidamente. 
El método serialEvent se ejecuta cuando hay datos disponibles en el 
puerto serial. Aquí seespera recibir un número entero que representa la 
velocidad del motor. 
Utilizando Serial.parseInt, se lee el número entero de la comunicación serial 
y se almacena en la variable velocidad. A continuación, se realizan 
comprobaciones utilizando if para determinar la acción a tomar en función 
del valor de velocidad. Si velocidad es igual a 1, se establece el sentido de 
giro como horario mediante las variables derecha e izquierda. Si velocidad 
es igual a 2, se apagan los pines ma y mb, deteniendo el motor. 
Si velocidad es igual a 3, se establece el sentido de giro como antihorario 
mediante las variables derecha e izquierda. Luego, se utilizan las variables 
derecha e izquierda para controlar el motor en el sentido deseado. Si derecha 
es true e izquierda es false, se ajusta el pin ma en bajo (LOW) y se aplica 
una señal PWM a través del pin mb para controlar la velocidad del motor en 
el sentido horario. Si derecha es false e izquierda es true, se ajusta el pin mb 
en bajo (LOW) y se aplica una señal PWM a través del pin ma para controlar 
la velocidad del motor en el sentido antihorario. 
GUI funcional 
 
 
 
 
 
 
 
 
 
8 
 
 
INSTITUTO TECNOLÓGICO DE LA LAGUNA 
Programa 4 
Genere una GUI en visual studio, Windows forms que permita por medio de una conexión a 
Arduino, interpretar la salida de un sensor de temperatura para mostrarla en un label en la GUI, 
como si de un termómetro digital se tratara. 
Diseño de la GUI 
 
 
 
 
 
 
 
 
 
Script 
En este código, se configura y utiliza el 
control SerialPort para establecer la 
comunicación con un Arduino y recibir 
datos de temperatura desde un sensor. En 
el método Form1 Load, se crea una 
instancia de SerialPort llamada miSerial y 
se configuran los parámetros del puerto, 
como el nombre del puerto (COM5), la 
velocidad de transmisión (9600 baudios), 
el número de bits de datos (8), y se 
habilitan las señales RTS (Ready to Send) 
y DTR (Data Terminal Ready). 
Después, se llama al evento DataReceived del SerialPort para manejar la recepción de datos. 
Cuando se recibe un evento de datos, se ejecutará el método MiSerial DataReceived. En el método 
MiSerial DataReceived, se recupera el objeto SerialPort del evento sender y se lee una línea de 
datos del puerto serial. En este caso, se espera que la línea de datos contenga el valor de temperatura 
del sensor conectado al Arduino. Luego, se verifica si es necesario realizar una invocación a través 
de la propiedad InvokeRequired del control label1 para garantizar que la actualización de la interfaz 
gráfica se realice en el hilo principal. Si es necesario, se invoca el método Invoke y se actualiza el 
texto del control label1 con el valor de temperatura recibido. 
Primero, declaramos la variable tempC de tipo float para almacenar el valor de temperatura del 
sensor. Esta variable guardará el valor obtenido de la lectura analógica del sensor LM35. 
Luego, definimos la variable pinLM35 y le asignamos el valor del pin de entrada del sensor LM35. 
En este caso, se utiliza el pin analógico A0. Dentro de la función setup, configuramos la 
comunicación serial a una velocidad de transmisión de 9600 baudios mediante Serial.begin(9600). 
En la función loop, se ejecutan las siguientes acciones de manera repetitiva: 
 
9 
 
 
INSTITUTO TECNOLÓGICO DE LA LAGUNA 
Leemos el valor analógico del pin pinLM35 y lo 
almacenamos en la variable tempC utilizando tempC = 
analogRead(pinLM35). Esta lectura nos proporciona un 
valor en el rango de 0 a 1023, que representa la lectura 
analógica del sensor. A continuación, realizamos los 
cálculos necesarios para convertir la lectura analógica a 
grados Celsius: Volvemos a leer el valor analógico del pin 
pinLM35 y lo guardamos en la variable value mediante int 
value = analogRead(pinLM35). 
Utilizamos la fórmula (value / 1023.0) * 5000 para 
calcular el voltaje en milivoltios (mV) correspondiente a la 
lectura analógica. Dividimos value entre 1023.0 (el valor 
máximo de la lectura analógica) y luego multiplicamos por 
5000 (la referencia de voltaje utilizada, que es 5V). 
A continuación, dividimos el voltaje en milivoltios entre 10 para obtener la temperatura en grados 
Celsius. Guardamos este valor en la variable celsius mediante float celsius = milivolts / 10. 
Finalmente, enviamos el valor de temperatura en grados Celsius a través de la comunicación serial 
utilizando Serial.print(celsius) y Serial.println(" C"). Esto muestra el valor de temperatura en la 
consola serial, seguido de la unidad de medida "C" para Celsius. Además, incluimos un retardo de 1 
segundo utilizando delay(1000) antes de repetir el bucle para evitar una lectura continua y permitir 
un intervalo de tiempo adecuado entre las mediciones. 
GUI funcional

Continuar navegando