Spisu treści:

Odkrywanie przestrzeni kolorów: 6 kroków
Odkrywanie przestrzeni kolorów: 6 kroków

Wideo: Odkrywanie przestrzeni kolorów: 6 kroków

Wideo: Odkrywanie przestrzeni kolorów: 6 kroków
Wideo: 6 kroków do popularnego kontentu 2024, Lipiec
Anonim
Odkrywanie przestrzeni kolorów
Odkrywanie przestrzeni kolorów

Nasze oczy odbierają światło przez receptory wrażliwe na kolory czerwony, zielony i niebieski w spektrum widzenia. Przez ostatnie sto lat ludzie wykorzystywali ten fakt do dostarczania kolorowych obrazów za pośrednictwem filmu, telewizji, komputerów i innych urządzeń.

Na ekranie komputera lub telefonu obrazy są wyświetlane w wielu kolorach, zmieniając intensywność maleńkich czerwonych, zielonych i niebieskich diod LED, które znajdują się obok siebie na ekranie. Zmieniając intensywność światła z czerwonej, zielonej lub niebieskiej diody LED, można pokazać miliony różnych kolorów.

Ten projekt pomoże Ci zbadać przestrzeń kolorów czerwonego, zielonego i niebieskiego (RGB) za pomocą Arduino, diody LED RGB i trochę matematyki.

Możesz myśleć o intensywności trzech kolorów, czerwonego, zielonego i niebieskiego, jako o współrzędnych w sześcianie, gdzie każdy kolor jest wzdłuż jednej osi, a wszystkie trzy osie są do siebie prostopadłe. Im bliżej jesteś punktu zerowego lub początku osi, tym mniej tego koloru jest wyświetlane. Gdy wartości wszystkich trzech kolorów są w punkcie zerowym, czyli początku, wtedy kolor jest czarny, a dioda LED RGB jest całkowicie wyłączona. Gdy wartości dla wszystkich trzech kolorów są tak wysokie, jak to możliwe (w naszym przypadku 255 dla każdego z trzech kolorów), dioda LED RGB jest całkowicie włączona, a oko postrzega tę kombinację kolorów jako białą.

Krok 1: Przestrzeń kolorów RGB

Przestrzeń kolorów RGB
Przestrzeń kolorów RGB

Dziękuję Kennethowi Morelandowi za zgodę na wykorzystanie jego ładnego wizerunku.

Chcielibyśmy zbadać zakamarki przestrzeni kolorów 3D za pomocą diody LED RGB podłączonej do Arduino, ale też chcemy to zrobić w ciekawy sposób. Moglibyśmy to zrobić, zagnieżdżając trzy pętle (po jednej dla czerwonego, zielonego i niebieskiego) i przechodząc przez każdą możliwą kombinację kolorów, ale to byłoby naprawdę nudne. Czy widzieliście kiedyś dwuwymiarowy wzór Lissajous na oscyloskopie lub pokaz świateł laserowych? W zależności od ustawień wzór Lissajous może wyglądać jak ukośna linia, koło, ósemka lub powoli obracający się, spiczasty wzór przypominający motyla. Wzory Lissajous są tworzone przez śledzenie sygnałów sinusoidalnych dwóch (lub więcej) oscylatorów wykreślonych na osiach x-y (lub, w naszym przypadku, x-y-z lub R-G-B).

Krok 2: Dobry statek Lissajous

Dobry statek Lissajous
Dobry statek Lissajous

Najciekawsze wzory Lissajous pojawiają się, gdy częstotliwości sygnałów sinusoidalnych różnią się nieznacznie. Na zdjęciu z oscyloskopu częstotliwości różnią się o stosunek 5 do 2 (obie liczby są liczbami pierwszymi). Ten wzór dość dobrze pokrywa swój kwadrat i ładnie wchodzi w rogi. Wyższe liczby pierwsze zrobiłyby jeszcze lepszą robotę, pokrywając kwadrat i wbijając się jeszcze głębiej w rogi.

Krok 3: Poczekaj - jak możemy napędzać diodę LED falą sinusoidalną?

Masz mnie! Chcemy zbadać przestrzeń kolorów 3D, która waha się od wyłączenia (0) do pełnego włączenia (255) dla każdego z trzech kolorów, ale fale sinusoidalne wahają się od -1 do +1. Zrobimy trochę matematyki i programowania, aby uzyskać to, czego chcemy.

  • Pomnóż każdą wartość przez 127, aby uzyskać wartości z zakresu od -127 do +127
  • Dodaj 127 i zaokrąglij każdą wartość, aby uzyskać wartości z zakresu od 0 do 255 (wystarczająco blisko 255 dla nas)

Wartości z zakresu od 0 do 255 mogą być reprezentowane przez liczby jednobajtowe (typ danych „char” w języku programowania Arduino podobnym do C), więc zaoszczędzimy pamięć, korzystając z reprezentacji jednobajtowej.

Ale co z kątami? Jeśli używasz stopni, kąty mieszczą się w zakresie sinusoidy od 0 do 360. Jeśli używasz radianów, kąty wahają się od 0 do 2 razy π ("pi"). Zamierzamy zrobić coś, co ponownie zaoszczędzi pamięć w naszym Arduino i pomyślimy o kole podzielonym na 256 części i mającym „kąty binarne” w zakresie od 0 do 255, więc „kąty” dla każdego z kolorów mogą być tutaj również reprezentowane są przez liczby jednobajtowe lub znaki.

Arduino jest całkiem niesamowite takim, jakim jest i chociaż potrafi obliczać wartości sinusoidalne, potrzebujemy czegoś szybszego. Wstępnie obliczymy wartości i umieścimy je w 256-wejściowej tablicy wartości jednobajtowych lub wartości char w naszym programie (patrz deklaracja SineTable[…] w programie Arduino).

Krok 4: Zbudujmy wzór 3D Lissajous

Zbudujmy wzór 3D Lissajous
Zbudujmy wzór 3D Lissajous

Aby przechodzić przez tabelę z inną częstotliwością dla każdego z trzech kolorów, zachowamy jeden indeks na kolor i dodamy względnie pierwsze przesunięcia do każdego indeksu podczas przechodzenia przez kolory. Wybierzemy 2, 5 i 11 jako względnie pierwsze przesunięcia dla wartości indeksu czerwonego, zielonego i niebieskiego. Własne wewnętrzne możliwości matematyczne Arduino pomogą nam automatycznie zawijać się, gdy dodajemy wartość przesunięcia do każdego indeksu.

Krok 5: Łączenie tego wszystkiego w Arduino

Łączenie tego wszystkiego w całość na Arduino
Łączenie tego wszystkiego w całość na Arduino

Większość Arduino ma kilka kanałów PWM (lub modulacji szerokości impulsu). Potrzebujemy tu trzech. Arduino UNO świetnie się do tego nadaje. Nawet mały 8-bitowy mikrokontroler Atmel (ATTiny85) działa bajecznie.

Każdy z kanałów PWM będzie sterował jednym kolorem diody LED RGB za pomocą funkcji Arduino „AnalogWrite”, w której intensywność koloru w każdym punkcie wokół cyklu sinusoidalnego jest reprezentowana przez szerokość impulsu lub cykl pracy, od 0 (wszystkie wyłączone) do 255 (wszystkie włączone). Nasze oczy postrzegają te zmieniające się szerokości impulsów, powtarzane wystarczająco szybko, jako różne natężenia lub jasności diody LED. Łącząc wszystkie trzy kanały PWM sterujące każdym z trzech kolorów w LED RGB, otrzymujemy możliwość wyświetlania 256*256*256, czyli ponad szesnastu milionów kolorów!

Musisz skonfigurować Arduino IDE (interaktywne środowisko programistyczne) i podłączyć je do płyty Arduino za pomocą kabla USB. Uruchom zworki z wyjść PWM 3, 5 i 6 (styki 5, 11 i 12 procesora) do trzech rezystorów 1 KΩ (tysiąc omów) na twojej płycie lub osłonie proto, a także z rezystorów do diody LED R, G i kołki B.

  • Jeśli dioda LED RGB jest wspólną katodą (zacisk ujemny), poprowadź przewód z katody z powrotem do styku GND w Arduino.
  • Jeśli dioda LED RGB jest wspólną anodą (zacisk dodatni), poprowadź przewód z anody z powrotem do pinu +5V w Arduino.

Szkic Arduino zadziała w obie strony. Zdarzyło mi się użyć diody LED wspólnej katody SparkFun Electronics / COM-11120 RGB (na zdjęciu powyżej, ze strony internetowej SparkFun). Najdłuższy pin to wspólna katoda.

Pobierz szkic RGB-Instructable.ino, otwórz go za pomocą Arduino IDE i przetestuj kompilację. Pamiętaj, aby określić poprawną docelową płytę lub układ Arduino, a następnie załaduj program do Arduino. Powinien uruchomić się natychmiast.

Zobaczysz, jak dioda LED RGB przechodzi przez tyle kolorów, ile możesz nazwać, a miliony nie możesz!

Krok 6: Co dalej?

Właśnie rozpoczęliśmy odkrywanie przestrzeni kolorów RGB z naszym Arduino. Kilka innych rzeczy, które zrobiłem z tą koncepcją, to:

Bezpośrednie zapisywanie do rejestrów na chipie, zamiast używania AnalogWrite, aby naprawdę przyspieszyć

  • Modyfikowanie obwodu tak, aby czujnik zbliżeniowy IR przyspieszał lub spowalniał cykl w zależności od tego, jak blisko się znajdujesz
  • Programowanie 8-pinowego mikrokontrolera Atmel ATTiny85 za pomocą bootloadera Arduino i tego szkicu

Zalecana: