Სარჩევი:

MATLAB კონტროლირებადი მიკროკონტროლი (Arduino MKR1000): 4 ნაბიჯი
MATLAB კონტროლირებადი მიკროკონტროლი (Arduino MKR1000): 4 ნაბიჯი

ვიდეო: MATLAB კონტროლირებადი მიკროკონტროლი (Arduino MKR1000): 4 ნაბიჯი

ვიდეო: MATLAB კონტროლირებადი მიკროკონტროლი (Arduino MKR1000): 4 ნაბიჯი
ვიდეო: Remote Control Helicopter With Gravity Sensor unboxing and testing 2024, ნოემბერი
Anonim
MATLAB კონტროლირებადი მიკროკონტროლი (Arduino MKR1000)
MATLAB კონტროლირებადი მიკროკონტროლი (Arduino MKR1000)

ჩვენი პროექტის მიზანი იყო მაქსიმალურად გამოვიყენოთ MATLAB, ასევე Arduino MKR1000. ჩვენი მიზანი იყო შევქმნათ სკრიპტი, რომელიც არდუინოს გარკვეულ მახასიათებლებს საშუალებას მისცემდა შეასრულოს გარკვეული გამომუშავება კონკრეტული შეყვანის საფუძველზე. ჩვენ გამოვიყენეთ მრავალი მარყუჟი და პირობითი განცხადება, რომელიც მოცემულია MATLAB– ში, რამაც ეს შესაძლებელი გახადა. ჩვენ ასევე გამოვიყენეთ MATLAB მობილური, მობილური მოწყობილობის გიროსკოპიდან მიღებული მონაცემების გამოყენებით, პროექტის მაქსიმალურად გასაუმჯობესებლად.

ნაბიჯი 1: ნაწილები და მასალები

ნაწილები და მასალები
ნაწილები და მასალები
ნაწილები და მასალები
ნაწილები და მასალები
ნაწილები და მასალები
ნაწილები და მასალები

MATLAB 2018 ა

-MATLAB- ის 2018 წლის ვერსია არის ყველაზე სასურველი ვერსია, ძირითადად იმიტომ, რომ ის საუკეთესოდ მუშაობს კოდთან, რომელიც უკავშირდება მობილურ მოწყობილობას. თუმცა, ჩვენი კოდის უმეტესობის ინტერპრეტაცია შესაძლებელია MATLAB ვერსიების უმრავლესობით.

Arduino MKR1000

-ეს არის კონკრეტული მოწყობილობა, რომელიც საშუალებას გვაძლევს შევაერთოთ სქემები ციფრულ და ანალოგიურ პორტებამდე. სასიცოცხლოდ მნიშვნელოვანია, რომ თქვენ ასევე გქონდეთ პურის დაფა მასთან ერთად წასასვლელად.

აქსესუარები

MKR1000– ის გამოყენებისას ჩვენ გვჭირდებოდა აქსესუარების ნაწილები საჭირო ფუნქციების შესასრულებლად.

Ეს მოიცავს

  1. სერვო
  2. ღილაკი (6)
  3. ცვალებადი RBG LED ნათურა
  4. მარტივი მავთულები
  5. პურის დაფა (ები)
  6. მინი დენის გადამრთველი
  7. ტემპერატურის სენსორი
  8. 330 ohm რეზისტორი
  9. 10K ohm რეზისტორი
  10. USB-microUSB კაბელი
  11. ლეპტოპი/დესკტოპი
  12. Მობილური მოწყობილობა

ისიც უნდა აღინიშნოს, რომ არსებობს ბევრი, ბევრი სხვა აქსესუარი, რომლის გამოყენებაც MKR1000– ით არის შესაძლებელი

ნაბიჯი 2: MATLAB Arduino მხარდაჭერის პაკეტი

იმისათვის, რომ სწორად გამოიყენოთ Arduino MKR1000 MATLAB– ით, თქვენ უნდა გადმოწეროთ MATLAB მხარდაჭერის პაკეტი Arduino აპარატურისთვის. ეს გადმოწერა გაძლევთ წვდომას გარკვეულ ფუნქციებზე და ბრძანებებზე პირდაპირ არდუინოს დაფაზე.

შეგიძლიათ ჩამოტვირთოთ პაკეტი ქვემოთ მოცემულ ბმულზე

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

ნაბიჯი 3: მობილური მოწყობილობიდან შეძენილი მონაცემთა სენსორების გამოყენება

მობილური მოწყობილობიდან შეძენილი მონაცემთა სენსორების გამოყენება
მობილური მოწყობილობიდან შეძენილი მონაცემთა სენსორების გამოყენება

MATLAB Mobile აპლიკაცია საშუალებას გვაძლევს გამოვიყენოთ მობილური მოწყობილობა მონაცემების გადასაცემად მისი გიროსკოპის გამოყენებით. მონაცემების მოსაპოვებლად MATLAB- ის საშუალებით, ჩვენ ვიღებთ მონაცემებს MATLAB მობილურიდან ორიენტაციის მატრიციდან ამოღებით. ჩვენ ამას ვაკეთებთ ცვლადის შესაქმნელად ორიენტაციის მატრიცის თითოეული სვეტისთვის (აზიმუტი, ნაბიჯი და როლი) და ინდექსირდება ღირებულებების მუდმივი ნაკადი მობილური მოწყობილობიდან კომპიუტერამდე. ეს გვაძლევს საშუალებას შევქმნათ პირობითი განცხადებები, რომლებიც შექმნიან გამომავალს, თუ MATLAB აიღებს მობილური მოწყობილობიდან მონაცემების კონკრეტულ შეყვანას. ამისათვის თქვენ დაგჭირდებათ MATLAB მობილური თქვენს მობილურ მოწყობილობაზე და მობილური მოწყობილობის დამხმარე პაკეტი თქვენს კომპიუტერში MATLAB– ისთვის.

თქვენ შეგიძლიათ ჩამოტვირთოთ ფაილი ქვემოთ მოცემულ ბმულზე

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

ნაბიჯი 4: კოდი და გაყვანილობის პორტები

კოდი იწყება გაშვების შეტყობინებით, რომელიც გვეკითხება გვინდა თუ არა ჩვენი სახლის უსაფრთხოების მოწყობილობის გაშვება. თუ ჩვენ ვპასუხობთ დიახ, და მივცემთ სწორ კოდს, სკრიპტი მაშინვე გადადის ცოტახანიან მარყუჟში. იქიდან იწყება მობილური მოწყობილობიდან მონაცემების შეგროვება. არსებობს პირობები, რომლებიც კითხულობენ ამ მონაცემებს. ჩვენ შეგვიძლია განბლოკოთ და ჩავკეტოთ სისტემა ჩვენი მობილური მოწყობილობიდან, ხოლო კოდი გადააქვს სერვოზე და აანთებს LED ნათურას მობილური მოწყობილობიდან მოცემული მონაცემების მიხედვით

startup = questdlg ('გსურთ გააქტიუროთ ecoTECH Smart Home ენერგიის სისტემა?'); იწყება ecoTECHwaitfor გააქტიურების თანმიმდევრობა (გაშვებისთვის); თუ ჩატვირთვისას == "დიახ" % თუ "დიახ" არის არჩეული აქტივაციის თანმიმდევრობა იწყება და შედის while მარყუჟში ბოლოს სიმძლავრე = "ჩართული"; m1 = msgbox ("დაწყების ecoTECH …"); პაუზა (2); წაშლა (m1); m1_wait = waitbar (0, 'გთხოვთ დაელოდოთ …'); ნაბიჯები = 25; for i = 1: ნაბიჯების პაუზა (.1); waitbar (i/ნაბიჯები); % განაახლებს ლოდინის ბოლოს წაშლას (m1_wait); PASSCODE = [0 0 0 0]; % ინიციალიზებს პაროლს ii = 0; % ინიციალიზებს ცვლადს, რომელიც გამოიყენება მარყუჟებიდან m2 = msgbox ('ecoTECH სრულად ფუნქციონირებს!'); პაუზა (2); წაშლა (მ 2); elseif გაშვება == "არა" || გაშვება == "გაუქმება" % თუ "არა" ან "გაუქმება" არჩეულია, მაშინ აქტივაციის თანმიმდევრობა არ იწყება და არ შედის while loop power = "off"; m3 = msgbox ('კარგი! მშვიდობით!'); პაუზა (2); წაშლა (მ 3); დასასრული

% ecoTECH in Action Section while true while power == "on" % Mobile Key Section while true % აგროვებს მონაცემებს მობილური მოწყობილობის Roll ორიენტაციის შესახებ KEY = m. ორიენტაცია (3); % აგროვებს მონაცემებს ღილაკების შესახებ b2 = readDigitalPin (a, 'D2'); % ღილაკი 2 (წითელი) b3 = readDigitalPin (a, 'D3'); % ღილაკი 3 (თეთრი) თუ KEY> = 35 % გრადუსში m4 = msgbox ('მოგესალმებით სახლში!'); 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; შესვენება % გამოდის მარყუჟის შემცველი მობილური გასაღებით, თუ კარი დაკეტილია მობილური მოწყობილობის გამოყენებით სხვა თუ სხვა

ამის შემდეგ, მას შეუძლია შეიყვანოს მეორე ხოლო მარყუჟი. ეს ხოლო მარყუჟი აკონტროლებს შედეგებს ღილაკების შეყვანის საფუძველზე. თუ პირველი მარყუჟი უმნიშვნელოა, ან ხელით ჩაკეტვაა საჭირო, ის შეიყვანს მეორე მარყუჟს, სადაც საჭიროა კონკრეტული პაროლი. თუ პაროლი არასწორია, ის გადატვირთავს მარყუჟს

მართალია, თუ ii == 1 % გამოდის მარყუჟის პაროლის შემცველი მარყუჟის შემთხვევაში, თუ კარი გახსნილია მობილური მოწყობილობის შესვენების ბოლოს % აგროვებს მონაცემებს ღილაკების შესახებ b5 = readDigitalPin (a, 'D5'); % ღილაკი 5 (ლურჯი) b1 = readDigitalPin (a, 'D1'); % ღილაკი 1 (შავი) b4 = readDigitalPin (a, 'D4'); % ღილაკი 4 (თეთრი) თუ b5 == 0 % იწყებს პაროლის კოდის შეყვანას b = 1: 5 m6 = msgbox ('გთხოვთ დააჭიროთ და გამართავს ღილაკს'); პაუზა (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 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)); % აქცევს რიცხვებში დაჭერილი ღილაკების თანმიმდევრობას და გადააქცევს მას სტრიქონის ბოლომდე % მარყუჟის ბოლოს ციფრების შესაყვანად პაროლის კოდისთვის PASSCODE == "2314" % თუ პაროლ კოდი შეყვანილია ემთხვევა მაშინ კარი იბლოკება რამოდენიმე წამით შემდეგ იკეტება m7 = msgbox ('მოგესალმებით სახლში!'); 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; შესვენება % გამოდის ხოლო მარყუჟი შეიცავს პაროლის კოდს სწორი კოდის შეყვანის შემდეგ elseif PASSCODE = "2314" writeDigitalPin (a, 'D7', 1); % ანათებს წითელ შუქს m8 = msgbox ('არასწორი პაროლი! სცადე ხელახლა!'); დაელოდეთ (m8) ჩაწერეთDigitalPin (a, 'D7', 0); % გამორთავს წითელ შუქს გააგრძელებს % გაძლევთ საშუალებას ხელახლა შეიყვანოთ კოდის ბოლო სხვაგან b1 == 0 && b4 == 0 % გამოდის პაროლი, რომელიც შეიცავს პაროლის კოდის ნაწილს, თუ არ გსურთ შეიყვანოთ პაროლი ii = 1; შესვენება დასასრული დასასრული

თუ ის სწორია, ის დაუყოვნებლივ შევა ცოტა ხნის მარყუჟში, რომელიც აკონტროლებს ტემპერატურის სენსორს. თუ გადამრთველი ჩართულია, მარყუჟი გაგრძელდება და ასახავს ტემპერატურას დროის ნაკვეთის წინააღმდეგ, რაც საშუალებას მისცემს მას დაინახოს ტენდენცია. თუ დააჭირეთ ტემპერატურის სენსორთან დაკავშირებულ ღილაკს, ის ასევე გამოგიგზავნით ელ.წერილს, რომელიც გეტყვით რა ტემპერატურაა თქვენს "სახლში". თუ გადამრთველი გამორთულია, მაშინვე დასრულდება კოდი

t = 0; % საწყისი დრო = 0 წამი პაუზა (5) % აძლევს მომხმარებელს დროს ტემპერატურის გადამრთველის ჩართვისათვის SWITCH = readDigitalPin (a, 'D11'); % აგროვებს მონაცემებს გადართვის შესახებ pin D11- ში, ხოლო SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % აგროვებს მონაცემებს გადართვის შესახებ pin D11 ძაბვაში = readVoltage (a, 'A1'); % კითხულობს ძაბვას ტემპერატურის სენსორიდან temp_C = (ძაბვა.*1000 - 500)./ 10; % გარდაქმნის ძაბვას ტემპერატურაში ° C temp_F = (9/5).*Temp_C + 32; % გადააქცევს ° C- დან ° F- ს (t, temp_C, 'b.') სათაურზე ('ოთახის ტემპერატურა'); xlabel ("დრო წამებში"); ილაბელი ("ტემპერატურა"); ღერძი ([0, 180, 0, 100]); ნაკვეთი (t, temp_F, 'r.') ლეგენდა ('ტემპერატურა ° C', 'ტემპერატურა ° F') პაუზა (1); t = t + 1; % დროის მრიცხველი წამებში % ელ.ფოსტის განყოფილება b_temp = readDigitalPin (a, 'D0'); % აგროვებს მონაცემებს (ლურჯი) ტემპერატურის ღილაკზე pin D0- ში, თუ b_temp == 0 setpref ('ინტერნეტი', 'SMTP_Server', 'smtp.gmail.com'); setpref ("ინტერნეტი", "E_mail", "[email protected]"); % გამგზავნის setpref ("ინტერნეტი", "SMTP_Username", "[email protected]"); % გამგზავნის მომხმარებლის სახელი setpref ("ინტერნეტი", "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- მდე სხვაგან temp_F <= 65 % თუ ოთახის ტემპერატურა მცირდება 60 ° F… temp_AC = 80; % ცვლის ტემპერატურას თერმოსტატზე 80 ° F დასასრულის ბოლომდე % ბოლოს "SWITCH == 0" ხოლო loop if power == "off" || ii == 1 % გამოდის "ენერგია == ჩართული" ხოლო მარყუჟის შესვენების დასასრული დასასრული % დასასრული "ენერგია == ჩართული" ხოლო მარყუჟი თუ სიმძლავრე == "გამორთული" || ii == 1 % გამოდის მთლიანი სანამ მარყუჟის შესვენება დასრულდება

ეს იყო მხოლოდ მოკლე მიმოხილვა კოდისა და მისი ფუნქციონირების შესახებ. საჭიროების შემთხვევაში ჩვენ დავამატეთ სრული კოდი როგორც pdf

აქ არის ჩამონათვალი, თუ რომელ პორტშია შეყვანილი თითოეული მოწყობილობა

1. RGB LED: ციფრული ქინძისთავები (7, 8, 9)

2. სერვისი: ციფრული პინ 6

3. ღილაკები: ციფრული ქინძისთავები (1, 2, 3, 4, 5)

4. ლურჯი ღილაკი ელ.ფოსტისთვის: ციფრული პინ 0

5. ტემპერატურის სენსორი: ანალოგური პინი 1

6. გადამრთველი: ციფრული პინი 11

გირჩევთ: