Inhoudsopgave:

MATLAB-gestuurde microcontroller (Arduino MKR1000): 4 stappen
MATLAB-gestuurde microcontroller (Arduino MKR1000): 4 stappen

Video: MATLAB-gestuurde microcontroller (Arduino MKR1000): 4 stappen

Video: MATLAB-gestuurde microcontroller (Arduino MKR1000): 4 stappen
Video: HU robot project 1 the race 2024, November
Anonim
MATLAB-gestuurde microcontroller (Arduino MKR1000)
MATLAB-gestuurde microcontroller (Arduino MKR1000)

Het doel van ons project was om zowel MATLAB als de Arduino MKR1000 zo goed mogelijk te gebruiken. Ons doel was om een script te maken waarmee bepaalde functies van de arduino een bepaalde uitvoer konden uitvoeren op basis van een specifieke invoer. We gebruikten veel loops en voorwaardelijke statements in MATLAB die dit mogelijk maakten. We hebben ook MATLAB mobiel gebruikt door gegevens te gebruiken die zijn verkregen van de gyroscoop van een mobiel apparaat om het project zoveel mogelijk te verbeteren.

Stap 1: Onderdelen en materialen

Onderdelen en materialen
Onderdelen en materialen
Onderdelen en materialen
Onderdelen en materialen
Onderdelen en materialen
Onderdelen en materialen

MATLAB 2018a

-De 2018-versie van MATLAB heeft de meeste voorkeur, vooral omdat deze het beste werkt met de code die verbinding maakt met het mobiele apparaat. De meeste van onze code kan echter worden geïnterpreteerd door de meeste MATLAB-versies.

Arduino MKR1000

-Dit is een specifiek apparaat waarmee we circuits kunnen aansluiten op zowel digitale als analoge poorten. Het is van vitaal belang dat je er ook een breadboard bij hebt.

Accessoires

-Bij gebruik van de MKR1000 hadden we accessoires nodig om de noodzakelijke functies uit te voeren.

Dit bevat

  1. Servo
  2. Knop (6)
  3. Verwisselbare RBG LED-lamp
  4. Eenvoudige draden
  5. broodplank(en)
  6. mini-schakelaar:
  7. temperatuursensor
  8. 330 ohm weerstand
  9. 10K ohm weerstand
  10. USB-microUSB-kabel
  11. Laptop/desktop
  12. Mobiel apparaat

Er moet ook worden opgemerkt dat er nog veel, veel meer accessoires zijn die kunnen worden gebruikt met de MKR1000

Stap 2: MATLAB Arduino-ondersteuningspakket

Om de Arduino MKR1000 correct te gebruiken via MATLAB, moet u het MATLAB-ondersteuningspakket voor Arduino-hardware downloaden. Deze download geeft je direct toegang tot bepaalde functies en commando's op het Arduino-bord.

U kunt het pakket downloaden via onderstaande link

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

Stap 3: Gegevenssensoren gebruiken die zijn verkregen van een mobiel apparaat

Gegevenssensoren gebruiken die zijn verkregen van een mobiel apparaat
Gegevenssensoren gebruiken die zijn verkregen van een mobiel apparaat

Met de MATLAB Mobile-app kunnen we een mobiel apparaat gebruiken om gegevens te streamen met behulp van de gyroscoop. Om de gegevens via MATLAB te verkrijgen, verkrijgen we de gegevens door deze op te halen uit de oriëntatiematrix van MATLAB mobiel. We doen dit door voor elke kolom van de oriëntatiematrix (Azimuth, Pitch en Roll) een variabele te maken en de constante stroom van waarden van het mobiele apparaat naar de computer te indexeren. Dit stelt ons in staat om voorwaardelijke instructies te maken die een uitvoer zullen vormen als MATLAB een specifieke gegevensinvoer van het mobiele apparaat oppikt. Hiervoor heeft u MATLAB mobiel op uw mobiele apparaat nodig en het ondersteuningspakket voor mobiele apparaten voor MATLAB op uw computer.

U kunt het bestand downloaden via de onderstaande link:

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

Stap 4: De code en bedradingspoorten

De code begint met een opstartbericht waarin wordt gevraagd of we ons huisbeveiligingsapparaat willen opstarten. Als we ja antwoorden en de juiste toegangscode geven, springt het script onmiddellijk in een while-lus. Vanaf daar begint het met het verzamelen van gegevens van het mobiele apparaat. Er zijn voorwaarden die deze gegevens lezen. We kunnen het systeem ontgrendelen en vergrendelen vanaf ons mobiele apparaat, en de code zal de servo draaien en het LED-lampje laten knipperen, afhankelijk van de gegeven gegevens van het mobiele apparaat

startup = questdlg('Wilt u ecoTECH Smart Home Energy System activeren?'); % Begint de activeringsreeks van ecoTECHwaitfor(startup); if startup == "Yes" % Als "Yes" is geselecteerd, begint een activeringsreeks en gaat de while-lus aan het einde in power = "on"; m1 = msgbox('EcoTECH opstarten…'); pauze (2); verwijderen (m1); m1_wait = wachtbalk(0, 'Even geduld aub…'); stappen = 25; voor i = 1: stappen pauze (.1); wachtbalk (i/stappen); % Updatet de wachtbalk einde delete(m1_wait); PASCODE = [0 0 0 0]; % Initialiseert toegangscode ii = 0; % Initialiseert een variabele die wordt gebruikt om lussen te doorbreken m2 = msgbox('ecoTECH volledig operationeel!'); pauze (2); verwijderen (m2); elseif opstarten == "Nee" || startup == "Annuleren" % Als "Nee" of "Annuleren" is geselecteerd, start de activeringsreeks niet en komt niet in de while-lus power = "off"; m3 = msgbox('Oké! Tot ziens!'); pauze (2); verwijderen (m3); einde

% ecoTECH in actie Sectie terwijl true while power == "aan" % Mobile Key Section while true % Verzamelt gegevens over de rolrichting van het mobiele apparaat KEY = m. Oriëntatie(3); % Verzamelt gegevens over de knoppen b2 = readDigitalPin(a, 'D2'); % Knop 2 (Rood) b3 = readDigitalPin(a, 'D3'); % Knop 3 (Wit) indien KEY >= 35% in graden m4 = msgbox('Welkom thuis!'); writeDigitalPin(a, 'D8', 1); % Schakelt het groene lampje pauze (.5) in; schrijfPositie(s, 1); % Draait de servo om de deurpauze (2) te ontgrendelen; writeDigitalPin(a, 'D8', 0); % Schakelt het groene licht uit delete (m4); elseif KEY <= -35% in graden m5 = msgbox('Deur op slot!'); writeDigitalPin(a, 'D7', 1); % Schakelt de pauze van het rode licht in (.5); schrijfPositie(s, 0); % Draait de servo om de deur te vergrendelen pauze (2); writeDigitalPin(a, 'D7', 0); % Schakelt het rode lampje uit delete (m5); ii = 1; break % Verlaat de while-lus met de mobiele sleutel als de deur vergrendeld is met het mobiele apparaat elseif b2 == 0 && b3 == 0 % Verlaat de while-lus met de mobiele sleutel om de toegangscode in te voeren sectie break end end

Hierna kan het een andere while-lus ingaan. Deze while-lus regelt de uitkomsten op basis van de invoer van de knoppen. Als de eerste while-lus verwaarloosbaar is, of een handmatige vergrendeling vereist is, zal deze een andere while-lus ingaan waarvoor een specifiek wachtwoord nodig is. Als het wachtwoord onjuist is, wordt de lus opnieuw gestart

while true if ii == 1 % Verlaat de while-lus met de toegangscode als de deur ontgrendeld was met het einde van het mobiele apparaat % Verzamelt gegevens over de knoppen b5 = readDigitalPin(a, 'D5'); % Knop 5 (Blauw) b1 = readDigitalPin(a, 'D1'); % Knop 1 (zwart) b4 = readDigitalPin(a, 'D4'); % Knop 4 (Wit) als b5 == 0 % Start de toegangscode-invoersectie voor b = 1:5 m6 = msgbox('Druk een knop in en houd deze ingedrukt'); pauze (2); verwijderen (m6); % Verzamelt gegevens over de knoppen b1 = readDigitalPin(a, 'D1'); % Knop 1 (zwart) b2 = readDigitalPin(a, 'D2'); % Knop 2 (Rood) b3 = readDigitalPin(a, 'D3'); % Knop 3 (Wit) b4 = readDigitalPin(a, 'D4'); % Knop 4 (Geel) b5 = readDigitalPin(a, 'D5'); % Knop 5 (Blauw) % Vervangt de waarden in de initiële toegangscode één voor één als b1 == 0 PASSCODE(0+b) = 1; elseif b2 == 0 PASSCODE(0+b) = 2; elseif b3 == 0 PASCODE(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)); % Verandert de reeks ingedrukte toetsen in cijfers en converteert deze vervolgens naar een tekenreeks einde % Einde van for-lus voor het invoeren van cijfers voor toegangscode als PASSCODE == "2314" % Als de ingevoerde toegangscode overeenkomt, wordt de deur een paar seconden ontgrendeld en vervolgens vergrendeld m7 = msgbox('Welkom thuis!'); writeDigitalPin(a, 'D8', 1); % Schakelt het groene lampje pauze (.5) in; schrijfPositie(s, 1); % Draait de servo om de deurpauze (5) te ontgrendelen; writeDigitalPin(a, 'D8', 0); % Schakelt het groene licht pauze(.1) uit; writeDigitalPin(a, 'D7', 1); % Schakelt de pauze van het rode licht in (.5); schrijfPositie(s, 0); % Draait de servo om de deurpauze (1) te vergrendelen; writeDigitalPin(a, 'D7', 0); % Schakelt het rode licht uit delete (m7); ii = 1; break % Verlaat de while-lus die de toegangscode bevat na het invoeren van de juiste toegangscode elseif PASSCODE ~= "2314" writeDigitalPin(a, 'D7', 1); % Schakelt het rode lampje in m8 = msgbox('Onjuiste toegangscode! Probeer het opnieuw!'); waitfor(m8) writeDigitalPin(a, 'D7', 0); % Schakelt het rode lampje uit doorgaan % Hiermee kunt u een toegangscode opnieuw invoeren end elseif b1 == 0 && b4 == 0 % Sluit de while-lus met de toegangscodesectie af als u geen toegangscode wilt invoeren ii = 1; pauze einde einde

Als het goed is, komt het onmiddellijk in een while-lus die de temperatuursensor aanstuurt. Als de schakelaar is ingeschakeld, gaat de lus door en wordt de temperatuur versus de tijd uitgezet, zodat men de trend kan zien. Als de knop die is aangesloten op de temperatuursensor wordt ingedrukt, stuurt deze ook een e-mail met de temperatuur in uw "huis". Als de schakelaar is uitgeschakeld, wordt de code onmiddellijk beëindigd

t = 0; % Initiële tijd = 0 seconden pauze(5) % Geeft de gebruiker tijd om de temperatuurschakelaar in te schakelen SWITCH = readDigitalPin(a, 'D11'); % Verzamelt gegevens over de schakelaar in pin D11 terwijl SWITCH == 0 SWITCH = readDigitalPin(a, 'D11'); % Verzamelt gegevens over de schakelaar in pin D11 spanning = readVoltage (a, 'A1'); % Leest de spanning van de temperatuursensor temp_C = (spanning.*1000 - 500)./10; % Zet de spanning om in temperatuur in °C temp_F = (9/5).*temp_C + 32; % Converteert van °C naar °F plot(t, temp_C, 'b.') hold on title('Room Temperature'); xlabel('Tijd in seconden'); ylabel('Temperatuur'); as([0, 180, 0, 100]); plot(t, temp_F, 'r.') legend('Temperatuur in °C', 'Temperatuur in °F') pause(1); t = t + 1; % Tijdteller in seconden % E-mail Sectie b_temp = readDigitalPin(a, 'D0'); % Verzamelt de gegevens van de (blauwe) temperatuurknop in pin D0 if b_temp == 0 setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_mail', '[email protected]'); % Afzender setpref('Internet', 'SMTP_Gebruikersnaam', '[email protected]'); % gebruikersnaam setpref('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Afzender's wachtwoord props = 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('De huidige kamertemperatuur is %.1f °C of %.1f °F.', temp_C, temp_F)); % Stuurt een e-mail naar de ontvanger met gegevens over de huidige kamertemperatuur fprintf('E-mail succesvol verzonden!\n') end if temp_F >= 75 % Als de kamertemperatuur stijgt tot 75 °F… temp_AC = 65; % Verandert de temperatuur op de thermostaat naar 65 °F elseif temp_F <= 65 % Als de kamertemperatuur daalt tot 60 °F… temp_AC = 80; % Verandert de temperatuur op de thermostaat naar 80 °F eind eind % Einde van "SCHAKELAAR == 0" while loop if power == "uit" || ii == 1 % Verlaat "power == on" while loop break end end % Einde "power == on" while loop if power == "off" || ii == 1 % Verlaat volledig terwijl lusonderbreking eindigt

Dit was slechts een kort overzicht van de code en de functionaliteit ervan. We hebben de volledige code indien nodig als pdf bijgevoegd

Hier is de lijst van op welke poort elk apparaat is aangesloten

1. RGB-led: digitale pinnen (7, 8, 9)

2. Servo: digitale pin 6

3. Knoppen: Digitale pinnen (1, 2, 3, 4, 5)

4. Blauwe knop voor e-mail: digitale pin 0

5. Temperatuursensor: analoge pin 1

6. Schakelaar: digitale pin 11

Aanbevolen: