Indholdsfortegnelse:

Real -time ur med Arduino: 3 trin
Real -time ur med Arduino: 3 trin

Video: Real -time ur med Arduino: 3 trin

Video: Real -time ur med Arduino: 3 trin
Video: Взаимодействие MATLAB с оборудованием: 02. Взаимодействие MATLAB и Arduino 2024, November
Anonim
Real -time ur med Arduino
Real -time ur med Arduino

I dette projekt vil vi lave et ur ved hjælp af Arduino- og RTC -modulet. Som vi ved, kan Arduino ikke vise den faktiske tid, så vi vil bruge RTC -modulet til at vise det rigtige tidspunkt på LCD'et. Læs hele trin grundigt, det vil hjælpe dig meget med at lave uret.

DS3231 Arduino -koden er ligesom DS1307 -koden, og den fungerer med begge RTC -chips.

Arduino -koden herunder bruger ikke noget bibliotek til DS3231 RTC, Wire -biblioteket er til korrespondance mellem Arduino og DS3231, der anvender I2C -konventionen.

Ja! Mange elektronikingeniører er afhængige af det til deres tidsbaserede projekter, men RTC er ikke helt pålidelig. Det er batteridrevet og skal udskiftes snart eller senere. Når det kommer til IoT -projekter, optager det værdifulde SPI -ben (Serial Peripheral Interface) og bliver rodet med ledninger, der er viklet rundt. Løsning…. Her kommer vores helt NTP (Network time protocol). NTP er så præcis, da det får tid fra internettet. Vi kommer til at betjene denne protokol ved hjælp af en klient-server-tilstand. processen er så enkel, at vores Nodemcu fungerer som en klient og anmoder om en NTP -pakke fra serveren ved hjælp af UDP. Til gengæld sender serveren en pakke til klienten, som analyserer dataene. NTP er den universelle tidssynkroniseringsprotokol. Lad os nu tænde op for vores laboratoriums arbejdsstation

Trin 1: Påkrævede komponenter

  • Arduino bord
  • DS3231 RTC -kort
  • 16x2 LCD -skærm
  • 2 x trykknap
  • 10K ohm variabel modstand (eller potentiometer)
  • 330-ohm modstand
  • 3V møntcellebatteri
  • Brødbræt
  • Jumper ledninger

RTC mocule DS3231

Tid er en væsentlig fornemmelse, der kræves i denne hurtige verden af mennesker. I projekt i realtid

Vi bruger RTC (A. K. A Real-time ur)

RTC Real-time-clock (RTC) er et integreret kredsløb (IC), der holder styr på den aktuelle tid. RTC tager sig af tiden i real mode. RTC findes normalt i computer bundkort og integrerede systemer for at kræve rettidig adgang.

Trin 2: Tilslutning af Arduino Ur

Tilslutning af Arduino ur
Tilslutning af Arduino ur
  • Tilslut SCL -pin til RTC -modulet til Arduino A5
  • Tilslut SDA -pin til RTC -modulet til Arduino A4
  • Tilslut VCC TO 5v og GND TO GND
  • Tilslut en trykknap til tappen 8
  • Tilslut en anden trykknap til tappen 9
  • Tilslut LCD -skærmens RS til pin 2 på Arduino
  • Tilslut E på LCD til pin 3 på Arduino
  • Tilslut LCD -skærmen D7 til pin 7 på Arduino
  • Tilslut D6 på LCD til pin 6 på Arduino
  • Tilslut D5 på LCD til pin 5 på Arduino
  • Tilslut LCD -skærmens D4 til pin 4 på Arduino
  • Tilslut VSS & K til GND
  • Tilslut VDD & A til 5v
  • Tilslut vo til potentiometerudgangsstiften

Trin 3: Kode til Arduino -ur med RTC

Kode til Arduino -ur med RTC
Kode til Arduino -ur med RTC

DS3231 fungerer kun med BCD -format og for at konvertere BCD til decimal og omvendt brugte jeg de 2 linjer herunder (eksempel for minut): // Konverter BCD til decimalminute = (minut >> 4) * 10 + (minut & 0x0F);

// Konverter decimal til BCDminute = ((minut / 10) << 4) + (minut % 10); void DS3231_display (): viser tid og kalender, før visning af tid og kalenderdata konverteres fra BCD til decimalformat. ugyldig blink_parameter ():

// Realtidsur og kalender med indstillede knapper ved hjælp af DS3231 og Arduino // inkluderer LCD -bibliotekskode #include // inkluderer Wire -bibliotekskode (nødvendig til I2C -protokollenheder) #include // LCD -modulforbindelser (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); ugyldig opsætning () {pinMode (8, INPUT_PULLUP); // knap1 er forbundet til pin 8 pinMode (9, INPUT_PULLUP); // knap2 er forbundet til pin 9 // opsæt LCD -displayets antal kolonner og rækker lcd.begin (16, 2); Wire.begin (); // Deltag i i2c bus} char Time = "TIME:::"; char Kalender = "DATE: / / 20"; byte i, anden, minut, time, dato, måned, år; void DS3231_display () {// Konverter BCD til decimal sekund = (sekund >> 4) * 10 + (anden & 0x0F); minut = (minut >> 4) * 10 + (minut & 0x0F); time = (time >> 4) * 10 + (time & 0x0F); dato = (dato >> 4) * 10 + (dato & 0x0F); måned = (måned >> 4) * 10 + (måned & 0x0F); år = (år >> 4) * 10 + (år & 0x0F); // Afslut konverteringstid [12] = anden % 10 + 48; Tid [11] = sekund / 10 + 48; Tid [9] = minut % 10 + 48; Tid [8] = minut / 10 + 48; Tid [6] = time % 10 + 48; Tid [5] = time / 10 + 48; Kalender [14] = år % 10 + 48; Kalender [13] = år / 10 + 48; Kalender [9] = måned % 10 + 48; Kalender [8] = måned / 10 + 48; Kalender [6] = dato % 10 + 48; Kalender [5] = dato / 10 + 48; lcd.setCursor (0, 0); lcd.print (tid); // Vis tid lcd.setCursor (0, 1); lcd.print (kalender); // Vis kalender} void blink_parameter () {byte j = 0; mens (j 23) // Hvis timer> 23 ==> timer = 0 parameter = 0; hvis (i == 1 && parameter> 59) // Hvis minutter> 59 ==> minutter = 0 parameter = 0; hvis (i == 2 && parameter> 31) // Hvis dato> 31 ==> dato = 1 parameter = 1; hvis (i == 3 && parameter> 12) // Hvis måned> 12 ==> måned = 1 parameter = 1; hvis (i == 4 && parameter> 99) // Hvis år> 99 ==> år = 0 parameter = 0; sprintf (tekst, "%02u", parameter); lcd.setCursor (x, y); lcd.print (tekst); forsinkelse (200); // Vent 200 ms} lcd.setCursor (x, y); lcd.print (""); // Vis to mellemrum blink_parameter (); sprintf (tekst, "%02u", parameter); lcd.setCursor (x, y); lcd.print (tekst); blink_parameter (); hvis (! digitalRead (8)) {// Hvis der trykkes på knappen (pin #8) i ++; // Forøgelse 'i' for den næste parameterreturparameter; // Returnér parameterværdi, og afslut}}} void loop () {if (! DigitalRead (8)) {// Hvis der trykkes på knappen (pin #8) i = 0; time = rediger (5, 0, time); minut = rediger (8, 0, minut); dato = rediger (5, 1, dato); måned = rediger (8, 1, måned); år = rediger (13, 1, år); // Konverter decimal til BCD minut = ((minut / 10) << 4) + (minut % 10); time = ((time / 10) << 4) + (time % 10); dato = ((dato / 10) << 4) + (dato % 10); måned = ((måned / 10) << 4) + (måned % 10); år = ((år / 10) << 4) + (år % 10); // Afslut konvertering // Skriv data til DS3231 RTC Wire.beginTransmission (0x68); // Start I2C -protokol med DS3231 -adresse Wire.write (0); // Send registeradresse Wire.write (0); // Nulstil sesoner og start oscillator Wire.write (minut); // Skriv minut Wire.write (time); // Skriv time Wire.write (1); // Skriv dag (ikke brugt) Wire.write (dato); // Skriv dato Wire.write (måned); // Skriv måned Wire.write (år); // Skriv år Wire.endTransmission (); // Stop transmissionen, og slip I2C -busforsinkelsen (200); // Vent 200ms} Wire.beginTransmission (0x68); // Start I2C -protokol med DS3231 -adresse Wire.write (0); // Send registeradresse Wire.endTransmission (false); // I2C genstart Wire.requestFrom (0x68, 7); // Anmod om 7 bytes fra DS3231 og slip I2C -bus ved afslutning af læsning sekund = Wire.read (); // Læs sekunder fra register 0 minut = Wire.read (); // Læs minutter fra register 1 time = Wire.read (); // Læs time fra register 2 Wire.read (); // Læs dag fra register 3 (ikke brugt) dato = Wire.read (); // Læs dato fra register 4 måneder = Wire.read (); // Læs måned fra register 5 år = Wire.read (); // Læs år fra register 6 DS3231_display (); // Diaplay tid & kalenderforsinkelse (50); // Vent 50 ms}

Anbefalede: