Proses manufaktur
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 13 | ||||
| × | 11 | ||||
| × | 1 |
Pertama-tama...
Ini adalah salinan/tempel dari tutorial yang saya tulis di situs web Instructables. Saya masih perlu mencari tahu bagaimana saya berpindah dari satu situs ke situs lainnya. Jadi mungkin ini tidak semulus yang seharusnya... Tapi, mulailah dengan jam yang tidak terlalu harian.
Intro:Jam Berlin
Jam Berlin, BerlinUhr atau Mengenlehreuhr, mungkin adalah jam digital pertama.
Sudah ada sejak tahun 1975...
Banyak info yang bisa Anda temukan di sini:https://en.wikipedia.org/wiki/Mengenlehreuhr
Bagaimana cara pembuatannya, bagaimana cara mengetahui waktu?
Singkatnya, ada empat baris lampu. Baris atas memberikan jam x 5, berikutnya "satu jam" dari 1 hingga 4. Baris ketiga memberi kita "menit x5", baris bawah menit.
Pada gambar yang ditampilkan, (sebenarnya satu lampu rusak...) waktunya adalah:2x5 jam ditambah 3 jam + 6x5 menit + 2 menit.
Jadi 13:32. Oke, saya kira kita orang Eropa lebih terbiasa memberi tahu waktu dalam 24 jam. format, begitu juga jam.
Lampu terbesar di atas berkedip setiap detik.
Saya pikir jam ini mungkin menyenangkan untuk dibuat di Arduino.
Langkah 1:Beberapa Elektronik
Apa yang kita butuhkan untuk proyek ini?
Pertama-tama, (tentu saja), Arduino kami.
Saya menggunakan salah satu Uno saya yang tergeletak di mana-mana di dekat komputer saya.
Karena kita berbicara tentang jam, kita mungkin menggunakan RTC. Saya menggunakan yang murah dengan DS 1307.
Untuk "tampilan", kita membutuhkan beberapa LED. Saya menggunakan 13 yang kuning, 5mm, dan 11 Merah. (Saya sebenarnya menggunakan RGB untuk warna merah, karena saya tidak punya cukup warna merah di sekitar...)
Papan tempat memotong roti, papan cetak dengan hanya lubang dan "pulau solder". Saya baru saja menggunakan bagian dari apa yang disebut "format kartu Euro".
2 resistor yang saya gunakan. Salah satu dari 220Ohm (LED detik), dan lainnya 68K.
Dan satu IC tambahan:MAX7219.
MAX adalah driver tampilan LED 8 digit. Banyak dari kita mengetahuinya karena digunakan dalam matriks LED juga.
Untuk memudahkannya, saya juga menggunakan perpustakaan Arduino "LedControl". Jika Anda masih belum memilikinya, Anda dapat mengunduhnya dari sini:
https://github.com/wayoda/LedControl
Langkah 2:Menyiapkannya.
Anda dapat menemukan lembar data yang sangat bagus untuk MAX 7219 di tempat ini:
https://www.sparkfun.com/datasheets/Components/Gen...
COM-09622-MAX7219-MAX7221.pdfSaya tidak akan membahas lembar data itu lebih jauh, tetapi ada baiknya menggunakannya, ini semacam IC yang "menyenangkan".
Lompatan ke Arduino.
Pada skema itu Anda melihat konstruksi yang sangat sederhana:Saya menggunakan SDA dan SCL untuk menggunakan jam (breakout A 1307), dan empat output lagi:DataIn, Clock and Chipselect yang menuju ke MAX 7219, dan OUT 13 yang kami gunakan untuk berkedip LED "detik".
Banyak hal yang terjadi di Arduino:ia membaca jam, mengubahnya menjadi berbagai jenis output, dan kemudian mengirimkan data ke 7219.
Ketika Anda membaca kodenya, 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":variabel tersebut memberikan keluaran "Lima menit".
Dalam sketsa saya juga menggunakan tahun, bulan, hari bulan dan hari kerja, dalam sketsa ini saya tidak membutuhkannya, tapi mungkin nanti, saya bisa menambahkan kalender ke dalamnya.
Dalam tata letak Fritzing(c), IC tidak terhubung ke kabel:Saya melakukannya untuk kemudahan, karena memiliki banyak keluaran.
Mari kita simpulkan:
pin 4 dan 9 terhubung ke GND,
19 adalah VCC
18, ISet, terhubung ke VCC dengan resistor:yang satu ini membatasi arus yang mengalir 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). Tapi ada perbedaan antara kecerahan merah dan kuning, saya pikir itu karena fakta bahwa yang merah sebenarnya adalah RGB Led. Saya harus menyelesaikannya...
pin 1 adalah DataIn, yang ini berasal dari Arduino, pin 12
pin 12 adalah Load, berasal dari pin Arduino 10
pin 13 adalah Clk, berasal dari Arduino 11.
Sejauh ini untuk masukan dari 7219.
Perhatikan outputnya:
7219 memiliki kemungkinan untuk memberi daya pada 8 layar 7 detik.
Keluaran ini, DIG 0 hingga DIG 4 digunakan di sini untuk menggerakkan "garis" LED:karena jalur "lima menit" memiliki 11 LED di dalamnya, saya menggunakan DIG 1 dan DIG 2 untuk menggerakkannya.
Keluaran lainnya:Segmen A hingga G dan DP (tampilan 7Seg normal).
Dalam kasus ini (dengan LedControl), saya mengirim Kata Biner kepada mereka (byteform, seperti B01010100).
Dan di sana saya membuat kesalahan. Beberapa logika mengatakan kepada saya bahwa SEG A akan menjadi MSB, B bit paling signifikan kedua, dan seterusnya, hingga DP, yang saya pikir akan menjadi bit paling tidak signifikan (LSB). Salah... Karena satu dan lain hal, pembuat IC mengira DP adalah MSB. Tidak dapat melihat logika itu...
Itu membuat saya mengubah pengkodean saya, karena saya sudah menyolder LED...
Langkah 3:LED
Pada skema ini, Anda melihat bagaimana LED terhubung bersama. Saya hanya menggambar tiga yang pertama, yang lainnya dengan cara yang sama.
LED detik terhubung langsung ke Pin 13.
Gambar menunjukkan "cara kerjanya". Sekarang jam 17:47...
Oke, baris paling bawah tidak begitu jelas, ada di papan tempat memotong roti. Saya harap Anda percaya bahwa itu benar-benar berhasil. (ya!).
Oh, satu langkah lagi yang akan datang...
Langkah 4:Langkah "terakhir", Kode.
#include #include const int DS1307 =0x68;// A5 =SCL, A4 =SDA const char* hari[] ={"Sunday", "Monday" , "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};konst char* bulan[] ={"Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"};byte detik =0; byte menit =0; byte jam =0; byte hari kerja =0; byte hari bulan =0; byte bulan =0; byte tahun =0; byte menit terakhir =0; byte lastSecond =0; int LED =13; byte nol =B0000000; byte een =B01000000; byte twee =B01100000; byte kering =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; Int a=0; int b =0; intc =0; int vijfMinTwee=0;int uitgang =RENDAH; /*pin 12 terhubung ke DataIn pin 11 terhubung ke CLK pin 10 terhubung ke 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); /* Atur kecerahan ke nilai sedang */ lc.setIntensity(0, 8); /* dan hapus tampilan */ lc.clearDisplay(0);}void loop() { readTime(); digitalWrite(Led, uitgang);if (kedua !=lastSecond){ if (uitgang ==RENDAH) uitgang =TINGGI; lain uitgang =RENDAH; digitalWrite (Led, uitgang); lastSecond =kedua; } if (menit !=menit terakhir) { printTime(); lastMinute =menit;}}byte bcdToDec(byte val) {return ((val/16*10) + (val%16));}void printTime() { char buffer[3]; lama menit =menit; panjang uren =jam;int vijfmin =menit/5; int eenminuut =menit -(vijfmin * 5);int vijfuren =ur/5; int eenuren =uren - (vijfuren *5); a =vijfmin; digital(); 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); Kawat.tulis(byte(0)); Wire.endTransmission();Wire.requestFrom(DS1307, 7); detik =bcdToDec(Wire.read());menit =bcdToDec(Wire.read());jam =bcdToDec(Wire.read()); hari kerja =bcdToDec(Wire.read()); hari bulan =bcdToDec(Wire.read());bulan =bcdToDec(Wire.read()); tahun =bcdToDec(Wire.read()); }void digitaal(){switch (a){ case 0:b=nul; c =nol; merusak; kasus 1:b =een; c =nol; merusak; kasus 2:b =twee; c =nol; merusak; kasus 3:b =kering; c =nol; merusak; kasus 4:b =vier; c =nol; break;kasus 5:b =vijf; c =nol; merusak; kasus 6:b =zes; c =nol; merusak; kasus 7:b =zeven; c =nol; merusak; kasus 8:b =acht; c =nol; merusak; kasus 9:b =acht; c =negen; merusak; kasus 10:b=acht; c =ikat; merusak; kasus 11:b=acht; c =peri; merusak; } }
Cukup mudah, saya percaya.
Manfaat lain dari sketsa ini:sekarang Anda belajar cara menghitung dalam bahasa Belanda... Dari 0 hingga 11...;-)
Semoga Anda menikmati ini!
Marc
Proses manufaktur
Komponen dan persediaan Arduino Nano R3 × 1 Maxim Integrated DS3231M - ±5ppm, I2C Real-Time Clock × 1 Sakelar Tombol Tekan, Sesaat × 2 Modul matriks led 32x8 × 1 Alat dan mesin yang diperlukan Besi solder (generik) Aplikasi dan layan
Komponen dan persediaan Arduino UNO × 1 Adafruit LCD Standar - 16x2 Putih di Atas Biru × 1 Sakelar Tombol Tekan SparkFun 12mm × 2 Ukuran Setengah Papan Tempat Memotong Roti Tanpa Solder × 1 Kabel jumper (generik) × 1 Tentang proyek ini
Komponen dan persediaan Arduino UNO × 1 Adafruit LCD Standar - 16x2 Putih di Atas Biru × 1 Modul I2C untuk LCD × 1 Jam Waktu Nyata (RTC) × 1 Sakelar Tombol Tekan SparkFun 12mm × 3 Resistor 10k ohm × 3 Kabel jumper (generik) ×
Dalam Tutorial Arduino ini kita akan belajar cara menggunakan Modul Jam Real Time DS3231. Anda dapat menonton video berikut atau membaca tutorial tertulis di bawah ini. Ringkasan Pertanyaan pertama yang muncul di sini adalah mengapa kita sebenarnya membutuhkan RTC terpisah untuk Proyek Arduino kit