Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Jam 7-Segmen dengan Arduino Nano + DS3231 + LDR

Komponen dan persediaan

Arduino Nano R3
berfungsi dengan baik dengan Arduino Uno atau Elegoo Uno
× 1
Ransel Adafruit 7-Segmen - 1,2" Digit Tinggi
- 1,2" Digit Tinggi dalam kasus saya (opsional jika Anda membeli bundel)
× 1
Adafruit 1.2 Tampilan 7-Segmen 4-Digit dengan Ransel I2C - Hijau
× 1
Adafruit DS3231
atau DS1307 jika Anda mau
× 1
Resistor 100k ohm
× 1
Resistor foto
× 1
Breadboard (generik)
× 1
Kabel jumper (generik)
10-14 buah
× 1
Baterai Sel Koin CR1220
× 1

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Pendahuluan

Di saat Anda selalu memiliki jam di pergelangan tangan, baik itu jam tangan atau smartphone, Arduino Uno/Nano agak membosankan. Jika tidak, Anda memiliki perangkat tersinkronisasi server NTP dalam artikel ini di luar, yang terus-menerus online melalui koneksi Internet Anda.

Cerita

Salah satu teman saya menolak karena alasan pribadi perangkat dengan koneksi WiFi di kamar tidurnya dan jadi saya memiliki Arduino yang dilengkapi dengan jam terpisah.

Pilih produk yang tepat

Saya terkejut betapa banyak produk yang berbeda bahkan Adafruit telah tersedia:tergantung pada ketegangan yang diinginkan, serta dengan presisi yang berbeda! Di sini saya memutuskan untuk dua produk:yang lebih murah DS1307 dan yang mungkin lebih tepat DS3231 .

Agar jelas:kedua produk dapat digunakan di jam ini. Untuk menggunakan DS1307, perhatikan penetapan PIN yang benar dan pembatasan opsi tampilan suhu:remark "//" the displayTemp(); fungsi dalam loop().

Sesuaikan sketsa

Saya pergi mencari sketsa dan menemukan sesuatu dengan anggota lain. Saya merestrukturisasi dan menyesuaikan sketsa ini, tetapi tetap menggunakan komentar bahasa Ceko dan menambahkan komentar bahasa Inggris.

Iklan itu seharusnya sebesar mungkin, jadi saya memutuskan untuk membuat iklan 7 segmen:lagi pula, saya hanya ingin memikirkan waktu.

Kejutan positif berikutnya yang saya alami saat meninjau sketsa:di sini, DS3231 menyediakan opsi untuk menggunakan suhu , yang DS1307 - selain ketidakakuratannya - hilang.

Init Jam

Jika Anda memiliki baterai sel tombol CR1220, Anda dapat mengikuti tutorial singkat Adafruit tentang pengaturan jam. Singkatnya, waktu tidak diunduh dari Internet, tetapi dari waktu ke waktu dari PC lokal. Stempel waktu unggahan ditransfer ke penghitung waktu.

Fungsi

Setelah itu saya menambahkan matriks LED ke sirkuit untuk output waktu dan suhu . Periode untuk perubahan waktu dan suhu dapat diatur melalui variabel.

Secara khusus, bagaimana kontrol individu - berkedip - titik dan angka pada matriks LED bekerja dan dikendalikan, dijelaskan dengan baik dalam sketsa.

Di sini saya merujuk ke lebih banyak sumber Adafruit.

Sketsa dibulatkan oleh penyesuaian waktu musim panas/musim dingin dan kecerahan matriks LED bergantung pada cahaya sekitar (pada malam hari tampilan harus lebih gelap dari pada siang hari).

Dalam video tersebut, Anda tentu memperhatikan perubahan waktu dan suhu. Apakah Anda memperhatikan titik di sebelah kiri pada gambar? Ini mengubah posisinya (naik atau turun) tergantung pada detik.

Beri saya umpan balik jika Anda tahu cara mengeluarkan "ERR" pada matriks LED jika terjadi kegagalan jam. Saat ini "bEEF" akan muncul:

 // oh tidak, tidak ada data! Serial.println("DS3231 Sensor Error - tidak bisa membaca suhu"); matrix.print(0xBEEF, HEX); // menginformasikan pengguna dengan BEEF matrix.writeDisplay(); delay(5000); 

Ekspansi

Alarm atau waktu alarm juga belum terintegrasi.

Mungkin juga berhasil ekstensi melalui modul Bluetooth dan Blynk.

Pembaruan 01.02.2019:

Transfer dari papan tempat memotong roti ke taruhan permanen pada kartu punch telah selesai hari ini. Beberapa gambar untuk mereka yang tertarik:

Anda akan menemukan kode yang diperbarui v1.1 dalam lampiran serta gambar frizing yang disesuaikan.

Kode

  • MyClock v1.0
  • MyClock v1.1
MyClock v1.0C/C++
// MyClock v1.0// Ingo Lohs// Hardware:diuji dengan Arduino Uno dan Arduino Nano (ATmega328P [Old Bootloader]) dengan menggunakan Arduino IDE v1.8.8/* Teori untuk Matrix ht16k33Yang paling mudah adalah hanya menelepon print - seperti yang Anda lakukan dengan Serialprint(variable,HEX) - ini akan mencetak angka heksadesimal, dari 0000 hingga FFFFprint(variable,DEC) atau print(variable) - ini akan mencetak bilangan bulat desimal, dari 0000 hingga 9999Jika Anda memerlukan kontrol lebih, Anda dapat memanggil writeDigitNum(lokasi, nomor) - ini akan menulis nomor (0-9) ke satu lokasi. Lokasi #0 sepenuhnya ke kiri, lokasi #2 adalah titik dua jadi Anda mungkin ingin melewatinya, lokasi #4 berada di sepanjang jalan ke kanan.Untuk mengontrol titik dua dan titik desimal, gunakan fungsi writeDigitRaw(location, bitmap).(Perhatikan bahwa kedua titik titik dua tengah dihubungkan secara internal ke layar , jadi tidak mungkin untuk mengatasinya secara terpisah.) Tentukan 2 untuk lokasi dan bit dipetakan sebagai berikut:0x02 - titik dua tengah (keduanya d ots)0x04 - titik dua kiri - titik bawah0x08 - titik dua kiri - titik atas0x10 - titik desimalJika Anda menginginkan titik desimal, panggil writeDigitNum(lokasi, angka, benar) yang akan melukis titik desimal. Untuk menggambar titik dua, gunakan drawColon(true atau false)Jika Anda ingin kontrol penuh segmen di semua digit, Anda dapat memanggil writeDigitRaw(location,bitmask) untuk menggambar topeng 8-bit mentah (seperti yang disimpan dalam uint8_t) ke lokasi mana pun. Semua rutinitas menggambar hanya mengubah tampilan memori yang disimpan oleh Arduino. Jangan lupa untuk memanggil writeDisplay() setelah menggambar untuk 'menyimpan' memori ke matriks melalui I2C.Sumber:https://www.mouser.com/ds/2/737/adafruit-led-backpack-932846. pdf*/#include  // Aktifkan baris ini jika menggunakan Arduino Uno, Mega, dll.#include #include "Adafruit_LEDBackpack.h"#define DS3231_I2C_ADDRESS 0x68int ldr_sensor =A0; // Fotoresistor LDR dengan 100k Ohm ke GND, kaki lainnya 5Vint ldr_value =0; // nilai LDR - nilai simpanan varint brightness_matrix; // Kecerahan Matriks LED - var store valueint threshold_brightness =400; // Nilai ambang batas blinkrate =0; // Laju kedip matriks LEDint delay_matrix_time =20; // berapa lama waktu tampilan (20 detik)int delay_matrix_temp =2000; // berapa lama suhu tampilan (2 detik)int blinky_dot =2; // tidak berkedip - di sisi kiri 2 titik tunggalAdafruit_7segment matrix =Adafruit_7segment();byte decToBcd(byte val){return ( (val/10*16) + (val%10) );}byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) );}void setup() { Serial.begin(9600); Kawat.mulai(); matrix.begin(0x70);}void loop() { lightBrightness(); // Matrix-Brightness Justierung matrixBlinkrate(); // Mattrix-Blinkrate Justierung displayTime(); // menampilkan data jam real-time displayTemp(); // menampilkan suhu }void lightBrightness() {// setBrightness(brightness) - akan memungkinkan Anda mengubah kecerahan keseluruhan dari seluruh tampilan. 0 paling tidak terang, 15 paling terang dan itulah yang diinisialisasi oleh tampilan saat Anda memulai ldr_value =analogRead(ldr_sensor); Serial.print("LDR :"); Serial.println(ldr_value); if (ldr_value <=threshold_brightness) { // pengukuran kecerahan vs Ambang brightness_matrix =0; // terang di siang hari } else { brightness_matrix =15; // gelap di malam hari }}void matrixBlinkrate() {// blinkRate(rate) - Anda dapat mengedipkan seluruh tampilan. 0 tidak berkedip. 1, 2 atau 3 untuk tampilan berkedip. matrix.blinkRate(blinkrate_value);} void displayTime(){matrix.setBrightness(brightness_matrix); matrix.clear();// berapa lama waktu tampilan pada matriks dalam detik untuk (uint16_t i =0; i > Ubah ke waktu musim panas - Minggu terakhir di bulan Maret pukul 2 jika ((hariPekan ==7) &&(hariBulan>=25)&&(bulan ==3) &&(jam ==2)) { // nastavení hodin na 3 hodinu // setel jam ke 3 jam setDS3231time(se,mi,3,we,dm,mo,ye); } // změna asu na zimní //>> Ubah ke waktu musim dingin jika ((hariPekan ==7) &&(hariBulan>=25) &&(bulan ==10) &&(jam ==1)&&(tahun !=1 )) { // rok použit jako indikace, e bylo léto // tahun digunakan sebagai indikasi bahwa saat itu musim panas setDS3231time(se,mi,ho,we,dm,mo,1); } if ((hariPekan ==7) &&(hariBulan>=25) &&(bulan ==10) &&(jam ==3) &&(tahun ==1)) { // nastavení hodin na 2 hodinu a příznak na 0 // atur jam ke 2 jam dan tandai tahun ke 0 setDS3231time(se,mi,2,we,dm,mo,0); } /* Tentukan 2 untuk lokasi dan bit dipetakan sebagai berikut:0x02 - titik tengah (kedua titik) 0x04 - titik dua kiri - titik bawah 0x08 - titik dua kiri - titik atas 0x10 - titik desimal */ /* lokasi #2 kontrol juga kiri 2 titik tunggal seperti ini (=blinky_dot):2 =tidak berkedip 3 =tidak berkedip 4 =berkedip kiri atas (titik atas tunggal) 5 =berkedip kiri atas (titik atas tunggal) 6 =berkedip kiri atas (titik atas tunggal) ) + keduanya Titik dua di tengah 7 =berkedip kiri atas (satu titik atas) + keduanya Titik dua di tengah 8 =berkedip kiri bawah (satu titik bawah) 9 =berkedip kiri bawah (satu titik bawah) 10 =berkedip kiri bawah (satu titik bawah ) + keduanya Titik dua di pertengahan 11 =berkedip kiri bawah (satu titik bawah) + keduanya Titik dua di pertengahan 12 =berkedip keduanya Titik dua (kedua titik tunggal kiri) tanpa kedua Titik dua di tengah */ // format jam:_0:mm if (jam> 9) { matrix.writeDigitNum(0, (jam / 10), false); matrix.writeDigitNum(1, (jam % 10), false); // ini akan menulis angka (0-9) ke satu lokasi dengan menggunakan modulo https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/modulo/ } else { matrix.writeDigitNum( 1, jam, salah); } // matrix.drawColon(benar); // kedua titik dua di tengah aktif:jika Anda tidak ingin mengedipkan titik-titik kiri, Anda dapat mengaktifkan kedua titik dua di sini // beri kesempatan detik untuk menunjukkan titik-titik lokasi kiri jika (se <=30) { blinky_dot =10; // berkedip kiri bawah (satu titik bawah) + kedua titik dua di tengah } else if (se> 30) { blinky_dot =6; // berkedip kiri atas (satu titik atas) + keduanya Titik dua di tengah } matrix.writeDigitRaw(2, blinky_dot); matrix.writeDigitNum(3, (menit / 10), salah); matrix.writeDigitNum(4, (menit % 10), salah); matrix.writeDisplay(); // titik ganda berkedip selama setengah detik delay(500); matrix.drawColon(salah); matrix.writeDisplay(); penundaan (500); }}void displayTemp(){matrix.setBrightness(brightness_matrix); matriks.clear(); byte suhu =get3231Temp(); int abs_temp =abs(temp); // jumlah absolut dari suatu nilai matrix.writeDigitNum(1,(abs_temp % 10), false); // posisi 1, nilai 9, tampilkan desimal) if (temp <0) matrix.writeDigitRaw(0,64); if (temp <=-10) matrix.writeDigitRaw(2,12); // dan jika suhunya negatif, kami memplot tanda minus ke tempat pertama. if (temp>
=10) matrix.writeDigitNum(0, (abs_temp/10), false); // posisi 0, nilai 1, tampilkan desimal) if (temp <=-10) matrix.writeDigitNum(0, (abs_temp/10), false); // posisi 0, nilai 1, tampilkan desimal) // matrix.writeDigitRaw(2,0x10); // matriks titik desimal.writeDigitRaw(3,99); // 99 ="°" matrix.writeDigitRaw(4,57); // 57 ="C" matrix.writeDisplay(); // menampilkan nilai suhu pada baris serial // zobrazí hodnoty teploty na seriove lince Serial.print("Temperatur in C:"); Serial.println(get3231Temp()); // +/- 3 Grad Celcius // berapa lama suhu tampilan pada matriks dalam penundaan detik(delay_matrix_temp);}kosongkan setDS3231time(byte detik, byte menit, byte jam, byte hariMinggu, byte hariBulan, byte bulan, byte tahun){ / / setel data waktu dan tanggal ke DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Kawat.tulis(0); // set input berikutnya untuk memulai pada detik register Wire.write(decToBcd(second)); // setel detik Wire.write(decToBcd(menit)); // setel menit Wire.write(decToBcd(jam)); // setel jam Wire.write(decToBcd(dayOfWeek)); // set hari dalam seminggu (1=Minggu, 7=Sabtu) Wire.write(decToBcd(dayOfMonth)); // atur tanggal (1 hingga 31) Wire.write(decToBcd(bulan)); // setel bulan Wire.write(decToBcd(tahun)); // setel tahun (0 hingga 99) Wire.endTransmission();}void getDateDs3231(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year){ Wire. mulaiTransmisi(DS3231_I2C_ADDRESS); Kawat.tulis(0); Kawat.endTransmisi(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); *kedua =bcdToDec(Wire.read() &0x7f); *menit =bcdToDec(Wire.read()); *jam =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *bulan =bcdToDec(Wire.read()); *tahun =bcdToDec(Wire.read());}mengambang get3231Temp(){ byte tMSB, tLSB; mengapung temp3231; Wire.beginTransmission(DS3231_I2C_ADDRESS); Kawat.tulis (0x11); Kawat.endTransmisi(); Wire.requestFrom(DS3231_I2C_ADDRESS, 2); if (Wire.available()) { tMSB =Wire.read(); // 2 pelengkap bagian int tLSB =Wire.read(); // bagian pecahan temp3231 =(tMSB &B01111111); // lakukan matematika 2 pada Tmsb temp3231 +=( (tLSB>> 6) * 0.25 ); // hanya peduli dengan bit 7 &8 mengembalikan temp3231; } else { // oh tidak, tidak ada data! Serial.println("DS3231 Sensor Error - tidak bisa membaca suhu"); matrix.print(0xBEEF, HEX); // menginformasikan pengguna dengan BEEF matrix.writeDisplay(); penundaan(5000); } }
MyClock v1.1C/C++
Update Summer/Winter-Time
// MyClock v1.1// Ingo Lohs// Hardware:diuji dengan Arduino Uno dan Arduino Nano (ATmega328P [Old Bootloader]) dengan menggunakan Arduino IDE v1.8.8// Change v1.0> v1.1// dayOfWeek ==1 anstatt 7 abgeändert di displayTime() zur korrekten Ermittlung des Sonntages für die Zeitumstellung/* Teori untuk Matriks ht16k33Yang paling mudah adalah memanggil print - seperti yang Anda lakukan dengan Serialprint(variabel,HEX) - ini akan mencetak angka heksadesimal, dari 0000 hingga FFFFprint(variable,DEC) atau print(variable) - ini akan mencetak bilangan bulat desimal, dari 0000 hingga 9999Jika Anda memerlukan kontrol lebih, Anda dapat menghubungi writeDigitNum(location, number) - ini akan menulis nomor (0-9) ke satu lokasi. Lokasi #0 sepenuhnya ke kiri, lokasi #2 adalah titik dua sehingga Anda mungkin ingin melewatinya, lokasi #4 adalah semua jalan ke kanan.Untuk mengontrol titik dua dan titik desimal, gunakan fungsi writeDigitRaw(location, bitmap).(Perhatikan bahwa kedua titik titik dua tengah dihubungkan bersama dalam eksternal ke tampilan, sehingga tidak mungkin untuk mengatasinya secara terpisah.) Tentukan 2 untuk lokasi dan bit dipetakan sebagai berikut:0x02 - titik dua tengah (kedua titik)0x04 - titik dua kiri - titik bawah0x08 - titik dua kiri - titik atas0x10 - titik desimalJika Anda menginginkan titik desimal, panggil writeDigitNum(lokasi, angka, benar) yang akan melukis titik desimal.Untuk menggambar titik dua, gunakan drawColon(benar atau salah)Jika Anda ingin kontrol penuh segmen di semua digit, Anda dapat memanggil writeDigitRaw(lokasi,bitmask) untuk menggambar topeng 8-bit mentah (seperti yang disimpan dalam uint8_t) ke lokasi mana pun. Semua rutinitas menggambar hanya mengubah memori tampilan yang disimpan oleh Arduino. Jangan lupa untuk memanggil writeDisplay() setelah menggambar untuk 'menyimpan' memori ke matriks melalui I2C.Sumber:https://www.mouser.com/ds/2/737/adafruit-led-backpack-932846. pdf*/#include  // Aktifkan baris ini jika menggunakan Arduino Uno, Mega, dll.#include #include "Adafruit_LEDBackpack.h"#define DS3231_I2C_ADDRESS 0x68int ldr_sensor =A0; // Fotoresistor LDR dengan 100k Ohm ke GND, kaki lainnya 5Vint ldr_value =0; // nilai LDR - nilai simpanan varint brightness_matrix; // Kecerahan Matriks LED - var store valueint threshold_brightness =400; // Nilai ambang batas blinkrate =0; // Laju kedip matriks LEDint delay_matrix_time =20; // berapa lama waktu tampilan (20 detik)int delay_matrix_temp =2000; // berapa lama suhu tampilan (2 detik)int blinky_dot =2; // tidak berkedip - di sisi kiri 2 titik tunggalAdafruit_7segment matrix =Adafruit_7segment();byte decToBcd(byte val){return ( (val/10*16) + (val%10) );}byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) );}void setup() { Serial.begin(9600); Kawat.mulai(); matrix.begin(0x70);}void loop() { lightBrightness(); // Matrix-Brightness Justierung matrixBlinkrate(); // Mattrix-Blinkrate Justierung displayTime(); // menampilkan data jam real-time displayTemp(); // menampilkan suhu }void lightBrightness() {// setBrightness(brightness) - akan memungkinkan Anda mengubah kecerahan keseluruhan dari seluruh tampilan. 0 paling tidak terang, 15 paling terang dan itulah yang diinisialisasi oleh tampilan saat Anda memulai ldr_value =analogRead(ldr_sensor); Serial.print("LDR :"); Serial.println(ldr_value); if (ldr_value <=threshold_brightness) { // pengukuran kecerahan vs Ambang brightness_matrix =0; // terang di siang hari } else { brightness_matrix =15; // gelap di malam hari }}void matrixBlinkrate() {// blinkRate(rate) - Anda dapat mengedipkan seluruh tampilan. 0 tidak berkedip. 1, 2 atau 3 untuk tampilan berkedip. matrix.blinkRate(blinkrate_value);} void displayTime(){matrix.setBrightness(brightness_matrix); matrix.clear();// berapa lama waktu tampilan pada matriks dalam detik untuk (uint16_t i =0; i > Ubah ke waktu musim panas - Minggu terakhir di bulan Maret pukul 2 jika ((hariPekan ==1) &&(hariBulan>=25)&&(bulan ==3) &&(jam ==2)) { // nastavení hodin na 3 hodinu // setel jam ke 3 jam setDS3231time(se,mi,3,we,dm,mo,ye); } // změna asu na zimní //>> Ubah ke waktu musim dingin jika ((hariPekan ==1) &&(hariBulan>=25) &&(bulan ==10) &&(jam ==1)&&(tahun !=1 )) { // rok použit jako indikace, e bylo léto // tahun digunakan sebagai indikasi bahwa saat itu musim panas setDS3231time(se,mi,ho,we,dm,mo,1); } if ((hariPekan ==1) &&(hariBulan>=25) &&(bulan ==10) &&(jam ==3) &&(tahun ==1)) { // nastavení hodin na 2 hodinu a příznak na 0 // atur jam ke 2 jam dan tandai tahun ke 0 setDS3231time(se,mi,2,we,dm,mo,0); } /* Tentukan 2 untuk lokasi dan bit dipetakan sebagai berikut:0x02 - titik tengah (kedua titik) 0x04 - titik dua kiri - titik bawah 0x08 - titik dua kiri - titik atas 0x10 - titik desimal */ /* lokasi #2 kontrol juga kiri 2 titik tunggal seperti ini (=blinky_dot):2 =tidak berkedip 3 =tidak berkedip 4 =berkedip kiri atas (titik atas tunggal) 5 =berkedip kiri atas (titik atas tunggal) 6 =berkedip kiri atas (titik atas tunggal) ) + keduanya Titik dua di tengah 7 =berkedip kiri atas (satu titik atas) + keduanya Titik dua di tengah 8 =berkedip kiri bawah (satu titik bawah) 9 =berkedip kiri bawah (satu titik bawah) 10 =berkedip kiri bawah (satu titik bawah ) + keduanya Titik dua di pertengahan 11 =berkedip kiri bawah (satu titik bawah) + keduanya Titik dua di pertengahan 12 =berkedip keduanya Titik dua (kedua titik tunggal kiri) tanpa kedua Titik dua di tengah */ // format jam:_0:mm if (jam> 9) { matrix.writeDigitNum(0, (jam / 10), false); matrix.writeDigitNum(1, (jam % 10), false); // ini akan menulis angka (0-9) ke satu lokasi dengan menggunakan modulo https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/modulo/ } else { matrix.writeDigitNum( 1, jam, salah); } // matrix.drawColon(benar); // kedua titik dua di tengah aktif:jika Anda tidak ingin mengedipkan titik-titik kiri, Anda dapat mengaktifkan kedua titik dua di sini // beri kesempatan detik untuk menunjukkan titik-titik lokasi kiri jika (se <=30) { blinky_dot =10; // berkedip kiri bawah (satu titik bawah) + kedua titik dua di tengah } else if (se> 30) { blinky_dot =6; // berkedip kiri atas (satu titik atas) + keduanya Titik dua di tengah } matrix.writeDigitRaw(2, blinky_dot); matrix.writeDigitNum(3, (menit / 10), salah); matrix.writeDigitNum(4, (menit % 10), salah); matrix.writeDisplay(); // titik ganda berkedip selama setengah detik delay(500); matrix.drawColon(salah); matrix.writeDisplay(); penundaan (500); }}void displayTemp(){matrix.setBrightness(brightness_matrix); matriks.clear(); byte suhu =get3231Temp(); int abs_temp =abs(temp); // jumlah absolut dari suatu nilai matrix.writeDigitNum(1,(abs_temp % 10), false); // posisi 1, nilai 9, tampilkan desimal) if (temp <0) matrix.writeDigitRaw(0,64); if (temp <=-10) matrix.writeDigitRaw(2,12); // dan jika suhunya negatif, kami memplot tanda minus ke tempat pertama. if (temp>
=10) matrix.writeDigitNum(0, (abs_temp/10), false); // posisi 0, nilai 1, tampilkan desimal) if (temp <=-10) matrix.writeDigitNum(0, (abs_temp/10), false); // posisi 0, nilai 1, tampilkan desimal) // matrix.writeDigitRaw(2,0x10); // matriks titik desimal.writeDigitRaw(3,99); // 99 ="°" matrix.writeDigitRaw(4,57); // 57 ="C" matrix.writeDisplay(); // menampilkan nilai suhu pada baris serial // zobrazí hodnoty teploty na seriove lince Serial.print("Temperatur in C:"); Serial.println(get3231Temp()); // +/- 3 Grad Celcius // berapa lama suhu tampilan pada matriks dalam penundaan detik(delay_matrix_temp);}kosongkan setDS3231time(byte detik, byte menit, byte jam, byte hariMinggu, byte hariBulan, byte bulan, byte tahun){ / / setel data waktu dan tanggal ke DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Kawat.tulis(0); // set input berikutnya untuk memulai pada detik register Wire.write(decToBcd(second)); // setel detik Wire.write(decToBcd(menit)); // setel menit Wire.write(decToBcd(jam)); // setel jam Wire.write(decToBcd(dayOfWeek)); // set hari dalam seminggu (1=Minggu, 7=Sabtu) Wire.write(decToBcd(dayOfMonth)); // atur tanggal (1 hingga 31) Wire.write(decToBcd(bulan)); // setel bulan Wire.write(decToBcd(tahun)); // setel tahun (0 hingga 99) Wire.endTransmission();}void getDateDs3231(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year){ Wire. mulaiTransmisi(DS3231_I2C_ADDRESS); Kawat.tulis(0); Kawat.endTransmisi(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); *kedua =bcdToDec(Wire.read() &0x7f); *menit =bcdToDec(Wire.read()); *jam =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *bulan =bcdToDec(Wire.read()); *tahun =bcdToDec(Wire.read());}mengambang get3231Temp(){ byte tMSB, tLSB; mengapung temp3231; Wire.beginTransmission(DS3231_I2C_ADDRESS); Kawat.tulis (0x11); Kawat.endTransmisi(); Wire.requestFrom(DS3231_I2C_ADDRESS, 2); if (Wire.available()) { tMSB =Wire.read(); // 2 pelengkap bagian int tLSB =Wire.read(); // bagian pecahan temp3231 =(tMSB &B01111111); // lakukan matematika 2 pada Tmsb temp3231 +=( (tLSB>> 6) * 0.25 ); // hanya peduli dengan bit 7 &8 mengembalikan temp3231; } else { // oh tidak, tidak ada data! Serial.println("DS3231 Sensor Error - tidak bisa membaca suhu"); matrix.print(0xBEEF, HEX); // menginformasikan pengguna dengan BEEF matrix.writeDisplay(); penundaan(5000); } }
Github
https://github.com/ILohs/MySketches

Skema

Jalur LDR diperbaiki

Proses manufaktur

  1. Arduino pov vision clock
  2. Jam IV9 Numitron DIY paling sederhana dengan Arduino
  3. Jam dinding sederhana menggunakan Adafruit 1/4 60 Ring Neopixel
  4. Jam Arduino dengan waktu sholat Islam
  5. Jam Master
  6. Suhu Arduino. Monitor Dan Jam Waktu Nyata Dengan Tampilan 3.2
  7. Arduino Nano:Kontrol 2 Motor Stepper Dengan Joystick
  8. Arduino Apple Watch
  9. Jam Array 7-Segmen
  10. Jam Alarm Sederhana dengan DS1302 RTC