LCD klok, alarm en timer met bewegingsdetector op Arduino. Een eenvoudige binaire klok met een wekker op Arduino

Als je het moeilijk vindt om 's ochtends op te staan ​​en je een hekel hebt aan het rinkelende geluid van de wekker, kun je je eigen wekker maken met een beetje geld en een beetje tijd.

Het alarmlicht is ontworpen om u in een rustig ritme wakker te maken en neemt geleidelijk in helderheid toe tegen de tijd dat u wakker moet worden. Het idee is om een ​​beroep te doen op onze natuurlijke neiging om bij zonsopgang op te staan ​​en ons lichaam te slim af te zijn in een uitgebalanceerd circadiaans ritme dat het ontwakingsproces vergemakkelijkt. Natuurlijk zullen jullie hier niet allemaal naar streven, maar persoonlijk heb ik gemerkt dat warme kleuren 's ochtends erg rustgevend zijn en deze wekker helpt me enorm.

Veel wekkers op Arduino proberen het spectrum van zonlicht te reproduceren met speciale lampen die de tint en temperatuur van de ochtendzon herhalen. Onze versie gebruikt echter gewone RGB-LED's, die het gevoel van natuurlijk licht ruwweg kunnen nabootsen en bovendien verschillende unieke kleurencombinaties en effecten kunnen creëren. De assemblage zal gebaseerd zijn op Arduino Uno met een Real Time Clock (RTC) -module en een 7-segments klokdisplay.

Stap 1: Lijst met materialen

  • Houten kist (kist) (Amazon)
  • Arduino Uno of gelijkwaardig
  • Spanningsregelaar LM7805 5V
  • Realtimeklok (RTC)-module (Amazon)
  • 7 Segment LED-klokweergave (Amazon)
  • Potentiometer (Amazone)
  • Stuurhoeksensor (twist) (Amazon)
  • Knopen voor krutilok. Kan knoppen gebruiken voor elektrische gitaar
  • Drukknopschakelaar met LED (Amazon)
  • Acryl staven (Amazon)
  • RGB LED's WS2812B - 8 stuks (Amazon)
  • Schroeven en moeren
  • Kleine magneten
  • PCB of breadboard + draden
  • houtbeits

Stap 2: ontwerp

Het montageschema vindt u via de link. Het belangrijkste element van de klok is de RTC-module. Het zorgt voor een betrouwbaar behoud van de ingestelde tijd en heeft een kleine batterij voor het geval het hele alarm wordt uitgeschakeld. De RTC-module en het 7-segments display communiceren met de Arduino via het I2C-protocol.

Gegevensinvoer wordt uitgevoerd met een draaiknop met een ingebouwde knop, die wordt gebruikt om de tijd en het alarm in te stellen, evenals om de modi van de diodes te gloeien en hun helderheid aan te passen. Er is een potentiometer nodig om de helderheid van het horlogedisplay aan te passen. Als ik naar de toekomst kijk, merk ik dat een andere draai de installatie eenvoudiger zal maken en functionaliteit zal toevoegen, maar het Arduino-circuit complexer zal maken. De knopschakelaar schakelt de diodes in. Ik had een mooie metalen knop met een ingebouwde diode beschikbaar, maar elke knop is voldoende.

Ik gebruikte een 9V-stroomadapter met een ingebouwde 5,5 * 2,5 mm-aansluiting. De LM7805-regelaar is nodig om de spanning naar 5V te verlagen. De mijne gaf 0.75A aan bij 9V en alles was in orde met mij, omdat de WS2812B-diodes genoeg hadden van deze voeding op hun maximale helderheid. Op volle helderheid trekt het hele apparaat zo'n 450mA.

Al het ijzer past in een houten kist (je kunt het schilderen voor een mooiere look). De acht gebruikte WS2812B LED's kunnen worden geprogrammeerd om verschillende lichteffecten te verkrijgen. Hun licht wordt verstrooid door acrylstaven die aan de bovenkant van de doos zijn gemonteerd. Om de staven te installeren, werd een plaat geprint op een 3D-printer, waarover later zal worden geschreven.

Bestanden

Stap 3: bedrading en isolatie





