Spisu treści:

Rainbow Word Clock z pełnym efektem tęczy i nie tylko: 13 kroków (ze zdjęciami)
Rainbow Word Clock z pełnym efektem tęczy i nie tylko: 13 kroków (ze zdjęciami)

Wideo: Rainbow Word Clock z pełnym efektem tęczy i nie tylko: 13 kroków (ze zdjęciami)

Wideo: Rainbow Word Clock z pełnym efektem tęczy i nie tylko: 13 kroków (ze zdjęciami)
Wideo: Wersow vs me 🫣 2024, Lipiec
Anonim
Tęczowy zegar słowny z pełnym efektem tęczy i nie tylko
Tęczowy zegar słowny z pełnym efektem tęczy i nie tylko

Cele

1) Prosty

2) Nie drogie

3) Jak najbardziej energooszczędny

Rainbow Word Clock z pełnym efektem tęczy.

Buźka na Word Clock.

Prosty pilot na podczerwień

Aktualizacja 3 listopada-18 LDR dla kontroli jasności neopikseli

Aktualizacja 01.01.2019 Zmniejszenie zużycia energii WS2812B.

Aktualizacja 15.01.2019 Smiley.

Aktualizacja 23 stycznia-19 Kod 1.6

Zaktualizuj linki do bibliotek 10 marca-19

Aktualizacja 14 kwietnia 19 wersja 1.7 Wybór buźki on/off collor rainbow/fix enz.

Ostatnia aktualizacja 01 czerwca-19 wersja 2.0 Pilot na podczerwień i przeprojektowanie kodu

Krok 1: Sprawa na zegar

Etui na zegar
Etui na zegar
Etui na zegar
Etui na zegar
Etui na zegar
Etui na zegar

Przy kilku prostych narzędziach i odrobinie wprawy nie jest trudno zrobić zegar listowy. Wykorzystałem dostępne mi materiały.

Do sprawy użyłem szorstkiej listwy sosnowej, w której przepiłowałem kilka ramek. Tworzyły one cztery boki obudowy, które zostały sklejone i wzmocnione małym kawałkiem drewna w rogach. Następnie drewno wymaga szlifowania i malowania.

Litery są wycinane z folii przez drukarkę w lustrzanym odbiciu. Folia znajduje się z tyłu szklanej płyty i jest pokryta dwuwarstwowym papierem deseniowym dla lepszego rozsyłu światła. Szkło mocowane jest szczeliwem silikonowym.

Krok 2: Neopiksele

Neopiksele
Neopiksele
Neopiksele
Neopiksele
Neopiksele
Neopiksele
Neopiksele
Neopiksele

Diody LED Neopixels są umieszczone na drewnianej płytce. W niej najpierw wywierca się 3 mm otwory. Z przodu powiększone do rozmiaru litery do 3/4 głębokości. Następnie 3 mm z tyłu zwiększa się do 10 mm, to jest rozmiar Neopiksela. W przypadku niektórych postaci, m.in. W, otwór należy lekko wyregulować.

Użyłem sklejki, która szybko się kruszyła, może lepiej MDF.

W przypadku pojedynczych diod LED nie jesteś związany stałą odległością, jak ma to miejsce w przypadku taśm LED. Diody LED muszą być ze sobą połączone. Możesz to zrobić ze wszystkimi krótkimi kawałkami drutu. Ale dwa połączenia min (-) są tak samo jak dwa połączenia plus (+) połączone wewnętrznie, a więc to samo połączenie.

Możesz zaoszczędzić sobie wiele pracy lutując kawałek drutu do lewej diody, a następnie do prawej diody. Następnie przylutuj te pośrednie.

Połączenie danych musi oczywiście składać się z krótkich kawałków, ponieważ dane wychodzące trafiają do danych wejściowych.

Krok 3: Dostosowywanie tekstu przedniego

Dostosowywanie tekstu przedniego
Dostosowywanie tekstu przedniego
Dostosowywanie tekstu przedniego
Dostosowywanie tekstu przedniego
Dostosowywanie tekstu przedniego
Dostosowywanie tekstu przedniego

Przednia płyta jest teraz w języku niderlandzkim, ale po prostu do konwersji na dowolny język.

Diody NeoPixels przełączają się tutaj kolejno od 0-167. Numeracja biegnie od pierwszego rzędu od góry po lewej do prawej, a następnie do drugiego rzędu od prawej do lewej itd. Dopasowanie można wykonać według własnych potrzeb. Liczba NeoPixels zależy od liczby znaków. Mniej lub więcej Neopikseli można dostosować w następującym wierszu

#define NUMPIXELS 168 // Ile NeoPixels jest podłączonych do Arduino?

168 to niż inna liczba. Numeracja zaczyna się od 0. Możesz zrobić dowolny tekst. Jeśli zmienisz tekst, będziesz musiał również dostosować odpowiednie słowa. Numeracja pozostaje taka sama.

Na przykład DRIE minut jest określony w kodzie

nieważne zetmDrie () {

Led_Aan[56]=1, Led_Aan[57]=1, Led_Aan[58]=1, Led_Aan[59]=1; // min-suszenie

}

Jeśli chcesz stworzyć słowo Arduino, to wygląda to tak:

nieważne zetArduino () {

Led_Aan [38] = 1, Led_Aan [50] = 1, Led_Aan [56] = 1, Led_Aan [93] = 1;

Led_Aan [120] = 1, Led_Aan [135] = 1, Led_Aan [147] = 1; //Słowo-arduino

}

Więc możesz tworzyć słowa pomiędzy.

W przypadku słów zegarowych przydatne jest, jeśli tworzą one ciągłe słowo, ale nie jest to absolutnie konieczne. Niewykorzystane litery nie potrzebują Neonpixels. Mam je wszystkie wypełnione dla wykorzystania przyszłych możliwości innych niż wyświetlanie czasu.

Jeśli zmienisz punkt początkowy lub zmienisz kolejność następstwa, numeracja powinna się odpowiednio zmienić.

Krok 4: Pełny efekt tęczy

Pełny efekt tęczy
Pełny efekt tęczy

Zegar jest teraz tak zaprogramowany, że ile razy na sekundę liczona jest liczba włączonych neopikseli.

Całkowite widmo to liczba podzielonych, a następnie nieco przesuniętych. W rezultacie każdy Neopiksel ma inny kolor, który stale się zmienia. Neopixel nr 1 i nr 167 następują po sobie w pewnym kolorze.

Jeśli wolisz mniej różnych kolorów w tym samym czasie, jest to łatwe do dostosowania. Kolor przesuwa się nadal w całym spektrum, ale w jego mniejszej części. Neopiksele nr 1 i nr 167 nie następują już po sobie, jaki wiąże się z niektórymi kolorami.

Jasność można ustawić w następującej linii, piksele.setJasność(150);

Mniejsza liczba oznacza mniejszą, a większą większą jasność.

Krok 5: Różne komponenty

Różne komponenty
Różne komponenty
Różne komponenty
Różne komponenty
Różne komponenty
Różne komponenty

Następujące komponenty, których użyłem

Arduino Pro Mini ATMEGA328 5V/16MHz

Moduł zegara DS3231

168 sztuk Neopixels led WS2812 LED Chip i radiator 5V 5050 RGB WS2811 IC Wbudowany

Szablon listu foliowego

Odbiornik DCF77

Krok 6: Kod zegara

Oto kod. Dodano kontrolę jasności i wyłączanie, gdy nikogo nie ma i w nocy.

Dodano radarowy czujnik ruchu mikrofalowego RCWL-0516 (wyszukaj RADAR)

Po 10 minutach bezruchu NeoPixels gasną.

O wersji 2.0

Użycie pamięci było zbyt duże, z ostrzeżeniami o braku pamięci w kompilatorze. Dlatego całkowicie zmieniłem kod, ale działanie pozostało bez zmian i dodano odbiornik IR.

Istnieje fragment kodu, który dostarcza dane do pamięci EEPROM. Uruchom to raz, tymczasowo usuwając / * i * /. Wyszukaj => uruchom to raz, aby dostarczyć dane do pamięci EEPROM

Na początku pętli void znajduje się kod do odczytania kodu z własnego pilota. Możesz to uruchomić, tymczasowo usuwając / * i * /, nie zapomnij włożyć ich później. Możesz także zdefiniować własne przyciski. Odczytany kod należy wprowadzić w => Zdefiniuj tutaj własne przyciski

Pilot Samsunga działa lepiej niż (bardzo tani) prosty.

Krok 7: Opis sprzętu

Opis sprzętu
Opis sprzętu
Opis sprzętu
Opis sprzętu
Opis sprzętu
Opis sprzętu

Istnieją różne wersje Arduino Pro Mini. Należy pamiętać, że połączenia mogą się różnić.

Dodano czujnik ruchu mikrofalowego RCWL-0516.

Dopóki w pobliżu zegara występuje ruch, NeoPixel pozostaje włączony

a jak tylko przestanie się poruszać, NeoPixel wyłączy się po kilku minutach.

W wersji 2.0 odbiornik DCF77 jest zasilany przez pin 13. Ten pin jest zdefiniowany jako wyjście i ustawiany w stan wysoki, gdy adresowana jest procedura DCF77. Odbiornik DCF77 pobiera 0,28 mA i jest potrzebny tylko przez kilka minut dziennie.

Wyłączanie zapisów

5 V * 0,28 mA / 1000 * 24 godziny * 365 dni * 1 / 0,85 sprawność zasilacza = 14,4 wata rocznie.

To nie wydaje się dużo, ale wszystko pomaga.

Krok 8: LDR do kontroli jasności neopikseli

LDR do kontroli jasności neopikseli
LDR do kontroli jasności neopikseli
LDR do kontroli jasności neopikseli
LDR do kontroli jasności neopikseli

Dodano LDR do kontroli jasności neopikseli.

LDR wkleiłem w przestrzeń neopixela 103. Ten nie jest używany w wyświetlaniu czasu i dlatego nie wpływa na regulację. Papier tłumi padające światło, ale to żaden problem.

Dzielnik napięcia LDR i rezystor 20 kΩ trafia do A0 Arduino Pro Mini. Napięcie jest wskaźnikiem natężenia światła, a zatem również wskaźnikiem ilości światła, jaką muszą dawać neopiksele.

Formuła, którą stosuję daje mi dobrą kontrolę światła, można je regulować w zależności od okoliczności. W zależności od ilości światła, napięcie może wahać się od 0 do 5 woltów, które jest konwertowane na 0 do 1024 zliczeń, które są w "LDRValue".

Jeżeli nowa zmierzona wartość jest większa niż ostatnia obliczona wartość, intensywność zwiększa się o 1, jeśli jest mniejsza niż zmniejszona o 1 i jeśli jest równa, nic się nie dzieje. Aby wartość przebiegała powoli, tak aby nie było efektu mrugania, zwiększa się lub zmniejsza tylko 1, a ponieważ obliczenie jest w pętli, jest ponownie obliczane dopiero po przejściu pętli 25 razy.

Intensywność wynosi teoretycznie minimum 20 i maksimum 1024/7 + 45 = 191. Maksymalna wartość, którą zmierzyłem, to 902, co daje intensywność 173. To dobrze pasuje do 150, które ustawiłem jako wartość domyślną. (zobacz piksele.setBrightness(150))

W wersji 2.0 można ustawić sterowanie za pomocą pilota. Dodano następujące parametry: Jasność_min jako minimum i Jasność_maks jako ustawienie maksymalne i Przesunięcie jasności jako parametr ustawienia. Brightness_min i _max to wartości, które mogą zależeć od Twojej sytuacji. Brightness_Offset to wartość, którą można ustawić za pomocą pilota i za pomocą której można ustawić większą lub mniejszą jasność.

Pomiędzy zmierzonymi wartościami LDRValue i obliczonymi wartościami BerLDRValue istnieje również strefa martwa wynosząca 3.

Użyj instrukcji drukowania w void BrightnessControl, aby sprawdzić ustawienie jasności.

Krok 9: Zmniejszenie zużycia energii WS2812B

Zmniejszenie zużycia energii WS2812B
Zmniejszenie zużycia energii WS2812B

Sterowniki adresowalnych neopikseli WS2812B pobierają prąd nawet wtedy, gdy neopiksele są wyłączone i ustawione na kolor 0 (brak świecących elementów neopikseli).

Kiedy wszystkie 169 neopikseli są wyłączone, mierzę 69 mA do neopikseli. Zakładając, że zegar jest wyłączony 12 godzin dziennie, całkowite wyłączenie pozwala zaoszczędzić: 5 (zasilanie woltowe) * 69/1000 (miliampery / 1000 = ampery) * 12 (liczba godzin dziennie) * 365 (liczba dni w rok) = 1511 watogodzin. Czyli rocznie 1,5 Kwh. Zgadzam się, to niewiele samo w sobie, ale wiele małych tworzy duże.

Obwód jest prosty. Plus zasilacza jest przełączany przez P-kanałowy MosFet. Czujnik radarowy określa, czy neopiksele są włączone, czy wyłączone. Umieściłem dwa równoległe MosFet, aby utrzymać opór ON na jak najniższym poziomie z powodu utraty MosFetów. W normalnym użytkowaniu mierzę 4, 5 miliwoltów przez MosFety. Bramką steruje wyjście 4 z Arduino za pośrednictwem rezystora 470 Kohm. Jeśli wyjście cyfrowo spadnie do niskiego (0), neopiksele są włączone, a na wysokim (1) są wyłączone.

Krok 10: Buźka na Word Clock

Buźka na Zegarze Światowym
Buźka na Zegarze Światowym
Buźka na Zegarze Światowym
Buźka na Zegarze Światowym

Buźka na Word Clock.

Od czasu do czasu na zegarze pojawia się buźka. To jednak sprawia, że jesteś szczęśliwy.

Buźka jest wyzwalana przez czujnik radarowy. Liczba ruchów (regulowana) jest miarą wyglądu Buźki. Znaki % wskazują, że wykryto ruch. Przy co dziesiątym (regulowanym) ruchu, Smiley pojawia się z Mrugającą Twarzą, a po trzykrotnym pojawieniu się Mrugającej Twarzy, po raz czwartym, gdy Smiley Face wystaje język.

Smiley to mała zmiana w kodzie.

Krok 11: Jakie biblioteki są używane

Jakie biblioteki są używane.

Używam ich w Windows 7 z Arduino IDE 1.6 i zostały przetestowane również w Windows 10 z Adruino IDE 1.8.8

RTClib-master

Arduino-DS3231-master

Adafruit_NeoPixel-master

Arduino-DCF77-master

Biblioteka IRremote Kena Shirriffa

Ponieważ zawsze jest zamieszanie co do używanej biblioteki, dodaję tę, której używam.

Biblioteka IRremote zużywa dużo pamięci. W IRremote.h jest wskazane, że możesz wyłączyć dowolny nieużywany protokół

// Każdy protokół, który zawierasz, kosztuje pamięć, a podczas dekodowania kosztuje czas// Wyłącz (ustaw na 0) wszystkie protokoły, których nie potrzebujesz/nie chcesz!

Mam wyłączone wszystko poza protokołem NEC i Samsung. Daje to oszczędność pamięci o 10%. W tej chwili nie ma już problemu z ilością pamięci, więc na razie wyłączanie nie jest konieczne.

Krok 12: Prosty pilot na podczerwień

Prosty pilot na podczerwień
Prosty pilot na podczerwień
Prosty pilot na podczerwień
Prosty pilot na podczerwień
Prosty pilot na podczerwień
Prosty pilot na podczerwień

Zgromadzenie

Jak widać na zdjęciach otwór na diodę LED 132 okazał się trochę za duży. Dobrze to wykorzystałem i dodałem do niego odbiornik podczerwieni. Podłącz pin danych odbiornika podczerwieni VS1838 do pinu 7 Arduino. Ponadto podłącz zasilanie plus i minus. Odbiornik IR wykorzystuje 0,21 mA i może być również podłączony do zasilania dodatniego za przełącznikiem FET. Daje to oszczędność, jeśli zegar jest na 50% czasu, 5 V * 0,21 mA / 1000 * 12 godzin * 365 dni * 1 / 0,85 sprawność zasilacza = 5,4 wata rocznie. To nie wydaje się dużo, ale wszystko pomaga.

Operacja jest następująca

Naciśnij dowolny klawisz na pilocie na podczerwień, a następnie klawisz OK. Za pierwszym razem, gdy naciśniesz, przejdziesz do przetwarzania IR, a za drugim razem wykryjesz, czy było to uzasadnione żądanie. Za drugim razem OK musi nastąpić szybko po pierwszym naciśnięciu klawisza, ponieważ w przeciwnym razie nastąpi powrót. Zrobiłem tę konstrukcję tak, że prawie nie udało mi się poprawnie zdekodować pierwszego kodu i dlatego nie skończyłem w obsłudze IR.

Po przejściu do obsługi podczerwieni, wiele diod LED zapala się w celu uzyskania informacji, aby uzyskać wyjaśnienie, przeczytaj dalej i obejrzyj pierwszy obraz.

Opis dotyczy prostego pilota, ale możesz użyć dowolnego pilota i zdefiniować własne klawisze. Skorzystałem też z pilota Samsunga.

Pierwsze cztery klawisze odpowiadają czterem górnym rzędom diod LED. Cztery diody LED obracają się w lewo lub w prawo w zależności od ustawienia. Po naciśnięciu klawiszy od 1 do 4 stan jest odwracany i zapisywany w pamięci.

1 stały kolor lub efekt tęczy

2 sekundy wyłączone lub drugie włączone

3 buźka wyłączona buźka włączona

4 DCF77 wyłączony lub DCF77 włączony

Numer klucza jest wyświetlany na następujących klawiszach

5 liczników emotikonów

6 tęczowa szerokość widma

7 napraw czerwone ustawienie;

8 napraw zielone ustawienie

9 napraw niebieskie ustawienie

Wiersz 6, 7 i 8 diod LED odpowiadają teraz ustawionej wartości, wiersz 6 wskazuje jednostki, wiersz 7 dziesiątki, a wiersz 8 setki. Każdy wiersz zaczyna się od wartości zero. Czyli pierwsza dioda w rzędzie to 0, druga to 1 itd.

0 ustawienie czasu

/\ ustawienie jasności

Po naciśnięciu przycisku 0 zapalą się diody „dziesięć” sygnalizujące, że chcesz ustawić czas, a po ponownym naciśnięciu 0 na wyświetlaczu pojawi się ustawiony czas.

Czas można teraz ustawić i jest on pokazywany na wyświetlaczu.

Ustaw prawidłowy czas, a następnie, jeśli minuta jest taka sama na zegarze wzorcowym, naciśnij przycisk OK.

Czas jest dostosowany.

Jeśli nie naciśniesz przycisku minut lub godzin, nie nastąpi zmiana czasu. Jeśli je naciśniesz, czas zostanie ustawiony natychmiast.

Wartość klawiszy od 5 do 9 można zmienić za pomocą klawiszy

racja to plus 1

pozostało minus 1

naprzód to plus 10

rewers to minus 10.

i do ustawienia czasu

dobrze to plus 1 minuta

pozostało minus 1 minuta

do przodu jest plus 1 godzina

rewers to minus 1 godzina

Zdarza się, że naciśnięcie klawisza nie jest rozpoznawane lub jest wykonywane dwukrotnie. Zwróć więc uwagę, czy ustawienie pójdzie dobrze, w przeciwnym razie spróbuj lub popraw ponownie. Pilot Samsung, który również testowałem, działał wielokrotnie lepiej niż (bardzo tani) prosty pilot.

Podczas ustawiania koloru widać zmianę bezpośrednio na całym wyświetlaczu. Strona z przeglądem kolorów znajduje się na stronie https://www.helderester.nl/kleurentabel.html. Możesz oczywiście ustawić dowolną wartość.

Jeśli szerokość widma tęczy ma wartość 0, widmo jest bardzo wąskie, a wyświetlacz ma jeden kolor, który stale się zmienia.

Wadą takiego ustawienia czasu jest to, że nie można obliczyć przejścia lato/zima, ponieważ mamy nieprawidłową datę. Nie ma to znaczenia dla samego zegara, ponieważ nie używamy go teraz.

Krok 13: Co dalej?

Co dalej?
Co dalej?

Co dalej, dźwięk, jeśli wolna pamięć jest nadal wystarczająca.

Mam już skrzynki głośnikowe. Pochodzą ze starego laptopa.

Zalecana: