Innholdsfortegnelse:
- Trinn 1: Deler og materialer
- Trinn 2: MATLAB Arduino Support Package
- Trinn 3: Bruke datasensorer hentet fra mobilenhet
- Trinn 4: Koden og ledningsportene
Video: MATLAB kontrollert mikrokontroller (Arduino MKR1000): 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
Målet med prosjektet vårt var å utnytte MATLAB så vel som Arduino MKR1000 etter beste evne. Målet vårt var å lage et skript som tillot visse funksjoner i arduinoen å utføre en bestemt utgang basert på en bestemt inngang. Vi brukte mange sløyfer og betingede utsagn i MATLAB som gjorde dette mulig. Vi brukte også MATLAB mobil ved å bruke data hentet fra en mobilenhets gyroskop for å forbedre prosjektet så mye som mulig.
Trinn 1: Deler og materialer
MATLAB 2018a
-2018 -versjonen av MATLAB er den mest foretrukne versjonen, hovedsakelig fordi den fungerer best med koden som kobles til mobilenheten. Imidlertid kan det meste av koden vår tolkes av de fleste MATLAB -versjoner.
Arduino MKR1000
-Dette er en spesifikk enhet som lar oss koble kretser til både digitale og analoge porter. Det er viktig at du også har et brødbrett som du kan følge med på.
Tilbehør
-Når vi brukte MKR1000, trengte vi tilbehør for å utføre de nødvendige funksjonene.
Dette inkluderer
- Servo
- Knapp (6)
- Utskiftbart RBG LED -lys
- Enkle ledninger
- brødbrett (er)
- mini strømbryter
- temperatur sensor
- 330 ohm motstand
- 10K ohm motstand
- USB-microUSB-ledning
- Bærbar/stasjonær
- Mobil enhet
Det skal også bemerkes at det er mange, mange flere tilbehør som kan brukes med MKR1000
Trinn 2: MATLAB Arduino Support Package
For å kunne bruke Arduino MKR1000 gjennom MATLAB riktig, må du laste ned MATLAB Support Package for Arduino Hardware. Denne nedlastingen gir deg tilgang til visse funksjoner og kommandoer direkte til arduino -kortet.
Du kan laste ned pakken på lenken nedenfor
www.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware
Trinn 3: Bruke datasensorer hentet fra mobilenhet
Med MATLAB Mobile -appen kan vi bruke en mobilenhet til å streame data ved hjelp av gyroskopet. For å skaffe dataene gjennom MATLAB, får vi dataene ved å hente dem fra orienteringsmatrisen fra MATLAB mobile. Vi gjør dette ved å opprette en variabel for hver kolonne i orienteringsmatrisen (Azimuth, Pitch og Roll), og indeksere den konstante strømmen av verdier fra mobilenheten til datamaskinen. Dette lar oss lage betingede utsagn som vil forhåndsforme en utgang hvis MATLAB henter en bestemt datainngang fra mobilenheten. For å gjøre dette trenger du MATLAB -mobil på mobilenheten din, og støttepakken for mobile enheter for MATLAB på datamaskinen din.
Du kan laste ned filen på lenken nedenfor
www.mathworks.com/matlabcentral/fileexchange/51235-matlab-support-package-for-apple-ios-sensors
Trinn 4: Koden og ledningsportene
Koden begynner med en oppstartsmelding som spør om vi ønsker å starte hjemmesikkerhetsenheten. Hvis vi svarer ja, og gir riktig passord, hopper skriptet umiddelbart inn i en stund -sløyfe. Derfra begynner det å samle inn data fra den mobile enheten. Det er betingelser som leser disse dataene. Vi kan låse opp og låse systemet fra mobilenheten vår, og koden vil snu servoen og blinke LED -lampen avhengig av de oppgitte dataene fra den mobile enheten
oppstart = questdlg ('Vil du aktivere ecoTECH Smart Home Energy System?'); % Starter aktiveringssekvensen til ecoTECHwaitfor (oppstart); hvis oppstart == "Ja" % Hvis "Ja" er valgt starter en aktiveringssekvens og går inn i mens -sløyfen på slutten power = "on"; m1 = msgbox ('Start opp ecoTECH …'); pause (2); slett (m1); m1_wait = ventelinje (0, "Vennligst vent …"); trinn = 25; for i = 1: trinn pause (.1); ventelinje (i/trinn); % Oppdaterer sletting av ventelinjen (m1_wait); PASSKODE = [0 0 0 0]; % Initialiserer passord ii = 0; % Initialiserer en variabel som brukes til å bryte ut av løkker m2 = msgbox ('ecoTECH fullt operativt!'); pause (2); slett (m2); elseif oppstart == "Nei" || oppstart == "Avbryt" % Hvis "Nei" eller "Avbryt" er valgt, starter ikke aktiveringssekvensen og angir ikke mens sløyfen er strøm = "av"; m3 = msgbox ('Ok! Farvel!'); pause (2); slett (m3); slutt
% ecoTECH in Action Section while true while power == "on" % Mobile Key Section while true % Samler inn data om roll -orienteringen til den mobile enheten KEY = m. Orientation (3); % Samler inn data om knappene b2 = readDigitalPin (a, 'D2'); % Knapp 2 (rød) b3 = readDigitalPin (a, 'D3'); % Knapp 3 (hvit) hvis KEY> = 35 % i grader m4 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1); % Slår på grønt lyspause (.5); writePosition (s, 1); % Snu servoen for å låse opp dørpausen (2); writeDigitalPin (a, 'D8', 0); % Slår av det grønne lyset slette (m4); elseif KEY <= -35 % in degrees m5 = msgbox ('Door Locked!'); writeDigitalPin (a, 'D7', 1); % Slår på rødt lyspause (.5); writePosition (s, 0); % Slår servoen for å låse dørpausen (2); writeDigitalPin (a, 'D7', 0); % Slår av slettet rødt lys (m5); ii = 1; break % Avsluttes mens sløyfe inneholder mobilnøkkel hvis døren er låst med den mobile enheten ellers hvis b2 == 0 && b3 == 0 % Avslutter mens sløyfen inneholder mobilnøkkelen for å angi passordseksjonens ende ende
Etter dette kan den gå inn i en annen mens loop. Dette mens sløyfen styrer utfallene basert på inngangene fra knappene. Hvis den første mens sløyfen er ubetydelig, eller det er nødvendig med en manuell låsing, vil den legge inn en annen mens sløyfe der et spesifikt passord er nødvendig. Hvis passordet er feil, starter sløyfen på nytt
mens sant hvis ii == 1 % Avslutter mens sløyfe inneholder passord hvis døren ble låst opp med mobilenhetens slutt slutt % Samler data om knappene b5 = readDigitalPin (a, 'D5'); % Knapp 5 (blå) b1 = readDigitalPin (a, 'D1'); % Knapp 1 (svart) b4 = readDigitalPin (a, 'D4'); % Knapp 4 (hvit) hvis b5 == 0 % Starter passordinntastingsdelen for b = 1: 5 m6 = msgbox ('Vennligst trykk og hold inne en knapp'); pause (2); slett (m6); % Samler inn data om knappene b1 = readDigitalPin (a, 'D1'); % Knapp 1 (svart) b2 = readDigitalPin (a, 'D2'); % Knapp 2 (rød) b3 = readDigitalPin (a, 'D3'); % Knapp 3 (hvit) b4 = readDigitalPin (a, 'D4'); % Knapp 4 (gul) b5 = readDigitalPin (a, 'D5'); % Knapp 5 (blå) % Erstatter verdiene i den første passordet én om gangen hvis b1 == 0 PASSKODE (0+b) = 1; elseif b2 == 0 PASSKODE (0+b) = 2; elseif b3 == 0 PASSKODE (0+b) = 3; elseif b4 == 0 PASSKODE (0+b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.ff%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Slår sekvensen av knapper som trykkes inn i tall og konverterer den deretter til en strengende ende m7 = msgbox ('Velkommen hjem!'); writeDigitalPin (a, 'D8', 1); % Slår på grønt lyspause (.5); writePosition (s, 1); % Vri servoen for å låse opp dørpausen (5); writeDigitalPin (a, 'D8', 0); % Slår av grønt lyspause (.1); writeDigitalPin (a, 'D7', 1); % Slår på rødt lyspause (.5); writePosition (s, 0); % Slår servoen for å låse dørpausen (1); writeDigitalPin (a, 'D7', 0); % Slår av slettet rødt lys (m7); ii = 1; break % Avslutter mens sløyfe inneholder passord etter å ha angitt riktig passord elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Slår på det røde lyset m8 = msgbox ('Feil passord! Prøv igjen!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Slår av det røde lyset fortsetter % Lar deg angi en passord på nytt, hvis b1 == 0 && b4 == 0 % Avslutter mens sløyfen inneholder passorddelen hvis du ikke vil angi en kode ii = 1; pause ende ende
Hvis det er riktig, vil det umiddelbart gå inn i en stund -sløyfe som styrer temperatursensoren. Hvis bryteren er på, vil sløyfen fortsette gjennom og plotte temperaturen mot tiden plottet, slik at en kan se trenden. Hvis du trykker på knappen som er koblet til temperatursensoren, vil den også sende en e -post som forteller deg hva temperaturen er i ditt "hjem". Hvis bryteren er slått av, avsluttes koden umiddelbart
t = 0; % Starttid = 0 sekunder pause (5) % Gir brukeren tid til å slå på temperaturbryteren SWITCH = readDigitalPin (a, 'D11'); % Samler inn data om bryteren i pin D11 mens SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Samler inn data om bryteren i pin D11 spenning = readVoltage (a, 'A1'); % Leser spenningen fra temperatursensoren temp_C = (spenning.*1000 - 500)./ 10; % Konverterer spenningen til temperatur i ° C temp_F = (9/5).*Temp_C + 32; % Konverterer fra ° C til ° F plott (t, temp_C, 'b.') Hold on title ('Romtemperatur'); xlabel ('Time in Seconds'); ylabel ('Temperatur'); akse ([0, 180, 0, 100]); plot (t, temp_F, 'r.') legend ('Temperatur i ° C', 'Temperatur i ° F') pause (1); t = t + 1; % Tidsteller i sekunder % E-post seksjon b_temp = readDigitalPin (a, 'D0'); % Samler dataene til (blå) temperaturknappen i pin D0 hvis b_temp == 0 setpref ('Internett', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internett', 'E_mail', '[email protected]'); % Sender setpref ('Internett', 'SMTP_Username', '[email protected]'); % Avsenders brukernavn setpref ('Internett', 'SMTP_Password', 'Integral_ecoTECH'); % Avsenders passordrekvisitter = 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 Romtemperatur ', sprintf (' Gjeldende romtemperatur er %.1f ° C eller %.1f ° F. ', temp_C, temp_F)); % Sender en e-post til mottakeren med data om gjeldende romtemperatur fprintf ('E-posten er sendt! / N') avsluttes hvis temp_F> = 75 % Hvis romtemperaturen stiger til 75 ° F… temp_AC = 65; % Endrer temperaturen på termostaten til 65 ° F ellers hvis temp_F <= 65 % Hvis romtemperaturen synker til 60 ° F… temp_AC = 80; % Endrer temperaturen på termostaten til 80 ° F endeenden % Slutten på "SWITCH == 0" mens sløyfe hvis strøm == "off" || ii == 1 % Avslutter "power == on" mens sløyfeavbruddsslutt slutten % Slutt på "power == på" mens loop hvis power == "off" || ii == 1 % Avsluttes hele mens sløyfen brytes
Dette var bare en kort oversikt over koden og funksjonaliteten. Vi har vedlagt hele koden som pdf om nødvendig
Her er listen over hvilken port hver enhet er koblet til
1. RGB LED: Digitale pins (7, 8, 9)
2. Servo: Digital pin 6
3. Knapper: Digitale pins (1, 2, 3, 4, 5)
4. Blå knapp for e -post: Digital pin 0
5. Temperatursensor: Analog pin 1
6. Bryter: Digital pin 11
Anbefalt:
DIY Arduino Bluetooth -kontrollert bil: 6 trinn (med bilder)
DIY Arduino Bluetooth -kontrollert bil: Hei venner! Mitt navn er Nikolas, jeg er 15 år gammel og jeg bor i Athen, Hellas. I dag vil jeg vise deg hvordan du lager en 2-hjulet Bluetooth-kontrollert bil ved hjelp av en Arduino Nano, en 3D-skriver og noen enkle elektroniske komponenter! Sørg for å se på min
Romlys kontrollert ved hjelp av PIR -sensor og Arduino: 6 trinn
Romlys kontrollert ved hjelp av PIR -sensor og Arduino: I dag vil vi kontrollere lysene i rommet ditt gjennom deteksjon av bevegelse ved hjelp av en Arduino PIR -bevegelsessensor. Dette prosjektet er veldig morsomt å lage, og det har veldig praktisk bruk i huset ditt og kan spare deg for penger ved å gjøre dette prosjektet også. Ju
Alexa kontrollert garasjeport med Arduino Esp8266: 6 trinn
Alexa kontrollert garasjeport med Arduino Esp8266: Ideen til dette prosjektet kom fra et gammelt prosjekt jeg hadde jobbet med for en stund siden. Jeg hadde koblet til en enkel trykknappkrets som ville slå på en LED når en knapp ble trykket av garasjeporten. Denne metoden viste seg å være upålitelig og ikke like nyttig
Arduino-kontrollert modellheis: 7 trinn (med bilder)
Arduino-kontrollert modellheis: I denne instruksjonsboken vil jeg vise deg hvordan jeg bygde en to-nivå lekeheis, med fungerende skyvedører og en bil som beveger seg opp og ned etter behov. Hjertets hjerte er en Arduino Uno (eller i dette tilfellet en Adafruit Metro), med Adafruit Moto
MATLAB -kontrollert Roomba: 5 trinn
MATLAB -kontrollert Roomba: Målet med dette prosjektet er å bruke MATLAB så vel som en modifisert iRobot programmerbar robot. Gruppen vår kombinerte kodingskunnskapene våre for å lage et MATLAB -skript som bruker mange funksjoner i iRobot, inkludert klippesensorene, støtfangersensoren