Πίνακας περιεχομένων:

Ελεγχόμενος μικροελεγκτής MATLAB (Arduino MKR1000): 4 βήματα
Ελεγχόμενος μικροελεγκτής MATLAB (Arduino MKR1000): 4 βήματα

Βίντεο: Ελεγχόμενος μικροελεγκτής MATLAB (Arduino MKR1000): 4 βήματα

Βίντεο: Ελεγχόμενος μικροελεγκτής MATLAB (Arduino MKR1000): 4 βήματα
Βίντεο: Arduino project LED dome w/Matlab code 2024, Νοέμβριος
Anonim
Ελεγχόμενος μικροελεγκτής MATLAB (Arduino MKR1000)
Ελεγχόμενος μικροελεγκτής MATLAB (Arduino MKR1000)

Ο στόχος του έργου μας ήταν να χρησιμοποιήσουμε το MATLAB καθώς και το Arduino MKR1000 στο μέγιστο των δυνατοτήτων μας. Ο στόχος μας ήταν να δημιουργήσουμε ένα σενάριο που να επιτρέπει σε ορισμένα χαρακτηριστικά του arduino να εκτελούν μια συγκεκριμένη έξοδο με βάση μια συγκεκριμένη είσοδο. Χρησιμοποιήσαμε πολλούς βρόχους και δηλώσεις υπό όρους που εμφανίζονται στο MATLAB που το έκαναν αυτό δυνατό. Χρησιμοποιήσαμε επίσης το MATLAB mobile χρησιμοποιώντας δεδομένα που αποκτήθηκαν από το γυροσκόπιο μιας κινητής συσκευής για να βελτιώσουμε το έργο όσο το δυνατόν περισσότερο.

Βήμα 1: Μέρη και υλικά

Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά

MATLAB 2018α

-Η έκδοση 2018 του MATLAB είναι η πιο προτιμώμενη έκδοση, κυρίως επειδή λειτουργεί καλύτερα με τον κωδικό που συνδέεται με την κινητή συσκευή. Ωστόσο, το μεγαλύτερο μέρος του κώδικα μας μπορεί να ερμηνευτεί από την πλειοψηφία των εκδόσεων MATLAB.

Arduino MKR1000

-Αυτή είναι μια συγκεκριμένη συσκευή που μας επιτρέπει να συνδέουμε κυκλώματα μέχρι και σε ψηφιακές και ανάλογες θύρες. Είναι ζωτικής σημασίας να έχετε επίσης ένα breadboard για να το πάτε μαζί του.

αξεσουάρ

-Όταν χρησιμοποιούσαμε το MKR1000, χρειαζόμασταν εξαρτήματα για να εκτελέσουμε τις απαραίτητες λειτουργίες.

Αυτό περιλαμβάνει

  1. Servo
  2. Κουμπί (6)
  3. Εναλλάξιμο φως RBG LED
  4. Απλά σύρματα
  5. σανίδα ψωμιού
  6. μίνι διακόπτης ισχύος
  7. αισθητήρας θερμοκρασίας
  8. Αντίσταση 330 ohm
  9. Αντίσταση 10K ohm
  10. Καλώδιο USB-microUSB
  11. Laptop/desktop
  12. Κινητή συσκευή

Πρέπει επίσης να σημειωθεί ότι υπάρχουν πολλά, πολλά περισσότερα αξεσουάρ που μπορούν να χρησιμοποιηθούν με το MKR1000

Βήμα 2: Πακέτο υποστήριξης MATLAB Arduino

Για να χρησιμοποιήσετε σωστά το Arduino MKR1000 μέσω MATLAB, πρέπει να κάνετε λήψη του πακέτου υποστήριξης MATLAB για υλικό Arduino. Αυτή η λήψη σάς δίνει πρόσβαση σε ορισμένες λειτουργίες και εντολές απευθείας στον πίνακα arduino.

Μπορείτε να κατεβάσετε το πακέτο στον παρακάτω σύνδεσμο

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

Βήμα 3: Χρήση αισθητήρων δεδομένων που αποκτήθηκαν από κινητή συσκευή

Χρήση αισθητήρων δεδομένων που αποκτήθηκαν από κινητή συσκευή
Χρήση αισθητήρων δεδομένων που αποκτήθηκαν από κινητή συσκευή

Η εφαρμογή MATLAB Mobile μας επιτρέπει να χρησιμοποιούμε μια κινητή συσκευή για ροή δεδομένων χρησιμοποιώντας το γυροσκόπιο της. Για την απόκτηση των δεδομένων μέσω του MATLAB, λαμβάνουμε τα δεδομένα με ανάκτηση από τη μήτρα προσανατολισμού από το κινητό MATLAB. Το κάνουμε αυτό δημιουργώντας μια μεταβλητή για κάθε στήλη του πίνακα προσανατολισμού (Azimuth, Pitch και Roll) και ευρετηριάζοντας τη σταθερή ροή τιμών από την κινητή συσκευή στον υπολογιστή. Αυτό μας επιτρέπει να δημιουργήσουμε δηλώσεις υπό όρους που θα σχηματίσουν μια έξοδο εάν το MATLAB λάβει μια συγκεκριμένη είσοδο δεδομένων από την κινητή συσκευή. Για να το κάνετε αυτό, θα χρειαστείτε το κινητό MATLAB στην κινητή συσκευή σας και το πακέτο υποστήριξης κινητής συσκευής για MATLAB στον υπολογιστή σας.

Μπορείτε να κατεβάσετε το αρχείο στον παρακάτω σύνδεσμο

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

Βήμα 4: Ο κώδικας και οι θύρες καλωδίωσης

Ο κώδικας ξεκινά με ένα μήνυμα εκκίνησης που μας ρωτά εάν θέλουμε να ξεκινήσουμε τη συσκευή ασφαλείας στο σπίτι μας. Αν απαντήσουμε ναι και δώσουμε τον σωστό κωδικό πρόσβασης, το σενάριο μεταβαίνει αμέσως σε ένα βρόχο while. Από εκεί, αρχίζει να συλλέγει δεδομένα από την κινητή συσκευή. Υπάρχουν όροι που διαβάζουν αυτά τα δεδομένα. Μπορούμε να ξεκλειδώσουμε και να κλειδώσουμε το σύστημα από την κινητή συσκευή μας και ο κωδικός θα γυρίσει το σερβο και θα αναβοσβήνει το φως LED ανάλογα με τα δεδομένα από την κινητή συσκευή

startup = questdlg ("Θα θέλατε να ενεργοποιήσετε το ecoTECH Smart Home Energy System;"); % Αρχίζει την ακολουθία ενεργοποίησης του ecoTECHwaitfor (εκκίνηση). αν ξεκινήσει == "Ναι" % Εάν επιλεγεί "Ναι", ξεκινά μια ακολουθία ενεργοποίησης και εισέρχεται στον βρόχο while στην τελική ισχύ = "on"; m1 = msgbox ('Εκκίνηση ecoTECH…'); παύση (2)? διαγραφή (m1); m1_wait = γραμμή αναμονής (0, 'Παρακαλώ περιμένετε…'); βήματα = 25; για i = 1: βήματα παύση (.1); γραμμή αναμονής (i/βήματα). % Ενημερώνει το τέλος διαγραφής της γραμμής αναμονής (m1_wait). Κωδικός πρόσβασης = [0 0 0 0]; % Αρχικοποιεί τον κωδικό πρόσβασης ii = 0; % Αρχικοποιεί μια μεταβλητή που χρησιμοποιείται για την έξοδο από τους βρόχους m2 = msgbox ('ecoTECH πλήρως λειτουργικό!'); παύση (2)? διαγραφή (m2); elseif εκκίνηση == "Όχι" || εκκίνηση == "Ακύρωση" % Εάν έχει επιλεγεί "Όχι" ή "Ακύρωση", τότε η ακολουθία ενεργοποίησης δεν ξεκινά και δεν εισέρχεται στο κύκλωμα while power = "off"; m3 = msgbox ('Εντάξει! Αντίο!'); παύση (2)? διαγραφή (m3); τέλος

% ecoTECH στην ενότητα Ενέργεια ενώ είναι αληθινή ενώ η ισχύς == "on" % Mobile Key Section while true % Συλλέγει δεδομένα σχετικά με τον προσανατολισμό Roll της κινητής συσκευής KEY = m. Προσανατολισμός (3); % Συλλέγει δεδομένα σχετικά με τα κουμπιά b2 = readDigitalPin (a, 'D2'); % Κουμπί 2 (Κόκκινο) b3 = readDigitalPin (a, 'D3'); % Κουμπί 3 (Λευκό) εάν KEY> = 35 % σε μοίρες m4 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1)? % Ενεργοποιεί την παύση του πράσινου φωτός (.5). writePosition (s, 1); % Γυρίζει το σερβο για να ξεκλειδώσει την παύση της πόρτας (2). writeDigitalPin (a, 'D8', 0)? % Απενεργοποιεί τη διαγραφή του πράσινου φωτός (m4). elseif KEY <= -35 % σε μοίρες m5 = msgbox ("Κλειδωμένη πόρτα!"); writeDigitalPin (a, 'D7', 1)? % Ενεργοποιεί την παύση του κόκκινου φωτός (.5). writePosition (s, 0); % Γυρίζει το σερβο για να κλειδώσει την παύση της πόρτας (2). writeDigitalPin (a, 'D7', 0)? % Απενεργοποιεί τη διαγραφή κόκκινου φωτός (m5). ii = 1; διάλειμμα % Έξοδος ενώ ο βρόχος που περιέχει το κλειδί κινητής τηλεφωνίας εάν η πόρτα είναι κλειδωμένη χρησιμοποιώντας την κινητή συσκευή elseif

Μετά από αυτό, μπορεί να εισάγει έναν άλλο βρόχο while. Αυτός ο βρόχος while ελέγχει τα αποτελέσματα με βάση τις εισόδους από τα κουμπιά. Εάν ο πρώτος βρόχος while είναι αμελητέος ή απαιτείται χειροκίνητο κλείδωμα, θα εισαγάγει έναν άλλο βρόχο while όπου απαιτείται ένας συγκεκριμένος κωδικός πρόσβασης. Εάν ο κωδικός πρόσβασης είναι λανθασμένος, θα επανεκκινήσει τον βρόχο

ενώ είναι αληθές εάν ii == 1 % Βγαίνει ενώ ο βρόχος που περιέχει κωδικό πρόσβασης εάν η πόρτα ήταν ξεκλειδωμένη με το τέλος της κινητής συσκευής % Συλλέγει δεδομένα σχετικά με τα κουμπιά b5 = readDigitalPin (a, 'D5'); % Κουμπί 5 (Μπλε) b1 = readDigitalPin (a, 'D1'); % Κουμπί 1 (Μαύρο) b4 = readDigitalPin (a, 'D4'); % Κουμπί 4 (Λευκό) αν b5 == 0 % Ξεκινά την εισαγωγή κωδικού πρόσβασης στην ενότητα b = 1: 5 m6 = msgbox ('Please Press And Hold A Button'); παύση (2)? διαγραφή (m6); % Συλλέγει δεδομένα σχετικά με τα κουμπιά b1 = readDigitalPin (a, 'D1'); % Κουμπί 1 (Μαύρο) b2 = readDigitalPin (a, 'D2'); % Κουμπί 2 (Κόκκινο) b3 = readDigitalPin (a, 'D3'); % Κουμπί 3 (Λευκό) b4 = readDigitalPin (a, 'D4'); % Κουμπί 4 (Κίτρινο) b5 = readDigitalPin (a, 'D5'); % Κουμπί 5 (Μπλε) % Αντικαθιστά τις τιμές στον αρχικό κωδικό πρόσβασης μία κάθε φορά εάν b1 == 0 0 Κωδικός πρόσβασης (0+β) = 1; elseif b2 == 0 0 Κωδικός πρόσβασης (0+β) = 2; elseif b3 == 0 0 Κωδικός πρόσβασης (0+β) = 3; elseif b4 == 0 Κωδικός πρόσβασης (0+β) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.0f%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Μετατρέπει την ακολουθία των κουμπιών που πιέζονται σε αριθμούς και στη συνέχεια τη μετατρέπει σε τέλος συμβολοσειράς % Τέλος βρόχου για εισαγωγή ψηφίων για κωδικό πρόσβασης εάν PASSCODE == "2314" % Εάν ο κωδικός πρόσβασης που πληκτρολογήθηκε ταιριάζει τότε η πόρτα ξεκλειδώνει για μερικά δευτερόλεπτα και μετά κλειδώνει m7 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1)? % Ενεργοποιεί την παύση του πράσινου φωτός (.5). writePosition (s, 1); % Γυρίζει το σερβο για να ξεκλειδώσει την παύση της πόρτας (5). writeDigitalPin (a, 'D8', 0)? % Απενεργοποιεί την παύση του πράσινου φωτός (.1). writeDigitalPin (a, 'D7', 1)? % Ενεργοποιεί την παύση του κόκκινου φωτός (.5). writePosition (s, 0); % Γυρίζει το σερβο για να κλειδώσει την παύση της πόρτας (1). writeDigitalPin (a, 'D7', 0)? % Απενεργοποιεί τη διαγραφή κόκκινου φωτός (m7). ii = 1; break % Έξοδος ενώ ο βρόχος που περιέχει κωδικό πρόσβασης μετά την εισαγωγή του σωστού κωδικού πρόσβασης elseif PASSCODE = "2314" writeDigitalPin (a, 'D7', 1); % Ανάβει το κόκκινο φως m8 = msgbox ('Λάθος κωδικός πρόσβασης! Δοκιμάστε ξανά!'); waitfor (m8) writeDigitalPin (a, 'D7', 0)? % Απενεργοποιεί τη συνέχιση του κόκκινου φωτός % Σας επιτρέπει να εισάγετε ξανά ένα τέλος κωδικού πρόσβασης διάλειμμα τέλος τέλος

Εάν είναι σωστό, θα εισέλθει αμέσως σε ένα βρόχο while που ελέγχει τον αισθητήρα θερμοκρασίας. Εάν ο διακόπτης είναι ενεργοποιημένος, ο βρόχος θα συνεχίσει και θα σχεδιάσει τη θερμοκρασία έναντι του χρόνου, επιτρέποντας σε κάποιον να δει την τάση. Εάν πατήσετε το κουμπί που είναι συνδεδεμένο στον αισθητήρα θερμοκρασίας, θα σας στείλει επίσης ένα μήνυμα ηλεκτρονικού ταχυδρομείου που θα σας λέει ποια είναι η θερμοκρασία στο "σπίτι" σας. Εάν ο διακόπτης είναι απενεργοποιημένος, θα τερματίσει αμέσως τον κωδικό

t = 0; % Αρχικός χρόνος = 0 δευτερόλεπτα παύση (5) % Δίνει χρόνο στο χρήστη να ενεργοποιήσει το διακόπτη θερμοκρασίας SWITCH = readDigitalPin (a, 'D11'); % Συλλέγει δεδομένα σχετικά με τον διακόπτη στην ακίδα D11 ενώ SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Συλλέγει δεδομένα σχετικά με τον διακόπτη στην τάση ακίδων D11 = readVoltage (a, 'A1'). % Διαβάζει την τάση από τον αισθητήρα θερμοκρασίας temp_C = (τάση.*1000 - 500)./ 10; % Μετατρέπει την τάση σε θερμοκρασία σε ° C temp_F = (9/5).*Temp_C + 32; % Μετατρέπει από ° C σε ° F διάγραμμα (t, temp_C, 'b.') Κρατήστε πατημένο τον τίτλο ('Θερμοκρασία δωματίου'). xlabel ("Time in Seconds"); ylabel ("Θερμοκρασία"); άξονας ([0, 180, 0, 100]); διάγραμμα (t, temp_F, 'r.') legend ('Temperature in ° C', 'Temperature in ° F') pause (1); t = t + 1; % Μετρητής χρόνου σε δευτερόλεπτα % E-mail Section b_temp = readDigitalPin (a, 'D0'); % Συλλέγει τα δεδομένα του (μπλε) κουμπιού θερμοκρασίας στην ακίδα D0 αν b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'). setpref («Διαδίκτυο», «E_mail», «[email protected]») % Αποστολέας setpref ("Διαδίκτυο", "SMTP_Username", "[email protected]"); % Όνομα χρήστη αποστολέα setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Κωδικός πρόσβασης αποστολέα = 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 Θερμοκρασία δωματίου ', sprintf (' Η τρέχουσα θερμοκρασία δωματίου είναι %.1f ° C ή %.1f ° F. ', temp_C, temp_F)); % Στέλνει ένα μήνυμα ηλεκτρονικού ταχυδρομείου στον παραλήπτη δίνοντας δεδομένα για την τρέχουσα θερμοκρασία δωματίου fprintf ('Το μήνυμα ηλεκτρονικού ταχυδρομείου στάλθηκε επιτυχώς! / N') λήγει εάν temp_F> = 75 % Εάν η θερμοκρασία δωματίου αυξηθεί στους 75 ° F… temp_AC = 65; % Αλλάζει τη θερμοκρασία στον θερμοστάτη σε 65 ° F elseif temp_F <= 65 % Εάν η θερμοκρασία δωματίου μειωθεί στους 60 ° F… temp_AC = 80; % Αλλάζει τη θερμοκρασία στο θερμοστάτη σε 80 ° F τέλος τέλος % Τέλος "SWITCH == 0" ενώ ο βρόχος αν τροφοδοτείται == "off" || ii == 1 % Έξοδος "power == on" while end loop end end end % End of "power == on" while loop if power == "off" || ii == 1 % Έξοδος ολόκληρο ενώ το βρόχο διακόπτει το τέλος

Αυτή ήταν μόνο μια σύντομη επισκόπηση του κώδικα και της λειτουργικότητάς του. Έχουμε επισυνάψει τον πλήρη κώδικα ως pdf αν χρειαστεί

Ακολουθεί η λίστα με ποια θύρα είναι συνδεδεμένη κάθε συσκευή

1. LED RGB: Digitalηφιακές ακίδες (7, 8, 9)

2. Servo: Digitalηφιακή ακίδα 6

3. Κουμπιά: Digitalηφιακές ακίδες (1, 2, 3, 4, 5)

4. Μπλε κουμπί για email: Digital Pin 0

5. Αισθητήρας θερμοκρασίας: Αναλογική ακίδα 1

6. Διακόπτης: Digitalηφιακή ακίδα 11

Συνιστάται: