Iklan
Mempertahankan waktu pada proyek-proyek Arduino tidak semudah yang Anda kira: begitu koneksi komputer tidak ada di sana, Arduino Anda yang tidak berdaya berhenti berjalan, termasuk ticker internalnya.
Agar Arduino Anda tetap sinkron dengan dunia di sekitarnya, Anda akan membutuhkan apa yang disebut "modul Jam Waktu Nyata". Begini cara menggunakannya.
Apa gunanya Jam Waktu Nyata (RTC)?
Komputer Anda kemungkinan besar menyinkronkan waktunya dengan internet, tetapi masih memiliki jam internal yang terus berjalan bahkan tanpa koneksi internet atau daya dimatikan. Saat Anda menggunakan Arduino yang dicolokkan ke komputer, ia memiliki akses ke waktu akurat yang disediakan oleh jam sistem Anda. Itu sangat berguna, tetapi sebagian besar proyek Arduino dirancang untuk digunakan jauh dari komputer - di mana titik, setiap kali daya dicabut, atau Arduino restart, itu sama sekali tidak tahu jam berapa ini. Jam internal akan diatur ulang dan mulai menghitung dari nol lagi saat dihidupkan kembali.
Jika proyek Anda ada hubungannya dengan membutuhkan waktu - seperti saya
lampu malam dan matahari terbit jam alarm Proyek Arduino Night Light dan Sunrise AlarmHari ini, kami akan membuat jam alarm matahari terbit, yang akan dengan lembut dan perlahan membangunkan Anda tanpa menggunakan mesin pembuat kebisingan ofensif. Baca lebih banyak - ini jelas akan menjadi masalah. Dalam proyek itu, kami menyelesaikan masalah dengan mengatur waktu secara manual setiap malam dengan cara yang agak kasar cara - pengguna akan menekan tombol reset tepat sebelum mereka pergi tidur, memberikan waktu manual sinkronkan. Jelas itu bukan solusi lama yang ideal.Modul RTC adalah sedikit tambahan sirkuit, membutuhkan baterai sel koin kecil, yang terus menghitung waktu bahkan ketika Arduino Anda dimatikan. Setelah diatur sekali - ini akan menjaga waktu untuk masa pakai baterai, biasanya tahun yang baik atau lebih.
TinyRTC
RTC paling populer untuk Arduino disebut TinyRTC dan dapat dibeli sekitar $ 5- $ 10 di eBay. Anda kemungkinan besar harus memasok baterai sendiri (ilegal mengirim barang-barang ini ke luar negeri ke banyak tempat), dan beberapa header (pin yang slot ke lubang, yang perlu Anda solder di diri Anda sendiri).
Ini adalah modul yang saya miliki:
Bahkan memiliki sensor suhu bawaan, meskipun baterai akan bertahan lebih lama jika Anda tidak menggunakannya.
Jumlah lubang pada benda itu terlihat sangat menakutkan, tetapi Anda hanya perlu empat lubang; GND, VCC, SCL dan SDA - Anda dapat menggunakan pin yang relevan di kedua sisi modul RTC. Anda berbicara dengan jam menggunakan Protokol I2C, yang berarti hanya dua pin yang digunakan - satu untuk "jam" (jam data komunikasi serial, tidak ada hubungannya dengan waktu) dan satu untuk data. Bahkan, Anda bahkan menghubungkan hingga 121 perangkat I2C pada dua pin yang sama - lihat halaman Adafruit ini untuk pilihan perangkat I2C lain yang bisa Anda tambahkan, karena ada banyak!
Mulai
Sambungkan modul TinyRTC Anda sesuai dengan diagram di bawah ini - garis DS merah muda tidak diperlukan, karena itu untuk sensor suhu.
Selanjutnya, unduh Waktu dan DS1307RTC perpustakaan dan letakkan folder yang dihasilkan di /libraries map.
Keluar dan luncurkan ulang lingkungan Arduino untuk dimuat di perpustakaan dan contoh.
Anda akan menemukan dua contoh di menu DS1307RTC: unggah dan jalankan Atur waktu contoh pertama - ini akan mengatur RTC ke waktu yang tepat. Kode sebenarnya tidak layak untuk dirinci, hanya tahu bahwa Anda perlu menjalankannya sekali untuk melakukan sinkronisasi waktu awal.
Selanjutnya, lihat contoh penggunaan dengan ReadTest.
#termasuk
#termasuk
#termasuk void setup () {Serial.begin (9600); while (! Serial); // tunggu penundaan serial (200); Serial.println ("Tes Baca DS1307RTC"); Serial.println (""); } membatalkan loop () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Jam); Serial.write (':'); print2digits (tm. Menit); Serial.write (':'); print2digits (tm. Kedua); Serial.print (", Date (D / M / Y) ="); Serial.print (tm. Hari); Serial.write ('/'); Serial.print (tm. Bulan); Serial.write ('/'); Serial.print (tmYearToCalendar (tm. Tahun)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 dihentikan. Silakan jalankan SetTime "); Serial.println ("contoh untuk menginisialisasi waktu dan mulai berjalan."); Serial.println (); } else {Serial.println ("DS1307 read error! Silakan periksa sirkuitnya. "); Serial.println (); } delay (9000); } delay (1000); } membatalkan print2digits (int number) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (angka); }
Perhatikan bahwa kami juga menyertakan inti Wire.h perpustakaan - ini dilengkapi dengan Arduino dan digunakan untuk berkomunikasi melalui I2C. Unggah kode, buka konsol serial di 9600 baud, dan tonton dan Arduino Anda menampilkan waktu saat ini setiap detik. Menakjubkan!
Kode yang paling penting dalam contoh ini adalah membuat a tmElements_t tm - ini adalah struktur bahwa kita akan mengisi dengan waktu saat ini; dan RTC.baca (tm) fungsi, yang mendapat waktu saat ini dari modul RTC, memasukkannya ke tm struktur, dan mengembalikan true jika semuanya berjalan dengan baik. Tambahkan kode debug atau logika Anda di dalam pernyataan "jika" itu, seperti mencetak waktu atau bereaksi.
Sekarang setelah Anda tahu cara mendapatkan waktu yang tepat dengan Arduino, Anda bisa mencoba menulis ulang proyek alarm matahari terbit atau membuat jam kata LED - kemungkinan tidak terbatas! Apa yang akan kamu buat?
Kredit Gambar: Snootlab Via Flickr
James memiliki gelar BSc dalam Artificial Intelligence, dan bersertifikat CompTIA A + dan Network +. Dia adalah pengembang utama MakeUseOf, dan menghabiskan waktu luangnya bermain VR paintball dan boardgames. Dia telah membangun PC sejak dia masih kecil.