Innehållsförteckning:

132 pixelklocka: 5 steg (med bilder)
132 pixelklocka: 5 steg (med bilder)

Video: 132 pixelklocka: 5 steg (med bilder)

Video: 132 pixelklocka: 5 steg (med bilder)
Video: Падающие Плитки на Galaxy Watch 5, Watch 4, Google Pixel и часах на Wear OS 2024, November
Anonim
Image
Image
132 pixelklocka
132 pixelklocka

Jag har, så länge jag kan minnas, varit besatt av lysdioder och tid. I detta projekt har jag skapat en stor väggklocka som visar den aktuella tiden med hjälp av 132 neopixel -lysdioder monterade och lysande genom en granbräda. Det är en hybrid analog digital med en individuell pixel för varje timme, minut och sekund.

Detta var det största projektet jag har tagit på hittills, jag började tänka på det för 6 månader sedan och idén kom långsamt ihop. Jag är verkligen nöjd med resultatet och jag ser fram emot att dela det med dig.

Steg 1: Samla förbrukningsmaterial och verktyg

Samla tillbehör och verktyg
Samla tillbehör och verktyg
Samla tillbehör och verktyg
Samla tillbehör och verktyg
Samla tillbehör och verktyg
Samla tillbehör och verktyg
Samla tillbehör och verktyg
Samla tillbehör och verktyg

Komponenter

Detta projekt är byggt på en tuff hobbybräda från min lokala byggvaruhus. Skivan mäter 850 mm bred med 500 mm hög och 18 mm djup.

Lysdioderna som används i detta projekt är 5050 WS2812b monterade på cirkulära kretskort som är cirka 9 mm i diameter med lödkuddar på baksidan.

Jag använder en Arduino Pro Mini -kompatibel mikrokontroller. Det är 5V 16 MHZ -versionen. Jag valde den här eftersom den har en superslank design, små fotavtryck och alla nödvändiga portar plus lite extra för framtida uppgraderingar. Det är också 5 volt så jag kan använda en enda strömförsörjning för lysdioderna, mikrokontrollen och RTC

Tidshållningen sköts av en RTC -modul (Real Time Clock) som har DS3231 -chipet. Detta chip är mycket exakt så tiden ska inte driva för mycket.

Används även:

Tråd. Lödning och varmt lim.

Verktyg:

Kraftborr och träborr (10 mm och 5 mm)

Lödkolv

Lim pistol

trådklipp

Dremel och dyka tillbehör

Steg 2: Märkning, borrning och dirigering

Märkning, borrning och dirigering
Märkning, borrning och dirigering
Märkning, borrning och dirigering
Märkning, borrning och dirigering
Märkning, borrning och dirigering
Märkning, borrning och dirigering

Borrning

  • Med hjälp av en sundkant hittar du mitt på brädet genom att dra en linje från motsatta hörn.
  • Markera 3 cirklar med en tråd och en penna. Den yttersta cirkeln ska vara cirka 20 mm från brädans kant med de andra 2 linjerna som rör sig in med 15 mm från den sista raden.
  • Jag använde en tryckt urtavla för att hjälpa mig att markera positionerna för var och en av minuterna och sekunderna på de yttre 2 raderna och timmarna på den inre raden.
  • Borra 10 mm hål ca 5 mm djupa för varje timme, minut och sekund.
  • Använd 5 mm borr för att göra hål genom brädan i timme, minut och sekund.

Routing

Även om detta steg inte är nödvändigt kan klockan monteras i en vägg.

  • Använd en router och cirkelguide för att leda trådkanaler i kortet
  • Markera och lägg en urtag för RTC och Micro Controller att bo i.
  • Dra en kanal från de yttre linjerna till urtagningen för ledningar

Steg 3: Så mycket soldatering, skärning och strippning

Så mycket soldatering, skärning och strippning
Så mycket soldatering, skärning och strippning
Så mycket soldatering, skärning och strippning
Så mycket soldatering, skärning och strippning
Så mycket soldatering, skärning och strippning
Så mycket soldatering, skärning och strippning

Denna nästa del är mycket lättare att säga än att göra. Mitt råd är att notera att skynda på det. försök hitta ett system och komma in i en rytm.

Var och en av lysdioderna behöver 5 volt in, 5 volt out, Data in, Data out, Ground in och Ground out. inklusive ström till mikrokontrollen och RTC dess över 400 ledningar, alla avskalade och lödda i båda ändar.

En klibbig blå substans är mycket användbar för detta steg.

  • Jag började med att placera 2 lysdioder i sina hål bredvid varandra för att räkna ut längden på ledningen som behövs för att ansluta till varandra.
  • Med den första tråden som vägledning klippte jag sedan 60 av varje färgtråd.
  • Ta bort 2 mm hylsa från ändarna på varje tråd och tenn dem med löd.
  • Löd en liten klot lödning på var och en av LED -plattorna.
  • Löd ledningarna till lysdioderna för att bilda två kedjor på 60 för minuter och sekunder och en kedja med 12 för timmarna. Jag använde röd tråd för 5V, gul för data och blå för mark.
  • Var noga med att ansluta varje Data Out (DOUT) till Data In (DIN) på nästa LED
  • Den sista ledningen i varje kedjedos behöver inte en datatråd.

När alla kedjor är klara är det en bra idé att testa dem innan du installerar dem. Jag använde min Arduino UNO och Adafruit NeoPixel Strand Test för att bekräfta att varje lysdiod fungerade.

Löd längre kablar på var och en av kedjorna för 5V, jord och data in.

Vid denna tidpunkt bör det finnas fem 5v -ledningar, tre datakablar anslutna till Arduino Pro Mini och 5 jordledningar.

Ta bort 5 mm från ändarna på 5V -trådarna och löd dem alla tillsammans och upprepa för jordtrådarna.

Efter att ha slutfört de tre kedjorna löds en 5V -kabel till RAW -stiftet på Arduino Pro Mini och även på VCC -stiftet för RTC. En jordkabel till GND på Arduino Pro Mini och RTC och sedan ytterligare 2 trådar:

SCL från RTC till A5 på Pro Mini

SDA från RTC till A4 på Pro Mini

Datalinjerna från lysdioderna bör anslutas till:

  • Sekunder - Digital Pin 3.
  • Protokoll - DigitalPin 4
  • Timmar - DigitalPin 5

Steg 4: Installera

Installera
Installera
Installera
Installera
Installera
Installera

När de är lödda ska installationen av lysdioderna i sina hål vara rakt fram. Lysdioderna måste installeras så att data går runt motsols när man tittar på det bakifrån när koden är inställd framåt.

Jag använde en liten mängd varmt lim för att hålla dem nere eftersom jag vill kunna byta ut en enda lysdiod om den misslyckas i framtiden.

Jag använde också varmt lim för att hålla alla trådar snygga och städa och för att fixera fatkontakten till brädet.

Det finns ett antal arduino pro mini programmeringsguider tillgängliga. Jag använder den externa USB till serieomvandlarmetoden för att ladda den här koden till Arduino:

Denna kod kommer också att ställa in tiden på RTC till den tid då den kompilerades. så det är viktigt att bara stänga uppladdningsknappen så att den följer och laddar upp så snabbt som möjligt.

Mycket av denna kod lånades från NeoPixel Ringklocka av Andy Doro. Några från Adafruit NeoPixel Strand Test och några som jag satte ihop.

Du måste ha installerat några bibliotek. De är tillgängliga från Libraries Manager på Arduino -programvaran.

Adafruit NeoPixel för ws2812b lysdioder

Kabel för att prata med RTC över I2C (detta är inbyggt som standard)

och RTClib för att veta vad de ska fråga RTC

/************************************************* ***************************NeoPixel ringklocka av Andy Doro ([email protected]) https://andydoro.com/ringclock/ ************************************************** ***************************

revisionshistorik

Datum efter vad

20140320 AFD Första utkastet 20160105 AFD Faded bågar 20160916 AFD Trinket -kompatibel 20170727 AFD tillagd STARTPIXEL för 3D -hölje, variabel utgångspunkt, tillagt automatisk DST -stöd 20180424 AFD med DST -bibliotek https://github.com/andydoro/DST_RTC *

/ inkludera bibliotekskoden:

#inkludera #inkludera

#omfatta

// definiera stift

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

#define BRIGHTNESS 20 // ställ in max ljusstyrka

#define r 10

#define g 10 #define b 10 RTC_DS3231 rtc; // Upprätta klockobjekt

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

Adafruit_NeoPixel stripM = Adafruit_NeoPixel (60, MINPIN, NEO_GRB + NEO_KHZ800); // stripobjekt Adafruit_NeoPixel stripH = Adafruit_NeoPixel (24, HOUPIN, NEO_GRB + NEO_KHZ800); // strip objekt byte pixelColorRed, pixelColorGreen, pixelColorBlue; // håller färgvärden

void setup () {

Wire.begin (); // Börja I2C rtc.begin (); // startklocka

Serial.begin (9600);

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

if (rtc.lostPower ()) {

Serial.println ("RTC förlorade ström, låt oss ställa in tiden!"); // följande rad anger RTC till datum och tid då denna skiss sammanställdes rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))); // Denna rad anger RTC med ett tydligt datum och tid, till exempel för att ställa in // 21 januari 2014 klockan 03.00 skulle du ringa: // rtc.adjust (DateTime (2014, 1, 21, 3, 0, 0)); }

stripS.begin ();

stripM.begin (); stripH.begin (); //strip.show (); // Initiera alla pixlar till 'av'

// startsekvens

fördröjning (500);

colorWipeS (stripS. Color (0, g, 0), 5); // Blå colorWipeM (stripM. Color (r, 0, 0), 5); // Blå colorWipeH (stripH. Color (0, 0, b), 50); // Blå

fördröjning (1000);

DateTime theTime = rtc.now (); // tar hänsyn till DST byte secondval = theTime.second (); // få sekunder byte minuteval = theTime.minute (); // få minuter int hourval = theTime.hour (); timval = timvärde % 12; // Denna klocka är 12 timmar, om 13-23, konvertera till 0-11 '

för (uint16_t i = 0; i <secondval; i ++) {stripS.setPixelColor (i, 0, 0, b); stripS.show (); fördröjning (5); }

för (uint16_t i = 0; i <minuteval; i ++) {stripM.setPixelColor (i, 0, g, 0); stripM.show (); fördröjning (5); }

för (uint16_t i = 0; i <hourval; i ++) {stripH.setPixelColor (i, r, 0, 0); stripH.show (); fördröjning (5); }

}

void loop () {

// få tid

DateTime theTime = rtc.now (); // tar hänsyn till sommartid

byte secondval = theTime.second (); // få sekunder

byte minuteval = theTime.minute (); // få minuter int hourval = theTime.hour (); // få timmar hourval = hourval % 12; // Denna klocka är 12 timmar, om 13-23, konvertera till 0-11 '

stripS.setPixelColor (secondval, 0, 0, 20); stripS.show (); fördröjning (10); if (secondval == 59) {för (uint8_t i = stripS.numPixels (); i> 0; i--) {stripS.setPixelColor (i, 0, g, 0); stripS.show (); fördröjning (16);}}

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

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

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

stripH.show (); fördröjning (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);}} // för seriell felsökning Serial.print (hourval, DEC); Serial.print (':'); Serial.print (minuteval, DEC); Serial.print (':'); Serial.println (secondval, DEC); }

// Fyll prickarna en efter en med en färg

void colorWipeS (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i <stripS.numPixels (); i ++) {stripS.setPixelColor (i, c); stripS.show (); fördröjning (vänta); }}

void colorWipeM (uint32_t c, uint8_t wait) {

för (uint16_t i = 0; i <stripM.numPixels (); i ++) {stripM.setPixelColor (i, c); stripM.show (); fördröjning (vänta); }}

void colorWipeH (uint32_t c, uint8_t wait) {

för (uint16_t i = 0; i <stripH.numPixels (); i ++) {stripH.setPixelColor (i, c); stripH.show (); fördröjning (vänta); }}

Steg 5: Sista handen

Image
Image
Sista handen
Sista handen

Allt som ska vara kvar nu är att fixa ner RTC och Micro Controller ner i urtaget.

Jag har monterat RTC -batterisidan uppåt så att jag enkelt kan byta batteri vid behov.

Anslut 5v -kablarna till + sidan av kontakten och marken till - sidan

Starta den!

Jag har min ansluten till en USB -batteribank men en USB -telefonladdare skulle fungera lika bra.

Notera:

Lysdiodernas ljusstyrka anges i koden. Den har ställts in för att hålla den nuvarande dragningen låg. Vid full ljusstyrka med alla lysdioder tända kan den dra nästan 8 ampere. Med den nuvarande installationen är det mindre än 1.

Tävlingar
Tävlingar
Tävlingar
Tävlingar

Tvåan i tävlingen

Rekommenderad: