Bij een Arduino Nano-weerstation hoort een mooie weergave van de metingen. Floris Wouterlood laat zien hoe je een grafisch OLED-schermpje van 128x32 of zelfs 128x64 pixels combineert met een Arduino.

Bij een standalone weerstation hoort een aantrekkelijke weergave van de metingen. In de Arduino-wereld bestaan voor dit doel heel wat mogelijkheden. Klassiek is een lcd-schermpje met bijvoorbeeld 2 of 4 regels met op elke regel een aantal karakters. Er bestaan wat minder sobere lcd-schermen die werken als een grafische display met 128x64 pixels, wat prettiger leest en waarmee je grafisch aan de slag kunt gaan. Wie luxe en meer pixels wil, kan een kleuren-TFT schermpje met bijvoorbeeld 320x 80 pixels aanschaffen. Vrij nieuw voor de Arduino is een grafisch OLED-schermpje van 128x32 of zelfs 128x64 pixels.

128x64 OLED wouterlood fig 01 300dpi 2128x64 OLED-scherm met SSD1306-chip. Dit schermpje heeft 7 pinnen:
GND, VDD, SCK, SDA, RES, DC en CS. De interface gebruikt het SPI-protocol

OLED
Dit artikel gaat over hoe je een OLED-scherm combineert met een Arduino. De afkorting OLED staat voor Organic Light Emitting Diode, ofwel een organische LED. Een OLED kun je beschouwen als een piepklein platgedrukt ledje. Zet van deze ledjes een aantal in rijen en kolommen en je hebt een OLED-scherm. Dit soort displays heeft een aantal voordelen vergeleken met hun vloeibare-kristal neefjes: ze zijn helderder en contrastrijker omdat de pixels zelf lichtgevend zijn. Bij lcd-schermpjes is altijd verlichting nodig die vanuit de achtergrond door de vloeibare kristallen heen schijnt. Vergeleken met lcd-schermen reageren OLED-schermen razendsnel en zijn dus bruikbaar om er animaties mee te maken. Tot slot verbruiken OLED’s heel weinig stroom en belasten ze daardoor de stroomvoorziening vanuit een Arduino nauwelijks. Ze flikkeren niet als er veel moet worden weergegeven, lcd’s willen dat nog wel eens doen.

Display voor een weerstation
Voor een weerstation is goede leesbaarheid heel prettig en komt een OLED-scherm heel goed van pas. Nu bestaan er allerlei soorten, maten en kwaliteiten OLED’s. Ik kocht in een elektronicawebwinkel een goedkope, 7-pins 128x64 twee-kleuren OLED-scherm op basis van een plaatje. Dat plaatje bleek een beetje boerenbedrog te zijn geweest, want de geleverde display bestaat in feite uit twee strips: een strip met 128x16 gele pixels met daaronder een strip van 128x48 lichtblauwe pixels. Deze ‘hybride’-monochrome displays werken met een SSD1306-chip.

Typische OLED-displays voor Arduino’s hebben een schermdiagonaal van maar 0.96 inch (ca. 25 mm). Elke afzonderlijke pixel van de 128x64 display is een individuele OLED en kan dus afzonderlijk in- of uitgeschakeld worden. Er zijn displays met vijf en met zeven pinnen.

Er bestaan verschillende soorten driver-chips voor OLED-schermen. Populair zijn de SH1106 en SSD1306. Zoek altijd met behulp van een zoekmachine als Google op of er een Arduino library voor je chip bestaat, want anders wordt het laten werken van de display een echte uitdaging.

128x64 OLED wouterlood fig 02 300dpi 2

Bedradingsschema van een weerstation met een DHT22 temperatuur-relatieve vochtigheidssensor,
een Arduino Nano en een 128x64 OLED-scherm

Sensoren en bedradingsschema
Voor het meten van temperatuur en relatieve vochtigheid werd een DHT22-sensor gebruikt. Deze sensor is goedkoop en redelijk nauwkeurig. Een DHT22 heeft vier pinnen: 5V, data, ongebruikte pin, GND. De sensortype werd op een breadboardje geprikt en voorzien van 5V en GND. De datapin van de DHT22-sensor werd verbonden met pin D4 van een Arduino Nano, zoals je kunt zien op het afgebeelde bedradingsschema. Daarop kun je ook zien dat de pinnen aan de display gemarkeerd SCK, SDA, RES, DC en CS zijn verbonden met respectievelijk de pinnen D13, D11, D8, D9 en D10 van de Nano. Let op de 10 kOhm pull-up weerstand voor de DHT22-datalijn. Het rode controlelampje wordt van pulsen voorzien vanaf pin D3 van de Nano. Een Nano werd gekozen, omdat deze verkleinde uitgave van een Arduino Uno zo prettig op een breadboardje geprikt kan worden.

   OLED pin labels    

   alternatieve benaming    

   verbind met Arduino pin  gemarkeerd    :

GND

GND

GND

VDD

VCC

3.3V

SCK

D0

D13

SDA

MOSI

D11

RES

RES

D8

DC

DATA

D9

CS

CS

D10

Verbindingstabel van de 128x64 7-pins OLED-scherm display met een Arduino

 Weerstandjes
OLED-schermen die data ontvangen via een SPI-interface hebben geen pull-up- of pull-down-weerstandjes nodig. Arduino’s (en dus ook een Nano) werken met 5V-gelijkspanning. Het OLED-scherm dat hier wordt gebruikt, heeft een 5V-3V level-converter aan boord die voor het juiste voltage voor de OLEDs zorgt (3,3V). In het bedradingsschema is een 10kOhm pull-up-weerstand geplaatst tussen de datalijn van de DHT22-sensor en 5V. Het rode controle-ledje heeft een weerstandje nodig om de werkspanning van pin D3 terug te brengen van 5V naar 3,3V.

128x64 OLED wouterlood fig 03 300dpi 2

Je ziet hier een werkend DHT22-weerstation-prototype met het 128x64 OLED-scherm volgens het bedradingschema van afbeelding 3. De DHT22-sensor is goed zichtbaar (pijltje) en de bedrading is zoveel mogelijk uitgevoerd met dezelfde kleuren als in het bedradingsschema.

Resultaat
Ik beschouw de 128x64 OLED hybride-monochroom display met SSD1306-chip als een heel aardige toevoeging aan het repertoire aan displays waarmee de Arduino overweg kan. Dankzij de U8glib-library van Oliver Kraus (‘Olikraus’) kan dit display een indrukwekkend aantal grafische objecten weergeven: cirkels, stippen, ellipsen, lijnen, rechthoeken, frames, driehoeken en lettertypen in verschillende lettergroottes. De complete handleiding voor deze library met alle mogelijke instructies is te vinden op https://github.com/olikraus/u8glib/wiki/userreference

Omdat elke afzonderlijke pixel in een OLED-scherm (of grafisch LCD-scherm) geadresseerd kan worden, zijn er nog veel meer mogelijkheden, bijvoorbeeld het laten zien van bedrijfslogo’s. Het is zelfs mogelijk om foto’s te ‘pixelizen tot 1bit monochroom en dan in hun geheel of in een hoekje van het schermpje neer te zetten. Het is natuurlijk wel zo dat een display -vullende foto op mijn schermpje bovenin een band aan gele pixels zal hebben.

Tot slot een waarschuwing. Men beweert dat OLED-schermen kunnen ‘inbranden’, dat wil zeggen dat letters, cijfers of grafische objecten die langdurig op een vaste plek op het schermpje worden weergegeven een schaduwbeeld nalaten zodra het schermpje wort uitgezet. Deze waarschuwing komt overigens uit de wereld van OLED-tv’s, en die kosten wel even wat meer dan een nietig OLED-schermpje.

          


Sketches online

Er zijn twee sketches die je hier op PC-Active kunt vinden.
De eerste sketch (Nano_DHT22_OLED128x64_PC_Active.ino) is de sketch voor het weerstation dat relatieve vochtigheid en temperatuur weergeeft,, zoals je in de afbeeldingen hier kunt zien. De tweede sketch (OLED_128x64_bouncer_demo.ino) laat een balletje eindeloos tussen de randen van een verder leeg scherm op en neer en heen en weer kaatst. Met deze demo kan ik controleren hoe goed de verversingssnelheid van een display is. Er zit een trucje tussen de instructies om te voorkomen dat het balletje een vast traject volgt of vastloopt in een van de hoeken van het schermpje