Tabla de contenido:
- Paso 1: Piezas y materiales
- Paso 2: Paquete de soporte MATLAB Arduino
- Paso 3: uso de sensores de datos adquiridos desde un dispositivo móvil
- Paso 4: el código y los puertos de cableado
Video: Microcontrolador controlado MATLAB (Arduino MKR1000): 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
El objetivo de nuestro proyecto era utilizar MATLAB y Arduino MKR1000 lo mejor que pudiéramos. Nuestro objetivo era crear un script que permitiera que ciertas características del arduino realizaran una determinada salida basada en una entrada específica. Usamos muchos bucles y declaraciones condicionales incluidas en MATLAB que hicieron esto posible. También utilizamos MATLAB mobile mediante el uso de datos adquiridos del giroscopio de un dispositivo móvil para mejorar el proyecto tanto como fuera posible.
Paso 1: Piezas y materiales
MATLAB 2018a
-La versión 2018 de MATLAB es la versión más preferida, principalmente porque funciona mejor con el código que se conecta al dispositivo móvil. Sin embargo, la mayoría de las versiones de MATLAB pueden interpretar la mayor parte de nuestro código.
Arduino MKR1000
-Este es un dispositivo específico que nos permite cablear circuitos hasta puertos digitales y análogos. Es vital que también tenga una placa de pruebas que lo acompañe.
Accesorios
-Al usar el MKR1000, necesitábamos piezas accesorias para realizar las funciones necesarias.
Esto incluye
- Servo
- Botón (6)
- Luz LED RBG intercambiable
- Alambres simples
- tablero (s)
- mini interruptor de encendido
- sensor de temperatura
- Resistencia de 330 ohmios
- Resistencia de 10K ohmios
- Cable USB-microUSB
- Computadora portátil / escritorio
- Dispositivo móvil
También debe tenerse en cuenta que hay muchos, muchos más accesorios que se pueden usar con el MKR1000.
Paso 2: Paquete de soporte MATLAB Arduino
Para utilizar correctamente el Arduino MKR1000 a través de MATLAB, debe descargar el paquete de soporte de MATLAB para hardware Arduino. Esta descarga le da acceso a ciertas funciones y comandos directamente a la placa arduino.
Puede descargar el paquete en el enlace de abajo
www.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware
Paso 3: uso de sensores de datos adquiridos desde un dispositivo móvil
La aplicación MATLAB Mobile nos permite usar un dispositivo móvil para transmitir datos usando su giroscopio. Para adquirir los datos a través de MATLAB, obtenemos los datos recuperándolos de la matriz de orientación de MATLAB mobile. Hacemos esto creando una variable para cada columna de la matriz de orientación (Azimut, Pitch y Roll) e indexando el flujo constante de valores desde el dispositivo móvil a la computadora. Esto nos permite crear declaraciones condicionales que preformarán una salida si MATLAB recoge una entrada de datos específica del dispositivo móvil. Para hacer esto, necesitará MATLAB mobile en su dispositivo móvil y el paquete de soporte de dispositivo móvil para MATLAB en su computadora.
Puede descargar el archivo en el enlace de abajo
www.mathworks.com/matlabcentral/fileexchange/51235-matlab-support-package-for-apple-ios-sensors
Paso 4: el código y los puertos de cableado
El código comienza con un mensaje de inicio que pregunta si queremos iniciar nuestro dispositivo de seguridad para el hogar. Si respondemos que sí y damos la contraseña correcta, el script salta inmediatamente a un ciclo while. A partir de ahí, comienza a recopilar datos del dispositivo móvil. Hay condicionales que leen estos datos. Podemos desbloquear y bloquear el sistema desde nuestro dispositivo móvil, y el código encenderá el servo y hará parpadear la luz LED dependiendo de los datos dados desde el dispositivo móvil
startup = questdlg ('¿Le gustaría activar el sistema de energía del hogar inteligente ecoTECH?'); % Comienza la secuencia de activación de ecoTECHwaitfor (inicio); if startup == "Yes"% Si se selecciona "Yes" una secuencia de activación comienza y entra en el bucle while al final power = "on"; m1 = msgbox ('Iniciando ecoTECH…'); pausa (2); eliminar (m1); m1_wait = waitbar (0, 'Por favor espere …'); pasos = 25; para i = 1: pausa de pasos (.1); barra de espera (i / pasos); % Actualiza la eliminación final de la barra de espera (m1_wait); CONTRASEÑA = [0 0 0 0]; % Inicializa la contraseña ii = 0; % Inicializa una variable que se utiliza para salir de los bucles m2 = msgbox ('¡ecoTECH en pleno funcionamiento!'); pausa (2); eliminar (m2); elseif inicio == "No" || inicio == "Cancelar"% Si se selecciona "No" o "Cancelar", entonces la secuencia de activación no comienza y no ingresa al bucle while power = "off"; m3 = msgbox ('¡Bien! ¡Adiós!'); pausa (2); eliminar (m3); fin
% ecoTECH en la sección de acción mientras es verdadero mientras que el poder == "en"% Sección de tecla móvil mientras que% es verdadero Recopila datos sobre la orientación del rollo del dispositivo móvil CLAVE = m. Orientation (3); % Recopila datos sobre los botones b2 = readDigitalPin (a, 'D2'); % Botón 2 (rojo) b3 = readDigitalPin (a, 'D3'); % Botón 3 (blanco) si KEY> = 35% en grados m4 = msgbox ('¡Bienvenido a casa!'); writeDigitalPin (a, 'D8', 1); % Enciende la pausa de la luz verde (.5); writePosition (s, 1); % Gira el servo para desbloquear la pausa de la puerta (2); writeDigitalPin (a, 'D8', 0); % Apaga la luz verde borrar (m4); elseif KEY <= -35% en grados m5 = msgbox ('¡Puerta bloqueada!'); writeDigitalPin (a, 'D7', 1); % Enciende la pausa de la luz roja (.5); writePosition (s, 0); % Gira el servo para bloquear la pausa de la puerta (2); writeDigitalPin (a, 'D7', 0); % Apaga la luz roja eliminar (m5); ii = 1; break% Sale mientras el bucle contiene la llave móvil si la puerta está bloqueada con el dispositivo móvil elseif b2 == 0 && b3 == 0% Sale mientras el bucle contiene la llave móvil para ingresar la sección del código de acceso break end end
Después de esto, puede entrar en otro ciclo while. Este bucle while controla los resultados en función de las entradas de los botones. Si el primer ciclo while es insignificante, o se requiere un bloqueo manual, entrará en otro ciclo while donde se necesite una contraseña específica. Si la contraseña es incorrecta, reiniciará el ciclo
while true if ii == 1% Sale while loop que contiene el código de acceso si la puerta se desbloqueó con el dispositivo móvil break end% Recopila datos sobre los botones b5 = readDigitalPin (a, 'D5'); % Botón 5 (azul) b1 = readDigitalPin (a, 'D1'); % Botón 1 (negro) b4 = readDigitalPin (a, 'D4'); % Botón 4 (Blanco) si b5 == 0% Inicia la sección de ingreso de contraseña para b = 1: 5 m6 = msgbox ('Por favor presione y mantenga presionado un botón'); pausa (2); eliminar (m6); % Recopila datos sobre los botones b1 = readDigitalPin (a, 'D1'); % Botón 1 (negro) b2 = readDigitalPin (a, 'D2'); % Botón 2 (rojo) b3 = readDigitalPin (a, 'D3'); % Botón 3 (Blanco) b4 = readDigitalPin (a, 'D4'); % Botón 4 (amarillo) b5 = readDigitalPin (a, 'D5'); % Botón 5 (azul)% Reemplaza los valores en el código de acceso inicial uno a la vez si b1 == 0 PASSCODE (0 + b) = 1; elseif b2 == 0 CONTRASEÑA (0 + b) = 2; elseif b3 == 0 CONTRASEÑA (0 + b) = 3; elseif b4 == 0 CONTRASEÑA (0 + b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.0f%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Convierte la secuencia de botones presionados en números y luego la convierte en un final de cadena% Fin del ciclo for para ingresar dígitos para el código de acceso si PASSCODE == "2314"% Si el código de acceso ingresado coincide, la puerta se desbloquea durante unos segundos y luego se bloquea m7 = msgbox ('¡Bienvenido a casa!'); writeDigitalPin (a, 'D8', 1); % Enciende la pausa de la luz verde (.5); writePosition (s, 1); % Gira el servo para desbloquear la pausa de la puerta (5); writeDigitalPin (a, 'D8', 0); % Apaga la pausa de la luz verde (.1); writeDigitalPin (a, 'D7', 1); % Enciende la pausa de la luz roja (.5); writePosition (s, 0); % Gira el servo para bloquear la pausa de la puerta (1); writeDigitalPin (a, 'D7', 0); % Apaga la luz roja eliminar (m7); ii = 1; break% Sale del bucle que contiene la contraseña después de ingresar la contraseña correcta elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Enciende la luz roja m8 = msgbox ('¡Código de acceso incorrecto! ¡Inténtelo de nuevo!'); esperar (m8) writeDigitalPin (a, 'D7', 0); % Apaga la luz roja continuar% Le permite volver a ingresar un código de acceso end elseif b1 == 0 && b4 == 0% Sale mientras el bucle contiene la sección del código de acceso si no desea ingresar un código de acceso ii = 1; romper fin fin
Si es correcto, entrará inmediatamente en un bucle while que controla el sensor de temperatura. Si el interruptor está encendido, el bucle continuará y trazará la gráfica de temperatura frente a tiempo, lo que permitirá ver la tendencia. Si se presiona el botón conectado al sensor de temperatura, también te enviará un correo electrónico indicándote cuál es la temperatura en tu "casa". Si el interruptor está apagado, finalizará inmediatamente el código
t = 0; % Tiempo inicial = 0 segundos pausa (5)% Da tiempo para que el usuario encienda el interruptor de temperatura SWITCH = readDigitalPin (a, 'D11'); % Recopila datos sobre el interruptor en el pin D11 mientras SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Recopila datos sobre el interruptor en el pin D11 voltage = readVoltage (a, 'A1'); % Lee el voltaje del sensor de temperatura temp_C = (voltaje. * 1000 - 500)./ 10; % Convierte el voltaje en temperatura en ° C temp_F = (9/5). * Temp_C + 32; % Convierte de ° C a ° F gráfico (t, temp_C, 'b.') Mantenga el título ('Temperatura ambiente'); xlabel ('Tiempo en segundos'); ylabel ('Temperatura'); eje ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legend ('Temperatura en ° C', 'Temperatura en ° F') pausa (1); t = t + 1; % Contador de tiempo en segundos% Sección de correo electrónico b_temp = readDigitalPin (a, 'D0'); % Recopila los datos del botón de temperatura (azul) en el pin D0 si b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'Correo electrónico', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); % Nombre de usuario del remitente setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Props de la contraseña del remitente = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'verdadero'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('[email protected] ',' temperatura ambiente ecoTECH ', sprintf (' La temperatura ambiente actual es%.1f ° C o%.1f ° F. ', temp_C, temp_F)); % Envía un correo electrónico al destinatario con datos sobre la temperatura ambiente actual fprintf ('¡Correo electrónico enviado con éxito! / N') end if temp_F> = 75% Si la temperatura ambiente aumenta a 75 ° F… temp_AC = 65; % Cambia la temperatura en el termostato a 65 ° F elseif temp_F <= 65% Si la temperatura ambiente desciende a 60 ° F… temp_AC = 80; % Cambia la temperatura en el termostato a 80 ° F end end% Fin de "SWITCH == 0" mientras que el bucle si la energía == "off" || ii == 1% Sale "power == on" while loop break end end% Fin de "power == on" while loop si power == "off" || ii == 1% Sale completo mientras el bucle finaliza
Esta fue solo una breve descripción general del código y su funcionalidad. Hemos adjuntado el código completo en formato pdf si es necesario
Aquí está la lista de a qué puerto está conectado cada dispositivo
1. LED RGB: Pines digitales (7, 8, 9)
2. Servo: Pin digital 6
3. Botones: Pines digitales (1, 2, 3, 4, 5)
4. Botón azul para correo electrónico: Pin digital 0
5. Sensor de temperatura: Pin analógico 1
6. Interruptor: Pin digital 11
Recomendado:
Motor paso a paso controlado por motor paso a paso sin microcontrolador: 6 pasos
¡Motor paso a paso controlado por motor paso a paso sin microcontrolador !: En este Instructable rápido, haremos un controlador de motor paso a paso simple usando un motor paso a paso. Este proyecto no requiere circuitos complejos ni un microcontrolador. Así que sin más preámbulos, ¡comencemos
Motor paso a paso controlado por motor paso a paso sin microcontrolador (V2): 9 pasos (con imágenes)
Motor paso a paso controlado por motor paso a paso sin microcontrolador (V2): En uno de mis Instructables anteriores, le mostré cómo controlar un motor paso a paso usando un motor paso a paso sin un microcontrolador. Fue un proyecto rápido y divertido, pero vino con dos problemas que se resolverán en este Instructable. Entonces, ingenio
Robot controlado por voz usando el microcontrolador 8051: 4 pasos (con imágenes)
Robot controlado por voz usando el microcontrolador 8051: Un robot controlado por voz toma un comando específico en forma de voz. Cualquiera que sea el comando dado a través del módulo de voz o del módulo Bluetooth, el controlador existente lo decodifica y, por lo tanto, se ejecuta el comando dado. Aquí en este proyecto, yo
Configuración de bits de fusibles del microcontrolador AVR. Creación y carga en la memoria flash del microcontrolador el programa de parpadeo de LED: 5 pasos
Configuración de bits de fusibles del microcontrolador AVR. Creando y cargando en la memoria flash del microcontrolador el programa de parpadeo de LED: en este caso crearemos un programa simple en código C y lo grabaremos en la memoria del microcontrolador. Escribiremos nuestro propio programa y compilaremos el archivo hexadecimal, utilizando Atmel Studio como plataforma de desarrollo integrada. Configuraremos fuse bi
Cómo hacer un robot controlado por un móvil »Wiki Ùtil Basado en DTMF - Sin microcontrolador y programación - Control desde cualquier lugar del mundo - RoboGeeks: 15 pasos
Cómo hacer un robot controlado por un móvil »Wiki Ùtil Basado en DTMF | Sin microcontrolador y programación | Control desde cualquier lugar del mundo | RoboGeeks: Quiero hacer un robot que se pueda controlar desde cualquier parte del mundo, ¡¡¡hagámoslo