Turinys:

MATLAB valdomas mikrovaldiklis („Arduino MKR1000“): 4 žingsniai
MATLAB valdomas mikrovaldiklis („Arduino MKR1000“): 4 žingsniai

Video: MATLAB valdomas mikrovaldiklis („Arduino MKR1000“): 4 žingsniai

Video: MATLAB valdomas mikrovaldiklis („Arduino MKR1000“): 4 žingsniai
Video: Arduino pamoka Nr. 8: Servo mechanizmas 2024, Liepa
Anonim
MATLAB valdomas mikrovaldiklis („Arduino MKR1000“)
MATLAB valdomas mikrovaldiklis („Arduino MKR1000“)

Mūsų projekto tikslas buvo kuo geriau panaudoti MATLAB ir „Arduino MKR1000“. Mūsų tikslas buvo sukurti scenarijų, kuris leistų tam tikroms arduino funkcijoms atlikti tam tikrą išvestį, pagrįstą konkrečia įvestimi. Mes panaudojome daug ciklų ir sąlyginių teiginių, pateiktų MATLAB. Mes taip pat naudojome „MATLAB mobile“, naudodamiesi duomenimis, gautais iš mobiliojo įrenginio giroskopo, kad kuo labiau pagerintume projektą.

1 žingsnis: dalys ir medžiagos

Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos

MATLAB 2018a

-2018 m. MATLAB versija yra labiausiai pageidaujama versija, daugiausia todėl, kad ji geriausiai veikia su kodu, jungiančiu prie mobiliojo įrenginio. Tačiau dauguma mūsų kodo gali būti interpretuojami daugumos MATLAB versijų.

„Arduino MKR1000“

-Tai yra specifinis įrenginys, leidžiantis prijungti grandines iki skaitmeninių ir analoginių prievadų. Labai svarbu, kad kartu turėtumėte ir duonos lentą.

Priedai

-Kartuodami MKR1000, mums reikėjo priedų, kad galėtume atlikti reikiamas funkcijas.

Tai įtraukia

  1. Servo
  2. Mygtukas (6)
  3. Keičiama RBG LED lemputė
  4. Paprasti laidai
  5. duonos lenta (-os)
  6. mini maitinimo jungiklis
  7. temperatūros jutiklis
  8. 330 omų rezistorius
  9. 10K omų rezistorius
  10. USB-microUSB laidas
  11. Nešiojamasis/stalinis kompiuteris
  12. Mobilusis įrenginys

Taip pat reikia pažymėti, kad yra daug daug priedų, kuriuos galima naudoti su MKR1000

2 veiksmas: „MATLAB Arduino“palaikymo paketas

Norėdami tinkamai naudoti „Arduino MKR1000“per MATLAB, turite atsisiųsti „Arduino“aparatinės įrangos „MATLAB“palaikymo paketą. Šis atsisiuntimas suteikia prieigą prie tam tikrų funkcijų ir komandų tiesiai į arduino plokštę.

Paketą galite atsisiųsti iš žemiau esančios nuorodos

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

3 veiksmas: iš mobiliojo įrenginio įsigytų duomenų jutiklių naudojimas

Naudojant iš mobiliojo įrenginio įsigytus duomenų jutiklius
Naudojant iš mobiliojo įrenginio įsigytus duomenų jutiklius

„MATLAB Mobile“programa leidžia mums naudoti mobilųjį įrenginį duomenims transliuoti naudojant jo giroskopą. Norėdami gauti duomenis per MATLAB, mes gauname duomenis nuskaitę juos iš orientacinės matricos iš „MATLAB mobile“. Tai darome sukurdami kintamąjį kiekvienam orientacinės matricos stulpeliui („Azimutas“, „Pitch“ir „Roll“) ir indeksuodami pastovų verčių srautą iš mobiliojo įrenginio į kompiuterį. Tai leidžia mums sukurti sąlyginius teiginius, kurie iš anksto sudarys išvestį, jei MATLAB paims konkretų duomenų įvestį iš mobiliojo įrenginio. Norėdami tai padaryti, jums reikės mobiliojo įrenginio „MATLAB mobile“ir kompiuterio „MATLAB“palaikymo paketo.

Failą galite atsisiųsti žemiau esančioje nuorodoje

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

4 žingsnis: kodas ir laidų prievadai

Kodas prasideda paleidimo pranešimu, kuriame klausiama, ar norime paleisti namų apsaugos įrenginį. Jei atsakysime „taip“ir pateiksime teisingą kodą, scenarijus iš karto pereis į laiko ciklą. Nuo tada jis pradeda rinkti duomenis iš mobiliojo įrenginio. Yra sąlyginių sąlygų, kurios skaito šiuos duomenis. Mes galime atrakinti ir užrakinti sistemą iš savo mobiliojo prietaiso, o kodas pasuks servo ir mirksės LED lemputę, priklausomai nuo pateiktų mobiliojo įrenginio duomenų

startup = questdlg ('Ar norėtumėte suaktyvinti „ecoTECH Smart Home Energy System“? “); % Prasideda „ecoTECHwaitfor“(paleidimo) aktyvinimo seka; jei paleidimas == "Taip" % Jei pasirenkama "Taip", prasideda aktyvinimo seka ir įeina į ciklo ciklą galinėje galioje = "įjungta"; m1 = msgbox ('ecoTECH paleidimas …'); pauzė (2); ištrinti (m1); m1_wait = laukimo juosta (0, 'Prašome palaukti …'); žingsniai = 25; i = 1: žingsnių pauzė (.1); laukimo juosta (i/žingsniai); % Atnaujina laukimo juostos pabaigos ištrynimą (m1_wait); PASSCODE = [0 0 0 0]; % Inicijuoja prieigos kodą ii = 0; % Inicijuoja kintamąjį, naudojamą išeiti iš kilpų m2 = msgbox ('ecoTECH visiškai veikia!'); pauzė (2); ištrinti (m2); elseif paleidimas == "Ne" || paleidimas == "Atšaukti" % Jei pasirinkta "Ne" arba "Atšaukti", aktyvinimo seka neprasideda ir neįeina, kol ciklo galia = "išjungta"; m3 = msgbox ('Gerai! Sudie!'); pauzė (2); ištrinti (m3); galas

% ecoTECH veiksmų sekcijoje, kol tiesa, o maitinimas == "on" % mobiliojo rakto skyrius, o tiesa % renka duomenis apie mobiliojo įrenginio sukimosi kryptį KEY = m. Orientation (3); % Renka duomenis apie mygtukus b2 = readDigitalPin (a, 'D2'); % Mygtukas 2 (raudona) b3 = readDigitalPin (a, 'D3'); % Mygtukas 3 (balta), jei KEY>> 35 % laipsniais m4 = msgbox ('Sveiki atvykę namo!'); writeDigitalPin (a, 'D8', 1); % Įjungia žalios šviesos pauzę (.5); writePosition (s, 1); % Pasuka servo, kad atrakintų durų pauzę (2); writeDigitalPin (a, 'D8', 0); % Išjungia žalios šviesos trynimą (m4); elseif KEY <= -35 % m5 laipsniais = msgbox ('Durys užrakintos!'); writeDigitalPin (a, 'D7', 1); % Įjungia raudonos šviesos pauzę (.5); writePosition (s, 0); % Pasuka servo, kad užrakintų durų pauzę (2); writeDigitalPin (a, 'D7', 0); % Išjungia raudonos šviesos trynimą (m5); ii = 1; pertrauka % Išeina, kai kilpa turi mobilųjį raktą, jei durys yra užrakintos naudojant mobilųjį įrenginį

Po to jis gali įvesti kitą ciklą. Tuo tarpu ciklas kontroliuoja rezultatus pagal mygtukų įvestį. Jei pirmoji ciklo ciklo dalis yra nereikšminga arba reikia užrakinti rankiniu būdu, ji įves kitą ciklo ciklą, kuriame reikia konkretaus slaptažodžio. Jei slaptažodis neteisingas, ciklas bus paleistas iš naujo

nors tiesa, jei ii == 1 % Išeina, kol kilpa, kurioje yra slaptažodis, jei durys buvo atrakintos naudojant mobiliojo prietaiso pertraukos pabaigą % renka duomenis apie mygtukus b5 = readDigitalPin (a, 'D5'); % Mygtukas 5 (mėlyna) b1 = readDigitalPin (a, 'D1'); % Mygtukas 1 (juodas) b4 = readDigitalPin (a, 'D4'); % Mygtukas 4 (balta), jei b5 == 0 % Pradeda slaptažodžio įvedimo skyrių, skirtą b = 1: 5 m6 = msgbox ('Prašome paspausti ir palaikyti mygtuką'); pauzė (2); ištrinti (m6); % Renka duomenis apie mygtukus b1 = readDigitalPin (a, 'D1'); % Mygtukas 1 (juodas) b2 = readDigitalPin (a, 'D2'); % Mygtukas 2 (raudona) b3 = readDigitalPin (a, 'D3'); % Mygtukas 3 (balta) b4 = readDigitalPin (a, 'D4'); % Mygtukas 4 (geltona) b5 = readDigitalPin (a, 'D5'); % Mygtukas 5 (mėlynas) % Pakeičia pradinio slaptažodžio reikšmes po vieną, jei 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)); % Paspaudžiamų mygtukų seka paverčiama skaičiais, o po to paverčiama eilutės pabaiga m7 = msgbox ('Sveiki atvykę namo!'); writeDigitalPin (a, 'D8', 1); % Įjungia žalios šviesos pauzę (.5); writePosition (s, 1); % Pasuka servo, kad atrakintų durų pauzę (5); writeDigitalPin (a, 'D8', 0); % Išjungia žalios šviesos pauzę (.1); writeDigitalPin (a, 'D7', 1); % Įjungia raudonos šviesos pauzę (.5); writePosition (s, 0); % Pasuka servo, kad užrakintų durų pauzę (1); writeDigitalPin (a, 'D7', 0); % Išjungia raudonos šviesos trynimą (m7); ii = 1; break % Išeina, kai ciklas turi slaptažodį, įvedus teisingą kodą elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Įjungia raudoną lemputę m8 = msgbox ('Neteisingas slaptažodis! Bandykite dar kartą!'); laukti (m8) writeDigitalPin (a, 'D7', 0); % Išjungia raudoną šviesą ir tęsia % Leidžia iš naujo įvesti slaptažodžio pabaigą elseif b1 == 0 && b4 == 0 % Išeina, kol ciklas turi kodą, jei nenorite įvesti slaptažodžio ii = 1; pertrauka pabaigos pabaiga

Jei tai teisinga, jis iš karto pateks į laiko ciklą, valdantį temperatūros jutiklį. Jei jungiklis įjungtas, ciklas tęsis ir parodys temperatūros ir laiko grafiką, kad būtų galima matyti tendenciją. Jei paspaudžiamas mygtukas, prijungtas prie temperatūros jutiklio, jis taip pat išsiųs el. Laišką, kuriame bus nurodyta, kokia temperatūra yra jūsų „namuose“. Jei jungiklis yra išjungtas, kodas nedelsiant nutraukiamas

t = 0; % Pradinis laikas = 0 sekundžių pertrauka (5) % Suteikia vartotojui laiko įjungti temperatūros jungiklį SWITCH = readDigitalPin (a, 'D11'); % Renka duomenis apie jungiklį kaištyje D11, o SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Renka duomenis apie jungiklį D11 kaištyje įtampa = readVoltage (a, 'A1'); % Skaito įtampą iš temperatūros jutiklio temp_C = (įtampa.*1000 - 500)./ 10; % Konvertuoja įtampą į temperatūrą ° C temp_F = (9/5).*Temp_C + 32; % Konvertuoja iš ° C į ° F grafiką (t, temp_C, 'b.') Sulaikymas antraštėje ('Kambario temperatūra'); xlabel („Laikas sekundėmis“); ylabel („Temperatūra“); ašis ([0, 180, 0, 100]); sklypo (t, temp_F, 'r.') užrašas ('Temperatūra ° C', 'Temperatūra ° F') pauzė (1); t = t + 1; % Laiko skaitiklis sekundėmis % El. Pašto skyrius b_temp = readDigitalPin (a, 'D0'); % Renka (mėlynos) temperatūros mygtuko duomenis kaištyje D0, jei b_temp == 0 setpref ('Internetas', 'SMTP_Server', 'smtp.gmail.com'); setpref („Internetas“, „El. paštas“, „[email protected]“); % Sender setpref ('Internetas', 'SMTP_Username', '[email protected]'); % Siuntėjo vartotojo vardas setpref ('Internetas', 'SMTP_Password', 'Integral_ecoTECH'); % Siuntėjo slaptažodžių rekvizitai = 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 kambario temperatūra', sprintf ('Dabartinė kambario temperatūra yra %.1f ° C arba %.1f ° F.', temp_C, temp_F)); % Siunčia el. Laišką gavėjui, kuriame pateikiami duomenys apie esamą kambario temperatūrą fprintf ('El. Laiškas sėkmingai išsiųstas! / N') pabaiga, jei temp_F> = 75 % Jei kambario temperatūra pakyla iki 75 ° F… temp_AC = 65; % Pakeičia termostato temperatūrą į 65 ° F elseif temp_F <= 65 % Jei kambario temperatūra nukrenta iki 60 ° F… temp_AC = 80; % Pakeičia termostato temperatūrą iki 80 ° F pabaigos pabaigos % "SWITCH == 0" pabaiga, o ciklas, jei maitinimas == "išjungtas" || ii == 1 % Išeina iš „maitinimo == įjungta“, o ciklo pertraukos pabaiga % „Maitinimo == įjungta“pabaiga, o ciklas, jei maitinimas == "išjungtas“|| ii == 1 % Išeina visas, kol ciklo pertrauka baigiasi

Tai buvo tik trumpa kodo ir jo veikimo apžvalga. Prireikus pridėjome visą kodą kaip pdf

Čia yra sąrašas prie kurio prievado prijungtas kiekvienas įrenginys

1. RGB LED: skaitmeniniai kaiščiai (7, 8, 9)

2. Servo: skaitmeninis kaištis 6

3. Mygtukai: skaitmeniniai kaiščiai (1, 2, 3, 4, 5)

4. Mėlynas elektroninio pašto mygtukas: skaitmeninis kaištis 0

5. Temperatūros jutiklis: 1 analoginis kaištis

6. Jungiklis: skaitmeninis kaištis 11

Rekomenduojamas: