Als ingenieur word ik regelmatig geconfronteerd met onvoorziene problemen/uitdagingen waar ik op de een of andere manier iets mee of aan wil doen. Maar het is me een tijdje geleden ook thuis overkomen, toen mijn zoon mij een ‘NeoPixel Jewel 7’ van Adafruit gaf, die hij abusievelijk voor zijn universiteitsproject had gekocht. Het ging daarbij om de kleine, ronde print van figuur 1, waarop zeven ‘intelligente’ NeoPixel RBG-LED’s in SMD-formaat zitten. De grote vraag was natuurlijk: wat kan ik ermee?

Figuur 1. De NeoPixel Jewel 7, aangesloten op een Arduino-board.

NeoPixel + Arduino

De firma WorldSemi heeft al een hele tijd RGB-LED’s in de aanbieding die eenvoudig en effectief in serie aangestuurd kunnen worden. U kunt veel aanbiedingen uit het Verre Oosten vinden als u op “NeoPixel” of “WS2812B” bij eBay zoekt. Aangezien ik al een aantal Arduino-projecten had ontwikkeld, was het niet moeilijk om deze LED’s aan de praat te krijgen met behulp van de Adafruit-bibliotheek. Het resultaat van mijn experimenten was een nabeeld van een stel witte stippen, omdat die LED’s werkelijk heel fel zijn; wees daarom voorzichtiger dan ik bij het uitproberen van zulke LED’s!

Arduino is leuk. Maar als u een internetverbinding wilt, is het beter om iets anders als basis te gebruiken. Ik was op dat moment ook bezig met de ESP8266-MCU van Espressif (in de vorm van het D1 mini Pro-board van Wemos. Dit board leverde in combinatie met de NeoPixel-print een in mijn ogen prina resultaat. Om de WAF (Wife Acceptance Factor ;-)) te vergroten, moest ik dit stukje techniek zo mooi mogelijk (maar niet te duur) verpakken.

Lamp-tuning

Ik koos voor een kant-en-klare IKEA-lamp (model Grönö) als behuizing. Ik ben weliswaar niet echt een liefhebber van IKEA-producten, maar deze lamp (figuur 2) kost slechts € 6,99. Als de lamp mijn hack niet zou overleven zou me dat financieel niet de kop kosten – een niet onbelangrijke overweging bij dit soort operaties.

Figuur 2. De goedkope “Grönö”-lamp.

Figuur 3 toont het ‘elektriek’ in de lamp: een E14-fitting met snoer en snoerschakelaar.

Figuur 3. Het oorspronkelijke inwendige van de IKEA-lamp.

Omdat de NeoPixel-print met slechts drie draden wordt aangesloten, heb ik de fitting verwijderd en de print erop gelijmd, en voor de aansluiting een normale drie-aderige kabel gebruikt (figuur 4).

Figuur 4. De LED-print komt bovenop de gedemonteerde fitting.

De schakeling van de elektronica die moet worden ingebouwd (figuur 5) is de eenvoud zelve. Naast de Neopixel-print en een ESP8266 hebben we slechts 5 V bij 500 mA nodig via USB. De rest is puur software. De Neopixel-print bevat zeven RGB-LED’s met geïntegreerde controller in SMD-formaat. U kunt deze LED’s ook los kopen onder de naam WS2812B en daarmee de fraaiste opstellingen realiseren. Ze trekken maximaal zo’n 60 mA bij een maximale helderheid van ongeveer 20 lumen. U kunt ze in serie schakelen maar desondanks afzonderlijk adresseren door de RGB-helderheidsdata aan één kant serieel in de keten te ‘schuiven’. De bediening is heel eenvoudig.

Figuur 5. De ‘schakeling’ van mijn hack is simpel: µC-board + LED-print.

Software

Een belangrijk aspect van het Wemos D1 mini Pro-board is dat het kan worden geprogrammeerd met de Arduino IDE. Het gebruik daarvan heeft voor- en nadelen – maar voor mij was het belangrijkste dat projecten daarmee snel en gemakkelijk aan de praat kunnen worden gekregen. Voor het schrijven van de software voor deze IKEA-hack waren deze voorbereidende schermutselingen nodig:

 

 

De software lijkt wellicht erg ingewikkeld voor een eenvoudige taak als het aansturen van deze LED’s, maar dat komt door de WLAN-ondersteuning van de ESP8266. En het gebruik daarvan vergt de nodige code. De software heeft deze taken:

 

  • creëren van speciale lichteffecten;
  • internetverbinding via WLAN;
  • webserver voor de configuratie van de lamp.

 

De lamp kan ook ‘offline’ of in stand-alone modus worden bediend, waarbij hij bijvoorbeeld in een instelbaar tempo de kleuren van de regenboog doorloopt (bijvoorbeeld 20 ms voor elk van de 8x8x8 verschillende kleurtinten). Om de lamp tijdens bedrijf te configureren, moet u echter beslist WLAN activeren zodat de Neopixel-lamp verbinding met het lokale netwerk kan maken. De daarvoor benodigde WLAN-parameters kunnen vast in de broncode worden opgenomen (met daaropvolgende hercompilatie van de Wemos-firmware) of bij het ‘booten’ van de lamp worden ingesteld. Met een WLAN-verbinding is dit allemaal mogelijk:

 

  • in- en uitschakelen van de lamp;
  • instellen van de helderheid;
  • de wachttijd tussen de kleurcycli wijzigen;
  • keuze van de kleurcycli (op het moment van schrijven: regenboog, regenboogcycli, statisch, flakkerende kaars en fading);
  • instellen van een statische kleur.

 

De instellingen kunnen worden gemaakt via een (zeer) eenvoudige webinterface (figuur 6).

Figuur 6. De eenvoudige configuratie-interface van de webserver.

De HTML-code voor de website wordt met de functie getPage(string str) gegenereerd.

Dit alles is ‘hard’ in de software gecodeerd en is niet gemakkelijk te veranderen – maar in elk geval werkt het. De webconfiguratie-interface actualiseert de NeoPixel-lamp via HTTP POST-requests. De basisprocedure wordt beschreven in mijn boek “IoT Home Hacks with ESP8266”. Over het algemeen heb ik de software vergelijkbaar met andere projecten opgebouwd. Figuur 7 toont het flowdiagram van de software tijdens setup en figuur 8 tijdens bedrijf en selectie van de bedrijfsmodus.

Figuur 7. Setup-flowdiagram.
Figuur 8. Modusselectie-flowdiagram.

Ik ontdekte al snel dat ik over fading (langzaam toe- en afnemende helderheid) extra moest nadenken. Fading met een lineair verloop ziet er niet goed uit. Zoals te zien in figuur 9, is een geleidelijk, op een sinus lijkend verloop nodig. Dit helderheidsverloop is in Excel gesimuleerd en geïmplementeerd in de vorm van het array byte fadeInterpolation[] – dit kan naar wens worden gewijzigd.

Figuur 9. Voor fading geoptimaliseerde helderheidscurve.

In het artikel “LED-dimmer” (Elektorlabs september/oktober 2018) is het verband beschreven. De achterliggende theorie is gebaseerd op de psychofysische wet van Weber-Fechner.

Dagelijks gebruik

Zodra het Wemos-board met de firmware op een 5V-voeding wordt aangesloten, start het op en doorloopt het een ‘inschakelcyclus’.

 

WLAN-verbinding (blauw licht)

Eerst wordt geprobeerd om een verbinding met het WLAN tot stand te brengen (overeenkomstig de ingestelde configuratie). Tijdens dit proces lichten de LED’s op het NeoPixel-board de een na de ander blauw op.

 

Wacht (rood licht)

Na een succesvolle of mislukte WLAN-verbinding wacht de elektronica op gebruikersinteractie via de USB-poort. Tijdens dit proces knipperen de LED’s opeenvolgend rood. Wanneer u de NeoPixel-lamp begint te configureren, gaan alle LED’s uit. Als er gedurende tien seconden niemand met de lamp communiceert, wordt de vooraf geconfigureerde verlichting gestart. Na het inschakelen via een actieve WLAN-verbinding is het mogelijk om het lichteffect of de bedrijfsmodus van de Neopixel-lamp te wijzigen.

Nieuwe webinterface

Nadat ik zover was gekomen, liet ik het resultaat aan mijn zoon zien. Hij heeft een masterdiploma in Interaction Design; hij was niet erg onder de indruk van mijn ontwerp van de webinterface. En dus maakte hij een nieuw design (figuur 10), dat echter niet simpelweg ‘hard’ kon worden gecodeerd, omdat onderhoud dan te moeilijk zou zijn geweest.

Figuur 10. Ontwerp van de verbeterde webinterface.

In plaats daarvan is een HTML-, CSS- en Javascript-design gemaakt. Dit is waar het SPI-flash-bestandssysteem in het spel komt. Een ESP8266-MCU heeft minimaal 14 MB flashgeheugen dat kan worden gebruikt via het SPIFFS-bestandssysteem. Hier vindt u informatie over:

  • het uploaden van bestanden in het SPIFFS;
  • waar de bestanden op de PC moeten staan om uploaden mogelijk te maken;
  • installatie van de benodigde software voor de Arduino IDE.

 

Als u alles correct het gedaan, zou uw Arduino-softwaredirectory eruit moeten zien zoals in figuur 11.

Figuur 11. De Arduino-softwaredirectory zou er zo uit moeten zien.

Figuur 12 toont de bestanden voor de webinterface in de map Data. De geactualiseerde software kan gratis worden gedownload van de projectpagina bij dit artikel. Als u in de Data-directory kijkt, zult u zien dat er geen bestand met de naam NEOPixel_new_20191222_load.js is, omdat deze functies hard gecodeerd zijn in de ESP8266-software. Op deze manier kan de ESP8266-MCU bij inschakelen de webinterface configureren met de in EEPROM opgeslagen waarden.

Figuur 12. De inhoud van de Data-directory.

De webinterface is ontworpen voor portrait-weergave op het scherm van een smartphone. Omdat de NeoPixel-lamp kan worden geconfigureerd via de ontvangst van HTTP POST-requests, is het ook mogelijk om de lamp te bedienen met de OpenHAB-domotica-oplossing – maar dat is een ander verhaal.

Deze kleine NeoPixel Jewel-print bracht me naar verschillende gebieden die ik nog niet kende toen ik aan het project begon. En het was de moeite waard, want deze IKEA-hack resp. NeoPixel-lamp maakt al meer dan een jaar deel uit van de inrichting van mijn huis.

 

(200165-04)

 

----------------------------------------------------------------------------------------------------------------------

Wilt u meer van die fantastische Elektor-artikelen?

 

--> Neem vandaag nog een abonnement op Elektor - u mist nooit meer een artikel, project of handleiding!

----------------------------------------------------------------------------------------------------------------------