Światłolub – (znowu) programowanie

Trwa szlifowanie kodu… a raczej tworzenie go tak, by działał poprawnie 😉 Okazuje się bowiem, że w różnych miejscach testowanej podłogi jest różne oświetlenie (zastane) – o dziwo! 😀 Wbite na sztywno wartości odczytane z czujników nie pracują 😉 Na tym właśnie polega ta zabawa! Rozwiązanie? aktualizować światło zastane co 1s? Tak działa jeden zespół. Drugi kombinuje z hardware – wprowadza jakąś przeszkodę blokującą światło zastane – ciekawe, co z tego wyjdzie.

Zawody

Jeśli sterowanie będzie działać, to sprawdzimy to w ekstremalnej sytuacji- postawimy dwie przeszkody, będzie trzeba je objeżdźać – kręcąc tzw. ósemki. Zmierzymy czas trzech okążeń i się okaże, który zespół jest lepszy 😉

(c) K.G. 2025

Światłolub – programowanie

komunikacja I2C i hd44780

Aby widzieć odczyty z fotorezystorów wykorzystujemy ekran LCD16x2 — nie chcemy jednak tracić cennych portów cyfrowych (chyba trzeba użyć 7-miu do obsługi), więc stosujemy moduł I2C hd44780.

testy, testy, testy…

Czyli najprzyjemniejsza część zabawy – prototyp już mamy, teraz trzeba go mądrze oprogramować. Zaczynamy!

Trzeba odczytać wskazania obu fotorezystorów gdy światło jest przed pojazdem, z jednego boku, z drugiego… Zapisać do notepada.exe by następnie wpisać w ino 🙂

Kiszka. Stoi. Albo kręci się nie w tą stronę, co trzeba. A niby miało działać 😛 więc znowu do kompa i wprowadzamy zmiany w kodzie /w parametrach.

Nawet kłótni nie było 🙂 nikt nie zrzucał winy na drugiego – nie działa dobrze, więc trzeba poprawić! Świetny team-work !

Zawody

Za tydzień kody będą już dopieszczone, więc będzie można przystąpić do sprawdzenia algorytmów w akcji – postawimy dwie przeszkody, będzie trzeba je objeżdźać – kręcąc tzw. ósemki. Zmierzymy czas trzech okążeń i się okaże, który zespół jest lepszy 😉

(c) K.G. 2025

Młodzieżowe Podlaskie Lokalne – dofinansowanie

Wystartował projekt konkursowy Młodzieżowe Podlaskie Lokalne – jest możliwość uzyskania dofinansowania w kwocie 2000 – 6000 zł na projekt samorządów studenckich i doktoranckich, uczelnianych organizacji studenckich i doktoranckich (np. kół naukowych, chóru itp.).

Próbujemy! The Mecanum Mavericks

Ostatnio budujemy pojazdy sterowane latarką… ale czemu nie spróbować czegoś bardziej atrakcyjnego? Niech to dalej będzie „światłolub” ale z ciekawszą mechaniką ruchu? Chcemy kupić koła mecanum, dzięki czemu pojazdy będą poruszać się dość nietypowo 😉

Taki projekt można świetnie rozbudowywać – dodawać inny rodzaj sterowania (radiowe!), a także zrobić z tego zabawę „w berka” – o ile posiadamy dwa takie pojazdy. My wnioskujemy o 5 zestawów i planujemy… sza, cicho-sza 😉 Zobaczymy 😉

Aktualizacja – wyniki konkursu

YYYY, nie udało się. Nasz projekt znalazł się blisko finałowej grupy, nawet został wpisany na listę rezerwowych ale… nie udało się. Cóż – będziemy próbować za rok!

(c) K.G. 2025

Oczy światłoluba

Ciągle budujemy pojazd sterowany latarką – wykorzystamy fotorezystory jako „oczy”. Dziś wracamy do konstrukcji pojazdu i będą pierwsze próby. Ale nie chcemy mieć płytki prototypowej na pokładzie więc… poznajemy lutownicę 😉

Przygotowujemy sobie wielokrotne wyjścia GND i 5V, a także lutujemy rezystor z fotorezystorem w szereg – z dodatkowym przewodem do pinu analogowego Arduino UNO. Wszystko proste, tylko trzeba trochę się pobawić… na tym to chyba polega, prawda? 😉

No i dobrze, że się ucząc się także się bawimy!

Udało się! Oczy skierowane są na podłogę (trochę za bardzo) więc rozpoczyna się faza testowa oprogramowania – część „hardwareowa” chwilowo zakończona.

(c) K.G. 2025

fotorezystor – oczy światłoluba

Czyli budujemy pojazd sterowany latarką – wykorzystamy fotorezystor jako „oczy”. Czyli muszą być dwa, aby porównywać ilość światła z jednego czujnika i drugiego i na tej podstawie jechać do przodu, zatrzymywać się czy skręcać. Niby proste – choć cała magia tkwi w odpowiednim doborze parametrów decyzyjnych.

analogRead()

Studenci jeszcze nie mieli omawianej tej funkcji na zajęciach z Arduino – więc zaczynamy od podstaw. Uczymy się więc co mierzymy, jakie są ograniczenia Arduino UNO, sprawdzamy odczyty napięcia 3.3V oraz 5V z płytki Arduino, a także baterie AAA.

Przechodzimy dalej do fotorezytora i uczymy się go najlepiej wykorzystać. Skoro Aruino idczytuje napięcie a nie opór – to wykorzystujemy dzielnik napięcia i odczytujemy napięcie. Ale jaka wartość stałego rezystora w dzielniku dla naszego fotorezystora? Testujemy z wykorzystaniem thinkercada!

Dziś bez podłączenia jeżdzącej platformy – to będzie za tydzień!

(c) K.G. 2025

Maskotka – kolorki, kolorki…

Trwają prace nad elementami świecącymi do Maskotki – projekt Pana Bartka w realizacji… na razie „na próbę” – obudowa z kartonu. Efekt przed malowaniem i lakierowaniem poniżej 😉

Trzeba pamiętać, że paski kolorowych LEDów (u nas WS2812B) będą jeszcze ciekawie zaprogramowane… to ZWIĘKSZY efekt końcowy! Zapowiada się ciekawy efekt!

Regularne + nowy termin spotkań

U niektórych jeszcze sesja (poprawkowa), więc frekwencja marna – ale nie ma co narzekać, bo dołączył do nasz jeden nowy student. W końcu nie w liczbie a w pomysłowości i intelekcie siła! 😀

To ostatnie zajęcia wtorkowe, terminy spotkań ulegają zmianie i będziemy się widywać w PIĄTKI o godz. 13:00 (sala 1064, Kampus, Wydział Fizyki – wiadomo).

(c) K. G. 2019

Line Follower — własne podwozie

Byłem zmuszony odwołać dzisiejsze zajęcia (natłok pracy przed końcem roku! przepraszam).

Pan Bartek pobawił się w zaprojektowanie podwozia (blender.org) i oto jego rezultaty:

A co to ten wystający „pypeć”? To trzecie koło 😉 taki ślizgacz (z założenia pojazd ma poruszać się równej nawierzchni, stole, podłodze z namalowaną/przyklejoną czarną linią). Pan Bartek nie lubi kręcić (kołami), dlatego je zakleja lub produkuje „pypcie” 😉

Mamy lekkie kłopoty z naszą drukarką Zoltrax Z200, więc wydruk nie wyszedł jak należy… ale ciągle nadaje się do wykorzystania!

Po Świętach zobaczymy, jak to wszystko działa w praktyce! A skoro o Świętach mowa, to życzę Wszystkiego najlepszego każdemu Fi-BOTowiczowi. Do zobaczenia po przerwie (8 styczeń).

(c) K.G. 2018

Maskotka, Line Follower oraz podstawy

Pracujemy w trzech płaszczyznach (3D? hmmmm)

Pojazd (autonomiczny), refleks (LEDy + przyciski) oraz line follower

Ciągle dwa/trzy niezależne projekty. Wygląda na to, że będą jednak trzy, bo Pan Bartek „atakuje” temat line followera (świetnie!)

1) zespół od pojazdu po sukcesie sterowania pojazdem przez człowieka (bluetooth) poznawał temat czujki odległości HC-SR04. Zamontowali już nawet „trzymak” w pojeździe – bez użycia wkrętaki! zuchy! 😉 Tak, tak – to „oklepany” układ, ale każdy od czegoś zaczyna – prawda? Trzymam więc kciuki za poprawne oprogramowanie go w pojeździe i zrobienie autonomicznego robota (poruszającego się bez ingerencji człowieka, w tym przypadku: wykrywającego kolizje i zmieniającego kierunek ruchu).

2) „refleks” przeszedł w stan rozbudowany i teraz składa się z 3 losowo zapalanych LEDów, i łapaniu reakcji przez 3 przyciski. Układ:

oraz program (+dużo komentarzy):

//piny z podlaczonymi przyciskami
int btn[]={2,4,6};
//piny z podlaczonymi ledami
int led[]={3,5,7};

void setup() {
  Serial.begin(9600);
  for (int i=0; i<3; i++){
    pinMode(btn[i],INPUT_PULLUP);
    pinMode(led[i], OUTPUT);
  }
}

unsigned int i;
unsigned int cr,tstart,tstop;
byte bt1, bt2, bt3, LOS;

void loop() {
  //"dysko-mode" informujace o poczatku rozgrywki
  for(i=0;i<3;i++){
        digitalWrite(led[0], HIGH);
        delay(100);
        digitalWrite(led[1], HIGH);
        digitalWrite(led[0], LOW);
        delay(100);
        digitalWrite(led[2], HIGH);
        digitalWrite(led[1], LOW);
        delay(100);
        digitalWrite(led[2], LOW);
        delay(100);
    }//"dysko-mode"
      
   //(pseudo)losowe czekanie: od 1s do 5s
   delay(random(1000,5000));

   //wybor LEDa do zaswiecenia: 1,2 lub 3
   LOS=random(1,4);
   
   //wersja tylko do testow: wypisywanie na ekran losowania
   Serial.print("LOS=");
   Serial.println(LOS);

   //wlaczenie wylosowanego LEDa     
   //dzieki zapisaniu numerow pin-ow do tablicy jest to teraz bardzo proste!
   digitalWrite(led[LOS-1], HIGH);

   //rozpoczecie mierzenia czasu
   tstart = millis();
       
   //czekanie na rekacje uzytkownika - wcisniecie jednego z trzech pyrzycsikow
   //zapamietujemy w zmiennych, ktore przyciski sa wcisniete
   do{                
       bt1 = digitalRead(btn[0]);
       bt2 = digitalRead(btn[1]);
       bt3 = digitalRead(btn[2]);                
   }while(bt1+bt2+bt3==0); //petla wykonuje sie tak dlugo, az przynajmniej jeden z przyciskow zostanie wcisniety                          

   //zatrzymanie "stopera" skoro cos zostalo wcisniete
   tstop = millis();
   digitalWrite(led[LOS-1], LOW);     

   //okreslenie poprawnosci wcisniecia przycisku:
   //zakladamy, ze zle wcisniety przycisk (tak wygodniej)
   bool ok=false;   //czy wygralem? 

   //sprawdzenie, czy moze jednak zostal wcisniety odpowieni przycisk
   switch(LOS){
      case 1: if ((bt1==1)&&(bt2==0)&&(bt3==0)) ok=true;break;
      case 2: if ((bt2==1)&&(bt1==0)&&(bt3==0)) ok=true;break;
      case 3: if ((bt3==1)&&(bt1==0)&&(bt2==0)) ok=true;break;
    }//swicth

    //jesli wygrales, to stosowny komunikat
    if (ok){    
      cr = tstop-tstart; //cr = "czas rekacji"
      Serial.print("brako! gratulacje! ");    
      Serial.print("czas reakcji:");
      Serial.println(cr);
    }//ok==true
    else{    
      Serial.println("pudło! nie ten przycisk!");    
    }     
    delay(1000);
}//loop
         
        



Można jeszcze popracować nad tym kodem – można dodać kolejny (inny) „dysko-mode” informujące, że się poprawnie wybrało przycisk, albo zaświecić wszystkimi LED-ami, gdy użytkownik „spudłował”. W przyszłości dodamy do układu wyświetlacz LCD aby tam pojawił się stosowny komunikat, a nie na ekranie podłączonego komputera.

3) na bazie TSOP5000 (kiedyś już ją poznawaliśmy) powstanie czujnik do pojazdu typu line follower – praca się właśnie rozpoczyna. Działa już (podwójny) układ czujników, więc teraz rozpoczął się drugi etap: układ 3/4/5? czujek na własnoręcznej płytce prototypowej + pojazd na sterowniku L298.

Dlaczego własnoręcznie robiona czujka, a nie jedna z „kupnych”, jak te ze zdjęć poniżej?

Odpowiedź jest prosta: bo to fajniejsze i mamy więcej zabawy podczas pracy, a o to właśnie chodzi!

 

KG, 2018