Descarga la aplicación para disfrutar aún más
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
Compartir