Turinys:
- 1 žingsnis: Surinkite reikmenis ir įrankius
- 2 žingsnis: žymėjimas, gręžimas ir maršruto parinkimas
- 3 žingsnis: tiek daug kareivių, pjaustymas ir pašalinimas
- 4 žingsnis: diegimas
- 5 žingsnis: paskutiniai prisilietimai
Video: 132 pikselių laikrodis: 5 žingsniai (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Kiek prisimenu, buvau apsėstas šviesos diodų ir laiko. Šiame projekte sukūriau didelį sieninį laikrodį, rodantį dabartinį laiką, naudojant 132 neopikselinius šviesos diodus, sumontuotus ir šviečiančius per eglės lentą. Tai hibridinis analoginis skaitmeninis su individualiu pikseliu kiekvienai valandai, minutei ir sekundei.
Tai buvo didžiausias projektas, kurio ėmiausi iki šiol, pradėjau apie tai galvoti prieš 6 mėnesius ir lėtai kilo idėja. Esu labai patenkinta rezultatu ir nekantrauju pasidalinti ja su jumis.
1 žingsnis: Surinkite reikmenis ir įrankius
Komponentai
Šis projektas yra sukurtas ant „cheep“pomėgių lentos iš mano vietinės „pasidaryk pats“parduotuvės. Plokštės plotis 850 mm, aukštis 500 mm, gylis 18 mm.
Šiame projekte naudojami šviesos diodai yra 5050 WS2812b, sumontuoti ant apskritų maždaug 9 mm skersmens PCB su litavimo pagalvėlėmis gale.
Aš naudoju „Arduino Pro Mini“suderinamą mikrovaldiklį. Tai 5V 16 MHZ versija. Aš pasirinkau šį, nes jis turi labai ploną dizainą, mažą pėdsaką ir visus būtinus prievadus bei šiek tiek atsargų būsimiems atnaujinimams. Jis taip pat yra 5 voltų, todėl galiu naudoti vieną maitinimo šaltinį šviesos diodams, mikrovaldikliui ir RTC
Laiko laikymu rūpinasi RTC (Real Time Clock) modulis, turintis DS3231 lustą. Šis lustas yra labai tikslus, todėl laikas neturėtų per daug važiuoti.
Taip pat naudojamas:
Viela. Lituoklis ir karšti klijai.
Įrankiai:
Elektrinis gręžtuvas ir medžio grąžtai (10 mm ir 5 mm)
Lituoklis
Karštas klijų pistoletas
vielos atraižos
„Dremel“ir „Plunge“maršrutizatoriaus priedai
2 žingsnis: žymėjimas, gręžimas ir maršruto parinkimas
Gręžimas
- Naudodami siaurą kraštą, suraskite lentos centrą, nubrėžę liniją iš priešingų kampų.
- Naudodami virvelę ir rašiklį pažymėkite 3 apskritimus. Išorinis apskritimas turėtų būti maždaug 20 mm atstumu nuo lentos krašto, o kitos 2 linijos 15 mm atstumu nuo paskutinės linijos.
- Aš naudoju atspausdintą laikrodžio rodyklę, kad padėčiau pažymėti kiekvienos minutės ir sekundės pozicijas išorinėse 2 eilutėse ir valandas vidinėje eilutėje.
- Kiekvieną valandą, minutę ir sekundę gręžkite maždaug 5 mm gylio 10 mm skyles.
- Naudokite 5 mm gręžtuvą, kad padarytumėte skyles per lentą valandą, minutę ir sekundę.
Maršrutizavimas
Nors šis žingsnis nėra būtinas, tai leis laikrodį pritvirtinti prie sienos.
- Maršrutizatoriaus ir apskritimo kreiptuvo naudojimas nukreipia laidų kanalus lentoje
- Pažymėkite ir nukreipkite įdubą, kad RTC ir mikrovaldiklis galėtų gyventi.
- Nukreipkite kanalą nuo išorinių linijų iki laidų įdubos
3 žingsnis: tiek daug kareivių, pjaustymas ir pašalinimas
Šią dalį daug lengviau pasakyti nei padaryti. Mano patarimas būtų įsidėmėti. pabandykite surasti sistemą ir įsitraukti į ritmą.
Kiekvienam šviesos diodui reikia 5 voltų įėjimo, 5 voltų išvesties, duomenų įvesties, duomenų išvesties, įžeminimo ir įžeminimo. įskaitant maitinimą mikrovaldikliui ir RTC - daugiau nei 400 laidų, visi nuimti ir lituoti iš abiejų galų.
Šiam žingsniui labai naudinga lipni mėlyna medžiaga.
- Pradėjau įdėdamas 2 šviesos diodus į skyles šalia vienas kito, kad išsiaiškintumėte laido ilgį, reikalingą prisijungti vienas prie kito.
- Naudodamas 1 -ąjį vielos gabalą kaip vadovą, tada nukirpau 60 kiekvienos spalvos vielos.
- Nuo kiekvienos vielos galų nuimkite 2 mm apvalkalą ir padėkite juos lydmetaliu.
- Lituokite nedidelį lituoklio gabalėlį ant kiekvienos LED pagalvėlės.
- Lituokite laidus prie šviesos diodų, kad susidarytumėte dvi grandines po 60 minučių ir sekundžių, o vieną - po 12 grandinių valandoms. Aš naudoju raudoną laidą 5 V, geltoną - duomenims ir mėlyną - žemei.
- Stenkitės kiekvieną duomenų išvestį (DOUT) prijungti prie kito šviesos diodo duomenų įvesties (DIN)
- Paskutiniam kiekvienos grandinės dozės šviesos diodui nereikia duomenų perdavimo laido.
Kai visos grandinės bus baigtos, prieš diegiant jas verta išbandyti. Aš naudoju savo „Arduino UNO“ir „Adafruit NeoPixel Strand Test“, kad patvirtinčiau, jog kiekvienas šviesos diodas veikia.
Lituokite ilgesnius laidus ant kiekvienos grandinės 5 V, įžeminimo ir duomenų įvesties.
Šiuo metu turėtų būti penki 5 V laidai, trys duomenų laidai, prijungti prie „Arduino Pro Mini“ir 5 įžeminimo laidai.
Atsukite 5 mm nuo 5 V laidų galų ir lituokite juos visus kartu ir pakartokite įžeminimo laidus.
Užbaigus tris grandines, lituokite 5 V laidą prie „Arduino Pro Mini“RAW kaiščio ir RTC VCC kaiščio. Įžeminimo laidas prie GND „Arduino Pro Mini“ir RTC ir dar 2 laidai:
SCL nuo RTC iki A5 „Pro Mini“
SDA nuo RTC iki A4 „Pro Mini“
Šviesos diodų duomenų linijos turėtų būti prijungtos prie:
- Sekundės - skaitmeninis kaištis 3.
- Minutės - „DigitalPin 4“
- Valandos - „DigitalPin 5“
4 žingsnis: diegimas
Lituoti šviesos diodus į skylutes reikia montuoti tiesiai į priekį. Šviesos diodai turi būti sumontuoti, kad duomenys būtų rodomi prieš laikrodžio rodyklę, žiūrint į juos iš galo, kai kodas yra nukreiptas į priekį.
Aš naudoju nedidelį kiekį karštų klijų, kad juos laikyčiau, nes noriu, kad ateityje galėčiau pakeisti vieną šviesos diodą.
Aš taip pat naudojau karštus klijus, kad visi laidai būtų tvarkingi ir tvarkingi, o statinės jungtis pritvirtinta prie plokštės.
Yra daugybė arduino pro mini programavimo vadovų. Aš naudoju išorinį USB į nuoseklųjį keitiklį, norėdamas įkelti šį kodą į „Arduino“:
Šis kodas taip pat nustatys RTC laiką iki to laiko, kai jis buvo sudarytas. todėl svarbu tiesiog paslėpti įkėlimo mygtuką, kad jis atitiktų ir įkeltų kuo greičiau.
Didžiąją šio kodo dalį pasiskolino Andy Doro iš „NeoPixel Ring Clock“. Kai kuriuos iš „Adafruit NeoPixel Strand Test“, o kai kuriuos sudėjau.
Turėsite įdiegti keletą bibliotekų. Juos galite rasti „Arduino“programinės įrangos bibliotekų tvarkytuvėje.
„Adafruit NeoPixel“skirtas „ws2812b“šviesos diodams
Laidas pokalbiui su RTC per I2C (jis įmontuotas standartiškai)
ir „RTClib“, kad žinotumėte, ko paklausti RTC
/************************************************ ***************************„NeoPixel Ring Clock“autorius Andy Doro ([email protected]) https://andydoro.com/ringclock/ ************************************************* **************************
Revizijos istorija
Data pagal ką
20140320 AFD Pirmasis juodraštis 20160105 AFD Išblukę lankai 20160916 Suderinamas su „AFD Trinket“20170727 AFD pridėjo STARTPIXEL 3D korpusui, kintamas pradžios taškas, pridėtas automatinis DST palaikymas 20180424 AFD naudojant DST biblioteką https://github.com/andydoro/DST_RTC *
/ įtraukite bibliotekos kodą:
#įtraukti #įtraukti
#įtraukti
// apibrėžti smeigtukus
#define SECPIN 3 #define MINPIN 4 #define HOUPIN 5
#define BRIGHTNESS 20 // nustatyti maksimalų ryškumą
#apibrėžti r 10
#define g 10 #define b 10 RTC_DS3231 rtc; // Nustatykite laikrodžio objektą
Adafruit_NeoPixel stripS = Adafruit_NeoPixel (60, SECPIN, NEO_GRB + NEO_KHZ800); // juostelės objektas
Adafruit_NeoPixel strip M = Adafruit_NeoPixel (60, MINPIN, NEO_GRB + NEO_KHZ800); // juostelės objektas Adafruit_NeoPixel strip H = Adafruit_NeoPixel (24, HOUPIN, NEO_GRB + NEO_KHZ800); // juostos objekto baitas pixelColorRed, pixelColorGreen, pixelColorBlue; // turi spalvų reikšmes
void setup () {
Wire.begin (); // Pradėti I2C rtc.begin (); // pradėti laikrodį
Serial.begin (9600);
// nustatyti pinmodes pinMode (SECPIN, OUTPUT); pinMode (MINPIN, OUTPUT); pinMode (HOUPIN, OUTPUT);
if (rtc.lostPower ()) {
Serial.println ("RTC dingo energija, leidžia nustatyti laiką!"); // kita eilutė nustato RTC datą ir laiką, kai šis eskizas buvo sudarytas rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))); // Ši eilutė nustato RTC su konkrečia data ir laiku, pavyzdžiui, nustatyti // 2014 m. Sausio 21 d., 3 val., Kurį galėtumėte skambinti: // rtc.adjust (DateTime (2014, 1, 21, 3, 0, 0)); }
stripS.begin ();
stripM.begin (); stripH.begin (); //strip.show (); // Inicijuokite visus taškus į „išjungtą“
// paleidimo seka
vėlavimas (500);
colorWipeS (stripS. Color (0, g, 0), 5); // Mėlyna spalvaWipeM (stripM. Color (r, 0, 0), 5); // Mėlyna spalvaWipeH (juostelėH. Spalva (0, 0, b), 50); // Mėlyna
vėlavimas (1000);
DateTime theTime = rtc.now (); // atsižvelgia į DST baitą secondval = theTime.second (); // gauti sekundes baitų minuteval = theTime.minute (); // gauti minutes int hourval = theTime.hour (); hourval = valanda % 12; // Šis laikrodis yra 12 valandų, jei 13-23, konvertuokite į 0-11`
for (uint16_t i = 0; i <secondval; i ++) {stripS.setPixelColor (i, 0, 0, b); stripS.show (); vėlavimas (5); }
for (uint16_t i = 0; i <minuteval; i ++) {stripM.setPixelColor (i, 0, g, 0); stripM.show (); vėlavimas (5); }
for (uint16_t i = 0; i <hourval; i ++) {stripH.setPixelColor (i, r, 0, 0); stripH.show (); vėlavimas (5); }
}
void loop () {
// gauk laiko
DateTime theTime = rtc.now (); // atsižvelgia į DST
baitas secondval = theTime.second (); // gauti sekundes
baitas minuteval = theTime.minute (); // gauti minutes int hourval = theTime.hour (); // gauti valandas hourval = hourval % 12; // Šis laikrodis yra 12 valandų, jei 13-23, konvertuokite į 0-11`
stripS.setPixelColor (secondval, 0, 0, 20); stripS.show (); vėlavimas (10); if (secondval == 59) {for (uint8_t i = stripS.numPixels (); i> 0; i--) {stripS.setPixelColor (i, 0, g, 0); stripS.show (); uždelsimas (16);}}
stripM.setPixelColor (minuteval, 0, g, 0);
stripM.show (); vėlavimas (10); if (secondval == 59 && minuteval == 59) {for (uint8_t i = stripM.numPixels (); i> 0; i--) {stripM.setPixelColor (i, r, 0, 0); stripM.show (); uždelsimas (16);}}
stripH.setPixelColor (valandinis, r, 0, 0);
stripH.show (); vėlavimas (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);}} // serijiniam derinimui Serial.print (hourval, DEC); Serial.print (':'); Serial.print (minuteval, DEC); Serial.print (':'); Serial.println (antrasis, DEC); }
// Taškus vieną po kito užpildykite spalva
void colorWipeS (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i <stripS.numPixels (); i ++) {stripS.setPixelColor (i, c); stripS.show (); atidėti (laukti); }}
void colorWipeM (uint32_t c, uint8_t palaukti) {
for (uint16_t i = 0; i <stripM.numPixels (); i ++) {stripM.setPixelColor (i, c); stripM.show (); atidėti (laukti); }}
void colorWipeH (uint32_t c, uint8_t palaukti) {
for (uint16_t i = 0; i <stripH.numPixels (); i ++) {stripH.setPixelColor (i, c); stripH.show (); atidėti (laukti); }}
5 žingsnis: paskutiniai prisilietimai
Dabar belieka tik pritvirtinti RTC ir mikrovaldiklį įduboje.
Aš sumontavau RTC bateriją į viršų, kad prireikus galėčiau lengvai pakeisti bateriją.
Prijunkite 5 V laidus prie jungties + pusės, o įžeminimą - į šoną
Įjunkite!
Aš turiu prijungtą prie USB akumuliatoriaus banko, tačiau USB telefono įkroviklis veiktų taip pat gerai.
Pastaba:
Šviesos diodų ryškumas nustatomas kode. Jis buvo nustatytas žemai, kad srovė būtų maža. Esant visam ryškumui, kai visi šviesos diodai šviečia, jis gali pritraukti beveik 8 amperus. Esant dabartinei sąrankai, jis yra mažesnis nei 1.
Antroji vieta laikrodžių konkurse
Rekomenduojamas:
FLEXBALL - šimto pikselių lankstus PCB kamuolys su „WiFi“: 6 žingsniai (su nuotraukomis)
FLEXBALL - šimtų pikselių lankstus PCB kamuolys su „WiFi“: Sveiki kūrėjai, tai gamintojas moekoe! „Flexball“yra pagrįstas lanksčia PCB, kurioje yra 100 WS2812 2020 adresuojamų šviesos diodų. Jį valdo ESP8285-01f - mažiausias ESP pagrįstas „Espressif“modulis. Be to, jis turi ADXL345 akselerometrą
„Vortex“laikrodis: „Infinity Mirror“rankinis laikrodis: 10 žingsnių (su nuotraukomis)
„Vortex Watch“: begalybės veidrodinis laikrodis: Šio projekto tikslas buvo sukurti nešiojamą begalybės veidrodžio laikrodžio versiją. Jis naudoja savo RGB šviesos diodus, norėdamas nurodyti laiką, priskirdamas valandas, minutes ir sekundes atitinkamai raudonai, žaliai ir mėlynai šviesai ir sutampa su šiais atspalviais
RGB LED pikselių atspalviai: 17 žingsnių (su nuotraukomis)
RGB LED pikselių atspalviai: Sveiki visi, šioje instrukcijoje aš jums parodysiu, kaip sukurti porą LED pikselių atspalvių. Iš pradžių sukūriau juos dėvėti aplink namus per Kalėdas / Naujuosius metus, tarsi mobilųjį papuošalą, bet galų gale jie buvo šiek tiek labiau kibernetiniai
500 LED pikselių RGB plytų: 9 žingsniai (su nuotraukomis)
500 „LED-Pixel RGB-Brick“: prieš kurį laiką aš sukūriau 10x10 LED kompensaciją su kai kuriais iš šių WS2812 šviesos diodų, tačiau net jei galima žaisti senosios mokyklos žaidimą „Snake“su prijungtu išmaniuoju telefonu, noriu kažko daugiau ypatingas. Taigi nusprendžiau į jį įtraukti dar keletą lempučių, arra
64 pikselių RGB LED ekranas - kitas „Arduino“klonas: 12 žingsnių (su nuotraukomis)
64 pikselių RGB LED ekranas - dar vienas „Arduino“klonas: šis ekranas yra pagrįstas 8x8 RGB LED matrica. Bandymo tikslais jis buvo prijungtas prie standartinės „Arduino“plokštės („Diecimila“), naudojant 4 pamainų registrus. Po to, kai pradėjau veikti, aš jį perfiksavau ant suspausto PCB. Pamainų registrai yra 8 bitų pločio ir