Inhaltsverzeichnis:

MATLAB-gesteuerter Mikrocontroller (Arduino MKR1000) - Gunook
MATLAB-gesteuerter Mikrocontroller (Arduino MKR1000) - Gunook

Video: MATLAB-gesteuerter Mikrocontroller (Arduino MKR1000) - Gunook

Video: MATLAB-gesteuerter Mikrocontroller (Arduino MKR1000) - Gunook
Video: Arduino: MATLAB Communication 2024, Juli
Anonim
MATLAB-gesteuerter Mikrocontroller (Arduino MKR1000)
MATLAB-gesteuerter Mikrocontroller (Arduino MKR1000)

Das Ziel unseres Projekts war es, sowohl MATLAB als auch den Arduino MKR1000 bestmöglich zu nutzen. Unser Ziel war es, ein Skript zu erstellen, das es bestimmten Funktionen des Arduino ermöglicht, eine bestimmte Ausgabe basierend auf einer bestimmten Eingabe durchzuführen. Wir haben viele Schleifen und bedingte Anweisungen in MATLAB verwendet, die dies ermöglicht haben. Wir haben auch MATLAB Mobile verwendet, indem wir Daten verwendet haben, die vom Gyroskop eines Mobilgeräts erfasst wurden, um das Projekt so weit wie möglich zu verbessern.

Schritt 1: Teile und Materialien

Teile und Materialien
Teile und Materialien
Teile und Materialien
Teile und Materialien
Teile und Materialien
Teile und Materialien

MATLAB 2018a

-Die 2018er-Version von MATLAB ist die am meisten bevorzugte Version, vor allem, weil sie am besten mit dem Code funktioniert, der mit dem Mobilgerät verbunden ist. Der Großteil unseres Codes kann jedoch von den meisten MATLAB-Versionen interpretiert werden.

Arduino MKR1000

-Dies ist ein spezielles Gerät, mit dem wir Schaltungen sowohl an digitale als auch an analoge Anschlüsse anschließen können. Es ist wichtig, dass Sie auch ein Steckbrett dazu haben.

Zubehör

-Bei der Verwendung des MKR1000 benötigten wir Zubehörteile, um die notwendigen Funktionen auszuführen.

Das beinhaltet

  1. Servo
  2. Knopf (6)
  3. Austauschbares RBG LED-Licht
  4. Einfache Drähte
  5. Steckbrett(er)
  6. Mini-Netzschalter
  7. Temperatursensor
  8. 330 Ohm Widerstand
  9. 10K Ohm Widerstand
  10. USB-microUSB-Kabel
  11. Laptop/Desktop
  12. Mobilgerät

Es ist auch zu beachten, dass es noch viel mehr Zubehör gibt, das mit dem MKR1000 verwendet werden kann

Schritt 2: MATLAB Arduino Support Package

Um den Arduino MKR1000 über MATLAB ordnungsgemäß verwenden zu können, müssen Sie das MATLAB Support Package für Arduino Hardware herunterladen. Dieser Download bietet Ihnen Zugriff auf bestimmte Funktionen und Befehle direkt auf das Arduino-Board.

Sie können das Paket unter dem folgenden Link herunterladen

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

Schritt 3: Verwenden von Datensensoren, die von Mobilgeräten erworben wurden

Verwendung von Datensensoren, die von Mobilgeräten übernommen wurden
Verwendung von Datensensoren, die von Mobilgeräten übernommen wurden

Die MATLAB Mobile-App ermöglicht es uns, ein mobiles Gerät zum Streamen von Daten mithilfe seines Gyroskops zu verwenden. Um die Daten über MATLAB zu erfassen, erhalten wir die Daten, indem wir sie aus der Orientierungsmatrix von MATLAB Mobile abrufen. Dazu erstellen wir für jede Spalte der Orientierungsmatrix (Azimut, Pitch und Roll) eine Variable und indizieren den konstanten Wertestrom vom Mobilgerät zum Computer. Auf diese Weise können wir bedingte Anweisungen erstellen, die eine Ausgabe durchführen, wenn MATLAB eine bestimmte Dateneingabe vom mobilen Gerät aufnimmt. Dazu benötigen Sie MATLAB mobile auf Ihrem Mobilgerät und das Mobile Device Support Package für MATLAB auf Ihrem Computer.

Sie können die Datei unter folgendem Link herunterladen

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

Schritt 4: Der Code und die Verdrahtungsports

Der Code beginnt mit einer Startnachricht, die fragt, ob wir unser Heimsicherheitsgerät starten möchten. Wenn wir mit Ja antworten und den richtigen Passcode eingeben, springt das Skript sofort in eine while-Schleife. Von dort aus beginnt es, Daten vom mobilen Gerät zu sammeln. Es gibt Bedingungen, die diese Daten lesen. Wir können das System von unserem mobilen Gerät aus entsperren und sperren, und der Code dreht das Servo und blinkt das LED-Licht abhängig von den gegebenen Daten vom mobilen Gerät

startup = questdlg('Möchten Sie das ecoTECH Smart Home Energy System aktivieren?'); % Startet die Aktivierungssequenz von ecoTECHwaitfor(startup); if startup == "Yes" % Bei Auswahl von "Yes" beginnt eine Aktivierungssequenz und geht am Ende in die while-Schleife ein power = "on"; m1 = msgbox('ecoTECH starten…'); Pause(2); löschen (m1); m1_wait = waitbar(0, 'Bitte warten…'); Schritte = 25; für i = 1:Schritte Pause(.1); Warteleiste (i/Schritte); % Aktualisiert die Warteleiste end delete(m1_wait); PASSCODE = [0 0 0 0]; % Initialisiert Passcode ii = 0; % Initialisiert eine Variable zum Ausbrechen aus Schleifen m2 = msgbox('ecoTECH full operation!'); Pause(2); löschen (m2); elseif Startup == "Nein" || startup == "Cancel" % Wenn "No" oder "Cancel" ausgewählt ist, startet die Aktivierungssequenz nicht und geht nicht in die while-Schleife ein power = "off"; m3 = msgbox('Okay! Auf Wiedersehen!'); Pause(2); löschen (m3); Ende

% ecoTECH im Aktionsabschnitt solange wahr, während Strom == "on" % Mobiler Schlüsselabschnitt während wahr % Erfasst Daten über die Roll-Orientierung des mobilen Geräts KEY = m. Orientation(3); % Erfasst Daten über die Schaltflächen b2 = readDigitalPin(a, 'D2'); % Taste 2 (Rot) b3 = readDigitalPin(a, 'D3'); % Button 3 (weiß) wenn KEY >= 35 % in Grad m4 = msgbox('Willkommen zu Hause!'); writeDigitalPin(a, 'D8', 1); % Schaltet die grüne Lichtpause ein (.5); writePosition(s, 1); % Dreht das Servo, um die Türpause (2) zu entriegeln; writeDigitalPin(a, 'D8', 0); % Schaltet das grüne Licht aus delete(m4); elseif KEY <= -35 % in Grad m5 = msgbox('Tür verriegelt!'); writeDigitalPin(a, 'D7', 1); % Schaltet die rote Lichtpause ein (.5); writePosition(s, 0); % Dreht das Servo, um die Türpause zu verriegeln(2); writeDigitalPin(a, 'D7', 0); % Schaltet das rote Licht aus delete(m5); ii = 1; Pause % Beendet die while-Schleife mit dem mobilen Schlüssel, wenn die Tür mit dem mobilen Gerät verriegelt ist elseif b2 == 0 && b3 == 0 % Beendet die while-Schleife mit dem mobilen Schlüssel zum Eingeben des Passcodes

Danach kann es in eine weitere while-Schleife eintreten. Diese while-Schleife steuert die Ergebnisse basierend auf den Eingaben von den Schaltflächen. Wenn die erste while-Schleife vernachlässigbar ist oder eine manuelle Sperre erforderlich ist, wird eine weitere while-Schleife eingegeben, in der ein bestimmtes Passwort erforderlich ist. Wenn das Passwort falsch ist, wird die Schleife neu gestartet

while true if ii == 1 % Beendet while Schleife mit Passcode wenn die Tür mit dem Mobilgerät entriegelt wurde break end % Sammelt Daten über die Tasten b5 = readDigitalPin(a, 'D5'); % Taste 5 (Blau) b1 = readDigitalPin(a, 'D1'); % Taste 1 (Schwarz) b4 = readDigitalPin(a, 'D4'); % Taste 4 (weiß) wenn b5 == 0 % Startet den Abschnitt zur Eingabe des Passcodes für b = 1:5 m6 = msgbox('Bitte drücken und halten Sie eine Taste'); Pause(2); löschen (m6); % Erfasst Daten über die Schaltflächen b1 = readDigitalPin(a, 'D1'); % Taste 1 (Schwarz) b2 = readDigitalPin(a, 'D2'); % Taste 2 (Rot) b3 = readDigitalPin(a, 'D3'); % Taste 3 (Weiß) b4 = readDigitalPin(a, 'D4'); % Taste 4 (Gelb) b5 = readDigitalPin(a, 'D5'); % Taste 5 (Blau) % Ersetzt die Werte im anfänglichen Passcode nacheinander, wenn b1 == 0 PASSCODE(0+b) = 1; elseif b2 == 0 PASSCODE(0+b) = 2; elseif b3 == 0 PASSCODE(0+b) = 3; elseif b4 == 0 PASSCODE(0+b) = 4; elseif b5 == 0 PASSCODE = sprintf('%.0f%.0f%.0f%.0f', PASSCODE(1), PASSCODE(2), PASSCODE(3), PASSCODE(4)); % Wandelt die Tastenfolge in Zahlen um und wandelt sie dann in ein Stringende um % Ende der for-Schleife zur Eingabe von Ziffern für den Passcode, wenn PASSCODE == "2314" % Wenn der eingegebene Passcode übereinstimmt, wird die Tür für einige Sekunden entriegelt und dann verriegelt m7 = msgbox('Willkommen zu Hause!'); writeDigitalPin(a, 'D8', 1); % Schaltet die grüne Lichtpause ein (.5); writePosition(s, 1); % Dreht das Servo zum Entriegeln der Türpause(5); writeDigitalPin(a, 'D8', 0); % Schaltet die grüne Lichtpause aus (.1); writeDigitalPin(a, 'D7', 1); % Schaltet die rote Lichtpause ein (.5); writePosition(s, 0); % Dreht das Servo, um die Türpause zu verriegeln(1); writeDigitalPin(a, 'D7', 0); % Schaltet das rote Licht aus delete(m7); ii = 1; break % Beendet die while-Schleife, die den Passcode enthält, nachdem der richtige Passcode eingegeben wurde elseif PASSCODE ~= "2314" writeDigitalPin(a, 'D7', 1); % Schaltet das rote Licht ein m8 = msgbox('Falscher Passcode! Versuchen Sie es erneut!'); waitfor(m8) writeDigitalPin(a, 'D7', 0); % Schaltet das rote Licht aus fort % Ermöglicht die erneute Eingabe eines Passcodes end elseif b1 == 0 && b4 == 0 % Beendet die Schleife mit dem Passcode-Abschnitt, wenn Sie keinen Passcode eingeben möchten ii = 1; brechen ende ende

Wenn es richtig ist, tritt es sofort in eine while-Schleife ein, die den Temperatursensor steuert. Wenn der Schalter eingeschaltet ist, wird die Schleife fortgesetzt und das Temperatur-Zeit-Diagramm grafisch dargestellt, sodass der Trend angezeigt werden kann. Wenn die mit dem Temperatursensor verbundene Taste gedrückt wird, sendet dieser auch eine E-Mail mit der Temperatur in Ihrem „Zuhause“. Wenn der Schalter ausgeschaltet ist, wird der Code sofort beendet

t = 0; % Anfangszeit = 0 Sekunden Pause(5) % Gibt dem Benutzer Zeit, den Temperaturschalter einzuschalten SWITCH = readDigitalPin(a, 'D11'); % Sammelt Daten über den Schalter in Pin D11 während SWITCH == 0 SWITCH = readDigitalPin(a, 'D11'); % Erfasst Daten über den Schalter in Pin D11 Spannung = readVoltage(a, 'A1'); % Liest die Spannung vom Temperatursensor temp_C = (Spannung.*1000 - 500)./10; % Wandelt die Spannung in Temperatur in °C um temp_F = (9/5).*temp_C + 32; % Konvertiert von °C in °F plot(t, temp_C, 'b.') hold on title('Room Temperature'); xlabel('Zeit in Sekunden'); ylabel('Temperatur'); Achse([0, 180, 0, 100]); plot(t, temp_F, 'r.') legend('Temperatur in °C', 'Temperatur in °F') pause(1); t = t + 1; % Zeitzähler in Sekunden % E-Mail-Abschnitt b_temp = readDigitalPin(a, 'D0'); % Sammelt die Daten der (blauen) Temperaturtaste in Pin D0 if b_temp == 0 setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_Mail', '[email protected]'); % Sender setpref('Internet', 'SMTP_Benutzername', '[email protected]'); % Benutzername des Absenders setpref('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Kennwortprops des Absenders = 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]', 'ecoTECH Room Temperature', sprintf('Die aktuelle Raumtemperatur ist %.1f °C oder %.1f °F.', temp_C, temp_F)); % Sendet eine E-Mail an den Empfänger mit Daten zur aktuellen Raumtemperatur fprintf('E-Mail erfolgreich gesendet!\n') end if temp_F >= 75 % Wenn die Raumtemperatur auf 75 °F ansteigt… temp_AC = 65; % Ändert die Temperatur am Thermostat auf 65 °F elseif temp_F <= 65 % Wenn die Raumtemperatur auf 60 °F sinkt… temp_AC = 80; % Ändert die Temperatur am Thermostat auf 80 °F Ende Ende % Ende von "SWITCH == 0" while loop if power == "off" || ii == 1 % Beendet "power == on" während Schleifenunterbrechung end end % Ende von "power == on" while loop if power == "off" || ii == 1 % Beendet das Ganze, während Schleifenunterbrechung endet

Dies war nur ein kurzer Überblick über den Code und seine Funktionsfähigkeit. Den vollständigen Code haben wir bei Bedarf als pdf angehängt

Hier ist die Liste, an welchen Port jedes Gerät angeschlossen ist

1. RGB-LED: Digitale Pins (7, 8, 9)

2. Servo: Digitaler Pin 6

3. Tasten: Digitale Pins (1, 2, 3, 4, 5)

4. Blaue Taste für E-Mail: Digitaler Pin 0

5. Temperatursensor: Analoger Pin 1

6. Schalter: Digitaler Pin 11

Empfohlen: