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

Pengacuan Waktu Akurat: Sinkronkan DS3231 RTC dengan GPS pada Arduino Nano

Komponen dan perlengkapan

Tentang proyek ini

DS3231 saya drift, saya melakukan hal normal dalam memperbaruinya dengan mengompilasi beberapa kode menggunakan waktu sistem, tetapi ini terbukti kurang akurat karena proses kompilasi dan pengunggahan terus terganggu oleh proses lain yang terjadi pada komputer saya.

Setelah saya menemukan bahwa GPS memberikan waktu (UTC) dan tanggal yang akurat, saya memutuskan untuk menggunakannya untuk mengatur DS3231 saya.

Rangkaian:

Backpack LCD ke Arduino:

GND - GND
VCC - 5V
SDA - SDA (A4)
SCL - SCL (A5)

Modul jam DS3231 ke Arduino:

GND - GND
VCC - 5V
SDA - SDA (A4)
SCL - SCL (A5)

Penglalih level dari Arduino:

5V - 5V
GND - GND
D3 - BUS
D4 - BUS

NEO 6M GPS dari penglalih level:

3V - VCC
GND - GND
BUS - TXD (akhirnya di D3)
BUS - RXD (akhirnya di D4)

Kontak saklar:

SAKLAR - D9
SAKLAR - GND

Daya:

Saya menyuplai daya ke rangkaian saya melalui kabel USB.

Perangkat lunak:

99% perangkat lunak adalah contoh parsing.ino di pustaka GPS Adafruit. Saya menambahkan sedikit kode untuk melewatkan tanggal dan waktu yang diekstrak GPS ke DS3231 dan beberapa kode tambahan untuk menampilkan waktu dari DS3231 pada tampilan LCD.

Pustaka yang digunakan:

Operasi:

Nyalakan unit.

LCD akan menampilkan nilai tanggal dan waktu yang saat ini ada dalam register DS3231.

Tunggu sebentar hingga GPS terkunci.

Tekan tombol untuk mengatur waktu melalui sinyal GPS.

LCD akan menampilkan waktu baru.

Keterbatasan operasi:

Unit GPS memerlukan waktu untuk terkunci dan tidak ada indikator bahwa terkunci telah tercapai. Menekan tombol setel tanpa terkunci resulted in my DS3231 date being set to2000:0:0 and the time to 0:0:0.

Setelah LED merah pada unit GPS mulai berkedip sepertinya waktu terbaik untuk menekan tombol setel – ini bisa selama puluhan menit (di dalam ruangan).

Awalnya unit DS3231 yang saya gunakan memiliki baterai habis, saat menekan setel tanggal diatur ke2000:0:0 dan waktu ke 0:164:164. Butuh waktu cukup lama untuk baterai mendapatkan cukup muatan untuk menerima data GPS dan terus berdetik dengan benar sendiri.

Kejadian aneh GPS:

Papan yang saya beli mengatakan sederhana NEO 6M GPS dan memiliki pin koneksi yang ditandai dengan fungsinya. Saya melihat datasheet untuk perangkat [1] dan itu menyatakan perangkat berfungsi pada sekitar 3V, sehingga penggunaan penglalih level saya. Namun setelah pemeriksaan lebih dekat saya menemukan chip 4A2D yang disolder pada papan, pencarian di internet menunjukkan itu adalah regulator tegangan tetapi ini tidak menjamin bahwa garis komunikasi di-level shift (unit saya tidak datang dengan diagram rangkaian).

Saya juga telah membaca online bahwa modul GPS berbeda bervariasi dalam kemampuan mereka untuk menerima sinyal yang baik di dalam ruangan, sehingga penambahan saya layar LCD sehingga saya dapat membawanya ke luar.

Kejadian aneh LCD:

Saya menggunakan yang aneh yang memiliki alamat I2C 0x3F, sebagian besar menggunakan alamat 0x27, jadi jika Anda tidak melihat apa-anya coba mengubah itu terlebih dahulu.

Kejadian aneh pustaka:

Pustaka RTCLib (versi Adafruit 1.2.0) mengatur register waktu dan tanggal tetapi tidak register hari dari DS3231. Pustaka memiliki fungsi untuk mengembalikan hari dalam seminggu yang dihitung di waktu aktif menggunakan nilai dalam register tanggal.

Saya menemukan ini aneh tetapi akhirnya menyadari bahwa itu masuk akal, mengatur register hari akan memerlukan kode Anda disiapkan untuk mengubahnya pada tahun kabisat sementara menghasilkan hari dengan rumus menghindari ini.

Waktu UTC & Waktu Lokal:

Saya melakukan pencarian tentang UTC dan menemukan bahwa tidak ada perubahan yang diperlukan untuk waktu lokal saya, jadi jika Anda memerlukannya Anda harus menambahkan potongan kode itu sendiri.

Referensi:

[1] https://www.u-blox.com/sites/default/files/products/documents/NEO-6_DataSheet_(GPS.G6-HW-09005).pdf(diunduh /Des/2018)

Kode

File kode Set DS3231

// Date and time functions using a DS3231 RTC connected via I2C and Wire lib #include <Wire.h> #include "RTClib.h"//Aadafruit version 1.2.0 on my machine RTC_DS3231 RTC; char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; const int days_string_length =12; #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); #define button 9 #include <Adafruit_GPS.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); Adafruit_GPS GPS(&mySerial); #define GPSECHO false boolean usingInterrupt = false; void useInterrupt(boolean); void setup() { Serial.begin(115200); Serial.println("Adafruit GPS library basic test!"); GPS.begin(9600); GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); GPS.sendCommand(PGCMD_ANTENNA); useInterrupt(true); delay(1000); mySerial.println(PMTK_Q_RELEASE); lcd.begin(16,2); lcd.backlight(); lcd.clear(); pinMode(button,INPUT_PULLUP); } SIGNAL(TIMER0_COMPA_vect) { char c = GPS.read(); #ifdef UDR0 if (GPSECHO) if (c) UDR0 = c; #endif } void useInterrupt(boolean v) { if (v) { OCR0A = 0xAF; TIMSK0 |= _BV(OCIE0A); usingInterrupt = true; } else { TIMSK0 &= ~_BV(OCIE0A); usingInterrupt = false; } } uint32_t timer = millis(); void loop() { if (! usingInterrupt) { char c = GPS.read(); if (GPSECHO) if (c) Serial.print(c); } if (GPS.newNMEAreceived()) { if (!GPS.parse(GPS.lastNMEA())) return; } if (timer > millis()) timer = millis(); static bool second_time_round=false; if(!digitalRead(button)){ RTC.adjust(DateTime(GPS.year, GPS.month, GPS.day, GPS.hour, GPS.minute, GPS.seconds)); lcd.clear(); lcd.setCursor(2,0); lcd.print("Pressed set"); delay(5000); lcd.clear(); } DateTime now = RTC.now(); lcd.setCursor(4,0); lcd.print(now.year(), DEC); lcd.print('/'); lcd.print(now.month(), DEC); lcd.print('/'); lcd.print(now.day(), DEC); lcd.print(' '); lcd.setCursor(4,1); lcd.print(now.hour(), DEC); lcd.print(':'); lcd.print(now.minute(), DEC); lcd.print(':'); lcd.print(now.second(), DEC); lcd.print(" "); } 

Skematik

Pengacuan Waktu Akurat: Sinkronkan DS3231 RTC dengan GPS pada Arduino NanoPengacuan Waktu Akurat: Sinkronkan DS3231 RTC dengan GPS pada Arduino Nano

Proses manufaktur

  1. Set Screws Dijelaskan: Desain, Perbedaan, dan Aplikasi
  2. Meninggalkan Warisan yang Abadi: Kepemimpinan Autentik untuk Masa Depan yang Lebih Baik
  3. SMRP Merilis Kumpulan KPI Standar untuk Profesional Pemeliharaan & Keandalan
  4. Pengaturan Lingkungan Pengembangan Java 10: Build, Kompilasi, dan Jalankan
  5. Segitiga Rakar: Tujuan, Jenis, dan Penggunaan dalam Gambar Teknik
  6. Penggerindaan Permukaan: Teknik Tradisional untuk Presisi
  7. Mengapa Mesin CNC Box-Way Adalah Pilihan Optimal untuk Presisi dan Performa
  8. Panduan Lengkap Punch Set: Semua yang Perlu Anda Ketahui
  9. Linear-Guide CNC Lathes: Presisi, Kecepatan, dan Produksi Ringan
  10. Panduan Lengkap Memilih Set Alat Mekanik yang Tepat