Talaan ng mga Nilalaman:

Kinokontrol ng MATLAB Microcontroller (Arduino MKR1000): 4 na Hakbang
Kinokontrol ng MATLAB Microcontroller (Arduino MKR1000): 4 na Hakbang

Video: Kinokontrol ng MATLAB Microcontroller (Arduino MKR1000): 4 na Hakbang

Video: Kinokontrol ng MATLAB Microcontroller (Arduino MKR1000): 4 na Hakbang
Video: Experiment: Helicopter and Fireworks 2024, Nobyembre
Anonim
Kinokontrol ng MATLAB Microcontroller (Arduino MKR1000)
Kinokontrol ng MATLAB Microcontroller (Arduino MKR1000)

Ang layunin ng aming proyekto ay upang magamit ang MATLAB pati na rin ang Arduino MKR1000 sa abot ng aming makakaya. Ang aming layunin ay upang lumikha ng isang script na pinapayagan ang ilang mga tampok ng arduino upang pangasiwaan ang isang tiyak na output batay sa isang tukoy na input. Gumamit kami ng maraming mga loop at mga kondisyong pahayag na itinampok sa MATLAB na ginawang posible ito. Gumamit din kami ng MATLAB mobile sa pamamagitan ng paggamit ng data na nakuha mula sa gyroscope ng isang mobile device upang mapagbuti ang proyekto hangga't maaari.

Hakbang 1: Mga Bahagi at Materyales

Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan

MATLAB 2018a

-Ang 2018 na bersyon ng MATLAB ay ang pinaka ginustong bersyon, karamihan dahil ito ay pinakamahusay na gumagana sa code na kumokonekta sa mobile device. Gayunpaman, ang karamihan sa aming code ay maaaring bigyang kahulugan ng karamihan ng mga bersyon ng MATLAB.

Arduino MKR1000

-This ay isang tukoy na aparato na nagbibigay-daan sa amin upang mag-wire circuit hanggang sa parehong mga digital at analogous port. Mahalaga na mayroon ka ding isang breadboard upang sumabay dito.

Accessories

-Kapag ginagamit ang MKR1000, kailangan namin ng mga bahagi ng accessory upang maisagawa ang mga kinakailangang pag-andar.

Kasama dito

  1. Servo
  2. Button (6)
  3. Mapapalitan RBG LED light
  4. Mga Simple Wires
  5. (mga) tinapay ng tinapay
  6. mini power switch
  7. temperatura sensor
  8. 330 ohm risistor
  9. 10K ohm risistor
  10. USB-microUSB cord
  11. Laptop / desktop
  12. Mobile aparato

Mapapansin din na maraming, maraming iba pang mga accessories na maaaring magamit sa MKR1000

Hakbang 2: MatLAB Arduino Support Package

Upang maayos na magamit ang Arduino MKR1000 sa pamamagitan ng MATLAB, dapat mong i-download ang MATLAB Support Package para sa Arduino Hardware. Binibigyan ka ng pag-download na ito ng pag-access sa ilang mga pag-andar at utos nang direkta sa arduino board.

Maaari mong i-download ang pakete sa link sa ibaba

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

Hakbang 3: Paggamit ng Mga Sensor ng Data na Nakuha Mula sa Mobile Device

Paggamit ng Mga Sensor ng Data na Kinuha Mula sa Mobile Device
Paggamit ng Mga Sensor ng Data na Kinuha Mula sa Mobile Device

Pinapayagan kami ng MATLAB Mobile app na gumamit ng isang mobile device upang mag-stream ng data sa pamamagitan ng paggamit ng gyroscope nito. Upang makuha ang data sa pamamagitan ng MATLAB, nakukuha namin ang data sa pamamagitan ng pagkuha nito mula sa orientation matrix mula sa MATLAB mobile. Ginagawa namin ito sa pamamagitan ng paglikha ng isang variable para sa bawat haligi ng orientation matrix (Azimuth, Pitch, at Roll), at pag-index ng patuloy na stream ng mga halaga mula sa mobile device patungo sa computer. Pinapayagan kaming lumikha ng mga kondisyong pahayag na gagawa ng isang output kung kukunin ng MATLAB ang isang tukoy na input ng data mula sa mobile device. Upang magawa ito, kakailanganin mo ng MATLAB mobile sa iyong mobile device, at ang package ng suporta ng mobile device para sa MATLAB sa iyong computer.

Maaari mong i-download ang file sa link sa ibaba

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

Hakbang 4: Ang Code at Mga Ports ng Mga Kable

Nagsisimula ang code sa isang panimulang mensahe na nagtanong kung nais naming simulan ang aming aparatong panseguridad sa bahay. Kung sasagutin natin ang oo, at ibigay ang tamang passcode, agad na tumatalon ang script sa isang habang loop. Mula doon, nagsisimula itong mangolekta ng data mula sa mobile device. Mayroong mga kundisyon na basahin ang data na ito. Maaari naming i-unlock at i-lock ang system mula sa aming mobile device, at ibabaling ng code ang servo at i-blink ang LED light depende sa ibinigay na data mula sa mobile device

startup = questdlg ('Nais mo bang buhayin ang ecoTECH Smart Home Energy System?'); % Nagsisimula ng pagkakasunud-sunod ng pagsasaaktibo ng ecoTECHwaitfor (startup); kung startup == "Oo"% Kung ang "Oo" ay napili isang pagkakasunud-sunod ng pagsasaaktibo ay nagsisimula at ipasok ang habang loop sa dulo ng kapangyarihan = "on"; m1 = msgbox ('Pagsisimula ng ecoTECH…'); i-pause (2); tanggalin (m1); m1_wait = waitbar (0, 'Mangyaring maghintay …'); mga hakbang = 25; para sa i = 1: paghinto ng mga hakbang (.1); waitbar (i / mga hakbang); % Ina-update ang pagtatapos ng waitbar end (m1_wait); PASSCODE = [0 0 0 0]; % Pinasimulan ang passcode ii = 0; % Pinasimulan ang isang variable na ginamit upang masira ang mga loop m2 = msgbox ('ecoTECH buong pagpapatakbo!'); i-pause (2); tanggalin (m2); kung hindi man startup == "Hindi" || startup == "Kanselahin"% Kung ang "Hindi" o "Kanselahin" ay napili pagkatapos ang pagkakasunud-sunod ng pagsasaaktibo ay hindi nagsisimula at hindi ipasok ang habang loop power = "off"; m3 = msgbox ('Okay! Paalam!'); i-pause (2); tanggalin (m3); magtapos

% ecoTECH sa Seksyon ng Aksyon habang totoo habang power == "sa"% Mobile Key Seksyon habang totoo% Kinokolekta ang data tungkol sa oryentasyong Roll ng mobile device na KEY = m. Orientation (3); % Nangongolekta ng data tungkol sa mga pindutan b2 = readDigitalPin (a, 'D2'); % Button 2 (Pula) b3 = readDigitalPin (a, 'D3'); % Button 3 (Puti) kung KEY> = 35% sa degree m4 = msgbox ('Welcome Home!'); isulatDigitalPin (a, 'D8', 1); % Binuksan ang berdeng ilaw na naka-pause (.5); isulat angPosisyon (s, 1); % Binabaling ang servo upang ma-unlock ang pag-pause ng pinto (2); isulatDigitalPin (a, 'D8', 0); % Patayin ang berdeng ilaw na tanggalin (m4); kung hindi man KEY <= -35% sa degree m5 = msgbox ('Naka-lock ang Pinto!'); isulatDigitalPin (a, 'D7', 1); % Binuksan ang red light pause (.5); isulat angPosisyon (s, 0); % Binabaling ang servo upang i-lock ang pintuan i-pause (2); isulatDigitalPin (a, 'D7', 0); % Patayin ang red light delete (m5); ii = 1; break% Exits habang loop na naglalaman ng mobile key kung ang pinto ay naka-lock gamit ang mobile device kung hindi b2 == 0 && b3 == 0% Mga exit habang loop na naglalaman ng mobile key upang ipasok ang seksyon ng passcode break end end

Pagkatapos nito, maaari itong magpasok ng isa pang habang loop. Kinokontrol nito habang ang loop ang mga kinalabasan batay sa mga input mula sa mga pindutan. Kung ang una habang loop ay bale-wala, o isang manu-manong lockdown ay kinakailangan, maglalagay ito ng isa pang habang loop kung saan kinakailangan ang isang tukoy na password. Kung ang password ay hindi tama, i-restart nito ang loop

habang totoo kung ii == 1% Mga Paglabas habang loop na naglalaman ng passcode kung ang pinto ay na-unlock gamit ang mobile device break end% Kinokolekta ang data tungkol sa mga pindutan b5 = readDigitalPin (a, 'D5'); % Button 5 (Blue) b1 = readDigitalPin (a, 'D1'); % Button 1 (Itim) b4 = readDigitalPin (a, 'D4'); % Button 4 (Puti) kung b5 == 0% Nagsisimula sa seksyon ng pagpasok ng passcode para sa b = 1: 5 m6 = msgbox ('Mangyaring Pindutin At hawakan ang Isang Button'); i-pause (2); tanggalin (m6); % Nangongolekta ng data tungkol sa mga pindutan b1 = readDigitalPin (a, 'D1'); % Button 1 (Itim) b2 = readDigitalPin (a, 'D2'); % Button 2 (Pula) b3 = readDigitalPin (a, 'D3'); % Button 3 (Puti) b4 = readDigitalPin (a, 'D4'); % Button 4 (Dilaw) b5 = readDigitalPin (a, 'D5'); % Button 5 (Blue)% Pinapalitan ang mga halaga sa paunang passcode nang paisa-isa kung b1 == 0 PASSCODE (0 + b) = 1; kung hindi man b2 == 0 PASSCODE (0 + b) = 2; kung hindi man b3 == 0 PASSCODE (0 + b) = 3; kung hindi man b4 == 0 PASSCODE (0 + b) = 4; kung hindi man b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.0f%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Ginagawang ang pagkakasunud-sunod ng mga pindutan na pinindot sa mga numero pagkatapos ay i-convert ito sa isang dulo ng string m7 = msgbox ('Maligayang Pag-uwi!'); isulatDigitalPin (a, 'D8', 1); % Binuksan ang berdeng ilaw na naka-pause (.5); isulat angPosisyon (s, 1); % Binabaling ang servo upang ma-unlock ang pag-pause ng pinto (5); isulatDigitalPin (a, 'D8', 0); % Patayin ang berdeng ilaw na naka-pause (.1); isulatDigitalPin (a, 'D7', 1); % Binuksan ang red light pause (.5); isulat angPosisyon (s, 0); % Binabaling ang servo upang i-lock ang pag-pause ng pinto (1); isulatDigitalPin (a, 'D7', 0); % Patayin ang red light delete (m7); ii = 1; break% Exits habang loop na naglalaman ng passcode pagkatapos na ipasok ang tamang passcode elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Binuksan ang pulang ilaw m8 = msgbox ('Maling Passcode! Subukang Muli!'); waitfor (m8) isulatDigitalPin (a, 'D7', 0); % Patayin ang pulang ilaw na magpapatuloy% Pinapayagan kang muling ipasok ang isang passcode end elseif b1 == 0 && b4 == 0% Mga exit habang ang loop na naglalaman ng seksyon ng passcode kung hindi mo nais na magpasok ng isang passcode ii = 1; break end end

Kung tama, agad itong maglalagay ng isang habang loop na kumokontrol sa sensor ng temperatura. Kung ang switch ay nakabukas, magpapatuloy ang loop at lalagyan ang temperatura kumpara sa time plot, na pinapayagan ang isa na tingnan ang trend. Kung ang pindutan na konektado sa sensor ng temperatura ay pinindot, magpapadala din ito ng isang email na nagsasabi sa iyo kung ano ang temperatura sa iyong "tahanan". Kung naka-off ang switch, agad nitong tatapusin ang code

t = 0; % Paunang oras = 0 segundo i-pause (5)% Nagbibigay ng oras para sa gumagamit na buksan ang switch ng temperatura SWITCH = readDigitalPin (a, 'D11'); % Kinokolekta ang data tungkol sa switch sa pin D11 habang SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Nangongolekta ng data tungkol sa switch sa pin D11 boltahe = readVoltage (a, 'A1'); % Binabasa ang boltahe mula sa sensor ng temperatura temp_C = (boltahe. * 1000 - 500)./ 10; % Binabago ang boltahe sa temperatura sa ° C temp_F = (9/5). * Temp_C + 32; % Mga nagko-convert mula ° C hanggang ° F na balangkas (t, temp_C, 'b.') Na pinanghahawakan ang pamagat ('Temperatura sa Kwarto'); xlabel ('Oras sa Segundo'); ylabel ('Temperatura'); axis ([0, 180, 0, 100]); balangkas (t, temp_F, 'r.') alamat ('Temperatura sa ° C', 'Temperatura sa ° F') i-pause (1); t = t + 1; % Oras ng counter sa segundo% Seksyon ng E-mail b_temp = readDigitalPin (a, 'D0'); % Kinokolekta ang data ng (asul) na pindutan ng temperatura sa pin D0 kung b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % Sender setpref ('Internet', 'SMTP_Username', '[email protected]'); Setpref ng username ni% Sender ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Props password props = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'totoo'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('[email protected] ',' ecoTECH Room Temperature ', sprintf (' Ang kasalukuyang temperatura sa silid ay%.1f ° C o%.1f ° F. ', temp_C, temp_F)); % Nagpapadala ng isang e-mail sa tatanggap na nagbibigay ng data sa kasalukuyang temperatura ng fprintf ng kuwarto ('Matagumpay na naipadala ang email! / N') tapusin kung temp_F> = 75% Kung ang temperatura ng kuwarto ay tumaas sa 75 ° F… temp_AC = 65; % Binabago ang temperatura sa termostat sa 65 ° F kung hindi man_ <= 65% Kung ang temperatura ng kuwarto ay bumababa sa 60 ° F… temp_AC = 80; % Binabago ang temperatura sa termostat sa 80 ° F end end% Pagtatapos ng "SWITCH == 0" habang loop kung power == "off" || ii == 1% Lumabas sa "power == on" habang loop break end end% End of "power == on" habang loop kung power == "off" || ii == 1% Lumabas buong habang ang loop break end

Ito ay isang maikling pangkalahatang ideya lamang ng code at ang kakayahang magamit nito. Ikinabit namin ang buong code bilang isang pdf kung kinakailangan

Narito ang listahan ng kung aling port ang bawat aparato ay naka-wire

1. RGB LED: Mga Digital Pins (7, 8, 9)

2. Servo: Digital Pin 6

3. Mga Pindutan: Mga Digital na Pin (1, 2, 3, 4, 5)

4. Blue Button para sa email: Digital Pin 0

5. Temperatura Sensor: Analogue Pin 1

6. Lumipat: Digital Pin 11

Inirerekumendang: