Spisu treści:

132 Pixel Clock: 5 kroków (ze zdjęciami)
132 Pixel Clock: 5 kroków (ze zdjęciami)

Wideo: 132 Pixel Clock: 5 kroków (ze zdjęciami)

Wideo: 132 Pixel Clock: 5 kroków (ze zdjęciami)
Wideo: Gimp 2.10.14 Zniszczona fotografia Retusz Separacja częstotliwości Poradnik 2024, Listopad
Anonim
Image
Image
132 pikselowy zegar
132 pikselowy zegar

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

Zbieranie materiałów i narzędzi
Zbieranie materiałów i narzędzi
Zbieranie materiałów i narzędzi
Zbieranie materiałów i narzędzi
Zbieranie materiałów i narzędzi
Zbieranie materiałów i narzędzi
Zbieranie materiałów i narzędzi
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

Znakowanie, wiercenie i frezowanie
Znakowanie, wiercenie i frezowanie
Znakowanie, wiercenie i frezowanie
Znakowanie, wiercenie i frezowanie
Znakowanie, wiercenie i frezowanie
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

Tyle żołnierstwa, cięcia i rozbiórki
Tyle żołnierstwa, cięcia i rozbiórki
Tyle żołnierstwa, cięcia i rozbiórki
Tyle żołnierstwa, cięcia i rozbiórki
Tyle żołnierstwa, cięcia i rozbiórki
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

Instalowanie
Instalowanie
Instalowanie
Instalowanie
Instalowanie
Instalowanie

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

Image
Image
Ostatnie poprawki
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.

Konkurs na zegary
Konkurs na zegary
Konkurs na zegary
Konkurs na zegary

Drugie miejsce w konkursie Zegary

Zalecana: