Mündəricat:

132 Piksel Saat: 5 Adım (Şəkillərlə birlikdə)
132 Piksel Saat: 5 Adım (Şəkillərlə birlikdə)

Video: 132 Piksel Saat: 5 Adım (Şəkillərlə birlikdə)

Video: 132 Piksel Saat: 5 Adım (Şəkillərlə birlikdə)
Video: RTX 3090 Ti vs RTX 3060 Ultimate Showdown for Stable Diffusion, ML, AI & Video Rendering Performance 2024, Noyabr
Anonim
Image
Image
132 Piksel Saat
132 Piksel Saat

Xatırladığım müddətcə LED -lərə və vaxta aludə olmuşam. Bu layihədə, bir ladin taxtasından quraşdırılmış və parlayan 132 neopixel LED -dən istifadə edərək cari vaxtı göstərən böyük bir divar saatı yaratdım. Hər saat, dəqiqə və saniyə üçün fərdi piksel olan hibrid analog rəqəmsaldır.

Bu günə qədər götürdüyüm ən böyük layihə idi, 6 ay əvvəl düşünməyə başladım və fikir yavaş -yavaş bir araya gəldi. Nəticədən çox məmnunam və bunu sizinlə bölüşməyi səbirsizliklə gözləyirəm.

Addım 1: Təchizat və Alətlərin Toplanması

Təchizat və Alətlərin Toplanması
Təchizat və Alətlərin Toplanması
Təchizat və Alətlərin Toplanması
Təchizat və Alətlərin Toplanması
Təchizat və Alətlərin Toplanması
Təchizat və Alətlərin Toplanması
Təchizat və Alətlərin Toplanması
Təchizat və Alətlərin Toplanması

Komponentlər

Bu layihə yerli DIY mağazamdan bir hobbi lövhəsi üzərində qurulmuşdur. Lövhənin eni 850 mm, hündürlüyü 500 mm və dərinliyi 18 mm -dir.

Bu layihədə istifadə olunan LEDlər, arxa tərəfində lehim yastıqları olan təxminən 9 mm diametrli dairəvi PCB -lərə quraşdırılmış 5050 WS2812b -dir.

Arduino Pro Mini ilə uyğun mikro nəzarətçi istifadə edirəm. 5V 16 MHZ versiyasıdır. Super incə dizaynı, kiçik ayaq izi və bütün lazımsız limanları və gələcək yüksəlişlər üçün bir az ehtiyatı olduğu üçün bunu seçdim. Həm də 5 voltdur, buna görə LEDlər, Mikro nəzarətçi və RTC üçün tək bir enerji təchizatı istifadə edə bilərəm

Vaxtın saxlanması DS3231 çipi olan bir RTC (Real Time Clock) modulu tərəfindən həyata keçirilir. Bu çip çox dəqiqdir, buna görə vaxt çox sürməməlidir.

Həm də istifadə olunur:

Tel. Lehim və isti yapışqan.

Alətlər:

Elektrikli matkaplar və taxta matkaplar (10 mm və 5 mm)

Lehimleme dəmir

İsti yapışqan silahı

tel parçaları

Dremel və daldırma router aksesuarları

Addım 2: İşarələmə, Qazma və Marşrutlaşdırma

İşarələmə, Qazma və Marşrutlaşdırma
İşarələmə, Qazma və Marşrutlaşdırma
İşarələmə, Qazma və Marşrutlaşdırma
İşarələmə, Qazma və Marşrutlaşdırma
İşarələmə, Qazma və Marşrutlaşdırma
İşarələmə, Qazma və Marşrutlaşdırma

Qazma

  • Düz bir kənar istifadə edərək, əks künclərdən bir xətt çəkərək lövhənin mərkəzini tapın.
  • Bir ip və qələm istifadə edərək 3 dairəni işarələyin. Xarici ən çox dairə lövhənin kənarından təxminən 20 mm məsafədə, digər 2 xətt isə son sətirdən 15 mm irəliləyir.
  • Xarici 2 sətirdə hər dəqiqə və saniyənin, daxili sətirdə saatların mövqelərini təyin etməyə kömək etmək üçün çap olunmuş saat üzündən istifadə etdim.
  • Hər saat, dəqiqə və saniyə üçün təxminən 5 mm dərinlikdə 10 mm deliklər qazın.
  • Lövhədə bir saat, dəqiqə və saniyəlik deliklər açmaq üçün 5 mm -lik qazmağı istifadə edin.

Marşrutlaşdırma

Bu addım lazım olmasa da, saatın divara bərabər şəkildə quraşdırılmasına imkan verəcəkdir.

  • Lövhədə bir router və dairə bələdçisi marşrut tel kanallarından istifadə
  • RTC və Micro Controller -in yaşaması üçün bir fasilə işarələyin və istiqamətləndirin.
  • Bir xətti xarici xətlərdən tellərin girintisinə yönəldin

Addım 3: Çox Əsgərlik, Kəsmə və Soyma

Çox Əsgərlik, Kəsmə və Soyma
Çox Əsgərlik, Kəsmə və Soyma
Çox Əsgərlik, Kəsmə və Soyma
Çox Əsgərlik, Kəsmə və Soyma
Çox Əsgərlik, Kəsmə və Soyma
Çox Əsgərlik, Kəsmə və Soyma

Növbəti hissə deməkdən daha asandır. Tələsməyim üçün məsləhətim olardı. bir sistem tapmağa çalışın və bir ritmə girin.

LED -lərin hər birinin 5 volt girişi, 5 volt çıxışı, Məlumat girişi, Məlumat çıxışı, Topraklama və Torpaq çıxışı lazımdır. mikro nəzarətçi və RTC -nin 400 -dən çox telinin hər iki ucunda soyulmuş və lehimlənmiş gücü də daxil olmaqla.

Yapışqan mavi bir maddə bu addım üçün çox faydalıdır.

  • Bir -birinə bağlanmaq üçün lazım olan telin uzunluğunu öyrənmək üçün bir -birinin yanındakı deliklərinə 2 LED qoyaraq başladım.
  • 1 -ci tel parçasını bələdçi olaraq istifadə edərək hər rəngli teldən 60 -ı kəsdim.
  • Hər bir telin ucundan 2 mm qalınlığı çıxarın və lehimlə qalaylayın.
  • LED yastıqların hər birinə kiçik bir lehim lehimləyin.
  • Kabelləri LED -lərə lehimləyin ki, dəqiqə və saniyə ərzində 60 ədəd və 12 saatlıq bir zəncir meydana gətirsin. 5V üçün qırmızı tel, məlumat üçün sarı və yer üçün mavi istifadə etdim.
  • Hər bir Data Çıxışını (DOUT) növbəti LED -in Məlumat Girişinə (DIN) bağlamağa diqqət yetirin
  • Hər bir zəncirvari dozada sonuncu aparıcıya məlumat ötürülməsinə ehtiyac yoxdur.

Bütün zəncirləri tamamladıqdan sonra onları quraşdırmadan əvvəl sınamaq yaxşı bir fikirdir. Hər bir LED -in işlədiyini təsdiqləmək üçün Arduino UNO və Adafruit NeoPixel Strand Testindən istifadə etdim.

5V, Ground və Data in zəncirlərinin hər birinə daha uzun tellər lehimləyin.

Bu nöqtədə 5 ədəd 5v tel, 3 ədəd Arduino Pro Mini və 5 Topraklama telinə bağlı olmalıdır.

5v tellərin uclarından 5 mm çıxarın və hamısını birlikdə lehimləyin və Topraklama telləri üçün təkrarlayın.

Üç zənciri tamamladıqdan sonra, Arduino Pro Mini -nin RAW pininə 5V -lik bir tel lehimləyin və eyni zamanda RTC üçün VCC pininə yapışdırın. Arduino Pro Mini və RTC -də GND -yə bir topraklama teli və sonra daha 2 tel:

Pro Mini -də RTC -dən A5 -ə SCL

Pro Mini -də RTC -dən A4 -ə qədər SDA

LED -lərin məlumat xətləri aşağıdakılara qoşulmalıdır:

  • Saniyə - Rəqəmsal Pin 3.
  • Dəqiqələr - DigitalPin 4
  • Saat - DigitalPin 5

Addım 4: Quraşdırma

Quraşdırılır
Quraşdırılır
Quraşdırılır
Quraşdırılır
Quraşdırılır
Quraşdırılır

Lehimləndikdən sonra, LEDləri çuxurlarına quraşdırmaq düz irəli olmalıdır. LED-lərin quraşdırılması lazımdır, belə ki, kod arxa tərəfdən baxıldıqda məlumatlar saat yönünün əksinə hərəkət edir, çünki kod ön tərəfə baxır.

Gələcəkdə uğursuz olarsa tək bir LED əvəz etmək istədiyim üçün onları tutmaq üçün az miqdarda isti yapışqan istifadə etdim.

Bütün telləri səliqəli və səliqəli saxlamaq və lülənin konnektorunu lövhəyə düzəltmək üçün də isti yapışqan istifadə etdim.

Bir sıra arduino pro mini proqramlaşdırma təlimatları mövcuddur. Bu kodu Arduinoya yükləmək üçün xarici USB -dən serial çevirici metodundan istifadə edirəm:

Bu kod eyni zamanda RTC -də tərtib edildiyi vaxtı təyin edəcək. Yükləmə düyməsini bağlamaq vacibdir, buna görə mümkün qədər tez uyğun gəlir və yüklənir.

Bu kodun çox hissəsi Andy Doro tərəfindən NeoPixel Zəngli Saatdan götürülmüşdür. Bəziləri Adafruit NeoPixel Strand Testindən və bəzilərini bir araya gətirdim.

Bir neçə kitabxana qurmalısınız. Arduino proqramındakı Kitabxanalar Menecerindən əldə edə bilərsiniz.

Ws2812b LEDləri üçün Adafruit NeoPixel

RTC ilə I2C üzərində danışmaq üçün tel (bu standart olaraq qurulmuşdur)

və RTClib, RTC -dən nə soruşacağını bildiyinə görə

/*********************************************** ***************************Andy Doro tərəfindən NeoPixel Zəngli Saat ([email protected]) https://andydoro.com/ringclock/ ************************************************ **************************

Reviziya Tarixi

Nə ilə Tarix

20140320 AFD İlk layihə 20160105 AFD Solğun qövslər 20160916 AFD Trinket uyğun 20170727 AFD, 3D korpus üçün STARTPIXEL, dəyişkən başlanğıc nöqtəsi, DST kitabxanasını istifadə edərək avtomatik DST dəstəyi 20180424 əlavə etdi https://github.com/andydoro/DST_RTC *

/ kitabxana kodunu daxil edin:

#daxil edin #daxil edin

#daxil edin

// sancaqlar təyin edin

#SECPIN 3 təyin edin #MINPIN 4 təyin edin #HOUPIN 5 təyin edin

#define BRIGHTNESS 20 // maksimum parlaqlığı təyin edin

#təyin r 10

#define g 10 #define b 10 RTC_DS3231 rtc; // Saat obyekti qurun

Adafruit_NeoPixel şeridiS = Adafruit_NeoPixel (60, SECPIN, NEO_GRB + NEO_KHZ800); // obyekti soyun

Adafruit_NeoPixel şeridiM = Adafruit_NeoPixel (60, MINPIN, NEO_GRB + NEO_KHZ800); // zolaq obyekti Adafruit_NeoPixel stripH = Adafruit_NeoPixel (24, HOUPIN, NEO_GRB + NEO_KHZ800); // zolaq obyekti bayt pixelColorRed, pixelColorGreen, pixelColorBlue; // rəng dəyərlərini saxlayır

boş quraşdırma () {

Wire.begin (); // Başla I2C rtc.begin (); // saata başlayın

Serial.begin (9600);

// pinMode pinMode (SECPIN, ÇIXIŞ) təyin edin; pinMode (MINPIN, ÇIXIŞ); pinMode (HOUPIN, ÇIXIŞ);

if (rtc.lostPower ()) {

Serial.println ("RTC gücünü itirdi, vaxtı təyin edək!"); // aşağıdakı xətt RTC -ni bu eskizin tərtib edildiyi tarix və saata təyin edir rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)))); // Bu xətt RTC -ni açıq bir tarix və vaxtla təyin edir, məsələn, 21 Yanvar 2014 -ü saat 3 -də zəng edərdiniz: // rtc.adjust (DateTime (2014, 1, 21, 3, 0, 0)); }

stripS.begin ();

stripM.begin (); stripH.begin (); //strip.show (); // Bütün pikselləri "söndürmək" üçün başladın

// başlanğıc ardıcıllığı

gecikmə (500);

colorWipeS (stripS. Color (0, g, 0), 5); // Mavi rəngWipeM (stripM. Color (r, 0, 0), 5); // Mavi colorWipeH (stripH. Color (0, 0, b), 50); // Mavi

gecikmə (1000);

DateTime theTime = rtc.now (); // nəzərə alır DST bayt secondval = theTime.second (); // saniyə bayt əldə edin minuteval = theTime.minute (); // dəqiqələr alın int hourval = theTime.hour (); hourval = hourval % 12; // Bu saat 12 saatdır, əgər 13-23 olarsa 0-11-ə çevrilir

for (uint16_t i = 0; i <secondval; i ++) {stripS.setPixelColor (i, 0, 0, b); stripS.show (); gecikmə (5); }

for (uint16_t i = 0; i <minuteval; i ++) {stripM.setPixelColor (i, 0, g, 0); stripM.show (); gecikmə (5); }

for (uint16_t i = 0; i <hourval; i ++) {stripH.setPixelColor (i, r, 0, 0); stripH.show (); gecikmə (5); }

}

boşluq döngəsi () {

// vaxt qazan

DateTime theTime = rtc.now (); // DST -ni nəzərə alır

bayt saniyə = theTime.second (); // saniyə əldə edin

bayt dəqiqə = theTime.minute (); // dəqiqə almaq int hourval = theTime.hour (); // saat saatı alın = saat dəyəri % 12; // Bu saat 12 saatdır, əgər 13-23 olarsa 0-11-ə çevrilir

stripS.setPixelColor (ikinci dəyər, 0, 0, 20); stripS.show (); gecikmə (10); if (secondval == 59) {for (uint8_t i = stripS.numPixels (); i> 0; i--) {stripS.setPixelColor (i, 0, g, 0); stripS.show (); gecikmə (16);}}

stripM.setPixelColor (dəqiqəlik, 0, g, 0);

stripM.show (); gecikmə (10); if (secondval == 59 && minuteval == 59) {for (uint8_t i = stripM.numPixels (); i> 0; i--) {stripM.setPixelColor (i, r, 0, 0); stripM.show (); gecikmə (16);}}

stripH.setPixelColor (saat dilimi, r, 0, 0);

stripH.show (); gecikmə (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 (); gecikmə (83);}} // seriya ayıklama üçün Serial.print (saat ölçüsü, DEC); Serial.print (':'); Serial.çap (minuteval, DEC); Serial.print (':'); Serial.println (secondval, DEC); }

// Nöqtələri bir -birinin ardınca rənglə doldurun

void colorWipeS (uint32_t c, uint8_t gözləyin) {for (uint16_t i = 0; i <stripS.numPixels (); i ++) {stripS.setPixelColor (i, c); stripS.show (); gecikmə (gözləmək); }}

void colorWipeM (uint32_t c, uint8_t gözləyin) {

for (uint16_t i = 0; i <stripM.numPixels (); i ++) {stripM.setPixelColor (i, c); stripM.show (); gecikmə (gözləmək); }}

boş rəngWipeH (uint32_t c, uint8_t gözləyin) {

for (uint16_t i = 0; i <stripH.numPixels (); i ++) {stripH.setPixelColor (i, c); stripH.show (); gecikmə (gözləmək); }}

Addım 5: Son toxunuşlar

Image
Image
Son toxunuşlar
Son toxunuşlar

İndi yalnız RTC və Micro Controller -ı fasilədə düzəltmək qalır.

Lazım gələrsə batareyanı asanlıqla dəyişdirə biləcəyim üçün RTC batareyasını yan tərəfə quraşdırdım.

5V telləri bağlayıcının + tərəfinə və Zəmini yan tərəfə bağlayın

Gücləndirin!

Bir USB batareya bankına bağladım, ancaq bir USB telefon şarj cihazı da işləyə bilər.

Qeyd:

LED -lərin parlaqlığı kodda müəyyən edilir. Mövcud tirajı aşağı saxlamaq üçün aşağıya endirilib. Bütün LED -lər yanarkən tam parlaqlıqda təxminən 8 amper çəkə bilər. Mövcud quraşdırma ilə 1 -dən azdır.

Saat Müsabiqəsi
Saat Müsabiqəsi
Saat Müsabiqəsi
Saat Müsabiqəsi

Saat Yarışmasında 2 -ci yeri tutdu

Tövsiyə: