Está en la página 1de 9

INGENIERÍA ELECTRÓNICA - FACULTAD DE INGENIERÍA ELECTRICA Y ELECTRÓNICA - UNI 1

Laboratorio N°1 Robótica Industrial


Repaso MatLab
20194056A Gutierrez Chiara, Gengis Rafael
20190287I Salcedo Peña, Alexander
20124517J Alvarez Marroquı́n, Harold Omar

Index Terms—MATLAB, Gráfica de funciones, App De- a) Gráfica de funciones 2D en coordenadas rectan-
signer. gulares:
Las coordenadas cartesianas o coordenadas rect-
I. R ESUMEN T E ÓRICO angulares (sistema cartesiano) son un tipo de
coordenadas ortogonales usadas en espacios
MATLAB es una plataforma de programación diseñado euclı́deos, para la representación gráfica de una
especı́ficamente para los ingenieros y cientı́ficos, para relación matemática. En la Figura 1 se muestra
analizar y diseñar sistemas y productos que transforman la gráfica de sin(x).
nuestro mundo. MATLAB es un lenguaje basado en matrices
que permite la expresión más natural de las matemáticas
computacionales. Es el entorno informático más fácil y
productivo para ingenieros y cientı́ficos. Con matemáticas,
gráficos y programación, está diseñado para su forma de
pensar y el trabajo que realiza.

II. M ATERIALES
• Software MATLAB
• Esp32
• Sensor de humedad y temperatura
• Laptop
• 6 led
• 6 resistencias de 330 Ohms
• jumpers
• 1 button Figura 1: Sin(x) - 2D

III. O BJETIVOS Presentamos otro ejemplo de gráfica 2D en la


Figura 2 con ecuación x3 + x2 + 8
• Reconocer las herramientas de MATLAB para la
gráfica de funciones.
• Graficar funciones en distintos sistemas de coordenadas
• Realizar una guide en MATLAB
• Enviar un correo electrónico desde el software MAT-
LAB
• Enviar un sms desde el software MATLAB
• Cuantificar los datos de mediciones de temperatura y
humedad mediante un código en MATLAB (software),
las mediciones son emitidas por un sensor implemen-
tado en un hardware (hardware).

IV. C UESTIONARIO D ESARROLLADO


1) Graficar funciones usando App Designer de MAT-
LAB:
App Designer permite crear apps profesionales aunque
no sea un desarrollador de software profesional. Se Figura 2: x3 + x2 + 8 - 2D
arrastra y colocan los componentes visuales para crear
b) Gráfica de funciones 2D en coordenadas polares:
el diseño de la interfaz gráfica de usuario (GUI) y se
Otro sistema de coordenadas muy útil, conocido
usa el editor integrado para programar rápidamente su
como coordenadas polares, describe un punto en
comportamiento.
el espacio como un ángulo de rotación alrededor
Desarrollo:
del origen y un radio desde el origen.En la Figura
3 se muestra la gráfica de 2cos(3θ)
INGENIERÍA ELECTRÓNICA - FACULTAD DE INGENIERÍA ELECTRICA Y ELECTRÓNICA - UNI 2

2) Enviar correo electrónico o SMS desde el software


MATLAB:
Software:
Para el diseño de la interfaz gráfica hemos usado
App Designer que nos permite implementar la interfaz
arrastrando los elementos que queremos que la con-
formen. Para nuestra interfaz utilizamos el siguiente
diseño:

Figura 3: 2cos(3θ) - 2D

c) Gráfica de funciones 3D en coordenadas rectan-


gulares:
El sistema de coordenadas rectangulares tridi-
mensionales consta de tres ejes perpendiculares:
el eje x, el eje y y el eje z. Como cada eje es una
lı́nea numérica que representa todos los números
reales en R, el sistema tridimensional se suele Figura 6: Interfaz gráfica
denotar como R3. En la Figura 4 se muestra la
gráfica de ysin(x) − xcos(y) Pasaremos a explicar cada una de las opciones de la
interfaz gráfica de la figura 6:
• Tı́tulo: ANÁLISIS DE SENSORES.
• Indique el email para el control de estado: En este
espacio va el email al cual va a llegar el correo
eléctrónico desde MATLAB.
• Iniciar monitoreo: Esta opción inicia la monitor-
ización de los sensores de humedad y temper-
atura.
• Sensor de Temperatura: Representa el estado de
la temperatura.
• Temperatura: Se obtiene el valor que cuantifica la
temperatura del sensor.
• Sensor de Humedad: Representa el estado de la
humedad.
• Humedad: Se obtiene el valor que cuantifica la
humedad del sensor.
• Status: Indicador visual que representa el estado
Figura 4: ysin(x) − xcos(y) - 3D
del sensor.
• Leyenda: Representa los tres valores que puede
Presentamos otro ejemplo de gráfica 3D en la
tomar el Status. Verde, estable; rojo, crı́tico; amar-
Figura 5 con ecuación ysin(x) + xsin(y)
illo, advertencia.
• Enviar correo: Esta opción envı́a un mensaje a
la dirección de correo electrónico configurada
indicando el status del sensor.
Para configurar el comportamiento de la App De-
signer, se usa el editor integrado. El código pro-
gramado se encarga de monitorear la temperatura y
humedad de un sensor y enviar un correo electrónico
con un mensaje dependiendo del estado del sensor.
La aplicación cuenta con dos pestañas: ”Monitoring” y
”Help”. En la pestaña ”Monitoring”, se encuentra una
interfaz gráfica de usuario que muestra la temperatura
y humedad del sensor en tiempo real, y un botón
para enviar un correo electrónico. La aplicación utiliza
un algoritmo de verificación que cambia el color del
indicador de estado de temperatura en función del
Figura 5: ysin(x) + xsin(y) - 3D valor de la temperatura.
INGENIERÍA ELECTRÓNICA - FACULTAD DE INGENIERÍA ELECTRICA Y ELECTRÓNICA - UNI 3

La pestaña ”Help” contiene información sobre los de la interfaz de usuario, como ”Panel”, ”Label”, ”Nu-
desarrolladores del código y una imagen. mericEditField”, ”Lamp” y ”Button”. Cada propiedad
El código hace uso de una clase llamada ”Labora- tiene un nombre descriptivo que indica su función
torio1 final” que se encarga de manejar todos los en la interfaz de usuario, como ”FuncionAnalg-
componentes de la interfaz gráfica de usuario. La clase icaPanel”, ”EscribasufuncinfxLabel”, ”temperatura”,
tiene tres propiedades públicas, que son la figura de ”statusTemp” y ”btnSendEmail”. Estos componentes
la interfaz gráfica de usuario y dos objetos de panel. se utilizan para mostrar información, permitir la en-
La clase también tiene tres métodos privados que trada de datos del usuario y responder a las acciones
manejan las funciones de verificación, enviar correo del usuario.
electrónico y cambio en el valor de correo electrónico. Algunas propiedades como ”email” y ”humedad” son
El método ”VerifyButton” cambia el color del in- de tipo ”EditField” y ”NumericEditField” respectiva-
dicador de estado de temperatura en función del mente, lo que significa que se pueden ingresar datos
valor de la temperatura. El método ”SendEmail” se en ellas mediante el teclado.
encarga de enviar un correo electrónico con el mensaje
correcto en función del estado del sensor. El método
”emailValueChanged” se ejecuta cada vez que el valor
del campo de correo electrónico cambia y se encarga
de leer los datos del sensor.
A continuación, se presenta detalladamente el código
programado en el editor integrado de App Designer:

Este código es el inicio de la definición de una clase


en MATLAB, utilizando el comando ”classdef”. En
particular, esta clase se llama ”Laboratorio1 final”
y es una subclase de ”matlab.apps.AppBase”. Esto
significa que ”Laboratorio1 final” hereda propiedades
y métodos de la clase ”matlabȧppsȦppBase”.

Este código contiene los callbacks, que son funciones


que se ejecutan cuando ocurre un evento especı́fico
en una aplicación MATLAB. Estos eventos pueden
ser acciones del usuario, como hacer clic en un botón
o cambiar el valor de un campo de entrada. En este
caso, hay tres callbacks privados:
• El método ”VerifyButton” es un callback que
se ejecuta cuando el usuario presiona el botón
”Verificar”. Su función es verificar el valor de la
temperatura medida por el sensor y actualizar el
color del indicador de estado (Lamp) correspon-
diente en función de los umbrales de temperatura
establecidos. Si la temperatura es menor que 30.1
grados, el color del indicador se establece en
verde, si está entre 30.1 y 30.5 grados, el color se
establece en amarillo y si es mayor o igual a 30.5
grados, el color se establece en rojo. El valor de la
temperatura se obtiene a través del objeto ”app”
Este código define las propiedades públicas de una y el método ”Value” del campo ”temperatura”.
clase de MATLAB. Estas propiedades son accesibles • El método ”SendEmail” se ejecuta cuando el
desde fuera de la clase y pueden ser utilizadas para usuario hace clic en el botón ”btnSendEmail”.
almacenar y manipular datos relevantes para la apli- Esta función llama a la función VerifyButton y
cación. luego obtiene la dirección de correo electrónico
La propiedad ”UIFigure” es de tipo ”matlab.ui.Figure” ingresada por el usuario y un mensaje de adver-
y representa la figura principal de la interfaz de tencia basado en el color de la lámpara de estado
usuario de la aplicación. La propiedad ”TabGroup” es de la temperatura. Luego, utiliza una solicitud
de tipo ”matlab.ui.container.TabGroup” y representa el web para enviar un correo electrónico a la di-
grupo de pestañas en la interfaz de usuario. rección ingresada con el mensaje generado.
Las siguientes propiedades son componentes gráficos La función ”SendMail”, escrita en MATLAB uti-
INGENIERÍA ELECTRÓNICA - FACULTAD DE INGENIERÍA ELECTRICA Y ELECTRÓNICA - UNI 4

liza las siguiente funciones: bloque catch.


– VerifyButton: Verifica si se ha ingresado una – disp(ME.message): muestra el mensaje de la
dirección de correo electrónico válida y activa excepción en la ventana de comandos.
el botón de envı́o de correo electrónico si es – attempts = attempts + 1;: incrementa la variable
ası́. de recuento de intentos.
– Value: Una función utilizada para obtener el
valor actual del objeto UIcontrol.
– webread: Una función que envı́a una solicitud
HTTP GET a una URL y devuelve el contenido
de la respuesta como una matriz de bytes.
– correo = app.email.Value: Obtiene el valor del
campo email de la interfaz gráfica de usuario
(GUI) y lo asigna a la variable correo.
– if app.statusTemp.Color == [0 1 0]...: Verifica
el color del indicador de temperatura y es-
tablece el mensaje correspondiente.
– parametros =
’correo’,correo,’mensaje’,mensaje: Crea una
celda de parámetros con el correo electrónico
y el mensaje a enviar.
– url = [’https://correo-
production.up.railway.app/enviarcorreo’]:
Establece la URL a la que se enviará la
información.
• El método ”emailValueChanged” utiliza un objeto
Monitoring para leer los datos del puerto serie
y asignar los valores de temperatura y humedad
a las propiedades de ese objeto. Si se produce
un error al leer los datos, el método muestra un
mensaje de error en la ventana de comandos y
continúa intentando leer los datos hasta que tenga
éxito.
– app: es un objeto que contiene todas las
propiedades y métodos definidos en la apli-
cación GUI, incluyendo el campo de entrada
email y cualquier otro componente con el que
se haya vinculado este método de devolución
de llamada.
– event: es un objeto que representa el evento
que activó el callback, en este caso, el evento
ValueChanged del campo de entrada email.
– global objeto port attempts: esta lı́nea define
tres variables globales que se utilizan en todo
el archivo de código.
– objeto = Monitoring: crea un objeto Monitor-
ing, que se utiliza para leer los datos del puerto
serie.
– attempts = 1: inicializa una variable de re-
cuento de intentos.
– while true: crea un bucle infinito.
– try: intenta ejecutar el código dentro del bloque
try.
– [objeto.temperatura, objeto.humedad] = read-
SerialData(objeto, port): llama al método read-
SerialData para leer los datos del puerto serie
y asigna los valores de temperatura y humedad
a las propiedades temperatura y humedad del
objeto objeto.
– break: rompe el bucle while si el código dentro
del bloque try se ejecuta correctamente.
– catch ME: si se produce una excepción en el
bloque try, captura el objeto ME que representa
la excepción y ejecuta el código dentro del
INGENIERÍA ELECTRÓNICA - FACULTAD DE INGENIERÍA ELECTRICA Y ELECTRÓNICA - UNI 5

Este código en Matlab se refiere a la creación y


eliminación de una aplicación de interfaz de usuario
utilizando la herramienta de diseño de interfaz de
usuario de Matlab.
En el método público ”Laboratorio1 final”, se crea
una instancia de la aplicación y se llaman a las
funciones ”createComponents” y ”registerApp” para
crear los componentes de la interfaz de usuario y
registrar la aplicación con el diseñador de aplicaciones
de Matlab.
Luego, se verifica si se está solicitando el valor de
retorno (output argument) de la función utilizando
la variable ”nargout”. Si el valor de retorno es cero,
es decir, si la aplicación no devuelve ningún valor,
se elimina la instancia de la aplicación utilizando la
función ”clear app”.
El segundo método público ”delete” se ejecuta cuando
se elimina la aplicación y se encarga de eliminar
la ventana principal de la aplicación ”UIFigure”
utilizando la función ”delete”.

• ”methods (Access = public)”: Este código define


que los métodos definidos en esta sección de la
clase (Laboratorio1 final) son accesibles desde
fuera de la clase.
• ”function app = Laboratorio1 final”: Este es el
constructor de la clase Laboratorio1 final, que
se ejecuta cuando se crea una nueva instancia
de la aplicación. En este método, se crean los
componentes de la interfaz de usuario utilizando
la función ”createComponents” y se registra la
aplicación utilizando la función ”registerApp”. Si
no se espera un valor de salida (nargout==0), se
elimina la instancia de la aplicación utilizando la
función ”clear app”.
• ”function delete(app)”: Este método se ejecuta
cuando se elimina la instancia de la aplicación
y se encarga de eliminar la ventana principal
de la aplicación ”UIFigure” utilizando la función
”delete”.
• ”createComponents(app)”: Este es un método pri-
vado que se encarga de crear todos los com-
Este código en Matlab mostrado anteriormente, ponentes de la interfaz de usuario, incluyendo
se refiere a la inicialización de componentes para la ventana principal (”UIFigure”), el grupo de
una aplicación gráfica de usuario (GUI) utilizando pestañas (”TabGroup”) y cualquier otro elemento
la herramienta de diseño de interfaz de usuario de que se necesite.
• ”registerApp(app, UIFigure)”: Este es un método
Matlab. Esto quiere decir, que el la función del código
es nombrar, acomodar, etc. las diferentes opciones en privado que se encarga de registrar la aplicación
nuestras interfaces ”Monitoring” y ”Help”. con el diseñador de aplicaciones de Matlab, lo
que permite utilizar las herramientas de diseño
de interfaz de usuario.
Hardware:
Para la implementación del hardware, se empleó el
siguiente circuito cuyos componentes son detallados
en el apartado de II. Materiales:
INGENIERÍA ELECTRÓNICA - FACULTAD DE INGENIERÍA ELECTRICA Y ELECTRÓNICA - UNI 6

Este código de configuración de Arduino establece


el estado inicial de los pines que se utilizarán para
interactuar con el sensor DHT11, los LEDs y el botón.
• La lı́nea dht.begin() inicializa el sensor DHT11.
• Las lı́neas pinMode(verdeT, OUTPUT),
pinMode(rojoT, OUTPUT), pinMode(naranjaT,
OUTPUT), pinMode(verdeH, OUTPUT),
pinMode(rojoH, OUTPUT) y pinMode(naranjaH,
OUTPUT) establecen los pines de los LEDs
como salidas.
• La lı́nea pinMode(button, INPUT) establece el pin
del botón como entrada.
• La lı́nea delay(100) hace una pausa de 100 milise-
gundos antes de continuar con la siguiente lı́nea.
• La lı́nea Serial.begin(115200) inicializa la co-
municación serial con una velocidad de 115200
baudios. Esta configuración permitirá al Arduino
interactuar con los componentes conectados y
Figura 7: Implementación de circuito recibir información del sensor DHT11.

Ya que se usó como microcontrolador un esp32, la


programación fue realizada en el IDE Arduino. A
continuación, detallaremos el código utilizado: Este

código de Arduino utiliza la librerı́a DHT para interac-


tuar con un sensor de humedad y temperatura DHT11
conectado al pin digital 15 del Arduino. Además,
utiliza varios LED conectados a diferentes pines del
Arduino para notificar sobre la emisión de mensajes.
• La lı́nea #include <DHT.h> importa la librerı́a
DHT necesaria para interactuar con el sensor.
• Los #define establecen constantes para los pines
que se utilizarán para los LEDs y el botón.
• La lı́nea DHT dht(15, DHT11); inicializa un ob-
jeto dht que se utilizará para leer datos del sensor
DHT11 conectado al pin 15 del Arduino.
INGENIERÍA ELECTRÓNICA - FACULTAD DE INGENIERÍA ELECTRICA Y ELECTRÓNICA - UNI 7

Este código de bucle de Arduino lee continuamente


la temperatura y la humedad del sensor DHT11 y es-
tablece el estado de los LEDs en función de los valores
leı́dos. También envı́a los valores de temperatura y
humedad a través de la comunicación serial.
• Las lı́neas float t = dht.readTemperature() y float
h = dht.readHumidity() leen la temperatura y la
humedad del sensor DHT11 y las almacenan en
las variables t y h, respectivamente.
• El bucle while(isnan(t) || isnan(h)) comprueba
si los valores leı́dos son erróneos o ”No es un
número” (NaN) y, en caso afirmativo, repite la
lectura. Figura 10: Leds
• Las siguientes secciones del código establecen
el estado de los LEDs en función de los val-
ores leı́dos de temperatura y humedad, utilizando
declaraciones if y else if.
• Las lı́neas Serial.print envı́an los valores de tem-
peratura y humedad a través de la comunicación
serial.
• La lı́nea delay(500) hace una pausa de 500 milise-
gundos antes de reiniciar el bucle.
Los componentes más importantes de nuestro circuito
son los siguientes:

Figura 11: Button

Unión Software-Hardware:
Para unir el Software y el Hardware, se empleó el
siguiente código:

Figura 8: Microcontrolador ESP32

Figura 9: Sensor de temperatura y humedad DHT11


INGENIERÍA ELECTRÓNICA - FACULTAD DE INGENIERÍA ELECTRICA Y ELECTRÓNICA - UNI 8

Este código define una clase llamada ”Monitoring”


que tiene cuatro propiedades: ”variable”, ”puerto”,
”temperatura” y ”humedad”. La clase también tiene
dos métodos: ”startPortRead” y ”readSerialData”.
El método ”startPortRead” utiliza la función serialport
para abrir un puerto serie en la computadora con el
nombre ”COM5” y la velocidad de transmisión de
115200 bits por segundo. Esta función devuelve el
objeto de puerto serie que se guarda en la propiedad
”puerto” de la clase.
El método ”readSerialData” recibe un objeto de
puerto serie y utiliza un bucle while infinito para
leer continuamente los datos disponibles en el puerto
serie. Cuando se detectan datos nuevos, se lee
una lı́nea y se extrae la temperatura y la humedad
de los datos utilizando la función extractBetween
y se convierten de cadenas a números flotantes
utilizando str2double. Estos valores se almacenan
en las propiedades ”temperatura” y ”humedad” de
la clase. Además, los valores de temperatura y
humedad se muestran en la pantalla utilizando la
función disp.Este método también utiliza la función
tic-toc para contar el tiempo de ejecución y, si ha
pasado más de 3 segundos desde la última vez que se
reinició el temporizador, se reinicia el temporizador
utilizando la función tic.
En resumen, esta clase de MATLAB proporciona
métodos para inicializar y leer continuamente los
datos recibidos de un puerto serie, extrayendo los
valores de temperatura y humedad de los mensajes
recibidos y almacenándolos en variables globales.

V. R ESULTADOS

Una vez implementado todo lo sustentado anterior-


mente, obtenemos los siguientes resultados:

Figura 13: SMS enviado desde MATLAB

Figura 14: Correo electrónico enviado desde MATLAB

VI. C ONCLUSIONES

i) La comunicación serial permite la flexibilidad en


la elección del hardware de comunicación, como
Figura 12: SMS enviado desde MATLAB
el uso de cables USB o inalámbricos, adaptadores,
módulos de comunicación serial, etc. Permitiéndonos
INGENIERÍA ELECTRÓNICA - FACULTAD DE INGENIERÍA ELECTRICA Y ELECTRÓNICA - UNI 9

adaptar la solución de comunicación a las necesidades


especı́ficas del proyecto.

ii) También permite la transferencia rápida de datos


entre MATLAB y microcontroladores como arduino y
en este caso el ESP32. Esto es realmente útil cuando
se necesitan transmitir datos en tiempo real, como en
aplicaciones de control en tiempo real o adquisición
de datos en tiempo real.

iii) La herramienta App Designer nos facilita el


diseño de interfaces gráficas que incluso podrian ser
utilizadas en la industria, ya sea control y/o monitoreo.

iv) La comunicación serial también nos permite


la transferencia bidireccional de datos, por lo que
MATLAB y Arduino pueden enviarse comandos y
datos entre sı́. Esto permite una interacción más
dinámica en la implementación de aplicaciones
complejas que requieren una comunicación
bidireccional.

R EFERENCIAS
[1] Métodos numéricos – Teorı́a, problemas y prácticas con
MATLAB. Infante del Rı́o J-A. Rey Cabezas J. M. 2da
Edición - Pirámide. 2002.

[2] Matlab y sus aplicaciones en las Ciencias y la Ingenierı́a.


Cesar Pérez. Prentice Hall, Madrid, 2002.

[3] MATLAB documentation (2021). Disponible en:


https://www.mathworks.com/help/matlab/

[4] Pratap, R. (2018). Primeros pasos con MATLAB: una


introducción rápida para cientı́ficos e ingenieros. Oxford
University Press.

[5] Monk, S. (2018). Programando Arduino: Comenzando con


bocetos. McGraw Hill Professional.

[6] Arduino documentation (2021). Disponible en:


https://www.arduino.cc/reference/en/

[7] MathWorks. (2021). App Designer Documentation.


Disponible en: https://www.mathworks.com/help/matlab/app-
designer.html

[8] Karris, S. T. (2019). MATLAB App Designer: una introducción


práctica al diseño de interfaz gráfica de usuario (GUI) con
MATLAB. Orchard Publications.

También podría gustarte