INHOUDSOPGAWE:

132 pixelklok: 5 stappe (met foto's)
132 pixelklok: 5 stappe (met foto's)

Video: 132 pixelklok: 5 stappe (met foto's)

Video: 132 pixelklok: 5 stappe (met foto's)
Video: IMOO WATCH PHONE Z6: Things To Know // Imoo Z6 Real Life Review 2024, November
Anonim
Image
Image
132 pixelklok
132 pixelklok

Ek het, so lank as wat ek kan onthou, 'n obsessie met LED's en tyd. In hierdie projek het ek 'n groot muurklok geskep wat die huidige tyd wys met 132 neopixel LED's wat gemonteer en deur 'n sparplank skyn. Dit is 'n hibriede analoog digitaal met 'n individuele pixel vir elke uur, minuut en sekonde.

Dit was die grootste projek wat ek tot dusver aangepak het; ek het 6 maande gelede daaraan begin dink en die idee het stadig bymekaar gekom. Ek is regtig tevrede met die uitslag en sien uit daarna om dit met u te deel.

Stap 1: Versamel voorrade en gereedskap

Versamel voorrade en gereedskap
Versamel voorrade en gereedskap
Versamel voorrade en gereedskap
Versamel voorrade en gereedskap
Versamel voorrade en gereedskap
Versamel voorrade en gereedskap
Versamel voorrade en gereedskap
Versamel voorrade en gereedskap

Komponente

Hierdie projek is gebou op 'n luukse stokperdjiebord van my plaaslike DIY -winkel. Die bord is 850 mm breed by 500 mm hoog en 18 mm diep.

Die LED's wat in hierdie projek gebruik word, is 5050 WS2812b gemonteer op sirkelvormige PCB's wat ongeveer 9 mm in deursnee is met soldeerblokkies aan die agterkant.

Ek gebruik 'n Arduino Pro Mini -verenigbare mikrobeheerder. Dit is die 5V 16 MHZ weergawe. Ek het hierdie een gekies, want dit het 'n superslanke ontwerp, klein voetafdruk en al die nodige poorte plus 'n paar ekstra vir toekomstige opgraderings. Dit is ook 5 volt, sodat ek 'n enkele kragtoevoer kan gebruik vir die LED's, mikrobeheerder en RTC

Die tydsberekening word versorg deur 'n RTC -module (Real Time Clock) met die DS3231 -chip. Hierdie chip is baie akkuraat, so die tyd moet nie te veel dryf nie.

Ook gebruik:

Draad. Soldeersel en warm gom.

Gereedskap:

Kragboor en houtboorpunte (10 mm en 5 mm)

Soldeerbout

Warm gom geweer

draadknipsels

Dremel en dompel router bykomstighede

Stap 2: Merk, boor en roetering

Merk, boor en roetering
Merk, boor en roetering
Merk, boor en roetering
Merk, boor en roetering
Merk, boor en roetering
Merk, boor en roetering

Boor

  • Gebruik 'n seestrand om die middel van die bord te vind deur 'n lyn uit teenoorgestelde hoeke te trek.
  • Merk 3 sirkels met 'n stuk tou en 'n pen. Die buitenste sirkel moet ongeveer 20 mm van die rand van die bord af wees, terwyl die ander 2 lyne 15 mm van die laaste reël inbeweeg.
  • Ek het 'n gedrukte horlosie gebruik om my te help om die posisies van elk van die minute en sekondes op die buitenste 2 reëls en ure op die binneste lyn te merk.
  • Boor 10 mm gate van ongeveer 5 mm diep vir elke uur, minuut en sekonde.
  • Gebruik die 5 mm -boor om gate, minute en sekondes deur die bord te maak.

Routering

Alhoewel hierdie stap nie nodig is nie, kan die horlosie teen 'n muur vasgemaak word.

  • Met behulp van 'n router en 'n sirkelgeleier, lei roetekanale in die bord
  • Merk 'n uitsparing vir die RTC en die mikrobeheerder om in te woon.
  • Trek 'n kanaal van die buitenste lyne na die uitsparing vir drade

Stap 3: Soveel soldate, sny en stroop

Soveel soldate, sny en stroop
Soveel soldate, sny en stroop
Soveel soldate, sny en stroop
Soveel soldate, sny en stroop
Soveel soldate, sny en stroop
Soveel soldate, sny en stroop

Hierdie volgende deel is baie makliker om te sê as om te doen. My advies is om daarop te let. probeer om 'n stelsel te vind en kry 'n ritme.

Elkeen van die LED's benodig 5 volt in, 5 volt uit, data in, data uit, grond in en grond uit. insluitend krag vir die mikrobeheerder en RTC, die meer as 400 drade, wat aan beide kante gestroop en gesoldeer is.

'N Klewerige blou stof is baie nuttig vir hierdie stap.

  • Ek het begin deur 2 LED's in hul gate langs mekaar te plaas om die lengte van die draad wat nodig is om met mekaar te verbind, uit te werk.
  • Deur die eerste stuk draad as 'n gids te gebruik, sny ek 60 van elke kleur draad.
  • Trek 2 mm mou van die punte van elke draad af en maak dit met soldeer vas.
  • Soldeer 'n klein klont soldeer op elk van die LED -pads.
  • Soldeer die drade aan die LED's om twee kettings van 60 vir die minute en sekondes te vorm en een ketting van 12 vir die ure. Ek gebruik rooi draad vir 5V, geel vir data en blou vir grond.
  • Koppel elke Data Out (DOUT) aan die Data In (DIN) van die volgende LED
  • Die laaste led in elke kettingdosis het nie 'n data -uitdraad nodig nie.

Sodra al die kettings voltooi is, is dit 'n goeie idee om dit te toets voordat u dit installeer. Ek het my Arduino UNO en die Adafruit NeoPixel Strand Test gebruik om te bevestig dat elke LED werk.

Soldeer langer drade op elk van die kettings vir 5V, grond en data in.

Op hierdie stadium behoort daar vyf 5v -drade, drie data -drade aan die Arduino Pro Mini en 5 gronddrade te wees.

Trek 5 mm van die punte van die 5v -drade af en soldeer hulle almal saam en herhaal vir die gronddrade.

Nadat die drie kettings voltooi is, soldeer 'n 5V -draad aan die RAW -pen van die Arduino Pro Mini en ook op die VCC -pen vir die RTC. 'N Aardraad na GND op die Arduino Pro Mini en RTC en dan nog 2 drade:

SCL van die RTC na A5 op die Pro Mini

SDA van die RTC tot A4 op die Pro Mini

Die data lyne van die LED's moet verbind word met:

  • Sekondes - Digitale pen 3.
  • Notule - DigitalPin 4
  • Ure - DigitalPin 5

Stap 4: Installeer

Installeer
Installeer
Installeer
Installeer
Installeer
Installeer

Sodra dit gesoldeer is, moet die installering van die LED's in hul gate reguit wees. Die LED's moet geïnstalleer word, sodat die data teen die kloksgewys rondloop as dit van agter af gekyk word, terwyl die kode van voor af opgestel word.

Ek het 'n klein hoeveelheid warm gom gebruik om dit vas te hou, want ek wil 'n enkele LED kan vervang as dit in die toekoms misluk.

Ek het ook warm gom gebruik om al die drade netjies en netjies te hou en om die vatverbinding aan die bord vas te maak.

Daar is 'n aantal arduino pro mini -programmeergidse beskikbaar. Ek gebruik die eksterne USB na reeksomskakelaarmetode om hierdie kode op die Arduino te laai:

Hierdie kode stel ook die tyd op die RTC in op die tydstip waarop dit opgestel is. Dit is dus belangrik om die oplaai -knoppie te hut sodat dit so vinnig as moontlik voldoen en oplaai.

Baie van hierdie kode is geleen van die NeoPixel Ring Clock deur Andy Doro. Sommige van die Adafruit NeoPixel Strand -toets en 'n paar wat ek saamgestel het.

U moet 'n paar biblioteke geïnstalleer het. Hulle is beskikbaar by die Libraries Manager op die Arduino -sagteware.

Die Adafruit NeoPixel vir die ws2812b LED's

Draad om met die RTC te praat oor I2C (dit is standaard ingebou)

en RTClib omdat hulle geweet het wat om aan die RTC te vra

/************************************************ ***************************NeoPixel -ringklok deur Andy Doro ([email protected]) https://andydoro.com/ringclock/ ************************************************* ***************************

hersiening Geskiedenis

Datum volgens wat

20140320 AFD Eerste konsep 20160105 AFD Verbleikte boë 20160916 AFD Trinket versoenbaar 20170727 AFD bygevoeg STARTPIXEL vir 3D -omhulsel, veranderlike beginpunt, bygevoeg outomatiese DST -ondersteuning 20180424 AFD met DST -biblioteek https://github.com/andydoro/DST_RTC *

/ sluit die biblioteekkode in:

#include #include

#insluit

// definieer penne

#define SECPIN 3 #define MINPIN 4 #define HOUPIN 5

#define BRIGHTNESS 20 // stel maksimum helderheid in

#definieer r 10

#definieer g 10 #definieer b 10 RTC_DS3231 rtc; // Vestig klokvoorwerp

Adafruit_NeoPixel stripS = Adafruit_NeoPixel (60, SECPIN, NEO_GRB + NEO_KHZ800); // strookvoorwerp

Adafruit_NeoPixel stripM = Adafruit_NeoPixel (60, MINPIN, NEO_GRB + NEO_KHZ800); // strookvoorwerp Adafruit_NeoPixel stripH = Adafruit_NeoPixel (24, HOUPIN, NEO_GRB + NEO_KHZ800); // strip object byte pixelColorRed, pixelColorGreen, pixelColorBlue; // hou kleurwaardes in

ongeldige opstelling () {

Wire.begin (); // Begin I2C rtc.begin (); // begin klok

Serial.begin (9600);

// stel pinmodes pinMode (SECPIN, OUTPUT); pinMode (MINPIN, OUTPUT); pinMode (HOUPIN, OUTPUT);

as (rtc.lostPower ()) {

Serial.println ("RTC het krag verloor, laat ons die tyd bepaal!"); // volgende reël stel die RTC op die datum en tyd waarop hierdie skets opgestel is rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))); // Hierdie reël stel die RTC met 'n eksplisiete datum en tyd, byvoorbeeld om op te stel // 21 Januarie 2014 om 03:00 sou u noem: // rtc.adjust (DateTime (2014, 1, 21, 3, 0, 0)); }

stripS.begin ();

stripM.begin (); stripH.begin (); //strip.show (); // Initialiseer alle pixels na 'af'

// opstartvolgorde

vertraging (500);

colorWipeS (stripS. Color (0, g, 0), 5); // Blou colorWipeM (stripM. Color (r, 0, 0), 5); // Blou kleurWipeH (strookH. Color (0, 0, b), 50); // Blou

vertraging (1000);

DateTime theTime = rtc.now (); // neem DST -byte secondval in ag = theTime.second (); // kry sekondes byte minute = theTime.minute (); // kry minute int hourval = theTime.hour (); uurval = uurwaarde % 12; // Hierdie klok is 12 uur, as dit 13-23 is, skakel om na 0-11`

vir (uint16_t i = 0; i <secondval; i ++) {stripS.setPixelColor (i, 0, 0, b); stripS.show (); vertraging (5); }

vir (uint16_t i = 0; i <minuteval; i ++) {stripM.setPixelColor (i, 0, g, 0); stripM.show (); vertraging (5); }

vir (uint16_t i = 0; i <hourval; i ++) {stripH.setPixelColor (i, r, 0, 0); stripH.show (); vertraging (5); }

}

leemte -lus () {

// kry tyd

DateTime theTime = rtc.now (); // neem DST in ag

byte secondval = theTime.second (); // kry sekondes

byte minuteval = theTime.minute (); // kry minute int hourval = theTime.hour (); // kry ure hourval = hourval % 12; // Hierdie klok is 12 uur, as dit 13-23 is, skakel om na 0-11`

stripS.setPixelColor (tweede waarde, 0, 0, 20); stripS.show (); vertraging (10); if (secondval == 59) {for (uint8_t i = stripS.numPixels (); i> 0; i--) {stripS.setPixelColor (i, 0, g, 0); stripS.show (); vertraging (16);}}

stripM.setPixelColor (minute, 0, g, 0);

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

stripH.setPixelColor (uurwaarde, r, 0, 0);

stripH.show (); vertraging (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 (); vertraging (83);}} // vir seriële ontfouting Serial.print (uurwaarde, DEC); Serial.print (':'); Serial.print (minute, DEC); Serial.print (':'); Serial.println (tweede waarde, DEC); }

// Vul die kolletjies een na die ander met 'n kleur

void colorWipeS (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i <stripS.numPixels (); i ++) {stripS.setPixelColor (i, c); stripS.show (); vertraag (wag); }}

void colorWipeM (uint32_t c, uint8_t wag) {

vir (uint16_t i = 0; i <stripM.numPixels (); i ++) {stripM.setPixelColor (i, c); stripM.show (); vertraag (wag); }}

ongeldig colorWipeH (uint32_t c, uint8_t wag) {

vir (uint16_t i = 0; i <stripH.numPixels (); i ++) {stripH.setPixelColor (i, c); stripH.show (); vertraag (wag); }}

Stap 5: Laaste aanraking

Image
Image
Finale aanraking
Finale aanraking

Al wat nou oorbly, is om die RTC en Micro Controller in die reses vas te maak.

Ek het die RTC -batterykant na bo aangebring, sodat ek die battery maklik kan verander indien nodig.

Koppel die 5v -drade aan die + kant van die aansluiting en die grond aan die kant

Skakel dit in!

Ek het myne aan 'n USB -batterybank gekoppel, maar 'n USB -laaier werk net so goed.

Let wel:

Die helderheid van die LED's word in die kode bepaal. Dit is laag gestel om die huidige trekking laag te hou. Op volle helderheid met al die LED's aangeskakel, kan dit byna 8 ampère trek. Met die huidige opstelling is dit minder as 1.

Uurwedstryd
Uurwedstryd
Uurwedstryd
Uurwedstryd

Naaswenner in die klokwedstryd

Aanbeveel: