Inhoudsopgave:

132 Pixel Clock - Ajarnpa (met afbeeldingen) - Ajarnpa
132 Pixel Clock - Ajarnpa (met afbeeldingen) - Ajarnpa

Video: 132 Pixel Clock - Ajarnpa (met afbeeldingen) - Ajarnpa

Video: 132 Pixel Clock - Ajarnpa (met afbeeldingen) - Ajarnpa
Video: LA24 Amoled smartwatch (google watch), Featuring a stunning 132" AMOLED high-defnition display. 2024, November
Anonim
Image
Image
132 Pixel Klok
132 Pixel Klok

Ik ben, zolang ik me kan herinneren, geobsedeerd door LED's en tijd. In dit project heb ik een grote wandklok gemaakt die de huidige tijd weergeeft met behulp van 132 neopixel-LED's die zijn gemonteerd en schijnen door een sparrenhouten bord. Het is een hybride analoog digitaal met een individuele pixel voor elk uur, minuut en seconde.

Dit was het grootste project dat ik tot nu toe heb aangenomen, ik begon er 6 maanden geleden over na te denken en het idee kwam langzaam tot stand. Ik ben erg blij met het resultaat en ik kijk er naar uit om het met jullie te delen.

Stap 1: Benodigdheden en gereedschappen verzamelen

Benodigdheden en gereedschappen verzamelen
Benodigdheden en gereedschappen verzamelen
Benodigdheden en gereedschappen verzamelen
Benodigdheden en gereedschappen verzamelen
Benodigdheden en gereedschappen verzamelen
Benodigdheden en gereedschappen verzamelen
Benodigdheden en gereedschappen verzamelen
Benodigdheden en gereedschappen verzamelen

Componenten

Dit project is gebouwd op een goedkoop hobbybord van mijn plaatselijke bouwmarkt. Het bord is 850 mm breed bij 500 mm hoog en 18 mm diep.

De LED's die in dit project worden gebruikt, zijn 5050 WS2812b gemonteerd op ronde PCB's met een diameter van ongeveer 9 mm met soldeerpads aan de achterkant.

Ik gebruik een Arduino Pro Mini-compatibele microcontroller. Het is de 5V 16 MHZ-versie. Ik heb deze gekozen omdat hij een superslank ontwerp heeft, een kleine footprint en alle noodzakelijke poorten plus wat reserve voor toekomstige upgrades. Het is ook 5 volt, dus ik kan een enkele voeding gebruiken voor de LED's, microcontroller en RTC

De tijdregistratie wordt verzorgd door een RTC-module (Real Time Clock) die is uitgerust met de DS3231-chip. Deze chip is zeer nauwkeurig, dus de tijd mag niet te veel afdwalen.

Ook gebruikt:

Draad. Soldeer en hete lijm.

Gereedschap:

Boormachine en houtboren (10 mm en 5 mm)

Soldeerbout

Heet lijmpistool

draad knipsels

Accessoires voor Dremel en invalfrees

Stap 2: Markeren, boren en frezen

Markeren, boren en frezen
Markeren, boren en frezen
Markeren, boren en frezen
Markeren, boren en frezen
Markeren, boren en frezen
Markeren, boren en frezen

Boren

  • Gebruik een rechte rand om het midden van het bord te vinden door een lijn te trekken vanuit tegenovergestelde hoeken.
  • Markeer 3 cirkels met een touwtje en een pen. De buitenste cirkel moet ongeveer 20 mm van de rand van het bord verwijderd zijn, terwijl de andere 2 lijnen 15 mm van de laatste lijn naar binnen bewegen.
  • Ik gebruikte een gedrukte wijzerplaat om me te helpen de posities van elk van de minuten en seconden op de buitenste 2 lijnen en uren op de binnenste lijn te markeren.
  • Boor gaten van 10 mm van ongeveer 5 mm diep voor elk uur, minuut en seconde.
  • Gebruik de boor van 5 mm om gaten te maken door het bord voor uren, minuten en seconden.

Routering

Hoewel deze stap niet nodig is, kan de klok vlak tegen een muur worden gemonteerd.

  • Met behulp van een router en cirkelgeleidingsroute draadkanalen in het bord
  • Markeer en leid een uitsparing voor de RTC en Micro Controller om in te leven.
  • Leid een kanaal van de buitenste lijnen naar de uitsparing voor draden

Stap 3: Zoveel soldaten, snijden en strippen

Zoveel soldaten, snijden en strippen
Zoveel soldaten, snijden en strippen
Zoveel soldaten, snijden en strippen
Zoveel soldaten, snijden en strippen
Zoveel soldaten, snijden en strippen
Zoveel soldaten, snijden en strippen

Dit volgende deel is veel gemakkelijker te zeggen dan te doen. Mijn advies zou zijn om het te haasten. probeer een systeem te vinden en in een ritme te komen.

Elk van de LED's heeft 5 volt nodig, 5 volt uit, data in, data uit, aarde in en aarde uit. inclusief voeding voor de microcontroller en RTC zijn meer dan 400 draden, allemaal gestript en aan beide uiteinden gesoldeerd.

Een kleverige blauwe substantie is erg handig voor deze stap.

  • Ik begon met het plaatsen van 2 LED's in hun gaten naast elkaar om de lengte van de draad te berekenen die nodig is om met elkaar te verbinden.
  • Met behulp van het 1e stuk draad als richtlijn knip ik vervolgens 60 van elke kleur draad.
  • Strip 2 mm kous van de uiteinden van elke draad en vertin ze met soldeer.
  • Soldeer een kleine klodder soldeer op elk van de LED-pads.
  • Soldeer de draden aan de LED's om twee kettingen van 60 te vormen voor de minuten en seconden en een ketting van 12 voor de uren. Ik gebruikte rode draad voor 5V, geel voor data en blauw voor aarde.
  • Zorg ervoor dat u elke Data Out (DOUT) verbindt met de Data In (DIN) van de volgende LED
  • De laatste led in elke kettingdosis heeft geen data-out-draad nodig.

Zodra alle kettingen zijn voltooid, is het een goed idee om ze te testen voordat u ze installeert. Ik gebruikte mijn Arduino UNO en de Adafruit NeoPixel Strand Test om te bevestigen dat elke LED werkte.

Soldeer langere draden op elk van de kettingen voor 5V, Ground en Data in.

Op dit punt moeten er vijf 5v-draden zijn, drie data-draden aangesloten op de Arduino Pro Mini en 5 aardingsdraden.

Strip 5 mm van de uiteinden van de 5v-draden en soldeer ze allemaal aan elkaar en herhaal voor de aardingsdraden.

Na het voltooien van de drie kettingen soldeert u een 5V-draad op de RAW-pin van de Arduino Pro Mini en ook op de VCC-pin voor de RTC. Een aardedraad naar GND op de Arduino Pro Mini en RTC en dan nog 2 draden:

SCL van de RTC naar A5 op de Pro Mini

SDA van de RTC naar A4 op de Pro Mini

De datalijnen van de LED's moeten aansluiten op:

  • Seconden - Digitale pin 3.
  • Minuten - DigitalPin 4
  • Uren - DigitalPin 5

Stap 4: Installeren

Installeren
Installeren
Installeren
Installeren
Installeren
Installeren

Eenmaal gesoldeerd, moet het installeren van de LED's in hun gaten eenvoudig zijn. De LED's moeten zo worden geïnstalleerd dat de gegevens tegen de klok in lopen wanneer ze vanaf de achterkant worden bekeken, aangezien de code naar voren is ingesteld.

Ik heb een kleine hoeveelheid hete lijm gebruikt om ze vast te houden, omdat ik een enkele LED wil kunnen vervangen als deze in de toekomst faalt.

Ik heb ook hete lijm gebruikt om alle draden netjes en opgeruimd te houden en om de vatconnector aan het bord te bevestigen.

Er zijn een aantal arduino pro mini-programmeergidsen beschikbaar. Ik gebruik de externe USB naar serieel converter methode om deze code op de Arduino te laden:

Deze code stelt ook de tijd op de RTC in op de tijd dat deze is gecompileerd. dus het is belangrijk om gewoon de uploadknop te sluiten, zodat deze voldoet en zo snel mogelijk uploadt.

Veel van deze code is geleend van de NeoPixel Ring Clock van Andy Doro. Sommige van de Adafruit NeoPixel Strand Test en sommige heb ik samengesteld.

U moet een paar bibliotheken hebben geïnstalleerd. Ze zijn beschikbaar via de Libraries Manager op de Arduino-software.

De Adafruit NeoPixel voor de ws2812b LED's

Draad om met de RTC te praten via I2C (dit is standaard ingebouwd)

en RTClib om te weten wat je de RTC moet vragen

/************************************************** ************************* * * NeoPixel Ring Clock van Andy Doro ([email protected]) https://andydoro.com/ringclock/ * * *************************************************** *************************

Revisiegeschiedenis

Datum door wat?

20140320 AFD Eerste versie 20160105 AFD Vervaagde bogen 20160916 Compatibel met AFD Trinket 20170727 AFD toegevoegd STARTPIXEL voor 3D-behuizing, variabel startpunt, automatische DST-ondersteuning toegevoegd 20180424 AFD met DST-bibliotheek https://github.com/andydoro/DST_RTC *

/ voeg de bibliotheekcode toe:

#include #include

#erbij betrekken

// definieer pinnen

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

#define BRIGHTNESS 20 // max. helderheid instellen

#define r 10

#define g 10 #define b 10 RTC_DS3231 rtc; // Stel klokobject vast

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

Adafruit_NeoPixel stripM = Adafruit_NeoPixel(60, MINPIN, NEO_GRB + NEO_KHZ800); // stripobject Adafruit_NeoPixel stripH = Adafruit_NeoPixel (24, HOUPIN, NEO_GRB + NEO_KHZ800); // strip objectbyte pixelColorRed, pixelColorGreen, pixelColorBlue; // bevat kleurwaarden

ongeldige instelling () {

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

Serieel.begin(9600);

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

if (rtc.lostPower()) {

Serial.println("RTC heeft geen stroom meer, laten we de tijd instellen!"); // volgende regel stelt de RTC in op de datum en tijd waarop deze schets is gecompileerd rtc.adjust(DateTime(F(_DATE_), F(_TIME_))); // Deze regel stelt de RTC in met een expliciete datum en tijd, bijvoorbeeld om // 21 januari 2014 om 03:00 uur in te stellen die u zou noemen: // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0)); }

stripS.begin();

stripM.begin(); stripH.begin(); //strip.show(); // Initialiseer alle pixels op 'uit'

// opstartvolgorde

vertraging (500);

colorWipeS(stripS. Color(0, g, 0), 5); // Blauwe colorWipeM (stripM. Color (r, 0, 0), 5); // Blauwe kleurWipeH (stripH. Kleur (0, 0, b), 50); // Blauw

vertraging (1000);

DateTime theTime = rtc.now(); // houdt rekening met DST byte secondval = theTime.second(); // krijg seconden byte minuteval = theTime.minute(); // krijg minuten int hourval = theTime.hour(); uurwaarde = uurwaarde % 12; // Deze klok is 12 uur, indien 13-23, converteer naar 0-11`

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

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

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

}

lege lus () {

// krijg tijd

DateTime theTime = rtc.now(); // houdt rekening met DST

byte secondval = theTime.second(); // krijg seconden

byte minuteval = theTime.minute(); // krijg minuten int hourval = theTime.hour(); // haal uren uurwaarde = uurwaarde % 12; // Deze klok is 12 uur, indien 13-23, converteer naar 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 (minutenwaarde, 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);} } // voor seriële foutopsporing Serial.print (hourval, DEC); Serieel.print(':'); Serial.print (minutenwaarde, DEC); Serieel.print(':'); Serial.println (tweede, DEC); }

// Vul de stippen een voor een met een kleur

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

void colorWipeM(uint32_t c, uint8_t wacht) {

for (uint16_t i = 0; i <stripM.numPixels(); i++) { stripM.setPixelColor(i, c); stripM.show(); vertraging (wacht); } }

void colorWipeH(uint32_t c, uint8_t wacht) {

for (uint16_t i = 0; i <stripH.numPixels(); i++) { stripH.setPixelColor(i, c); stripH.show(); vertraging (wacht); } }

Stap 5: laatste hand

Image
Image
Laatste puntjes op de i
Laatste puntjes op de i

Het enige dat u nu nog hoeft te doen, is de RTC en de microcontroller in de uitsparing vast te zetten.

Ik heb de RTC-batterij met de kant naar boven geplaatst, zodat ik de batterij indien nodig gemakkelijk kan vervangen.

Sluit de 5v-draden aan op de + kant van de connector en de aarde op de - kant

Zet het AAN!

Ik heb de mijne aangesloten op een USB-batterijbank, maar een USB-telefoonoplader zou net zo goed werken.

Opmerking:

De helderheid van de LED's wordt in de code ingesteld. Het is laag ingesteld om de stroomafname laag te houden. Op volledige helderheid met alle LED's verlicht, zou het bijna 8 ampère kunnen trekken. Met de huidige setup is dit minder dan 1.

Klokken wedstrijd
Klokken wedstrijd
Klokken wedstrijd
Klokken wedstrijd

Tweede plaats in de klokkenwedstrijd

Aanbevolen: