Inhoudsopgave:

Oled-wekker - Ajarnpa
Oled-wekker - Ajarnpa

Video: Oled-wekker - Ajarnpa

Video: Oled-wekker - Ajarnpa
Video: OLED oximeter alarm demo 2024, Juli-
Anonim
Oled-wekker
Oled-wekker

Er gaan veel arduino/ESP32-klokken rond, maar gebruiken ze die mooie en heldere OLED's?

Ik ben al een tijdje aan het experimenteren met arduino's en ESP32's, maar het is nooit tot een afgewerkt product gekomen. Ik heb een wekker gemaakt met 4 1,3 inch monochrome OLED's. De klok heeft ook een dimbare bedlamp en een USB-oplaadpoort (niemand heeft extra stopcontacten naast zijn bed). De OLED's zijn ook dimbaar, dit is op het laatste moment toegevoegd nadat mijn project werd bedreigd door mijn vriendin. Mocht dimmen niet -in vriendinnenstem- dim genoeg zijn, dan kan ik ook een versie van de code leveren waarbij 3 schermen tussen bepaalde uren uit staan. Het doel was om een gemakkelijk te onderhouden klok te maken, met een blik verder dan "prototype". Tijdens het maken van mijn klok kwam ik een aantal problemen tegen die ik moest oplossen, daarom denk ik dat deze instructable het delen waard is. De klok kan gemaakt worden met weinig gereedschap, ik hou niet van de "en voor de volgende stap gebruikte ik mijn 10.000€/$ CNC-frees" tutorials.

Sommige dingen die in deze instructable zullen worden uitgelegd (in-structable-ception):

- Hoe een I2C OLED-scherm te gebruiken / bedraden met arduino / ESP32

- Meerdere I2C-objecten gebruiken met één arduino/ESP32

- Hoe maak je een "scroll-able" menu met behulp van een roterende encoder (+ hoe een encoder te gebruiken met een ESP32/arduino)

- Hoe u een aangepaste PCB ontwerpt en bestelt met behulp van fritzing.

- De klok maakt ook gebruik van een RTC (real time klok), led driver, step-down spanningsmodule… Ik zal hier niet echt op ingaan omdat er echt heel veel informatie direct beschikbaar is voor deze modules.

Ik wil graag opmerken dat ik geen professionele programmeur ben. Het doel van mijn instructable is om de punten die ik hierboven heb genoemd uit te leggen. Hoe ik het allemaal samenvoeg voor mijn eindproduct is misschien niet de schoonste manier. Het is de manier waarop ik alles bij kon houden.

Benodigdheden

Bij het winkelen voor benodigdheden probeer ik altijd het belang van kwaliteit/documentatie versus prijs af te wegen. Mijn benodigdheden zijn een mix van A-merken en goedkopere Chinese onderdelen. Mouser is een prima leverancier als kwaliteit belangrijk is, ik bestel bij Banggood/Aliexpress voor de goedkopere onderdelen.

- Een ESP32 board, ik heb de Huzzah32 van adafruit gebruikt, maar er zijn veel andere (goedkopere) opties. Ik heb voor de Huzzah32 gekozen omdat deze zeer goed gedocumenteerd is.

- 4 1,3-inch I2C OLED-schermen (128x64, met de SH1106-driver), de 0,96"-schermen komen vaker voor, maar voor dit project geef ik de voorkeur aan de 1,3"-schermen

- Sparkfun femtobuck driver om de LED aan te sturen

- RTC-klok, ik heb er een gebruikt met een lithiumcel

- Arduino nano

- Vrouwelijke USB 2.0-poort (ik gebruikte: SS-52200-002 van Stewart Connector)

- Vrouwelijke DC-aansluiting (ik gebruikte: L722A van Switchcraft)

- 12V 3A DC-adapter (GST36E12-P1J van Mean Well)

- Aangepaste PCB, optioneel, maar dit maakt het project een stuk compacter en gemakkelijker te onderhouden als een onderdeel sterft + meer betrouwbaarheid omdat er minder draden zijn (jlcpcb.com)

- M3 schroeven & bouten

- M3 messing inzetstukken

- 12V naar 5V step-down module van Pololu (DF24V22F5)

- 3 watt aangedreven met koellichaam

- Jumper draden

- Zoemer

- I2C-multiplexer (TCA9548A van adafruit)

- 2 roterende encoders (ik heb er een aantal geprobeerd, niet alle werken met mijn code. Die van "DFrobot" werkt en die van met de ronde PCB van "DIYmore" ook. Mijn code lijkt niet te werken voor de drukknop van het type KY-040. Mijn wekker gebruikt die van DIYmore omdat ze heel gemakkelijk op een paneel te monteren zijn (geen extra schroeven/gaten nodig).

- Assortiment vrouwelijke headers (optioneel)

- Hout voor het frame: 18mmx18mmx2400mm

- Overtrek papier

Ik heb ook wat gereedschap gebruikt (soldeerbout, 3e hands, zaag…), maar niets echt exotisch.

Stap 1: Een Oled gebruiken

Een Oled. gebruiken
Een Oled. gebruiken
Een Oled. gebruiken
Een Oled. gebruiken
Een Oled. gebruiken
Een Oled. gebruiken

Om de OLED's te gebruiken moet je een bibliotheek installeren. Ik gebruik de U8G2lib van Oli Kraus, deze is zeer begrijpelijk en heeft een naslagwerk met duidelijke voorbeelden.

Om je board (ESP of arduino) aan te sluiten, moet je SDA- en SCL-pinnen vinden. Deze pinnen zijn de I2C-communicatiepinnen. Google voor de "pinout" van uw specifieke bord als u ze niet kunt vinden.

Ik heb een voorbeeldcode toegevoegd. De code werkt voor zowel arduino als ESP32, maar de ESP32 heeft minder snel onvoldoende geheugen. Alle oleds die ik tot nu toe heb geprobeerd, werken met zowel 3.3v (ESP32) als 5V.

Stap 2: Meerdere OLED's

Meerdere OLED's
Meerdere OLED's

Dit is waar mijn project begint te verschillen van veel andere wekkers. De meeste arduino's/ESP's hebben slechts één of twee I2C-pinnen. Dit soort beperkt het gebruik van I2C-onderdelen. Wat als ik 4 I2C-sensoren heb en hun meetwaarden op een I2C-display wil weergeven? Voer de multiplexer in. Met de multiplexer kunt u 7 verschillende I2C-onderdelen aanspreken. Hierdoor kan mijn ESP32 een I2C real-time klok gebruiken en de tijd weer geven met I2C over de 4 displays (of meer, laat me je niet tegenhouden).

Ik heb een voorbeeldcode voor de ESP32 toegevoegd, vanaf nu weet ik niet zeker of de arduino het kan bijhouden. Het voorbeeld gebruikt alleen displays, het kunnen ook andere dingen zijn, zoals I2C-sensoren enz. Het principe is altijd hetzelfde, je roept het juiste kanaal aan met de "tcaselect(#);" functie, dan voer je de code uit die nodig is voor je I2C-object.

Stap 3: Een schuifbaar menu maken met een roterende encoder

Een schuifbaar menu maken met een roterende encoder
Een schuifbaar menu maken met een roterende encoder
Een schuifbaar menu maken met een roterende encoder
Een schuifbaar menu maken met een roterende encoder
Een schuifbaar menu maken met een roterende encoder
Een schuifbaar menu maken met een roterende encoder

Test eerst uw encoders. Ik heb wat code toegevoegd om je encodermodules te testen. Zoals vermeld in de benodigdheden: Ik heb mijn code alleen met succes getest met de roterende encodermodules van DF robot en de module met de ronde PCB van DIYmore. Zie de foto's hierboven voor de juiste encoders.

De bibliotheek die ik heb gebruikt is deze:

De PDF die ik heb toegevoegd helpt hopelijk met de menustructuur die ik voor mijn klok heb gebruikt.

De encoder laten werken, was voor mij het moeilijkste onderdeel van dit project. Er zijn veel verschillende encoders en veel verschillende bibliotheken die niet altijd compatibel zijn met de ESP32. Maar ik denk dat een (werkende) roterende encoder een elegante oplossing is als je iets wilt invoeren. Als ik alleen knoppen had gebruikt, had ik er meer dan 1 nodig en het instellen van de tijd zou veel drukken vergen.

Stap 4: De vorige code samenvoegen

De vorige code samenvoegen
De vorige code samenvoegen

De titel vat een beetje samen wat ik heb gedaan. Ik heb deel voor deel geprobeerd en toen heb ik alles in elkaar gezet. Maar omdat niets ooit gemakkelijk is, moest ik een aantal dingen veranderen. De seriële communicatie is een langzaam proces. Dit staat het lezen van de encoder in de weg. Om dit te verhelpen heb ik interrupts toegevoegd aan de pinnen van de encoder. De code om de encoder uit te lezen wordt dan direct opgeroepen als je aan de encoder drukt of draait.

Als je eenmaal begrijpt hoe de menu's zijn opgebouwd, zul je merken dat het heel eenvoudig is om functies naar eigen inzicht toe te voegen of te verwijderen. Misschien wilt u het huidige weer of de tijd van internet halen en weergeven?

Ik heb veel van dergelijke ideeën weggelaten omdat ik vooral een betrouwbare tijdsrust wilde. Eentje die niets automatisch doet. Ik werk heel vreemde uren in een zomertijdzone. Elke keer dat het uur wordt veranderd, ben ik nerveus om me te verslapen. Verandert mijn telefoon automatisch het uur? Zal mijn horloge? Nou, mijn klok niet, tenzij ik hem zelf verander. Maar misschien wil je je klok in de keuken zetten? Ander scenario, voeg functies toe totdat het geheugen op is!

Stap 5: Aangepaste PCB met Fritzing + Schema

Aangepaste PCB met Fritzing + Schema
Aangepaste PCB met Fritzing + Schema
Aangepaste PCB met Fritzing + Schema
Aangepaste PCB met Fritzing + Schema
Aangepaste PCB met Fritzing + Schema
Aangepaste PCB met Fritzing + Schema

Aandachtspunt: Adafruit wijst erop dat hoewel je de huzzah32 via de USB-pin kunt voeden, je moet oppassen dat je niet tegelijkertijd de micro-USB-stroomingang gebruikt. Mijn PCB wordt gevoed via de step-down buck, die vervolgens de huzzah van stroom voorziet via de USB-pin. Koppel dus altijd de externe voeding los/verwijder de huzzah van het bord tijdens het uploaden.

Ik heb ervoor gekozen om female headers op de print te solderen omdat het makkelijker is om een onderdeel te verwisselen, of om bijvoorbeeld een extra I2C sensor toe te voegen. Hierdoor kan ik ook gemakkelijk de nano of de ESP32 verwijderen om de programma's te laden.

Ik heb het Frizting-bestand toegevoegd, ik kan hier een roman typen, maar ik denk dat het voorbeeld het beste spreekt. Ik begon met het schema van de hele opstelling. Hoewel Fritzing veel onderdelen in zijn bakken heeft, is niet alles aanwezig. Soms kun je het Fritzing-gedeelte op internet vinden, soms niet. De onderdelen die ik niet kon vinden, heb ik gewoon vervangen door een vrouwelijk kopstuk. Als u er met de rechtermuisknop op klikt, kunt u de koptekst bewerken tot het aantal pinnen dat u wilt en er een pinout aan toewijzen. Ik deed dit met elk onderdeel dat ik niet kon vinden. Aangezien bijna alle modules dezelfde steek van 0,1 inch (2,54 mm) gebruiken, krijgt u de juiste afstand voor het onderdeel.

Vervolgens schakel je over naar de PCB-weergave van de fritzing-app. Er wordt een PCB geplaatst, als u erop klikt, kunt u de grootte instellen en een enkel- of dubbellaags PCB kiezen. De mijne gebruikt 2 lagen. Fritzing stelt de verbindingen voor die u in de schematische weergave hebt gemaakt. Het programma heeft een autoroute-optie, maar die gebruik ik nooit. Ik organiseer mijn verbindingen graag handmatig. In het PCB-aanzicht zitten de gele aansluitingen in de bovenste laag, de oranje in de onderste laag. Nogmaals, als u op de verbinding klikt, kunt u de eigenschappen ervan kiezen.

Om de eigenlijke PCB te maken, moet je deze exporteren als een gerber-bestand. Voordat u dit doet, kunt u onder het tabblad "routing" de ontwerpregels controleren. Als alles klopt kunt u op "exporteren voor PCB" klikken. De meeste fabrikanten zullen om een gerber-bestand vragen, dus selecteer exporteren naar gerber.

Ik heb mijn PCB besteld bij JLCPCB, ik vind het fijn dat ze je meteen een prijsopgave geven. Er zijn natuurlijk nog veel meer mogelijkheden.

Over het schema: er worden 2 spanningen gebruikt. De LED en femtobuck worden rechtstreeks gevoed door de 12V-voeding. De rest wordt gevoed via de step-down buck met 5 volt.

Stap 6: Ontwerp + lasercutter

Ontwerp + lasercutter
Ontwerp + lasercutter
Ontwerp + lasercutter
Ontwerp + lasercutter

Voor mijn eerste ontwerp probeerde ik massief eiken te gebruiken (ik volg lessen houtbewerking), maar al snel werd duidelijk dat dit niet ideaal was. Het hout is te dik, waardoor het moeilijk is om je onderdelen te passen. De 3 mm berken multiplex zorgt voor eenvoudigere manieren om de encoders en displays te bevestigen.

Ik heb een online lasercutservice gevonden, snijlab.nl, beschikbaar voor hobbyisten in Rotterdam (ze verzenden naar België, Nederland en Duitsland). Op hun website kun je je tekeningen uploaden en geven ze direct je prijs op. Ik gebruikte Autocad, die ik op het werk heb, maar de software maakt niet echt uit. Het moet gewoon een vectortekening zijn (Vectr, Illustrator, Inkscape…). De meeste winkels gebruiken kleuren om te bepalen of je wilt snijden of graveren.

Enkele dingen om in gedachten te houden:

- Maximaal. afmetingen van de lasercutter (ik tekende een kader rond mijn onderdelen)

- Min. afstand tussen sneden

- Zorg ervoor dat u geen dubbele lijnen trekt, de laser zal een extra pas doen, wat u meer kost.

- Zorg er bij het plotten naar PDF voor dat u 1:1 plot. U wilt niet verkleinen of op papier passen.

Stap 7: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst

Ik heb de klok gebouwd rond een houten frame, de panelen worden op hun plaats gehouden met M3-schroeven en inzetstukken in het frame. Mocht ik ooit een versie 2 bouwen, dan zou ik aluminium "L" profielen gebruiken om de panelen aan te bevestigen. Het was erg moeilijk om de gaten voor de messing inzetstukken precies te boren. Het kostte me erg lang, voor slechts een acceptabel resultaat. Dit zou natuurlijk betekenen dat de lasercut tekening moet worden herzien. Ik denk dat je met aluminium profielen en alleen bouten en moeren een beter resultaat krijgt.

Om het licht beter te verspreiden heb ik calqueerpapier aan de binnenkant van de perforaties geplakt. Hierdoor krijgt het licht een mooie gloed.

Stap 8: Stop hier niet

Stop hier niet
Stop hier niet
Stop hier niet
Stop hier niet
Stop hier niet
Stop hier niet

Het project draait om een ESP32, ik heb hem amper gebruikt. Mijn slaapkamerverlichting kan momenteel op afstand worden bediend met blynk. Ze besturen met de klok is slechts een kleine stap verder. Misschien wil je wat extra displays die je de temperatuur rond je huis laten zien? Of wat lokale sensoren (er zijn nog steeds vrije I2C-verbindingen op die multiplexer!). Misschien de tijd/wekker instellen via een app en bluetooth?

Laat me weten wat je hebt veranderd, wat je zou veranderen, wat ik zou moeten veranderen…

Aanbevolen: