Мазмуну:
- 1 -кадам: Модулуңузду Arduino менен туташтыруу
- 2 -кадам: Сиздин RTC модулуңуздан убакытты окуу жана жазуу
- 3 -кадам:
Video: DS1307 жана DS3231 реалдуу убакыт сааттарынын модулдарын Arduino менен колдонуу: 3 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Биз ар кандай булактардан Arduino менен DS1307 жана DS3231 реалдуу убакыт режиминдеги модулдарды кантип колдонуу боюнча суроо-талаптарды ала беребиз-андыктан бул аларды колдонуу боюнча эки бөлүктөн турган окуу куралынын биринчиси. Бул Arduino окуу куралы үчүн бизде реалдуу убакыт режиминде эки модуль бар, алардын бири Maxim DS1307 (чарчы модул) жана DS3231 (тик бурчтуу модуль) негизинде.
Чыныгы убакыт модулдарындагы ICлердин ортосунда эки негизги айырма бар, бул убакытты сактоонун тактыгы. Биринчи модулда колдонулган DS1307 абдан жакшы иштейт, бирок тышкы температура DS1307дин ички эсептегичин иштетүүчү осциллятордун схемасына таасир этиши мүмкүн.
Бул көйгөй сыяктуу сезилиши мүмкүн, бирок, адатта, сааттын айына болжол менен беш мүнөткө өчүрүлүшүнө алып келет. DS3231 алда канча так, анткени анын сырткы факторлорго таасирин тийгизбеген ички осциллятору бар - жана жылына эң көп дегенде бир нече мүнөткө чейин так. Эгерде сизде DS1307 модулу бар болсо- өзүңүздү жаман сезбеңиз, бул дагы эле чоң баалуулук тактасы жана сизге жакшы кызмат кылат. Модулдардын экөө менен тең камдык батарейка талап кылынат.
Жаңы CR2032 батареясын сатып алып, аны модулга туура келтирүү жакшы. Убакытты жана датаны көзөмөлдөө менен бирге, бул модулдарда кичинекей EEPROM, сигнализация функциясы (DS3231 гана) жана ар кандай жыштыктардын төрт бурчтуу толкундарын жаратуу мүмкүнчүлүгү бар-мунун баары экинчи окуу куралы болот.
1 -кадам: Модулуңузду Arduino менен туташтыруу
Эки модуль тең I2C автобусун колдонушат, бул байланышты абдан оңой кылат.
Биринчиден, I2C автобусу үчүн Arduino же шайкеш такталарыңызда кайсы казыктар колдонулганын аныкташыңыз керек - бул SDA (же маалымат) жана SCL (же саат) катары белгилүү болот. Arduino Uno же шайкеш такталарда бул пиндер маалымат жана саат үчүн A4 жана A5 болуп саналат; Arduino Megaде пиндер маалымат жана саат үчүн D20 жана D21 болуп саналат; Ал эми эгер сиз Mini Miniге шайкеш келген казыктар A4 жана A5 болсо негизги казыктарга параллель болгон маалыматтар жана саат үчүн.
DS1307 модулу
Эгерде сизде DS1307 модулу бар болсо, анда сиз зымдарды тактага же кээ бир кирүүчү баштыктарга туташтырышыңыз керек, андыктан секиргич зымдарды колдоно аласыз. Андан кийин SCL жана SDA казыктарын Arduinoңузга, Vcc пинди 5V пинге жана GND менен GNDге туташтырыңыз.
DS3231 модулу
Бул модулду туташтыруу оңой, анткени фабрикадагы тактага төөнөгүчтөр орнотулган. Сиз жөн эле секирүүчү зымдарды SCL жана SDAдан Arduinoго, модулдун Vcc жана GND казыктарынан 5V же 3.3. V жана GNDге чейин иштете аласыз. Бирок булар зымдарды өз алдынча ширетүү үчүн экинчи тарапта кайталанат. Бул модулдардын экөөндө тең керектүү резисторлор бар, андыктан өзүңүздү кошуунун кажети жок. I2C автобусуна туташкан бардык түзмөктөр сыяктуу эле, SDA жана SCL зымдарынын узундугун минимумга чейин сактоого аракет кылыңыз.
2 -кадам: Сиздин RTC модулуңуздан убакытты окуу жана жазуу
RTC модулуңузду туташтыргандан кийин. төмөнкү эскизди киргизиңиз жана жүктөңүз. Эскиздеги эскертүүлөр жана функциялар DS3231ге гана тиешелүү болсо да, код DS1307 менен иштейт.
#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Нормалдуу ондук сандарды экилик коддуу ондук байтка айлантуу decToBcd (байт val) {return ((val/10*16) + (val%10)); } // бинардык коддолгон ондукту кадимки ондук сандарга айлантуу byte bcdToDec (byte val) {return ((val/16*10) + (val%16)); } void setup () {Wire.begin (); Serial.begin (9600); // баштапкы убакытты бул жерге коюңуз: // DS3231 секунд, мүнөт, саат, күн, күн, ай, жыл // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (байт секунд, байт мүнөт, байт саат, байт dayOfWeek, байт dayOfMonth, байт ай, байт жылы) {// DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS) убактысы жана датасы жөнгө салат; Wire.write (0); // Wire.write (decToBcd (экинчи)) реестринен баштоо үчүн кийинки киргизүүнү коюңуз; // секунддарды коюу Wire.write (decToBcd (мүнөт)); // мүнөттөрдү коюу Wire.write (decToBcd (саат)); // сааттарды коюу Wire.write (decToBcd (dayOfWeek)); // жуманын күнүн коюу (1 = жекшемби, 7 = ишемби) Wire.write (decToBcd (dayOfMonth))); // белгиленген күн (1ден 31ге чейин) Wire.write (decToBcd (ай)); // Wire.write айын коюу (decToBcd (жыл)); // белгиленген жыл (0дон 99га чейин) Wire.endTransmission (); } жараксыз readDS3231time (байт *секунд, байт *мүнөт, байт *саат, байт *dayOfWeek, байт *dayOfMonth, байт *ай, байт *жыл) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // DS3231 регистр көрсөткүчүн 00h Wire.endTransmission () коюңуз; Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // 0032 *регистрден башталган DS3231ден жети байт маалымат сураңыз *bcdToDec (Wire.read () & 0x7f); *мүнөт = bcdToDec (Wire.read ()); *саат = bcdToDec (Wire.read () & 0x3f); *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *ай = bcdToDec (Wire.read ()); *жыл = bcdToDec (Wire.read ()); } void displayTime () {байт секунд, мүнөт, саат, dayOfWeek, dayOfMonth, ай, жыл; // DS3231 readDS3231timeдан маалыматтарды алуу (& экинчи, & мүнөт, & саат, & dayOfWeek, & dayOfMonth, & ай, & жыл); // аны сериялык мониторго жөнөтүү Serial.print (саат, DEC); // Serial.print (":") көрсөтүлгөндө байт өзгөрмөсүн ондук санга айландыруу; эгер (мүнөт <10) {Serial.print ("0"); } Serial.print (мүнөт, DEC); Serial.print (":"); if (second <10) {Serial.print ("0"); } Serial.print (экинчи, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (ай, DEC); Serial.print ("/"); Serial.print (жыл, DEC); Serial.print ("Аптанын күнү:"); switch (dayOfWeek) {1 -абал: Serial.println ("Жекшемби"); тыныгуу; 2 -жагдай: Serial.println ("Дүйшөмбү"); тыныгуу; 3 -жагдай: Serial.println ("Шейшемби"); тыныгуу; 4 -жагдай: Serial.println ("Шаршемби"); тыныгуу; 5 -жагдай: Serial.println ("Бейшемби"); тыныгуу; 6 -жагдай: Serial.println ("Жума"); тыныгуу; 7 -жагдай: Serial.println ("Ишемби"); тыныгуу; }} void loop () {displayTime (); // реалдуу убакыт режиминдеги маалыматтарды сериялык монитордо көрсөтүү, кечиктирүү (1000); // секунд сайын}
Код көп болушу мүмкүн, бирок ал башкарылуучу бөлүктөргө жакшы бөлүнөт.
Ал алгач I2C автобус байланышы үчүн колдонулган Wire китепканасын камтыйт, андан кийин RTC үчүн автобустун дарегин 0x68 деп аныктайт. Булардан кийин ондук сандарды BCDге (экилик коддуу ондук) жана тескерисинче айландыруучу эки функция келет. Бул зарыл, анткени RTC ICлери ондук эмес, BCDде иштейт.
SetDS3231time () функциясы саатты коюу үчүн колдонулат. Аны колдонуу өтө оңой, жөнөкөй маанини жылдан жылга секиртип коюңуз, ошондо RTC башталат. Мисалы, эгерде сиз төмөнкү датаны жана убакытты коюуну кааласаңыз - Шаршемби 26 -ноябрь, 2014 -ж. Жана 21:42 жана 30 секунд - сиз колдонмоксуз:
setDS3231time (30, 42, 21, 4, 26, 11, 14);
3 -кадам:
Белгилей кетсек, убакыт 24 сааттык убакыт менен коюлган, ал эми төртүнчү параметр "жуманын күнү". Бул 1ден 7ге чейин түшөт, бул жекшембиден ишембиге чейин. Эгерде сиз өзүңүздүн өзгөрмөлөрүңүздү кошуп жатсаңыз, бул параметрлер байт мааниси.
Функцияны иштеткенден кийин, аны // менен префикс кылуу жана кодуңузду кайра жүктөө акылдуулукка жатат, андыктан ал кубаттуулукту алмаштыргандан кийин же микроконтроллерди баштапкы абалга келтирбейт. Сиздин RTC формасындагы убакытты окуу ушунчалык жөнөкөй, чындыгында процессти displayTime () функциясынын ичинде тыкан аткарууга болот. RTCден маалыматтарды сактоо үчүн жети байттык өзгөрмөлөрдү аныкташыңыз керек, жана алар readDS3231time () функциясына киргизилет. Мисалы, эгер сиздин өзгөрмөлөрүңүз:
байт секунд, мүнөт, саат, dayOfWeek, dayOfMonth, ай, жыл;
… сиз аларды RTCден учурдагы маалыматтар менен жаңыртып турмаксыз:
readDS3232time (& экинчи, & мүнөт, & саат, & dayOfWeek, & dayOfMonth, & ай, & жыл);
Андан кийин сиз өзгөрмөлөрдү өзүңүз каалагандай колдоно аласыз, мисалы, эскизде көрсөтүлгөндөй убакытты жана датаны сериялык мониторго жөнөтүүдөн баштап - маалыматтарды ар кандай чыгаруу түзүлүштөрү үчүн ылайыктуу формага айландырууга чейин.
Баары иштеп жатканын текшерүү үчүн, демонстрациялык эскизге ылайыктуу убакытты жана датаны киргизиңиз, жүктөңүз, setDS3231time () функциясын комментарийлеп, кайра жүктөңүз. Андан кийин сериялык мониторду ачыңыз жана сизге учурдагы убакыт менен күндүн дисплейи берилиши керек.
Ушул учурдан баштап сизде реалдуу убакыт режиминдеги саат модулунан маалыматтарды орнотуу жана алуу үчүн программалык камсыздоо каражаттары бар жана биз сизде бул арзан модулдарды кантип колдонуу керектиги жөнүндө түшүнүк бар деп үмүттөнөбүз.
Чыныгы убакыттагы ICлер жөнүндө көбүрөөк маалыматты өндүрүүчүнүн веб-сайтынан-DS1307 жана DS3231ден биле аласыз.
Бул пост сизге pmdway.com тарабынан келген - бүткүл дүйнө жүзү боюнча бекер жеткирүү менен, жасоочулар жана электроника ышкыбоздору үчүн.
Сунушталууда:
Реалдуу убакыт режиминде кудук суунун температурасы, өткөрүмдүүлүк жана суунун деңгээли: 6 кадам (сүрөттөр менен)
Реалдуу убакытта кудуктун суусунун температурасы, өткөрүмдүүлүгү жана суунун деңгээлин өлчөөчү: Бул көрсөтмөлөр температураны, электр өткөрүмдүүлүгүн (EC) жана казылган кудуктарда суунун деңгээлин көзөмөлдөө үчүн арзан, реалдуу убакытта суу өлчөгүчтү кантип курууну сүрөттөйт. Эсептегич казылган кудуктун ичине илинип, суунун температурасын өлчөө үчүн, EC жана
SCARA роботу: Foward жана Inverse кинематикасы жөнүндө үйрөнүү !!! (Plot Twist ARDUINOдо иштетүү аркылуу реалдуу убакыт интерфейсин кантип жасоону үйрөнүңүз !!!!): 5 кадам (сүрөттөр менен)
SCARA роботу: Foward жана Inverse кинематикасы жөнүндө үйрөнүү !!! (Plot Twist ARDUINOдо иштетүү аркылуу реалдуу убакыт интерфейсин кантип жасоону үйрөнүңүз !!!!): SCARA роботу - индустрия дүйнөсүндө абдан популярдуу машина. Аты тандалма шайкеш курама робот колун же тандалма шайкеш муунактуу роботту билдирет. Бул, негизинен, эркиндиктин үч даражасы, биринчи эки дисплей болуп саналат
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 күндү, убакытты көрсөтөт. дисплейде айдын жумасы
Арзан 433MHz RF модулдарын жана Pic микроконтроллерлерин колдонуу менен зымсыз байланыш. 2 -бөлүк: 4 кадам (Сүрөттөр менен)
Арзан 433MHz RF модулдарын жана Pic микроконтроллерлерин колдонуу менен зымсыз байланыш. 2 -бөлүк: Бул көрсөтмөнүн биринчи бөлүгүндө мен MPLAB IDE жана XC8 компиляторун колдонуп, арзан TX/RX 433MHz модулдарын колдонуп жөнөкөй жипти жөнөтүү үчүн PIC12F1822ди кантип программалоону көрсөттүм. кабелдик жарнама
NodeMCU (Arduino), Google Firebase жана Laravel колдонулган реалдуу убакыт окуялары жөнүндө билдирмелер: 4 кадам (сүрөттөр менен)
NodeMCU (Arduino), Google Firebase жана Laravelди колдонуп, реалдуу убакытта болгон окуя тууралуу эскертмелер: Веб -сайтыңызда кандайдыр бир иш -аракет болгондо, бирок электрондук почта туура келбесе, сизди кабардар кылгыңыз келген беле? Соода кылган сайын үн же коңгуроону уккуңуз келеби? Же пайда болгондон кийин дароо көңүл бурушуңуз керек