De Fibonacci-klok met WS2812 kleuren-LED's

Fibonacci wand

Naar Start   English version

De Fibonacci-klok was een kick-starterproject van Philippe Chrétien.
Een variatie van deze klok is de Fibonacci-stokklok.

Deze stokklok heeft vereenvoudigde software dat ook goed te gebruiken is om deze kastklok te maken.
Fibonaccistick
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

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 met Pin 5 de juiste signalen naar de WS2812 LED's.

maart2020
Er is een nieuwe versie software voor de klok zodat de klok bestuurt kan worden met een 4x3 keypad.
Een duidelijke handleiding hiervoor vind je hier.

housing
 
The casing building blocks

Maar 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 LED's wit licht geven.
Wit perspex werkt mooi als voorkant.
De kaders van de segmenten kan met zwarte viltstift of zwarte tape op het perspex geaccentueerd worden.

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
€ 15,00
1 x RCT DS3231 Precisieklokmodule ZS-042
€ 5,00
1 x CR 2032 3V lithium batterij
€ 3,00
1 x Dupont-kabel vrouw-vrouw 20-aderig
€ 3,00
2 x 6-pin female socket connector
€ 1,50
1 x  KY-040 Keyes Rotary Encoder
€ 2,00
1 x lichtsensor
€ 0,85
1 x 22kΩ weerstand
€ 0,15
1 x 1000 µF condensator
€ 0,25
1 x 470Ω + 1.1kΩ en 2.2kΩ weerstand
€ 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
€ 2,00
14 Leds (60 LEDs/m) WS2812B Full color led strip
€ 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
€ 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

De tijd van de klok zetten en de diverse opties kiezen kan met een seriële monitor. Dat is een programma dat de seriele poort van de Arduino kan lezen en schrijven.
Dit kan met Bluetooth (zie hieronder) en een serieel monitor programma op de mobiele telefoon of laptop of door een USB-kabel tussen de Arduino Nano en de PC/laptop te verbinden.
Een seriële monitor zit ook in de Arduino IDE dat gratis te downloaden is. Met de Arduino IDE kan ook de software bekeken , aangepast en in de Arduino nano gezet worden.
In de links hieronder zijn de programma te downloaden.

De software is afgeleid van de woordklok, een ander project op deze site en bevat daardoor nog overbodige code. De huidige versie kan ook de 24-uur uitgave aansturen waarvan een afbeelding aan het begin van de pagina staat.
Er kan membraan toetsenbord en een DCF-module uitgelezen worden. De DCF-ontvangst wordt gestoord door de SK6812 en WS2812 LED's en daarom moet de ontvanger een paar decimeter van de klok worden gehangen.

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.
Helaas heeft de huidige printplaat versie V08 geen 5V en GND bij de rotary aansluitpunten in de buurt.

In de software V016 moet op regel 23 de // voor //#define ROTARYMOD verwijderd worden en moet de software opnieuw in de Arduino geladen worden.
Een kant opdraaien verhoogt de uren, de andere kant opsraaien verhoogt de minuten.
De lichtsterkte kan ingesteld worden binnen 60 seconden na het aanzetten van de klok.

Soms stoort het lichtnet de rotary pulsen waardoor de tijd verspringt.
In de Fibonaccistick is dit probleem verholpen in de software.

In V018-beta kan de rotary bedient worden door de knop in te drukken. Na 60 seconden moet weer gedrukt worden. Dit voorkomt dat stoorpulsen van het lichtnet de tijd kan verzetten.
Na een keer drukken op de knop kunnen de uren worden aangepast.
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

Solderen van de onderdelen

Controleer de weerstanden altijd voordat je ze soldeert.
De Arduino Nano wordt niet vast gesoldeerd maar gebruik de bijgeleverde voetjes.
De lichtgevoelige sensor (LDR) heeft geen polariteit. Zet de LDR voor in de kast.
In mijn klokken boor ik een gat lichtschuin horizontaal door de bovenste plank.

4x3 membraantoetsenbord

Voorkant fibinacciklokAchterkant Fibinacciklok


Als een 4x3 keypad wordt gebruikt kunnen de 7 aansluitingen op pin 6 tot en met pin 12 op de Arduino worden aangesloten.
Als je de naar bovenkant van het membraantoetsenbord wordt de draad onder de # op pin6 geschoven en de rest daarnaast

Je kan ook een eendraads + 2 draden voor de voeding maken. Die wordt op pin A3 aan de rechterkant van de Arduino aangesloten
Hier staat hoe je een 'one wire keypad' maakt.

Gebruik voor het toetsenbord het programma: "FibonacciEnVierkantebuisKlok_V006.ino" of een hogere versie.
Verander regel 19 en 20 als volgt:

//#define KEYPAD                 // Use a 3x4 keypad
#define ONEWIREKEYPAD          // Use a 3x4 keypad with one wire

en laad het programma in de Arduino Nano.


Bluetooth met de HM10 BLE voor Apple IOS en Android

Met de HM10 BLE module kan draadloos gecommuniceerd worden met Apple IOS en Android.
Er moet dan wel met het programma BLE scanner (App store) contact worden gemaakt. Dit programma zorgt dat het HM10-communicatieprotocol geinstalleerd is.
Met BLE scanner kan de HM10-module "Connect" worden.
Daarna kan met een serial terminal programma ("HM10 Bluetooth serial light"-app van Alex van der Lugt voor IOS)  commando's worden overgestuurd en de klokuitvoer opgevangen worden.
android

Voor Android kan het programma BLE scanner van Blue Pixel Technologies LLP geinstalleerd worden.
Serial Bluetooth Terminal van Kai Morich werkt goed als terminal.
Connect met BLE scanner (heb geduld, het kan wel 5 minuten duren voordat je de naam van de module te zien krijgt) en gebruikt de Serial Bluetooth 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 ook hier voor en hier en hier voor meer informatie over de Bluetooth.

 

De HM-10 4.0 BT-BLE module gebruiken
Communicatie met de Bluetooth module vindt plaats met de serieele pennen RX and TX van de  ATMEGA chip. Met de library Softwareserial is het mogelijk om andere pennen te gebruiken voor de seriële communicatie
De seriële 0 en 1 pennen worden gebruikt om het programma in de chip te laden en om de commando's van de serieële monitor die in de Arduino IDE programmeeromgeving ingebouwd is.
soms is het handig om de Bluetooth-module op pen 0 en 1 aan te sluiten. Dan maakt het niet uit os er iets in de seriële monitor wordt getikt of met bluetooth wordt overgestuurd.
Maar.. als er een programma geupload wordt dan soort de Bluetooth-module het uploaden. Dit kan 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.

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 crystal.
Sommige fakes laten zich niet zoals boven programmeren.

 

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 = ""; 
 }
}
 

Software header

Software

Laatste stabiele versie en geschikt voor diverse varianten van de Fibonacciklokken.
Source code

 Op Github FibonacciKlok_V007 (Als zip file)

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 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 op.

 

Oudere versies

Fibonacci Versie 16. (Als zip file) Deze versie is geschikt voor de Nano met een Bluetoothmodule. Met de defines in de software zijn andere opties zoals de rotary draaiknop aan te zetten.

Versie V018-beta (Als zip file) in deze versie kan de rotary encoder de tijd slecht 60 seconden verzetten.
Dit voorkomt dat de tijd verspringt bij stoorpulsen op het lichtnet.

 

 

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

If link is broken the library from my site

 

 


Ed Nieuwenhuys, 10 mei 2020

2 april 2020
15 december 2019

13 november 2019
29 april 2019
29 October 2018