Inhoudsopgave:

Realtime klok met Arduino - Ajarnpa
Realtime klok met Arduino - Ajarnpa

Video: Realtime klok met Arduino - Ajarnpa

Video: Realtime klok met Arduino - Ajarnpa
Video: 🇳🇱 DIGITALE ARDUINO KLOK MET ANIMATIE - Arduino project 2024, November
Anonim
Realtime klok met Arduino
Realtime klok met Arduino

In dit project gaan we een klok maken met behulp van de Arduino- en RTC-module. Zoals we weten, kan de Arduino de werkelijke tijd niet weergeven, dus we zullen de RTC-module gebruiken om de juiste tijd op het LCD-scherm weer te geven. Lees alle stappen aandachtig door, het zal u veel helpen om het uurwerk te maken.

De DS3231 Arduino-code is als de DS1307-code en werkt met beide RTC-chips.

De Arduino-code eronder maakt geen gebruik van een bibliotheek voor de DS3231 RTC, de Wire-bibliotheek is voor de correspondentie tussen de Arduino en de DS3231 met behulp van de I2C-conventie.

Ja! Veel elektronica-ingenieurs zijn ervan afhankelijk voor hun op tijd gebaseerde projecten, maar RTC is niet helemaal betrouwbaar. Het werkt op batterijen en moet binnenkort of later worden vervangen. Bij IoT-projecten neemt het waardevolle SPI-pinnen (Serial Peripheral Interface) in beslag en wordt het rommelig met verwarde draden. Oplossing … Hier komt onze held NTP (Network Time Protocol). NTP is zo nauwkeurig omdat het tijd krijgt van internet. We gaan dit protocol gebruiken in een client-servermodus. het proces is zo eenvoudig dat onze Nodemcu als client fungeert en een NTP-pakket van de server aanvraagt met behulp van UDP. In ruil daarvoor stuurt de server een pakket naar de client die de gegevens ontleedt. NTP is het universele tijdsynchronisatieprotocol. Laten we nu onze labs-werkplek verlichten

Stap 1: Vereiste componenten

  • Arduino-bord
  • DS3231 RTC-kaart
  • 16x2 LCD-scherm
  • 2 x drukknop
  • 10K ohm variabele weerstand (of potentiometer)
  • 330 ohm weerstand
  • 3V knoopcelbatterij
  • Breadboard
  • Doorverbindingsdraden

RTC-molecuul DS3231

Tijd is een essentieel zintuig dat nodig is in deze snelle mensenwereld. In realtime project

We gebruiken RTC (A. K. A Real-time klok)

RTC Real-time-clock (RTC) is een geïntegreerde schakeling (IC) die de huidige tijd bijhoudt. RTC zorgt voor de tijd in real-modus. De RTC wordt meestal aangetroffen op moederborden van computers en embedded systemen om tijdige toegang te vereisen.

Stap 2: Aansluiting van Arduino Clock

Aansluiting van Arduino Clock
Aansluiting van Arduino Clock
  • Sluit de SCL-pin aan op de RTC-module op de Arduino A5
  • Verbind de SDA-pin met de RTC-module met de Arduino A4
  • Verbind VCC TO 5v en GND TO GND
  • Sluit een drukknop aan op pin 8
  • Sluit nog een drukknop aan op pin 9
  • Verbind RS van LCD met pin 2 van Arduino
  • Sluit E van LCD aan op pin 3 van Arduino
  • Sluit D7 van LCD aan op pin 7 van Arduino
  • Sluit D6 van LCD aan op pin 6 van Arduino
  • Sluit D5 van LCD aan op pin 5 van Arduino
  • Sluit D4 van LCD aan op pin 4 van Arduino
  • Verbind VSS & K met de GND
  • Sluit VDD & A aan op de 5v
  • Sluit vo aan op de uitgangspin van de potentiometer

Stap 3: Code voor Arduino-klok met RTC

Code voor Arduino-klok met RTC
Code voor Arduino-klok met RTC

De DS3231 werkt alleen met BCD-indeling en om de BCD naar decimaal te converteren en vice versa heb ik de 2 onderstaande regels gebruikt (voorbeeld voor minuut):// Converteer BCD naar decimalminuten = (minuut >> 4) * 10 + (minuut & 0x0F);

// Converteer decimaal naar BCDminuut = ((minuut/10) << 4) + (minuut % 10); void DS3231_display(): geeft tijd en kalender weer, voordat tijd en kalendergegevens worden geconverteerd van BCD naar decimaal formaat.void blink_parameter():

// Realtime klok en kalender met instelknoppen met behulp van DS3231 en Arduino // inclusief LCD-bibliotheekcode #inclusief // inclusief draadbibliotheekcode (nodig voor I2C-protocolapparaten) #inclusief // LCD-moduleverbindingen (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); void setup () { pinMode (8, INPUT_PULLUP); // button1 is verbonden met pin 8 pinMode (9, INPUT_PULLUP); // button2 is verbonden met pin 9 // stel het aantal kolommen en rijen van het LCD-scherm in lcd.begin (16, 2); Draad.begin(); // Join i2c bus} char Time = "TIME::: "; char Kalender = "DATUM: / /20 "; byte i, seconde, minuut, uur, datum, maand, jaar; void DS3231_display () {// Converteer BCD naar decimale seconde = (tweede >> 4) * 10 + (tweede & 0x0F); minuut = (minuut >> 4) * 10 + (minuut & 0x0F); uur = (uur >> 4) * 10 + (uur & 0x0F); datum = (datum >> 4) * 10 + (datum & 0x0F); maand = (maand >> 4) * 10 + (maand & 0x0F); jaar = (jaar >> 4) * 10 + (jaar & 0x0F); // Einde conversie Tijd [12] = seconde % 10 + 48; Tijd [11] = seconde / 10 + 48; Tijd[9] = minuut % 10 + 48; Tijd [8] = minuut / 10 + 48; Tijd[6] = uur % 10 + 48; Tijd [5] = uur / 10 + 48; Kalender[14] = jaar % 10 + 48; Kalender[13] = jaar / 10 + 48; Kalender[9] = maand % 10 + 48; Kalender[8] = maand / 10 + 48; Kalender[6] = datum % 10 + 48; Kalender[5] = datum / 10 + 48; lcd.setCursor(0, 0); lcd.print (Tijd); // Weergavetijd lcd.setCursor (0, 1); lcd.print (Kalender); // Kalender weergeven } void blink_parameter () {byte j = 0; while(j 23) // Als uren > 23 ==> uren = 0 parameter = 0; if(i == 1 && parameter > 59) // If minuten > 59 ==> minuten = 0 parameter = 0; if(i == 2 && parameter > 31) // If date > 31 ==> datum = 1 parameter = 1; if(i == 3 && parameter > 12) // If maand > 12 ==> maand = 1 parameter = 1; if(i == 4 && parameter > 99) // Als jaar > 99 ==> jaar = 0 parameter = 0; sprintf(tekst, "%02u", parameter); lcd.setCursor(x, y); lcd.print(tekst); vertraging (200); // Wacht 200 ms } lcd.setCursor (x, y); lcd.print(" "); // Toon twee spaties blink_parameter (); sprintf(tekst, "%02u", parameter); lcd.setCursor(x, y); lcd.print(tekst); blink_parameter(); if(!digitalRead(8)){ // Als knop (pin #8) is ingedrukt i++; // Verhoging 'i' voor de volgende parameterretourparameter; // Return parameterwaarde en exit } } } void loop() { if(!digitalRead(8)){ // Als knop (pin #8) wordt ingedrukt i = 0; uur = bewerken (5, 0, uur); minuut = bewerken (8, 0, minuut); datum = bewerken (5, 1, datum); maand = bewerken (8, 1, maand); jaar = bewerken(13, 1, jaar); // Converteer decimaal naar BCD minuut = ((minuut/10) << 4) + (minuut % 10); uur = ((uur / 10) << 4) + (uur % 10); datum = ((datum / 10) << 4) + (datum % 10); maand = ((maand/10) << 4) + (maand % 10); jaar = ((jaar / 10) << 4) + (jaar % 10); // Eindconversie // Schrijf gegevens naar DS3231 RTC Wire.beginTransmission (0x68); // Start I2C-protocol met DS3231-adres Wire.write (0); // Stuur registeradres Wire.write(0); // Reset seconden en start oscillator Wire.write (minuut); // Schrijf minuut Wire.write (uur); // Schrijfuur Wire.write(1); // Schrijfdag (niet gebruikt) Wire.write (datum); // Schrijfdatum Wire.write (maand); // Schrijf maand Wire.write (jaar); // Schrijf jaar Wire.endTransmission(); // Stop de verzending en laat de I2C-busvertraging (200) los; // Wacht 200 ms } Wire.beginTransmission (0x68); // Start I2C-protocol met DS3231-adres Wire.write (0); // Stuur registeradres Wire.endTransmission (false); // I2C herstart Wire.requestFrom (0x68, 7); // Vraag 7 bytes aan van DS3231 en laat de I2C-bus vrij aan het einde van de leesseconde = Wire.read(); // Lees seconden van register 0 minuut = Wire.read (); // Lees minuten van register 1 uur = Wire.read(); // Lees uur uit register 2 Wire.read(); // Lees dag uit register 3 (niet gebruikt) datum = Wire.read(); // Lees datum uit register 4 maand = Wire.read(); // Lees maand uit register 5 jaar = Wire.read(); // Lees jaar uit register 6 DS3231_display(); // Diaplay-tijd en kalendervertraging (50); // Wacht 50ms}

Aanbevolen: