Wakacje się kończą, ale to już nasze drugie spotkanie w trakcie wolnego czasu! Brawo dla uczestników. Dziś prace koncentrowały się wokół trzech tematów.
Tuning przeszła Maskotka, dostając czwarte koło (zapobieganie przewracaniu się przy nagłej zmianie kierunku ruchu), nie trzeba już kombinować z przeciwwagą 😉
No i ciągle rozmawiamy o wojnach robotów. Najważniejsze, że nowe koncepty zostały zaakceptowane i wydają się obiecujące. Czas pokaże, co z tego wyjdzie.
Prace podzieliły się na dwa tory – niezależnie powstaje sterowanie, niezależnie poznawane są możliwości kolorowych LED-ów WS2812B. Dzięki takiemu podziałowi projekt brnie do przodu, choć przyznać trzeba, że powstanie tylko jedno sterowanie – bez konkurencji, więc… oby było dobre 😉
BT master
Pan Rafał postanowił wykorzystać dwa moduły Bluetooth (BT) aby komunikować się pomiędzy pojazdem a kontrolerem (bez czekania na wykorzystanie radiówek nRF24L – szkoda… ale do tego pewnie jeszcze wrócimy).
Dotychczas to telefon z aplikacją na Androida był MASTEREM (kontrolerem) łączącym się z pojazdem, czyli BT SLAV-em. Teraz jednak używamy dwóch BT w tym celu – choć przyznać trzeba, że prościej, efektywniej i taniej wydaje się zastosowanie wspomnianych na wstępie modułów nRF24L.
Kontroler ma podłączony moduł JOY-stica oraz moduł BT, który wysyła odczyty. Odbiorcą tych pakietów jest moduł BT w pojeżdzie, który łączy się z naszym kontrolerem. Aby to było możliwe należy MASTERA skonfigurować tak, aby po jego uruchomieniu „szukał” kontrolera i się z nim łączył. Realizuje się to przez tryb komend AT.
W tym celu podłączamy BT z dodatkowym pinem ustawionym na HIGH (poniżej pin #6 z Arduino, nazwany KEY, połączony z pinem STATUS w module XM-15B) i programikiem według poniższego schematu:
Jak widać program czyta bajty z portu szeregowego PC-ta i wysyła je do modułu BT podłączonego do Arduino (metody readString() oraz write()). Sprawdzamy, czy mamy wszystko poprawnie działające wywołując komendę AT+NAME. Powinna pojawić się nazwa naszego modułu (uwaga: nawet niepoprawnie wyświetlona) ORAZ nowa linia z napisem OK. Jeśli tak nie jest, trzeba sprawdzić podłączenia.
Tryb komend AT umożliwia nam zmianę nazwy urządzenia BT, zmianę hasła czy innych parametrów komunikacji (np. szybkość transmisji szeregowej). Ale my wykorzystujemy go najpierw do odczytania numeru identyfikacyjnego urządzenia BT SLAVE – naszego kontrolera. Parowanie urządzeń BT odbywa się przez ten numer (a nie przez przyjazne nazwy, jak w Androidzie). Wydajeny komendę AT+ADDR i mamy odpowiedź: u nas 001135938823. Teraz wychodzimy z tryb AT dla kontrolera (BT SLAVE) i wgrywamy ten sam program na Arduino z BT MASTEREM.
Pojazd (BT MASTER) ma się łączyć z konkretnym modułem BT – znamy jego ID. Musimy więc najpierw ustawić go w tryb MASTER-a (komenda AT+ROLE zwróci 0 gdy moduł jest SLAVE-em, a 1 gdy MASTER-em; zmiana trybu odbywa się komendą AT+ROLE=1). Następnie zapisujemy adres kontrolera poleceniem AT+BIND=001135938823. Teraz można już wyłączyć program dla modułów BT pracujących w trybie AT i wgrać nasz własny programik na Arduino, które przez UART będzie odczytywać dane przesyłane przez kontroler modułami BT (oczywiście – jeśli włączymy pojazd, a kontroler nie będzie włączony – nie nastąpi komunikacja i pojazd nie będzie otrzymywać instrukcji sterująych).
Kto ma być MASTER, kto ma być SLAVE?
Pan Rafał zdecydował, że kontroler będzie SLAVE, a pojazd MASTEREM. Czy to dobrze? Można było by zrobić na odwrót… I takie właśnie rozwiązanie jest chyba lepsze, bo pojazd jako SLAVE czeka na dane wysyłane przez… dowolne sparowane urządznie! Może to być dedykowany kontroler (który właśnie tu powstaje) ale także jakaś apka na Androidzie – wówczas telefon jako MASTER może sterować naszym pojazdem. Takie rozwiązanie jest bardziej uniwersalne, więc pewnie w przyszłości będzie zastosowane.
Można też zajrzeć do opisu łączenia modułów BT master <-> slave na tej stronie – polecam.
WS2812B
Pan Tomasz postawił sobie zadanie płynnego przejścia kolorów: od niebieskiego do czerwonego w module WS2812B. Te dwa kolory mają być odpowiedzialne za wartości odczytanego pola magnetyczna magnesu. Zapis kolorów w systemie RGB nie jest tutaj najwygoniejszy, więc wybór padł na zastosowanie modelu HSV.
Sam PID nie wystarczył. Moduł JOY-sticka ma mechaniczną „wadę”, że wychyla się góra/dół (lewo/prawo) mniej niż „pod kątem”. Maksymalne odczyty (1023 w przypadku Arduino UNO) otrzymuje się przy skrajnym wychyleniu w górę/prawo (dół/lewo) ale wychylając joy „po skosie” mamy (teoretycznie) o pierwiastek z dwóch więcej! Dlatego też to właśnie wychylenia „pod kątem” mają wartości 1023 a skrajne pionowe/poziome uzyskują te wartości jeszcze przed swoim maksymalnym wychyleniem – dalsze wychylanie nic już nie daje (mamy ciągle 1023 – zakres ruchu joya „zmarnowany”). Aby to zniwelować Pan Bartek znalazł ciekawe mapowanie kwadratu na kółko:
Taka modyfikacja sterowania pozytywnie wpłynęła na kontrolowanie Maskotki. Gratulacje!
Kolejne spotkanie: czwartek 6 maj 2021, godz. 15:15.
Tym razem poznajemy coś konkretnego – moduł Bluetooth XM-15B. Umożliwi on komunikację z naszym smartfonem i sterowanie wieżtyczką (zbudowaną z 2 mikroserw, jak na poprzednich zajęciach).
Poznaliśmy obiekt SoftwareSerial pomocny w komunikacji z dwoma urządzeniami działającymi przez UART, a (niestety) Arduino UNO ma tylko jeden Serial… Wykorzystaliśmy darmową apkę z AndroidStore „Bluetooth control 8 lap” która sterowała wieżyczką. Brawo Studenci!
Ta apka jest dobra na początek, można poszukać czegoś lepszego w sklepie ale… dlaczego nie stworzyć własnej? To naprawdę proste – z odpowiednim środowiskiem, czyli (polecam) MIT App Inventor
Maskotka
Prace trwają: BB poprawia łącza i soft, KG wierci i kręci 😛 A co z tego wyszło? Skrzypi, ale jeździ jak wariat 😀
Dalej ćwiczymy funckję analogRead() – tym razem z fajnym modułem, mianowicie czujnikiem pola magnetycznego SS49E. Podłączamy zasilanie a sygnał wychodzi z 3-ciej nóżki, jak na rysunku poniżej:
Warte podkreślenia jest, że ta czujka odróżnia dwa bieguny magnesów i dlatego jest warta zakupu. Przy tej okazji przekonaliśmy, że Arduino IDE wyposażone jest w automatyczne rysowanie wykresów dzięki Kreślarce – trzeba tylko wysyłać na port szeregowy liczby w postaci napisów (gdy chcemy dwie krzywe na wykresie – liczby muszą być podane w jednej linii, oddzielnone spacjami). Proste, a jakie użyteczne!
Skoro mamy przećwiczone analogRead() to powracamy do mniej widowiskowego digitalRead(): podłączamy moduł przycisku
W kolejnym kroku podłączyliśmy moduł czujnika drgań:
Ponownie wykorzystaliśmy Kreślarkę by rysować drgania czujnika, razem z wykresem pola magnetycznego – proste, ale cieszy 😉
Maskotka
Prace trwają: BB z PP rozkładają pojazd, programują i… stwierdzają zgon jednego z dwóch Arduino! Przyczyna? no właśnie… dochodzenie trwa…
Poznajemy funckję analogRead() – podłączamy potencjometr i sprawdzamy odczyty napięcia (porównujemy ze wskazaniami multimetru). Natrafiliśmy na „pułapkę informatyka”: dzielenie całkowite! W celu odczytania wartości napięcia nie można było napisać analogRead(A0)*5/1024, zamiast tego należało rzutować typy lub wymuisić obliczenia w arytmetyce liczb rzeczywistej, przez napisanie liczby 5 jako liczba rzeczywista: analogRead(A0)*5.0/1024. Teraz już wszystko działa, więc podłączamy dwa potencjometry ale… w module popularnej gałki JOY-sticka:
Moduł wykorzystaliśmy do rozbudowy zabawy z mikroserwami z poprzenich zajęć – tym razem mamy do dyspozycji wieżyczkę sterowanych dwoma mikrosilniczkami.
Maskotka
Prace trwają: BB z PP rozkładają pojazd i montują profesjonalne uchwyty montażowe do zasilania 😉
Widać, że podwozie Maskotki nadaje się już do wymiany – paskudne te otwory… Wynika to z różnych koncepcji systemu kół, które wymusiły docinanie otworów „na szybko”. Kolejnym krokiem będzie przygotowanie nowej płyty…
Piny cyfrowe PWM z multimetrem i LED-em, a potem serwosilniczek (Serwo.h, silnik.attache(pin), silnik.write(stopnie).
Maskotka
BB: regulator PID dla 1 koła: poniżej wynik działania algorytmu regulującego pracę silnika: kolor czerwony to krzywa pożądana (nastaw użytkownika, potencjometrem), kolor niebieski to aktualna praca koła. Oś Y na wykresie to RPS, czyli obroty na sekundę.
Praca regulatora PID ma polegać na tym, że RPS koła ma podążać za ustaloną wartością niezależnie od zewnętrznych czynników (np. koło na lodzie=kręci się praktycznie bez oporów, lub koło w błocie =ciężko mu wyjechać). Najważniejsze współczynniki regulatora PID Pab bartek dobrał metodą „prób i błędów” (plus własne, wcześniejsze doświadczenie) i są dobrane dla konkretnego silnika (dlatego ich tutaj nie podaję). Zauważ, jak szybko silnik dopasowuje się do pożądanej wartości). Przy okazji: wykres ze „starej” wersji algorytmu, na zajęciach Pan Bartek go udoskonalił i reakcja koła jest jeszcze szybsza!
Pan Bartek zmodyfikował moduł zasilania wstawiając przetwornicę step-down 5V. Chodziło o zminimalizowanie strat mocy regulatora liniowego 5V (chyba TS78L05ACY) przy zasilaniu 12V – bo 12V-5V = 7V, co przy (teoretycznym) prądzie 1A daje aż 7W strat. Oczywiście u nas nie było 1A a mniej, niemniej jednak to zdecydowanie za dużo. Przetwornica (tego typu) rozwiązuje problem.
Moduł pełni jednocześnie funkcję sterowania paskami LED Maskotki, których jest 5 sztuk – dlatego widać 5 trzypinowych konektorów do pasków LED WS2811B. Obok zainstalowano potencjometr 10k, który łączy się z pinem A0 w Arduino i steruje jasnością wspomnianych pasków. Fajnie! Co więcej – wszystko działa 😉
W planach wymiana liniowego regulatora napięcia (zasilanie Maskotki akumulatorem żelowym 6V, docelowo 12V) na przetwornicę step-down (aby straty energii nie były tak duże, no i nie było potrzeby chłodzić/wietrzyć układu).
Sporo brutalnej „zabawy” w drwala z ręczną piłką 😛 i choć nie wygląda to za dobrze – to zadanie wykonane! Otwory powiększone i koła zamocowane.
Wypada umieścić słowo wyjaśnienia: nie chcieliśmy zdejmować obudowy Maskotki aby powiększyć te otwory (z pewnością to by ułatwiło sprawę). Obudowa przytwierdzona jest do podwozia wkrętami stolarskimi więc ich ponowne wkręcenie nie gwarantowałoby trzymania obudowy. W takim razie lepiej zrobić nowe otwory – ale to z kolei pozostawi wiele (niepotrzebnych) otworów. Dlatego więc męczyliśmy się z powiększaniem otworów z założoną obudową.
Wieloklik
Sprawa rozwojowa – zliczanie klików to za mało, teraz poprzeczka poszła w górę i Pan Marek zlicza dwukliki i trzykliki (są takie wyrazy w języku polskim? jak nie, to już są ;-).
Ostatnia prosta – ekranik Nokii. Zamontowany (wszystko udało się upchać do środka!) ale co najważniejsze – działa od pierwszego podłączenia (sam Autor projektu się tym zdziwił). Trzeba było jedynie zmniejszyć kontrast, bo Nokia zasilana przez Arduino podłączone do PC-ta miała inne napięcie niż Nokia zasilana z Arduino z dedykowanym zasilaczem (niby mały szczegół…).
Pan Bartek rozbudował menu – można poruszać się (przewijać) po wszystkich plikach z katalogu na karcie SD, nie tylko kilku pierwszych. To istotne usprawnienie.
Przerwa świąteczna – kiedy kolejne spotkanie?
Zapraszam w piątek 3 stycznia 2020 r. o godz. 12:00.
A jednak znowu piłka do drewna (płyty)… Otwory za wąskie na koło z mocowaniem. Bywa…
Czujka pola SS49E
Znana na zajęciach Fi-BOTa i powraca ponownie. Tym razem w połączeniu z kolorymi kółkami WS2812b. Odczytujemy czujkę i w zależności od wartość pola zaświecamy tyloma LEDami ile trzeba. Na dodaek nasza czujka odczytuje dwa bieguny, w szkole „kolorowane” na kolor niebieski i czerwony – właśnie tak i my będziemy swiecić! Prace w toku….
Maszyna 2D3D
No to sporo pracy z tą wymianą ekraniku z OLEDa na Nokie 5110. Pan Bartek zaprezentował własne moduły ułatwiające połączenia i niebawem (na Gwiazdkę?) może będzie wszystko działać 😉
Przerwa świąteczna – kiedy kolejne spotkanie?
Zapraszam w poniedziałek 23 grudnia 2019 o godz. 12:00.