Pokazywanie postów oznaczonych etykietą nxc. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą nxc. Pokaż wszystkie posty

9. Czujnik koloru ( Color sensor)

Czujnik koloru

Czujnik składa się z dwóch podstawowych elementów - lampki LED oraz fotodetektora. Dioda jest w stanie emitować światło w jednym z trzech kolorów podstawowych: czerwonym, zielonym i niebieskim. Podczas pomiaru oświetla ona badany obiekt, a detektor wykrywa natężenie odbitego od niego światła.

Właściwie czujnik koloru łączy w sobie trzy różne funkcje. Pozwala robotowi rozróżniać kolory oraz światło od ciemności. Potrafi wykryć 6 różnych kolorów, odczytać natężenie światła w pokoju oraz zmierzyć intensywność oświetlenia kolorowych powierzchni. Czujnik koloru może być także wykorzystany jako wielobarwne źródło światła.





W zależności od tego, co ma robić należy sensor go odpowiednio zadeklarować.

SetSensorColorFull ("port"); SetSensorType ("port", SENSOR_TYPE_COLORFULL);- świecą wszystkie 3 diody.
SetSensorColorRed ("port"); SetSensorType ("port", SENSOR_TYPE_COLORRED);- czerwonym
SetSensorColorGreen ("port");SetSensorType ("port", SENSOR_TYPE_COLORGREEN); - zielonym
SetSensorColorBlue ("port"); SetSensorType ("port", SENSOR_TYPE_COLORBLUE);- niebieskim
SetSensorColorNone ("port"); SetSensorType ("port", SENSOR_TYPE_COLORNONE); - będzie mierzył natężenie światła zewnętrznego.

Numery kolorów
czarny - 1
niebieski - 2
zielony - 3
żółty - 4
czerwony - 5
biały - 6

Nasz robot ma czytać kolory po angielsku (pliki .rso muszą być przesłane do NXT). Podłącz do portu czujnik koloru. Aby rozpoznawanie kolorów przebiegało optymalnie, czujnik powinien być umieszczony pod lekkim kątem w odległości około 1 cm do powierzchni. Niewłaściwe odczyty koloru mogą wystąpić, jeżeli
czujnik ustawiony jest pod niewłaściwym kątem lub pracuje przy jasnym oświetleniu.




















Zbuduj dowolnego robota jeżdżącego i podłącz sensor koloru (w tym programie port_3). Nasz robot będzie jechał, a gdy napotka białą linę cofnie się i obróci. Program napiszemy z wykorzystaniem subroutines (sub).

 /*robot nie przekracza białej linii cofa się i losowo obraca */

 #define granica 2   //kolor biały ma numer 2
 #define v 75        //prędkość obrotu
 #define w 65        //prędkość robota
 int los;

sub turn_l()       //obrót w lewo
 {
  OnRev( OUT_BC,w);Wait(Random(2000));     //Random (20000)- losuje liczbę od 0 do 2000
  OnFwd(OUT_B,v);OnRev(OUT_C,v);Wait(2000);  
 }

sub turn_r()    //obrót w prawo
 {
  OnRev( OUT_BC,w);Wait(Random(2000));
  OnFwd(OUT_C,v);OnRev(OUT_B,v);Wait(Random(2000));
 }

 task main()
{
   SetSensorColorFull(IN_3) ;
   OnFwd(OUT_BC,v);
   while (true)
   {
     if(Sensor(IN_3)< granica)
     {
         los=Random(100);  // tutaj losuje liczbę  i od niej uzależnione jest w którą stronę robot się obróci

         if (los>50)        
         { turn_l();        
          OnFwd(OUT_BC,v);
          }

          else
         { turn_r();
          OnFwd(OUT_BC,v);
          }
     }
   }
}


Niech robot jedzie i zlicza czarne linie, gra dźwięk gdy ja napotka. Liczba linii będzie wyświetlana na wyświetlaczu NXT.
Do wyświetlania na wyświetlaczu służy instrukcja NumOut("x", "y", "value", "options");
x , y - współrzędne wyświetlania pierwszego znaku (0, 0 - lewy dolny róg).
value -   wyświetlana wartość

options - opcjonalnie - opcje wyświetlania (można pominąć)
instrukcja ClearScreen() czyści wyświetlacz 

 // robot zlicza czarne (kol) linie
  //wyświetla na wyświetlaczu

 #define kol 1
  int n;     //zmienna do zliczania

 task main()
{
   n=0;
   ClearScreen();   //czyści ekran
   NumOut(0,0,n);  //wyświetla w punkcie wyświetlacza o współrzędnych 00 - lewy dolny róg liczbę n
   SetSensorColorFull(IN_3) ;
   OnFwd(OUT_BC,45);
   while (true)
   {
     if (Sensor(IN_3)== kol)
     {
         PlaySound(0);
         n=n+1  ;     Wait(1000);
         ClearScreen();
         NumOut(0,0,n);

        }
   }
}



Zadania.

1.Napisz program, w którym robot będzie jechał przez jakiś czas np. 10 sekund i zliczał linie koloru np. czarnego. Liczba zliczonych linii ma być wyświetlana na wyświetlaczu LCD NXT. Gdy robot zatrzyma się ma tyle razy „zapipczeć”, ile linii naliczył.





1. Twój pierwszy program

Programowanie robota Lego Mindstorms w NXC

Zaprogramujesz robota tak, aby poruszał się naprzód przez 4 sekundy, a później do tyłu przez 4 sekundy.
Five Minute Bot

Zbuduj robota-samochód (np. Five Minute Bot instrukcja lub inny), sprawdź do jakich portów podłączone są silniki (w naszym programie do portów A i C).






Bricx Command Center

Uruchom program Bricx Command Center. Program (do ściągnięcia na stronie http://bricxcc.sourceforge.net/) trzeba zainstalować go w dowolnym miejscu na dysku Twojego komputera. 
Po uruchomieniu, program zapyta Cię o rodzaj dołączonego robota i sposób komunikacji z robotem – wybierz odpowiednie opcje. Jeśli robot jest włączony program powinien automatycznie wykryć go (komputer łączy się z NXT za pomocą USB lub Bluetooth). 


Interfejs programu wygląda jak standardowy edytor tekstu, z menu, przyciskami i itd., które znasz z innych programów, ale również nowe specjalne menu do kompilowania i przesyłania programów do robota i pobierania informacji z robota.


Pisanie programu


Napisz następujący program:
Program w NXC składa się z funkcji (task). Każdy program musi mieć funkcję główną nazwaną main, od wykonania której zaczyna się działanie programu.
Funkcje składają się z pewnej liczby instrukcji, które umieszczone są w nawiasach klamerkowych. Każda instrukcja kończy się średnikiem.
Kolory w edytorze programu pojawiają się automatycznie.

Co oznaczają poszczególne instrukcje:

OnFwd (OUT_A, 75);- uruchamia silnik A (do przodu) z prędkością równą 75% pełnej mocy silnika
Wait (4000);- czekaj 4 sekundy 
OnRev (OUT_AC, 75);- zmiana kierunku, silniki A i C jadą do tyłu  
Off (OUT_AC);- wyłączenie silników

W wyniku działania programu robot jedzie do przodu przez 4 sekundy i 4 sekundy do tyłu.