Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino Nano RTC Klok: Nauwkeurige Tijdmeting met DS1307

Onderdelen en Benodigdheden

Onderdeel Aantal Opmerking
Arduino Nano R3 1
Real Time Clock (RTC) module op basis van DS1307 1 Makkelijker dan zelf bouwen; communiceert via I2C (A4=SDA, A5=SCL)
4-digit 7-segment LED display (Common Anode) 1
Female header single row 3
Geperforeerd printplaatje (perfboard) 1 Met koperen banen (stripboard) voor makkelijker solderen
Draadjes (jumper wires) 25
Male Header 40-pins (0.1") 1

Nodige Tools en Machines

  • Solderbout
  • Multimeter (onmisbaar voor controle van soldeerverbindingen en stroomverbruik)

Apps en Online Services

  • Arduino IDE
  • Fritzing (voor schema/PCB-ontwerp)

Over Dit Project

Dit is een eenvoudige, zelf te monteren digitale klok met de RTC DS1307-chip. De tijd wordt weergegeven op een 4-digit 7-segmentdisplay. De code is eenvoudig uit te breiden met extra functionaliteit zoals een alarm – je hebt alleen wat verbeelding en uitvindingskracht nodig. Dit project was een oefening voor complexere toepassingen en levert een mooi showstukje op voor in mijn kamer.

Hieronder volgen alle details, inclusief de problemen die ik tegenkwam bij het solderen op de PCB en hoe ik ze oploste.

Stap 1: Componenten

RTC-module (DS1307)

De DS1307 houdt de tijd bij zelfs tijdens stroomuitval. Interfacing met Arduino gebeurt via I2C-protocol (pinnen A4=SDA, A5=SCL). De DS-pin wordt niet gebruikt.

Let op: De chip is gevoelig voor tijdsdrijf (afwijking door temperatuur). Zorg dat GND en Vcc correct aangesloten zijn – op de module zit Vcc voor GND. Omgekeerde polariteit maakt de chip snel heel warm. Test met een vinger op de knoopcel bij inschakelen.

Arduino Nano RTC Klok: Nauwkeurige Tijdmeting met DS1307

Shift Register (74HC595)

De 74HC595 maakt multiplexing mogelijk – we gebruiken er twee: één voor de segmenten (a-g + decimaal), één voor digit-selectie (D1-D4). Door snel te schakelen lijken alle digits tegelijk te branden.

Let op: Ik kreeg diverse defecte chips (bijv. Q0/Q1 niet werkend, Q3 intern gegronde). Test altijd met de continuïteitsfunctie van de multimeter voordat je solder.

Arduino Nano RTC Klok: Nauwkeurige Tijdmeting met DS1307

4-digit 7-segment Display (Common Anode)

Generiek display, 12 pinnen. Nummering begint linksonder. Geen dubbele punt (colon) beschikbaar, dus gebruik ik het decimaalteken van digit 2 als scheiding tussen uren/minuten.

Let op: Segmenten a-g liggen niet op één lijn. Nooit direct op 5V aansluiten zonder stroombegrenzende weerstand!

Pinout van shift register naar display:

Segment Display Pin Shift Register Pin
A1115 (1e 595)
B71 (1e 595)
C42 (1e 595)
D23 (1e 595)
E14 (1e 595)
F105 (1e 595)
G56 (1e 595)
Decimaal37 (1e 595)
D11215 (2e 595)
D291 (2e 595)
D382 (2e 595)
D463 (2e 595)
Arduino Nano RTC Klok: Nauwkeurige Tijdmeting met DS1307 Arduino Nano RTC Klok: Nauwkeurige Tijdmeting met DS1307

Dit project is goedkoop en makkelijk te bouwen, maar vereist geduld en doorzettingsvermogen (vooral als je het op PCB soldeert). Op breadboard is het in ca. 2 uur klaar.

Code

De code gebruikt de RTClib en Wire (I2C) bibliotheken. Geschreven voor Common Anode display. Belangrijkste delen:

Hoofdprogramma (Clock Code)

#include 
#include 
#include 

RTC_DS1307 RTC;
int latchPin = 3, dataPin = 4, clockPin = 2;
int shift = 256;
const int alarmHour = 17, alarmMinute = 26;

void setup() {
  Serial.begin(9600);
  pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(13, OUTPUT);
  Wire.begin(); RTC.begin();
  if (!RTC.isrunning()) RTC.adjust(DateTime(__DATE__, __TIME__));
}

void loop() {
  DateTime now = RTC.now();
  int HOUR = now.hour(), MINUT = now.minute();
  // ... multiplexing logica voor 4 digits via shiftOut ...
  // Alarm op pin 13
  if (HOUR == alarmHour && MINUT == alarmMinute) digitalWrite(13, HIGH);
  else digitalWrite(13, LOW);
}

De volledige multiplexing-code met switch-cases voor elk digit is in het origineel te vinden.

Tijd Instellen via Serial Monitor

Omdat de DS1307 kan drijven, is er een apart programma om de tijd via de Serial Monitor in te stellen. Upload dit programma, open Serial Monitor, voer datum/tijd in (commando's: h=uren, i=minuten, s=seconden, d=dag, m=maand, y=jaar, w=dag v/d week, t=12/24u toggle, a/p=AM/PM), en upload daarna weer de hoofdcodde.

Bibliotheken

Het project gebruikt twee bibliotheken die je moet installeren in de Arduino IDE (Sketch → Include Library → Add .ZIP Library):

  1. RealTimeClockDS1307 – eigen library met uitgebreide functies (square wave, NVRAM, 12/24u). Bevat: RealTimeClockDS1307.h, .cpp, keywords.txt, README.
  2. RTClib – fork van JeeLabs, ondersteunt DS1307, DS3231, PCF8523, en meer. Bevat: RTClib.h, .cpp, README.md, library.properties.

Alle benodigde bestanden (headers, implementaties, keywords, readme) staan in de originele projectbeschrijving.

Schema

Fritzing-bestand: 7segmentClock.fzz

Productieproces

  1. Strijkplank Productie: Ontwerp, Materialen en Productieproces
  2. Koekeklok: geschiedenis, vakmanschap en moderne evolutie
  3. Geprinte Schakelprintplaten: Ontwerp, Fabricage en Toekomstige Trends
  4. Surfplank Constructie en Ontwerp: Van Polynesische Wortels tot Moderne Innovatie
  5. Een Arduino-aangedreven Robot Bouwen met Raspberry Pi: Een Stap-voor-Stap Gids
  6. RasPiRobot Board V2: Je Raspberry Pi Uitbreiden tot een Krachtige Robot-controller
  7. Arduino POV-klok: Bouw een Persistence-of-Vision LED-display
  8. DIY Arduino Woordklok – Bouw een Elegant Real-Time Display
  9. Oneindige Spiegel Klok: Oneindige Elegantie Trefst Nauwkeurige Tijd
  10. Motorconfiguratie: Uitgebreide Gids tot Typen en Kenmerken
  11. Het belang van een foutloze printplaat