Voor mijn project heb ik een PCB gemaakt op basis van een "kale" Arduino Uno-schakeling met een LM7805-regelaar, stekkers en zones voor aansluiting op een RTC en een 7-segments display. Het enige dat niet nodig was, werd eenvoudig uit het bord gesneden zodat het in de doos kon passen. Als je geen geschikt bord hebt, soldeer dan gewoon de modules, schakelaars en LED's op de Arduino Uno.

De potentiometer heeft het ene uiteinde naar aarde (GND), het andere naar 5V en het middelste uiteinde naar de analoge ingang. De wendingen moeten aan de grond en aan de twee interrupt-pinnen (2 en 3) op de Arduino worden gesoldeerd. De knop op de knop en de bovenste knop zijn aan de grond en aan de bijbehorende digitale ingangspinnen gesoldeerd. Vergeet ook niet de stroom aan te sluiten op de LED op de bovenste knop (als je dezelfde knop hebt als de mijne). We verbinden het display en de RTC-module met draden met 5V, GND en de bijbehorende pinnen SDA en SCL op de Arduino. Ik gebruikte condensatoren van 1uF in de input en output van de LM7805 en een andere op het 5V-spoor om de LED's te ondersteunen.

Je kunt de meeste connectoren rechtstreeks op het bord aansluiten, maar ik gebruikte standaard 2,54 mm-connectoren en krimpkousen voor mijn verbindingen. Dit vereenvoudigt eventuele toekomstige verbeteringen of tweaks.

Dan moet je alles in de doos installeren, gaten maken voor acrylstaven, knoppen, wendingen, display, stroomaansluiting en bovenste knop. Als er na installatie losse onderdelen zijn, bevestig deze dan met hete lijm.

Houd er bij het boren van gaten rekening mee dat u het waarschijnlijk handiger vindt om van buiten naar binnen te boren en een scherpe boor en messen te gebruiken om het afbrokkelen van het hout tot een minimum te beperken. Om dezelfde reden werd een basis gemaakt voor acrylstaven - het boren van gaten in het hout voor elke staaf zou veel "vuil" hebben veroorzaakt.

Bestanden

Stap 4: LED's en kleuring





Toon nog 5 afbeeldingen






Sluit de 5V, GND-draden en de datalijn aan op de WS2812B acht-diodestrip. Ik heb mezelf verzekerd door de verbindingen in te smeren met epoxy, omdat ze vaak breken onder belasting en daarna zeer moeilijk te herstellen zijn. Vervolgens heb ik ze gewoon aan de binnenkant van de doos gelijmd.

Acrylstaven werden voor elke lengte in twee stukken gesneden: 6, 8, 10, 12 cm. Daarna ging ik over de bezuinigingen met schuurpapier en gepolijst. De eenvoudigste manier om acrylstaven te installeren, is door voorzichtig gaten in het hout te boren. Ik heb het werk niet gedaan door het hout te beschadigen, dus heb ik een eenvoudige basis in 3D geprint die ook op de LED's zou passen. Over het algemeen is dit detail netjes. Het hield de staven stevig in lijn met de LED's, zodat het niet eens iets hoefde te lijmen, en het voegt ook een beetje contrast toe aan de esthetiek van het horloge. Om te voorkomen dat de doos opengaat, heb ik kleine magneten op de koffer en het deksel geplakt.

Het enige dat nog moet worden gedaan, is de behuizing schilderen en de delen bedekken die u ongeverfd wilt laten (het is beter om de hele behuizing te schilderen voordat u het strijkijzer erin installeert)

Bestanden

Stap 5: code en eindweergave


Het bestand met de code is hieronder bijgevoegd. Het is vrij eenvoudig en de set functies is minimaal. Het moeilijkste deel van de interface-ontwikkeling was dat het, met behulp van de minimale set beschikbare knoppen, mogelijk was om de gloeimodi en alarmtijd te wijzigen, evenals de kleurveranderingseffecten aan te passen. De lijst met nuttige bibliotheken die in het project werden gebruikt, wordt hieronder weergegeven:

  • RTClib.h - Real Time Clock-bibliotheek
  • Adafruit_Neopixel.h - Gebruikt voor WS2812B-diodes
  • Adafruit_GFX.h en Adafruit_LEDBackpack.h - voor 7 segment horlogeweergave
  • Wire.h - voor I2C-communicatie met display en RTC
  • TimerOne.h en EEPROM.h

Met een enkele druk op de knop op de spinner kunt u de spinner aan / uit zetten en het alarm instellen. Door lang op de spinnerknop te drukken, kunt u de tijdinstellingen instellen met behulp van de spinner. Door op de bovenste knop te drukken gaan de LED's aan. Wanneer ze zijn ingeschakeld, verandert de knopknop de gloeimodi en door aan de knop te draaien, kunt u de helderheid van de gloed wijzigen. Modi en helderheid worden opgeslagen in EEPROM. De instellingen zijn zodanig dat wanneer je het alarm voor een bepaalde tijd instelt, de diodes in de laatst ingestelde gloeimodus op de minimale helderheid gaan branden. Na 20 minuten zal de helderheid geleidelijk toenemen tot het maximaal mogelijke. Na nog eens 20 minuten gaat het licht uit (door op de bovenste knop te drukken, kunt u het eerder uitschakelen).

Deze wekkermontage bevat geen geluidssignalen. Ik gebruik naast het zonsopgangalarm gewoon de wekker op mijn telefoon om mezelf te verzekeren tegen verslapen. Ik zet bijvoorbeeld de wekker om 5 uur 's ochtends, deze zal om 5:20 uur zo fel mogelijk branden. Voor het geval ik niet wakker word, is er ook een hoorbaar alarm op mijn telefoon om 5:20. Dan word ik definitief wakker, doe mijn ochtendklusjes en om 05.40 uur gaat de wekker vanzelf.

Glow-modi zijn onder meer:

  • Effen geel/oranje, aangepast aan ongeveer de kleurtemperatuur van zonsopgang
  • Verschillende tinten geel/oranje, oranje/rood - het effect van veranderende kleuren van zonsopgang
  • Regenboogeffect. Aanpasbaar via RGB-instellingen verzonden naar LED's
  • Verschillende tweekleurige effecten die langzaam in elkaar overlopen door de LED's.

Nu heb je een stijlvolle LED-wekker voor zonsopgang om je 's ochtends te helpen opstaan!

In veel projecten is Arduino vereist om het tijdstip van optreden van bepaalde gebeurtenissen te volgen en vast te leggen. Met de realtimeklokmodule, uitgerust met een extra batterij, kunt u de huidige datum opslaan, ongeacht de beschikbaarheid van stroom op het apparaat zelf. In dit artikel zullen we het hebben over de meest voorkomende RTC-modules DS1307, DS1302, DS3231 die kunnen worden gebruikt met het Arduino-bord.

De klokmodule is een klein bord met in de regel een van de microschakelingen DS1307, DS1302, DS3231. Bovendien kunt u praktisch een mechanisme vinden om een ​​batterij op het bord te installeren. Dergelijke borden worden vaak gebruikt om tijd, datum, dag van de week en andere chronometrische parameters bij te houden. De modules werken op autonome voeding - batterijen, accu's, en blijven tellen, zelfs als de Arduino is uitgeschakeld. De meest voorkomende horlogemodellen zijn DS1302, DS1307, DS3231. Ze zijn gebaseerd op de RTC-module (Real Time Clock) die is aangesloten op de Arduino.

De klok telt in eenheden die handig zijn voor een gewoon persoon - minuten, uren, dagen van de week en andere, in tegenstelling tot gewone tellers en klokgeneratoren, die "ticks" lezen. Arduino heeft een speciale functie genaamd millis (), die ook verschillende tijdsintervallen kan lezen. Maar het grootste nadeel van deze functie is dat deze teruggaat naar nul wanneer de timer wordt ingeschakeld. Het kan alleen worden gebruikt om de tijd af te lezen, het is niet mogelijk om de datum of dag van de week in te stellen. Om dit probleem op te lossen, worden real-time klokmodules gebruikt.

Het elektronische circuit omvat een microcircuit, een voeding, een kristalresonator en weerstanden. De kristalresonator werkt op 32768 Hz, wat handig is voor een conventionele binaire teller. Het DS3231-circuit heeft ingebouwde kristal- en thermische stabilisatie voor hoge nauwkeurigheidswaarden.

Vergelijking van populaire RTC-modules DS1302, DS1307, DS3231

In deze tabel hebben we een lijst gegeven van de meest populaire modules en hun belangrijkste kenmerken.

Naam Frequentie Nauwkeurigheid Ondersteunde protocollen
DS1307 1 Hz, 4,096 kHz, 8,192 kHz, 32,768 kHz Afhankelijk van kwarts - meestal bereikt de waarde 2,5 seconden per dag, het is onmogelijk om een ​​nauwkeurigheid van meer dan 1 seconde per dag te bereiken. De nauwkeurigheid is ook temperatuurafhankelijk. I2C
DS1302 32.768 kHz 5 seconden per dag I2C, SPI
DS3231 Twee uitgangen - de eerste op 32.768 kHz, de tweede - programmeerbaar van 1 Hz tot 8.192 kHz ± 2 ppm bij temperaturen van 0C tot 40C.

± 3,5 ppm bij temperaturen van -40C tot 85C.

Nauwkeurigheid temperatuurmeting - ± 3C

I2C

DS1307-module

DS1307 is een module die wordt gebruikt voor timing. Het is geassembleerd op basis van de DS1307ZN-microschakeling, stroom wordt geleverd door een lithiumbatterij om een ​​autonome werking voor een lange periode te realiseren. De batterij op het bord is aan de achterkant bevestigd. De module heeft een AT24C32-microschakeling - dit is een niet-vluchtige EEPROM van 32 KB. Beide microschakelingen zijn onderling verbonden via de I2C-bus. DS1307 is energiezuinig en bevat een 2100 klok en kalender.

De module heeft de volgende parameters:

  • Voeding - 5V;
  • Bedrijfstemperatuurbereik van -40C tot 85C;
  • 56 bytes geheugen;
  • Lithiumbatterij LIR2032;
  • Implementeert 12- en 24-uursmodi;
  • I2C-interface ondersteuning.

De module is gerechtvaardigd om te gebruiken in gevallen waarin gegevens vrij zelden worden gelezen, met een interval van een week of meer. Hierdoor bespaar je op stroom, want bij ononderbroken gebruik ben je meer spanning kwijt, ook als je een accu hebt. Door de aanwezigheid van geheugen kunt u verschillende parameters registreren (bijvoorbeeld temperatuurmeting) en de informatie lezen die van de module wordt ontvangen.

Interactie met andere apparaten en uitwisseling van informatie met hen wordt uitgevoerd met behulp van de I2C-interface van de SCL- en SDA-pinnen. In de schakeling zijn weerstanden ingebouwd die het mogelijk maken om het gewenste signaalniveau te leveren. Het bord heeft ook een speciale plaats voor het monteren van een temperatuursensor DS18B20. De contacten zijn verdeeld in 2 groepen, pitch 2,54 mm. De eerste groep contacten bevat de volgende conclusies:

  • DS - uitgang voor de DS18B20-sensor;
  • SCL - kloklijn;
  • SDA - datalijn;
  • VCC - 5V;

De tweede groep contacten bevat:

  • SQ - 1 MHz;
  • BAT - ingang voor lithiumbatterij.

Om verbinding te maken met het Arduino-bord, heb je het bord zelf nodig (in dit geval wordt de Arduino Uno overwogen), de RTC DS1307 real-time klokmodule, draden en een USB-kabel.

Om de controller op Arduino aan te sluiten, worden 4 pinnen gebruikt - VCC, aarde, SCL, SDA .. VCC van klok is verbonden met 5V op Arduino, aarde van klok - naar aarde van Arduino, SDA - A4, SCL - A5.

Om met de klokmodule aan de slag te gaan, moet u de DS1307RTC-, TimeLib- en Wire-bibliotheken installeren. Kan worden gebruikt om te werken en RTCLib.

De RTC-module controleren

Wanneer de eerste code wordt uitgevoerd, leest het programma eenmaal per seconde gegevens uit de module. Ten eerste kunt u zien hoe het programma zich zal gedragen als u de batterij uit de module verwijdert en vervangt door een andere terwijl het Arduino-bord niet op de computer is aangesloten. U moet een paar seconden wachten en de batterij verwijderen, als gevolg hiervan zal het horloge opnieuw opstarten. Dan moet je een voorbeeld selecteren in het menu Voorbeelden → RTClib → ds1307. Het is belangrijk om de baudrate correct in te stellen op 57600 bps.

Wanneer u het seriële monitorvenster opent, zouden de volgende regels moeten verschijnen:

Toont tijd 0: 0: 0. Dit komt doordat het horloge stroom verliest en het aftellen stopt. Om deze reden mag de batterij niet worden verwijderd terwijl de module in bedrijf is.

Om de tijd op de module in te stellen, moet je de lijn in de schets vinden

RTC.aanpassen (DateTime (__ DATE__, __TIME__));

Deze regel bevat gegevens van de computer die wordt gebruikt om de realtimeklokmodule te flashen. Voor een juiste werking dient u eerst de juistheid van de datum en tijd op de computer te controleren en pas daarna de klokmodule te laten knipperen. Na het instellen geeft de monitor de volgende gegevens weer:

De instellingen zijn correct gemaakt en het is niet nodig om de real-time klok opnieuw te configureren.

Tijd lezen. Zodra de module is geconfigureerd, kunnen tijdverzoeken worden verzonden. Gebruik hiervoor de functie now () die een DateTime-object retourneert dat informatie over de tijd en datum bevat. Er zijn een aantal bibliotheken die worden gebruikt om de tijd te lezen. Bijvoorbeeld RTC.year () en RTC.hour () - ze ontvangen afzonderlijk informatie over het jaar en uur. Bij het werken met hen kan er een probleem ontstaan: er wordt bijvoorbeeld gevraagd om de tijd weer te geven om 1:19:59. Voordat de tijd 1:20:00 wordt weergegeven, geeft het horloge de tijd 1:19:00 weer, dat wil zeggen dat er een minuut verloren gaat. Daarom is het raadzaam om deze bibliotheken te gebruiken in gevallen waar het lezen niet vaak voorkomt - eens in de paar dagen. Er zijn andere functies voor het bellen van de tijd, maar als u fouten wilt verminderen of vermijden, is het beter om nu () te gebruiken en de nodige metingen eruit te halen.

Voorbeeldproject met i2C klokmodule en display

Het project is een gewone klok, de indicator geeft de exacte tijd weer en de dubbele punt tussen de cijfers knippert met tussenpozen van één seconde. Om het project uit te voeren, hebt u een Arduino Uno-bord nodig, een digitale indicator, een realtime klok (in dit geval de hierboven beschreven ds1307-module), een verbindingsscherm (in dit geval wordt Troyka Shield gebruikt), een klok batterij en draden.

Het project maakt gebruik van een eenvoudige viercijferige indicator op de TM1637-microschakeling. Het apparaat heeft een tweedraadsinterface en biedt 8 niveaus van monitorhelderheid. Wordt alleen gebruikt om de tijd in uren: minuten weer te geven. De indicator is eenvoudig in gebruik en eenvoudig aan te sluiten. Het is voordelig voor projecten die geen minuut- of uurlijkse gegevensvalidatie vereisen. LCD-monitoren worden gebruikt om meer volledige informatie over tijd en datum te verkrijgen.

De klokmodule maakt verbinding met de SCL / SDA-pinnen, die gerelateerd zijn aan de I2C-bus. Je moet ook aarde en stroom aansluiten. Maak verbinding met Arduino op dezelfde manier als hierboven beschreven: SDA - A4, SCL - A5, aarde van de module naar aarde met Arduino, VCC -5V.

De indicator is eenvoudig aangesloten - de CLK- en DIO-pinnen ervan zijn verbonden met alle digitale pinnen op het bord.

Schetsen. Gebruik de setup-functie om de code te schrijven, waarmee u de klok en indicator kunt initialiseren en de compilatietijd kunt vastleggen. Het weergeven van de tijd op het scherm gebeurt met behulp van lus.

#erbij betrekken #include "TM1637.h" #include "DS1307.h" // u moet alle benodigde bibliotheken opnemen om met de klok en het display te werken. char compileTime = __TIME__; // compileertijd. #define DISPLAY_CLK_PIN 10 #define DISPLAY_DIO_PIN 11 // nummers van de Arduino-uitgangen waarop het scherm is aangesloten; void setup () (display.set (); display.init (); // verbind en stel de screen.clock.begin (); // zet de klok aan.byte hour = getInt (compileTime, 0); byte minuut = getInt (compileertijd, 2); byte seconde = getInt (compileTime, 4); // ophalen van de time.clock.fillByHMS (uur, minuut, seconde); // voorbereiden op schrijven naar de tijd module.clock.setTime ( ); // bezig met opnemen van informatie in intern geheugen, begin met lezen.) void loop () (int8_t timeDisp; // weergave op elk van de vier bits.clock.getTime (); // verzoek om time.timeDisp = clock.hour/10; timeDisp = clock.hour% 10; timeDisp = clock.minute/10; timeDisp = clock.minute% 10; // verschillende bewerkingen om tientallen, eenheden van uren, minuten, etc. display.display ( timeDisp); // toon de tijd aan het indicatordisplay.point (clock.second% 2? POINT_ON: POINT_OFF); // zet de dubbele punt aan en uit na een seconde.) char getInt (const char * string, int startIndex) ( return int (string - "0") * 1 0 + int (tekenreeks) - "0"; // acties om de tijd correct in een tweecijferig geheel getal te schrijven. Anders worden slechts een paar tekens op het scherm weergegeven. )

Daarna moet de schets worden geüpload en wordt de tijd op de monitor weergegeven.

Het programma kan enigszins worden geüpgraded. Als u de stroom uitschakelt, zal de bovenstaande schets ervoor zorgen dat het scherm de tijd toont die is ingesteld tijdens het compileren nadat het is ingeschakeld. In de setup-functie wordt telkens de tijd berekend die is verstreken vanaf 00:00:00 tot het begin van de compilatie. Deze hash wordt vergeleken met wat is opgeslagen in de EEPROM, die wordt bewaard tijdens het uitschakelen.

Voeg de functies EEPROMWriteInt en EEPROMReadInt toe om tijd naar of van niet-vluchtig geheugen te schrijven en te lezen. Ze zijn nodig om te controleren of de hash overeenkomt / niet overeenkomt met de hash die in de EEPROM is geschreven.

U kunt het project verbeteren. Als u een LCD-monitor gebruikt, kunt u een project maken waarbij de datum en tijd op het scherm worden weergegeven. De aansluiting van alle elementen is weergegeven in de afbeelding.

Als gevolg hiervan moet de code een nieuwe bibliotheek specificeren (voor schermen met vloeibare kristallen is dit LiquidCrystal) en lijnen toevoegen aan de lusfunctie () om de datum te krijgen.

Het werkalgoritme is als volgt:

  • Aansluiting van alle componenten;
  • Controleer - de tijd en datum op het beeldscherm moeten elke seconde veranderen. Als de tijd niet correct is op het scherm, moet u de functie RTC.write (tmElements_t tm) aan de schets toevoegen. Problemen met verkeerd ingestelde tijden zijn te wijten aan het feit dat de klokmodule bij het afsluiten de datum en tijd terugzet naar 00:00:00 01/01/2000.
  • Met de schrijffunctie haal je de datum en tijd uit de computer, waarna de juiste parameters op het scherm verschijnen.

Conclusie

Klokmodules worden in veel projecten gebruikt. Ze zijn nodig voor dataloggingsystemen, bij het maken van timers en besturingsapparaten die volgens een bepaald schema werken in huishoudelijke apparaten. Met algemeen verkrijgbare en goedkope modules kunt u projecten maken zoals een wekker of een sensordatalogger, informatie opnemen op een SD-kaart of de tijd weergeven op het scherm. In dit artikel hebben we typische gebruiksscenario's en opties onderzocht voor het aansluiten van de meest populaire soorten modules.

Het voltooide project in één module bevat veel functies: klok met datum- en tijdweergave, stopwatch, wekker, bewegingsregistratie (voor automatische uitschakeling wanneer u er niet bent).

materialen:
- Arduino Uno
- LCD-schild (met knoppen, het project gebruikt een schild van DFRobot)
- Doos voor de koffer
- Zoemer
- Infrarood bewegingssensor (PIR)
- Aansluitdraden (vrouwelijk / vrouwelijk)
- Jack 2,1 mm
- Adapter voor kroon 9V 2,1 mm / 5,5 mm
- Kroon 9 V
- Realtime klok

Stap een. Realtime klokmodule.
De klokmodule wordt vaak als constructor geleverd, deze dient u zelf in elkaar te zetten. Over het algemeen is montage geen probleem, en fabrikanten geven montage-instructies voor hun module vrij. Ook wordt de batterij bij het horloge meegeleverd, deze gaat ruim drie jaar mee.

Stap twee. Stekker.
Om de verbinding van de structuur met de Arduino te vereenvoudigen, gebruikt de auteur een 2,1 mm-aansluiting met gesoldeerde pinnen. Er wordt een gat in de doos gemaakt en de krik wordt vastgezet met lijm. Op deze manier is verbinding maken met de Arduino geen probleem. De kroon wordt eenvoudig op de achterkant van de doos geïnstalleerd. Als je goed naar de foto kijkt, zie je nog een gaatje in de doos. Je hoeft het niet te doen, het is gewoon een mislukte poging om een ​​gaatje te maken, de krik paste er gewoon niet in.

Stap drie. Draden aansluiten.
De auteur kocht veelkleurige moeder/moederdraden. Ze waren goedkoop, maar vergemakkelijkten het montageproces aanzienlijk. De geleiders werden aangesloten op een zoemer, een PIR-bewegingssensor, een klokmodule, zodat dit later allemaal op een LCD-scherm kon worden aangesloten.

Stap vier. Aansluiting op LCD-scherm.
Er zijn 5 rijen pinnen op het schild, hun pinnen op de Arduino zijn respectievelijk 1-5. Er is een pin voor 5V en GND, dat is alles wat werd gebruikt om aan te sluiten. Arduino analoge pinnen worden gebruikt om gegevens over te dragen met zoemer, sensor en real-time klok. De sensor met de klok was natuurlijk verbonden met aarde en stroom.

Stap vijf. Installatie in een doos.
In deze stap wordt de structuur in een aparte doos geplaatst. Allereerst worden de kabels van het LCD-scherm in de doos geplaatst. De Arduino wordt vastgezet met een schroef aan de rechteronderkant van de behuizing. Eén schroef is voldoende om de microcontroller vast te houden, vooral omdat de auteur een doos gebruikt waarin de ribben van de stijfheid zich bevinden in plaats van de gaten voor de andere twee schroeven. Vervolgens wordt op de Arduino een LCD-shield geïnstalleerd, waarvan de kabels aan de rechterkant om het bord gaan (te zien op de onderstaande foto). De klokmodule is geweldig voor installatie in de linkerbenedenhoek, er wordt één schroef gebruikt om hem vast te zetten. Deze installatie van de componenten stelt u in staat om de 2,1 mm jack eenvoudig op de Arduino aan te sluiten. De bewegingssensor is zo geplaatst dat het mogelijk is om deze te verwijderen, omdat het interfereert met het aansluiten van de USB-kabel op het bord.

Stap zes. Programmeren.
Zoals aangegeven aan het begin van het artikel, moet de klok niet alleen de tijd en datum weergeven, maar ook een timer met alarmen. Er zijn 5 knoppen op het schild die kunnen worden geprogrammeerd. Ze zullen worden gebruikt voor verschillende modi van het horloge. De zoemer klinkt wanneer elke knop wordt ingedrukt en wanneer de wekker werkt, geeft deze verschillende pieptonen.

Schets voor Arduino.
De auteur is gebaseerd op een schets van Adafruit, deze is ontwikkeld voor een realtime klok. Het maakt gebruik van de RTClib-bibliotheek. Vervolgens voegde de auteur een stukje code toe voor het LCD-schild van DFRobot (optie voor knopbediening). En ik heb exclusief voor dit project een stukje code van mezelf toegevoegd. De definitieve versie van de code is te downloaden onder het artikel. Hieronder staan ​​foto's met verschillende bedrijfsmodi van de klok.

Stap zeven. Functies van de knoppen.
Zoals je op de onderstaande foto kunt zien, is elke knop op het schild gesigneerd, vijf ervan zijn als volgt geprogrammeerd:
- De eerste knop (SELECT) is het menu. De knop toont het scrollen door de beschikbare functies (timer, wekker).
- Tweede knop (LINKS) - deze knop is verantwoordelijk voor het selecteren van een functie. Extra functie van de knop verhoogt de waarde met 10 wanneer de uren en minuten worden ingevoerd.
- De derde en vierde knop (UP, DOWN) worden gebruikt om de uur- en minuutwaarden te verhogen en te verlagen bij het instellen van de wekker en timer. Extra functie van knoppen om te schakelen tussen AM- en PM-tijd van de dag.
- De vijfde knop (RECHTS) is de enter-knop. Wordt gebruikt om een ​​waarde te accepteren (tijd timer instellen, uren).
- Zesde knop (RST) - de knop wordt gebruikt om de Arduino opnieuw op te starten.

Een project dat perfect past in het interieur van je doe-het-zelfhoek, kamer, garage of kantoor waar je robots en allerlei geek geautomatiseerde projecten bouwt op Arduino.

Bij de output van het project krijg je de volgende features binnen één module:

  • Kijk maar!;
  • Datum- en tijdweergave op LCD-scherm;
  • Ingebouwde tijdteller (om bij te houden hoeveel tijd aan één project is besteed);
  • Wekker (om u eraan te herinneren dat u te laat bent en het tijd is om een ​​warming-up te regelen);
  • Beweging volgen (bespaart batterijvermogen door het LCD-scherm uit te schakelen wanneer u niet in de buurt bent);
  • Past perfect in het interieur van uw Arduino-ontwikkelaar!

Benodigde materialen voor het project

  • LCD Keypad Shield (LCD-schild met knoppen) voor Arduino (in dit geval - van de fabrikant DFRobot)
  • Realtimeklok (RTC) DS1307 (van Adafruit)
  • Sluitdoos (te vinden in een radiowinkel of besteld bij de Chinezen);
  • Zoemer (piëzozoemer);
  • PIR (passieve infrarood bewegingssensor);
  • mama/mama dirigenten;
  • Aansluiting 2,1 mm;
  • Batterijadapter 9 V 5,5 mm / 2,1 mm;
  • Crohn 9 V.
Foto's van onderdelen en samenstellingen voor het project




De realtimeklokmodule bouwen

Soms wordt een realtime klokmodule (bijvoorbeeld van het bedrijf Adafruit DS1307) als losse componenten geleverd. De montage mag geen problemen opleveren. Bovendien zijn er uitstekende instructies voor het gebruik en de montage van de real-time klokmodule. In de regel wordt de batterij bij de module geleverd. Het werkt minimaal drie jaar op één batterij.

Stekker

Om problemen met het aansluiten van de Arduino te voorkomen, wordt een 2,1 mm jack gebruikt, waaraan de contacten zijn gesoldeerd. Er wordt een gat in de doos gemaakt, de krik is gelijmd. Nu is het aansluiten van de Arduino geen probleem.

De 9 V-batterij (kroon) wordt eenvoudig op de achterkant van de doos geïnstalleerd.



Als het je is opgevallen, zit er nog een gaatje in de doos. Dit was de eerste mislukte poging. Jack paste niet in dit gat.

We verbinden draden met alle elementen

Ik raad ten zeerste aan om veelkleurige moeder / moedergeleiders te kopen. Ze zijn goedkoop en het assemblageproces wordt aanzienlijk vergemakkelijkt. We verbinden de geleiders met de real-time klokmodule, PIR-bewegingssensor, zoemer, om ze in de toekomst aan te sluiten op het LCD-scherm.

We verbinden alles met het LCD-schild

Daarna een stukje code toegevoegd uit de schets van DFRobot voor het LCD-schild (inclusief de knopbedieningsoptie). Deze schets is te downloaden.

Knopfuncties

De knoppen zijn gelabeld op het LCD-scherm (kijk naar de foto). De eerste vijf van de zes beschikbare knoppen zijn als volgt geprogrammeerd:


Knop # 1 (gelabeld SELECT) is de Menu-knop. Deze knop is verantwoordelijk voor het weergeven van een scrollende lijst met beschikbare functies (timer, instellen van een alarm).

Knop # 2 (gesigneerd LINKS) - Selecteer knop. Selecteert een functie. Opmerking: wordt ook gebruikt om met 10 te verhogen wanneer uren, minuten, enz. zijn geselecteerd.

Knoppen # 3 en 4 (aangeduid met OMHOOG en OMLAAG) - Knoppen voor verhogen en verlagen. Wordt gebruikt om de uren en minuten te verhogen en te verlagen bij het instellen van een timer of alarm. Wordt ook gebruikt om te schakelen tussen AM- en PM-tijden van de dag.

Knop # 5 (gesigneerd RECHTS) - GO! Wordt gebruikt om de geselecteerde waarde te accepteren (bijvoorbeeld minuten of uren instellen).

Knop # 6 (gemarkeerd met RST) - Reset, waarmee onze Arduino wordt gereset.

Laat hieronder uw opmerkingen, vragen en uw persoonlijke ervaring achter. In de discussie ontstaan ​​vaak nieuwe ideeën en projecten!