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.

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.

Precyzyjna Maszyna oraz RPM

Obroty na minutę: RPM (czujka pola magnetycznego SS49E)

Pan Przemek ukończył kod, który zlicza obroty wirującego silniczka – brawo! Należy się pochwała, bo to jego pierwsze zmagania z Arduino.

Układ doświadczalny:

W układzie celowo zamontowano magnesy tak, by czujka SS49E „widziała” raz biegun północny (N) magnesu, a za drugim razem (gdy silniczek obróci sie o 180 stopni) biegun południowy (S). Ustawienie magnesów na końcach patyka nie jest więc przypadkowe 😉 Czujnik SS49E odczytuje zarówno biegun S jak i N (uwaga: nie wszystkie czujki pola magnetycznego, bazującego na efekcie Halla, tak mają – warto to sprawdzić przed zakupejm), dlatego widzimy dwa „piki” podczas obracania silniczka – jeden „do góry” (większe napięcie) oraz „do dołu” (napięcie mniejsze). Z dala od magnesów czujka zwraca napięcie ~2.5V informując, że wartość pola magnetycznego jest (około) zera. Poniżej wykres z Kreślarki

Program zliczający liczbę obrotów na sekundę (zmienna czas – aktualnie 1000ms, ale można zmienić, także przez krotność – zmienna krok). Algorytm polega na znajdowaniu maksimum i minimum napięcia – a zapisywane jest moment ich wystąpienia (do zmiennych t_1oraz t_2, odpowiednio). Różnica tych czasów do pół obrotu.

void setup() {
Serial.begin(9600);
}

int i,max_=518,min_=518,a=0,b=0,czas,n=0,krok=1;
float v;
long int t_1=0,t_2=0,t_k=0,t_3=0,t_p;

void loop(){
 t_p=millis();
 czas=1000;
 i=analogRead(A0);
 if(i>540){
   if(i>max_){
    max_=i;
    t_1=millis();
   }
   else if(i<max_){
    a=1;
   }
 }
 if(i<490){
   if(i<min_){
    min_=i;
    t_2=millis();  
    }
   else if(i>min_){ 
    b=1; 
  }
 }

 if(t_1>t_2){
  t_3=t_2;
 }
 else{
  t_3=t_1;
 }
 
 if(a==1&&b==1){
    t_k=abs(t_2-t_1);
    a=0;
    b=0;
    max_ = 518;
    min_ = 518;
    if(czas>t_3){
      n++;
    }
    else if(czas<t_3){
    Serial.print("Liczba pol-obrotow: ");
    Serial.println(n);
    n=0;
    krok++;
    czas=czas*krok;
    }
 }
 }

Zmienna n (małe n) zlicza wystąpienia „półobrotów”, a co ustalony czas wypisywany jest komunikat z tą liczbą. W ten sposób mamy właśnie pół-RPS (revolutions per second), z którego łatwo można już otrzymać RPM (revolutions per minute).

Precyzyjna Maszyna

Sprężynka nie wytrzymała – chyba była zbyt twarda 🙁

Nowy model powinien być lepszy – bo wydrukowany z Z-Ultratu:

No i mamy coraz lepszą pracę Maszyny:

Więcej o projekcie Maszyny na stronie projektu.

(c) K.G.

Precyzyjna Maszyna (chwytak!) oraz Wiatromierz

Chwytak do ołówka/mazaka zaprojektowany, wydrukowany w 3D i zamontowany! Działa z serwomechanizmem a kod BBcode obsługuje nowe instrukcje (up, down).

No i kolejny (próbny) precyzyjny rysunek:

Opis całego proejktu Maszyny pod tym adresem

Obroty na minutę (rpm) i czujka pola magnetycznego SS49E

Wakacje w trakcie, ale nie tylko Pan Bartek spędza wolny czas z pracą nad projektem. Pan Przemek, który nie miał czasu na zajęcia Fi-BOTa w roku akademickim, poznaje Arduino i „atakuje” temat liczenia obrotów silniczka, wykorzystując czujkę pola magnetycznego SS49E


A po co nam zliczanie tych obrotów? Zastosowań jest wiele, jednym z nich jest mierzenie prędkości wiatru takim prostym urządzeniem:

w środku którego znajdują się: czujka SS49E, dwa magnesy oraz łożysko kulkowe (typ 682ZZ).

O dalszych losach tego projektu niebawem…

(c) K.G.

Precyzyjna Maszyna – protokół BBcode i pierwsze rysowanie

Pan Bartek wymienił paski na odpowiednie przez co maszyna faktycznie stała się precyzyjna 😉 Na zdjęciu poniżej widać te „zębkowate” paski właśnie i pierwszy „wydruk” – na razie litera „F” ale z czasem będzie cały Fi-BOT i logo 😀

Ciągle jest kilka kwestii do zrobienia:

  • (konstrukcyjna) mechanizm trzymania, podnoszenia i opuszczania pisaka (zmiany kolorów? kto wie),
  • (oprogramowanie) protokół komunikacji: tutaj padło na komunikację UART sterowaną graficznie z processinga i własny protokół wymiany danych „BBcode„. 

Jak na razie protokół BBcode obsługuje jedną instrukcję – przesuń maszynę o zadaną liczbę kroków wzdłuż osi x i y. W planach jest jeszcze „podnieś pisak” i „pisak dół”, a może nawet „powtarzaj X razy”. Zobaczymy.

Już we wtorek kolejne etapy produkcji – to się właśnie nazywa wakacje! jest czas na zabawę! Aktualizacje także na oddzielnej stronie projektu.

(c) K.G.

Precyzyjna Maszyna – silniki krokowe

Pan Bartek zaprezentował dziś finalną wersję ramy – z wózkami własnego pomysłu. Oto i ona:

I najważniejsze – wózki:

Chwilowo paski to zwykła dętka rowerowa (odpowiednie paski w drodze). Sterowanie shieldem do silników krokowych i maszyn CNC:

Taki shield to fajna sprawa – oszczędza plątaniny przewodów. Jego programowanie jest bajecznie proste. Używamy modułów A4988 sterowników silników:

Wszystko złożone i gotowe do pracy wyglądało tak:

A jak to działa?

Na filmie powyżej dodatkowy (tymczasowy) element – gąbki, to wyciszenie (cała konstrukcja lekko drga, a metalowe śrubki lekko dzwonią). Mamy pomysł co z robić z tym „fantem” – będzie i skuteczne, i zabawne 😉 W strylu Pana Bartka – wydrukuje się w 3D odpowiednie podkładki. Niebawem się okaże.

A teraz dwa silniki w akcji:

Nie mogliśmy się oprzeć pokusie „zainstalowania” precyzyjnego pisaka 😉 i wykonania pierwszego „precyzyjnego” rysunku:

Na uwagę zasługują gradienty koloru i efektowne falki. Jak się takie rzeczy programuje – chwilowo pozostawiamy w tajemnicy 😀 Filmik

Poniżej najważniejsi gracze z prezentowanej maszyny: wózki konstrukcji Pana Bartka – gratuluję pomysłowości!


Widać, że prace idą w (bardzo) dobrym kierunku. Niebawem kolejne etapy produkcji – wszystko aktualizowane na oddzielnej stronie projektu.

(c) K.G.

Wojny robotów i czujka pola magnetycznego

Mamy nowy pomysł: WOJNY ROBOTÓW ! Będzie trochę zabawy z prostym sterowaniem pojazdami trójkołowymi, połączonymi z elementami rywalizacji. Będzie też zabawa w modelowanie 3D i wydruk gotowych „pojazdów”. Szkice z „burzy mózgów”:

Właśnie z powodu nowego pomyłu przetestowaliśmy działanie czujki pola magnetycznego SS49E – dziecinnie proste 😉 Podłączamy do zasilania (5V z Arduino UNO) a wyjście #3 do portu analogowego.

Odczytywane napięcie z portu analogowego tłumaczymy na wartość pola  magnetycznego zgodnie z poniższym rysunkiem (z noty katalogowej czujnika).

Zaletą tego konretnego czujnika (SS49E) jest możliwość odczytywania pola z obu biegunów magnesu – czyli z biegunu półnonego i południowego. Są bowiem inne czujki, które informują nas jedynie o wartości pola z jednego bieguna, a na pole z przeciwnego bieguna są „głuche”. 

Nas nie interesują wartości w mT, a raczej sama informacja zbliżenia do magnesu. No właśnie – przetesowaliśmy kilka małych (i większych) magnesów, w tym neodymowe – bardzo silne. Będzie się działo!

(c) K.G.

Podlaski Festiwal Nauki i Sztuki

Chcę podziękować wszystkim studentom za aktywne uczestnictwo w imprezie pokazowej. Szczególne podziękowania kieruję do członków koła naukowego Fi-BOT.

(c) K.G.

Studenci Wydziału Fizyki biorący udział w pokazach. Wśród nich uczestnicy koła naukowego Fi-BOT (nie wszyscy – kto się spóźnił na zbiorowe zdjęcie – tego strata).
  
Projekt BB: line follower.
  
Tu powoli rodzi się pomysł „wojen robotów”… Pani Karolina „atakuje” Maskotkę (projekt Fi-BOT).
 
„Nieśmiertelna” gra REFLEX. Projekt Fi-BOT.

Oficjalna relacja z Podlaskiego festiwalu – w kronice Wydziału Fizyki.

 

Kameleon po raz drugi – podkład i czarny mat!

Ostatnio skończyliśmy na dopasowaniu aluminiowej skórki do naszej skorupy…
W końcu przyszedł czas na pomalowanie obudowy: najpierw podkład, aby farba dobrze się trzymała, potem malowanie, potem składanie wszystkiego do całości i (po drobnych korektach) uruchomienie i sukces!

Stanowisko pracy malarzy 😉
Maskotka wyschnięta i gotowa do malowania.
Malowanie na matowo…
Malowanie…
.. wszystkie części…
a po złożeniu – drobne poprawki…
DZIAŁA !