Inhoudsopgave:
- Stap 1: Onderdelen en materialen
- Stap 2: MATLAB Arduino-ondersteuningspakket
- Stap 3: Gegevenssensoren gebruiken die zijn verkregen van een mobiel apparaat
- Stap 4: De code en bedradingspoorten
Video: MATLAB-gestuurde microcontroller (Arduino MKR1000): 4 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
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
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
- Servo
- Knop (6)
- Verwisselbare RBG LED-lamp
- Eenvoudige draden
- broodplank(en)
- mini-schakelaar:
- temperatuursensor
- 330 ohm weerstand
- 10K ohm weerstand
- USB-microUSB-kabel
- Laptop/desktop
- 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
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:
Een IoT Halloween-pompoen - Bedien LED's met een Arduino MKR1000 en Blynk-app ???: 4 stappen (met afbeeldingen)
Een IoT Halloween-pompoen | Bedien LED's Met een Arduino MKR1000 en Blynk App ???: Hallo allemaal, Een paar weken geleden was het Halloween en volgens de traditie heb ik een mooie pompoen uitgesneden voor op mijn balkon. Maar toen ik mijn pompoen buiten had, realiseerde ik me dat het best vervelend was om elke avond de deur uit te moeten om de kaars aan te steken. En ik
Een LED-klok zonder microcontroller: 12 stappen
Een LED-klok zonder microcontroller: Het lijkt erop dat ik graag verschillende klokken maak. Ik heb talloze elektronische en mechanische klokken gebouwd en ontworpen en deze is er weer een. Mijn eerste elektronische klok vereiste verschillende iteraties en ik heb veel geleerd. Het gepresenteerde ontwerp is verbe
Smart Home Met Arduino MKR1000 en M.I.T. Android-app: 4 stappen
Smart Home Met Arduino MKR1000 en M.I.T. Android App: In deze tutorial beschrijf ik hoe je je smart home kunt verbeteren met slechts een paar componenten. Het hart van dit smart home-ontwerp is het Arduino MKR1000-bord, aangestuurd met een app, ontworpen op de ontwikkelwebsite van de M.I.T. (Massachusetts Instituut
MKR1000 IoT Client/server-communicatie: 4 stappen
MKR1000 IoT Client/server-communicatie: Dit project beschrijft hoe twee Arduino/Genuino MKR1000-apparaten als server en client kunnen worden ingesteld. De client MKR1000 maakt verbinding met uw lokale wifi en luistert naar twee ingangen die fysiek met de client zijn verbonden; een van een knop en de andere van een vibrator
AVR Microcontroller Zekering Bits Configuratie. Het LED-knipperprogramma maken en uploaden in het flashgeheugen van de microcontroller: 5 stappen
AVR Microcontroller Zekering Bits Configuratie. Het LED-knipperprogramma maken en uploaden in het Flash-geheugen van de microcontroller. In dit geval zullen we een eenvoudig programma in C-code maken en dit in het geheugen van de microcontroller branden. We zullen ons eigen programma schrijven en het hex-bestand compileren, waarbij we de Atmel Studio als geïntegreerd ontwikkelplatform gebruiken. We zullen zekering bi