Sadržaj:
- Korak 1: Dijelovi i materijali
- Korak 2: MATLAB Arduino paket podrške
- Korak 3: Korištenje senzora podataka dobivenih s mobilnog uređaja
- Korak 4: Kôd i priključci ožičenja
Video: MATLAB kontrolirani mikrokontroler (Arduino MKR1000): 4 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
Cilj našeg projekta bio je upotrijebiti MATLAB kao i Arduino MKR1000 koliko smo mogli. Naš cilj je bio stvoriti skriptu koja je omogućila određenim značajkama arduina da izvedu određeni izlaz na temelju određenog unosa. Koristili smo mnoge petlje i uvjetne izraze predstavljene u MATLAB -u koji su to omogućili. Također smo koristili MATLAB mobile koristeći podatke prikupljene s žiroskopa mobilnog uređaja kako bismo poboljšali projekt što je više moguće.
Korak 1: Dijelovi i materijali
MATLAB 2018a
-Matlab verzija za 2018. najpopularnija je verzija, ponajviše zato što najbolje radi s kodom koji se povezuje s mobilnim uređajem. Međutim, većina našeg koda može se tumačiti u većini verzija MATLAB -a.
Arduino MKR1000
-Ovo je poseban uređaj koji nam omogućuje povezivanje krugova do digitalnih i analognih priključaka. Od vitalnog je značaja da uz to imate i osnovnu ploču.
Pribor
-Kada smo koristili MKR1000, bili su nam potrebni dodatni dijelovi kako bismo izvršili potrebne funkcije.
Ovo uključuje
- Servo
- Gumb (6)
- Izmjenjivo RBG LED svjetlo
- Jednostavne žice
- matična ploča
- mini prekidač za napajanje
- senzor temperature
- Otpornik od 330 ohma
- 10K ohmski otpornik
- USB-microUSB kabel
- Laptop/desktop
- Mobilni uređaj
Također treba napomenuti da postoji mnogo, mnogo više dodatne opreme koja se može koristiti s MKR1000
Korak 2: MATLAB Arduino paket podrške
Da biste ispravno koristili Arduino MKR1000 putem MATLAB -a, morate preuzeti MATLAB paket za podršku za Arduino hardver. Ovo preuzimanje omogućuje vam pristup određenim funkcijama i naredbama izravno na arduino ploču.
Paket možete preuzeti na donjoj poveznici
www.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware
Korak 3: Korištenje senzora podataka dobivenih s mobilnog uređaja
Mobilna aplikacija MATLAB omogućuje nam korištenje mobilnog uređaja za prijenos podataka pomoću njegovog žiroskopa. Za prikupljanje podataka putem MATLAB -a, podatke dobivamo preuzimanjem iz orijentacijske matrice s MATLAB mobile. To činimo stvaranjem varijable za svaki stupac orijentacijske matrice (Azimuth, Pitch i Roll) i indeksiranjem konstantnog niza vrijednosti s mobilnog uređaja na računalo. To nam omogućuje stvaranje uvjetnih izraza koji će unaprijed oblikovati izlaz ako MATLAB pokupi određeni unos podataka s mobilnog uređaja. Da biste to učinili, trebat će vam MATLAB mobile na mobilnom uređaju i paket podrške za mobilne uređaje za MATLAB na vašem računalu.
Datoteku možete preuzeti na donjoj poveznici
www.mathworks.com/matlabcentral/fileexchange/51235-matlab-support-package-for-apple-ios-sensors
Korak 4: Kôd i priključci ožičenja
Kôd započinje porukom pri pokretanju koja nas pita želimo li pokrenuti kućni sigurnosni uređaj. Ako odgovorimo potvrdno i unesemo točan pristupni kod, skripta odmah uskače u while petlju. Odatle počinje prikupljanje podataka s mobilnog uređaja. Postoje uvjeti koji čitaju te podatke. Sustav možemo otključati i zaključati s našeg mobilnog uređaja, a kod će okrenuti servo i treptati LED svjetlo ovisno o danim podacima s mobilnog uređaja
startup = questdlg ('Želite li aktivirati ecoTECH Energetski sustav pametne kuće?'); % Počinje aktivacijski slijed ecoTECHwaitfor (pokretanje); ako je pokretanje == "Da" % Ako je odabrano "Da", započinje niz aktivacije i ulazi u while petlju na kraju power = "uključeno"; m1 = msgbox ('Pokretanje ecoTECH …'); stanka (2); izbrisati (m1); m1_wait = čekanje (0, 'Molimo pričekajte …'); koraci = 25; za i = 1: koraci pauze (.1); traka čekanja (i/koraci); % Ažurira brisanje kraja trake čekanja (m1_wait); PASSCODE = [0 0 0 0]; % Pokreće šifru ii = 0; % Pokreće varijablu koja se koristi za prekid petlji m2 = msgbox ('ecoTECH potpuno operativan!'); stanka (2); brisati (m2); elseif startup == "Ne" || startup == "Cancel" % Ako je odabrano "No" ili "Cancel", tada se aktivacijski niz ne pokreće i ne ulazi u power loop = "off"; m3 = msgbox ('U redu! Zbogom!'); stanka (2); brisanje (m3); kraj
% ecoTECH u odjeljku Akcije dok je istinito dok je napajanje == "uključeno" % Odjeljak mobilnog ključa dok je istinito % Prikuplja podatke o orijentaciji mobilnog uređaja prema roli KEY = m. Orijentacija (3); % Prikuplja podatke o gumbima b2 = readDigitalPin (a, 'D2'); % Gumb 2 (crveno) b3 = readDigitalPin (a, 'D3'); % Gumb 3 (bijelo) ako je KEY> = 35 % u stupnjevima m4 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1); % Uključuje pauzu zelenog svjetla (.5); writePosition (s, 1); % Okreće servo za otključavanje pauze vrata (2); writeDigitalPin (a, 'D8', 0); % Isključuje brisanje zelenog svjetla (m4); elseif KEY <= -35 % u stupnjevima m5 = msgbox ('Vrata zaključana!'); writeDigitalPin (a, 'D7', 1); % Uključuje pauzu crvenog svjetla (.5); writePosition (s, 0); % Okreće servo za zaključavanje pauze vrata (2); writeDigitalPin (a, 'D7', 0); % Isključuje brisanje crvenog svjetla (m5); ii = 1; break % Izlazi dok petlja sadrži mobilni ključ ako su vrata zaključana pomoću mobilnog uređaja elseif b2 == 0 && b3 == 0 % Izlazi dok petlja sadrži mobilni ključ za unos kraja završetka odjeljka lozinke
Nakon toga može ući u drugu while petlju. Ova petlja while kontrolira ishode na temelju ulaza s gumba. Ako je prva while petlja zanemariva ili je potrebno ručno zaključavanje, ući će u drugu while petlju gdje je potrebna određena lozinka. Ako je lozinka netočna, petlja će se ponovno pokrenuti
dok je istina ako je ii == 1 % Izlazi iz petlje koja sadrži zaporku ako su vrata bila otključana prekidom mobilnog uređaja % Prikuplja podatke o gumbima b5 = readDigitalPin (a, 'D5'); % Gumb 5 (plavo) b1 = readDigitalPin (a, 'D1'); % Gumb 1 (crno) b4 = readDigitalPin (a, 'D4'); % Gumb 4 (bijelo) ako je b5 == 0 % Pokreće odjeljak za unos lozinke za b = 1: 5 m6 = msgbox ('Molimo pritisnite i držite gumb A'); stanka (2); izbrisati (m6); % Prikuplja podatke o gumbima b1 = readDigitalPin (a, 'D1'); % Gumb 1 (crno) b2 = readDigitalPin (a, 'D2'); % Gumb 2 (crveno) b3 = readDigitalPin (a, 'D3'); % Gumb 3 (bijelo) b4 = readDigitalPin (a, 'D4'); % Gumb 4 (žuto) b5 = readDigitalPin (a, 'D5'); % Gumb % 5 (Plavo) % Zamjenjuje vrijednosti u početnoj šifri jednu po jednu ako je 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)); % Pretvara niz gumba pritisnutih u brojeve i pretvara ih u kraj kraja niza % Kraj for petlje za unos znamenki za šifru ako PASSCODE == "2314" % Ako se unesena šifra podudara, vrata se otključavaju na nekoliko sekundi, pa se zaključavaju m7 = msgbox ('Dobro došli kući!'); writeDigitalPin (a, 'D8', 1); % Uključuje pauzu zelenog svjetla (.5); writePosition (s, 1); % Okreće servo za otključavanje pauze vrata (5); writeDigitalPin (a, 'D8', 0); % Isključuje pauzu zelenog svjetla (.1); writeDigitalPin (a, 'D7', 1); % Uključuje pauzu crvenog svjetla (.5); writePosition (s, 0); % Okreće servo za zaključavanje pauze vrata (1); writeDigitalPin (a, 'D7', 0); % Isključuje brisanje crvenog svjetla (m7); ii = 1; break % Izlazi dok petlja sadrži lozinku nakon unosa ispravne lozinke elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Uključuje crveno svjetlo m8 = msgbox ('Neispravna šifra! Pokušajte ponovno!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Isključuje crveno svjetlo nastavlja se % Omogućuje vam ponovni unos kraja zaporke elseif b1 == 0 && b4 == 0 % Izlazi dok petlja sadrži odjeljak zaporke ako ne želite unijeti zaporku ii = 1; break end end
Ako je ispravno, odmah će ući u while petlju koja kontrolira osjetnik temperature. Ako je prekidač uključen, petlja će se nastaviti i iscrtavati grafikon temperature u odnosu na vrijeme, što će omogućiti da se vidi trend. Ako pritisnete gumb spojen na senzor temperature, također će vam poslati e -poruku s porukom koja je temperatura u vašem "domu". Ako je prekidač isključen, kôd će se odmah prekinuti
t = 0; % Početno vrijeme = 0 sekundi pauze (5) % Daje korisniku vrijeme za uključivanje temperaturnog prekidača SWITCH = readDigitalPin (a, 'D11'); % Prikuplja podatke o prekidaču u pin D11 dok je SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Prikuplja podatke o prekidaču na pinu D11 napon = readVoltage (a, 'A1'); % Čita napon s osjetnika temperature temp_C = (napon.*1000 - 500)./ 10; % Pretvara napon u temperaturu u ° C temp_F = (9/5).*Temp_C + 32; % Pretvara iz ° C u ° F iscrtavanje (t, temp_C, 'b.') Držanje naslova ('Sobna temperatura'); xlabel ('Vrijeme u sekundama'); ylabel ('Temperatura'); os ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legenda ('Temperatura u ° C', 'Temperatura u ° F') pauza (1); t = t + 1; % Brojač vremena u sekundama % Odjeljak e-pošte b_temp = readDigitalPin (a, 'D0'); % Prikuplja podatke (plave) tipke za temperaturu na pinu D0 ako je b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Pošiljatelja setpref ('Internet', 'SMTP_Username', '[email protected]'); % Korisničko ime pošiljatelja setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Rekviziti lozinke pošiljatelja = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'istina'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('[email protected]', 'ecoTECH Sobna temperatura', sprintf ('Trenutna sobna temperatura je %.1f ° C ili %.1f ° F.', temp_C, temp_F)); % Šalje primatelju e-poruku s podacima o trenutnoj sobnoj temperaturi fprintf ('E-pošta uspješno poslana! / N') kraj ako je temp_F> = 75 % Ako se sobna temperatura poveća na 75 ° F … temp_AC = 65; % Mijenja temperaturu na termostatu na 65 ° F, inače temp_F <= 65 % Ako se sobna temperatura smanji na 60 ° F … temp_AC = 80; % Mijenja temperaturu na termostatu na 80 ° F kraj kraja % Kraj "SWITCH == 0" while petlje ako je napajanje == "isključeno" || ii == 1 % Izlazi iz "napajanja == uključeno" dok kraj prekida petlje završava % Kraj "napajanja == uključeno" dok je petlja ako je napajanje == "isključeno" || ii == 1 % Izlazi iz cijelog prekida stanke petlje
Ovo je bio samo kratak pregled koda i njegove funkcionalnosti. Po potrebi smo priložili cijeli kôd u pdf formatu
Ovdje je popis u koji port je priključen svaki uređaj
1. RGB LED: Digitalni pinovi (7, 8, 9)
2. Servo: Digitalni pin 6
3. Gumbi: digitalni pinovi (1, 2, 3, 4, 5)
4. Plavi gumb za e -poštu: digitalni pin 0
5. Senzor temperature: analogni pin 1
6. Prekidač: Digitalni pin 11
Preporučeni:
Uradi sam Arduino Bluetooth kontrolirani robot!: 5 koraka
Uradi sam Arduino Bluetooth kontrolirani robot!: Pozdrav svima! U ovom članku izrađujem robota kontroliranog bluetoothom s arduinom. Ako više volite gledati videozapise, evo video vodiča koji sam napravio !:
Laptop Touchpad kontrolirani model željeznice - PS/2 Arduino sučelje: 14 koraka
Model željeznice za prijenosno računalo s dodirnom podlogom | PS/2 Arduino sučelje: Touchpad prijenosnog računala jedan je od sjajnih uređaja koji se može koristiti kao ulaz za projekte mikrokontrolera. Stoga danas, implementirajmo ovaj uređaj s Arduino mikrokontrolerom za upravljanje modelom željeznice. Pomoću dodirne podloge PS/2 moći ćemo kontrolirati 3 t
Arduino kontrolirani mini automat: 9 koraka
Arduino kontrolirani mini automat za prodaju: Ovo je naš automat za prodaju, prodaje tri slatkiša sa slatkišima zabavne veličine. Ukupne dimenzije su oko 12 " x 6 " x 8 ". Ovim automatom upravlja arduino, s matičnom pločom i servo motorom
Uradi sam Arduino kontrolirani multiwii kontrolor leta: 7 koraka (sa slikama)
DIY Arduino kontrolirani multiwii kontrolor leta: Ovaj projekt ima za cilj stvoriti svestranu, ali prilagođenu višekopternu logičku ploču za bespilotne letjelice temeljenu na Arduinu i Multiwii
Arduino kontrolirani Nerf Vulcan: 10 koraka (sa slikama)
Arduino kontrolirani Nerf Vulcan: Da, upravo to govori naslov. Ova instrukcija će vas naučiti kako kontrolirati bilo koji Nerf Vulkan sa svojim Arduinom. Priručni vodič pucat će samo 2,5 sekunde, zaustavljati se 2,5 sekunde itd. To je poput "zdravo svijeta"