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

Buat Jam Berlin dengan Arduino UNO – Jam LED Matrix DIY

Komponen dan Perlengkapan

Tentang Proyek Ini

Pertama-tama...

Ini adalah salin-tempel dari tutorial yang saya tulis di situs web Instructables. Saya masih perlu mencari tahu bagaimana saya berpindah dari satu situs ke situs lain. Jadi mungkin ini tidak sehalus yang seharusnya... Tetapi, mari kita mulai dengan jam yang tidak sehari-hari ini.

Pengantar: Jam Berlin

Jam Berlin, BerlinUhr, atau Mengenlehreuhr, mungkin adalah jam digital yang paling awal.

Jam ini ada sejak 1975...

Banyak informasi yang dapat Anda temukan di sini: https://en.wikipedia.org/wiki/Mengenlehreuhr

Bagaimana cara pembuatannya, bagaimana cara membaca waktunya?

Singkatnya, ada empat baris lampu. Baris atas memberikan jam x 5, baris berikutnya "jam tunggal" dari 1 hingga 4. Baris ketiga memberikan "menit x5", baris bawah memberikan menit.

Pada gambar yang ditampilkan, (sebenarnya satu lampu rusak...) waktunya adalah: 2x5 jam ditambah 3 jam + 6x5 menit ditambah 2 menit.

Jadi pukul 13:32. Oke, saya kira kita Eropah lebih terbiasa membaca waktu dalam format 24 jam, demikian pula dengan jam ini.

Lampu terbesar di atas berkedip setiap detik.

Saya pikir jam ini mungkin menyenangkan untuk dibuat dengan Arduino.

Langkah 1: Beberapa Elektronika

Apa yang kita butuhkan untuk proyek ini?

Pertama-tama, (tentu saja), Arduino kita.

Saya menggunakan Uno yang ada di mana-mana di dekat komputer saya.

Karena kita membicarakan jam, kita mungkin akan menggunakan RTC. Saya menggunakan satu yang murah dengan DS 1307.

Untuk "tampilan", kita butuh beberapa LED. Saya menggunakan 13 kuning, 5 mm, dan 11 merah. (Saya sebenarnya menggunakan RGB untuk yang merah, karena saya tidak memiliki cukup merah yang ada di sekitar...)

Papan roti, papan cetak dengan hanya lubang dan "pulau solder". Saya hanya menggunakan bagian dari yang disebut format "Euro card".

2 resistor yang saya gunakan. Salah satu 220Ohm (untuk LED detik), dan yang lain 68K.

Dan satu IC tambahan: MAX7219.

MAX adalah pengemudi tampilan LED 8 digit. Banyak dari kita mengenalnya karena juga digunakan dalam matriks LED.

Untuk kemudahan, saya juga menggunakan pustaka Arduino "LedControl". Jika Anda belum memilikinya, Anda dapat mengunduhnya dari sini: https://github.com/wayoda/LedControl

Langkah 2: Pengaturan

Anda dapat menemukan lembar data yang sangat bagus untuk MAX 7219 di tempat ini: https://www.sparkfun.com/datasheets/Components/Gen...

Saya tidak akan membahas lembar data lebih lanjut, tetapi layak menggunakannya, ini adalah jenis IC "menyenangkan".

Lompat ke Arduino.

Pada skema itu Anda melihat konstruksi yang sangat sederhana: Saya menggunakan SDA dan SCL untuk menggunakan jam (breakout 1307), dan empat output tambahan: DataIn, Clock dan Chipselect yang pergi ke MAX 7219, dan OUT 13 yang kita gunakan untuk LED "detik" berkedip kita.

Hal-hal yang paling banyak terjadi di Arduino: itu membaca jam, mengonversinya ke berbagai jenis output, dan kemudian mengirim data ke 7219.

Ketika Anda membaca kode, Anda akan melihat saya hanya menggunakan bahasa saya sendiri, Belanda, untuk itu. Misalnya: int "vijfuren" yang saya gunakan adalah variabel yang menghitung "Lima-jam", sama untuk "vijfminuten" dan "vijfminuten1": itu memberikan output "Lima-menit".

Dalam sketsa saya juga menggunakan tahun, bulan, tanggal dalam bulan dan hari dalam seminggu, dalam sketsa khusus ini saya tidak membutuhkannya, tetapi nanti, saya bisa menambahkan kalender padanya.

Dalam tata letak Fritzing(c), IC tidak dihubungkan: saya lakukan itu untuk kemudahan, karena itu memiliki banyak output.

Mari kita hitung mereka:

pin 4 dan 9 terhubung ke GND,

19 adalah VCC

18, ISet, terhubung ke VCC dengan resistor: ini membatasi arus yang pergi ke output. Pertama, saya mencoba dengan resistor 20K, tetapi setelah 10 menit atau lebih, semuanya menjadi gelap... Sekarang, dengan resistor 68K, jam masih berjalan (setelah lebih dari 24 jam). Namun ada perbedaan antara kecerahan merah dan kuning, saya pikir karena LED merah sebenarnya adalah LED RGB. Saya harus mengaturnya...

pin 1 adalah DataIn, yang berasal dari Arduino, pin 12

pin 12 adalah Load, berasal dari pin Arduino 10

pin 13 adalah Clk, berasal dari Arduino 11.

Sampai sini untuk input 7219.

Melihat output:

7219 memiliki kemampuan untuk menyuntikkan 8 tampilan 7seg.

Output ini, DIG 0 hingga DIG 4 digunakan di sini untuk mengemudi "baris" LED: karena baris "lima-menit" memiliki 11 LED di dalamnya, saya menggunakan DIG 1 dan DIG 2 untuk mengemudinya.

Output lainnya: Segmen A hingga G dan DP (tampilan 7Seg normal).

Dalam kasus ini (dengan LedControl), saya mengirim Kata Biner ke mereka (byteform, seperti B01010100).

Dan di sana saya membuat kesalahan. Beberapa logika memberi tahu saya bahwa SEG A akan menjadi MSB, B bit kedua yang paling signifikan, dan seterusnya, hingga DP, yang saya pikir akan menjadi bit paling tidak signifikan (LSB). Salah... Untuk satu alasan atau alasan lain, pembuat IC berpikir bahwa DP akan menjadi MSB. Tidak bisa melihat logika dari itu...

Itu membuat saya mengubah kode saya, karena saya telah memasang LED...

Langkah 3: LED

Pada skema ini, Anda melihat bagaimana LED terhubung bersama. Saya hanya menggambar tiga pertama, yang lain juga sama.

LED detik terhubung langsung ke Pin 13.

Gambar menunjukkan "bagaimana cara kerjanya". Pukul 17:47...

Ok, baris bawah tidak begitu jelas, itu ada di papan roti. Saya harap Anda percaya padanya bahwa itu benar-benar bekerja. (memang!).

Oh, satu langkah lagi akan datang...

Langkah 4: Langkah "terakhir", Kode.

#include <LedControl.h> #include <Wire.h> const int DS1307 = 0x68; // A5 =SCL, A4 =SDA const char* days[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; const char* months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; byte second = 0; byte minute = 0; byte hour = 0; byte weekday = 0; byte monthday = 0; byte month = 0; byte year = 0; byte lastMinute = 0; byte lastSecond =0; int Led =13; byte nul = B0000000; byte een =B01000000; byte twee = B01100000; byte drie = B01110000; byte vier = B01111000; byte vijf = B01111100; byte zes = B01111110; byte zeven = B01111111; byte acht = B11111111; byte negen = B01000000; byte tien = B01100000; byte elf = B01110000; I nt a=0; int b =0; int c =0; int vijfMinTwee=0; int uitgang = LOW; /*pin 12 is connected to the DataIn pin 11 is connected to the CLK pin 10 is connected to LOAD */ LedControl lc= LedControl(12, 11, 10, 1); unsigned long delaytime=100; void setup() { Wire.begin(); Serial.begin(9600); pinMode (Led, OUTPUT); lc.shutdown(0, false); /* Set the brightness to a medium values */ lc.setIntensity(0, 8); /* and clear the display */ lc.clearDisplay(0); } void loop() { readTime(); digitalWrite(Led, uitgang); if (second != lastSecond){ if (uitgang == LOW) uitgang =HIGH; else uitgang =LOW; digitalWrite (Led, uitgang); lastSecond = second; } if (minute != lastMinute) { printTime(); lastMinute = minute; } } byte bcdToDec(byte val) { return ((val/16*10) + (val%16)); } void printTime() { char buffer[3]; long minuten = minute; long uren = hour; int vijfmin =minuten /5; int eenminuut = minuten -(vijfmin * 5); int vijfuren = uren/5; int eenuren = uren - (vijfuren *5); a = vijfmin; digitaal(); vijfmin = b; vijfMinTwee = c; a = eenminuut; digitaal(); eenminuut = b; a= vijfuren; digitaal(); vijfuren = b; a = eenuren; digitaal(); eenuren = b; lc.setRow(0, 4, vijfuren); lc.setRow(0, 3, eenuren); lc.setRow(0, 1, vijfmin); lc.setRow(0, 2, vijfMinTwee); lc.setRow(0, 0, eenminuut); } void readTime() { Wire.beginTransmission(DS1307); Wire.write(byte(0)); Wire.endTransmission(); Wire.requestFrom(DS1307, 7); second = bcdToDec(Wire.read()); minute = bcdToDec(Wire.read()); hour = bcdToDec(Wire.read()); weekday = bcdToDec(Wire.read()); monthday = bcdToDec(Wire.read()); month = bcdToDec(Wire.read()); year = bcdToDec(Wire.read()); } void digitaal(){ switch (a){ case 0: b= nul; c= nul; break; case 1: b = een; c= nul; break; case 2: b = twee; c= nul; break; case 3: b = drie; c= nul; break; case 4: b = vier; c= nul; break; case 5: b = vijf; c= nul; break; case 6: b = zes; c= nul; break; case 7: b = zeven; c= nul; break; case 8: b = acht; c= nul; break; case 9: b = acht; c = negen; break; case 10: b= acht; c = tien; break; case 11: b=acht; c = elf; break; } } 

Cukup sederhana, menurut saya.

Manfaat lain dari sketsa ini: sekarang Anda belajar menghitung dalam bahasa Belanda... Dari 0 hingga 11... ;-)

Semoga Anda menikmati ini!

Marc

Kode

Github
https://github.com/wayoda/LedControl

Proses manufaktur

  1. Menguasai Perhitungan Konstanta Waktu untuk Sirkuit RC dan RL
  2. Jam Kuku: Sejarah, Kerajinan, dan Evolusi Modern
  3. Jam Pasir: Sejarah, Kerajinan, dan Daya Tarik Modern
  4. Perkembangan Penghitung Waktu: Dari Matahari Jam hingga Jam Kuarcis Presisi
  5. Menguasai time.sleep() Python: Best Practices, Multithreading, dan Contoh Dunia Nyata
  6. Rpibot: Robot Seluler Biaya Rendah dan Dapat Diperluas untuk Pembelajaran Sistem Tertanam
  7. Jam POV Arduino: Buat Tampilan LED Persistensi Penglihatan
  8. Generator Jam Verilog: Panduan Desain dan Implementasi
  9. Menguasai Tanggal dan Waktu dalam Python: Panduan Praktis
  10. Jam Kaca Tak Terbatas: Elegan Tak Terbatas Bertemu Waktu yang Akurat