Udało się opracować część programistyczną: stronę WWW wyświetlającą pogodę, trasę dojazdu do pracy i estymowane czasy odjazdów z wybranego przystanku komunikacji miejskiej (wszystko oparte na HTML’u i JavaScipt’ie) oraz usługę (opracowaną w C++ i wykorzystującą wiringPi) odpowiedzialną za włączanie i wyłączanie portu HDMI w zależności od stanu czujki ruchu (kod źródłowy znajduje się tutaj).
Teraz pozostało tylko zadbać o odpowiednie zasilanie (dawny robot minisumo postanowił zostać dawcą), wszystko połączyć i złożyć w jedną całość – szykuje się pracowity weekend 😉
Od czasów szkoły średniej uwielbiałem programować sterowniki PLC. Powodem takiego stanu rzeczy był fakt, że chodziłem do technikum mechatronicznego i intensywnie pracowaliśmy na sterownikach PLC ze względu na nadchodzący egzamin zawodowy. Również kadra nauczycielska, która posiadała wykształcenie elektryczne, potrafiła posługiwać się głównie tylko graficznymi językami programowania, czyli np. językiem drabinkowym.
Na moich studiach dodatkowo wkręciłem się w „konwencjonalne” programowanie, czyli języki C/C++. Dlatego, gdy przyszedł czas wyboru tematu pracy inżynierskiej, po wcześniejszym pobieżnym research’u w wyniki którego nie znalazłem podobnego rozwiązania, postanowiłem opracować aplikację dla układów Arduino pozwalającą na programowanie w języku drabinkowym.
O aplikacji
Zadaniem aplikacji jest umożliwienie programowania układów Arduino (Leonardo, Nano, Mega) w języku drabinkowym, który stosowany jest głównie przy programowaniu sterowników PLC. PLCino do działania wymaga uprawnień administratora, ponieważ umożliwia kompilowanie kodu i programowanie układów Arduino z poziomu edytora.
Zaimplementowane elementy języka drabinkowego to:
styki,
cewki,
liczniki,
timery,
operatory porównania.
Aplikacja została opracowana z wykorzystaniem bibliotek Qt w wersji 5.9.1. Przy próbach kompilacji za pomocą nowszych wersji występowały wyjątki przy korzystaniu z funkcji dostarczanych przez biblioteki.
Wadą aplikacji było opracowywanie jej w czasach, gdy prowadzący nie widzieli problemów z nazewnictwem zmiennych czy funkcji w języku polskim (do dzisiaj te długie nazwy kłują mnie po oczach).
Innym problemem była biblioteka Qt. Wtedy wydawało mi się, że jest to coś idealnego dla języka C++, ponieważ pozwalała wykorzystać wspomniany język w operacjach niskopoziomowych jak i wysokopoziomowych (czyli w tym przypadku dobrze wyglądającym GUI – nie to co Windows Forms). Wartością dodaną miała być wieloplatformowość pozwalająca na proste przeniesienie aplikacji PLCino na systemy linux. Niestety ze względu na wykorzystanie aplikacji avrdude nie było to możliwe – gdy chciałem rozbudowywać mój projekt okazało się, że Qt staje się coraz mniej open source i przez to nieznana była przyszłość tych bibliotek, więc postanowiłem wstrzymać się z dalszymi pracami i poczekać, aż sytuacja się wyjaśni.
Aplikacja w obecnej postaci pozwala na programowanie układów Arduino (bezpośrednio z poziomu edytora):
Leonardo,
Nano,
Mega.
TODO
Dodanie obsługi kolejnych układów Arduino
Dodanie obsługi kolejnych elementów języka drabinkowego
Oczyszczenie aplikacji avrdude ze zbędnych bibliotek i kodów źródłowych
Jak używać aplikacji?
Na moim GitHub’ie można znaleźć instalator aplikacji, który jak zawsze został opracowany za pomocą kreatora Inno Setup. Instaluje w systemie operacyjnym aplikację PLCino wraz z niezbędnymi bibliotekami. W przypadku problemów z działaniem należy uruchomić aplikację z uprawnieniami administracyjnymi.
W katalogu „przyklady” (znajdującym się w tym samym katalogu co plik wykonywalny PLCino.exe) można znaleźć przykładowe programy, które prezentują funkcjonalność aplikacji.
Do obwodów tworzonych w aplikacji elementy drabinki dodaje się poprzez wykorzystanie techniki przeciągnij&upuść (drag&drop). Edycji właściwości elementu można dokonać poprzez dwukrotne kliknięcie LPM (lewym przyciskiem myszy) na elemencie w wybranym obwodzie.
Chińczyk mnie zawiódł i udało się skompletować sprzęt ?
Klasycznie nie mogło obejść się bez problemów i okazało się, że zasilacz 12 V/3 A jest niewystarczający dla kontrolera ekranu LCD i musiałem szybko zamówić jakiś mocniejszy model, więc skończyło się na 12 V/5 A (tutaj też to działa bez szału, ale działa).
Do zestawu brakuje jeszcze jakiegoś zasilania dla Raspberry, ale pewnie spróbuję zrobić je we własnym zakresie projektując przekształtnik buck, który obniży napięcie 12 V, dostarczane do ekranu LCD, do 5 V.
Teraz pozostało już tylko programować. Wymyśliłem sobie, że na Raspberry będę uruchamiał klasyczne GUI, gdzie po uruchomieniu systemu RaspiOS uruchomi się moja aplikacja napisana w języku C++. Do opracowania interfejsu planowałem wykorzystać biblioteki programistyczne Qt. Powodem była ich znajomość, wieloplatformowość i łatwość łączenia z językiem C++, a ten dodatkowo pozwoliłby mi na łatwą interakcję z systemem Linux oraz warstwą sprzętową mojego Raspberry. Niestety okazało się, że przykłady dla najnowszej wersji Qt (v.5.15.1) dotyczące Qt Webengine nie działają bezpośrednio po zainstalowaniu wymaganych bibliotek i IDE, więc aby uniknąć kolejnych i zapewne jeszcze większych problemów odpuściłem sobie ten pomysł.
I dlatego ostatecznie wykorzystam serwer WWW Apache, który wraz z napisanymi aplikacjami wykorzystującymi CGI oraz skryptami JS będzie realizował zaplanowane zadanie – w przypadku pracy magisterskiej takie połączenie na płytce BeagleBone Black zdało egzamin, więc wierzę, że i w tym przypadku tak będzie 🙂
Ta strona korzysta z ciasteczek aby świadczyć usługi na najwyższym poziomie. Dalsze korzystanie ze strony oznacza, że zgadzasz się na ich użycie.Zgoda