Eigen Arduino wake up light bouwen

Ervoor zorgen dat je lekker kunt uitslapen omdat je kinderen niet te vroeg aan je bed staan 's ochtends, kan uitsteken met een wake up light. Die kun je gewoon in de winkel kopen, maar een eigen wake up light bouwen met Arduino is een veel leukere uitdaging! En een stuk goedkoper.

Benodigdheden

- Arduino Mega (voor dit artikel gebruiken we een goedkope kloon), € 12,50

- Arduino LCD KeyPad Shield, € 5,50

- DS3231 rtc, € 2,25

- Rgb-ledstrip, prijzen zeer uiteenlopend

- Pin headers, € 2,00

- Draad

- Soldeermateriaal

- Striptang

- 3D-printer voor behuizing (optioneel)

Totale kosten: ca. € 50,–

Arduino Mega

Voor de verlichting wordt gebruikgemaakt van een rgb-ledstrip. Die wordt, zodra alles werkt, achter het stapelbed van de kinderen geplakt. Dat geeft een mooi effect, vooral als de kamer wordt verlicht met een kleurverloop in alle kleuren van de regenboog.

De ledstrip wordt aangestuurd door een Arduino Mega. Deze heeft meer aansluitingen dan de veelgebruikte Arduino Uno. Dat is ook wel nodig, want de Uno heeft niet genoeg pinnen voor alle onderdelen die we gaan gebruiken: een ledstrip, een lcd-scherm met bedieningsknoppen en een rtc (real time clock). Dit alles wordt in een 3D-geprint doosje geplaatst.

Het lcd-scherm moet de huidige tijd laten zien en – voor het geval je die hebt ingesteld – de tijd waarop het licht van de wekker aangaat. Met de bedieningsknoppen kun je verder nog allerlei andere zaken instellen. Niet alleen de tijd en het alarm, maar ook de kleur van de led-verlichting. Een regenbooganimatie is natuurlijk wel mooi, maar als je dat te druk vindt, moet het ook mogelijk zijn om een vaste kleur te kiezen. Daarnaast zou het handig zijn als je de achtergrondverlichting van het lcd-scherm in kunt stellen op ‘altijd aan’ of ‘automatisch uit na tien seconden’. Tijdens het inslapen is het niet fijn als het backlight de hele kamer verlicht.

Wat moet er gebeuren wanneer de ‘wekker afgaat’? Waarschijnlijk zal niemand het fijn vinden om in een plotselinge zee van licht wakker te worden. Daarom moeten de led-lampjes eerst heel zwak en daarna langzaam aan feller gaan schijnen. Over de kleur hoeft mijn dochter niet lang na te denken. Roze natuurlijk, de favoriete kleur van dit zesjarige meisje.

Arduino wake up light

© PXimport

Behuizing en scherm

Een behuizing is niet noodzakelijk om de wake-uplight te laten functioneren. Maar omdat het apparaat aan de zijkant van een kinderbed wordt gemonteerd, is het wel verstandig om iets te maken wat de elektronica beschermt tegen kinderhandjes. En omgekeerd natuurlijk.

Op Thingiverse, een website waar veel gratis 3D-modellen te vinden zijn, kun je het perfecte doosje vinden: de Mmintbox – ja met dubbel M. Deze is speciaal ontworpen voor een Arduino Mega waar een lcd-shield met koppen op zit. Op de plek die eigenlijk bedoeld is voor een 9volt-batterij is nog ruimte voor de rtc!

Het is aan te raden om de knoppen met elastisch materiaal te printen, biorubber of flexibel TPE-filament bijvoorbeeld. De rest van het doosje is met PETG geprint. Na het printen moet je met een mesje nog even een opening in de zijkant van het doosje maken. Hier gaan de vier draden van de ledstrip door.

Bij het aansluiten van de LCD KeyPad Shield valt op dat de soldeerpunten aan de onderkant van de shield contact maken met de metalen buitenkant van de usb-aansluiting van de Arduino. Misschien dat dit bij een originele Arduino Mega niet gebeurt, maar omdat er op dit moment enkel een (overigens prima) kloon voorhanden is, kunnen we dit niet controleren.

Voor de zekerheid moet er daarom rondom de usb-aansluiting wat (doorzichtige) tape worden geplakt. Je kunt het bordje testen met behulp van de voorbeeldcode die je hier vindt.

Rtc en led-strips aansluiten

De rtc (real time clock) beschikt over zes verschillende aansluitingen, waarvan alleen de SDA-, SCL-, VCC- en GND-aansluitingen gebruikt hoeven te worden.

De SDA- en SCL-pinnen worden met de gelijknamige pinnen op de Arduino aangesloten. Op een Arduino Mega is SDA-pin D20 en SCL is pin D21.

VCC verbind je met de 5volt-pin op de Arduino en GND uiteraard met GND. De Mega heeft meerdere GND-aansluitingen, maar het handigst is om die naast de 5volt-pin te gebruiken.

Er is nu wel wat soldeerwerk nodig: soldeer twee pinheaders op de SCL en SDA-aansluitingen van de rtc en vier pinheaders aan 5V-GND-GND-Vin van het lcd-bordje. Even opletten: de vier laatstgenoemde pinnen zitten aan de onderkant van het lcd-bord! Als je ze aan de andere kant zou solderen (zodat de kabels boven op de shield moeten worden aangesloten), past het niet in het 3D-geprinte doosje omdat de kabels dan naar boven uitsteken. Wie nog nooit gesoldeerd heeft, kan via dit pdf-bestand een duidelijke handleiding in de vorm van een comic vinden.

Arduino wake up light

© PXimport

Meet nu de afstand die tussen de Mmintbox en de verlichting komt en tel daar nog wat extra centimeters bij op. Dit wordt de lengte van de vier draden tussen de Arduino en de ledstrip. Achteraf kun je die draden in een kabelgoot wegwerken. De aansluiting verloopt als volgt.

1. De VCC (paarse draad op de foto) en naastgelegen GND van de ledstrip worden aangesloten op de Vin- en GND-pinheaders die in de vorige stap gesoldeerd zijn.
2. DI wordt aangesloten op pin D36 van de Arduino Mega.
3. GND (die naast DI) wordt aangesloten op de GND-pin die helemaal rechtsonder op de Arduino zit.

Arduino wake up light

© PXimport

De voeding aansluiten

De pinnen van de Arduino werken op 5 volt. Precies de juiste hoeveelheid voor de rtc, maar niet voor de ledstrip die wij gebruiken. Die heeft namelijk 12 volt nodig. Gelukkig past de stekker van de adapter die bij de ledstrip geleverd werd precies in de voedingsconnector van de Arduino Mega. En we hebben ook geluk dat de Mega beschikt over een ingebouwde spanningsregelaar, die ervoor zorgt dat de maximale hoeveelheid op elke pin wordt beperkt tot 5 volt.

De enige uitzondering hierop is de Vin-pin, waarop evenveel spanning staat als op de stroomconnector. Vandaar dat de VCC van de ledstrip in de vorige stap op Vin is aangesloten. Zorg dus dat je zelf ook een voedingsadapter met de juiste maat stekker gebruikt!

Bovenstaand verhaal over de voeding wijkt niet zo veel af wanneer je een ledstrip gebruikt die met een spanning van 5 volt werkt. In dat geval kun je de Arduino ook met een usb-kabel van stroom voorzien. Wanneer je toch de ronde voedingsconnector gebruikt, let er dan op dat je een adapter met de juiste spanning gebruikt.

Wake up light progammeren

Je kunt hier de Arduino-code voor dit project downloaden. Voordat je deze sketch naar de Arduino uploadt, zou je nog wat onderdelen in de code kunnen aanpassen. Bijvoorbeeld het instellen van de datum van de rtc, want dat kan niet met behulp van de knoppen. De code staat op GitHub, dus iedereen is welkom om deze optie toe te voegen. Maar op dit moment is dat niet per se nodig, omdat een datum en de dag van de week niet van belang is voor het laten afgaan van de wekker van dit wake-uplight.

Voor de volledigheid laten we toch even zien hoe je de datum en dag van de week van de rtc kunt instellen. Haal allereerst de commentaartekens aan het begin van regels 67 tot en met 69 weg en vul de juiste waarden voor datum (en tijd) in:

67 rtc.setDOW(THURSDAY); // Set Day-of-Week to THURSDAY68 rtc.setTime(10, 35, 0); // Set the time to 10:35:00 (24hr format)69 rtc.setDate(7, 9, 2017); // Set the date to September 7th, 2017

Als deze sketch is geüpload, waardoor de wake-uplight over de juiste datum beschikt, moet je de commentaartekens weer terugzetten en de sketch voor een tweede keer uploaden! Hierdoor voorkom je dat de tijd telkens weer wordt teruggezet wanneer de Arduino herstart na een stroomonderbreking.

16 #include <liquidcrystal.h></liquidcrystal.h>17 #include <aldi_neopixel.h></aldi_neopixel.h>18 #include <ds3231.h></ds3231.h>1920 LiquidCrystal lcd(8, 9, 4, 5, 6, 7);21 Aldi_NeoPixel strip = Aldi_NeoPixel(50, 36, NEO_BRG + NEO_KHZ800);22 DS3231 rtc(SDA, SCL);

Het getal 50 op regel 21 is het aantal leds in de strip. Wellicht dat je dit nog moet aanpassen. Voor meer info over die ledstrip en de bijbehorende library kun je hier terecht.

Wanneer je een reguliere NeoPixel-ledstrip gebruikt, wijzig je regel 17 en 21 in:

17 #include <adafruit_neopixel.h></adafruit_neopixel.h>21 Adafruit_NeoPixel strip = Adafruit_NeoPixel(50, 36, NEO_GRB + NEO_KHZ800);

Staat het roze kleurtje jou bij het ontwaken niet aan, dan kun je dit op regel 140 wijzigen:

140 strip.setPixelColor(i, strip.Color(c, 0, c/10));

Ook deze regel behoeft wat uitleg. De drie waarden tussen de haakjes achter strip.Color zijn de hoeveelheid rood, groen en blauw van de kleur. In dit geval is de variabele c een waarde die langzaam van 0 tot en met 255 oploopt (zie regel 136) en zo zorgt dat de verlichting steeds feller wordt. Roze licht krijg je door rood licht met een klein beetje blauw licht te ‘mengen’, vandaar dat in bovenstaande code de hoeveelheid blauw telkens een tiende deel van de hoeveelheid rood is. Wil je geen roze maar groen, dan zou je de volgende code kunnen gebruiken:

strip.Color(0, c, 0)

Een ander leuk idee is om de kleuren van de opkomende zon na te bootsen: van rood en oranje via geel naar een blauwig wit. Hiervoor is alleen bovenstaande regel niet genoeg, maar zullen er wat meer drastische wijzigingen aan de code moeten plaats vinden. Dat laten we aan jouw eigen inventiviteit over.

Tot slot

Zodra je de wake-uplight aan zet, toont de ledstrip een kleurverloop van het hele kleurenspectrum: van rood via geel, groen, blauw en paars weer terug naar rood. Dit ziet er prachtig uit, niet alleen wanneer de ledstrip nog is opgerold, maar zeker als deze achter het stapelbed wordt geplakt en de hele kamer oplicht.

Intussen is alles getest en het werkte! We verheugen er ons al op om op zaterdagochtend eindelijk eens een uurtje langer te blijven liggen. De kinderen zijn al de hele week geïnstrueerd: “Jullie krijgen vrijdag een nieuwe lamp op je kamer, zodat je kunt zien wanneer je mag opstaan. En denk eraan: niet roepen voordat de lamp aan is.” Dit moet gaan lukken! Hoe moeilijk kan het nu nog zijn?

Deel dit artikel
Voeg toe aan favorieten