Spisu treści:

Kontrolowany mikrokontroler MATLAB (Arduino MKR1000): 4 kroki
Kontrolowany mikrokontroler MATLAB (Arduino MKR1000): 4 kroki

Wideo: Kontrolowany mikrokontroler MATLAB (Arduino MKR1000): 4 kroki

Wideo: Kontrolowany mikrokontroler MATLAB (Arduino MKR1000): 4 kroki
Wideo: Lesson 03: Project LED Blink Breadboard and Resistor | Robojax Arduino Step By Step Course 2024, Listopad
Anonim
Kontrolowany mikrokontroler MATLAB (Arduino MKR1000)
Kontrolowany mikrokontroler MATLAB (Arduino MKR1000)

Celem naszego projektu było jak najlepsze wykorzystanie MATLAB oraz Arduino MKR1000. Naszym celem było stworzenie skryptu, który pozwalałby pewnym funkcjom arduino na wykonanie określonego wyjścia w oparciu o określone dane wejściowe. Użyliśmy wielu pętli i instrukcji warunkowych zawartych w MATLAB, które to umożliwiły. Wykorzystaliśmy również MATLAB mobile, wykorzystując dane uzyskane z żyroskopu urządzenia mobilnego, aby maksymalnie usprawnić projekt.

Krok 1: Części i materiały

Części i materiały
Części i materiały
Części i materiały
Części i materiały
Części i materiały
Części i materiały

MATLAB 2018a

- Wersja MATLAB 2018 jest najbardziej preferowaną wersją, głównie dlatego, że najlepiej działa z kodem, który łączy się z urządzeniem mobilnym. Jednak większość naszego kodu może być interpretowana przez większość wersji MATLAB.

Arduino MKR1000

-Jest to specyficzne urządzenie, które pozwala nam podłączyć obwody zarówno do portów cyfrowych, jak i analogowych. Ważne jest, abyś miał również tablicę prototypową, aby się z tym pogodzić.

Akcesoria

- Podczas korzystania z MKR1000 potrzebowaliśmy akcesoriów do wykonywania niezbędnych funkcji.

To zawiera

  1. Serwo
  2. Przycisk (6)
  3. Wymienne światło LED RGB
  4. Proste przewody
  5. płytki do krojenia chleba
  6. mini wyłącznik zasilania
  7. czujnik temperatury
  8. Rezystor 330 omów
  9. Rezystor 10K omów
  10. Przewód USB-microUSB
  11. Laptop/komputer stacjonarny
  12. Urządzenie przenośne

Należy również zauważyć, że istnieje wiele, wiele więcej akcesoriów, których można używać z MKR1000

Krok 2: Pakiet wsparcia MATLAB Arduino

Aby prawidłowo korzystać z Arduino MKR1000 przez MATLAB, musisz pobrać pakiet wsparcia MATLAB dla sprzętu Arduino. Ten plik do pobrania daje dostęp do niektórych funkcji i poleceń bezpośrednio do płyty arduino.

Możesz pobrać pakiet pod poniższym linkiem

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

Krok 3: Korzystanie z czujników danych pobranych z urządzenia mobilnego

Korzystanie z czujników danych pobranych z urządzenia mobilnego
Korzystanie z czujników danych pobranych z urządzenia mobilnego

Aplikacja MATLAB Mobile pozwala nam używać urządzenia mobilnego do strumieniowego przesyłania danych za pomocą żyroskopu. Aby uzyskać dane za pośrednictwem MATLAB, uzyskujemy dane, pobierając je z macierzy orientacji z MATLAB mobile. Robimy to, tworząc zmienną dla każdej kolumny macierzy orientacji (azymut, skok i przechylenie) i indeksując stały strumień wartości z urządzenia mobilnego do komputera. To pozwala nam tworzyć instrukcje warunkowe, które będą tworzyć dane wyjściowe, jeśli MATLAB pobierze określone dane wejściowe z urządzenia mobilnego. Aby to zrobić, będziesz potrzebować MATLAB mobile na swoim urządzeniu mobilnym oraz pakietu wsparcia urządzeń mobilnych dla MATLAB na swoim komputerze.

Możesz pobrać plik pod poniższym linkiem

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

Krok 4: Porty kodu i okablowania

Kod zaczyna się od komunikatu startowego, który pyta, czy chcemy uruchomić nasze domowe urządzenie zabezpieczające. Jeśli odpowiemy tak i podamy poprawne hasło, skrypt natychmiast wskoczy w pętlę while. Stamtąd zaczyna zbierać dane z urządzenia mobilnego. Istnieją warunki, które odczytują te dane. Możemy odblokować i zablokować system z naszego urządzenia mobilnego, a kod będzie włączał serwo i mrugał diodą LED w zależności od podanych danych z urządzenia mobilnego

startup = questdlg('Czy chcesz aktywować system ecoTECH Smart Home Energy System?'); % Rozpoczyna sekwencję aktywacji ecoTECHwaitfor(startup); if startup == "Tak" % Jeśli wybrano "Tak" sekwencja aktywacji rozpoczyna się i wchodzi w pętlę while na końcu zasilania = "on"; m1 = msgbox('Uruchamianie ecoTECH…'); pauza(2); usuń(m1); m1_wait = waitbar(0, 'Proszę czekać…'); kroki = 25; dla i = 1:kroki pauza(.1); pasek oczekiwania(i/kroki); % Aktualizuje koniec paska oczekiwania usuń(m1_wait); HASŁO = [0 0 0 0]; % Inicjuje hasło ii = 0; % Inicjuje zmienną służącą do wyjścia z pętli m2 = msgbox('ecoTECH w pełni działa!'); pauza(2); usuń(m2); uruchamianie elseif == "Nie" || startup == "Anuluj" % Jeśli wybrano "Nie" lub "Anuluj", sekwencja aktywacji nie rozpoczyna się i nie wchodzi do pętli while power = "off"; m3 = msgbox('Do widzenia! Do widzenia!'); pauza(2); usuń(m3); kończyć się

% ecoTECH w sekcji Action while true while power == "on" % Mobile Key Sekcja while true % Zbiera dane o orientacji roll urządzenia mobilnego KEY = m. Orientation(3); % Zbiera dane o przyciskach b2 = readDigitalPin(a, 'D2'); % Przycisk 2 (czerwony) b3 = readDigitalPin(a, 'D3'); % Przycisk 3 (biały) jeśli KLUCZ >= 35 % w stopniach m4 = msgbox('Witaj w domu!'); writeDigitalPin(a, 'D8', 1); % Włącza pauzę zielonego światła (.5); pozycja(s, 1); % Obraca serwo, aby odblokować pauzę drzwi (2); writeDigitalPin(a, 'D8', 0); % Wyłącza zielone światło usuń (m4); elseif KLUCZ <= -35% w stopniach m5 = msgbox('Drzwi zamknięte!'); writeDigitalPin(a, 'D7', 1); % Włącza pauzę czerwonego światła (.5); pozycja(y, 0); % Obraca serwo blokując pauzę drzwi (2); writeDigitalPin(a, 'D7', 0); % Wyłącza czerwone światło usuń (m5); ii = 1; break % Wychodzi, gdy pętla zawiera klucz mobilny, jeśli drzwi są zamknięte za pomocą urządzenia mobilnego elseif b2 == 0 && b3 == 0 % Wychodzi, gdy pętla zawiera klucz mobilny, aby wprowadzić sekcję hasła break end end

Następnie może wejść w kolejną pętlę while. Ta pętla while kontroluje wyniki na podstawie danych wejściowych z przycisków. Jeśli pierwsza pętla while jest nieistotna lub wymagana jest ręczna blokada, wejdzie ona w kolejną pętlę while, w której potrzebne jest określone hasło. Jeśli hasło jest nieprawidłowe, pętla zostanie zrestartowana

while true if ii == 1 % Wychodzi podczas gdy pętla zawierająca hasło, jeżeli drzwi zostały odblokowane przy użyciu urządzenia mobilnego break end % Zbiera dane o przyciskach b5 = readDigitalPin(a, 'D5'); % Przycisk 5 (niebieski) b1 = odczytajPinCyfrowy(a, 'D1'); % Przycisk 1 (czarny) b4 = readDigitalPin(a, 'D4'); % Przycisk 4 (biały) jeśli b5 == 0 % Rozpoczyna sekcję wprowadzania hasła dla b = 1:5 m6 = msgbox('Naciśnij i przytrzymaj przycisk A'); pauza(2); usuń(m6); % Zbiera dane o przyciskach b1 = readDigitalPin(a, 'D1'); % Przycisk 1 (czarny) b2 = readDigitalPin(a, 'D2'); % Przycisk 2 (czerwony) b3 = readDigitalPin(a, 'D3'); % Przycisk 3 (biały) b4 = odczytajPinCyfrowy(a, 'D4'); % Przycisk 4 (żółty) b5 = readDigitalPin(a, 'D5'); % Przycisk 5 (niebieski) % Zastępuje pojedynczo wartości w początkowym kodzie dostępu, jeśli b1 == 0 HASŁO(0+b) = 1; elseif b2 == 0 HASŁO(0+b) = 2; elseif b3 == 0 HASŁO(0+b) = 3; elseif b4 == 0 HASŁO(0+b) = 4; elseif b5 == 0 HASŁO = sprintf('%.0f%.0f%.0f%.0f', HASŁO(1), HASŁO(2), HASŁO(3), HASŁO(4)); % Zamienia sekwencję naciśniętych przycisków na cyfry, a następnie przekształca ją w ciąg end end % Koniec pętli for do wprowadzania cyfr kodu dostępu, jeśli PASSCODE == "2314" % Jeśli wprowadzone hasło jest zgodne, drzwi odblokują się na kilka sekund, a następnie zostaną zablokowane m7 = msgbox('Witaj w domu!'); writeDigitalPin(a, 'D8', 1); % Włącza pauzę zielonego światła (.5); pozycja(s, 1); % Obraca serwo w celu odblokowania pauzy drzwi (5); writeDigitalPin(a, 'D8', 0); % Wyłącza pauzę zielonego światła (.1); writeDigitalPin(a, 'D7', 1); % Włącza pauzę czerwonego światła (.5); pozycja(y, 0); % Obraca serwo blokując pauzę drzwi (1); writeDigitalPin(a, 'D7', 0); % Wyłącza czerwone światło usuń (m7); ii = 1; break % Wychodzi z pętli while zawierającej hasło po wpisaniu poprawnego hasła elseif PASSCODE ~= "2314" writeDigitalPin(a, 'D7', 1); % Włącza czerwone światło m8 = msgbox('Nieprawidłowy kod dostępu! Spróbuj ponownie!'); waitfor(m8) writeDigitalPin(a, 'D7', 0); % Wyłącza czerwone światło dalej % Pozwala na ponowne wprowadzenie hasła end elseif b1 == 0 && b4 == 0 % Wychodzi while pętla zawierająca sekcję hasła, jeśli nie chcesz wprowadzać hasła ii = 1; przerwa koniec koniec

