Deze op Arduino gebaseerde real-time klok is een digitale klok om real-time weer te geven met behulp van een RTC IC DS1307 die werkt op het I2C-protocol. Real-time klok betekent dat het zelfs werkt na een stroomstoring. Wanneer de stroom opnieuw wordt aangesloten, geeft het de realtime weer, ongeacht de tijd en duur dat het uit was. In dit Arduino-wekkerproject hebben we een 16x2 LCD-module gebruikt om de tijd weer te geven in - "uur, minuut, seconden, datum, maand en jaar" formaat. Er is ook een alarmoptie toegevoegd en we kunnen de alarmtijd instellen. Zodra de alarmtijd is opgeslagen in de interne EEPROM van Arduino, blijft deze bewaard, zelfs na reset of stroomstoring. Realtime klokken worden vaak gebruikt in onze computers, huizen, kantoren en elektronische apparaten om ze in realtime up-to-date te houden.
Het I2C-protocol is een methode om twee of meer apparaten met behulp van twee draden op één systeem aan te sluiten, en daarom wordt dit protocol ook wel een tweedraadsprotocol genoemd. Het kan worden gebruikt om 127 apparaten te communiceren met een enkel apparaat of processor. De meeste I2C-apparaten werken op een frequentie van 100 kHz.
Stappen voor het schrijven van gegevens van master naar slave (ontvangmodus slave)
- Zendt START-voorwaarde naar slaaf.
- Stuurt het slaafadres naar de slaaf.
- Stuur schrijfbit (0) naar slave.
- ACK-bit ontvangen van slaaf
- Zendt woorden adres naar slaaf.
- ACK-bit ontvangen van slaaf
- Stuurt gegevens naar de slaaf.
- ACK-bit ontvangen van slaaf.
- En als laatste stuurt de STOP-voorwaarde naar de slaaf.
Stappen voor het lezen van gegevens van slave naar master (slaaf-verzendmodus)
- Zendt START-voorwaarde naar slaaf.
- Stuurt het slaafadres naar de slaaf.
- Stuur leesbit (1) naar de slaaf.
- ACK-bit ontvangen van slaaf
- Gegevens ontvangen van slaaf
- ACK-bit ontvangen van slaaf.
- Stuurt STOP-voorwaarde naar de slaaf.
Om deze RTC DS1307 IC- gebaseerde digitale klok te bouwen, hebben we hier Arduino Pro Mini gebruikt, maar je kunt ook elk ander Arduino-model gebruiken zoals Arduino Uno of Arduino Nano. Samen met het Arduino-bord, DS1307 RTC IC, hebben we een 16x2 LCD-module gebruikt om de tijd en datum weer te geven, een kristallen osciallator, 7805 spanningsregelaar, een zoemer en enkele transistors en weerstanden.
Schakelschema en beschrijving
In dit op Arduino gebaseerde digitale klokcircuit hebben we drie belangrijke componenten gebruikt, namelijk IC DS1307, Arduino Pro Mini Board en 16x2 LCD-module.
Hier wordt Arduino gebruikt om de tijd van ds1307 af te lezen en weer te geven op een 16x2 LCD. DS1307 verzendt tijd / datum via 2 regels naar Arduino. Een zoemer wordt ook gebruikt voor alarmindicatie, die piept wanneer het alarm wordt geactiveerd. Hieronder wordt een blokschema weergegeven om de werking van deze Real Time Clock te begrijpen.
Zoals je in het schakelschema kunt zien, zijn de DS1307-chippen SDA en SCL verbonden met de arduino-pinnen SDA en SCL met een pull-up-weerstand die de standaardwaarde HOOG op data- en kloklijnen heeft. 32.768KHz kristaloscillator is verbonden met DS1307 chip voor het genereren van exacte 1 seconde vertraging, en een 3 volt batterij is ook aangesloten op pin 3 rd (BAT) van DS1307 die de tijd laat lopen na stroomuitval. 16x2 LCD is verbonden met arduino in 4-bit-modus. Controle pin RS, RW en En zijn direct verbonden met Arduino pin 2, GND en 3. En data pin D0-D7 is verbonden met 4, 5, 6, 7 van Arduino. Een zoemer is verbonden met arduino-pen nummer 13 via een NPN BC547-transistor met een 1 k-weerstand aan de basis.
Drie knoppen namelijk set, INC en Next worden gebruikt om het alarm in te stellen op pin 12, 11 en 10 van arduino in active low mode. Wanneer we op set drukken, wordt de alarminstellingsmodus geactiveerd en nu moeten we het alarm instellen met de INC-knop en de knop Volgende wordt gebruikt om naar het cijfer te gaan. De complete breadboard-setup van deze real-time klok met alarm wordt getoond in onderstaande afbeelding. U kunt ook een gedetailleerde tutorial bekijken over digitale wekker met AVR-microcontroller.
programma beschrijving
Om voor deze real-time klok te programmeren, hebben we enkele bibliotheken gebruikt voor het extraheren van tijd / datum uit DS1307 en voor weergave op LCD, die hieronder worden gegeven:
En initialisatie van RTC, LCD en input output worden uitgevoerd in setup loop.
Rest van dingen zoals het lezen van tijd, het instellen van een alarm wordt uitgevoerd in het lege lusgedeelte.