Мазмуну:
- 1 -кадам: Керектүү компоненттер
- 2 -кадам: Arduino саатынын туташуусу
- 3 -кадам: RTC менен Arduino саатынын коду
Video: Ардуино менен реалдуу убакыт сааты: 3 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:39
Бул долбоордо биз Arduino жана RTC модулунун жардамы менен саат жасайбыз. Биз билгендей, Arduino чыныгы убакытты көрсөтө албайт, андыктан биз ЖКда туура убакытты көрсөтүү үчүн RTC модулун колдонобуз. Бардык кадамдарды кунт коюп окуңуз, ал саатты жасоого чоң жардам берет.
DS3231 Arduino коду DS1307 кодуна окшош жана ал RTC чиптери менен тең иштейт.
Астындагы Arduino коду DS3231 RTC үчүн эч кандай китепкананы колдонбойт, Wire китепканасы I2C конвенциясын колдонуп Arduino менен DS3231дин кат алышуусу үчүн.
Ооба! Көптөгөн электроника инженерлери убакытка негизделген долбоорлорунан көз каранды, бирок RTC толук ишенимдүү эмес. Бул батарейка менен иштейт жана эртеби -кечпи алмаштырылышы керек. IoT долбоорлоруна келе турган болсок, ал баалуу SPI (Serial Perifheral Interface) казыктарын ээлейт жана айланасында чырмалышкан зымдар менен башаламан болуп калат. Чечим …. Бул жерде биздин каарман NTP (Network time protocol) келет. NNTP интернеттен убакыт алгандыктан абдан так. Биз бул протоколду кардар-сервер режимин колдонуу менен иштетебиз. процесс ушунчалык жөнөкөй болгондуктан, биздин Nodemcu кардар катары иштейт жана UDP аркылуу серверден NTP пакетин сурайт. Өз кезегинде, сервер маалыматтарды талдай турган кардарга пакет жөнөтөт. NTP - универсалдуу убакыт синхрондоштуруу протоколу. Эми лабораторияларыбыздын иштөө бекетин жарык кылалы
1 -кадам: Керектүү компоненттер
- Arduino тактасы
- DS3231 RTC тактасы
- 16x2 LCD экран
- 2 x баскыч
- 10K ом өзгөрмө каршылыгы (же потенциометр)
- 330-Ом каршылыгы
- 3V монеталуу батарея
- Breadboard
- Өткөргүч зымдар
RTC mocule DS3231
Убакыт-бул тез адамзаттык дүйнөдө талап кылынган маанилүү сезим. Реалдуу убакыт долбоорунда
Биз RTC колдонобуз (A. K. A Реалдуу убакыт сааты)
RTC Real-time-clock (RTC)-бул интегралдык схема (IC), ал учурдагы убакытты көзөмөлдөйт. RTC реалдуу режимде убакытка кам көрөт. RTC, адатта, өз убагында жетүүнү талап кылуу үчүн компьютердик энелерде жана камтылган системаларда кездешет.
2 -кадам: Arduino саатынын туташуусу
- SCL пинди RTC модулуна Arduino A5ке туташтырыңыз
- SDA пинин RTC модулуна Arduino A4ке туташтырыңыз
- VCCди 5v менен GNDге GNDге туташтырыңыз
- 8 -пинге баскычты туташтырыңыз
- 9 -пинге башка баскычты туташтырыңыз
- Ардуинонун 2 -пинине RSтин ЖК туташтырыңыз
- Ардуинонун 3 -пинине LCD E'син туташтырыңыз
- ЖКнын D7'син Arduino 7 -пин туташтырыңыз
- LCD D6'ны Arduino 6 -пинге туташтырыңыз
- LCD D5'ти Arduino 5 -пин туташтырыңыз
- ЖКнын D4'ин Arduino 4 -пинге туташтырыңыз
- GSNге VSS & K туташтырыңыз
- VDD & A'ны 5vге туташтырыңыз
- Вотту потенциометрдин чыккычына туташтырыңыз
3 -кадам: RTC менен Arduino саатынын коду
DS3231 BCD форматында гана иштейт жана BCDди ондукка жана тескерисинче айландыруу үчүн мен төмөндөгү 2 сапты колдоном (мүнөт үчүн мисал): // BCDди ондук мүнөткө айландыруу = (мүнөт >> 4) * 10 + (мүнөт & 0x0F);
// Ондукту BCDminuteга айландыруу = ((мүнөт / 10) << 4) + (мүнөт % 10); void DS3231_display (): убакытты жана календарды көрсөтөт, убакытты көрсөтүүдөн мурун жана календардык маалыматтар BCDден ондук форматка которулат. void blink_parameter ():
// DS3231 жана Arduino аркылуу баскычтары бар реалдуу убакыт сааты жана календары // LCD китепканасынын кодун камтыйт #include // Wire китепканасынын кодун камтыйт (I2C протоколунун түзмөктөрү үчүн керек) #кошуу // ЖК модулунун байланыштары (RS, E, D4, D5), D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); void setup () {pinMode (8, INPUT_PULLUP); // button1 8 pinMode (9, INPUT_PULLUP) пинге туташкан; // button2 9 -пинге туташкан // ЖКнын мамычаларынын жана катарларынын санын орнотуу lcd.begin (16, 2); Wire.begin (); // i2c автобусына кошул} char Time = "TIME:::"; char Календар = "DATE: / / 20"; байт i, экинчи, мүнөт, саат, күн, ай, жыл; void DS3231_display () {// BCDди ондук секундга айландыруу = (экинчи >> 4) * 10 + (экинчи & 0x0F); мүнөт = (мүнөт >> 4) * 10 + (мүнөт & 0x0F); саат = (саат >> 4) * 10 + (саат & 0x0F); дата = (дата >> 4) * 10 + (дата & 0x0F); ай = (ай >> 4) * 10 + (ай & 0x0F); жыл = (жыл >> 4) * 10 + (жыл & 0x0F); // Аяктоо айландыруу убактысы [12] = экинчи % 10 + 48; Убакыт [11] = экинчи / 10 + 48; Убакыт [9] = мүнөт % 10 + 48; Убакыт [8] = мүнөт / 10 + 48; Убакыт [6] = саат % 10 + 48; Убакыт [5] = саат / 10 + 48; Календарь [14] = жыл % 10 + 48; Календарь [13] = жыл / 10 + 48; Календарь [9] = ай % 10 + 48; Календарь [8] = ай / 10 + 48; Календарь [6] = дата % 10 + 48; Календар [5] = дата / 10 + 48; lcd.setCursor (0, 0); lcd.print (Убакыт); // Display lcd.setCursor (0, 1); lcd.print (Календарь); // Календарды көрсөтүү} void blink_parameter () {байт j = 0; while (j 23) // Эгерде саат> 23 ==> саат = 0 параметр = 0; if (i == 1 && parameter> 59) // If minutes> 59 ==> minutes = 0 parameter = 0; if (i == 2 && parameter> 31) // If date> 31 ==> date = 1 parameter = 1; if (i == 3 && parameter> 12) // If month> 12 ==> month = 1 parameter = 1; if (i == 4 && parameter> 99) // If year> 99 ==> year = 0 parameter = 0; sprintf (текст, "%02u", параметр); lcd.setCursor (x, y); lcd.print (текст); кечигүү (200); // Күтүү 200ms} lcd.setCursor (x, y); lcd.print (""); // Эки боштукту көрсөтүү blink_parameter (); sprintf (текст, "%02u", параметр); lcd.setCursor (x, y); lcd.print (текст); blink_parameter (); if (! digitalRead (8)) {// If button (pin #8) is pressed i ++; // Кийинки параметр кайтаруучу параметр үчүн 'i' көбөйтүү; // Параметрдин маанисин кайтаруу жана чыгуу}}} void loop () {if (! DigitalRead (8)) {// If button (pin #8) is pressed i = 0; саат = түзөтүү (5, 0, саат); мүнөт = түзөтүү (8, 0, мүнөт); дата = түзөтүү (5, 1, дата); ай = түзөтүү (8, 1, ай); жыл = түзөтүү (13, 1, жыл); // Ондукту BCD мүнөтүнө айландыруу = ((мүнөт / 10) << 4) + (мүнөт % 10); саат = ((саат / 10) << 4) + (саат % 10); дата = ((дата / 10) << 4) + (дата % 10); ай = ((ай / 10) << 4) + (ай % 10); жыл = ((жыл / 10) << 4) + (жыл % 10); // Конверсияны аяктоо // DS3231 RTC Wire.beginTransmissionга маалыматтарды жазуу (0x68); // DS3231 дареги менен I2C протоколун баштаңыз Wire.write (0); // Реестр дарегин жөнөтүү Wire.write (0); // Сезондорду баштапкы абалга келтирүү жана осцилляторду баштоо Wire.write (мүнөт); // Жазуу мүнөтү Wire.write (саат); // Жазуу сааты Wire.write (1); // Жазуу күнү (колдонулбайт) Wire.write (дата); // Жазуу датасы Wire.write (ай); // Жазуу айы Wire.write (жыл); // Wire.endTransmission жылын жазыңыз (); // Берүүнү токтотуу жана I2C шинанын кечигүүсүн бошотуу (200); // Күтүү 200ms} Wire.beginTransmission (0x68); // DS3231 дареги менен I2C протоколун баштаңыз Wire.write (0); // Реестр дарегин жөнөтүү Wire.endTransmission (жалган); // I2C кайра баштоо Wire.requestFrom (0x68, 7); // DS3231ден 7 байт сураңыз жана I2C шинаны экинчи окуу аяктагандан кийин чыгарыңыз = Wire.read (); // Регистрден секунддарды окуңуз 0 мүнөт = Wire.read (); // Реестрден минустарды окуу 1 саат = Wire.read (); // Реестрден саат окуу 2 Wire.read (); // Реестрден окуу күнү 3 (колдонулган эмес) дата = Wire.read (); // Реестрден окуу датасы 4 ай = Wire.read (); // Окуу айы реестрден 5 жыл = Wire.read (); // 6 -регистрден окуу жылы DS3231_display (); // Диаплей убактысы жана календардык кечигүү (50); // 50м күтө}
Сунушталууда:
Реалдуу убакыт режиминде кудук суунун температурасы, өткөрүмдүүлүк жана суунун деңгээли: 6 кадам (сүрөттөр менен)
Реалдуу убакытта кудуктун суусунун температурасы, өткөрүмдүүлүгү жана суунун деңгээлин өлчөөчү: Бул көрсөтмөлөр температураны, электр өткөрүмдүүлүгүн (EC) жана казылган кудуктарда суунун деңгээлин көзөмөлдөө үчүн арзан, реалдуу убакытта суу өлчөгүчтү кантип курууну сүрөттөйт. Эсептегич казылган кудуктун ичине илинип, суунун температурасын өлчөө үчүн, EC жана
Minitel реалдуу убакыт сааты: 5 кадам
Minitel реалдуу убакыт сааты: 1978 -жылы France Telecom тарабынан түзүлгөн, Minitel маалымат издөө жана текст жазуу кызматы болгон. Бүткүл дүйнөлүк желеге чейин эң ийгиликтүү тармак деп эсептелет. 2008 -жылы 30 жыл өткөндө тармак акыры жабылган. (Бул тууралуу көп маалымат бар
Arduino IDEди колдонуу менен M5stick C менен саат жасоо - M5stack M5stick-C менен RTC реалдуу убакыт сааты: 4 кадам
Arduino IDEди колдонуу менен M5stick C менен саат жасоо | R5 Real Time Clock With M5stack M5stick-C: Салам балдар бул көрсөтмөлөрдө биз m5stackтин m5stick-M5stack тактасы менен саат жасоону үйрөнөбүз, Arduino IDE.So m5stick күндү, убакытты көрсөтөт. дисплейде айдын жумасы
NODEMCU Lua ESP8266 реалдуу убакыт сааты менен (RTC) & EEPROM: 7 кадам
NODEMCU Lua ESP8266 реалдуу убакыт сааты менен (RTC) & EEPROM: маалымат журналын сактоону кааласаңыз, туура убакытты алуу маанилүү. Убакытты интернеттеги булактардан алуунун ар кандай жолдору бар. Сиз эмне үчүн ESP8266ди колдонуп, убактыңызды бөлбөйсүз деп сурашыңыз мүмкүн? Мүмкүн, анын өзүнүн ички RTCи бар (Реалдуу убакыт
Көшүү реалдуу убакыт сааты: 4 кадам
Чөйрөдөгү реалдуу убакыт сааты: AimI бул саатты жасадым, анткени менде даректүү LED тилкеси бар жана мен аны колдонгум келет. Анан бөлмөмдө дубалдарына дал келген жакшы саат жок экенин көрдүм. Ошентип, мен түстөрдү колдонуучулардын маанайына жараша өзгөртө турган саат жасоону чечтим