line follower, podstawy

  • podstawy (PWM, serwo silnik)
  • 3x czujka TCRT5000: Pan Bartek zlutował sobie moduł i zbudował PIERWSZEGO line followera (GRATULUJĘ!):
    • powyżej zastosowano nowatorskie rozwiązanie: czujki TCRT działają CYFROWO, ale zapamiętywana jest HISTORIA pomiarów (cyklicznie, 10 odczytów) a DECYZJA o zwrocie robocika podejmowana jest na podstawie UŚREDNIENIA historii – ciekawe rozwiązanie! Wszystko jest raczej tymczasowe, bo jest zamiar przeprogramowania układu – odczytywanie czujek analogowo, co poprawi dynamikę robota. Problemy techniczne – toporne koła i silniki – rozwiązujemy przez wymianę podzespołów na inne (zestaw silniczków i kół Pololu – niebawem w akcji)

(c) K.G. 2018

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

Pojazd (Bluetooth) + podstawy (3xLEDy + 3x przycisk)

Rozwija się projekt POJAZDU, a jednocześnie nauczane są podstawy Arduino (i programowania)…

  1. POJAZD
    1. Sterownik Monster vnh2p30 okazał się uszkodzony! Trudno to było wyczuć, bo z jednej strony działał poprawnie kręcąc silniczkiem w jedną stronę, natomiast w stronę przeciwną – albo wcale, albo baaaardzo powoli. Dlatego odsyłamy sterowniki do sklepu i wracamy do L298 i programujemy sterowanie przez Bluetooth. Pamiętamy o tym, aby nie jeździć na maksa bo ten sterownik przeznaczony jest tylko do pracy z prądami <1A. Na kolejnych zajęciach wrócimy do Monstera – bo mamy ich kilka sztuk a nie wszystkie są niesprawne.

  1. Sterowanie Bluetooth przez aplikację  Android RC działa! gratulacje.
  2. Podstawy Arduino/C/C++ pracujemy….

KG, 2018

Pojazd (pierwsze uruchomienie) + podstawy (LEDy + przycisk)

Rozwija się projekt POJAZDU, a jednocześnie nauczane są podstawy Arduino (i programowania)…

  1. POJAZD
    1. praca nad sterowaniem pojazdem: wykorzystujemy sterownik Monster vnh2p30 o bardzo dobrych parametrach (maksymalny prąd nawet 30A! zasilanie 6-18V) i świetnej cenie (~25 zł). Sterowanie podobne jak w przypadku L298 (za pomocą dwóch sygnałów) – konieczne jest podłączenie sygnału PWM (lub innego pinu z Arduino i włączenie go na stałe na HIGH, czyli PWM=100%). Fajna stronka opisująca co i jak podłączyć – polecam.
    2. Można kupić PODWÓJNY sterownik, ale cena (o dziwo) nie jest już aż tak atrakcyjnaZnalezione obrazy dla zapytania monster vnh2p30
  2. PODSTAWY: LEDy + przycisk = REFLEKS. Poznajemy jak odczytać stan przycisku – małe wyzwanie: program REFLEKS: LED zapali się po losowym czasie, naszym zadaniem jest jak najszybsze wciśnięcie przycisku od razu po zaświeceniu LEDa. Mierzymy czas reakcji człowieka.  Ciągle polecam wirtualne Arduino do zabawy w domu!
  3. Poznaliśmy OPTYCZNY czujnik odległości E18-D80NK (5V, zakres 3-80cm, nie dźwiękowy!) – prosty w użyciu, a niedługo do wykorzystania w projekcie Pojazdu.

KG, 2018

Pojazd (mechanika + pierwsze uruchomienie) + podstawy (LEDy)

Rozwija się projekt POJAZDU, a jednocześnie nauczane są podstawy Arduino (i programowania) – jest więc mały chaos…

  1. POJAZD
    1. konstrukcja: podstawa z płyty wiórowej 18mm wymieniona na sklejkę 10mm, czyli cieńszą, aby koła pojazdy miały większy „prześwit”
    2. silniki to Pollolu 37Dx70L z wbudowanym enkoderem – silnik ma przekładnię 70:1 dzięki której na dość małych obrotach (150 obr/min) uzyskuje  moment obrotowy 1,39 Nm (co oznacza 14 kg*cm). Dodatkowo możemy oprogramować enkoder kwadraturowy o rozdzielczości 64 impulsy na obrót (po przełożeniu 4480 impulsów na obrót).
    3. Zasilanie silnika to 6V do 12V – co przekłada się odpowiednio na na obroty: 75 rpm do 150 rpm i na pobór prądu: średniego 250/300mA i maksymalnego 2.5A/5A. Widać, że będziemy potrzebować mocnego sterownika do tych silników (typowy L298 da radę z maksymalnie 1A – tylko!)
    4. Koło do tego silnika to oryginalne Pollolu 12cm
    5. Mocowanie silnika to wydrukowane w 3D na uczelnianej drukarce „chwytaki” (projekt własny):
  2. PODSTAWY: LEDy, czyli poznajemy jak włączać/wyłączać napięcie na pinach Arduino. Polecam wirtualne Arduino do zabawy w domu.

KG, 2018

Pierwsze zajęcia 2018/2019

Po ostatnich nieudanych zajęciach, ruszyliśmy pełną parą. Frekwencja dopisała – pojawiło się sześciu pięciu nowych członków koła, oraz trzech „starych wyjadaczy”, toteż ze względu na różnicę w umiejętnościach, podzieliliśmy się na 2 grupy.

Pięciu kadetów przeszło przez szybkie, aczkolwiek intensywne szkolenie teoretyczne i praktyczne z podstaw budowy i działania mikrokontrolera, obwodów elektrycznych oraz programowania Arduino. Pod koniec zajęć udało im się zaprogramować migające diody, na pewno są dumni ze swojego projektu – i słusznie, każdy przecież od czegoś zaczynał!

Starsi wyjadacze natomiast, dostali zadanie zapoznania się ze specyfikacją tajemniczego silniczka i jego sterownikiem. Testowali jego działanie tak, aby w przyszłości stał się częścią robota którego będziemy konstruować. Przyznam szczerze, że po wakacyjnej przerwie, potrzebowaliśmy chwili obycia się ze sprzętem, za którym jednak bardzo się stęskniliśmy. Poza tym, weszliśmy trochę na wyższy level zabawy, ponieważ operowaliśmy na wielokrotnie droższych rzeczach od tych, z którymi mieliśmy styczność wcześniej – przy budowie naszego samochodzika. Toteż tym bardziej musieliśmy się bardziej skupić i dokładnie przemyśleć nasze działania. Finalnie udało się poznać i zrozumieć specyfikę i działanie zarówno silnika jak i jego kontrolera. Pojawił się jednak problem przy implementacji kodu sterującego do Arduino, gdyż z niewiadomych przyczyn nie chciał on działać tak jak należy. Jednak że zajęcia dobiegały już do końca, stwierdziliśmy że poświęcimy temu więcej czasu na następnym spotkaniu – kto wie, może za tydzień nieznana siła sprawi że wszystko będzie działać prawidłowo?

O tym przekonamy się na następnym spotkaniu!

Przemysław Baj (c)

Pierwsze zajęcia… falstart :(

Na spotkaniu organizacyjnym ustaliliśmy, że spotykamy się co tydzień w piątki o 15tej.

Dzisiejsze zajęcia jednak przepadły z powodu szkolenia „pierwszaków” w tym samym terminie. Cóż – bywa (ja się o tym szkoleniu dowiedziałem przed samymi zajęciami, więc za późno by oficjalnie odwołać zajęcia u mnie). Ale ale, co się odwlecze, to nie uciecze 😉 Zapraszam w kolejne piątki (szkoleń już nie będzie).

KG, 2018

Startujemy! piątek, 5-10-2018

STARTUJEMY!

piątek, 5-10-2018, godz. 15:00

(dla studentów Wydziału Fizyki)

Będziemy bawić się/oprogramowywać Arduino, RaspberryPi (no sam nie wiem) i wiele gadgetów elektronicznych (silniczki, czujki, itd.). Co z tego powstanie? Inteligenty dom, robot, nocnik? 😉 Trudno powiedzieć, ale na pewno dużo się nauczysz (programować + konstruować proste układy elektroniczne). Obawiasz się, że mało umiesz z powyższych rzeczy? Zapraszam także „nowicjuszy”!

Jeśli jesteś zainteresowany, zapraszam na spotkanie organizacyjne w dniu 5-10-2018 (piątek), godz. 15:00, sala 1064.

(c) K. Gawryluk 2018

p.s.

nie było łatwo z doborem terminu – chodzi o dostępność sal, oraz o nie kolidowanie z zajęciami dla większości studentów. Inna propozycja spotkań to wtorki, godz. 16:15 – przedyskutujmy to na spotkaniu organizacyjnym.

 

Sesja lato 2018 — przerwa w spotkaniach

Sesja – wiadomo, studenci zaczynają się (w końcu!) uczyć. Oficjalnie ogłaszam więc przerwę na nasze spotkania – niech priorytetem będzie zaliczenie zajęć/labek/egzaminów. Piszcie do mnie na priv jeśli będziecie chcieli się spotkać i popracować nad „maskotką”.

Powodzenia w sesji! Niech moc będzie z Wami 😀

(c) K. Garwyluk 2018

 

XVI Podlaski Festiwal Nauki i Sztuki

W dniu 6 czerwca w ramach imprez festiwalowych na Wydziale Fizyki UwB odbyły się „Pierwsze spotkania z robotyką – Arduino”. To impreza dla ciekawskich ludzi chcących zapoznać się z programowaniem elektroniki. Na tych krótkich zajęciach (~60min) mogliśmy samodzielnie zbudować układ elektroniczny z LED-em, także z przyciskiem a następnie… oddać sterowanie płytce Arduino UNO i kazać jej włączać i wyłączać LEDa! Niektórym udało się podłączyć kilka LED-ów i świecić nimi niezależnie – gratuluję!

Grupa 11:00 – uczniowie I i III klasy z technikum budowlanego.

Grupa 12:00 – Lokalny Klub Kodowania 60+ przy Gminnej Bibliotece Publicznej w Orli (plus ojciec z synem – gratuluję zaangażowania!).

Przypominam, że każdy z uczestników może pobawić się dalej w Arduino bez jego kupowania – wystarczy skorzystać z wirtualnego Arduino ze strony www.tinkercad.com a także mojego mini-opisu co i jak robić.

Chciałbym podziękować swoim asystentom z koła naukowego robotyków Fi-BOT za pomoc przy „obsłudze” odwiedzających nas gości – Wasza pomoc była mi naprawdę zbawienna! Wielkie Dzięki dla Pana Przemka, Szymona i Mateusza !!

(c) K. Garwyluk 2018