Taula de continguts:

Rellotge en temps real amb Arduino: 3 passos
Rellotge en temps real amb Arduino: 3 passos

Vídeo: Rellotge en temps real amb Arduino: 3 passos

Vídeo: Rellotge en temps real amb Arduino: 3 passos
Vídeo: 3 CHICKEN LIVER PATE RECIPES!! GUESTS WILL BE SHOCKED!! COOKING SHOW 2024, Juliol
Anonim
Rellotge en temps real amb Arduino
Rellotge en temps real amb Arduino

En aquest projecte, crearem un rellotge amb l’ajut del mòdul Arduino i RTC. Com sabem, l'Arduino no pot mostrar l'hora real, de manera que farem servir el mòdul RTC per mostrar l'hora adequada a la pantalla LCD. Llegiu atentament tot el pas, us ajudarà molt a fer el rellotge.

El codi Arduino DS3231 és com el codi DS1307 i funciona amb els dos xips RTC.

El codi Arduino que hi ha a sota no utilitza cap biblioteca per al DS3231 RTC, la biblioteca Wire serveix per a la correspondència entre l'Arduino i el DS3231 mitjançant la convenció I2C.

Sí! Molts enginyers electrònics en depenen per als seus projectes basats en el temps, però RTC no és completament fiable. Funciona amb bateria i s’ha de canviar aviat o després. Arribant a projectes IoT, ocupa valuosos pins SPI (Serial Peripheral Interface) i s’embolica amb cables enredats. Solució … Aquí arriba el nostre heroi NTP (Network time protocol). El NTP és tan precís ja que obté temps d’Internet. Operarem aquest protocol mitjançant un mode client-servidor. el procés és tan senzill que el nostre Nodemcu actua com a client i sol·licita un paquet NTP al servidor mitjançant UDP. A canvi, el servidor envia un paquet al client que analitza les dades. NTP és el protocol universal de sincronització horària. Ara il·luminem la nostra estació de treball dels laboratoris

Pas 1: components necessaris

  • Taula Arduino
  • Taula RTC DS3231
  • Pantalla LCD de 16x2
  • 2 x polsador
  • Resistència variable (o potenciòmetre) de 10 K ohmis
  • Resistència de 330 ohms
  • Bateria mòbil de 3V
  • Taula de pa
  • Filferros de pont

Mocula RTC DS3231

El temps és un sentit essencial que es requereix en aquest trepidant món dels éssers humans. Projecte en temps real

Utilitzem RTC (A. K. A rellotge en temps real)

RTC Real-time-clock (RTC) és un circuit integrat (IC) que fa un seguiment de l’hora actual. RTC s’encarrega del temps en mode real. El RTC sol trobar-se a les plaques base dels ordinadors i als sistemes incrustats per requerir un accés oportú.

Pas 2: connexió del rellotge Arduino

Connexió del rellotge Arduino
Connexió del rellotge Arduino
  • Connecteu el pin SCL al mòdul RTC a l'Arduino A5
  • Connecteu el pin SDA al mòdul RTC a l'Arduino A4
  • Connecteu VCC a 5v i GND a GND
  • Connecteu un polsador al passador 8
  • Connecteu un altre polsador al passador 9
  • Connecteu RS de pantalla LCD al pin 2 d'Arduino
  • Connecteu l'E de la pantalla LCD al pin 3 d'Arduino
  • Connecteu D7 de la pantalla LCD al pin 7 d'Arduino
  • Connecteu D6 de la pantalla LCD al pin 6 d'Arduino
  • Connecteu D5 de la pantalla LCD al pin 5 d'Arduino
  • Connecteu D4 de la pantalla LCD al pin 4 d'Arduino
  • Connecteu VSS & K a GND
  • Connecteu VDD & A al 5v
  • Connecteu vo al pin de sortida del potenciòmetre

Pas 3: Codi del rellotge Arduino amb RTC

Codi per al rellotge Arduino amb RTC
Codi per al rellotge Arduino amb RTC

El DS3231 només funciona amb format BCD i per convertir el BCD en decimal i viceversa he utilitzat les 2 línies següents (exemple per minut): // Converteix BCD en decimalminut = (minut >> 4) * 10 + (minut i 0x0F);

// Converteix decimal a BCDminute = ((minut / 10) << 4) + (minut% 10); void DS3231_display (): mostra l'hora i el calendari, abans de mostrar l'hora i les dades del calendari es converteixen de BCD a format decimal. void blink_parameter ():

// Rellotge i calendari en temps real amb botons ajustats que fan servir DS3231 i Arduino // inclouen el codi de biblioteca LCD #include // inclouen el codi de biblioteca de filferro (necessari per a dispositius de protocol I2C) #include // Connexions del mòdul LCD (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); void setup () {pinMode (8, INPUT_PULLUP); // el botó1 està connectat al pin 8 pinMode (9, INPUT_PULLUP); // el botó2 està connectat al pin 9 // configureu el nombre de columnes i files de la pantalla LCD lcd.begin (16, 2); Wire.begin (); // Uneix-te al bus i2c} char Time = "HORA:::"; char Calendar = "DATA: / / 20"; byte i, segon, minut, hora, data, mes, any; void DS3231_display () {// Converteix BCD en segon decimal = (segon >> 4) * 10 + (segon i 0x0F); minut = (minut >> 4) * 10 + (minut & 0x0F); hora = (hora >> 4) * 10 + (hora & 0x0F); data = (data >> 4) * 10 + (data & 0x0F); mes = (mes >> 4) * 10 + (mes i 0x0F); any = (any >> 4) * 10 + (any & 0x0F); // Temps de conversió final [12] = segon% 10 + 48; Temps [11] = segon / 10 + 48; Temps [9] = minut% 10 + 48; Temps [8] = minut / 10 + 48; Temps [6] = hora% 10 + 48; Temps [5] = hora / 10 + 48; Calendari [14] = any% 10 + 48; Calendari [13] = any / 10 + 48; Calendari [9] = mes% 10 + 48; Calendari [8] = mes / 10 + 48; Calendari [6] = data% 10 + 48; Calendari [5] = data / 10 + 48; lcd.setCursor (0, 0); lcd.print (Temps); // Temps de visualització lcd.setCursor (0, 1); lcd.print (calendari); // Mostra el calendari} void blink_parameter () {byte j = 0; while (j 23) // Si hores> 23 ==> hores = 0 paràmetre = 0; if (i == 1 && paràmetre> 59) // If minutes> 59 ==> minutes = 0 parameter = 0; if (i == 2 && paràmetre> 31) // If date> 31 ==> date = 1 parameter = 1; if (i == 3 && paràmetre> 12) // Si mes> 12 ==> mes = 1 paràmetre = 1; if (i == 4 && paràmetre> 99) // Si any> 99 ==> any = 0 paràmetre = 0; sprintf (text, "% 02u", paràmetre); lcd.setCursor (x, y); lcd.print (text); retard (200); // Espereu 200 ms} lcd.setCursor (x, y); lcd.print (""); // Mostra dos espais blink_parameter (); sprintf (text, "% 02u", paràmetre); lcd.setCursor (x, y); lcd.print (text); blink_parameter (); if (! digitalRead (8)) {// Si es prem el botó (pin # 8) i ++; // Increment "i" per al següent paràmetre de retorn; // Torna el valor del paràmetre i surt}}} void loop () {if (! DigitalRead (8)) {// Si es prem el botó (pin # 8) i = 0; hora = edició (5, 0, hora); minut = edició (8, 0, minut); data = edició (5, 1, data); mes = edició (8, 1, mes); any = edició (13, 1, any); // Converteix decimal a minut BCD = ((minut / 10) << 4) + (minut% 10); hora = ((hora / 10) << 4) + (hora% 10); data = ((data / 10) << 4) + (data% 10); mes = ((mes / 10) << 4) + (mes% 10); any = ((any / 10) << 4) + (any% 10); // Finalitzar la conversió // Escriure dades a DS3231 RTC Wire.beginTransmission (0x68); // Inicieu el protocol I2C amb l'adreça DS3231 Wire.write (0); // Enviar adreça de registre Wire.write (0); // Restableix les seccions i engega l'oscil·lador Wire.write (minut); // Escriu minut Wire.write (hora); // Escriu l’hora Wire.write (1); // Escriure dia (no s’utilitza) Wire.write (data); // Escriu la data Wire.write (mes); // Escriu mes Wire.write (any); // Escriure any Wire.endTransmission (); // Atureu la transmissió i deixeu anar el retard del bus I2C (200); // Espera 200 ms} Wire.beginTransmission (0x68); // Inicieu el protocol I2C amb l'adreça DS3231 Wire.write (0); // Enviar adreça de registre Wire.endTransmission (fals); // I2C reiniciar Wire.requestFrom (0x68, 7); // Sol·liciteu 7 bytes de DS3231 i deixeu anar el bus I2C al final de la lectura de segon = Wire.read (); // Llegir segons del registre 0 minut = Wire.read (); // Llegir minuts del registre 1 hora = Wire.read (); // Llegiu l’hora del registre 2 Wire.read (); // Dia de lectura del registre 3 (no utilitzat) data = Wire.read (); // Data de lectura del registre 4 mesos = Wire.read (); // Llegir el mes des del registre 5 anys = Wire.read (); // Llegiu l'any des del registre 6 DS3231_display (); // Temps de diaplay i retard del calendari (50); // Espera 50 ms}

Recomanat: