Tartalomjegyzék:

MATLAB vezérelt mikrokontroller (Arduino MKR1000): 4 lépés
MATLAB vezérelt mikrokontroller (Arduino MKR1000): 4 lépés

Videó: MATLAB vezérelt mikrokontroller (Arduino MKR1000): 4 lépés

Videó: MATLAB vezérelt mikrokontroller (Arduino MKR1000): 4 lépés
Videó: Episode 01: MATLAB link to Arduino (MATLAB GUI interfacing with Arduino) 2024, November
Anonim
MATLAB vezérelt mikrokontroller (Arduino MKR1000)
MATLAB vezérelt mikrokontroller (Arduino MKR1000)

Projektünk célja az volt, hogy a legjobb tudásunk szerint használjuk a MATLAB -ot, valamint az Arduino MKR1000 -et. Célunk egy olyan szkript létrehozása volt, amely lehetővé tette az arduino bizonyos funkciói számára, hogy egy bizonyos bemenet alapján előállítsanak egy bizonyos kimenetet. A MATLAB számos ciklusát és feltételes állítását használtuk, amelyek ezt lehetővé tették. A MATLAB mobile -t is használtuk a mobileszköz giroszkópjából származó adatok felhasználásával, hogy a lehető legjobban javítsuk a projektet.

1. lépés: Alkatrészek és anyagok

Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok

MATLAB 2018a

-A MATLAB 2018 -as verziója a legelőnyösebb verzió, leginkább azért, mert a legjobban működik a mobilkészülékhez csatlakozó kóddal. Kódunk nagy része azonban a MATLAB verziók többségével értelmezhető.

Arduino MKR1000

-Ez egy speciális eszköz, amely lehetővé teszi számunkra az áramkörök vezetését mind a digitális, mind az analóg portokhoz. Létfontosságú, hogy legyen hozzá kenyérlapja is.

kiegészítők

-Az MKR1000 használatakor kiegészítő alkatrészekre volt szükségünk a szükséges funkciók ellátásához.

Ebbe beletartozik

  1. Szervo
  2. Gomb (6)
  3. Cserélhető RBG LED lámpa
  4. Egyszerű vezetékek
  5. kenyeretábla (k)
  6. mini tápkapcsoló
  7. hőmérséklet szenzor
  8. 330 ohmos ellenállás
  9. 10K ohmos ellenállás
  10. USB-microUSB kábel
  11. Laptop/asztali számítógép
  12. Mobil eszköz

Azt is meg kell jegyezni, hogy még sok -sok kiegészítő használható az MKR1000 készülékkel

2. lépés: MATLAB Arduino támogatási csomag

Az Arduino MKR1000 és a MATLAB közötti megfelelő használathoz le kell töltenie a MATLAB támogatási csomagot az Arduino hardverhez. Ez a letöltés hozzáférést biztosít bizonyos funkciókhoz és parancsokhoz közvetlenül az arduino táblához.

A csomagot letöltheti az alábbi linkről

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

3. lépés: A mobileszközről beszerzett adatérzékelők használata

Mobileszközről beszerzett adatérzékelők használata
Mobileszközről beszerzett adatérzékelők használata

A MATLAB Mobile alkalmazás lehetővé teszi számunkra, hogy mobil eszközt használjunk giroszkóp segítségével az adatok továbbítására. Ahhoz, hogy az adatokat a MATLAB -on keresztül szerezzük be, az adatokat úgy kapjuk meg, hogy lekérjük őket a MATLAB mobile tájolási mátrixából. Ehhez az orientációs mátrix minden oszlopához (Azimuth, Pitch és Roll) hozzunk létre egy változót, és indexeljük az állandó értékfolyamot a mobileszközről a számítógépre. Ez lehetővé teszi számunkra, hogy feltételes utasításokat hozzunk létre, amelyek előformázzák a kimenetet, ha a MATLAB felvesz egy adott adatbevitelt a mobileszközről. Ehhez szüksége lesz a MATLAB mobilra a mobileszközén, és a MATLAB mobileszköz -támogatási csomagra a számítógépén.

A fájlt letöltheti az alábbi linkről

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

4. lépés: A kód és a kábelezési portok

A kód egy indítási üzenettel kezdődik, amely megkérdezi, szeretnénk -e elindítani otthoni biztonsági eszközünket. Ha igennel válaszolunk, és megadjuk a helyes jelszót, a szkript azonnal beugrik a while ciklusba. Innentől kezdve adatokat gyűjt a mobileszközről. Vannak feltételes feltételek, amelyek olvassák ezeket az adatokat. Feloldhatjuk és lezárhatjuk a rendszert a mobileszközünkről, és a kód a szervót bekapcsolja, és villogni kezd a LED -fény a mobileszközről kapott adatoktól függően

startup = questdlg ('Szeretné aktiválni az ecoTECH Smart Home Energy System rendszert?'); % Kezdi az ecoTECHwaitfor (indítás) aktiválási sorrendjét; ha indítás == "Igen" % Ha az "Igen" lehetőséget választja, akkor egy aktiválási sorozat kezdődik és belép a while ciklusba a végén power = "on"; m1 = msgbox ('Az ecoTECH indítása …'); szünet (2); törlés (m1); m1_wait = waitbar (0, 'Kérem várjon …'); lépések = 25; i = 1 esetén: lépések szüneteltetése (.1); várólista (i/lépések); % Frissíti a várakozó sáv törlését (m1_wait); PASSCODE = [0 0 0 0]; % Inicializálja a jelszót ii = 0; % Inicializálja a ciklusokból való kitöréshez használt változót m2 = msgbox ('ecoTECH teljesen működőképes!'); szünet (2); törlés (m2); elseif indítás == "Nem" || startup == "Mégse" % Ha a "Nem" vagy a "Mégse" lehetőséget választja, akkor az aktiválási sorozat nem indul el, és nem lép be a while ciklus tápellátásába = "ki"; m3 = msgbox ('Oké! Viszlát!'); szünet (2); törlés (m3); vége

% ecoTECH a Action részben, miközben igaz, miközben bekapcsolt állapotban == "on" % Mobile Key Section, míg true % Adatokat gyűjt a mobileszköz forgásirányáról KEY = m. Orientation (3); % Adatokat gyűjt a gombokról b2 = readDigitalPin (a, 'D2'); % Button 2 (Red) b3 = readDigitalPin (a, 'D3'); % Gomb 3 (fehér), ha KEY> = 35 % fokban m4 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1); % Bekapcsolja a zöld fényszünetet (.5); writePosition (s, 1); % Elforgatja a szervót az ajtó szünetének feloldásához (2); writeDigitalPin (a, 'D8', 0); % Kikapcsolja a zöld fény törlését (m4); elseif KULCS <= -35 % m5 fokban = msgbox ('Ajtó zárva!'); writeDigitalPin (a, 'D7', 1); % Bekapcsolja a piros fényszünetet (.5); writePosition (s, 0); % Elforgatja a szervót, hogy lezárja az ajtó szüneteltetését (2); writeDigitalPin (a, 'D7', 0); % Kikapcsolja a piros lámpa törlését (m5); ii = 1; break % Kilépés, miközben a hurok tartalmazza a mobilkulcsot, ha az ajtó zárva van a mobileszköz használatával ifif b2 == 0 && b3 == 0 % Kilép, miközben a mobilkulcsot tartalmazó hurok belép a jelszó szakasz törés vége vége

Ezt követően beléphet egy másik while ciklusba. Ez a ciklus a gombok bemenetei alapján szabályozza az eredményeket. Ha az első while ciklus elhanyagolható, vagy manuális lezárásra van szükség, akkor egy másik while ciklusba lép, ahol egy adott jelszó szükséges. Ha a jelszó helytelen, akkor újraindítja a ciklust

míg igaz, ha ii == 1 % Kilép, miközben a jelkódot tartalmazó hurok, ha az ajtót kinyitották a mobileszközön break end % Adatokat gyűjt a b5 = readDigitalPin (a, 'D5') gombokról; % 5. gomb (kék) b1 = readDigitalPin (a, 'D1'); % Button 1 (Black) b4 = readDigitalPin (a, 'D4'); % 4 gomb (fehér), ha b5 == 0 % Elindítja a jelszó bevitelét b = 1: 5 esetén m6 = msgbox ('Please Press And Hold A Button'); szünet (2); törlés (m6); % Adatokat gyűjt a gombokról b1 = readDigitalPin (a, 'D1'); % Button 1 (Black) b2 = readDigitalPin (a, 'D2'); % Button 2 (Red) b3 = readDigitalPin (a, 'D3'); % Button 3 (White) b4 = readDigitalPin (a, 'D4'); % 4 gomb (sárga) b5 = readDigitalPin (a, 'D5'); % Gomb 5 (kék) % Egyenként helyettesíti a kezdeti jelszó értékeit, ha 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)); % A megnyomott gombok sorozatát számokká alakítja, majd karakterlánc végévé alakítja % Vége ciklusnak a számkódok beviteléhez, ha PASSCODE == "2314" % Ha a megadott jelszó megegyezik, az ajtó néhány másodpercre kinyílik, majd zár m7 = msgbox ('Üdv itthon!'); writeDigitalPin (a, 'D8', 1); % Bekapcsolja a zöld fényszünetet (.5); writePosition (s, 1); % Elforgatja a szervót az ajtó szünetének feloldásához (5); writeDigitalPin (a, 'D8', 0); % Kikapcsolja a zöld fényszünetet (.1); writeDigitalPin (a, 'D7', 1); % Bekapcsolja a piros fényszünetet (.5); writePosition (s, 0); % Elforgatja a szervót, hogy lezárja az ajtó szüneteltetését (1); writeDigitalPin (a, 'D7', 0); % Kikapcsolja a piros lámpa törlését (m7); ii = 1; break % Kilép, miközben a jelkódot tartalmazó hurok a helyes jelszó megadása után elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Bekapcsolja a piros lámpát m8 = msgbox ('Helytelen jelszó! Próbálja újra!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Kikapcsolja a piros lámpa folytatását % Lehetővé teszi a jelszó újbóli megadását elseif b1 == 0 && b4 == 0 % Kilép a jelkódot tartalmazó ciklusból, ha nem akar belépni jelszót ii = 1; törés vége vége

Ha helyes, akkor azonnal belép egy időhurokba, amely a hőmérséklet -érzékelőt vezérli. Ha a kapcsoló be van kapcsolva, a hurok folytatódik, és ábrázolja a hőmérséklet és az idő diagramját, lehetővé téve a tendencia megtekintését. Ha megnyomja a hőmérséklet -érzékelőhöz csatlakoztatott gombot, akkor e -mailt is küld arról, hogy mennyi az otthoni hőmérséklet. Ha a kapcsoló ki van kapcsolva, akkor azonnal leáll a kód

t = 0; % Kezdeti idő = 0 másodperces szünet (5) % Időt ad a felhasználónak a hőmérséklet -kapcsoló bekapcsolásához SWITCH = readDigitalPin (a, 'D11'); % Adatokat gyűjt a D11 érintkező kapcsolójáról, míg SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Adatokat gyűjt a D11 érintkezőben lévő kapcsolóról feszültség = readVoltage (a, 'A1'); % Feszültséget olvas ki a hőmérséklet -érzékelőből temp_C = (feszültség.*1000 - 500)./ 10; % Átalakítja a feszültséget hőmérsékletre ° C -ban temp_F = (9/5).*Temp_C + 32; % ° C -ból ° F grafikonra konvertálja (t, temp_C, 'b.') Hold on title ('Szobahőmérséklet'); xlabel ('Idő másodpercben'); ylabel ('Hőmérséklet'); tengely ([0, 180, 0, 100]); plot (t, temp_F, 'r.') jelmagyarázat ('Temperature in ° C', 'Temperature in ° F') szünet (1); t = t + 1; % Időszámláló másodpercben % E-mail szakasz b_temp = readDigitalPin (a, 'D0'); % Gyűjti a (kék) hőmérséklet gomb adatait a D0 érintkezőben, ha b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); % Feladó felhasználóneve setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Feladó jelszava props = 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 szobahőmérséklet', sprintf ('Az aktuális szobahőmérséklet %.1f ° C vagy %.1f ° F.', temp_C, temp_F)); % E-mailt küld a címzettnek, amelyben adatokat ad az aktuális szobahőmérsékletről. % A termosztát hőmérsékletét 65 ° F -ra változtatja, elseif temp_F <= 65 % Ha a helyiség hőmérséklete 60 ° F -ra csökken… temp_AC = 80; % Módosítja a hőmérsékletet a termosztáton 80 ° F végére % "SWITCH == 0" vége ciklusban, ha áram == "kikapcsolt" || ii == 1 % Kilép a "bekapcsolás == be" ciklus megszakítás vége vége % A "bekapcsolás == be" vége ciklus közben, ha a tápfeszültség == "ki" || ii == 1 % Teljes kilépés, miközben a ciklus megszakítása véget ér

Ez csak egy rövid áttekintés volt a kódról és annak működőképességéről. Szükség esetén a teljes kódot pdf -ben csatoltuk

Itt található az egyes eszközökhöz csatlakoztatott portok listája

1. RGB LED: Digitális csapok (7, 8, 9)

2. Szervo: Digitális pin 6

3. Gombok: Digitális csapok (1, 2, 3, 4, 5)

4. Kék gomb e -mailhez: Digitális Pin 0

5. Hőmérséklet érzékelő: 1. analóg csap

6. Kapcsoló: Digitális Pin 11

Ajánlott: