De Fibonacci-klok met SK6812 of WS2812 kleuren-LED's

Fibonacci wand

Naar Start   English version

De Fibonacci-klok was een kick-starterproject van Philippe Chrétien.

Wat deze klok zo aantrekkelijk maakt is zijn eenvoud, de vindingrijkheid en de voortdurend veranderende Mondriaan-gelijkende schilderijen-display.
Mondriaan was ook op zoek naar eenvoud in zijn schilderijen dat begon bij realisme en via kubisme bij zijn kermerkende stijl eindigde.
Naast het kleurenspel nodigt deze klok uit tot het narekenen van de gepresenteerde tijd.
Maar een klok? En wat heeft Fibonacci met Mondriaan te maken?

fibonacci-12h

Rood + Blauw = uur, (Geel + Blauw) x 5 = minuten.

5 + 3 = 8 uur, 1 + 3 = 4, 4 x 5 = 20 minuten
Het is 8:20, tien voor half negen

Lay-out

 

En dit is alles wat er nodig is

Fibonacci was een Italiaanse wiskundige die de naar hem genoemde getallenreeks ontwikkelde.
Het was niet een normale getallenreeks maar een die ook vaak in natuurlijke processen voorkomt. Bijvoorbeeld in zonnebloemen en schelpen.

De reeks is simpel. Elk volgende getal in de reeks is de som van de twee voorgaande: 1, 1, 2, 3, 5, 8, ....
Als wij 1, 1, 2, 3, 5, 8 optellen komen wij op 12. Ah, precies het aantal uren in een dagdeel en 12 vermenigvuldigt met 5 is het aantal minuten in een uur.
Voorbeeld: 4 uur. Dat kan een optelsom zijn van : 1+1+2 of 1+3.
Voorbeeld: 8 uur. Dat kan bereikt worden met het optellen van 1+1+2+4, of 1+3+4 of 3+5.

De display van de klok is een weergave van de Fibonacci-reeks en de oppervlakte van de vlakken is de verhouding van de oppervlakte in de reeks.

In de klok op de foto hier boven is de waarde van het gele vlakje 1, de witte vlakken 1 en 2, het blauwe vlak 3 en het rode vlak 5 waard.

Wat de klok doet is de verlichting aanzetten achter de vlakken die opgeteld moeten gaan worden.

Om de uren en minuten te combineren wordt een derde kleur, blauw, gebruikt.
De rode vlakken zijn de uren.
De gele vlakken vermenigvuldigd met 5 zijn de minuten
en de blauwe vlakken als er een rode en gele hetzelfde vlak bezetten.
De witte vlakken betekent nul, dus die vergeten met optellen.

Als het nu duizelt is het goed. Nog een voorbeeld.
3:35. dat zijn drie rode (uren) vlakken en 35/5 = 7 gele (minuten) vlakken.
Drie kan je maken met het 1 vlak + 2 vlak of alleen met het 3 vlak.
Zeven kan zijn 1 + 1 + 5 of 2 + 5 of 1 + 1 + 2 + 3.
3:35 tot en met 3:39 geven dezelfde 7-minutenvlakken maar de kloksoftware probeert elke minuut een andere combinatie te vinden.
Dit gaat random dus het kan zijn dat hij weer dezelfde combinatie vindt en niet verspringt.

Nog een voorbeeld: 5 rood + 5 blauw = 10 uur. 1 geel + 5 blauw = 6 * 5 = 30 minuten. 10:30
Fibinacciclock

Een variatie van deze klok is de Fibonacci-stokklok.

Deze stokklok heeft eenvoudigde software dat ook goed te gebruiken is om de kastklok te maken.

Fibonaccistick

De software, die hieronder te downloaden is, heeft nog 8 andere kleurthema's.
Het programma wordt met de Arduino IDE in een Arduino Nano geladen. De software stuurt de juiste signalen naar de WS2812 of SK6812 LED's.

Dick heeft een eigen handleiding geschreven en die vind je hier.
De beschrijving van de Fibonaccistickklok gaat dieper in op de software en dergelijke.

Fibinacciclock housing
 
The casing building blocks

Eerst moet een kast gemaakt worden. In dit voorbeeld een kast van 10 x 10 x 20 cm. Het begin van de Fibonacci-reeks.

Van de vele variaties die ik gemaakt heb is heeft uitvoering deze de mooiste verhoudingen een grootte voor een huiskamer.
Maak hierin de compartimenten waarin de LEDs komen te liggen en dat voorkomt dat het licht naar een ander compartiment verstrooid.
Schilder alles binnen in een compartiment wit anders komt de bruine kleur terug als de LEDs wit licht geven.
Wit perspex van 2 mm dik werkt mooi als voorkant. Bij 3 mm perspex verstrooit het licht te veel naast het naastliggende compartiment.
De kaders van de segmenten kan met zwarte viltstift of zwarte tape op het perspex geaccentueerd worden.

Fibinacciclock

grondplaatgrondplaat

grondplaatgrondplaat

Hardware

Er is hardware over van mijn project dat je kan aanschaffen voor de prijzen in de tabel
Mocht je niet willen programmeren dan kan de software op de Arduino Nano gezet worden.

   
Prijs Euro
Arduino Nano  
€ 20,00
2 x 15-pin female sockets  
€ 0,50
Printplaat voor Fibonnacci-klok printFibo
€ 15,00
1 x RCT DS3231 Precisieklokmodule ZS-042 rtc
€ 5,00
1 x CR 2032 3V lithium batterij cr2032
€ 3,00
1 x Dupont-kabel vrouw-vrouw 20-aderig draad
€ 3,00
2 x 6-pin female socket connector 6-pinsocketfemale
€ 1,50
1 x  KY-040 Keyes Rotary Encoder rotary
€ 2,00
1 x lichtsensor LDR
€ 0,85
1 x 22kΩ weerstand 22kOhm
€ 0,15
1 x 1000 µF condensator condensator
€ 0,25
1 x 470Ω + 1.1kΩ en 2.2kΩ weerstand 470 ohm
€ 0,50
1 x Voeding 5V gelijkstroom 2 Ampere  
€ 15,00
1 x 50 cm zwart-rood voedingskabel (0.14 mm2)  
€ 0,20
1 x set krimpkous 20 cm x 1.5 mm diam + 10 cm x 5 mm diam krimpkous
€ 2,00
14 Leds (60 LEDs/m) WS2812B Full color led strip WS2812
€ 5,00
14 LEDs (60 LEDs/m) SK6812 Full color led strip  
€ 5,00 
Optioneel  
 
Wireless Serial 6 Pin Bluetooth RF Transceiver Module HC05 (Android, W10  
€ 10,00
Wireless Serial 6 Pin Bluetooth RF Transceiver Module HM10 (voor Iphone, IPad)  
€ 10,00
1 x 4x3 membrane keypad   € 10,00
DCF77 DCF-2 module DCF odule
€ 20,00
Verzending enveloppe NL onverzekerd  
€4.00
Verzending enveloppe BE onverzekerd  
€5.00
Verzending aangetekend tot €500 verzekerd NL  
€15.00
Verzending aangetekend tot €500 verzekerd BE  
€20.00

Uitvoeringen
FibonacciMenu

De tijd van de klok gelijk zetten en de diverse opties kiezen kan met een seriële terminal en het menu dat de software toont.
In een seriële terminal kunnen commando's worden gegeven en ontvangen. Als de Arduino via de USB-kabel met een PC is verbonden kan dat met het toetsenbord .
Er zijn diverse mogelijkheden om serieel met de Arduino te communiceren.

- Met een Bluetooth module met de Arduino verbonden  kan er met een seriële terminal app op de mobiele telefoon of laptop worden gecommuniceerd.

- door een USB-kabel tussen de Arduino en de PC/laptop te verbinden en de 'seriële monitor' van de Arduino IDE, dat gratis te downloaden is, te gebruiken.

-Met een USB-kabel tussen de Arduino en de PC/laptop en het gratis Windows programma Termite

Met de Arduino IDE kan ook de software bekeken, aangepast en in de Arduino Nano gezet worden.

De Fibonaccikloksoftware is afgeleid van de woordklok, een ander project op deze site.

Zowel WS2812 RGB als SK6812 RGBW LED-strips kunnen worden gebruikt. SK6812 LEDs hebben naast de drie RGB kleuren ook een aparte witte LED. Deze LEDs geen mooier licht dan de oudere WS2812 LED-strips

Met de software kan naast een rotary draaiknop ook diverse membraan toetsenborden en een DCF-module uitgelezen worden.
De DCF-ontvangst wordt helaas gestoord door de SK6812 en WS2812 LEDs en daarom moet deze ontvanger een paar decimeter van de klok worden gehangen.

Met displays van het type MAX7219 en HT16K33 kan de tijd op een display worden getoond

Met defines in the software kunnen de opties worden gekozen.

Solderen van de onderdelen

Controleer de weerstanden altijd met een multimeter voordat ze gesoldeerd worden.

De Arduino Nano wordt niet vast gesoldeerd op de PCB. Gebruik de 15-pins voetjes. Het is dan nog mogelijk om de Arduino te vervangen mocht deze defect raken
Om de voetjes evenwijdig te solderen is het handig om de Arduino er losjes in te zetten (druk hem er niet helemaal in) en eerst de hoekpunten te solderen.

De langste poot van de condensator is de + , positieve pool.
Op de condensator is de - ook aangegeven met de witte verticale streep vaak met een - er in geprint.

De langste poot van de LED is de + , positieve pool.
De min van de LED is aangesloten op het driehoekige stukje metaal in de LED.

De lichtgevoelige sensor (LDR) heeft geen polariteit. Monteer de LDR bij voorkeur voor in de kast in de rand.
In mijn klokken boor ik een gat licht schuin horizontaal door de bovenste plank.

De 1.1 en 2.2 kOhm weerstanden zijn nodig als er een Bluetoothmodule wordt aangesloten.

De weerstandwaarden zijn aangegeven op de PCB.

De klok met maximaal 15 LEDs kan gevoed worden met de USB-kabel die in de Arduino gaat.
Het is ook mogelijk om 5V op diverse plekken op de PCB aan te sluiten die dan ook de Arduino voeden.
Knip een oude USB kabel door en gebruik een oude telefoon stekkervoeding als voedingsbron.
De klok gebruikt maximaal 0.15A bij 5V.

De RTC tijdsmodule bevat een LIR2032 of CR2032 batterij. De LIR2032 is een oplaadbare CR2032.
Als er een CR2032 in de RTC tijdsmodule zit moet de kleine weerstand boven de tekst SCL op de achterkant van de van de module verwijderd zijn. Deze weerstand kan met een soldeerbout verwijderd worden.

Rotary knop

Als een de rotary draaiknop aangesloten wordt verbind dan:
D3 aan DT op decoder
D4 aan SW op decoder
D8 aan CLK op decoder
en sluit de + op 5V en GND aan GND.

De klok kan met de rotary bedient worden door de knop in te drukken. Een druk op de knop activeert het menu.
Na 60 seconden moet weer gedrukt worden. Dit voorkomt dat stoorpulsen van het lichtnet de tijd kan verzetten.
Een keer drukken op de knop kunnen de uren worden aangepast door de knop te draaien.
Twee drukken de minuten.
Drie keer drukken de lichtsterkte.
Vier keer en meer drukken geeft een keuze tussen de diverse kleurpaletten. Default is het Mondriaan-kleurenpalet.

Het is vrij lastig om met de rotary draaiknop de tijd in te stellen.
De membraanknoppen of een Bluetooth-verbinding met een app op een mobiele telefoon zijn aan te bevelen.

4x3 membraantoetsenbord

Voorkant fibinacciklokAchterkant Fibinacciklok


Als een 3x4 keypad wordt gebruikt kunnen de 7 aansluitingen tussen pin D6 tot en met pin D12 op de Arduino worden aangesloten.
De draad die bij de # begint wordt op pin D6 geschoven en de rest daarnaast. Soldeer daarvoor 7 rechte pinnen op de printplaat (PCB) naast de Arduino.

Er is ook een eendraads uitvoering (+ 2 draden voor de voeding) te maken. Die wordt op pin A3 aan de rechterkant van de Arduino aangesloten.
Soldeer een pinnetje op de PCB naast A3 dat op de Arduino staat geprint.
(Sluit de keypad wel aan of sluit een weerstand van 5k of meer aan tussen A3 en GND. De analoge poort zal anders voordurend willekeurige waarden inlezen en zal het menu in de klok hierop reageren.)
Hier staat hoe je een 'one wire keypad' maakt.

Kies de juiste toetsenborddefinitie in the software (staat ongeveer bij regel 90).
In dit voorbeeld wordt de "eendraads" uitvoering van het 4x3 toetsenbord gebruikt

//#define KEYPAD3x4         // Use a 3x4 keypad with 7 wires
//#define KEYPAD3x1         // Use a 3x1 keypad with 4 wires 
//#define ONEWIREKEYPAD3x1  // Use a 3x1 keypad with one wire 
#define ONEWIREKEYPAD3x4    // Use a 3x4 keypad with one wire

Bluetooth met de HM10 BLE voor Apple IOS en Android



Printplaat

Met een HM10 BLE of CC2541 chipset compatibele BLE zoals de JDY-23 module kan draadloos gecommuniceerd worden met Apple IOS en Android.

Installeer de app op een Apple telefoon "BLEserial HM-10", "BLESerial Pro" of de gratis "BLEserial tiny" (App store).
 


BLEserialandroid


Serial Bluetooth Terminal van Kai Morich werkt goed als terminal.
Maak met de app op de telefoon verbinding met de BLE module en gebruikt de terminal voor de communicatie.
Nadat verbinding is gemaakt met de klok wordt de tijd en lichtsterkte elke 30 seconden doorgegeven.
Met het commando: I of i wordt een lijst met mogelijke commando's getoond.
Zie hier voor meer informatie over Bluetooth.
 

De HM-10 4.0 BT-BLE module gebruiken
Communicatie met de Bluetooth module kan via de seriële pennen RX and TX (pin 0 en pin1) van de Arduino Nano.
Met de library Softwareserial is het mogelijk om andere aansluitingen te gebruiken voor de seriële communicatie.
De seriële 0 en 1 pennen worden ook intern gebruikt om het programma in de chip te laden en serieel te communiceren met de PC via de USB kabel
Soms is het handig om de Bluetooth-module op pen 0 en 1 aan te sluiten. Dan maakt het in de software niet uit of er iets in de seriële monitor wordt getikt of met bluetooth wordt overgestuurd.
Maar... als er een programma geupload wordt dan stoort de Bluetooth-module het uploaden.
Dit kan dan simpel verholpen worden door de Bluetooth-module los te halen voor het uploaden.
Als bijvoorbeeld pen 6 en 7 gebruikt worden voor de Bluetooth-module dan kan de commmunicatie gescheiden worden en zal dat in het programma ook apart moeten worden uitgelezen.

Aanpassen naam Bluetooth-module
Een HM-10 4.0 BT-BLE Bluetooth-module kan aangepast worden met AT-commando's
In dit voorbeeld passen wij de naam die de module uitzendt aan.
Verbind VCC aan 3.3V op de Arduino, GND to GND en verbindt pin 6 to TXD en pin 7 to RXD van de Bluetooth-module.
Dus RX gaat naar TX en TX naar RX. Receive naar Transmit en vice versa.

Laad the volgende sketch in the Arduino:


#include <SoftwareSerial.h>
SoftwareSerial mySerial(6, 7); // RX, TX Connect HM10 Arduino UnoPin TXD  -- Pin 6 Pin RXD -- Pin 7
void setup()
{   
 Serial.begin(9600);  // If the baudrate of the HM-10 module has been updated, you may need to change 9600 by another value
                      // Once you have found the correct baud rate, you can update it using AT+BAUDx command, e.g. AT+BAUD0 for 9600 bauds 
 mySerial.begin(9600);
}
void loop()
{   
 char c; 
 if (Serial.available())  {c = Serial.read();   mySerial.print(c);  } 
 if (mySerial.available()){c = mySerial.read(); Serial.print(c);    }
}

Start 'Serial monitor' in the Arduino IDE.
Verander rechtsonder LF&CR settings naar “No line ending” en de baudrate naar 9600 Baud.
Voer in de de Serial monitor in:
AT+RESET
AT+NAMEFibonacciklok (Of een andere naam)
AT+RESET  
De passkey van de module = 0000  
Fake HM10 modules, de onderste, missen een kristal.
Sommige fakes laten zich niet zoals boven programmeren.
In deze beschrijving is een andere methode, met een FTDI, om de naam et cetera in de Bluetooth chip aan te passen

BLuetooth modules HM-10

Stukje code om een module op pin 6 en 7 en de seriële monitorinvoer apart uit te lezen.
//--------------------------------------------
// BLUETOOTH
//--------------------------------------------                                                 
SoftwareSerial Bluetooth(6, 7);    // RX, TXString BluetoothString;
//--------------------------------------------
// Check for Bluetooth input
//--------------------------------------------                          
void BluetoothCheck(void)
{
  while (Bluetooth.available()) 
   {  
    delay(3); 
    char c = Bluetooth.read();
    if (c>31 && c<128) BluetoothString += c;
   } 
 if (BluetoothString.length()>0)  ReworkInputString(BluetoothString);
 BluetoothString= "";
//--------------------------------------------
//  Input from Bluetooth or Serial
//--------------------------------------------
void ReworkInputString(String InputString)

 String temp; 
 float ff;
 
 Serial.println(InputString); 
 if ( InputString[0] > 64 ) 
 { 
  int val = InputString[0];   
  switch (val)  
    {   
     case 'A':   
     case 'a':  Serial.println(F("A was the first character"));            break;   
     case 'B':
     case 'b':  Serial.println(F("B was the first character"));            break;   
     case 'C':   
     case 'c':  Serial.println(F("C was the first character"));            break;   
     default:   break;  
    }  
  InputString = ""; 
 }
}
 

***********************************************************************************************

Handleiding

Handleiding FibonacciklokV040.pdf

 

Software header

Software

Laatste stabiele versie V040 Source code 

Oudere kleinere versie V007  Source code 

Op Github staan de nieuwste versies

Used libraries

#include <Encoder.h>             // http://www.pjrc.com/teensy/td_libs_Encoder.html
#include <Wire.h>                // Default Arduino library
#include <RTClib.h>              // https://github.com/adafruit/RTClib 
#include <EEPROM.h>              // Default Arduino library To store data in EEPROM
#include <TimeLib.h>             // Arduino library Time by Michael Margolis   http://playground.arduino.cc/Code/Time/   
#include <Adafruit_NeoPixel.h>   // https://github.com/adafruit/Adafruit_NeoPixel   for LED strip WS2812 or SK6812
#include "Adafruit_Keypad.h"     // https://github.com/adafruit/Adafruit_Keypad//                       
#include <SoftwareSerial.h>      // Arduino library for HC12 or Bluetooth

Libraries in ZIP

De "library"-folders kunnen na het uitpakken van de ZIP-file in de folder "libraries" gekopieerd worden.
Deze folder staat in de folder Documenten/Arduino of in de folder waar de scripts gesaved worden.
Start daarna de IDE opnieuw op.


Light weight library to control WS2811/WS2812 based LEDS and LED Strings for 8-Bit AVR microcontrollers.
If link above is broken the library from my site

FibonacciKlok_V007 (Als zip file)


Ed Nieuwenhuys, 25 juli 2022
10 mei 2022
22 februari 2021
10 mei 2020
2 april 2020
15 december 2019

13 november 2019
29 april 2019
29 October 2018