Isi kandungan:
Video: Jam Teks Arduino Scrolling: 3 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:09
Objektif projek ini adalah untuk membina jam teks bergulir yang memaparkan waktu seperti yang diucapkan (misalnya, "sudah tengah malam").
Ini adalah projek pantas - kami memberi anda cukup banyak untuk meneruskan perkakasan dan lakaran, dan kemudian anda dapat mengambilnya lebih jauh untuk memenuhi keperluan anda.
Langkah 1: Perkakasan
Anda memerlukan tiga item utama -
- papan serasi Arduino Uno
- litar jam sebenar atau modul menggunakan IC DS1307 atau DS3231
- dan paparan LED gaya P10 monokrom
Anda mungkin mahukan bekalan kuasa luaran, tetapi kita akan mendapatkannya kemudian.
Peringkat pertama adalah sesuai dengan jam masa nyata anda. Klik di sini untuk tutorial jika anda memerlukan bantuan untuk itu.
Sekarang saya harap anda berfikir "bagaimana anda menetapkan masa?".
Terdapat dua jawapan untuk soalan itu. Sekiranya anda menggunakan DS3231 tetapkannya dalam lakaran (lihat di bawah) kerana ketepatannya sangat baik, anda hanya perlu memuat naik lakaran dengan waktu baru dua kali setahun untuk menampung penjimatan siang.
Jika tidak, tambahkan antara muka pengguna yang mudah - beberapa butang boleh melakukannya. Akhirnya anda hanya perlu meletakkan perkakasan di bahagian belakang DMD. Terdapat banyak ruang lingkup untuk memenuhi keperluan anda sendiri, penyelesaian yang mudah adalah dengan menyelaraskan papan kawalan sehingga anda dapat mengakses soket USB dengan mudah - dan kemudian pasangkannya dengan beberapa Sugru.
Berkenaan dengan menghidupkan jam - anda boleh menjalankan SATU paparan LED dari Arduino, dan ia berjalan dengan kecerahan yang baik untuk kegunaan dalaman. Sekiranya anda mahu DMD berjalan sepenuhnya, kecerahan pembakar retina anda perlu menggunakan bekalan kuasa 5V 4A DC yang berasingan. Sekiranya anda menggunakan dua DMD - iaitu 8A, dan seterusnya. Cukup sambungkan kuasa luaran ke satu terminal DMD (sambungkan DMD kedua atau lebih ke terminal ini).
Sekiranya anda tidak suka memotong hujung kabel bekalan kuasa anda, gunakan pemutus soket DC.
Langkah 2: Lakaran Arduino
Anda perlu memasang dua perpustakaan Arduino berikut - TimerOne dan DMD. Kemudian muat naik lakaran:
// untuk RTC # sertakan "Wire.h" #tentukan DS1307_I2C_ADDRESS 0x68 // RTC DS1307 ialah 0x68
// untuk paparan LED
#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" # tentukan DISPLAYS_ACROSS 1 // anda boleh mempunyai lebih dari satu DMD dalam baris # tentukan DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
String finalString; // digunakan untuk menahan ayat terakhir untuk dipaparkan di DMD
batal ScanDMD () // diperlukan untuk DMD
{dmd.scanDisplayBySPI (); }
persediaan tidak sah ()
{// untuk DMD Timer1.initialize (5000); Pemasa1.attachInterrupt (ScanDMD); dmd.clearScreen (benar);
// untuk RTC
Wire.begin (); // aktifkan bas byte I2C kedua, minit, jam, dayOfWeek, dayOfMonth, bulan, tahun; // ubah pemboleh ubah dan lepaskan setDateDs1307 untuk menetapkan waktu // kemudian komen semula fungsi dan muat naik lakarannya lagi kedua = 0; minit = 13; jam = 23; dayOfWeek = 4; dayOfMonth = 19; bulan = 5; tahun = 13; // setDateDs1307 (kedua, minit, jam, dayOfWeek, dayOfMonth, bulan, tahun); }
// fungsi RTC biasa
// Tukarkan nombor perpuluhan normal menjadi bait perpuluhan berkod binari decToBcd (byte val) {return ((val / 10 * 16) + (val% 10)); }
// Tukar perpuluhan berkod binari ke nombor perpuluhan normal
bait bcdToDec (byte val) {return ((val / 16 * 10) + (val% 16)); }
batal setDateDs1307 (bait kedua, // 0-59
minit bait, // 0-59 jam bait, // 1-23 hari baitOfWeek, // 1-7 bait hariOfMonth, // 1-28 / 29 / bulan bait, // 1-12 tahun bait) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (kedua)); // 0 hingga bit 7 memulakan jam Wire.write (decToBcd (minit)); Wire.write (decToBcd (jam)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (bulan)); Wire.write (decToBcd (tahun)); Wire.write (00010000); // menghantar 0x10 (hex) 00010000 (binari) untuk mengawal daftar - menghidupkan Wire.endTransmission gelombang persegi (); }
// Mendapat tarikh dan masa dari ds1307
batal getDateDs1307 (bait * kedua, bait * minit, bait * jam, bait * hariOfWeek, bait * hariOfMonth, bait * bulan, bait * tahun) {// Tetapkan semula penunjuk daftar Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
// Sebilangan ini memerlukan topeng kerana bit tertentu adalah bit kawalan
* kedua = bcdToDec (Wire.read () & 0x7f); * minit = bcdToDec (Wire.read ()); * jam = bcdToDec (Wire.read () & 0x3f); // Perlu mengubahnya jika 12 jam am / pm * dayOfWeek = bcdToDec (Wire.read ()); * dayOfMonth = bcdToDec (Wire.read ()); * bulan = bcdToDec (Wire.read ()); * tahun = bcdToDec (Wire.read ()); }
kekosongan drawText (String oldString)
{dmd.clearScreen (benar); dmd.selectFont (Arial_Black_16); char newString [256]; int sLength = oldString.length (); oldString.toCharArray (newString, sLength + 1); dmd.drawMarquee (newString, sLength, (32 * DISPLAYS_ACROSS) -1, 0); permulaan panjang = milis (); pemasa panjang = mula; pemasa panjang2 = mula; boolean ret = salah; sementara (! ret) {if ((pemasa + 20) <millis ()) {ret = dmd.stepMarquee (-1, 0); pemasa = milis (); }}}
batal createTextTime (int hh, int mm)
// ini menggabungkan data sepanjang masa ke dalam teks sebagai satu kalimat {finalString = ""; // hapuskan hukuman untuk kes khas (di bawah) finalString = finalString + "It's";
// sekarang tambah jam
jika (hh == 1 || hh == 13) {finalString = finalString + "satu"; } jika (hh == 2 || hh == 14) {finalString = finalString + "two"; } jika (hh == 3 || hh == 15) {finalString = finalString + "three"; } jika (hh == 4 || hh == 16) {finalString = finalString + "empat"; } jika (hh == 5 || hh == 17) {finalString = finalString + "lima"; } jika (hh == 6 || hh == 18) {finalString = finalString + "enam"; } jika (hh == 7 || hh == 19) {finalString = finalString + "tujuh"; } jika (hh == 8 || hh == 20) {finalString = finalString + "lapan"; } jika (hh == 9 || hh == 21) {finalString = finalString + "sembilan"; } jika (hh == 10 || hh == 22) {finalString = finalString + "sepuluh"; } jika (hh == 11 || hh == 23) {finalString = finalString + "sebelas"; }
// sekarang tambahkan minit
suis (mm) {kes 1: finalString = finalString + "oh one"; rehat; kes 2: finalString = finalString + "oh two"; rehat; kes 3: finalString = finalString + "oh three"; rehat; kes 4: finalString = finalString + "oh empat"; rehat; kes 5: finalString = finalString + "oh lima"; rehat; kes 6: finalString = finalString + "oh six"; rehat; kes 7: finalString = finalString + "oh tujuh"; rehat; kes 8: finalString = finalString + "oh lapan"; rehat; kes 9: finalString = finalString + "oh sembilan"; rehat; kes 10: finalString = finalString + "sepuluh"; rehat; kes 11: finalString = finalString + "sebelas"; rehat; kes 12: finalString = finalString + "dua belas"; rehat; kes 13: finalString = finalString + "tiga belas"; rehat; kes 14: finalString = finalString + "empat belas"; rehat; kes 15: finalString = finalString + "lima belas"; rehat; kes 16: finalString = finalString + "enam belas"; rehat; kes 17: finalString = finalString + "tujuh belas"; rehat; kes 18: finalString = finalString + "lapan belas"; rehat; kes 19: finalString = finalString + "nineteen"; rehat; kes 20: finalString = finalString + "puluh"; rehat; kes 21: finalString = finalString + "dua puluh satu"; rehat; kes 22: finalString = finalString + "dua puluh dua"; rehat; kes 23: finalString = finalString + "dua puluh tiga"; rehat; kes 24: finalString = finalString + "puluh empat"; rehat; kes 25: finalString = finalString + "dua puluh lima"; rehat; kes 26: finalString = finalString + "dua puluh enam"; rehat; kes 27: finalString = finalString + "dua puluh tujuh"; rehat; kes 28: finalString = finalString + "dua puluh lapan"; rehat; kes 29: finalString = finalString + "dua puluh sembilan"; rehat; kes 30: finalString = finalString + "tiga puluh"; rehat; kes 31: finalString = finalString + "tiga puluh satu"; rehat; kes 32: finalString = finalString + "tiga puluh dua"; rehat; kes 33: finalString = finalString + "tiga puluh tiga"; rehat; kes 34: finalString = finalString + "tiga puluh empat"; rehat; kes 35: finalString = finalString + "tiga puluh lima"; rehat; kes 36: finalString = finalString + "tiga puluh enam"; rehat; kes 37: finalString = finalString + "tiga puluh tujuh"; rehat; kes 38: finalString = finalString + "tiga puluh lapan"; rehat; kes 39: finalString = finalString + "tiga puluh sembilan"; rehat; kes 40: finalString = finalString + "empat puluh"; rehat; kes 41: finalString = finalString + "empat puluh satu"; rehat; kes 42: finalString = finalString + "empat puluh dua"; rehat; kes 43: finalString = finalString + "empat puluh tiga"; rehat; kes 44: finalString = finalString + "empat puluh empat"; rehat; kes 45: finalString = finalString + "empat puluh lima"; rehat; kes 46: finalString = finalString + "empat puluh enam"; rehat; kes 47: finalString = finalString + "empat puluh tujuh"; rehat; kes 48: finalString = finalString + "empat puluh lapan"; rehat; kes 49: finalString = finalString + "empat puluh sembilan"; rehat; kes 50: finalString = finalString + "lima puluh"; rehat; kes 51: finalString = finalString + "lima puluh satu"; rehat; kes 52: finalString = finalString + "lima puluh dua"; rehat; kes 53: finalString = finalString + "lima puluh tiga"; rehat; kes 54: finalString = finalString + "lima puluh empat"; rehat; kes 55: finalString = finalString + "lima puluh lima"; rehat; kes 56: finalString = finalString + "lima puluh enam"; rehat; kes 57: finalString = finalString + "lima puluh tujuh"; rehat; kes 58: finalString = finalString + "lima puluh lapan"; rehat; kes 59: finalString = finalString + "lima puluh sembilan"; rehat; }
// tengah hari?
jika (hh == 12 && mm == 0) {finalString = finalString + "tengah hari"; } // tengah malam? jika (hh == 00 && mm == 0) {finalString = finalString + "midnight"; }
}
gelung kosong ()
{// dapatkan masa dari RTC bait kedua, minit, jam, dayOfWeek, dayOfMonth, bulan, tahun; getDateDs1307 (& kedua, & minit, & jam, & dayOfWeek, & dayOfMonth, & bulan, & tahun);
// ubah masa menjadi rentetan ayat
createTextTime (jam, minit);
// sekarang hantarkan teks ke DMD
drawText (finalString); }
Sketsa mempunyai fungsi biasa untuk mengatur dan mengambil masa dari IC jam masa nyata DS1307 / 3232, dan seperti biasa dengan semua jam kami, anda dapat memasukkan maklumat masa ke dalam pemboleh ubah dalam penyediaan kosong (), dan kemudian tidak menetapkan setDateDs1307 (), muat naik lakaran, komen semula setDateDs1307, kemudian muat naik lakaran sekali lagi. Ulangi proses itu untuk menetapkan semula waktu jika anda tidak menambahkan antara muka pengguna berasaskan perkakasan.
Langkah 3:
Setelah masa diambil dalam gelung void (), ia akan diteruskan ke fungsi createTextTime (). Fungsi ini membuat rentetan teks untuk ditampilkan dengan memulai dengan "It's", dan kemudian menentukan kata-kata mana yang harus diikuti bergantung pada waktu saat ini. Akhirnya fungsi drawText () menukar rentetan memegang teks untuk dipaparkan menjadi pemboleh ubah watak yang boleh disalurkan ke DMD.
Disyorkan:
Cara Membuat Jam Analog & Jam Digital Dengan Jalur Led Menggunakan Arduino: 3 Langkah
Cara Membuat Jam Analog & Jam Digital Dengan Jalur Led Menggunakan Arduino: Hari ini kita akan membuat Jam Analog & Jam digital dengan modul Led Strip dan MAX7219 Dot dengan Arduino. Ia akan membetulkan waktu dengan zon waktu tempatan. Jam Analog boleh menggunakan jalur LED yang lebih panjang, sehingga boleh digantung di dinding untuk menjadi seni
Kipas ESP8266 POV Dengan Jam dan Halaman Web Teks Kemas kini: 8 Langkah (dengan Gambar)
Kipas ESP8266 POV Dengan Jam dan Halaman Web Teks Kemas kini: Ini adalah kelajuan berubah-ubah, POV (Persistence Of Vision), Kipas yang secara berkala memaparkan waktu, dan dua pesanan teks yang dapat dikemas kini " dengan cepat " Kipas POV juga pelayan web satu halaman yang membolehkan anda menukar dua teks saya
Jam Persaraan / Jam Naik / Jam Dn: 4 Langkah (dengan Gambar)
Jam Persaraan / Jam Naik / Jam Dn: Saya mempunyai beberapa paparan dot-matriks 8x8 LED di dalam laci dan memikirkan apa yang harus dilakukan dengan mereka. Diilhamkan oleh instruksional lain, saya mendapat idea untuk membuat paparan hitung mundur / naik untuk dikira ke tarikh / masa yang akan datang dan jika waktu sasaran
Sarung Tangan Menukar Teks Ucapan / Teks: 5 Langkah
Sarung Tangan Teks Ucapan / Penukaran Teks: Idea / dorongan untuk melaksanakan projek ini adalah untuk membantu orang yang mengalami kesukaran untuk berkomunikasi menggunakan ucapan dan berkomunikasi menggunakan isyarat tangan atau lebih dikenali sebagai bahasa isyarat Amerika (ASL). Projek ini dapat menjadi langkah menuju
Jam Rangkaian ESP8266 Tanpa RTC - Jam NTP Nodemcu Tiada RTC - PROJEK JAM INTERNET: 4 Langkah
Jam Rangkaian ESP8266 Tanpa RTC | Jam NTP Nodemcu Tiada RTC | PROJEK JAM INTERNET: Dalam projek ini akan membuat projek jam tanpa RTC, akan memakan masa dari internet menggunakan wifi dan akan memaparkannya pada paparan st7735