
Gabriel Brooks
0
2719
250
Arduino projelerinde zaman ayırmak düşündüğünüz kadar kolay değildir: bilgisayar bağlantısı orada olmazsa, güçlenmeyen Arduino'nuzun içindekiler de dahil olmak üzere çalışması durur.
Arduino'nuzu etrafındaki dünya ile senkronize tutmak için, bunun adı verilen bir şeye ihtiyacınız olacak. “Gerçek Zamanlı Saat modülü”. İşte nasıl kullanılacağı.
Gerçek Zamanlı Saatin (RTC) amacı nedir??
Bilgisayarınız muhtemelen zamanını internet ile senkronize eder, ancak yine de İnternet bağlantısı olmadan da sürekli çalışmaya devam eden veya gücü kapalı olan dahili bir saati vardır. Bilgisayara bağlı bir Arduino kullandığınızda, sistem saatiniz tarafından sağlanan doğru zamana erişebilir. Bu oldukça yararlı, ancak çoğu Arduino projesi bir bilgisayardan uzakta kullanılmak üzere tasarlandı - bu noktada, güç ne zaman çekilirse veya Arduino yeniden başlatıldığında, saatin kaç olduğu hakkında hiçbir fikrimiz olmaz. Dahili saat sıfırlanacak ve bir sonraki açılışta tekrar sıfırdan saymaya başlayacaktır.
Projenizin zamana ihtiyaç duyacağı bir şey varsa - örneğin benim gece ışığım ve gün doğumu alarm saatim Arduino Gece Işığı ve Gündoğumu Alarmı Projesi Arduino Gece Işığı ve Gündoğumu Alarmı Projesi Bugün, yavaşça ve saldırgan bir gürültü yapan makineye başvurmadan sizi yavaşça uyandırın. - bu açıkça bir sorun olacak. Bu projede, her gece zamanı oldukça kaba bir şekilde manuel olarak ayarlayarak sorunu çözdük - kullanıcı yatmadan hemen önce sıfırlama düğmesine basacak ve manuel zaman senkronizasyonu sağlayabilecekti. Açıkçası bu ideal bir uzun süreli çözüm değil.
Bir RTC modülü, Arduino'nuz kapalıyken bile zamanı saymaya devam eden küçük bir düğme pil gerektiren bir devre devresidir. Bir kez ayarlandıktan sonra - bu süre bataryanın ömrünü korur, genellikle iyi bir yıl veya daha fazla.
TinyRTC
Arduino için en popüler RTC'ye TinyRTC denir ve eBay'de yaklaşık 5-10 $ karşılığında satın alınabilir. Büyük olasılıkla kendi bataryanızı (bu denizaşırı birçok yere göndermek yasa dışıdır) ve bazı başlıklar (kendiniz için lehim yapmanız gereken deliklere açılan pimler) tedarik etmeniz gerekecektir..
Bu benim sahip olduğum modül:
Dahili bir sıcaklık sensörüne sahip olmasına rağmen, eğer kullanmazsanız pil daha uzun sürebilir.
O şeyin üzerindeki deliklerin sayısı oldukça korkutucu görünüyor, ancak sadece dört tanesine ihtiyacınız var; GND, VCC, SCL ve SDA - RTC modülünün her iki tarafındaki ilgili pimleri kullanabilirsiniz. I2C protokolünü kullanarak saatinizle konuşursunuz, bu sadece iki iğnenin kullanıldığı anlamına gelir; “saat” (bir seri iletişim veri saati, zamanla ilgisi yoktur) ve bir veri için. Aslında, aynı iki pim üzerinde 121 I2C cihazı bile zincirleyebilirsiniz - ekleyebileceğiniz diğer I2C cihazlarının bir seçimi için bu Adafruit sayfasını inceleyin, çünkü!
Başlamak
TinyRTC modülünüzü aşağıdaki şemaya göre bağlayın - sıcaklık sensörü için pembe DS hattına gerek yok.
Sonra, Time ve DS1307RTC kütüphanelerini indirin ve elde edilen klasörleri / kütüphaneler Klasör.
Kütüphanelere yüklemek için Arduino ortamından çıkın ve yeniden başlatın ve örnekler.
DS1307RTC menüsünde iki örnek bulacaksınız: Ayarlanan zaman ilk örnek - bu RTC'yi doğru zamana ayarlayacaktır. Gerçek kod ayrıntıya girmeye değmez, sadece ilk kez senkronizasyonu gerçekleştirmek için bir kez çalıştırmanız gerektiğini biliyorum.
Ardından, örnek kullanımına ReadTest.
#include #include #include void setup () Serial.begin (9600); süre (! Seri); // seri gecikmeyi bekle (200); Serial.println ("DS1307RTC Okuma Testi"); Serial.println ( "-------------------"); void loop () tmElements_t tm; if (RTC.read (tm)) Seri.print ("Tamam, Zaman ="); print2digits (tm.Hour); Serial.write ( ':'); print2digits (tm.Minute); Serial.write ( ':'); print2digits (tm.Second); Seri baskı (", Tarih (D / M / Y) ="); Serial.print (tm.Day); Serial.write ( '/'); Serial.print (tm.Month); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm.Year)); Serial.println (); else if (RTC.chipPresent ()) Serial.println ("DS1307 durduruldu. Lütfen SetTime programını çalıştırın"); Serial.println ("zamanı başlatmak ve çalışmaya başlamak için örnek."); Serial.println (); else Serial.println ("DS1307 okuma hatası! Lütfen devreyi kontrol edin."); Serial.println (); gecikme (9000); gecikme (1000); void print2digits (int sayı) if (sayı> = 0 ve& sayı < 10) Serial.write('0'); Serial.print(number);
Çekirdeği de eklediğimizi unutmayın Wire.h Kütüphane - bu Arduino ile birlikte gelir ve I2C üzerinden iletişim kurmak için kullanılır. Kodu yükleyin, seri konsolu 9600 baud'da açın, izleyin ve Arduino'nuz her saniye geçerli saati verir. harika!
Örnekteki en önemli kod bir tmElements_t tm - bu bir yapı o anki zaman ile dolduracağız; ve RTC.read (tm) RTC modülünden şimdiki zamanı alan fonksiyon, bizim tm yapısı ve her şey yolunda giderse doğru döner. Bunun içine hata ayıklama veya mantık kodunu ekleyin “Eğer” Zamanın basılması veya buna tepki verilmesi gibi beyanlar.
Arduino ile doğru zamanı nasıl alacağınızı bildiğinize göre, gündoğumu alarm projesini yeniden yazmayı deneyebilir veya bir LED kelime saati oluşturabilirsiniz - olasılıklar sonsuzdur! Ne yapacaksın?
Resim Kredisi: Flickr Üzerinden Snootlab