Arduino basit izle. RTC modülünü kullanmadan Arduino'da saat

İyi günler. Günümüzün makalesinde Arduino'ya dayanan sıradışı ikili saatler üreteceğiz. yaramaz eller. Benzer yaratma sürecinde anlaşılan el sanatlarıGelecekte, herhangi bir tasarımın ikili saatlerini tekrarlayabilirsiniz.

Adım 1: İkili Saat nedir?

Başlamak için, böyle bir ikili (ikili) numaranın ikili hesap sisteminde sunulan sayı olduğunu hatırlayalım, sayısal değerlerSadece iki sembolün kullanıldığı: 0 (sıfır) ve 1 (bir).

İkili Saat, zamanını ikili biçimde görüntüleyen bir saattir. Proje, sıfırları ve birimleri görüntülemek için 6 adet LED'dir. Her sütun bir basamak / deşarj görüntüler, böyle bir format olarak bilinir. İkili ondalık sayı (DDH). Her satır, 2 ^ 0 (veya 1), 2 ^ 3 (veya 8) arasında bir derece görüntüler. Bu nedenle, saatten gelen bilgileri okurken yapılacak olan her şey, hoparlörlerin değerlerini LED'lerle özetlemektir. Örneğin, ilk sütun 4. ve 1. LED'leri içerir. 8'den 1'i ekliyoruz ve 9 elde ediyoruz (saniye sayısı 9). Onuncu saniyenin bir sonraki sütunu, sadece 3. LED, içinde parlayan, bu nedenle genel değer sadece dakika ve saatler ile 49 saniye olacaktır. Lütfen saatin 24 saatlik formatta saati gösterdiğini lütfen unutmayın.

Adım 2: Kompozit parçalar

  • Arduino. Pro. Mini. 328 5 V. Böyle bir ücret kullanılır, ancak aslında başka birini kullanabilirsiniz. Eğer hiç kullanmadıysanız Pro mini.O zaman muhtemelen ihtiyacın olacaksın Cp.2102 (Programcı) Tahtayı bilgisayara bağlamak için;

  • Ds.1302 - Gerçek zamanlı saat modülü;

  • 20 mm dağınık "sıcak" LED'ler(Bir rezerv almanızı tavsiye ederim);

  • 10Ω derecelendirme derecesine sahip 20 direnç;

  • 2 saat düğmeleri;

  • 10kΩ direnç değerine sahip 2 direnç (yük dirençleri olarak kullanılır).

Adım 3: Prototipi üretin

Geleceğin prototipini yapmaya başlayalım el sanatları. Prensip olarak, bu bir önkoşul değildir, ancak LED Matrix, Arduino ve Saat modülünün birlikte nasıl çalışacağına bakmak gerekir. Prototiplemede, Arduino mega ve basit kırmızı LED'leri kullandım. Her şey beklendiği gibi iyi çalışıyor.

Adım 4: Dava

Konut selfieckers(İki yarıdan oluşur ) Ahşaptan yapılacak. İkili saatlerin arka planına karşı kontrast görünecek ve verecek zanaat Retro tarzı.

Adım 5: Şema

LED'ler, Arduino'yun sayısını azaltmak için matrisin içine girilir. Bizim durumumuzda, 9 sonuç matrisine atanır. LED matrisini yaptıktan sonra, Arduino'ya çıkışları, ardından saat modülüne, zaman modülünü, zamanın ayarlanması için düğmeler ve güç kaynağının sonunda.

Adım 6: Kod

Kodun temeli olarak, DS1302 Saat modülü için Arduino Playgroud Post ile bir örnek olarak alınır. Bundan sonra, LED matrisinde zaman görüntülemek için değişiklikler yapıldı.

Bir şekilde büyük yapmak için aldı duvar saati Otomatik parlaklık ile.

Bu tür saatler, bir ofis veya büyük bir dairenin salonu gibi geniş odalar için mükemmeldir.

Bu tür büyük bir duvar saatini bu talimatı kullanarak ciddi zorluklar sunmadığını yapın.


Saatin boyutunu tahmin etmek için, bir saat segmentinin A4 formatlı kağıdının boyutu olacağı gerçeğini alabilirsiniz, bu da uygun boyutun fotoğrafları için çerçeveyi kullanmayı kolaylaştıracak.

Adım 1. Büyük duvar saatlerinin kompozit parçaları.

Teller, lehim, lehimleme demir, led kurdele Arduino Nano. DC-DC Dönüştürücü LM2596
4 metre LED bant WS2811 ışık sensörü Gerçek zamanlı saat DS3231
Mikroswitches

Bu proje için ne kullandım:

Adım 8. Saati programlıyoruz.

Biraz taşıyan, ihtiyaçlarımı tam olarak tatmin eden bir saati almayı başardım. Elimden gelenin en iyisini yapabileceğinden eminim.

Kod iyi başarılı ve anlaşılacağı zor olmayacak, hata ayıklama mesajları da çok iyi yorumlanıyor.

Duvar saatinin rengini değiştirmeniz gerekirse, çizgi 22'deki değişkeni değiştirmeniz gerekir ( int ledcolor \u003d 0x0000ff; // rengini kullandı (altıgen içinde)). Sayfadaki Hex'te renklerin ve kodlarının bir listesini bulabilirsiniz: https: //github.com/fastled/fastled/wiki/pixel-refe ...

İndirirken herhangi bir probleminiz varsa, aynayı kullanın: http: //bit.ly/1qjtgg0

Son krokum indirilebilir.

Adım 9. Polistiren kullanarak sayıları yapıyoruz.

Kesici temeli İşçi kesici Kesicinin genel görünümü
Kesicinin çalışmasının sonucu

Her segmenti başlangıçta basılmış şablondaki kesin.
Polistiren, keskin bir bıçakla kesilebilir, bu da nikrom tel veya bir gitar dizisinden kaymaz bir fikstür veya OSB-ocağın birkaç bölümünü kesebilir.

Yukarıdaki görüntülerde nasıl yaptığımı görebilirsiniz.

Kesiciyi güçlendirmek için, 12V güç kaynağını kullandım.

Sonuç olarak, kesintiler için dört bölüm olmalıdır. büyük saatlerBir tanesi fotoğrafta gösterilir.

4. Adım 10 numaraları yapıştırırız ve tüm saçmalıkları kapattık. Son büyük duvar saatleri.

Parıltı günü Glow Gece

Dört haneyi ve duvar saatinin tüm noktalarını kestikten sonra, hepsini LED kurdelelerle (işlemi basitleştirmek için, iki yönlü yapışkan bant kullandım) ile hepsini kartona yapıştırdık.

Sert bir şekilde atmak için lED ışığı Polistiren haneler üzerinde iki sayfa kağıt kullandım. Kolaylık ve estetik için, A2'nin boyutunu iki kez katlanmış kullandım.

Tüm bu adımları tamamladıktan sonra, ortaya çıkan büyük duvar saatlerinin elde edilen meclisini ilgili harika fotoğraf çerçevesine yerleştirdim.

Bu saat çok muhteşem ve göz çeken görülüyor. Böyle büyük duvar saatinin birçok odayı mükemmel şekilde dekore edeceğini düşünüyorum.

Temas halinde

Yani, gerçek zamanlı saat. Bu yararlı şey, zamanla ilgili faydalı görevlerin çoğunu çözer. Ülkedeki sabah 5'te sulamanın yönetimini varsayalım. Veya belli bir noktada ışığı açıp kapatın. Tarihe göre, bazı evlerde ısıtma yapabilirsiniz. Şey oldukça ilginç ve faydalı. Ve daha spesifik olarak? Popüler Arduino platformu için gerçek zamanlı DS1302 saatini göz önünde bulunduracağız.

Bu yazıdan öğreneceksiniz:

İyi günler, Sevgili Readers KIP-World Block! Nasılsın? Yorumlara yazın, robotiğin tadını çıkarıyor musunuz? Bu konu sizin için ne anlama geliyor?

Fikri bir dakika boyunca terk etmiyorum. Uyurken ve nihayet, herkesin kişisel bir robot asistanı satın alabileceği gerçeğine geldiğimde görüyorum. Ne yapacağı önemli değil, çöpleri temizleme, saç kesimi çim, araba yıkama.

Sadece "beyinleri" nde ne kadar zor algoritmaların içermesi gerektiğini hayal ediyorum.

Sonuçta, yazılımı kişisel bilgisayarlarda olduğu gibi flaş edeceğimiz gerçeğine geleceğiz. Ayrıca uygulamalı programları indirin. Dikiş eller, bacaklar, pençeleri değiştirin, manipülatörler.

"I-Robot" filmlerine bak, " Yapay zeka"," Yıldız Savaşçıları ".

Japonlar uzun zamandır gelişmelerini uyguladılar. Ne kötüz oluruz? Çok zayıf bir popülerliğe sahibiz. Birkaç geliştiriciyi tanıyorum. Parmakların yeniden hesaplaması için. Biz başkalarıyla uğraşıyoruz. Biz bayileriz. Biz sadece hazır setleri, robotlar - oyuncaklar ve tüm sürtünme satın alıyoruz.

Neden bunu geliştirmiyorsun:

Ya da bu:

Düşüncelerimi yüksek sesle bitirdim. Gerçek zamanlı zaman zamanlayıcı DS1302'yi Arduino'ya bağlamak konusunda sizinle konuşalım.

Gerçek Zamanlı DS1302

Arduino denetleyicisinin kendi saatleri yok. Bu nedenle, gerekirse, özel DS1302 Mikrokircuitini tamamlamanız gerekir.

Beslenme ile, bu panolar pillerini kullanabilir veya doğrudan Arduino ücretinden adlandırılabilir.

Pinout Masası:

Bağlantı Şeması C Arduino Uno:


DS1302 ile çalışmak için Arduino Programlama Yöntemi

Güvenilir kaynaklardan geçerli bir kütüphane indirdiğinizden emin olun.

Kütüphane, gerçek zamanlı parametreleri okumanıza ve yazmanızı sağlar. Küçük Açıklama Aşağıdaki alıntı yaptım:

#Dahil etmek. // kütüphaneyi bağlayın.
ovaduino_rtc. BİR OBJE (Başlık [, çıkış_st [, çıkış_clk [, çıkış_dat]]] ); // bir nesne oluşturun.

İşlev başla (); // RTC modülünün çalışmasının başlatılması.

İşlev ayarlanan zaman (Sn [min [, saat [, gün [, ay [, yıl [, gün]]]]]] ); // ayar zamanı.

İşlev gettes ([ HAT ] ); // okuma zamanı.

işlev blinktime ([Frekans] parametresi ); // gettime işlevinin belirtilen süre parametresini "flash" hale getirmesine neden olur.

işlev dönem (Dakikalar ); // modüle dakikalar içinde minimum referans dönemi gösterir.

Değişken saniyeler.// 0 ila 59 arasında bir saniye döndürür.

Değişken dakika.// 0 ila 59 arasında birkaç dakika döner.

Değişken saatler// saati 1 ile 12 arasında döndürür.

Değişken Saatler// saati 0'dan 23'e döndürür.

Değişken Öğlen// öğlen 0 veya 1'i döndürür (0-AM, 1-PM).

Değişken gün.// ayın gününü 1'den 31'e döndürür.

Değişken hafta içi.// haftanın gününü 0 ile 6 arasında döndürür (0-Pazar, 6-Cumartesi).

Değişken aY.// 1 ila 12 arasında bir ay döner.

Değişken yıl.// yılı 0'dan 99'a döndürür.

Basit bir program yazıyoruz. Geçerli saati RTC modülünde (DS1302) ayarlayın:

Arduino.

#Dahil etmek. ovaduino_rtc zamanı (rtc_ds1302,6,7,8); void kurulum () (gecikme (300); serial.begin (9600); time.begin (); time.settime (0.51,21,27,10,15,2); // 0 sn, 51 dk, 21 saat , 27, Ekim, 2015, Salı) Void Loop () (eğer (Millis ()% 1000 \u003d\u003d 0) (// 1 saniye serial.println (time.gettime ("DMY, H: I: S, D" )); // zaman gecikmesini al (1); // 1 ms, 1 ms için birkaç kez çıkmayacak şekilde 1 ms olarak askıya alın)))

#Dahil etmek.

oVARDUINO _ RTCTIME (RTC_DS1302, 6, 7, 8);

void kurulum () () () ()

gecikme (300);

Seri. Başlamak (9600);

zaman. başla ();

zaman. SATICI (0, 51, 21, 27, 10, 15, 2); // 0 sn, 51 dk, 21 saat, 27, Ekim 2015, Salı

void loop () (

eğer (Millis ()% 1000 \u003d\u003d 0) ( // 1 saniye geçtiyse

Seri. Println (zaman. Gettime ("D-M-Y, H: I: S, D")); // Zaman almak

gecikme (1); // 1 ms'a kadar, 1 ms için birkaç kez çıkmayacak şekilde askıya alın

Geçerli saati RTC modülü (DS1302) ile okuyun ve bir "Seri Port" ekleyin:

#Dahil etmek. ovaduino_rtc zamanı (rtc_ds1302,6,7,8); geçersiz kurulum () (gecikme (300); serial.begin (9600); time.begin ();) geçersiz döngü () (eğer (milis ()% 1000 \u003d\u003d 0) (// 1 saniye serial.println (Time.gettime ("DMY, H: I: S, D")); // zaman gecikmesini (1); // 1 ms'ye kadar 1 ms'ye çıkmayacak şekilde, 1 ms için birkaç kez çıkmamak için)))

Makalede, bataryada mükemmel bir gerçek zamanlı saat modülü ile tanışacaksınız.

Bu modülle, yeniden programlama veya güçlendirme durumunda bile, Arduino'daki projelerinizdeki saati takip edebilirsiniz. Bu, alarm saatleri, alarmlar, okumaların gerçek zamanlı olarak okumaların çıkarılması için gerekli unsurlardan biridir. Gerçek zamanlı saat modülünün en popüler modellerinden biri DS1307'dir. Onun üzerinde duracağız. Modül, mantığın beslenmesinin 5 V'dir olduğu Arduino mikrodenetleyicileri ile mükemmel bir şekilde birleştirilir.

Modülün Adafruit üreticisinden Özellikleri (Çince, üç veya dört daha ucuza benzer seçenekler sunar):

  • Her şey dahil: çip, çemberleme, pil;
  • Kolayca gidip kullanımı kolay;
  • Herhangi bir partiye takılır veya doğrudan tel kullanarak bağlanır;
  • var mükemmel Kütüphaneler ve Yarım yamalak örnekleri;
  • Montaj için iki delik;
  • İşin Süresi - yaklaşık beş yıl!

Gerçek zamanlı saat modülü zaten serpilir ve lehimleme yaklaşık 15 dakika sürecek olan bireysel bileşenler biçiminde satılabilir.

Gerçek zamanlı saat nedir?

İzle gerçekten zaman ... saat. Modül, özerk güç kaynağından geçer - pilleriniz Arduino'ya gitse bile, akü ve saati saymaya devam eder. Gerçek zamanlı modülü kullanarak, krokunuzda değişiklik yapmak ve mikrodenetleyiciyi yeniden programlamak isteseniz bile, saati takip edebilirsiniz.

Arduino da dahil olmak üzere çoğu mikrodenetleyicide, Millis () olarak adlandırılan yerleşik bir temporal sayaç vardır. Daha uzun süreleri takip edebilen çipin içine yerleştirilmiş zamanlayıcılar vardır (dakika veya günler). Peki neden ayrı bir saat modülün var? Asıl sorun, milis () 'nin, Arduino'ya güç kaynağından beri saati izlemesidir. Yani, tahtayı kestiğinizden kısa sürede, zamanlayıcı 0'a taburcu edilir. Prosh Arduino, şu anda, örneğin, Perşembe veya 8 Mart'u bilmemektedir. Yerleşik sayaçtan elde edebileceğiniz tek şey "son katılımdan bu yana 14.000 milisaniye geçti."

Örneğin, bir program oluşturdunuz ve şimdiye kadar saati saymak istiyorsunuz. Mikrodenetleyicinin gücünü kapatırsanız, zaman sayacı satın alınacaktır. Ucuzun ne olduğu hakkında Çin saati: Batarya otururken, 12:00 ifadesiyle flaşmaya başlarlar.

Bazı projelerde, Arduino, kesintiler olmadan güvenilir zaman kontrolüne ihtiyacınız olacak. Dış gerçek zamanlı saat modülünün kullanıldığı bu gibi durumlarda. Benzer saatlerde kullanılan çip, yılı izler ve hatta bir ayda kaç gündür (genellikle dikkate alınmayan tek şey, bu tür çeviriler farklı kısımlarında farklıdır. Dünya).

Aşağıdaki şekil gösterir anakart Gerçek zamanlı saatli bilgisayar DS1387. Saatte, bir lityum pil kullanılır, bu yüzden boyutta dağılmışlardır.

Gerçek zamanlı saat DS1307'yi kullanma örneğini düşüneceğiz. Bu, birkaç yıl boyunca küçük bir pilden çalışan ucuz, kullanımı kolay bir modüldür.

Modülün kendisi içindeki pil şarjını tüketmezken, DS1307, Arduino'nun güçten veya yeniden programlanmasından çıkarsa bile bir geri sayım yapacaktır.

Gerçek zamanlı saat modülünün oluştuğu düğümler

DS1307 Gerçek Zamanlı Modül Detaylar ADafruit
Resim Belirleme Açıklama Üretici firma numara
IC2. Gerçek zamanlı çip Ds1307. 1
S1. 32.768 KHz, 12.5 pf kristal Genel. 1
R1, R2. 1/4 W 5% 2.2 com direnci kırmızı, kırmızı, kırmızı, altın Genel. 2
C1. 0.1 μf seramik kondansatör Genel. 1
5 kişi için ray (1x5) Genel. 1
Pil Lityum pilde 12 mm 3 CR1220. 1
12mm Para Hücre Tutucu Keystone 3001. 1
Ödemek Adafruit Industries. 1

Gerçek zamanlı saat modülünün montajı

Gerçek zamanlı saatin koleksiyonu DS1307 adafruit
Fotoğraf Açıklamalar

Montaj için hazırlanın. Gerekli tüm parçaları ve araçları kontrol edin. Devre kartını yardımcıya takın.

Negatif pil temasından küçük bir lehim uygulayın.

İki direnç 2.2 com ve seramik kapasitörünü yükleyin. Onları nasıl konumlandırırsınız - önemli değil. Polarite önemli değil. Bundan sonra, kristali (ayrıca simetrik olarak), pil için tutucu (tutma) ve gerçek zamanlı saat çipini ayarlayın. Gerçek zamanlı modül çipi, çip üzerindeki işaretin (oluk) devre kartındaki belirlemeye uygun olarak bulunması için ayarlanmalıdır. Soldaki fotoğrafa dikkatlice bakın, çip doğru takılmıştır.


Böylece pilin tutulması düşmez, yukarıdan lehimlemek daha iyidir. Bundan sonra, tahtayı çevirin ve kalan kontakları lehimleyin.

Rehber kalıntılarını dirençlerden, kristal ve kapasitörden çıkarın.

Eğer modülü artan bir devre kartına kurmak için kişileri kullanmak istiyorsanız, pimin temasını LayPecker'a, gerçek zamanlı saat modülüne yukarıdaki ve Gemi kontaklarına ayarlayın.

Pili takın. Bataryanın düz kısmı üst olmalıdır. Ortalama olarak, batarya yaklaşık 5 yıldır hizmet verecektir. Batarya oturmuş olsa bile, yuvayı boş bırakmayın.

DS1307 ile çalışmak için Arduino Kütüphanesi

DS1307, 5 V mantık ve I2C yetenekleri olan herhangi bir mikrodenetleyiciye kolayca bağlanır. Bu modülü Arduino ile bağlanmayı ve kullanmayı düşüneceğiz.

DS1307'den okumaları almak ve yapılandırmak için RTClib kütüphanesini kullanacağız. Ek Arduino kütüphanelerinde saklanacak sorularınız varsa - bu talimatı inceleyin.

Makale, adafruit'ten gerçek zamanlı saatlerin bir örneğini açıklar, ancak Çinli meslektaşları aynı başarıyla kullanabilirsiniz. Çalışma prensibi ve bağlantı farklı değildir.

  • Arduino UNO R3;
  • Breadboard satın almak;
  • Gerçek zamanlı saat modülü DS1307;

Real Premune 5 pin saatinde: 5V, GND, SCL, SDA ve SQW.

  • 5V, zaman verilerini almak için bir istek yaptığınızda gerçek zamanlı saat talaşını güçlendirmek için kullanılır. 5V sinyal gelmezse, çip "uyku" moduna geçer.
  • GND - Toplam Arazi. Devreye bağlandığınızdan emin olun.
  • SCL - I2C Saat İletişim - Gerçek zamanlı saatle veri alışverişinde bulunmak gerekiyor.
  • I2C'den gelen verilerin gerçek zamanlı olarak iletildiği SDA - İletişim.
  • SQW veri çıkışını kare dalga olarak yapılandırmayı mümkün kılar. Çoğu durumda, bu temas kullanılmaz.

Analog Pim 3 (Dijital 17) çıkış ve yüksek modda ve analog pim 2 (Dijital 16) çıkış ve düşük modda ayarlarsanız, gerçek zamanlı saatleri doğrudan bu kişilerden kaydedebilirsiniz!

Analog Pin 4'i Arduino'da SDA'ya bağlayın. Arduino'da Analog Pin 5 SCL'ye bağlanın.


Arduino için kroki.

Gerçek zamanlı saatlerin doğrulanması

Çalıştırmaya değer ilk taslak, gerçek zamanlı modülden gelen verileri saniyede bir kez okuyacak bir programdır.

Bir başlangıç \u200b\u200biçin, pili çıkarırsak ve ARDUINO USB'ye bağlı olana kadar diğerine değiştirirsek ne olacağını görelim. 3 saniye bekleyin ve pili çıkarın. Sonuç olarak, çip gerçek zamanlı saatte yeniden başlatılır. Bundan sonra, aşağıda gösterilen kodu yerleştirin (Kod, örneklerde → RTClib → DS1307 menüsünde de yüklenebilir. Arduino IDE) Ve Arduino'ya indirin.

Ayrıca bir onewire.h kütüphanesine ihtiyacınız olacak, indirebilirsiniz

.

// I2C ile bağlı gerçek zamanlı saat DS1307 kullanarak tarih ve saat işlevleri. Eskiz, tel lib kütüphanesini kullanıyor

#İnclude & ltwire.h & gt

#İnclude "rtclib.h"

Serial.Begin (57600);

if (! rtc.isrunning ()) (

Serial.println ("RTC çalışmıyor!");

// rtc.adjust (DateTime (__ date__, __time__));

DateTime şimdi \u003d rtc.now ();

Serial.Print ("/");

Serial.Print ("/");

Seri.print (şimdi.day (), dec);

Serial.Print ("");

Serial.Print (":");

Serial.Print (":");

Serial.println ();

Serial.print (şimdi.unixtime ());

Serial.print ("s \u003d");

Seriel.println ("D");

// tarihi hesapla: 7 gün ve 30 saniye

DateTime Geleceği (şimdi.unixtime () + 7 * 86400L + 30);

Serial.Print ("Şimdi + 7D + 30s:");

Seri.print (future.year (), dec);

Serial.Print ("/");

Serial.print (future.month (), dec);

Serial.Print ("/");

Serial.print (gelecek.day (), dec);

Serial.Print ("");

Serial.print (future.hour (), dec);

Serial.Print (":");

Serial.print (future.minute (), dec);

Serial.Print (":");

Seri.print (future.second (), dec);

Serial.println ();

Serial.println ();

Şimdi seri monitör penceresini açın ve veri aktarım hızının doğru ayarlandığından emin olun: 57600 BPS'de.

Sonuç olarak, seri monitör penceresinde aşağıdakileri görmelisiniz:


Gerçek zamanlı olarak güç kaynağı varsa, 0: 0: 0 görüntülenir. Saniye kapanacak. Zaman ayırdıktan sonra, yeni bir sayım gidecek. Bu nedenle, mevcut zaman modülünün çalışması sırasında pili çıkarmanın imkansız olmasıdır.

Saat modülünde ayar zamanı

Aynı eskizde, rtc.adjust ile başlayan çizgiyi açığa çıkarın:

// aşağıdaki satır, saatin tarihini ve saatini ayarlamak için kullanılır.

Rtc.adjust (DateTime (__ date__, __time__));

Tarih ve saati ayarlama süreci çok zarif. Bu satır, sayacınızdan veri içerir kişisel bilgisayar (Kodun iltifatları sırasında). Bu veri, gerçek zamanlı saat modülünüzü üretmek için kullanılır. Yani, PC'nizdeki zaman yanlış yapılandırılmışsa, bu hatayı düzeltmek için önce öneririz ve ardından Arduino için saat modülünün bellenimine gidin.

Ayarladıktan sonra seri monitörü açın ve saatin doğru yapılandırıldığından emin olun:


Her şey. Bu noktadan önümüzdeki birkaç yıl boyunca, DS1307'nin yapılandırmak zorunda değildir.

DS1307 ile Okuma Zamanı Okuma

Gerçek zamanlı saat DS1307 ayarladıktan sonra, onlara istek gönderebilir. Bu taleplerin uygulandığı krokunun bir bölümünü düşünelim.

DateTime şimdi \u003d rtc.now ();

Serial.print (şimdi.Yar (), dec);

Serial.Print ("/");

Serial.print (şimdi.month (), dec);

Serial.Print ("/");

Seri.print (şimdi.day (), dec);

Serial.Print ("");

Serial.print (şimdi. (), Dec);

Serial.Print (":");

Serial.print (şimdi.minute (), dec);

Serial.Print (":");

Serial.print (şimdi.Second (), Aralık);

Serial.println ();

Özünde, gerçek zamanlı saati kullanarak zaman için bir seçenek var. Bunu yapmak için, DateTime nesnesini döndüren ŞİMDİ () işlevini kullanın. Bu tesis, yıl, ay, gün, saat, dakika ve saniye hakkında bilgi içerir.

RTC.YEAR () ve RTC.HUR () gibi işlevler sağlayan gerçek zamanlı saat için birkaç kütüphane vardır. Bu fonksiyonlar ayrı ayrı ve bir saat uzatır. Ancak kullanımları bir dizi problemlerle ilişkilidir: zaman zamanında dakikaların çıktısını bir talepte bulunursanız, örneğin, 3:14:59, yani, dakikaların ifadesinden hemen önce, " 15 "(3:15:00), elde edilen veriler 3:14:00'e eşit olacaktır - yani, bir dakikanızı kaybedersiniz.

Genel olarak, bir saat veya yılı aramak için bireysel fonksiyonların kullanılması, yalnızca projeniz için bir dakika / yılda bir değişiklik olan zaman kontrolünün doğruluğu kritik olmadığında (kural olarak, ifadenin olduğu durumlarda nadiren kaldırıldı - günde bir kez haftada bir kez). Her durumda, okumalarda hataları önlemek istiyorsanız, şimdi () ve zaten verilerden kullanın, ihtiyacınız olan okumaları çekin (dakikalar, yıllar vb.).

Öğrenebileceğimiz başka bir veri formatı var - gece yarısı, 1 Ocak 1970'ten itibaren saniye sayısı. Bunu yapmak için, Unixtime () işlevini kullanın:

Serial.print ("1970 \u003d");

Serial.print (şimdi.unixtime ());

Serial.print ("s \u003d");

Serial.Print (şimdi.unixtime () / 86400L);

Seriel.println ("D");

Bir günden beri 60 * 60 * 24 \u003d 86400 saniye, ortaya çıkan değeri günler ve yıllarda çevirebilirsiniz. Çok uygun bir seçenek, izlemeniz gerekirse, son talepten bu yana ne kadar zaman geçti. Örneğin, son Arduino'nun gerçek zamanlı saati DS1307'ye kadar 5 dakika geçtiyse, Unixtime () 'nin 300'e döneceği değeri.

Yorumlarınızı, sorularınızı bırakın ve kişisel deneyiminizi aşağıda paylaşın. Yeni fikirler ve projeler genellikle tartışmada doğar!

Birçok projede Arduino, belirli olayların başlangıcının zamanını izlemesi ve düzeltmesi gerekir. Ek pillerle donatılmış gerçek zamanlı saat modülü, geçerli tarihi saklamanıza izin verir, cihazın üzerindeki gücün kullanılabilirliğine bağlı değildir. Bu yazıda, Arduino tahtası ile birlikte kullanılabilecek en yaygın RTC DS1307, DS1302, DS3231 modülleri hakkında konuşacağız.

Saatler modülü, bir kural olarak, DS1307 cipslerinden, DS1302, DS3231'den biri olan küçük bir ücrettir. Tahtada, neredeyse güç bataryası montaj mekanizmasını bulabilirsiniz. Bu kurullar genellikle zaman, tarihi, haftanın tarihini ve diğer kronometrik parametreleri hesaba katar. Modüller, Ardioino'da güç kapatılsa bile, özerk güçten, pillerden, pillerden, pillerden çalışır. En yaygın saat modelleri DS1302, DS1307, DS3231'dir. Arduino'ya (gerçek zamanlı saat) bağlı RTC modülüne dayanırlar.

Saat, sıradan bir kişi için rahat olan birimlerde, haftanın dakikaları, saatleri, haftanın günleri ve diğerleri, sıradan sayaçların aksine ve "keneler" okuyan Saat jeneratörlerinin aksine. Arduino mevcuttur Özel fonksiyon Farklı zaman aralıklarını da okuyabilen milis (). Ancak, bu fonksiyonun ana dezavantajı, zamanlayıcı açıldığında sıfıra düşer. Bununla birlikte, yalnızca saati sayabilirsiniz, haftanın tarihini veya gününü ayarlayabilirsiniz. Bu sorunu çözmek için ve gerçek zamanlı saat modülleri kullanılır.

Elektronik devre, bir çip, güç kaynağı, kuvars rezonatörü ve dirençler içerir. Kuvars rezonatörü, normal bir ikili metre için uygun olan 32768 Hz frekansta çalışır. DS3231 şeması, dahili kuvars ve yüksek hassasiyetli değerler elde etmenize izin veren termostikleri içerir.

Popüler RTC DS1302 modüllerinin karşılaştırılması, DS1307, DS3231

Bu tabloda, en popüler modüllerin listesini ve ana özelliklerinin listesine yol açtık.

İsim vermek Sıklık Doğruluk Desteklenen Protokoller
Ds1307. 1 Hz, 4.096 KHz, 8.192 KHz, 32.768 KHz Kuvars'a bağlıdır - genellikle değer günde 2,5 saniyeye ulaşır, günde 1 saniyenin üzerindeki doğruluk elde etmek mümkün değildir. Ayrıca doğruluk sıcaklığa bağlıdır. I2C.
Ds1302. 32.768 KHz Günde 5 saniye I2C, SPI
Ds3231. İki çıkış - ilk - 32.768 kHz, ikincisi - 1 Hz ila 8.192 kHz programlanabilir 0С ila 40 ° C'ye kadar sıcaklıklarda ± 2 ppm.

-40c ila 85 ° C'ye kadar sıcaklıklarda ± 3.5 ppm.

Sıcaklık doğruluğunu ölçme - ± 3C

I2C.

Modül DS1307.

DS1307, zamana başvurmak için kullanılan bir modüldür. DS1307ZN çipine dayanarak birleştirilir, yiyecekler uygulama için bir lityum pilden gelir. Özerk iş Uzun bir süre için. Tahtadaki pil bağlı arka taraf. Modül bir AT24C32 çipine sahiptir - bu, uçucu olmayan bir EEPROM belleği 32 KB'a kadardır. Her iki çip, I2C otobüsü tarafından birbirine bağlanır. DS1307 düşük güç tüketimine sahiptir ve 2100 yıla kadar saat ve takvim içerir.

Modül aşağıdaki parametrelere sahiptir:

  • Yiyecek - 5V;
  • Çalışma sıcaklığı -40C ila 85C arasında;
  • 56 bellek baytı;
  • Lityum pil lir2032;
  • 12 ve 24 saatlik modları uygular;
  • I2C arayüzü desteği.

Modül, verilerin oldukça nadiren okunduğu durumlarda, haftada bir aralıkla veya daha uzun süre kullanıldığı durumlarda gerekçelendirilir. Bu, beslenmeye tasarruf sağlar, çünkü kesintisiz kullanımın bir batarya olsa bile daha fazla voltaj harcamak zorunda kalacağız. Belleğin varlığı kayıt olmanızı sağlar Çeşitli parametreler (Örneğin, sıcaklık ölçümü) ve elde edilen bilgileri modülden okuyun.

Diğer cihazlarla etkileşim ve bunlarla değişim, SCL ve SDA temas noktalarından I2C arayüzü kullanılarak yapılır. Şemada, gerekli sinyal seviyesini sağlamanıza izin veren dirençlere sahiptir. Ayrıca tahtada ayrıca DS18B20 sıcaklık sensörünü sabitlemek için özel bir yer var. Kişiler 2 grupta, adım 2.54 mm'de dağıtılır. İlk kişi grubu aşağıdaki sonuçlardır:

  • DS - DS18B20 sensörü için çıktı;
  • SCL - TactLine;
  • SDA - Veri Hattı;
  • VCC - 5V;

İkinci kişi grubunda:

  • SQ - 1 MHz;
  • BAT - Lityum pil için giriş.

Arduino kartına bağlanmak için, yönetim kurunun kendisi (bu durumda, Arduino UNO olarak kabul edilir), gerçek zamanlı saat modülü RTC DS1307, teller ve USB kablosu.

Denetleyiciyi Arduino'ya bağlamak için, 4 pim kullanılır - VCC, Earth, SCL, SDA.

Saat modülüyle çalışmaya başlamak için DS1307RTC, Timelib ve Wire kitaplıklarını yüklemeniz gerekir. İş ve RTClib için kullanabilirsiniz.

RTC Modülünü Kontrol Etme

İlk kodu başlatırken, programdaki verileri modülden saniyede bir kez okuyacaktır. Öncelikle programın nasıl davrandığını görebilirsiniz, modülden bir batarya alırsanız ve Arduino kartı bilgisayara takılmaz. Birkaç saniye beklemeniz ve pilini çekmeniz gerekir, sonuç olarak, saat yeniden başlatılır. Ardından örnekler → RTClib → DS1307 menüsünde bir örnek seçmeniz gerekir. Transfer hızını 57600 BPS'ye düzeltmek önemlidir.

Seri Monitör penceresini açarken, aşağıdaki satırlar görünmelidir:

0: 0: 0'ı gösterecek. Bu, saatin saatte kaybolması ve geri sayımın durması nedeniyledir. Bu nedenle, modül işlemi sırasında pili çekemezsiniz.

Modülde zaman yapılandırmak için, satırı taslağını bulmanız gerekir.

Rtc.adjust (DateTime (__ date__, __time__));

Bu çizgi, gerçek zamanlı saat modülünün ürün yazılımını kullanan bir bilgisayardan veri içerecektir. İçin doğru iş Önce bilgisayardaki tarih ve saatin doğruluğunu kontrol etmelisiniz ve yalnızca saat modülünü yanıp sönmeye başlamalısınız. Monitörde ayarlandıktan sonra, aşağıdaki veriler görüntülenecektir:

Kurulum düzgün şekilde gerçekleştirilir ve ayrıca gerçek zamanlı saatin gerekmediğini yeniden yapılandırın.

Okuma zamanı. Modül yapılandırıldığında, zaman için istek gönderebilirsiniz. Bu, zaman ve tarih hakkında bilgi içeren DateTime nesnesini döndüren ŞİMDİ () işlevini kullanır. Zaman okumak için kullanılan bir dizi kütüphane vardır. Örneğin, rtc.year () ve rtc.hour () - ayrıca yıl ve saat hakkında bilgi alırlar. Onlarla çalışırken, bir sorun olabilir: örneğin, 1:19:59'da zaman çıktısı için bir istek yapılacaktır. Zaman 1:20:00 göstermeden önce, saat 1:19:00 zaman getirecek, yani, aslında bir dakika kaybolacak. Bu nedenle, bu kütüphaneler, okumanın nadiren görüldüğü durumlarda, birkaç günde bir kez kullanılması tavsiye edilir. Saati arayacak başka özellikler de var, ancak hataları azaltmanız veya kaçınmanız gerekirse, şimdi kullanmak daha iyidir () ve zaten gerekli okumaları çekin.

I2C Saat ve Ekran Modülü ile Proje Örneği

Proje her zamanki saattir, tam zaman göstergesinde gösterilecektir ve numaralar arasındaki kolon bir saniyede bir kez aralıkta yanıp söner. Projeyi uygulamak için, Arduino UNO kart gerekli olacak, bir dijital gösterge, gerçek zamanlı bir saat (bu durumda, yukarıda açıklanan DS1307 modülü), bağlantı için kalkan (bu durumda, Troyka kalkanı kullanılıyor), Saatler ve teller için pil kullanılır.

Proje, TM1637 yongasında basit bir dört basamaklı gösterge kullanıyor. Cihazın iki telli bir arayüze sahiptir ve 8 seviyeli monitör parlaklığı sağlar. Sadece saati saat biçiminde görüntülemek için kullanılır: dakikalar. Göstergenin kullanımı kolaydır ve kolayca bağlanır. Hatıra veya saatlik veri doğrulaması gerektirmediğinde projeler için başvurmak faydalıdır. Daha fazlası için full bilgi Saat ve tarih hakkında sıvı kristal monitörleri kullanılır.

Saat modülü, I2C veriyoluna başvuran SCL / SDA kişilerine bağlanır. Ayrıca arazi ve beslenmeyi de bağlamanız gerekir. Arduino, yukarıda açıklandığı gibi aynı şeyi bağlar: SDA - A4, SCL - A5, Modül'ten dünyaya Arduino, VCC -5V.

Gösterge basitçe bağlanır - BT CLK ve DIO'dan gelen sonuçlar, tahtadaki herhangi bir dijital pimeye bağlanır.

Kroki. Kodu yazmak için, saati ve göstergeyi başlatmanıza izin veren Kurulum işlevini kullanın, derleme süresini kaydedin. Ekrana zaman çıkışı, döngü kullanılarak gerçekleştirilecektir.

#Dahil etmek. #include "tm1637.h" #include "ds1307.h" // Tüm gerekli kütüphanelerin saat ve ekranla çalışmasını sağlamanız gerekir. char compileetime \u003d __time__; // derleme süresi. #Define display_clk_pin 10 #define Display_Dio_Pin 11 // Ekranın katıldığı Arduino çıkışlarından 11 // numaraları; void kurulum () () (Fatura.set (); display.init (); // Ekranı bağlama ve yapılandırma. saat.begin (); // saatleri etkinleştirin. BYTE SAAT \u003d GETINTIME, 0); BYTE DAKİKU \u003d GETINT (CompileTime , 2); bayt ikinci \u003d gett (derleme, 4); // zaman almak. Saat.fillbyhms (saat, dakika, ikinci); // zaman modülünde kayıt için hazırlanıyor. Clock.Settime (); // rekor alındı bilgi dahili bellek, Okuma zamanına başlayın. ) Boşluk döngüsü () () () () () dört basamağın her birinde (Int8_t timedisp; //) ekran. Saat.gettime (); // zaman için istek. TimeDisp \u003d clock.hour / 10; timeDisp \u003d clock.hour / 10; timeDISP \u003d Saat. .mine / 10; timeDisp \u003d clock.minute% 10; // Düzinelerce, saat, dakikalar vb. İçin çeşitli işlemler. Display.Display (TimeDisp); // Ekran ekranına çıktı (Clock.Second) % 2? Point_on: Point_Off); // Bir saniye sonra kolonu açın ve kapatın.) CHAR GETINT (Dönüş (string - "0") * 10 + int (string) - "0"; // eylemler İki basamaklı bir tamsayı içinde doğru zaman kaydı. Aksi takdirde, ekranda sadece karakter çifti gösterilecektir.)

Bundan sonra, eskiz indirilmeli ve monitörde zaman görüntülenecektir.

Program biraz yükseltilebilir. Güç kapatıldığında, yazılı eskiz, ekranı açtıktan sonra, derlemek için ayarlandıktan sonra. Kurulum fonksiyonunda, derleme başlamadan önce 00: 00: 00'den geçen zaman hesaplanacak. Bu karma, güç kapatıldığında depolanan EEPROM'da depolananlarla karşılaştırılacaktır.

Uçucu olmayan hafızaya yazmak ve okumak için veya ondan, EEPROMWRITEINT ve EEPROMREADINT'in işlevlerini eklemeniz gerekir. EEPROM'da kaydedilen hashe ile tesadüf / karma uyumsuzluğunu kontrol etmek için gereklidir.

Proje iyileştirilebilir. Bir sıvı kristal monitörü kullanıyorsanız, ekrandaki tarih ve saati gösterecek bir proje yapabilirsiniz. Tüm elemanları bağlama Şekilde gösterilmiştir.

Sonuç olarak, kodda belirtilmesi gerekecektir. yeni Kütüphane (Sıvı kristal ekranlar için, liquidcrystal) ve tarihi elde etmek için LOOP () işlevine ekleyin.

Çalışma algoritması aşağıdaki gibidir:

  • Tüm bileşenleri bağlayın;
  • Kontrol - Monitör ekranında her ikinci zaman ve tarihte değişmelidir. Ekranda belirtilirse yanlış zamanKroki için bir RTC.WRITE (TMELEMENTES_T TM) eklemeniz gerekir. Yanlış belirli bir süre ile ilgili sorunlar, saat modülünün, kapatıldığında 00:00 01/01/2000'deki tarih ve saati sıfırlamaları ile ilgilidir.
  • Yazma özelliği, bilgisayardan bir tarih ve saat elde etmenizi sağlar, ardından ekranda doğru parametreler gösterilecektir.

Sonuç

Saat modülleri birçok projede kullanılır. Belirtilen bir zamanlama üzerinde çalışan zamanlayıcılar ve kontrol cihazları oluştururken, veri günlüğü sistemleri için gereklidir. ev aletleri. Yaygın ve ucuz modüllerin yardımı ile, alarm saati veya sensörlerden veri kaydedici gibi projeler oluşturabilirsiniz, bir SD kartta bilgi kaydetme veya ekranda zaman gösteriyor. Bu yazıda, kullanımın tipik senaryolarına ve en popüler modelleri bağlamak için seçeneklere baktık.

Konuya devam ediyor:
Akıllı telefon

Minitool Güç Veri Kurtarma Serbest Sürümü, verileri kurtarmak için tasarlanmış kullanımı kolay bir programdır. Minitool Güç Veri Kurtarma ile çalışmak için ...