logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Rozpoznawanie kolorów - Bascom - Zamiana częstotliwości na kod html barwy

Pustack94 29 Lip 2015 10:34 1506 5
  • #1 14883544
    Pustack94
    Poziom 10  
    Dzień dobry,

    Od jakiegoś czasu przymierzam się do budowy urządzenia rozpoznającego barwy.
    Posiadam czujnik koloru TCS3200D z matrycą 8x8 fotodiod. Na każde 16 fotodiod przypada odpowiednio filtr koloru zielonego, niebieskiego, czerwonego oraz 16 fotodiod bez filtra. Na wyjściu modułu czujnika pojawia się sygnał o częstotliwości zależnej od intensywności oświetlenia badanego obiektu. Za pomocą 4 pinów konfiguracyjnych modułu, (poprzez podanie stanu wysokiego/niskiego) ustala się, której barwy częstotliwość chcemy mierzyć (filtr barwy zielonej, niebieskiej, czerwonej lub bez żadnego filtra).
    Udało mi się już napisać program w języku Bascom, który za pomocą TIMERA dokonuje pomiaru częstotliwości sygnału dla barwy R, G, B i prezentuje je na wyświetlaczu. Problem polega na tym, że na wyświetlaczu docelowo chcę mieć kod html barwy, która odpowiada wszystkim trzem wartościom mierzonej częstotliwości. Aktualnie mój wyświetlacz wygląda tak: R=12 B=7 G=10 C=15. Są to (o ile mój program działa poprawnie) wartości częstotliwości w kHz odpowiednio dla barw R,G i B. C oznacza częstotliwość dla konfiguracji pinów bez filtra.
    Nie wiem czy wystarczająco jasno przedstawiłem swój problem, więc jeszcze jeden przykład.
    Gdy zakryję całkowicie matrycę czujnika układ mierzy intensywność barwy czarnej (bo jest całkowicie ciemno). Na wyświetlaczu są wartości równe 0. Ja zamiast tych wartości potrzebuje napis : #000000, co odpowiada barwie czarnej w html.
    Czy da się programowo stworzyć tego typu konwerter dla większej ilości barw? Jeśli tak, to w jaki sposób?
  • Pomocny post
    #2 14883576
    Kużdo
    Poziom 20  
    Zapis koloru w postaci HEXa, to po prostu konwersja liczby z systemu dziesiętnego na szesnastkowy. Np. kolor jasny zielony: rgb(173,255,47) == #ADFF2F
  • #3 14883803
    Pustack94
    Poziom 10  
    Zgadza się, jednak to wystarczyłoby mi w przypadku gdyby moduł czujnika koloru dawał na wyjściu 8-bitową reprezentację natężania każdej barwy. Wtedy wystarczyłoby tylko zamienić tą wartość na postać HEX; tak jak napisałeś w przedstawionym przykładzie.
    Jednak mój czujnik na wyjściu ma częstotliwość fali, która wg dokumentacji zawiera się w granicach 10-600kHz. Więc w przypadku gdy mierzona barwa da wynik R=330 kHz, G=320kHz, B=420kHz zamiana tych wartości na HEX chyba nie przyniesie oczekiwanego rezultatu. Chyba, że czegoś nie rozumiem tutaj.
  • Pomocny post
    #4 14883829
    Kużdo
    Poziom 20  
    Tak, masz rację, moduł zwraca Ci dane w kHz, ja tylko napisałem odnośnie konwersji z wartości RGB na HEX.

    Moduł może Ci zwracać wartości 10-12kHz, 100-120kHz lub 500-600kHz, a który zakres będzie używał to zależy od ustawienia pinów S0 i S1. Na stronie 2 dokumentacji układu masz tabelkę, która pokazuje, który zakres będzie wybrany (2%, 20% lub 100%). Natomiast w tabelce na stronie 4 masz pokazane wartości jakie mogą przyjąć dane kolory. Wystarczy rzutować te wartości na zakres 0-255 i masz wartość RGB.

    Przeczytaj też to: http://www.stm32.eu/node/84
    Jest tam opisane wykorzystanie właśnie tego układu.
  • #5 14885105
    Pustack94
    Poziom 10  
    Swoją drogą nie widziałem, że kod barwy html to zapis HEX składowych RGB.
    Dziękuje za przytoczone informacje oraz link. Nieco mi się rozjaśniło. Między innymi do czego są piny S0 i S1. Mimo posiadanej dokumentacji nie wiedziałem co oznacza te 2%, 20% i 100%.
    Mam jednak problem ze zrozumieniem tej tabelki ze strony 4 dokumentacji. Rozumiem że interesuje mnie pierwszy wiersz fo - Output frequency (Note 9). Zgodnie z przypisem 9 podane wartości procentowe pokazują stosunek poszczególnych barw do wartości na fotodiodach bez filtra. Idąc tym tokiem myślenia, stosunek barwy niebieskiej do Clear channel wynosi (dla MIN) 61%. W efekcie dawało by to wartość częstotliwości dla barwy niebieskiej równą 7,62 kHz, co przy założonej konfiguracji pinów S0 i S1 ( S0=H, S1=H) nie może zaistnieć.
    Jak powinienem odczytać tą tabelę ?
  • #6 14886065
    Kużdo
    Poziom 20  
    Opcja Clear mierzy wszystkie kolory jednocześnie, więc pewnie oznacza to trochę coś innego. Niestety, nie używałem tego modułu nigdy, więc nie jestem w stanie dokładnie Ci odpowiedzieć jak zrozumieć tę tabelkę. Ja bym ją czytał na logikę, czyli 61% z wybranego zakresu (dla 100% to 61% z 500), ale nie mam zielonego pojęcia, czy jest to dobre podejście.

    Znalazłem za to kilka linków i wychodzi na to, że w większości układów po prostu opierają pomiar na Timerach.

    http://botland.com.pl/czujniki-swiatla-i-koloru/1477-modul-z-czujnikiem-koloru-tcs3200d.html (jest tam też przykład podłączenia do arduino wraz z kodem źródłowym)
    http://tecnomelque.blogspot.com.br/2012/12/arduino-tcs3200d-sensor-de-cor-rgb.html (podobny kod, zagraniczna strona)
    http://botland.com.pl/czujniki-swiatla-i-kolo...zetwornik-swiatlo-czestotliwosc-tcs3200d.html (polecam poczytać podlinkowany artykuł)
REKLAMA