Sisällysluettelo:

MATLAB -ohjattu mikro -ohjain (Arduino MKR1000): 4 vaihetta
MATLAB -ohjattu mikro -ohjain (Arduino MKR1000): 4 vaihetta

Video: MATLAB -ohjattu mikro -ohjain (Arduino MKR1000): 4 vaihetta

Video: MATLAB -ohjattu mikro -ohjain (Arduino MKR1000): 4 vaihetta
Video: Arduino DIY MeArm 4DOF Wooden Robotics Robot Arm Kit + SG90 / MG90s Servo Motor 2024, Marraskuu
Anonim
MATLAB -ohjattu mikrokontrolleri (Arduino MKR1000)
MATLAB -ohjattu mikrokontrolleri (Arduino MKR1000)

Hankkeemme tavoitteena oli hyödyntää MATLABia ja Arduino MKR1000: ta parhaan kykymme mukaan. Tavoitteenamme oli luoda käsikirjoitus, jonka avulla arduinon tietyt ominaisuudet voivat suorittaa tietyn tuloksen tietyn syötteen perusteella. Käytimme monia MATLABissa olevia silmukoita ja ehdollisia lausuntoja, jotka mahdollistivat tämän. Käytimme myös MATLAB mobilea käyttämällä mobiililaitteen gyroskoopista saatuja tietoja tehostaaksemme projektia mahdollisimman paljon.

Vaihe 1: Osat ja materiaalit

Osat ja materiaalit
Osat ja materiaalit
Osat ja materiaalit
Osat ja materiaalit
Osat ja materiaalit
Osat ja materiaalit

MATLAB 2018a

-MATLABin vuoden 2018 versio on suosituin versio, lähinnä siksi, että se toimii parhaiten mobiililaitteeseen yhdistettävän koodin kanssa. Suurin osa koodistamme voidaan kuitenkin tulkita useimmilla MATLAB -versioilla.

Arduino MKR1000

-Tämä on erityinen laite, jonka avulla voimme kytkeä piirit sekä digitaalisiin että analogisiin portteihin. On tärkeää, että sinulla on myös leipälauta sen mukana.

Lisätarvikkeet

-Kun käytimme MKR1000 -laitetta, tarvitsimme tarvikkeita tarvittavien toimintojen suorittamiseen.

Tämä sisältää

  1. Servo
  2. Painike (6)
  3. Vaihdettava RBG LED -valo
  4. Yksinkertaiset johdot
  5. leipälauta (t)
  6. mini virtakytkin
  7. lämpösensori
  8. 330 ohmin vastus
  9. 10K ohmin vastus
  10. USB-microUSB-johto
  11. Kannettava/pöytäkone
  12. Mobiililaite

On myös huomattava, että MKR1000: n kanssa voidaan käyttää monia muita lisävarusteita

Vaihe 2: MATLAB Arduino -tukipaketti

Jotta voit käyttää Arduino MKR1000 -laitetta oikein MATLABin kautta, sinun on ladattava Arduino -laitteiston MATLAB -tukipaketti. Tämä lataus antaa sinulle pääsyn tiettyihin toimintoihin ja komentoihin suoraan arduino -kortille.

Voit ladata paketin alla olevasta linkistä

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

Vaihe 3: Mobiililaitteelta hankittujen data -antureiden käyttäminen

Mobiililaitteelta hankittujen data -antureiden käyttäminen
Mobiililaitteelta hankittujen data -antureiden käyttäminen

MATLAB -mobiilisovelluksen avulla voimme käyttää mobiililaitetta datan suoratoistoon sen gyroskoopin avulla. Saadaksemme tiedot MATLABin kautta, saamme tiedot hakemalla ne MATLAB -mobiililaitteen orientointimatriisista. Teemme tämän luomalla muuttujan jokaiselle orientaatiomatriisin sarakkeelle (Azimuth, Pitch ja Roll) ja indeksoimalla jatkuvan arvovirran mobiililaitteesta tietokoneeseen. Tämän avulla voimme luoda ehdollisia lausuntoja, jotka muodostavat lähdön, jos MATLAB poimii tietyn datatulon mobiililaitteesta. Tätä varten tarvitset mobiililaitteellasi MATLAB -mobiililaitteen ja tietokoneellasi MATLAB -mobiililaitteiden tukipaketin.

Voit ladata tiedoston alla olevasta linkistä

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

Vaihe 4: Koodi ja johdotusportit

Koodi alkaa käynnistysviestillä, jossa kysytään, haluammeko käynnistää kodin turvalaitteen. Jos vastaamme kyllä ja annamme oikean salasanan, komentosarja hyppää heti hetken silmukkaan. Sieltä se alkaa kerätä tietoja mobiililaitteesta. On ehtoja, jotka lukevat nämä tiedot. Voimme avata ja lukita järjestelmän mobiililaitteeltamme, ja koodi kääntää servon ja vilkuttaa LED -valoa mobiililaitteesta saatujen tietojen mukaan

startup = questdlg ('Haluatko aktivoida ecoTECH Smart Home Energy System -järjestelmän?'); % Aloittaa ecoTECHwaitforin (käynnistyksen) aktivointisekvenssin; jos käynnistys == "Kyllä" % Jos "Kyllä" on valittu, aktivointisekvenssi alkaa ja tulee samalla kun silmukka lopussa power = "on"; m1 = msgbox ('ecoTECHin käynnistäminen …'); tauko (2); poista (m1); m1_wait = odotuspalkki (0, 'Odota …'); vaiheet = 25; i = 1: askeleet tauko (.1); odotuspalkki (i/vaiheet); % Päivittää odotuspalkin poiston (m1_wait); PASSCODE = [0 0 0 0]; % Alustaa salasanan ii = 0; % Alustaa muuttujan, jota käytetään murtumaan silmukoista m2 = msgbox ('ecoTECH täysin toiminnassa!'); tauko (2); poista (m2); elseif käynnistys == "Ei" || startup == "Peruuta" % Jos "Ei" tai "Peruuta" on valittu, aktivointisekvenssi ei käynnisty eikä tule samalla kun silmukka power = "off"; m3 = msgbox ('Okei! Hyvästi!'); tauko (2); poista (m3); loppuun

% ecoTECH toiminnassa -osa, kun taas totta, kun virta == "päällä" % Mobile Key -osa, kun taas true % Kerää tietoja mobiililaitteen rullaussuuntaan KEY = m. Orientation (3); % Kerää tietoja painikkeista b2 = readDigitalPin (a, 'D2'); % -Painike 2 (punainen) b3 = readDigitalPin (a, 'D3'); % -Painike 3 (valkoinen), jos AVAIN> = 35 % asteina m4 = msgbox ('Tervetuloa kotiin!'); writeDigitalPin (a, 'D8', 1); % Kytkee vihreän valon tauon (.5) päälle; writePosition (s, 1); % Kääntää servon avaamaan oven tauon (2); writeDigitalPin (a, 'D8', 0); % Sammuttaa vihreän valon poiston (m4); elseif AVAIN <= -35 % asteina m5 = msgbox ('Ovi lukittu!'); writeDigitalPin (a, 'D7', 1); % Kytkee punaisen valon tauon (.5) päälle; writePosition (s, 0); % Kääntää servon lukitsemaan oven tauon (2); writeDigitalPin (a, 'D7', 0); % Sammuttaa punaisen valon poiston (m5); ii = 1; tauko % Poistu, kun silmukka sisältää mobiiliavaimen, jos ovi on lukittu mobiililaitteella elseif b2 == 0 && b3 == 0 % Poistuu, kun silmukka sisältää mobiiliavaimen salasanan syöttämiseksi tauko loppu

Tämän jälkeen se voi siirtyä toiseen while -silmukkaan. Tämä kun silmukka ohjaa tuloksia painikkeiden tulojen perusteella. Jos ensimmäisen olon silmukka on vähäinen tai jos manuaalinen lukitus vaaditaan, se syöttää toisen samalla silmukan, jossa tarvitaan tietty salasana. Jos salasana on väärä, se käynnistää silmukan uudelleen

vaikka totta, jos ii == 1 % Poistuu, kun silmukka sisältää pääsykoodin, jos ovi avattiin mobiililaitteen taukopäällä % Kerää tietoja painikkeista b5 = readDigitalPin (a, 'D5'); % -Painike 5 (sininen) b1 = readDigitalPin (a, 'D1'); % -Painike 1 (musta) b4 = readDigitalPin (a, 'D4'); % -Painike 4 (valkoinen), jos b5 == 0 % Käynnistää salasanan syöttöosion b = 1: 5 m6 = msgbox ('Paina ja pidä painike painettuna'); tauko (2); poista (m6); % Kerää tietoja painikkeista b1 = readDigitalPin (a, 'D1'); % -Painike 1 (musta) b2 = readDigitalPin (a, 'D2'); % -Painike 2 (punainen) b3 = readDigitalPin (a, 'D3'); % -Painike 3 (valkoinen) b4 = readDigitalPin (a, 'D4'); % -Painike 4 (keltainen) b5 = readDigitalPin (a, 'D5'); % -Painike 5 (sininen) % Korvaa alkuperäisen salasanan arvot yksi kerrallaan, jos 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)); % Muuttaa painettujen painikkeiden sarjan numeroiksi ja muuntaa sen merkkijonon päätteeksi % Silmukan loppu salasanan numeroiden syöttämiseksi, jos PASSCODE == "2314" % Jos syötetty salasana täsmää, oven lukitus avautuu muutaman sekunnin ja sitten lukittuu m7 = msgbox ('Tervetuloa kotiin!'); writeDigitalPin (a, 'D8', 1); % Kytkee vihreän valon tauon (.5) päälle; writePosition (s, 1); % Kääntää servon avaamaan oven tauon (5); writeDigitalPin (a, 'D8', 0); % Sammuttaa vihreän valon tauon (.1); writeDigitalPin (a, 'D7', 1); % Kytkee punaisen valon tauon (.5) päälle; writePosition (s, 0); % Kääntää servon lukitsemaan oven tauon (1); writeDigitalPin (a, 'D7', 0); % Sammuttaa punaisen valon poiston (m7); ii = 1; break % Poistu, kun silmukka sisältää salasanan oikean salasanan syöttämisen jälkeen elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Kytkee punaisen valon päälle m8 = msgbox ('Virheellinen salasana! Yritä uudelleen!'); odottaa (m8) kirjoittaa Digitaalinen Pin (a, 'D7', 0); % Sammuttaa punaisen valon jatkamisen % Salli salasanan lopun syöttämisen uudelleen elseif b1 == 0 && b4 == 0 % Poistuu, kun silmukka sisältää pääsykoodiosan, jos et halua syöttää salasanaa ii = 1; katkaise loppu

Jos se on oikein, se siirtyy välittömästi hetken silmukkaan, joka ohjaa lämpötila -anturia. Jos kytkin on päällä, silmukka jatkuu läpi ja piirtää lämpötilan ja ajan kuvaajan, jolloin trendi voidaan nähdä. Jos lämpötila -anturiin liitettyä painiketta painetaan, se lähettää myös sähköpostiviestin, jossa kerrotaan, mikä on kotisi lämpötila. Jos kytkin on pois päältä, se lopettaa koodin välittömästi

t = 0; % Alkuaika = 0 sekunnin tauko (5) % Antaa käyttäjälle aikaa kytkeä lämpötilakytkin päälle SWITCH = readDigitalPin (a, 'D11'); % Kerää tietoja kytkimestä nastassa D11, kun SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Kerää tietoja kytkimestä nastassa D11 jännite = lukuVoltage (a, 'A1'); % Lue jännite lämpötila -anturista temp_C = (jännite.*1000 - 500)./10; % Muuntaa jännitteen lämpötilaksi ° C temp_F = (9/5).*Temp_C + 32; % Muuntaa ° C: sta ° F kuvaajaksi (t, temp_C, 'b.') Hold on title ('Huoneen lämpötila'); xlabel ('Aika sekunneissa'); ylabel ('Lämpötila'); akseli ([0, 180, 0, 100]); kaavio (t, temp_F, 'r.') selite ('Lämpötila ° C', 'Lämpötila ° F') tauko (1); t = t + 1; % Aikalaskuri sekunneissa % Sähköpostiosio b_temp = readDigitalPin (a, 'D0'); % Kerää (sinisen) lämpötilapainikkeen tiedot nastaan D0, jos b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'Sähköposti', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); % Lähettäjän käyttäjätunnus setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Lähettäjän salasanatarvikkeet = 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 ('Nykyinen huonelämpötila on %.1f ° C tai %.1f ° F.', temp_C, temp_F)); % Lähettää vastaanottajalle sähköpostiviestin, joka antaa tietoja nykyisestä huonelämpötilasta fprintf ('Sähköposti lähetetty onnistuneesti! / N') loppu, jos temp_F> = 75 % Jos huonelämpötila nousee 75 ° F… temp_AC = 65; % Muuttaa termostaatin lämpötilan arvoon 65 ° F elseif temp_F <= 65 % Jos huonelämpötila laskee 60 ° F… temp_AC = 80; % Muuttaa termostaatin lämpötilan 80 ° F: n päähän % "KYTKIMEN == 0" loppu, kun silmukka, jos virta == "pois" || ii == 1 % Poistuu "virta == päällä", kun silmukkatko päättyy loppuun % "Virta == päällä", kun silmukka, jos virta == "pois" || ii == 1 % Poistu kokonaan, kun silmukkatko päättyy

Tämä oli vain lyhyt katsaus koodiin ja sen toimivuuteen. Olemme liittäneet koko koodin pdf -tiedostona tarvittaessa

Tässä on luettelo siitä, mihin porttiin kukin laite on kytketty

1. RGB -LED: digitaaliset nastat (7, 8, 9)

2. Servo: Digitaalinen nasta 6

3. Painikkeet: Digitaaliset nastat (1, 2, 3, 4, 5)

4. Sininen painike sähköpostille: Digitaalinen nasta 0

5. Lämpötila -anturi: analoginen nasta 1

6. Kytkin: Digitaalinen nasta 11

Suositeltava: