Real-time klok met display op nano V3

In de blogpost van vandaag combineren we 3 producten: onze all-time popular AZ-Levering Nano V3A DS3231 Real-time Klok, en een viercijferig 7-segment LED-display.

Deze vormen een goede basis voor projecten waar de tijd een rol speelt - ongeacht of iemand een koekoeksklok wil realiseren op basis van Arduino, een tijdgecontroleerde toegangscontrole of een stempelklok met RFID-tags.

In het project van vandaag, de Arduino krijgt de tijd van de real-time klok en uitgangen op het display. Elk van de modules vereist slechts 4 aansluitingen.

We draad de componenten als volgt:

AZ-Levering Nano V3

DS3231

A5

Scl

A4

Sda

3V3

Vcc

Gnd

Gnd

 

AZ-Levering Nano V3

4-cijferig7-segmentweergave

D2

Clk

D3

Dio

+5V

Vcc

Gnd

Gnd

 

 

Bekijk schematisch

 

Voor de programmering gebruiken we dezelfde bibliotheek als in ons eBook voor het 4 Digit 7 Segment Display: TM1637Display.h.

We verbinden de real-time klok via de I2C bus. Het horloge is 0x68.

We hebben de bcdToDec-functie nodig om de binaire code die we krijgen van de real-time klok om te zetten in decimale getallen.

 

#include <Arduino.H>

#include <TM1637Beeldscherm.H>
#include <Draad.H>
#define RTC_I2C_ADDRESS 0x68 I2C-adres van de RTC DS3231
 
#define Clk 2 Arduino Pin D2 als CLK (RTC) 
#define Dio 3 Ardiono Pin D3 - DIO (RTC)
 
TM1637Beeldscherm Weergeven(Clk, Dio); // 

uint8_t bcdToDec( uint8_t Val )
{    Terug (uint8_t) ((Val / 16 * 10) + (Val % 16));
}

Int Breken = 500;
 
Int Uur,Minuut,Tweede;     Void Setup(){   Draad.Beginnen();   Seriële.Beginnen(9600);   Weergeven.setHelderheid(0x0a);     }
 
Void Lus(){    Draad.beginTransmissie(RTC_I2C_ADDRESS); Het vaststellen van de verbinding met het adres 0x68    Draad.Schrijven(0);    Draad.eindTransmissie();    Draad.verzoekVan(RTC_I2C_ADDRESS, 7);      Tweede = bcdToDec(Draad.Lezen() & 0x7f);    Minuut = bcdToDec(Draad.Lezen());     Uur = bcdToDec(Draad.Lezen() & 0x3f);           Seriële.Afdrukken(Uur);      Seriële.Afdrukken(":");      Seriële.Afdrukken(Minuut);      Seriële.Afdrukken(":");      Seriële.println(Tweede);               Weergeven.showNumberDec(Uur, Waar, 2, 0);      Weergeven.showNumberDec(Minuut, Waar, 2, 2);    Vertraging(Breken);

}

Na het uploaden van de code, kunnen we op de seriële monitor van de Arduino IDE controleren of de tijd elke halve seconde output is.

Als alles correct is aangesloten, wordt de huidige tijd weergegeven op het 7-segment display.

 

Afgewerkte bouw

 

Op deze manier hebben we de basis gelegd voor verdere projecten. Wat dacht je van een groter scherm? Sensoren voor temperatuur- en luchtdruk voor een weerstation? Of een MP3-Shield die elk uur een "koekoek" geeft?

 

We hopen dat onze blogpost vandaag heeft u geïnspireerd en we kijken uit naar uw opmerkingen. Tot de volgende post van AZ-Delivery, uw expert in micro-elektronica!


 

Für arduinoProjekte für anfänger

2 Kommentare

udo

udo

hallo,

durch diesen code stürzt ständig meine arduino ide ab.

truefirewolf

truefirewolf

Hallo,

zunächst hatte ich mich gefreut mit so wenigen Bauteilen und kurzem Code eine Digitaluhr zu bauen.

Bei genauerer Betrachtung stellt man allerdings fest, dass man die Uhrzeit so nicht einstellen kann, das gibt die Software nicht her.

Es wäre ein außerordentlicher Zufall, wenn die Uhrzeit beim Einschalten genau stimmen würde. Man benötigt ein anderes Programm wie z.B. von der Seite: http://shelvin.de/die-uhrzeit-des-rtc3231-vom-arduino-einstellen/

Betreiben kann man die so eingestellte Uhr dann mit dem oben angegeben Programm. Da die Batterie Jahre halten soll, muss o.g. Prozedur eben auch nur bei Batteriewechsel durchgeführt werden.

truefirewolf

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi