Spisu treści:
- Krok 1: Zbieranie materiałów i narzędzi
- Krok 2: Znakowanie, wiercenie i frezowanie
- Krok 3: Tyle żołnierstwa, cięcia i rozbiórki
- Krok 4: Instalacja
- Krok 5: Ostatnie poprawki
Wideo: 132 Pixel Clock: 5 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Odkąd pamiętam, miałem obsesję na punkcie diod LED i czasu. W tym projekcie stworzyłem duży zegar ścienny, który wyświetla aktualny czas za pomocą 132 neopikselowych diod LED zamontowanych i świecących przez świerkową płytę. Jest to hybrydowy analogowy cyfrowy z indywidualnym pikselem na każdą godzinę, minutę i sekundę.
To był największy projekt, jaki do tej pory podjąłem, zacząłem o nim myśleć 6 miesięcy temu i pomysł powoli się ułożył. Jestem naprawdę zadowolona z wyniku i nie mogę się doczekać, kiedy się z wami podzielę.
Krok 1: Zbieranie materiałów i narzędzi
Składniki
Ten projekt jest zbudowany na taniej tablicy hobby z mojego lokalnego marketu budowlanego. Płyta ma szerokość 850 mm, wysokość 500 mm i głębokość 18 mm.
Diody LED użyte w tym projekcie to 5050 WS2812b zamontowane na okrągłych płytkach drukowanych o średnicy około 9 mm z miejscami do lutowania z tyłu.
Używam mikrokontrolera zgodnego z Arduino Pro Mini. Jest to wersja 5V 16 MHz. Wybrałem ten, ponieważ ma bardzo smukłą konstrukcję, niewielkie rozmiary i wszystkie niezbędne porty oraz kilka zapasowych na przyszłe aktualizacje. Jest również 5 V, więc mogę użyć jednego zasilacza dla diod LED, mikrokontrolera i RTC
Za pomiar czasu odpowiada moduł RTC (Real Time Clock) z układem DS3231. Ten chip jest bardzo dokładny, więc czas nie powinien zbytnio dryfować.
Także używany:
Drut. Lut i klej na gorąco.
Narzędzia:
Wiertarka i wiertła do drewna (10mm i 5mm)
Lutownica
Pistolet na gorący klej
nożyce do drutu
Akcesoria Dremel i frezarki wgłębne
Krok 2: Znakowanie, wiercenie i frezowanie
Wiercenie
- Używając wąskiej krawędzi, znajdź środek deski, rysując linię z przeciwległych rogów.
- Zaznacz 3 kółka za pomocą sznurka i długopisu. Najbardziej zewnętrzny okrąg powinien znajdować się około 20 mm od krawędzi planszy, a pozostałe 2 linie powinny być przesunięte o 15 mm od ostatniej linii.
- Użyłem wydrukowanej tarczy zegara, aby pomóc mi zaznaczyć pozycje każdej z minut i sekund na zewnętrznych 2 liniach i godzin na wewnętrznej linii.
- Wywierć 10 mm otwory o głębokości około 5 mm na każdą godzinę, minutę i sekundę.
- Użyj wiertła 5 mm, aby wykonać otwory w desce przez godzinę, minutę i sekundę.
Rozgromienie
Chociaż ten krok nie jest konieczny, pozwoli na zamontowanie zegara na równi ze ścianą.
- Korzystanie z routera i prowadnicy po okręgu trasa kanałów przewodów w tablicy
- Zaznacz i poprowadź wnękę, w której będzie mieszkał zegar czasu rzeczywistego i mikrokontroler.
- Poprowadź kanał od linii zewnętrznych do wnęki na przewody
Krok 3: Tyle żołnierstwa, cięcia i rozbiórki
Ta następna część jest znacznie łatwiejsza do powiedzenia niż do zrobienia. Moja rada to uwaga, aby się spieszyć. spróbuj znaleźć system i wejdź w rytm.
Każda z diod LED wymaga wejścia 5 woltów, wyjścia 5 woltów, wejścia danych, wyjścia danych, wejścia uziemienia i wyjścia uziemienia. w tym zasilanie mikrokontrolera i RTC to ponad 400 przewodów, wszystkie pozbawione izolacji i lutowane na obu końcach.
Na tym etapie bardzo przydatna jest kleista niebieska substancja.
- Zacząłem od umieszczenia 2 diod LED w ich otworach obok siebie, aby obliczyć długość przewodu potrzebnego do połączenia ze sobą.
- Używając pierwszego kawałka drutu jako przewodnika, wycinam 60 z każdego kolorowego drutu.
- Oderwij 2mm rękawa z końców każdego przewodu i pocynuj go lutowiem.
- Przylutuj małą kropelkę lutowia do każdego z padów LED.
- Przylutuj przewody do diod LED, aby utworzyć dwa łańcuchy po 60 minut i sekund oraz jeden łańcuch po 12 godzin. Użyłem czerwonego przewodu do 5V, żółtego do danych i niebieskiego do masy.
- Uważaj, aby połączyć każde wyjście danych (DOUT) z wejściem danych (DIN) następnej diody LED
- Ostatnia dioda w każdej dawce łańcucha nie potrzebuje przewodu wyjściowego danych.
Gdy wszystkie łańcuchy są gotowe, warto je przetestować przed ich zainstalowaniem. Użyłem mojego Arduino UNO i testu Adafruit NeoPixel Strand, aby potwierdzić, że każda dioda LED działa.
Przylutuj dłuższe przewody do każdego z łańcuchów dla 5 V, uziemienia i danych.
W tym momencie powinno być pięć przewodów 5V, trzy przewody danych podłączone do Arduino Pro Mini i 5 przewodów uziemiających.
Zdejmij 5 mm z końców przewodów 5 V i przylutuj je wszystkie razem i powtórz dla przewodów uziemiających.
Po zakończeniu trzech łańcuchów przylutuj przewód 5 V do pinu RAW Arduino Pro Mini, a także do pinu VCC dla RTC. Przewód uziemiający do GND w Arduino Pro Mini i RTC, a następnie 2 dodatkowe przewody:
SCL z RTC do A5 w Pro Mini
SDA z RTC do A4 w Pro Mini
Linie danych z diod LED powinny łączyć się z:
- Sekundy - cyfrowy pin 3.
- Minuty - DigitalPin 4
- Godziny - DigitalPin 5
Krok 4: Instalacja
Po przylutowaniu, instalowanie diod LED w ich otworach powinno być proste. Diody LED muszą być zainstalowane, aby dane przebiegały w kierunku przeciwnym do ruchu wskazówek zegara, patrząc od tyłu, ponieważ kod jest ustawiony z przodu.
Użyłem niewielkiej ilości gorącego kleju, aby je przytrzymać, ponieważ chcę móc wymienić pojedynczą diodę LED, jeśli w przyszłości zawiedzie.
Użyłem również gorącego kleju, aby wszystkie przewody były schludne i uporządkowane oraz aby przymocować złącze lufy do płyty.
Dostępnych jest wiele przewodników programowania arduino pro mini. Używam zewnętrznego konwertera USB na szeregowy, aby załadować ten kod do Arduino:
Ten kod ustawi również czas w RTC na czas, w którym został skompilowany. dlatego ważne jest, aby po prostu zamknąć przycisk przesyłania, aby był zgodny i przesyłał tak szybko, jak to możliwe.
Znaczna część tego kodu została zapożyczona z NeoPixel Ring Clock autorstwa Andy Doro. Niektóre z testu Adafruit NeoPixel Strand, a niektóre zebrałem.
Musisz mieć zainstalowanych kilka bibliotek. Są one dostępne z Menedżera bibliotek w oprogramowaniu Arduino.
Adafruit NeoPixel do diod LED ws2812b
Przewód do komunikacji z RTC przez I2C (jest wbudowany w standardzie)
i RTClib, aby wiedzieć, o co zapytać RTC
/************************************************** ************************* * * NeoPixel Ring Clock autorstwa Andy Doro ([email protected]) https://andydoro.com/ringclock/ * * ***************************************************** *************************
Historia zmian
Data według czego
20140320 AFD Pierwsza wersja robocza 20160105 AFD Wyblakłe łuki 20160916 AFD kompatybilny z Trinket 20170727 AFD dodano STARTPIXEL do obudowy 3D, zmienny punkt początkowy, dodano automatyczną obsługę DST 20180424 AFD przy użyciu biblioteki DST https://github.com/andydoro/DST_RTC *
/ dołącz kod biblioteki:
#włącz #włącz
#włączać
// zdefiniuj szpilki
#zdefiniuj SECPIN 3 #zdefiniuj MINPIN 4 #zdefiniuj HOUPIN 5
#define BRIGHTNESS 20 // ustaw maksymalną jasność
#zdefiniuj r 10
#define g 10 #define b 10 RTC_DS3231 rtc; // Ustaw obiekt zegara
Adafruit_NeoPixel stripS = Adafruit_NeoPixel(60, SECPIN, NEO_GRB + NEO_KHZ800); // usuń obiekt
Adafruit_NeoPixel stripM = Adafruit_NeoPixel(60, MINPIN, NEO_GRB + NEO_KHZ800); // usuń obiekt Adafruit_NeoPixel stripH = Adafruit_NeoPixel(24, HOUPIN, NEO_GRB + NEO_KHZ800); // usuń bajt obiektu pixelColorRed, pixelColorGreen, pixelColorBlue; // przechowuje wartości kolorów
pusta konfiguracja () {
Wire.początek(); // Rozpocznij I2C rtc.begin(); // rozpocznij zegar
Serial.początek(9600);
// ustaw tryby pinów pinMode(SECPIN, OUTPUT); pinMode (MINPIN, WYJŚCIE); pinMode (HOUPIN, WYJŚCIE);
if (rtc.lostPower()) {
Serial.println("RTC stracił zasilanie, ustawmy czas!"); // kolejna linia ustawia RTC na datę i czas skompilowania tego szkicu rtc.adjust(DateTime(F(_DATE_), F(_TIME_))); // Ta linia ustawia RTC z wyraźną datą i godziną, na przykład, aby ustawić // 21 stycznia 2014 o 3 nad ranem, wywołasz: // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0)); }
stripS.początek();
stripM.początek(); stripH.początek(); //strip.show(); // Zainicjuj wszystkie piksele na „wyłączone”
// sekwencja startowa
opóźnienie (500);
colorWipeS(stripS. Color(0, g, 0), 5); // Niebieski colorWipeM(stripM. Color(r, 0, 0), 5); // Niebieski kolorWipeH(stripH. Color(0, 0, b), 50); // Niebieski
opóźnienie (1000);
DateTime theTime = rtc.now(); // uwzględnia DST byte secondval = theTime.second(); // pobierz sekundy bajt minuteval = theTime.minute(); // pobierz minuty int hourval = theTime.hour(); godzina = godzina % 12; // Ten zegar to 12 godzin, jeśli 13-23, przekonwertuj na 0-11`
for (uint16_t i = 0; i < secondval; i++) { stripS.setPixelColor(i, 0, 0, b); stripS.show(); opóźnienie(5); }
for (uint16_t i = 0; i < minuteval; i++) { stripM.setPixelColor(i, 0, g, 0); stripM.show(); opóźnienie(5); }
for (uint16_t i = 0; i < hourval; i++) { stripH.setPixelColor(i, r, 0, 0); stripH.show(); opóźnienie(5); }
}
pusta pętla () {
// uzyskać czas
DateTime theTime = rtc.now(); // uwzględnia czas letni
bajt sekundwartość = czas.sekunda(); // zdobądź sekundy
bajt minuta = czas.minuta(); // pobierz minuty int hourval = theTime.hour(); // pobierz godziny hourval = hourval % 12; // Ten zegar to 12 godzin, jeśli 13-23, przekonwertuj na 0-11`
stripS.setPixelColor(secondval, 0, 0, 20); stripS.show(); opóźnienie(10); if (secondval ==59) { for (uint8_t i = stripS.numPixels(); i > 0; i--) { stripS.setPixelColor(i, 0, g, 0); stripS.show(); opóźnienie(16);} }
stripM.setPixelColor(minuteval, 0, g, 0);
stripM.show(); opóźnienie(10); if (secondval ==59 && minuteval == 59) { for (uint8_t i = stripM.numPixels(); i > 0; i--) { stripM.setPixelColor(i, r, 0, 0); stripM.show(); opóźnienie(16);} }
stripH.setPixelColor(hourval, r, 0, 0);
stripH.show(); opóźnienie(10); if (secondval == 59 && minuteval == 59 && hourval == 11) { for (uint8_t i = stripH.numPixels(); i > 0; i--) { stripH.setPixelColor(i, 0, 0, b); stripH.show(); delay(83);} } // dla debugowania szeregowego Serial.print(hourval, DEC); Serial.print(':'); Serial.print(minuta, DEC); Serial.print(':'); Serial.println(sekunda, grudzień); }
// Wypełnij kropki jedna po drugiej kolorem
void colorWipeS(uint32_t c, uint8_t czekaj) { for (uint16_t i = 0; i < stripS.numPixels(); i++) { stripS.setPixelColor(i, c); stripS.show(); opóźnienie (czekaj); } }
void colorWipeM(uint32_t c, uint8_t czekaj) {
for (uint16_t i = 0; i < stripM.numPixels(); i++) { stripM.setPixelColor(i, c); stripM.show(); opóźnienie (czekaj); } }
void colorWipeH(uint32_t c, uint8_t czekaj) {
for (uint16_t i = 0; i < stripH.numPixels(); i++) { stripH.setPixelColor(i, c); stripH.show(); opóźnienie (czekaj); } }
Krok 5: Ostatnie poprawki
Wszystko, co powinno zostać teraz, to przymocować RTC i mikrokontroler we wnęce.
Zamontowałem baterię RTC do góry, więc w razie potrzeby mogę łatwo wymienić baterię.
Podłącz przewody 5 v do strony + złącza, a uziemienie do strony -
Wzmocnij to!
Mam swoją podłączoną do banku baterii USB, ale ładowarka USB do telefonu będzie działać równie dobrze.
Notatka:
Jasność diod LED ustawiana jest w kodzie. Został ustawiony na niskim poziomie, aby utrzymać niski pobór prądu. Przy pełnej jasności z zapalonymi wszystkimi diodami LED mógł pobierać prawie 8 amperów. Przy obecnej konfiguracji jest mniej niż 1.
Drugie miejsce w konkursie Zegary
Zalecana:
Pixel Smart Lamp: 7 kroków (ze zdjęciami)
Pixel Smart Lamp: Jest to projekt, który wykonałem dla inteligentnej lampy sterowanej przez Bluetooth z aplikacją na Androida opracowaną na Android Studio. Głównym celem Pixela jest wyświetlanie pięknych świateł. Na przykład jest to tryb oświetlenia kominkowego, zobaczmy, jak kominek jednopikselowy może
Bolt - DIY Wireless Charging Night Clock (6 kroków): 6 kroków (ze zdjęciami)
Bolt - DIY Wireless Charging Night Clock (6 kroków): Ładowanie indukcyjne (znane również jako ładowanie bezprzewodowe lub ładowanie bezprzewodowe) to rodzaj bezprzewodowego przesyłania energii. Wykorzystuje indukcję elektromagnetyczną do dostarczania energii elektrycznej do urządzeń przenośnych. Najpopularniejszym zastosowaniem jest stacja ładowania bezprzewodowego Qi
Vertical Bartop Arcade ze zintegrowanym wyświetlaczem LED PIXEL: 11 kroków (ze zdjęciami)
Vertical Bartop Arcade ze zintegrowanym wyświetlaczem LED PIXEL: **** Zaktualizowano o nowe oprogramowanie w lipcu 2019 r., szczegóły tutaj ****** Bartop arcade z unikalną funkcją, którą zmienia się w matrycy LED w celu dopasowania do wybranej gry. Grafika postaci na bokach szafki to laserowo wycinane inkrustacje, a nie naklejane
Oświetlenie ścienne Pixel Cloud Ambient: 6 kroków (ze zdjęciami)
Pixel Cloud Ambient Wall Light: kolejna modyfikacja światła Ikea, dodana adresowalne diody LED i kontroler, aby stworzyć coś wyjątkowego. Przeznaczona do stosowania w pokoju dziecięcym, dająca łagodne światło otoczenia oraz jako lampka nocna. Ten projekt wykorzystuje adresowalne piksele 56x APA102, NLE
Stwórz ogromny wyświetlacz LED 4096 dla retro Pixel Art: 5 kroków (ze zdjęciami)
Zrób masywny wyświetlacz LED 4096 dla retro Pixel Art: ***** Zaktualizowano w marcu 2019 r. ****** Istnieje kilka sposobów, w jakie możesz przejść do tego projektu, zbudować wszystko od zera lub wykorzystać wersję zestawu. Omówię obie metody w tej instrukcji. Ta instrukcja obejmuje instalację 64x64 lub 4096 RGB LED