Innholdsfortegnelse:

Sanntidsklokke med Arduino: 3 trinn
Sanntidsklokke med Arduino: 3 trinn

Video: Sanntidsklokke med Arduino: 3 trinn

Video: Sanntidsklokke med Arduino: 3 trinn
Video: Измерьте ток до 500A с помощью шунтирующего резистора с помощью Arduino 2024, Juli
Anonim
Sanntidsklokke med Arduino
Sanntidsklokke med Arduino

I dette prosjektet skal vi lage en klokke ved hjelp av Arduino og RTC -modulen. Som vi vet kan Arduino ikke vise den faktiske tiden, så vi vil bruke RTC -modulen til å vise riktig tid på LCD -skjermen. Les hele trinnet nøye, det vil hjelpe deg mye med å gjøre uret.

DS3231 Arduino -koden er som DS1307 -koden, og den fungerer med begge RTC -brikkene.

Arduino -koden under bruker ikke noe bibliotek for DS3231 RTC, Wire -biblioteket er for korrespondansen mellom Arduino og DS3231 som bruker I2C -konvensjonen.

Ja! Mange elektronikkingeniører er avhengige av det for sine tidsbaserte prosjekter, men RTC er ikke helt pålitelig. Det er batteridrevet og må byttes ut snart eller senere. Når det kommer til IoT -prosjekter, opptar det verdifulle SPI -pinner (Serial Peripheral Interface) og blir rotete med ledninger som er viklet rundt. Løsning…. Her kommer vår helt NTP (Network time protocol). NTP er så nøyaktig siden det får tid fra internett. Vi skal bruke denne protokollen ved hjelp av en klient-server-modus. prosessen er så enkel at vår Nodemcu fungerer som en klient og ber om en NTP -pakke fra serveren ved hjelp av UDP. Til gjengjeld sender serveren en pakke til klienten som analyserer dataene. NTP er den universelle tidssynkroniseringsprotokollen. La oss nå lyse opp laboratoriets arbeidsstasjon

Trinn 1: Nødvendige komponenter

  • Arduino bord
  • DS3231 RTC -kort
  • 16x2 LCD -skjerm
  • 2 x trykknapp
  • 10K ohm variabel motstand (eller potensiometer)
  • 330 ohm motstand
  • 3V myntcellebatteri
  • Brødbrett
  • Jumper ledninger

RTC mocule DS3231

Tid er en essensiell følelse som kreves i denne fartsfylte verden av mennesker. I sanntidsprosjekt

Vi bruker RTC (A. K. A sanntidsklokke)

RTC Real-time-clock (RTC) er en integrert krets (IC) som holder oversikt over gjeldende tid. RTC tar seg av tiden i realmodus. RTC finnes vanligvis i datamaskinens hovedkort og innebygde systemer for å kreve rettidig tilgang.

Trinn 2: Tilkobling av Arduino -klokke

Tilkobling av Arduino -klokke
Tilkobling av Arduino -klokke
  • Koble SCL -pinnen til RTC -modulen til Arduino A5
  • Koble SDA -pinnen til RTC -modulen til Arduino A4
  • Koble VCC TO 5v og GND TO GND
  • Koble en trykknapp til pinnen 8
  • Koble en annen trykknapp til pinnen 9
  • Koble RS på LCD til pinne 2 på Arduino
  • Koble E på LCD til pin 3 på Arduino
  • Koble D7 på LCD til pinne 7 på Arduino
  • Koble D6 på LCD til pin 6 på Arduino
  • Koble D5 på LCD til pin 5 på Arduino
  • Koble D4 på LCD til pin 4 på Arduino
  • Koble VSS & K til GND
  • Koble VDD & A til 5v
  • Koble vo til potensiometerets utgangspinne

Trinn 3: Kode for Arduino -klokke med RTC

Kode for Arduino -klokke med RTC
Kode for Arduino -klokke med RTC

DS3231 fungerer bare med BCD -format og for å konvertere BCD til desimal og omvendt brukte jeg de to linjene nedenfor (eksempel for minutt): // Konverter BCD til desimalminutt = (minutt >> 4) * 10 + (minutt og 0x0F);

// Konverter desimal til BCDminute = ((minutt / 10) << 4) + (minutt % 10); void DS3231_display (): viser tid og kalender, før visningstid og kalenderdata konverteres fra BCD til desimalformat. ugyldig blink_parameter ():

// Sanntidsklokke og kalender med innstilte knapper ved bruk av DS3231 og Arduino // inkluderer LCD -bibliotekskode #inkluder // inkluderer trådbibliotekskode (nødvendig for I2C -protokollenheter) #inkluder // LCD -modultilkoblinger (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); ugyldig oppsett () {pinMode (8, INPUT_PULLUP); // knapp1 er koblet til pin 8 pinMode (9, INPUT_PULLUP); // knapp2 er koblet til pin 9 // konfigurer LCD -displayets antall kolonner og rader lcd.begin (16, 2); Wire.begin (); // Bli med i2c buss} char Time = "TIME:::"; char Calendar = "DATE: / / 20"; byte i, andre, minutt, time, dato, måned, år; void DS3231_display () {// Konverter BCD til desimal sekund = (andre >> 4) * 10 + (andre og 0x0F); minutt = (minutt >> 4) * 10 + (minutt & 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); // Slutt konverteringstid [12] = andre % 10 + 48; Tid [11] = andre / 10 + 48; Tid [9] = minutt % 10 + 48; Tid [8] = minutt / 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} ugyldig blink_parameter () {byte j = 0; mens (j 23) // Hvis timer> 23 ==> timer = 0 parameter = 0; if (i == 1 && parameter> 59) // Hvis minutter> 59 ==> minutter = 0 parameter = 0; if (i == 2 && parameter> 31) // Hvis dato> 31 ==> dato = 1 parameter = 1; if (i == 3 && parameter> 12) // Hvis måned> 12 ==> måned = 1 parameter = 1; if (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 200ms} lcd.setCursor (x, y); lcd.print (""); // Vis to mellomrom blink_parameter (); sprintf (tekst, "%02u", parameter); lcd.setCursor (x, y); lcd.print (tekst); blink_parameter (); hvis (! digitalRead (8)) {// Hvis knappen (pin #8) trykkes i ++; // Økning 'i' for neste parameterreturparameter; // Return parameterverdi og avslutt}}} void loop () {if (! DigitalRead (8)) {// If button (pin #8) is trykt i = 0; time = rediger (5, 0, time); minutt = rediger (8, 0, minutt); dato = rediger (5, 1, dato); måned = rediger (8, 1, måned); år = rediger (13, 1, år); // Konverter desimal til BCD minutt = ((minutt / 10) << 4) + (minutt % 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); // Avslutt konvertering // Skriv data til DS3231 RTC Wire.beginTransmission (0x68); // Start I2C -protokollen med DS3231 -adressen Wire.write (0); // Send registeradresse Wire.write (0); // Tilbakestill sesonger og start oscillator Wire.write (minutt); // Skriv minutt Wire.write (time); // Skriv time Wire.write (1); // Skriv dag (ikke brukt) Wire.write (dato); // Skriv dato Wire.write (måned); // Skriv måned Wire.write (år); // Skriv år Wire.endTransmission (); // Stopp overføringen og slipp I2C -bussforsinkelsen (200); // Vent 200ms} Wire.beginTransmission (0x68); // Start I2C -protokollen med DS3231 -adressen Wire.write (0); // Send registeradresse Wire.endTransmission (false); // I2C restart Wire.requestFrom (0x68, 7); // Be om 7 byte fra DS3231 og slipp I2C -bussen ved slutten av lesingen sekund = Wire.read (); // Les sekunder fra register 0 minutt = Wire.read (); // Les minutter fra register 1 time = Wire.read (); // Les time fra register 2 Wire.read (); // Les dag fra register 3 (ikke brukt) date = Wire.read (); // Les dato fra register 4 måneder = Wire.read (); // Les måned fra register 5 år = Wire.read (); // Les år fra register 6 DS3231_display (); // Diaplay tid og kalenderforsinkelse (50); // Vent 50 ms}

Anbefalt: