реклама

Задържането на време за проекти на Arduino не е толкова лесно, колкото може би си мислите: след като компютърната връзка не е налице, вашето бездействащо Arduino просто спира да работи, включително и вътрешния му отметка.

За да поддържате Arduino в синхрон със света около него, ще ви е необходимо това, което се нарича „модул на часовника в реално време“. Ето как да използвате такъв.

Какъв е смисълът на часовник в реално време (RTC)?

Вашият компютър най-вероятно синхронизира времето си с интернет, но все пак има вътрешен часовник, който продължава дори без интернет връзка или захранването е изключено. Когато използвате Arduino, включен в компютър, той има достъп до точното време, осигурено от вашия системен часовник. Това е доста полезно, но повечето проекти на Arduino са предназначени да се използват далеч от компютъра - на който точка, всеки път, когато захранването е изключено или Arduino се рестартира, няма абсолютно никаква представа за това кога то е. Вътрешният часовник ще бъде нулиран и ще започне да брои нула отново при следващото му включване.

instagram viewer

Ако вашият проект има нещо общо с нужда от време - като моето нощна светлина и изгрев будилник Проект за аларма за нощна светлина и изгрев на ArduinoДнес ще правим будилник за изгрев, който нежно и бавно ще ви събуди, без да прибягвате до обидна машина за шумоподаване. Прочетете още - това очевидно ще бъде проблем. В този проект заобиколихме проблема, като ръчно определяхме времето всяка вечер в доста груб вид начин - потребителят щял да натисне бутона за нулиране точно преди да си легне, предоставяйки ръчно време синхрон. Очевидно това не е идеално дълго време решение.

RTC модулът е допълнителен бит на верига, който изисква малка монета клетъчна батерия, която продължава да отчита времето, дори когато Arduino е изключен. След като бъде настроен веднъж - това ще запази времето за живота на батерията, обикновено добра година или около това.

TinyRTC

Най-популярният RTC за Arduino се нарича TinyRTC и може да се купи за около $ 5- $ 10 на eBay. Най-вероятно ще трябва да доставите своя собствена батерия (незаконно е да превозвате тези в чужбина на много места), както и някои хедъри (щифтовете, които се прореждат в дупките, които ще трябва да спойкате в себе си).

Това е модулът, който имам:

РТК-модул

Той дори има вграден сензор за температура, въпреки че батерията ще издържи по-дълго, ако не го използвате.

Броят на дупките по това нещо изглежда доста страшно, но са ви нужни само четири; GND, VCC, SCL и SDA - можете да използвате съответните щифтове от двете страни на RTC модула. Разговаряте с часовника, като използвате I2C протокол, което означава, че се използват само два пина - един за „часовника“ (часовник за серийни комуникации, няма нищо общо с времето) и един за данните. Всъщност дори веригирате до 121 I2C устройства на същите два пина - проверете тази страница на Adafruit за селекция от други I2C устройства, които бихте могли да добавите, защото има много!

Приготвяме се да започнем

Свържете модула си TinyRTC според схемата по-долу - розовата линия DS не е необходима, тъй като това е за температурния сензор.

електрически инсталации

След това изтеглете път и DS1307RTC библиотеки и поставете получените папки във вашата /libraries папка.

Излезте и стартирайте отново средата на Arduino, за да се заредите в библиотеките и примерите.
ds1307rtc-например-меню

В менюто DS1307RTC ще намерите два примера: качете и стартирайте SetTime пример първо - това ще настрои RTC на правилното време. Действителният код не си струва да навлизате в подробности, просто знайте, че трябва да го стартирате веднъж, за да извършите първоначалната синхронизация на времето.

След това разгледайте примера на използване с ReadTest.


#include 
#include 
#include  void setup () {Serial.begin (9600); докато (! сериен); // изчакайте серийно забавяне (200); Serial.println ("Тест за четене DS1307RTC"); Serial.println ( ""); } void loop () {tmElements_t tm; ако (RTC.read (tm)) {Serial.print ("Добре, Време ="); print2digits (tm. Час); Serial.write ( ":"); print2digits (tm. Минута); Serial.write ( ":"); print2digits (tm. На второ място); Serial.print (", Дата (D / M / Y) ="); Сериен печат (tm. Ден); Serial.write ( "/"); Сериен печат (tm. Месец); Serial.write ( "/"); Serial.print (tmYearToCalendar (tm) Година)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 е спрян. Моля, стартирайте SetTime "); Serial.println ("пример за инициализиране на времето и започване на работа."); Serial.println (); } else {Serial.println ("DS1307 грешка при четене! Моля, проверете веригата. "); Serial.println (); } забавяне (9000); } забавяне (1000); } void print2digits (int number) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (брой); }

Обърнете внимание, че ние също сме включили ядрото Wire.h библиотека - това идва с Arduino и се използва за комуникация през I2C. Качете кода, отворете серийната конзола на 9600 бода и гледайте и вашият Arduino извежда текущото време всяка секунда. Прекрасни!

Най-важният код в примера е създаването на a tmElements_t tm - това е структура че ще попълним с текущото време; и на RTC.прочитане (tm) функция, която получава текущото време от модула RTC, го поставя в нашето TM структура и се връща вярно, ако всичко вървеше добре. Добавете своя грешка или логически код вътре в това изражение „ако“, като отпечатване на времето или реагиране на него.

Сега, когато знаете как да получите подходящия момент с Arduino, можете да опитате да пренапишете алармения проект за изгрев или да създадете LED часовник с думи - възможностите са безкрайни! Какво ще направите?

Кредити за изображения: Snootlab Чрез Flickr

Джеймс има бакалавърска степен по изкуствен интелект и е сертифициран като CompTIA A + и Network +. Той е водещ разработчик на MakeUseOf и прекарва свободното си време, играейки VR пейнтбол и настолни игри. Той изгражда компютри още от дете.