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

Jam Analog Arduino Nano dengan DS3231 RTC & Amperemeter 1mA – Timer Kayu Presisi

Komponen dan Perlengkapan

Arduino Nano R3 1
Maxim Integrated DS3231M - RTC Real-Time ±5ppm, I2C 1
Amperemeter 1mA 3
Resistor 5kOhm 3
Resistor 10k ohm 2
Tombol saklar SparkFun 12mm 2

Aplikasi dan Layanan Online

Arduino IDE

Tentang Proyek Ini

Saya membuat jam analog gaya kayu yang cantik ini dengan Arduino Nano dan 3 amperemeter 1mA. Saya mendapatkan ide dari sini. Untuk menampilkan detik, bagian kode telah ditambahkan. Juga ditambahkan bagian yang, saat berjalan, melewati seluruh skala dari nol hingga nilai maksimum untuk tujuan kalibrasi. Tergantung pada jenis amperemeter yang kami gunakan, nilai resistor 5k dapat berbeda. Karena semua meter sedikit berbeda, nilai PWM perlu disesuaikan berdasarkan desain Anda. Anda harus mengubah beberapa nilai karena kode diatur untuk bekerja khusus dengan meter saya.

Kode

Kode Arduino
/* Analog Panel Meter - Clock ONLY Mode Instructables Link: https://www.instructables.com/id/Analog-VU-meter-and-Clock-Arduino-Powered/ Credits: bildr - DS1307 RTC code https://bildr.org/2011/03/ds1307-arduino/ _____________________ Penambangan kabel seperti berikut: - Kabel merah USB (5v) ke VCC - Kabel hitam USB ke GND - Tombol - Kiri/Bawah ke Digital 2 (ikut tutorial Arduino: https://arduino.cc/en/uploads/Tutorial/button.png ) - Kanan/Atas ke Digital 3 - DS1307 RTC - SDA ke Analog 4 - SCL ke Analog 5 - Meter Analog Kiri ke Digital 5 (PWM) - Meter Analog Kanan ke Digital 6 (PWM) _-Meter Analog Detik ke Digital 9_(PWM)_____________________ Catatan: Karena semua meter sedikit berbeda, nilai PWM perlu disesuaikan berdasarkan desain Anda. Silakan gunakan kode saya, tetapi Anda harus mengubah beberapa nilai karena diatur untuk bekerja khusus dengan meter saya. */ #include "Wire.h" #define DS1307_ADDRESS 0x68 byte zero = 0x00; //workaround untuk masalah #527 int downButton = 2; // tombol push bawah untuk menyesuaikan waktu (pin 2) int upButton = 3; // tombol push atas untuk menyesuaikan waktu (pin 3) int hours = 0; int minutes = 0; int seconds = 0; int lastMinute = 0; int lastSecond = 0; int leftMeter = 5; // meter kiri (jam) terpasang di pin 5 int rightMeter = 6; // meter kanan (menit) terpasang di pin 6 int secMeter=9; // meter detik terpasang di pin 9 void setup(){ Wire.begin(); Serial.begin(9600); // lihat waktu di serial monitor pinMode(leftMeter, OUTPUT); // Inisialisasi Output & Input pinMode(rightMeter, OUTPUT); pinMode(secMeter, OUTPUT); digitalWrite(leftMeter, HIGH); // Uji meter saat startup digitalWrite(rightMeter, HIGH); digitalWrite(secMeter, HIGH); digitalWrite(13, HIGH); delay (1000); digitalWrite(leftMeter, LOW); digitalWrite(rightMeter, LOW); digitalWrite(secMeter, LOW); digitalWrite(13, LOW); delay(1000); } void loop(){ printDate(); delay(75); // Mengubah waktu dengan tombol if (digitalRead(downButton) == HIGH){ byte second = seconds; // Jangan bingung: second bukan sama dengan seconds byte minute = minutes; // Jangan bingung: minute bukan sama dengan minutes byte hour = hours; // Jangan bingung: hour bukan sama dengan hours if (minutes > 0){ --minute; }else{ minute = 59; if (hours > 0){ -- hour; }else{ hour = 23; }} Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); //stop Oscillator Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(zero); //start Wire.endTransmission(); } if (digitalRead(upButton) == HIGH){ byte second = 0; byte minute = minutes; // Jangan bingung: minute bukan sama dengan minutes byte hour = hours; // Jangan bingung: hour bukan sama dengan hours if (minutes < 59){ ++minute; }else{ minute = 0; if (hours < 23){ ++ hour; }else{ hour = 0; }} Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); //stop Oscillator Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(zero); //start Wire.endTransmission(); } } byte decToBcd(byte val){ // Konversi angka desimal biasa menjadi binary coded decimal return ( (val/10*16) + (val%10) ); } byte bcdToDec(byte val) { // Konversi binary coded decimal menjadi angka desimal biasa return ( (val/16*10) + (val%16) ); } void printDate(){ // Reset pointer register Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); Wire.endTransmission(); Wire.requestFrom(DS1307_ADDRESS, 7); seconds = bcdToDec(Wire.read()); minutes = bcdToDec(Wire.read()); hours = bcdToDec(Wire.read() & 0b111111); // waktu 24 jam //cetak tanggal Serial.print(hours); // Un-comment untuk melihat waktu di serial monitor Serial.print(":"); // Serial.println(minutes); // Jangan lupa untuk un-comment 'Serial.begin' di 'void setup' di atas // Tingkat meter spesifik untuk setiap jam // Anda kemungkinan harus menyesuaikan nilai ini. // Coba mainkan nilai sampai Anda mendapatkan yang diinginkan. if (lastMinute != minutes){ if (hours == 1 || hours == 13){ analogWrite(leftMeter, 0); // sesuaikan tingkat meter kiri (jam) } if (hours == 2 || hours == 14){ analogWrite(leftMeter, 29); // sesuaikan tingkat meter kiri (jam) } if (hours == 3 || hours == 15){ analogWrite(leftMeter, 52); // sesuaikan tingkat meter kiri (jam) } if (hours == 4 || hours == 16){ analogWrite(leftMeter, 75); // sesuaikan tingkat meter kiri (jam) } if (hours == 5 || hours == 17){ analogWrite(leftMeter, 98); // sesuaikan tingkat meter kiri (jam) } if (hours == 6 || hours == 18){ analogWrite(leftMeter, 130); // sesuaikan tingkat meter kiri (jam) } if (hours == 7 || hours == 19){ analogWrite(leftMeter, 152); // sesuaikan tingkat meter kiri (jam) } if (hours == 8 || hours == 20){ analogWrite(leftMeter, 172); // sesuaikan tingkat meter kiri (jam) } if (hours == 9 || hours == 21){ analogWrite(leftMeter, 192); // sesuaikan tingkat meter kiri (jam) } if (hours == 10 || hours == 22){ analogWrite(leftMeter, 213); // sesuaikan tingkat meter kiri (jam) } if (hours == 11 || hours == 23){ analogWrite(leftMeter, 234); // sesuaikan tingkat meter kiri (jam) } if (hours == 0 || hours == 12){ analogWrite(leftMeter, 255); // sesuaikan tingkat meter kiri (jam) } if (minutes * 4.75 < 255){ // naikkan nilai PWM sebesar 4.75 setiap menit analogWrite(rightMeter, minutes * 4.75); // Saya harus menggunakan 4.75 pada meter saya untuk mendapatkan 30 menit menunjuk tepat ke atas }else{ // sempurna akan menjadi 4.25 karena 4.25 * 60 = 255 analogWrite(rightMeter, 255); } lastMinute = minutes; if (seconds * 4.25 < 255){ analogWrite(secMeter, seconds *4.25); }else{ analogWrite(secMeter, 255); } lastSecond = seconds; } } 

Skematis

Jam Analog Arduino Nano dengan DS3231 RTC & Amperemeter 1mA – Timer Kayu Presisi

Proses manufaktur

  1. Jam POV Arduino: Buat Tampilan LED Persistensi Penglihatan
  2. Jam Kata Arduino DIY – Buat Tampilan Waktu Real-Time yang Elegan
  3. Membuat Jam Waktu Nyata Arduino untuk Waktu Sholat Islam
  4. Bangun Jam Master LED Kustom dengan Alarm – Terlihat dari Jarak 12 Meter
  5. Paket Arduino Nano: CrazyCircuits, Sensor DFRobot & Alat – Bangun Proyek dengan Percaya Diri
  6. Jam Analog LED Persistence-of-Vision – Proyek DIY Arduino Nano
  7. Buat Roda Trim Tab Analog Kompak untuk FlightGear dengan Arduino Nano
  8. Panel Meter: Solusi Hemat Biaya untuk Antarmuka dan Kontrol Mesin
  9. Memilih Panel yang Tepat: Solusi Digital vs. Analog
  10. Panel Meter Dijelaskan: Cara Mereka Memantau dan Mengontrol Peralatan Industri