MATLAB + Arduino

MATLAB + Arduino

Arduino to tani i łatwy w obsłudze mikro-kontroler, który może stanowić podstawę budowy przeróżnych urządzeń i sterowanych cyfrowo mechanizmów. Platforma kierowana jest do hobbystów i w zasadzie każdy, bez technicznego wykształcenia, po kilku godzinach zabawy jest w stanie uruchomić swoje pierwsze projekty oparte o Arduino. System ma jednak swoje ograniczenia, które ujawniają się, gdy przychodzi do realizacji bardziej złożonych pomysłów. Z jednej strony jest to dosyć prymitywne środowisko programistyczne (w sensie IDE, nie grupy użytkowników programu 🙂 ), które nie ułatwia życia kiedy trzeba szukać błędów popełnionych w projekcie. Z drugiej strony jest to wydajność obliczeniowa Arduino. Lekarstwem na te bolączki może być pożenienie Arduino i MATLABa. W zasadzie nie jest to klasyczne małżeństwo, bo bardzo istotne znaczenie w relacji ma ten trzeci, czyli komputer PC udostępniający swoją moc obliczeniową. Konfiguracji w związku może być zatem kilka. Metody połączenia MATLABa i Arduino przedstawiam poniżej, każda ma swoje wady i zalety.

MATLAB Support Package for Arduino Hardware

To oficjalna nazwa bezpłatnego dodatku do MATLABa umożliwiającego kontrolę Arduino z poziomu tego środowiska. Jeśli zdamy się na ten typ współpracy, to płytka Arduino będzie służyć wyłącznie jako rozszerzenie interfejsów komputera PC. Nie można w tym trybie nic na Arduino "policzyć", można natomiast w łatwy sposób odczytywać dane z wejść oraz wysyłać dane na wyjścia, włączając w to generację sygnałów PWM czy obsługę dołączonych za pośrednictwem I2C czy SPI urządzeń.

Instalacja

Najlepszą metodą na instalację jest skorzystanie z przycisku Add-Ons widocznego w zakładce HOME MATLABa lub wpisanie supportPackageInstaller w oknie poleceń.

zakladkahome
W lewej części nowo otwartego okna należy w sekcji Refine by Vendor zaznaczyć Arduino. To powinno sprawić, że w wynikach wyszukiwania w środkowej sekcji na pierwszym miejscu pojawi się MATLAB Support Package for Arduino Hardware.

add-ons

Instalacja dodatku będzie wymagała zalogowania się na konto użytkownika MALTABa. Ważna sprawa - konto nie musi być powiązane z licencją na MATLABa, na którym instalujemy dodatek. Oznacza to, że jeśli ktoś będzie chciał zainstalować pakiet na nie swoim MATLABie (dla przyzwoitości powiedzmy, że w laboratorium na uczelni) to nie powinien mieć problemu. Musi mieć tylko założone konto użytkownika na mathworks.com.

Po zakończonej instalacji w MATLABie pojawi się nowy mini Toolbox umożliwiający komunikację z Arduino.

Jak to działa?

Aby rozpocząć pracę w linii poleceń MATLABa można wpisać:

ard = arduino

To powinno zadziałać, jeżeli posiadamy oryginalne Arduino lub jakiś solidny jego klon. W innych przypadkach konieczne może się okazać dodatkowe zdefiniowanie z jakiej odmiany Arduino oraz z jakiego portu komunikacyjnego korzystamy, np.

a = arduino('COM3','Uno')

Uwaga, w przypadku gdy wcześniej korzystaliśmy z platformy Arduino instalując dodatkowe biblioteki, MATLAB może mieć problemy z nawiązaniem połączenia. Pomóc może zmiana nazwy katalogu 'Arduino' w C:\Users\User\Documents\ przy ponownej próbie nawiązania komunikacji MATLAB utworzy nową jego wersję.

Można teraz wykonać krótki test

for i = 1:10
writePWMDutyCycle(ard, 'D13', i*0.1)
pause(0.5)
end

Ograniczenia

Przede wszystkim, Arduino musi być stale podłączone do komputera. Jeśli pracujemy w tym trybie, wszelkie obliczenia są realizowane na komputerze więc de facto Arduino jest wyłącznie dodatkowym zestawem interfejsów dla peceta. Nie można też liczyć na bezproblemową obsługę wszelkiego rodzaju rozszerzeń Arduino, jeśli wymagają one instalacji dedykowanych bibliotek. Kolejny problem to powolna wymiana danych między platformami. Można przeprowadzić krótki test, by przekonać się w czym rzecz.

configurePin(ard, 'D3', 'Pullup');
tic
N = 1000;
val = zeros(1, N);
for i  = 1:N
    val(i) = readDigitalPin(ard, 'D3');
end
time = linspace(0, toc, N);
plot(time, val);
grid; xlabel('Czas [s]');

przebieg

1000 próbek danych zostało przekazane do MATLABa w ciągu ok. 13 sekund. Częstotliwość próbkowania na poziomie 80 Hz będzie niestety w wielu przypadkach niewystarczająca.

Arduino jako standardowe urządzenie zewnętrzne

To podejście daje nam o wiele większe możliwości, jednak wymaga również o wiele większego nakładu pracy. Możemy całkowicie zrezygnować z instalacji jakichkolwiek dodatków do MATLABa, gdyż cała komunikacja pomiędzy MALTABem i Arduino jest realizowana za pośrednictwem obiektu serial.
Połączenie można odpowiednio skonfigurować a następnie wysyłać i odbierać dane za pośrednictwem funkcji fprintf i fscanf. Nie ma w takim scenariuszu mowy o programowaniu Arduino z poziomu MATLABa, chodzi raczej o możliwość przesłania danych z Arduino do MATLABa, ich szybkiej (i wygodniej) analizy i ewentualnie odesłaniu do Arduino odpowiednich poleceń sterujących. Arduino trzeba odpowiednio zaprogramować w języku C/C++. Z tego podejścia skorzystałem przy realizacji projektu uprzejmator, w tamtym wpisie są też podane odpowiednie przykłady.

Simulink Support Package for Arduino Hardware

Jak nazwa wskazuje, ten dodatek pozwala obsłużyć Arduino z poziomu Simulinka. Pomimo podobieństwa w nazwie Simulink Support Package to zupełnie co innego niż Matlab Support Package. Ten pierwszy pozwala bowiem na zaprogramowanie Arduino z poziomu Simulinka i późniejsze korzystanie z platformy w całkowitym oderwaniu od komputera PC.

Instalacja

Proces instalacji dodatku wygląda identycznie jak w przypadku Matlab Support Package for Arduino Hardware. Po zakończonym procesie instalacji w Simulinku pojawi się dodatkowa biblioteka bloków służących do obsługi interfejsów dostępnych w Arduino.

simulib

 

Jak to działa?

W Simulinku możemy utworzyć nowy model wykorzystując w jego konstrukcji nowo dostępną bibliotekę. Poniżej bardzo prosty model w którym LED podłączony do wyjścia cyfrowego  D13 świeci, gdy na wejściu cyfrowym D3 pojawia się 0. Samo wciśnięcie przycisku Run w główmy oknie Simulinka nie zda się na wiele. W pierwszej kolejności należy rozwinąć menu Tools i przejść do Run on Target Hardware -> Prepare To Run. W oknie, które się pojawi, należy wskazać wersję Arduino którą dysponujemy.

run_on_target

Modele możemy teraz uruchomić na różne sposoby. Po wciśnięciu przycisku Deploy To Hardware z widocznego modelu generowany jest kod C (którego jednak nie możemy bez dodatkowych toolboxów podglądnąć), który jest następnie uruchamiany bezpośrednio na Arduino. To oznacza, że Arduino będzie działać tak jak je zaprogramowaliśmy również po odłączeniu do MALTABa/Simulinka.

Inna opcja to zmiana trybu symulacji na External. Po wciśnięciu przycisku Run podobnie jak w poprzednim przypadku z modelu zostanie wygenerowany kod C, jednak w tym razem zostanie do niego dołączona obsługa komunikacji z Simulinkiem. Oznacza to, że możemy mieć podgląd na to, co dzieje się w trakcie symulacji, a także mamy możliwość zmiany niektórych parametrów modelu.

external

Należy pamiętać, że w przypadku uruchamiania symulacji i podglądu zmiennych "na żywo" nie możemy liczyć na pracę w czasie rzeczywistym. Będą się pojawiały opóźnienia tym większe, im bardziej złożony model i im więcej danych chcemy przesłać do podglądu.

(Visited 551 times, 1 visits today)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *