Bouwinstructies WS2812 kleurenwoordklok


Dit document om de klok zelf te maken is nog niet onafhankelijk getest.
Er kunnen dus nog onduidelijheden in aanwezig zijn.



Deze woordklok met kleuren-LED's is eenvoudiger te maken dan de woordklok met witte LED's.
Helaas laten de kleuren van de LEDs zich niet goed fotograferen. In werkelijkheid zijn deze veel briljanter.
De WS2812 kleuren-LED's bevatten ieder een kleine processor waardoor de hele keten van LEDs met n draad zijn aan te sturen.
In dit voorbeeld word een Arduino Nano gebruikt maar een Arduino UNO of zelfs een Arduino mini van enkele Euro's knne ook gebruikt worden.



De kleurenwoordklok bestaat uit onderstaande onderdelen zoals in de tabel is weergegeven.
De woordklokonderdelen zijn voor 23x23cm en 30x30cm woordplaten ontworpen.
In de tabel staan de prijzen waarvoor je de onderdelen bij mij als zelfbouwpakket kan bestellen.
De kast, woordplaat en spacer worden door een timmerman en beletteraar met de hand gemaakt.
Ze zijn uniek maar zijn daarmee een aanzienlijke kostenpost. Zelf de kast maken is een uitdaging.
Kasten kunnen van diverse soorten hardhout gemaakt worden of van MDF zodat ze in een gewenste kleur te verven zijn.
De bouwtijd van een klok is 20 - 30 uur.

Mirien Thomaha
Frontplaat Font Mirien Frontplaat Font Thomaha

Benodigdheden
Soldeerbenodigdheden
Multimeter


Onderdelen   Prijs
1 x Kast van hardhout of MDF op maat gemaakt door de meubelmaker. kast € 80,00
1 x Woordplaat 30x30cm met font Mirien of font Thomaha. Vinyl op ontspiegeld glas 2 mm dik. woordplaat € 60,00
1 x Spacerplaat, geschuimd PVC wit 10 MM RAL 9003, incl gaten spacerplaat € 30,00
1 x Verlichtingsgrondplaat 3 x 300 x 300 mm MDF-plaat   € 3,00
Arduino Nano   € 20,00
Printplaat V03 PCB € 15,00
1 x RCT DS3231 Precisie klok module ZS-042 DS3231 € 5,00
1 x CR 2032 3V lithium batterij Batterij € 3,00
1 x Dupont-kabel vrouw-vrouw 20-aderig Dupont € 3,00
2 x pinheader 40 pins haaks pinheader € 1,50
1 x KY-040 Keyes Rotary Encoder KY-040 Keyes Rotary Encoder € 2,00
1 x lichtsensor Lichtsensor € 0,85
1 x 22 kOhm weerstand 22kO weerstand € 0,15
1 x 1000 µF condensator 1000 F condensator € 0,25
1 x 470 Ohm weerstand 470O weerstand € 0,15
1 x Adapter 5V gelijkstroom, 2 Ampere (dan geen 220V in de klokkast) Voeding € 10,00
1 x Voeding 5V gelijkstroom 2 Ampere Voeding220V € 10,00
1 x Stroom Aansluitkabel Euro-stekker – Kabel, open einde Zwart 1.50 m   € 2,00
1 x 2 m wire wrapping 30 AWG = 0.05 mm2 rood   € 0,20
1 x 2 m wire wrapping 30 AWG = 0.05 mm2 zwart   € 0,20
1 x 2 m wire wrapping 30 AWG = 0.05 mm2 geel   € 0,20
1 x 50 cm zwart-rood voedingskabel (0.14 mm2)   € 0,20
1 x set krimpkous 100 cm x 1.5 mm diam + 10 cm x 5 mm diam Krimpkous € 3,00
100 Leds (60 LEDs/m) WS2812B Full color led strip WS2812 € 40,00
Optioneel    
Wireless Serial 6 Pin Bluetooth RF Transceiver Module HC05 (Android, W10) HC05 BT € 10,00
Wireless Serial 6 Pin Bluetooth RF Transceiver Module HM10 (voor Iphone, IPad) HM10 BT € 10,00
DCF77 DCF-2 module DCF-2 € 20,00




De verlichtinggrondplaat in elkaar zetten

Detail solderen

De afstand tussen de LEDs op de strip zijn net te kort bij een 30 x 30 cm klok om over meer dan drie letters te plakken.
(Als een 23 x 23 cm klok gemakkt wordt past de LED-strip precies.)
Ik knip de LED-strip daarom in stukjes van 2 of 3 LEDs en verdeel deze stukjes over de woorden.
Dan worden de LED's voor een woord aan elkaar gesoldeerd met korte stukje draad. (Zie foto hierboven)
Het is wel wat meer soldeerwerk. Misschien hoeft het niet en kan de strip over woorden van 5 letters of meer geplakt worden.
Maar de kans bestaat dat de zijkanten van het woord wat micer goed oplichten.

Plak de strips van links naar rechts op de oneven regels en van rechts naar links over de even regels. Volg de pijltjes op de strip.
Dit voorkomt straks lange draden om de signaaldraad naar de volgende regel te leiden. (zie foto "Voorkant" hieronder)
Tip. Controleer na het solderen van de eerste regel (HET IS WAS) of de LED's met het testprogramma hieronder goed werken. Doe dit na elke regel weer.
Lees daarom de rest van dit hoofdstuk. Er zijn LED-strips waar het onduidelijk is wat Signaalingang is. 

Breng soldeer aan op de LED-stripaansluiting en soldeer later de draad in de solderklodder. Gebruik soldeerver of soldeerwater als de soldeer niet goed hecht aan het koper.
 
Er gaat bij volle belasting redelijk veel stroom (2A) lopen. Als je alle strips achter elkaar gaat door verbinden loopt er bij de eerste LEDs veel stroom en moet de draad dik zijn.
Ik maak per twee regels een aansluiting vanaf de voedingsdraad met 30AWG = 0.25mm diameter. 30AWG-draad kan 0.9 A stroom verdragen. Als je de voedingsdraden van begin tot einde doorlust is AWG26 = 0.4 mm diameter draad nodig. Zorg er uiteindelijk voor dat elke strip zijn voeding heeft.
Boor gaatjes naast de aansluiting op de strips en verbind aan de achterkant door. Op de voorkant komt de spacerplaat te liggen en deze moet plat op het papier liggen om lichtlekkage te voorkomen. Dus niet de draden tussen de letter over de bovenkant doorverbinden.
Ld op bord achterkant
Voorkant Achterkant na bedraden. (Het kan netter.)

In de signaaldraad tussen LED_PIN 5 (D5) en de WS2812 LED-aansluiting Di zit een 470 Ohm weerstand.
Over de GND en 5V naar de LED-strip zit een 1 mF (1000 uF) condensator om de inschakelspanning te dempen.
De LED's werken wel zonder deze twee componenten (onrush preventer) maar kunnen beschadigd raken.
Het onrush preventer schema staat hieronder.
Je kan alle componenten natuurlijk direct op de pennen van de Arduino Nano aansluiten.
Er is ook een PCB waar alles op gesoldeerd kan worden. Deze printplaat kan ook gebruikt worden voor de fibonacciklok.

Onrush PCB V03
PCB V03
   
In kast In kast detail
De aansluitingen in de kast Aansluitingen op de Arduino Nano
   

Sluit de onderdelen aan.
Ik heb een verdeelkastje gemaakt voor de 5V en GND aansluitingen waarop ook de condensator is aangesloten.

Let op de Rotary encoder-aansluiting A2 is in deze softwareversie verhuisd naar A8.
Hieronder een opsomming van de aansluitingen op de Arduino

// digitale poortaansluitingen  D2 - D13
DCF_PIN     = 2,    // DCFPulse on interrupt pin connected to DCF77 module

encoderPinA = 3,    // Rotary right (labeled DT on decoder)on interrupt pin
clearButton = 4,    // Rotary switch (labeled SW on decoder)
LED_PIN     = 5,    // Pin to control colour 2811/2812 leds
BT_RX       = 6,    // Bluetooth RX, Connect to Bluetooth TX
BT_TX       = 7,    // Bluetooth TX, Connect to Bluetooth RX
encoderPinB = 8,    // Rotary left (labeled CLK on decoder)no interrupt pin
EmptyD09    = 9,    // EmptyD09
DCF_LED_Pin = 10,   // pin for LED to display pulse received from DCF77 module
PWMpin      = 11,   // pin for LED to display intensity read from LDR
EmptyD10    = 10,   // EmptyD10
EmptyD11    = 11,   // EmptyD11
EmptyD12    = 12,   // EmptyD12
secondsPin  = 13,


// digitale poortaansluitingen A0 -A5
PhotoCellPin = 2,   // LDR pin
EmptyA3      = 3,   // EmptyA3
SDA_pin      = 4,   // SDA pin van de klok DS3231
SCL_pin      = 5};  // SCL pin van de klok DS3231

 

Verlichtingsplaat Om de plaat te testen kan het testprogramma hieronder gebruikt worden.

Hiervoor dient eerst de WS2812 library in de Arduino IDE geinstalleerd te worden. https://github.com/cpldcpu/light_ws2812
Er zijn ook libraries zoals FASTLED en Neopixel van Adafruit maar deze zijn een overkill voor ons gebruik.
Verder krijg ik met de FastLed en Neopixel libraries niet een mooie witte kleur. Dat lijkt in deze kleine library beter te lukken. Waarschijnlijk omdat er minder te kiezen en corrigeren valt.

De site Tweaking4all geeft een heldere uitleg over de werking van de WS2812 kleuren-LEDs en het gebruik van deze laatste twee libraries.
   


Testprogramma
#include <WS2812.h>
#define LEDCount 92
#define outputPin 5
#define secondsPin 13 // we want something seen happening on the Arduino
static unsigned long msTick; // the number of millisecond ticks since we last incremented the second counter
static unsigned long SyncLEDs;
WS2812 LED(LEDCount);
byte hue;
byte base;
void setup()
{
 pinMode(secondsPin, OUTPUT );
 LED.setOutput(outputPin);
 LED.setBrightness(127); // half intensity
}

void loop()
{
 if (millis() - msTick > 50) digitalWrite(secondsPin,LOW); // Turn OFF the second on pin 13
 if (millis() - SyncLEDs > 100)
 {
  hue=0;
  for (int i = 0; i < LEDCount; i++) LED.setHSV(i, ++hue + base, 255,255);
  SyncLEDs = millis();
  LED.sync(); // sync the LEDs
  base++;
 }
 if (millis() - msTick > 999)     // Flash the onboard Pin 13 Led so we know something is happening
 {
  msTick = millis(); // second++;
  digitalWrite(secondsPin,HIGH);  // turn ON the second on pin 13
 }
}

Plakken, solderen en testen maar.

Geen paniek als het niet meteen werkt. Het zijn, bijna, altijd draadbreuken of slechte solderingen die de storing veroorzaken.

De klok in elkaar zetten

Het is handig om de onderdelen van de klok met papier afplakband vast te plakken. Dit plakband komt makkelijk los.
Plak de verlichtingsplaat en spacer aan elkaar vast.
Plak over de spacer een wit vel papier. Bij een 30x30 cm klok is een A3-vel nodig of twee aan elkaar geplakte A4-tjes. Zorg en dan voor dat het plakbank niet door de letters te zien is. Het papier geeft een mooie tekening aan de verlichte letters. Gebruikt niet te goedkoop papier. Mogelijk dat dit op de duur verkleurd.
Leg de woordplaat over het papier en fixeer deze ook met plakband.
Bij een hardhouten klok wordt, afhankelijk van de uitvoering, de woordplaat in de sleuf in de kast geschoven. Monteer daarna de vierde, onderkant van de kast. Verlijm dit of plak het met plakbank tijdelijk vast. Zie: “Ontwerp kast 30 cm-klok”.
Als alles goed gelabeld is kunnen de klok, rotary encoder, LDR, voeding aangesloten worden.
Monteer de kast af.


Bluetooth-verbinding

Met de HC05 Bluetooth-module kan er een Bluetooth-verbinding met de klok gemaakt worden.
In onderstaande link staat beschreven aan welke pins de module aangesloten en hoe de naam van de module aangepast wordt.
Met een Bluetooth-terminal app op de telefoon kan de tijd als hhmmss of hhmm naar de klok gestuurd worden.
De klok stuurt elke minuut gegevens, naar de terminal app terug.
Voor Windows phone, Android en Iphone zijn Bluetooth terminal apps te vinden.
De Bluetooth terminalprogramma’s zijn ook voor PC’s te vinden

Bluetooth module HC-05/ZS-040
Verbind VCC en GND, pin 6 aan de TXD en pin 7 aan RXD van de Bluetooth-module.
Laad de volgende sketch om tussen de Arduino en de Bluetoothmodule te kunnen communiceren.
-------------------------
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(6, 7); // RX | TX
void setup()
{
 pinMode(9, OUTPUT);     // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode
 digitalWrite(9, HIGH);
 Serial.begin(9600);
 Serial.println("Enter AT commands:");
 BTSerial.begin(38400); // HC-05 default speed in AT command more
}

void loop()
{
                       // Keep reading from HC-05 and send to Arduino Serial Monitor
 if (BTSerial.available())
 Serial.write(BTSerial.read());

                       // Keep reading from Arduino Serial Monitor and send to HC-05
 if (Serial.available())
 BTSerial.write(Serial.read());
}
---------------------------------
Ontkoppel de Arduino van de USB-kabel zodat de Arduino en Bluetoothmodule spanningsloos zijn geworden.
Leg een draadje tussen de 5V van de Arduino en pin 34. (rechtsboven in de Bluetooth-module als de pinnen naar beneden wijzen. Zie foto).
Sluit de Arduino weer op de PC aan en open de serial monitor in de Arduino software. (icoon rechtsboven onder X (kruisje))
De rode LED op de Bluetooth-module gaat nu langzaam 2sec aan, 2 sec uit, knipperen

Tik in:
AT ? OK
AT+NAME=ED-KLOK
AT+RESET

Default passkey = 1234
--------------------------
Here is an important note, if the key pin is not high, i.e. not connected to Vcc while receiving AT commands(if you did not solder the wire and released it after the module entered AT mode), it will not show the default name even after giving right command. But you can still change the name by the command mentioned above. To verify if the name has really changed, search the device from your pc/mobile. The changed name will appear. To change baud rate, type AT+UART=desired baud rate. Exit by sending AT+RESET command.
Most useful AT commands are
AT : Check the connection.
AT+NAME : See default name
AT+ADDR : see default address
AT+VERSION : See version
AT+UART : See baud rate
AT+ROLE: See role of bt module(1=master/0=slave)
AT+RESET : Reset and exit AT mode
AT+ORGL : Restore factory settings
AT+PSWD: see default password
--------------------------------


BT moduleArduino
De Bluetooth-module communiceert tussen RX en TX met 3.3V.
Het is mogelijk om hem direct op de Arduino-poorten aan te sluiten maar het verlengt de levensduur van de module als de spanning naar 3.3V wordt verlaagd.
Dit kan met een 3.3V-5V TTL Level Logic Level Converter module, of met een “voltage divider”-schakeling zoals hieronder weergegeven.
Je kan de weerstanden in de bedrading van de module naar de printplaat monteren.

Schema BT

Bluetooth met de HM10 BLE voor Apple IOS
Met deze HM10 BLE module kan gecommuniceerd worden met Apple IOS.
Er moet dan wel met BLE connector of scanner (App store) contact worden gemaakt. (mij nog onduidelijk waarom)
Daarna kan met een serial terminal programma (HM10 Bluetooth serial light) commando's worden overgestuurd en de klokuitvoer opgevangen worden.
Gekoppeld via een FTDI kan met de Arduino serial monitor met de Bluetooth-module AT commandos gegeven worden.
Zie vorige paragraaf voor AT commandos
AT+NAMEnieuwenaam geeft de module de naam: nieuwenaam

HM-10 BT

DCF77-ontvangst met DCF-2 module

DCF-2
Helaas storen de IC's in de kleuren-LED's de DCF-ontvangst enorm. Zelfs op een paar meter afstand wordt de ontvangst te veel gestoord.
Met deze kleuren-LEDs moet de DCF ontvangstmodule dus een paar meter van de klok opgehangen worden

Deze DCF77-module heeft drie aansluitingen; +, - en signal.
Sluit de + aan op 5V en de - op GND.
Signal gaat naar pin 2.
NB Pin 2 werd gebruikt voor de rotary encoderPinB left (labeled CLK on decoder). Deze wordt nu aangesloten op P8.
(Pin 2 is een interrupt pin. Voor een optimale DCF-ontvangst is het reageren op een interrupt noodzakelijk voor de rotary encoder niet.
Kijk in de source van de versie van de software onder "PIN assigments" voor de juiste aansluiting. over DCF
Hier wat achtergrondinformatie over DCF.

Energieverbruik klok

De 30x30 cm klok verbruikt bij 5V met 96 WS2812 LEDs op halve sterkte 0.65A. ??
Bij volle sterkte loopt het verbuik naar 200 mA?? op.
Bij het starten, als even LEDs even branden, is het verbruik tussen de 200 en 250mA.

Bovenstaande moet nog gecontroleerd worden!

Source code

De source code om de klok aan te sturen is te gebruiken voor de Arduino Nano Uno en mini.
Tevens kan deze ook voor het andere project gebruikt worden met de ATMEGA1284 processor
Character_Colour_Clock_WS2812_1284-328-V023.ino

Software

Light weight library to control WS2811/WS2812 based LEDS and LED Strings for 8-Bit AVR microcontrollers.

https://github.com/cpldcpu/light_ws2812


 <- Startpagina

Ed Nieuwenhuys
December 2017