Jeśli jest poprawny, natychmiast wejdzie w pętlę while, która steruje czujnikiem temperatury. Jeśli przełącznik jest włączony, pętla będzie kontynuować i wykreślić wykres temperatury w funkcji czasu, umożliwiając podgląd trendu. Jeśli przycisk podłączony do czujnika temperatury zostanie naciśnięty, wyśle również e-mail z informacją, jaka jest temperatura w Twoim „domu”. Jeśli przełącznik zostanie wyłączony, natychmiast zakończy kod

t = 0; % Czas początkowy = 0 sekund przerwa(5) % Daje użytkownikowi czas na włączenie przełącznika temperatury SWITCH = readDigitalPin(a, 'D11'); % Zbiera dane o przełączniku w pinie D11, podczas gdy SWITCH == 0 SWITCH = readDigitalPin(a, 'D11'); % Zbiera dane o przełączniku na pinie D11 napięcie = readVoltage(a, 'A1'); % Odczytuje napięcie z czujnika temperatury temp_C = (napięcie.*1000 - 500)./10; % Przelicza napięcie na temperaturę w °C temp_F = (9/5).*temp_C + 32; % Konwertuje z °C na °F wykres(t, temp_C, 'b.') hold on title('Room Temperature'); xlabel('Czas w sekundach'); ylabel('Temperatura'); oś([0, 180, 0, 100]); plot(t, temp_F, 'r.') legend('Temperatura w °C', 'Temperatura w °F') pause(1); t = t + 1; % Licznik czasu w sekundach % Sekcja E-mail b_temp = readDigitalPin(a, 'D0'); % Zbiera dane (niebieskiego) przycisku temperatury w pinie D0 if b_temp == 0 setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_mail', '[email protected]'); % Sender setpref('Internet', 'SMTP_Username', '[email protected]'); % Nazwa użytkownika nadawcy setpref('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % props hasła nadawcy = java.lang. System.getProperties; props.setProperty('mail.smtp.auth', 'prawda'); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.port', '465'); sendmail('[email protected]', 'ecoTECH Temperatura w pomieszczeniu', sprintf('Aktualna temperatura w pomieszczeniu to %.1f °C lub %.1f °F.', temp_C, temp_F)); % Wysyła do odbiorcy e-mail z danymi o aktualnej temperaturze pokojowej fprintf('E-mail wysłany pomyślnie!\n') end if temp_F >= 75 % Jeśli temperatura w pomieszczeniu wzrośnie do 75 °F… temp_AC = 65; % Zmienia temperaturę na termostacie na 65 °F elseif temp_F <= 65 % Jeśli temperatura w pomieszczeniu spadnie do 60 °F… temp_AC = 80; % Zmienia temperaturę na termostacie na 80 °F koniec koniec % Koniec "PRZEŁĄCZNIK == 0" while pętla, jeśli zasilanie == "wyłączone" || ii == 1 % Wyjście „zasilanie == włączone” podczas przerwania pętli koniec koniec % Koniec „zasilania == włączone” podczas gdy pętla jeśli zasilanie == „wyłączone” || ii == 1 % Wychodzi w całości, gdy kończy się przerwanie pętli

To był tylko krótki przegląd kodu i jego funkcjonalności. W razie potrzeby załączyliśmy pełny kod w formacie pdf

Oto lista portów, do których podłączone jest każde urządzenie

1. Dioda LED RGB: cyfrowe piny (7, 8, 9)

2. Serwo: cyfrowy pin 6

3. Przyciski: piny cyfrowe (1, 2, 3, 4, 5)

4. Niebieski przycisk do e-maila: cyfrowy pin 0

5. Czujnik temperatury: analogowy pin 1

6. Przełącznik: cyfrowy pin 11

Zalecana: