Przygotowania cdn…

  • Pan Paweł atakuje temat wyświetlaczy, ciekawe, czy mu się uda zrealizować grę 😉
  • Pani Noemi zaprzyjaźnia się z bluetoothem i sterownikiem silników…
  • Pan Kamil niedługo stanie się mistrzem Processingu…
  • Pana Marcina nie było 🙁 ciekawe, jak jego serwa?
  • Pan Adrian jest już na ostatniej prostej – pojazd jeździ (prosto!), reaguje na zderzenia, więc… dostał nowe zderzaki do zamontowania + pomysł na modyfikację softu do swojego bolida 😉

Się dzieje 😉

P.S.

Jak na razie zapisało się do nas:

  • na godz. 10:00 – III LO B-stok (~15 osób),  gimnazjum nr I Grajewo (~25 osób)
  • na 11:00 – II LO Grajewo (~16 osób)
  • jak na razie zapisów brak
  • na 13:00 – II LO B-stok (~30 osób !!!)

 

RemoteXY – bardzo fajna obsługa Arduina via smartfon (+Bluetooth)

Dziś tematem naszego spotkania był moduł Bluetooth HC05 – ale nie sam moduł, tylko sposób jego programowania z poziomu Androida. W markecie jest sporo darmowego oprogramowania, ale często nie spełnia naszych oczekiwań – ze względu na brak możliwości pełnej konfiguracji, lub nieatrakcyjność interfejsu. Cóż – nie ma co narzekać jak za darmowe apki, ale… dziś – dzięki uprzejmości Pani Noemi – poznaliśmy płatną apkę RemoteXY do zarządzania Arduinem via moduł Bluetooth (tak, to właśnie Pani Noemi poprowadziła dzisiejsze spotkanie, jako osoba z doświadczeniem z tym programem).

Mowa o RemoteXY, które po zakupie na telefon (tablet, etc) trzeba doinstalować na kompa, gdzie mamy Arduino IDE. Potem wszystko działa według schematu:

i trzeba przyznać, że faktycznie – jest to

  1. proste
  2. intuicyjne
  3. ładne graficznie!

Cóż więcej dodać? Chyba po takiej reklamie już nic nie trzeba 😉

DSC_1104

A tutaj już konkretny przykład Pani Noemi – sterowanie silniczkami oraz LEDami przez smartfon. Dwa przyciski włączają/wyłączają diody, joystik w prawej części ekranu to panel sterowania silniczkami (zmieniamy szybkość i kierunki ruchu oby silników). Na biurku hardware: HC05 oraz Arduino + MotorShiel AdaFruit.

Edit:

stety/niestety znalazłem słaby punkt tej apki. Po jej zakupie tylko my możemy korzystać z przygotowanych layoutów. Nie możemy oddać komuś innemu, nieposiadającemu pełnej wersji naszej zabawki (np. robocika) aby sterował nim z poziomu swego smartfona. Ten ktoś musi posiadać RemoteXY. Cóż.

Arduino: Przerwania + TCRT5000 do wykrywania szybkości obrotowej koła (04-05-2016)

Warto poczytać: https://www.arduino.cc/en/Reference/AttachInterrupt

oraz zapamiętać:

Płytka Piny cyfrowe pod które możemy podpiąć przerwania
Uno, Nano, Mini, other 328-based 2, 3
Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Micro, Leonardo, other 32u4-based 0, 1, 2, 3, 7
Zero wszystkie, za wyjątkiem 4
MKR1000 Rev.1 0 0, 1, 4, 5, 6, 7, 8, 9, A1, A2
Due wszystkie

oraz ,,zdarzenia”, podczas których uaktywni się funkcja przypisana pod dane przerwanie: LOW, CHANGE, RISING, FALLING (HIGH – tylko płytka Due). Krótko: funkcja „podpięta” do przerwania wywoła się wówczas, gdy na tym pinie (tym = zdefiniowanym podczas attachInterrupt) zajdzie konkretne „zdarzenie”, np. LOW. Oczywiście taka funkcja ma być szybka: ustalenie flagi, sterowanie napięciem na pinach – digitalWrite – ale nie delay(ileś-tam).

Przykład: Arduino + przycisk do błyskania diodą #13. Hardware: przycisk (mikroswicz podłączamy do GND a drugą nóżką do pinu #2 w Arduino).

#define PIN 2
bool stan=false;

void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, 0);

pinMode(PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PIN), blysk, LOW);
}

void loop() {
delay(10000);
}

void blysk(){
stan=!stan;
digitalWrite(13, stan); 
}

Gdy nic nie wiemy o przerwaniach, to przyglądając się funkcji loop() można by powiedzieć, że program NIC NIE ROBI! Tylko czeka 10s, a potem znowu czeka 10s, i tak w kółko… Więc skąd się bierze błyskanie diody #13 w momencie klikania przycisku? Otóż wywołanie delay() zatrzymuje działanie programu, ale przerwania ciągle działają. Skoro więc „podpięliśmy” naszą funkcję (o nazwie blysk()) do przerwania, to właśnie ona się wywoła (gdy stan pinu #2 zmieni się na LOW – to wszystko zostało powiedziane w funkcji setup()). Właśnie taki mechanizm wykorzystałem do wykrycia kolizji przez zderzak naszego pojazdu – pisałem o tym w poprzednim poście. UWAGA: powyższy program działa dość dynamicznie, „nerwowo” reagując na wciśnięcie przycisku – oczywiście jest to zjawisko drgania styków (ang. bouncing), o czym mówiliśmy na naszych poprzednich spotkaniach (tutaj, dla przejrzystości kodu nic z tym nie robię, brak jest debouncing-u).

Dodatkowo: zliczanie obrotów koła.

mDSC_1100

podłączyliśmy czujnik optyczny odbiciowy TCRT5000 do obudowy silniczka, a następnie wewnątrz koła umieściliśmy białą kartkę z czarną krechą. Czytamy wartości rejestrowane przez czujnik ale nie na Serial monitorze, ale GRAFICZNIE, za pomocą Processinga.

silniczek

Widzimy wyraźnie moment, gdy czujka mija czarną kreskę. Widać też, że piki zdecydowanie różnią się od „tła”, choć często mają różną wartość w maksimum. Łatwo wykombinować prosty algorytm (czy skuteczny? niedługo się o tym przekonamy) liczący szybkość obrotową koła:

  1.  zapisujemy t1, czyli czas pojawienia się maksimum (funkcja millis())
  2. czekamy na kolejne maksimum, gdy je złapiemy to
  3. zapisujemy t2, czyli czas pojawienia się kolejnego maksimum- wówczas różnica czasów t2 i t1 daje właśnie czas jednego, pełnego obrotu.

Pewnie „diabeł tkwi w szczegółach” ale powinno działać. Jak powiedziałem na zajęciach – więcej kresek (ale z umiarem! powiedzmy 4 na początek) powinny zwiększyć rozdzielczość zliczania liczby obrotów koła.

mDSC_1099

Będziemy to programować na kolejnych zajęciach…

Arduino: software do zderzaków – przerwania

Zmodyfikowana wersja softu ze zderzakami – tym razem użyłem przerwań i w przypadku kliknięcia przeszkody – w przerwaniu zmieniam pomocniczą zmienną informującą o konieczności cofnięcia i zmiany kierunku ruchu. Działa nieźle.

Poprzednia wersja softu prowadziła pojazd w danym kierunku z wykorzystaniem funkcji delay(ileś-tam), a dopiero potem sprawdzała przyciski (mikrostyki) – to powodowało, że gdy zderzenie nastąpiło w czasie jazdy, to takie zdarzenie mogło nie być zarejestrowane (nie zawsze się zdarzało, że przycisk pozostawał wciśnięty po zakończenia delay). Tutaj rozwiązałem to za pomocą dwóch przerwań… wiem – za dużo, już w głowie mam lepszy algorytm, bez przerwań, ale to w następnym odcinku.

Dla bardziej dociekliwych:

#define LEFT_BTN 2
#define RIGHT_BTN 3

(w przypadku Arduino UNO przerwania tylko dla pinów 2 i 3), dalej:

pinMode(LEFT_BTN, INPUT_PULLUP);
pinMode(RIGHT_BTN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(LEFT_BTN), turn_right, LOW);
attachInterrupt(digitalPinToInterrupt(RIGHT_BTN), turn_left, LOW);

to w setup()ie,

a dwie funkcje turn_left() i turn_right() zmieniają pomocnicze zmienne nakazujące zmianę kierunku ruchu (w funkcji loop).

 

Nowe zabawki – sponsorowane przez Parlament Studentcki UwB

Informuję wszystkich robotków z koła Fi-BOT Wydzialu Fizyki UwB, że w dniu dzisiejszym (29-04-2016) przyszła pierwsza paczuszka z podzespołami sponsorowanymi przez Parlament Studencki UwB. Projekt ten złożyła i uzyskała finansowanie Pani Noemi. Mamy 2 mikro-silniczki oraz zestaw mocowań, kół i enkoderów do nich! Niech Was nie zmartwi rozmiar tych silniczków – bo one mają moc! No i do tego jeszcze 4x serwa (też nie byle jakie). Czekam jeszcze na zestawy do komunikacji Bluetooth…

Zapraszam do galerii „unboxing” 😉

DSC_1048

A co kryje w sobie ta paczuszka? może chomika?
DSC_1057

Zawartość w pełnej okazałości. Długopis nie wchodzi w skład zestawu (to mój prywatny i nie oddam!) – służy do zorientowania się w rozmiarach zakupionych gadgetów. Czyli dokładnie czego?

DSC_1052

4x Serwo PowerHD AR-3606HB (praca ciągła)

DSC_1053

wraz z bogatym zestawem orczyków!

DSC_1051

A tutaj mikrosilniki Pololu HP 298:1. Niech nikogo nie zmartwi rozmiar tego silniczka – w tym maluchu drzemie niezła moc!

DSC_1050

Dodatkowo: zestaw kół, mocowań no i enkoderów dedykowanych do Pololu!

DSC_1049

Ponownie wszystko w  całej okazałości.

Firma, w której zamówiłem, dołączyła słodki upominek Pani Noemi – autorki projektu

DSC_1055

cukiereczek czeka do odbioru po długim weekendzie – zapraszam!