Samochodzik sterowany – podczerwień, TSOP – oraz PM2D3D

Pojazd sterowany – TSOP23xx

Pan Przemek uporał się z płynnym sterowaniem pojazdu (naprawa softu) – auto śmiga teraz całkiem gładko! Koła nie są uruchamiane i zatrzymywane na określony czas po wciśnięciu danego przycisku – brak efektu „czkawki”. Zamiast tego, auto zatrzymuje się gdy użytkownik zwolni przycisk na pilocie. Obsługiwane są też kody repetycji przycisku, w tym także tajemniczy kod ZERO – który pojawiał się na skutek jakiś problemów komunikacji pilota z czujką TSOP. Można więc się cieszyć, choć pilot płata figle i… mimo wszystko zrywa się komunikacja – wówczas auto się zatrzymuje (na chwilę, bo w końcu przycisk cały czas jest wciśnięty więc po chwili auto rusza). śmiało można to nazwać sukcesem. Niestety – testowy pojazd jest kiepski – 4 koła mają różne silniczki i jeden z nich działa zdecydowanie słabiej niż reszta, przez co auto marnie jeździ po podłodze (wykładzina = duże tarcie, trefne koło stoi w miejscu zamiast się kręcić). Będzie trzeba zmienić platformę (na zmodyfikowane serwomechanizmy – ale o tym za tydzień). Za tydzień też zastosowanie tej części kodu w komunikacji radiowej (lepszej niż na podczerwień).

Precyzyjna Maszyna (PM2D3D) – soft

Kolejne prace nad softem, wydruk wydaje się zachęcający 😉 Z poziomu GRAPH CREATORA można już tworzyć grafikę, która zostanie przeniesiona na kartkę papieru. Brawo!

Więcej o projekcie Maszyny na stronie projektu.

(c) K.G.

Samochodzik sterowany – podczerwień, TSOP – oraz PM2D3D

Pojazd sterowany – TSOP23xx

Pan Przemek zapoznał się z odbiornikiem podczerwieni TSOP 2230, dzięki któremu jego pojazd był sterowany bezprzewodowo. Poniżej prosty programik do dekodowania sygnałów z pilota telewizyjnego z wykorzystaniem biblioteki IRLib (do pobrania w dziale Do pobrania):

#define IR 12
#include <IRLib.h>
IRrecv pilot(IR);//pin
IRdecode dekoder;
 
void setup(){
  pilot.enableIRIn();//uruchamiamy odbiornik IR
  Serial.begin(9600);
}
 
void loop(){
   if (pilot.GetResults(&dekoder)) {
     dekoder.decode();    //dekoduj dane
     pilot.resume();     //restartuj odbiornik
     Serial.println(dekoder.value);//kody klawiszy! zanotuj je sobie....
   }//if
}/loop

Po zapisaniu sobie kodów pilota TV można zmienić program do poruszania naszym samochodzikiem – instrukcjami typu  if (dekorer.value==432421) jedz_do_przodu() — oczywiście funkcję tą należało wcześniej sobie napisać 😉

Wspólnie ustaliliśmy, że każdokrotne naciśnięcie przycisku do przodu na pilocie uruchamia silniki na zadany czas (np. 100ms) a następnie je wyłącza. Tak samo z jazdą do tyłu – włączamy odpowiednio silniki (ponownie na 100ms) a potem je wyłączamy (no i ze skrętami tak samo). Wszystko ładnie działało, ale… nie do końca. Silniki są cały czas włączane i wyłączane – a wiadomo, że prąd potrzebny na „rozruch” silnika jest znacznie większy niż podczas jego pracy ze stałą prędkością. Nie ma potrzeby je zatrzymwać, jeśli użytkownik trzyma wciśnięty dany przycisk! Dodatkowo, przy mniejszym czasie pracy silnika (nie 100ms a 50ms czy nawet 20ms) samochód miał „czkawkę” – ciągle uruchamiał i zatrzymywał silniczki. Te dwa powody były wystarczające do zmiany pierwszej wersji kodu – na bardziej zaawansowaną, która nie wyłącza silnika gdy ciągle wciskamy ten sam przycisk.  „Czkawka” została (częściowo) opanowana, ale… są błędy w kodzie 🙁 Na dodatek należy obejść (dobrze zaprogramować) błędy w komunikacji pilota na podczerwień z czujką TSOP23xx – przy trzymanym przycisku pojawia się tajemniczy kod ZERO, co przerywa pracę silników. Za tydzień się z tym uporamy!

Precyzyjna Maszyna (PM2D3D) – soft

Choć najwięcej zmian zostało w softwarze – to nastąpiła także modyfikacja konstrukcji ramy: silniki zostały przeniesione z jednej strony na przeciwne, aby zrónoważyć całą konstrukcję. Ciągle pozostaje kwestia dodania przeciwwagi po przeciwnej stronie ramy, aby nie tylko kirunek wschód-zachód był zrównoważony, ale także północ-południe. Dodatkowy ciężarek będzie pewnie w niedalekiej przyszłości, gdy powstanie panel do sterowania.

Są też anty-poślizgowe nóżki do ramy, z dodatkowymi „dociskaczami” kartki A4 (wydrukowane w 3D). Jak wspomniano, najwięcej zmian Pan Bartek wykonał w sofcie i… poprawnie rysowane są już ukośne linie! Brawo

Więcej o projekcie Maszyny na stronie projektu.

(c) K.G.

sterujemy pojazdem – oprogramowanie

Kontynuujemy oprogramowywanie pojazdu – ciągle chodzi nam o jak najpłynniejszą jazdę.

Propozycje softu:

  • tworzymy liczniki czasu jazdy (w milisekundach) do przodu, w lewo, w prawo
  • każdorazowe naciskanie przycisków na pilocie zwiększa odpowiednie liczniki
  • w pętli głównej unikamy zatrzymywania Arduino – czyli funkcji delay, zamiast to
  • używamy funkcji millis() do sprawdzenia aktualnego czasu i wyłączeniu silników, jeśli liczniki pracy do przodu (w lewo, w prawo) się skończyły
  • a teraz najciekawsze modyfikacje:
  • jeśli oba liczniki: do przodu i skrętu (nieważne: w lewo czy w prawo) są niezerowe, to w zależności od ich stosunku sterujemy PWM-em koła i robimy albo lekki skręt, albo bardzo mocny (bez jechania do przodu).

Kolejne zajęcia po Świętach – wtorek 25 kwietnia – sterujemy pilotem platformą – nie zapomnijcie przynieść ze sobą pilota na podczerwień.  Zapraszam!

 

sterujemy pojazdem (TSOP 2236) + tuning platformy

Rozpoczęliśmy od sprawdzenia, na ile czasu jazdy starczą nam zainstalowane akumulatorki. Pierwszy program był się bardzo prosty – cała naprzód (i  mierzymy prąd).

Potem zamonotowaliśmy czujkę TSOP 2236 i wpisaliśmy obsługę poleceń: jedź do przodu, tyłu, skręcaj (niektórzy nawet dwa rodziaje skrętów – ciasny, oraz szeroki).

Okazuje się, że pojazdy jeżdzą, ale trudno się nimi steruje – wykręcenie „ósemki” na przygotowanym torze nie jest wcale łatwe. Sprawa wymaga odpowiedniego oprogramowania rozkazów jazdy – na tym trzeba się skupić.

Kolejne zajęcia – także we wtorek 16:00 – sterujemy pilotem platformą – nie zapomnijcie przynieść ze sobą pilota od TV/radia/odkurzacza.  Zapraszam!

 

pilot od TV — czujka TSOP 22xx + platforma pojazdu

Poznaliśmy odbiornik podczerwieni TSOP 2236. 

#define VCC 13
#define IR 12
#include <IRLib.h>
IRrecv pilot(IR);//pin
IRdecode dekoder;

void setup(){
  pinMode(VCC, OUTPUT);
  digitalWrite(VCC, 1);//wlaczamy napiecie dla odbiornika IR
  pilot.enableIRIn();//uruchamiamy odbiornik IR
  Serial.begin(9600);
}

void loop() 
{
   if (pilot.GetResults(&dekoder)) {
     dekoder.decode();    //dekoduj dane
     pilot.resume();     //restartuj odbiornik
     Serial.print("0x");      
     Serial.println(dekoder.value, HEX);//szesnastkowo - tak tylko...
   }//if
}/loop

W powyższym przykładzie zakładam, że pilot odbiornik IR podłączony był bezpośrednio do płytki Arduino o tak:

co jest bardzo stabilne i (warto podkreślić) nie wymaga płytki stykowej. Wszystko zgodnie ze specyfikacją – odbiornik IR dostaje zasilanie 5V z pinu #13 Arduina, a wymagany prąd to tylko 5mA (czy pamiętasz, jakim maksymalnie prądem można obciążyć piny cyfrowe Arduino?). Dlatego na początku kodu pojawia się deklaracja VCC i włączenie tego pinu. Reszta zgodna z biblioteką IRLib – nie musimy bawić się w dekodowanie sygnału, wszystko zostało zrobione przez Chris Younga – dziękujemy!

Dodatkowo: zbudowaliśmy platformę pojazdu, którą za tydzień – będziemy sterować pilotem od TV. Jak widać stawiam na prostotę i możliwość późniejszej rozbudowy – dlatego nasze pojazdy są dość sporych rozmiarów. Zachęcam do tego typu prac ręcznych.

Kolejne zajęcia – także we wtorek 16:00 – sterujemy pilotem platformą – nie zapomnijcie przynieść ze sobą pilota od TV/radia/odkurzacza.  Zapraszam!

 

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)