Hrvatsko društvo za robotiku - Uvod u robotiku - vježbe

Boja

Cilj

Prepoznajmo boje.

Problemi

×
Robot može biti opremljen senzorima boje.

Radi se o 6-kanalnom senzoru, koji prepoznaje 6 boja: crvenu, plavu, žutu, zelenu, narančastu i ljubičastu. Točnije, daje intenzitet svake od ovih komponenata izmjerene boje.

Zvuči dobro, ali u praksi se javljaju problemi:
  • boja podloge (koju mjerimo) ne ovisi samo o podlozi, nego i o boji svjetla koje ju obasjava,
  • intenzitet pojedine komponente boje isto ne ovisi samo o tome koliko je podloga svijetla, nego i koliko je snažno svjetlo koje ju obasjava,
  • crna i bijela podloga mogu imati jednaku komponentu neke boje kao i ta sama boja.
Rezultat ovih problema je da je vrijednost zelene komponente zelene pozadine jednaka vrijednosti koju senzor daje na bijeloj ili crnoj podlozi. Znači, ne možemo porepoznavati zelenu boju samo temeljem vrijednosti koju senzor daje za zelenu boju.

Pa kako onda? Ako zelenu ne možemo prepoznati senzorom zelene, čemu uopće senzor?

Rješenje postoji. Ako zelena i bijela imaju istu komponentu zelene, sigurno postoje neke druge razlike: koliko je crvena komponenta, kolika je ukupna svjetlost koju senzor vraća, itd.

Ukratko, treba koristiti sve kanale, ne samo kanal koji je najbliži traženoj boji, u slučaju da se u mjerenjima može pojaviti bijelo ili crno.

Program

void RobotLine::loop() {
	if (setup())
		illumination(1, 0);
	print("%i\n\r", green(0));
}
Pogledajmo što radi ovaj program.

Kad se prvi put pokrene, izvrši se funkcija illumination(1, 0).

Ona kontrolira LED za osvjetljenje. Prvi argument je snaga osvjetljenja. "0" gasi LED. "1" će ga uključivati. Nemojte koristiti vrijednosti veće od 1, premda su moguće.

Drugi argument je redni broj senzora boje. "0" je prvi, "1" je drugi.

Osvjetljenje je potrebno kako bi se smanjili problemi s neujednačenom vanjskom rasvjetom.

green(0) vraća intenzitet zelene komponente mjerene površine. Parameter "0" znači da koristimo 1. senzor. Moguć je i "1", kad se dobiva vrijednost iz drugog senzora.

"green()" je jedna od funkcija koje vraćaju boje:
  • blue(),
  • green(),
  • orange(),
  • red(),
  • violet(), and
  • yellow().

Zadatak: 8x8 displej.

Upalite 8x8 displej u zelenoj boji, kad je podloga zelena. Ako nije, ugasite ga.

Primjedbe



Projekt "Uvod u robotiku" sufinanciran je iz Europskog socijalnog fonda, poziv "Jačanje kapaciteta organizacija civilnoga društva za popularizaciju STEM-a". Relevantne stranice: Sadržaj vježbe za virtualne radionice isključiva je odgovornost Hrvatskog društva za robotiku.