Krańcówka w PM2D3D oraz samochodzik (L293N)

Sterownik silników L293N

Pan Przemek zapoznał się z sygnałami PWM (obowiązkowy programik „gaszący” LEDa – i funkcja analogWrite) a następnie poznał sterowanie silnikami DC – za pomocą sterownika L293N. Najpierw podłączaliśmy zasilanie 6V z żelowego akumulatorka:a następnie konstrukcja uległa modyfikacji (w tym także zasilanie) i powstała taka oto platforma testowa:
Udało się „nauczyć” jeździć ten pojazd do przodu, tyłu i skręcać. Na razie wykonuje on wszystkie te czynności w kółko – więc jest to mało sensowne. Ale kolejny krok to zdalne sterowanie i ten krok to już duży krok w kierunku Wojny Robotów 😉

Precyzyjna Maszyna (PM2D3D) – krańcówka

Pan Bartek zamontował krańcówki – wydrukował odpowiednie elementy trzymające.
  Skoro są już krańcówki, to należy je oprogramować. Drogi są (co najmniej) dwie: 1) w programie realizującym poruszanie silnikami sprawdzamy, co się dzieje z krańcówkami – i w razie czego zatrzymujemy konkretny silnik, lub 2) inicjalizujemy przerwania, które robią to automatycznie. Jednak zanim doszło do tego to… pojawiły się problemy z rysowaniem linii po skosie. Przygotowany przez Pana Bartka kod miał działać – jednak okazało się, że ma wady. Wiadomo – ten się nie myli, kto nic nie robi 😉 Dlatego dzisiejsze zajęcia poszły w kierunku naprawy softwaru… Jeszcze jest trochę roboty 😉

Więcej o projekcie Maszyny na stronie projektu.

(c) K.G.

silniczki DC + moduł L298

Ponownie programowaliśmy silniczek DC, tym razem wykorzystywaliśmy moduł na bazie L298. Przypomnieliśmy sobie kilka istnych rzeczy:

  • wczytywanie znaków z klawiatury do Arduino – funkcja Serial.read() 
  • pisanie „niechluje” instrukcji warunkowej w C/C++
  • wczytywanie liczb z klawiatury – funkcja Serial.parseInt()
  • podłączenie modułu L298 do koła i bateryjki — sprawdzamy, czy rozumiemy jak to działa
  • jeśli rozumiemy, to podłączamy do Arduino
  • prosty program włączający obroty silnik w jedną stronę na czas 1 sekundy, a potem w stronę przeciwną (też na czas 1 sek) i tak w kółko
  • modyfikacja programu na wczytywanie liczb: liczba 0 silnik stop, liczba <0 — silnik w jedną stronę, liczba >0 silnik w przeciwną stronę
  • kolejna modyfikacja o uwzględnienie sterowania szybkością obrotów – wczytujemy liczbę z przedziału -255..255 i sterujemy nie tylko kierunkiem obrotów, ale też i szybkością
  • przy okazji zachęciłem do wirtualnego Arduino na www.circuits.io

A oto i bohater naszych zajęć:

Znalezione obrazy dla zapytania modul l298

Kolejne zajęcia – także we wtorek 16:00 – sterujemy silnikiem za pomocą światła.  Zapraszam!

 

silniczki DC + sterownik L293N

 

Zajęliśmy się silniczkami prądu stałego i przypominając sobie nawet najprostrze programiki dla Arduino udało się nam:

  • praca z multimetrem – mierzenie prądu płynącego przez działający silniczek – uwaga na odpowiednie nastawy zakresów pomiaru  
  • zwrócenie uwagi na wydajność prądową pinów cyfrowych Arduino oraz pinu zasilającego 5V
  • omówienie układu L293 – sterownik silnika (mostek H) – jego zalety? warto pamiętać!
  • budowa układu na płytce stykowej i „oprogramowanie” go w Arduino 
  • regulacja szybkości obrotów – pin PWM
  • regulacja szybkości ze zwiększonym zasilaniem silniczka (2x 6V) –  wcale nie spaliliśmy nasz silniczek!

Kolejne zajęcia – także we wtorek 16:00 – budujemy nasz pojazd.  Zapraszam!

 

Zajęcia nr 9 (ostatnie) – Dzień Ojca Robota!

Dzień Ojca „Robota”!

Dziś w ten szczególny dzień (primo: Dzień Ojca, secundo: nasze ostanie spotkanie w Talentach XXIw!) zbudowaliśmy naszego pierwszego mobilnego robota. Uczestnicy kursu zostali więc ojcami swoich mechanicznych zabawek sterowanych pilotem od TV 😉 Gratulacje!

Wykonanie robota polegało najpierw na złożeniu przygotowanych części – hardware w hardcorowym wykonaniu (opis zestawu z fotkami tutaj). Warte jednak zapamiętania jest jedno: nie trzeba kupować (dość) drogich zestawów allegrowych typu platforma robota jezdnego za (bagatela) 40-90 zł (…plus wysyłka) aby rozpocząć przygodę z robotem. Wystarczy płyta pilśniowa (tzw. plecki od szafek), kątownik (trafiłem na taki pasujący do naszych kół!) oraz wkrętarka aby stworzyć pojazd! Do tego warto zaopatrzyć się w garść śrub (w naszym przypadku: fi – czyli średnica – 3mm, długość – 8mm, 12mm oraz 35mm – raptem 3 rodzaje) oraz podkładki z nakrętkami zakupione w Krometcie (uwaga: wpis zawiera lokowanie produktu 😛 a może po prostu dzielę się z Wami fajnymi sklepami?)http://www.kromet.bialystok.pl/templates/kromet_34/images/header-object.pngaby za kwotę mniej niż 5 zł stworzyć platformę, którą możemy dopasować do swoich potrzeb (proszę – porównaj to z ceną podobnych platform, wykonanych z pleksiglasu i dostępnych w serwisach aukcyjnych). To był pierwszy krok.

Drugi krok to połączenie elementów elektroniki sterującej pojazdem. Uczestnicy kursu wykazali się zrozumieniem działania modułu L298N (sterownik silników) oraz TSOP2236 (odbiornika podczerwieni), poznanych wcześniej na naszych zajęciach. Podłączyli wszystko do Arduino UNO i … stworzyli pojazd, który jeździł i obracał się według rozkazów wysyłanych z pilota od TV!

Trzeba przyznać, że to dopiero początek przygody z robotyką. Nasz kurs w ramach Talentów XXIw się kończy, ale (mam nadzieję) Wasza przygoda z informatyką-elektroniką-fizyką dopiero się zaczyna!

Warsztaty „Z fizyką w przyszłość”

Osoby wytrwałe do końca kursu zachęcam do pilnego śledzenia naszego profilu na FB i nasłuchiwaniu o nadchodzącej inicjatywie Wydziały Fizyki UwB „Z fizyką w przyszłość”, gdzie będzie kurs Arduino. Warsztaty rozpoczną się w październiku 2016 r. więc nie przegapcie zapisów, specjalnie dla Was przygotuję grupę zaawansowaną. A jeśli nie chcecie bawić się w mój zestaw z płyty pilśniowej to zapraszam na warsztaty z modelowania i druk 3D – także w cyklu „Z fizyką w przyszłość” (pamiętajcie: październik 2016!).

Wakacyjne projekty?

Jeszcze raz gratuluję wytrwałości na moich zajęciach oraz pracowitości (choć przyznać muszę, że… 1) prac domowych mógłbym otrzymywać więcej, oraz 2) trzeba robić notatki!). Cieszy mnie Wasz entuzjazm, gdy sterowaliście swoim własnym pojazdem! Dziękuję za wspólnie spędzony czas i… zapraszam do chwalenia się własnymi robo-osiągnięciami w wakacje (macie pytanie odnośnie tematu? zakupów? proszę słać do mnie emaile).

K. Gawryluk

Zajęcia nr 8 – LCD16x2 oraz… zdalnie sterowany POJAZD!

LCD 16×2  (na sterowniku HD44780)

16x2-Character-LCDWłaściwie niezbędny element, jeśli chcemy stworzyć mobilnego robota na płytce Arduino. W końcu zależy nam, aby „odczepić” się od komputera i portu szeregowego, ALE  ciągle chcemy, aby Arduino do nas gadało 😉 Może to być stacja pogody, wyświetlająca na ekraniku aktualną temperaturę/ wilgotność/ prędkość wiatru/ cokolwiek (i nie musimy mieć podłączonego kompa!)…. może to być też pojazd na kółkach, którym sterujemy pilotem od TV  – poznanym na naszym poprzednim spotkaniu. Wystarczy teraz połączyć wszystko do kupy (wraz ze sterownikiem silników – modułem L298D) i mamy zabawę! Warto wspomnieć, że sterownik ekraniku HD44780 obsługiwany jest przez bibliotekę LiquidCrystal — powinna być domyślnie zainstalowana w Arduino IDE.

Poznany sposób podłączenia tego wyświetlacza angażował aż 6 pinów cyfrowych z Arduino – to dość dużo. Mogę dopowiedzieć, że istnieją inne sposoby obsługi tego wyświetlacza – przez protokół I2C – wymagające tylko 2 przewody… Wymagany do tego jest konwerter (za kwotę ~8.5zł, co jest dość sporo przy cenie samego wyświetlacza za ~10zł). Ale to opowieść na inną okazję.

millis()

Przekonaliśmy się także o tym, że funkcja millis() – zwracająca liczbę milisekund od czasu uruchomienia Arduino – jest bardzo użyteczna. Warte zapamiętania jest także dyskusja typów danych do przechowywania wartości milisekund – przy odpowiednim doborze mamy zmienną całkowitą, bez znaku i to 4-ro bajtową, gotową do zapisywania czasu 40-tu iluś tam dni w milisekundach właśnie. Chodzi oczywiście o typ unsigned long.

Liczba pi (3.141592…)

Na naszych zajęciach dużo się dzieje… Aby trenować wyświetlanie na ekraniku wyliczyliśmy liczbę pi ze wzoru Leibniza:

\sum _{{n=0}}^{{\infty }}{\frac {(-1)^{{n}}}{2n+1}}={\frac {1}{1}}-{\frac {1}{3}}+{\frac {1}{5}}-{\frac {1}{7}}+{\frac {1}{9}}-\cdots ={\frac {\pi }{4}}

I choć kod liczący tego typu wyrażenia okazał się prosty, to jednak jego zrozumienie już takie oczywiste nie było. Wypada pochwalić jednego uczestnika – Mariusza z 2LO Bstok, który napisał własny algorytm poprawnie liczący tą liczbę, cechujący się lepszą wydajnością niż mój szkoleniowy. Gratuluję!

Pilot TV + koła + ekranik = pojazd na trzech kółkach!

Przychodzi najciekawszy etap naszych zajęć – łączymy wszystkie poznane elementy w jeden projekt. Pochwalę Łukasza i Mateusza z ZSM CKP#2 za wytrwałą pracę i złożenie pojazdu, a następnie jego (proste) oprogramowanie.

DSC_1339DSC_1340

Pojazd śmigał całkiem żwawo po podłodze (8x paluszki AAA to za duże napięcie jak na te silniki, ale…) i sterowany był pilotem na podczerwień. Na kolejnym spotkaniu uczniowie oprogramują maszynę w nowy sposób – mam nadzieję 😉

DSC_1341Inni męczyli się jeszcze ze sterowaniem pojedynczym kołem przez pilot TV – mam nadzieję, że to „męczenie” było całkiem przyjemne i zachęcające do naszego następnego spotkania, za tydzień. Na nim wszyscy stworzą swojego pierwszego mobilnego robota. Zapraszam!

Ostatnie zajęcia 23-06-2016, 16:00

na nasze ostatnie zajęcia proszę przynieście piloty od TV oraz dużo zapału do pracy (jak zawsze). Będą to także zajęcia podsumowujące, czyli miło by mi było widzieć osoby, które zapisały się na moje zajęcia a uczęszczały sporadycznie (nie wnikam w przyczyny) – będę ciekaw Waszych opinii o kursie. Dodatkowo zostaną przedstawione pozalekcyjne projekty Wydziału Fizyki dotyczące kształcenia młodzieży ponadgimnazjalnej w nadchodzącym roku szkolnym. Wakacje tuż tuż, może warto łyknąć inspirację i twórczo spędzić część lata w warsztacie robotycznym? Serdecznie zapraszam!

Zajęcia nr 7 – silnik DC, sterownik silnika L293 (plus moduł) oraz pilot na podczerwień

Silnik DC
silnik_dc

Typowa zabaweczka z Allegro… zaisilanie 6V, ale prądu pożera sporo (niektórym udało się to sprawdzić 😛 mierniki właśnie przeszły kolejny lift i możemy do tego wrócić, by każdy się o tym przekonał). Warto dodać, że przy obciążeniu (zatrzymywanie ręką koła), prąd wzrasta z ponad 100 mA do nawet 900 mA. Należy o tym pamiętać.

Sterownik L293N

Zaprzyjaźniliśmy się z nowym układem w obudowie DIP – od dziś jest naszym nowym kolegą 😉 Prosty w obsłudze a umożliwia: podłączenie zewnętrznego zasilania do silników (np. większego niż 5V z Arduino – jakieś akumulatorki…), sterowaniem dwoma silnikami DC, oraz sterowanie mocą silnika. Programowanie tego układu jest bardzo proste – o ile rozumiemy jak programować cyfrowe wyjścia Arduino, ale poto tyle czasu męczyliśmy się właśnie z LEDami i PWMami, aby taki L293 był bajecznie prosty. Warte zapamiętania jest sekwencja sterująca: dwa jednakowe sygnały oznaczają STOP, sygnały „zero” i „jeden” RUCH w jedną stronę, „jeden” i „zero” RUCH w drugą stronę. Proste. Dodatkowo zapoznaliśmy się z modmodul293bułem na bazie układów L293 (tutaj: L298) i pokazałem, jak się z nimi obchodzić (bateryjka + śrubokręt). Tutaj warto pamiętać o drobnych (acz istotnych) szczegółach z not katalogowych tych układów (przede wszystkim: maksymalny prąd pracy!).

Pilot na podczerwień – TSOP22xx

tsop22xx

 

Czyli wykorzystujemy bibliotekę IRLib wraz z czujką TSOP22xx. Ponieważ pożera ona bardzo mało prądu (jedynie 5 mA) zdecydowałem się pokazać Wam podłączenie jej bezpośrednio do płytki Arduino. Jedna nóżka czujki siedziała w GND, druga w pinie numer 13 (zasilanie VCC) a trzecia – sygnałowa – w pinie 12 Arduino – bardzo stabilna konfiguracja. Należało tylko włączyć zasilanie na 13-tce aby odbiornik podczerwieni pracował –  ale to już powinniśmy umieć (ponownie: pamiętacie „zabawy” z LED-ami? no właśnie po to one wszystkie…).

Dzięki poznanym elementom mogliśmy sterować silnikiem przez pilot od TV! Fajnie, nieprawdaż? Za tydzień nasze kolejne zajęcia, nie zapomnijcie przynieść swoich pilotów – może uda nam się skonstruować pojazd? Zapraszam!

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: TSOP2236 + IRLib + L298N (14-03-2016)

Po co bawić się silniczkami? Przecież zdalnie sterowaną zabawkę można kupić u Chińczyka za 10 zł – powie malkontent. TAK, to prawda. ALE:

  • konstruując samodzielnie mamy przy tym dużo zabawy,
  • tu chodzi nie tylko o zabawki na kółkach – równie dobrze można zdobyte umiejętności wykorzystać przy budowie własnego Inteligentnego Domu, gdzie możemy tego typu silniki zastosować do sterowanych pilotem rolet.

Ku pamięci: PWM ciągle szwankuje, zostawiamy to na potem…

L293-pwm

3 & 4                      SILNIK + i –
2                             ARDUINO #9
7                             ARDUINO #8
16                           ARDUINO 5V
4 & 5 GND, ARDUINO GND
8 4xAAA (bateria)
1                             ARDUINO   #10 (PWM)