Table des matières:

Microcontrôleur contrôlé par MATLAB (Arduino MKR1000): 4 étapes
Microcontrôleur contrôlé par MATLAB (Arduino MKR1000): 4 étapes

Vidéo: Microcontrôleur contrôlé par MATLAB (Arduino MKR1000): 4 étapes

Vidéo: Microcontrôleur contrôlé par MATLAB (Arduino MKR1000): 4 étapes
Vidéo: How To Integrate C Code And Deploy To Arduino || MATLAB Arduino Interface || PID control on Arduino 2024, Juillet
Anonim
Microcontrôleur contrôlé par MATLAB (Arduino MKR1000)
Microcontrôleur contrôlé par MATLAB (Arduino MKR1000)

L'objectif de notre projet était d'utiliser MATLAB ainsi que l'Arduino MKR1000 au mieux de nos capacités. Notre objectif était de créer un script permettant à certaines fonctionnalités de l'arduino d'effectuer une certaine sortie en fonction d'une entrée spécifique. Nous avons utilisé de nombreuses boucles et instructions conditionnelles présentes dans MATLAB qui ont rendu cela possible. Nous avons également utilisé MATLAB mobile en utilisant les données acquises à partir du gyroscope d'un appareil mobile pour améliorer le projet autant que possible.

Étape 1: Pièces et matériaux

Pièces et matériaux
Pièces et matériaux
Pièces et matériaux
Pièces et matériaux
Pièces et matériaux
Pièces et matériaux

MATLAB 2018a

-La version 2018 de MATLAB est la version la plus préférée, principalement parce qu'elle fonctionne mieux avec le code qui se connecte à l'appareil mobile. Cependant, la plupart de notre code peut être interprété par la majorité des versions de MATLAB.

Arduino MKR1000

-Il s'agit d'un dispositif spécifique qui nous permet de câbler des circuits jusqu'aux ports numériques et analogiques. Il est essentiel que vous ayez également une planche à pain pour l'accompagner.

Accessoires

-Lors de l'utilisation du MKR1000, nous avions besoin de pièces accessoires pour exécuter les fonctions nécessaires.

Ceci comprend

  1. Servomoteur
  2. Bouton (6)
  3. Lumière LED RBG interchangeable
  4. Fils simples
  5. planche(s) à pain
  6. mini interrupteur d'alimentation
  7. capteur de température
  8. résistance de 330 ohms
  9. Résistance de 10K ohms
  10. Cordon USB-microUSB
  11. Ordinateur portable/de bureau
  12. Appareil mobile

Il est également à noter qu'il existe de nombreux autres accessoires pouvant être utilisés avec le MKR1000

Étape 2: Package d'assistance MATLAB Arduino

Afin d'utiliser correctement l'Arduino MKR1000 via MATLAB, vous devez télécharger le package de support MATLAB pour le matériel Arduino. Ce téléchargement vous donne accès à certaines fonctions et commandes directement sur la carte arduino.

Vous pouvez télécharger le package sur le lien ci-dessous

www.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware

Étape 3: Utilisation des capteurs de données acquis à partir d'un appareil mobile

Utilisation de capteurs de données acquis à partir d'un appareil mobile
Utilisation de capteurs de données acquis à partir d'un appareil mobile

L'application MATLAB Mobile nous permet d'utiliser un appareil mobile pour diffuser des données à l'aide de son gyroscope. Pour acquérir les données via MATLAB, nous obtenons les données en les récupérant à partir de la matrice d'orientation de MATLAB mobile. Pour ce faire, nous créons une variable pour chaque colonne de la matrice d'orientation (azimut, tangage et roulis) et en indexant le flux constant de valeurs de l'appareil mobile à l'ordinateur. Cela nous permet de créer des instructions conditionnelles qui préformeront une sortie si MATLAB récupère une entrée de données spécifique à partir de l'appareil mobile. Pour ce faire, vous aurez besoin de MATLAB mobile sur votre appareil mobile et du package de prise en charge des appareils mobiles pour MATLAB sur votre ordinateur.

Vous pouvez télécharger le fichier sur le lien ci-dessous

www.mathworks.com/matlabcentral/fileexchange/51235-matlab-support-package-for-apple-ios-sensors

Étape 4: Le code et les ports de câblage

Le code commence par un message de démarrage qui demande si nous voulons démarrer notre dispositif de sécurité domestique. Si nous répondons oui et donnons le mot de passe correct, le script saute immédiatement dans une boucle while. À partir de là, il commence à collecter des données à partir de l'appareil mobile. Il y a des conditionnels qui lisent ces données. Nous pouvons déverrouiller et verrouiller le système à partir de notre appareil mobile, et le code fera tourner le servo et fera clignoter le voyant LED en fonction des données fournies par l'appareil mobile

startup = questdlg('Voulez-vous activer ecoTECH Smart Home Energy System ?'); % Commence la séquence d'activation d'ecoTECHwaitfor(startup); si démarrage == "Oui" % Si "Oui" est sélectionné une séquence d'activation commence et entre dans la boucle while à la fin power = "on"; m1 = msgbox('Démarrage d'ecoTECH…'); pause(2); supprimer(m1); m1_wait = waitbar(0, 'Veuillez patienter…'); pas = 25; pour i = 1: pas de pause(.1); barre d'attente(i/étapes); % Met à jour la fin de la barre d'attente delete(m1_wait); MOT DE PASSE = [0 0 0 0]; % Initialise le mot de passe ii = 0; % Initialise une variable utilisée pour sortir des boucles m2 = msgbox('ecoTECH entièrement opérationnel !'); pause(2); supprimer(m2); elseif démarrage == "Non" || startup == "Cancel" % Si "No" ou "Cancel" est sélectionné alors la séquence d'activation ne démarre pas et n'entre pas dans la boucle while power = "off"; m3 = msgbox('D'accord ! Au revoir !'); pause(2); supprimer(m3); finir

% ecoTECH in Action Section tant que vrai pendant l'alimentation == "on" % Mobile Key Section tant que vrai % Collecte des données sur l'orientation du roulis de l'appareil mobile KEY = m. Orientation(3); % Collecte des données sur les boutons b2 = readDigitalPin(a, 'D2'); % Bouton 2 (Rouge) b3 = readDigitalPin(a, 'D3'); % Bouton 3 (Blanc) si TOUCHE >= 35 % en degrés m4 = msgbox('Bienvenue à la maison !'); writeDigitalPin(a, 'D8', 1); % Allume la pause du voyant vert (.5); écriturePosition(s, 1); % Tourne le servo pour déverrouiller la pause de la porte(2); writeDigitalPin(a, 'D8', 0); % Éteint le voyant vert delete(m4); elseif KEY <= -35 % en degrés m5 = msgbox('Porte verrouillée !'); writeDigitalPin(a, 'D7', 1); % Allume la pause du voyant rouge (.5); écriturePosition(s, 0); % Tourne le servo pour verrouiller la pause de la porte(2); writeDigitalPin(a, 'D7', 0); % Éteint le voyant rouge delete(m5); ii = 1; break % Quitte pendant la boucle contenant la clé mobile si la porte est verrouillée à l'aide de l'appareil mobile elseif b2 == 0 && b3 == 0 % Quitte pendant la boucle contenant la clé mobile pour entrer dans la section du code d'accès break end end

Après cela, il peut entrer une autre boucle while. Cette boucle while contrôle les résultats en fonction des entrées des boutons. Si la première boucle while est négligeable ou si un verrouillage manuel est requis, il entrera dans une autre boucle while où un mot de passe spécifique est nécessaire. Si le mot de passe est incorrect, il redémarrera la boucle

tant que vrai si ii == 1 % Quitte la boucle while contenant le mot de passe si la porte a été déverrouillée avec l'appareil mobile break end % Collecte des données sur les boutons b5 = readDigitalPin(a, 'D5'); % Bouton 5 (Bleu) b1 = readDigitalPin(a, 'D1'); % Bouton 1 (Noir) b4 = readDigitalPin(a, 'D4'); % Bouton 4 (Blanc) si b5 == 0 % Démarre la section de saisie du code d'accès pour b = 1:5 m6 = msgbox('Appuyez et maintenez enfoncé un bouton'); pause(2); supprimer(m6); % Collecte des données sur les boutons b1 = readDigitalPin(a, 'D1'); % Bouton 1 (Noir) b2 = readDigitalPin(a, 'D2'); % Bouton 2 (Rouge) b3 = readDigitalPin(a, 'D3'); % Bouton 3 (Blanc) b4 = readDigitalPin(a, 'D4'); % Bouton 4 (Jaune) b5 = readDigitalPin(a, 'D5'); % Bouton 5 (Bleu) % Remplace les valeurs du mot de passe initial une par une si b1 == 0 PASSCODE(0+b) = 1; elseif b2 == 0 MOT DE PASSE(0+b) = 2; elseif b3 == 0 MOT DE PASSE(0+b) = 3; elseif b4 == 0 MOT DE PASSE(0+b) = 4; elseif b5 == 0 PASSCODE = sprintf('%.0f%.0f%.0f%.0f', PASSCODE(1), PASSCODE(2), PASSCODE(3), PASSCODE(4)); % Transforme la séquence de boutons pressés en chiffres puis la convertit en une chaîne end end % Fin de boucle for pour saisir les chiffres du code d'accès si PASSCODE == "2314" % Si le code d'accès entré correspond alors la porte se déverrouille pendant quelques secondes puis se verrouille m7 = msgbox('Bienvenue à la maison !'); writeDigitalPin(a, 'D8', 1); % Allume la pause du voyant vert (.5); écriturePosition(s, 1); % Tourne le servo pour déverrouiller la porte pause(5); writeDigitalPin(a, 'D8', 0); % Éteint la pause du voyant vert (.1); writeDigitalPin(a, 'D7', 1); % Allume la pause du voyant rouge (.5); écriturePosition(s, 0); % Tourne le servo pour verrouiller la pause de la porte (1); writeDigitalPin(a, 'D7', 0); % Éteint le voyant rouge delete(m7); ii = 1; break % Quitte la boucle while contenant le mot de passe après avoir saisi le mot de passe correct elseif PASSCODE ~= "2314" writeDigitalPin(a, 'D7', 1); % Allume le voyant rouge m8 = msgbox('Incorrect Passcode! Try Again!'); waitfor(m8) writeDigitalPin(a, 'D7', 0); % Éteint le voyant rouge continuer % Vous permet de ressaisir un mot de passe end elseif b1 == 0 && b4 == 0 % Quitte la boucle contenant la section du mot de passe si vous ne voulez pas entrer de mot de passe ii = 1; pause fin fin

S'il est correct, il entrera immédiatement dans une boucle while qui contrôle le capteur de température. Si l'interrupteur est activé, la boucle se poursuivra et tracera le graphique de la température en fonction du temps, permettant de visualiser la tendance. Si le bouton connecté au capteur de température est enfoncé, il enverra également un e-mail vous indiquant quelle est la température dans votre "maison". Si l'interrupteur est éteint, il mettra immédiatement fin au code

t = 0; % Temps initial = 0 seconde pause(5) % Donne le temps à l'utilisateur d'activer le commutateur de température SWITCH = readDigitalPin(a, 'D11'); % Collecte des données sur le commutateur dans la broche D11 tandis que SWITCH == 0 SWITCH = readDigitalPin(a, 'D11'); % Collecte des données sur le commutateur dans la tension de la broche D11 = readVoltage(a, 'A1'); % Lit la tension du capteur de température temp_C = (tension.*1000 - 500)./10; % Convertit la tension en température en °C temp_F = (9/5).*temp_C + 32; % Convertit de °C à °F plot(t, temp_C, 'b.') hold on title('Room Temperature'); xlabel('Temps en secondes'); ylabel('Température'); axe([0, 180, 0, 100]); plot(t, temp_F, 'r.') legend('Température en °C', 'Température en °F') pause(1); t = t + 1; % Compteur de temps en secondes % Section e-mail b_temp = readDigitalPin(a, 'D0'); % Collecte les données du bouton de température (bleu) sur la broche D0 si b_temp == 0 setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_mail', '[email protected]'); % Expéditeur setpref('Internet', 'SMTP_Nom d'utilisateur', '[email protected]'); % Nom d'utilisateur de l'expéditeur setpref('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Props du mot de passe de l'expéditeur = java.lang. System.getProperties; props.setProperty('mail.smtp.auth', 'true'); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.port', '465'); sendmail('[email protected]', 'température ambiante ecoTECH', sprintf('La température ambiante actuelle est %.1f °C ou %.1f °F.', temp_C, temp_F)); % Envoie un e-mail au destinataire donnant des données sur la température ambiante actuelle fprintf('E-mail envoyé avec succès !\n') end if temp_F >= 75 % Si la température ambiante augmente à 75 °F… temp_AC = 65; % Modifie la température sur le thermostat à 65 °F sinon temp_F <= 65 % Si la température ambiante diminue à 60 °F… temp_AC = 80; % Modifie la température sur le thermostat à 80 °F end end % End of "SWITCH == 0" while loop if power == "off" || ii == 1 % Quitte "power == on" tandis que la boucle se termine fin % Fin de "power == on" while loop if power == "off" || ii == 1 % Sortie entière pendant la fin de la rupture de boucle

Ce n'était qu'un bref aperçu du code et de sa fonctionnalité. Nous avons joint le code complet au format pdf si nécessaire

Voici la liste des ports sur lesquels chaque périphérique est connecté

1. LED RVB: broches numériques (7, 8, 9)

2. Servo: broche numérique 6

3. Boutons: broches numériques (1, 2, 3, 4, 5)

4. Bouton bleu pour l'e-mail: Pin numérique 0

5. Capteur de température: Broche analogique 1

6. Commutateur: broche numérique 11

Conseillé: