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

Jam murah dan akurat berdasarkan GPS

Komponen dan persediaan

Arduino UNO
× 1
Adafruit RGB Backlight LCD - 16x2
dalam kasus saya, adaptor LCD 20x4 Display mit I2C nobrand untuk konektivitas yang mudah
× 1
Breadboard (generik)
× 1
Kabel jumper (generik)
× 1
Penerima GPS (generik)
GY-GPS6Mv2 dengan ublox NEO-6M
× 1

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini


Sejauh ini saya telah menggunakan berbagai jam RTC untuk proyek jam atau mendapatkan waktu dari server NTP. Dalam proyek ini saya menyajikan sumber lain untuk Anda:parsing dari rangkaian satelit GPS NMEA di seluruh dunia.

Saya terkejut betapa murahnya penerima GPS hari ini:dapatkan satu (dalam kasus saya GY-GPS6Mv2 digunakan).

a.) tes pertama - opsional - pada PC Windows:Instal "u-center" sebagai unduhan dari U-Blox.

Dengan bantuan adaptor FTDI, pelarian GPS menemukan jalannya ke port COM PC Anda dan menunjukkan pemasangan (koneksi) ke orbit setelah sekitar 1 menit. Untuk tujuan ini, lampu kontrol merah pada breakout akan berkedip.

Grafik yang dihasilkan secara otomatis membuat Anda ingin bereksperimen lebih banyak dengan GPS. Dengan F8 - Text Console di menu View, Anda mendapatkan berbagai string NMEA yang dikirimkan.

b.) Anda dapat melakukan tes decoding pada layanan online gratis:https://rl.se/gprmc

Sekarang setelah dipastikan bahwa Anda memiliki penerima GPS yang berfungsi - pastikan ada pemandangan langit - kami dapat mengekstrak informasi yang diinginkan dari string sesuai keinginan Anda.

Kami menggunakan library Adafruit "Adafruit GPS Library" - jika Anda telah menginstalnya di Arduino IDE, Anda dapat mencoba sedikit dengan contohnya.

c.) Sirkuit

Arduino A4> Tampilan SDA Arduino A5> Tampilan SCL

#include #include LiquidCrystal_I2C lcd(0x3F, 20, 4); // setel alamat LCD> sering 0x27 atau 0x3F

> gunakan Tampilan yang tergeletak di sekitar, mungkin berukuran 16x2?

#include #include

Hubungkan pin GPS Power ke 5VHubungkan pin GPS Ground ke groundHubungkan pin GPS TX (transmit) ke Digital 8Hubungkan pin GPS RX (receive) ke Digital 7// Anda dapat mengubah nomor pin agar sesuai dengan kabel Anda:SoftwareSerial mySerial(8 , 7);Adafruit_GPS GPS(&mySerial);

> Penerima GPS adalah 3.3 / 5V toleran.

d.) Jam tangan kita harus memberikan waktu, tanggal, indikasi kecepatan angin dan katakanlah ketinggian. Kami tidak memerlukan lokasi karena arloji saya akan berhenti di jendela.

String NMEA memasok waktu dalam standar UTC. Konversi ke zona waktu lokal terserah kita. Selama tidak ada yang membuat proposal yang lebih baik, saya menambahkan +1 untuk zona waktu saya (Europe Berlin).

int zona waktu =+1; // Eropa/Berlin (UTC +0100)> NMEA berorientasi UTC 

Sesuaikan zona waktu sesuai keinginan Anda. Variabel jam kemudian digunakan dalam kode untuk output pada layar LCD, bukan GPS.hour - nilai UTC.

// output ke Layar LCD
lcd.setCursor(5,0); // ,0 =baris pertama
int jam =(GPS.jam) + zona waktu; // format GPS.hour UTC ke zona waktu individual Anda
if (jam <10) { lcd.print('0'); }
lcd.print(jam, DES); lcd.print(':');

Di Eropa kami menggunakan "km/h" sebagai ganti knot untuk kecepatan angin. Jadi saya ubah dulu nilainya dari knot ke km/jam menggunakan konstanta, lalu mengelompokkannya.> 1 knot =1,852 Kilometer per jam

kecepatan mengambang =(GPS.speed) * 1,852; // Beralih dari Kecepatan/Simpul> Kecepatan/km/j 

Evaluasi menurut Wikipedia:

if (kecepatan <=1) {lcd.print(" Windstille");}
else if ((kecepatan> 1) &&(kecepatan <=9)) {lcd.print(" leiser Zug");}
else if ((kecepatan> 9) &&(kecepatan <=46)) {lcd.print(" Brise");}
else if ((kecepatan> 46) &&(kecepatan <=56)) {lcd.print(" starker Wind");}
else if ((kecepatan> 56) &&(kecepatan <=74)) {lcd.print(" stuerm. Angin");}
else if ((kecepatan> 74) &&(kecepatan <=83)) {lcd.print(" Sturm");}
else if ((kecepatan> 83) &&(kecepatan <=102)) {lcd.print(" schwerer Sturm");}
else if (kecepatan> 102) {lcd.print(" Orkan");}
else {lcd.print(" ohne Bewertung ");}

Hasilnya ditampilkan pada tampilan sebagai berikut dan tentunya dapat disesuaikan dengan keinginan Anda sendiri:

Saya meninggalkan frekuensi pembaruan pada 2 detik dalam loop. Saya bahkan cenderung mengabaikan detik dan ketinggian demi tampilan 16x2.

Bersenang-senang menjelajahi beragam opsi GPS!

Di Eropa kami juga memiliki evaluasi sinyal radio DCF77 yang tersedia. Namun, ini jauh lebih mahal dan penanganannya dikatakan sangat sensitif.

Kode

  • GPS_SoftwareSerial_Parsing_ilo
GPS_SoftwareSerial_Parsing_iloC/C++
Contoh Adafruits sedikit disesuaikan
// Kode uji untuk modul GPS Adafruit menggunakan driver MTK3329/MTK3339//// Kode ini menunjukkan cara mendengarkan modul GPS dalam interupsi// yang memungkinkan program memiliki lebih banyak 'kebebasan' - cukup urai// ketika kalimat NMEA baru tersedia! Kemudian akses data bila// diinginkan.//// Diuji dan berfungsi baik dengan modul GPS Adafruit Ultimate// menggunakan chipset MTK33x9// ------> http://www.adafruit.com/products/746/ / Ambil satu hari ini di toko elektronik Adafruit// dan bantu dukung perangkat keras &perangkat lunak sumber terbuka! -ada// dimodifikasi 01.02.2020 - Ingo Lohs// Dekoder GPRMC &GPGGA:https://rl.se/gprmc#include  #include LiquidCrystal_I2C lcd(0x3F,20,4); // setel alamat LCD ke 0x27 untuk 16 karakter dan tampilan 2 baris> 0x3F dalam kasus saya untuk tampilan lcd 2004#include #include // Hubungkan pin Daya GPS ke 5V/ / Hubungkan pin GPS Ground ke ground// Hubungkan pin GPS TX (transmit) ke Digital 8// Hubungkan pin GPS RX (receive) ke Digital 7// Anda dapat mengubah nomor pin agar sesuai dengan kabel Anda:SoftwareSerial mySerial( 8, 7);Adafruit_GPS GPS(&mySerial);// Setel GPSECHO ke 'false' untuk mematikan echo data GPS ke Serial console// Setel ke 'true' jika Anda ingin men-debug dan mendengarkan kalimat mentah GPS# tentukan zona waktu GPSECHO trueint =+1; // Eropa/Berlin (UTC +0100)> NMEA berorientasi pada UTCvoid setup(){ lcd.init(); lcd.lampu latar(); // sambungkan pada 115200 sehingga kita dapat membaca GPS dengan cukup cepat dan menggema tanpa menjatuhkan karakter // juga mengeluarkannya Serial.begin(115200); penundaan(5000); Serial.println("Tes dasar library GPS Adafruit!"); // 9600 NMEA adalah baud rate default untuk Adafruit MTK GPS- beberapa menggunakan 4800 GPS.begin(9600); //> dalam kasus saya, saya menggunakan UBLOX 6M:GY-GPS6Mv2 // batalkan komentar pada baris ini untuk mengaktifkan RMC (minimal yang disarankan) dan GGA (memperbaiki data) termasuk ketinggian GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // batalkan komentar pada baris ini untuk mengaktifkan hanya data "minimal yang disarankan" //GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY); // Untuk parsing data, kami tidak menyarankan menggunakan apa pun kecuali RMC saja atau RMC+GGA karena // parser tidak peduli dengan kalimat lain saat ini // Atur kecepatan pembaruan GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // Tingkat pembaruan 1 Hz // Agar kode penguraian berfungsi dengan baik dan memiliki waktu untuk memilah-milah data, dan // mencetaknya, kami tidak menyarankan menggunakan apa pun yang lebih tinggi dari 1 Hz // Meminta pembaruan tentang status antena, komentar keluar untuk diam GPS.sendCommand(PGCMD_ANTENNA); penundaan (1000); // Minta versi firmware mySerial.println(PMTK_Q_RELEASE);}uint32_t timer =millis();void loop() // jalankan berulang-ulang{ char c =GPS.read(); // jika Anda ingin men-debug, ini saat yang tepat untuk melakukannya! if ((c) &&(GPSECHO)) Serial.write(c); // jika sebuah kalimat diterima, kita dapat memeriksa checksum, mengurainya... if (GPS.newNMEAreceived()) { // yang rumit di sini adalah jika kita mencetak kalimat NMEA, atau data // kita berakhir tidak mendengarkan dan menangkap kalimat lain! // jadi berhati-hatilah jika menggunakan OUTPUT_ALLDATA dan mencoba mencetak data //Serial.println(GPS.lastNMEA()); // ini juga menyetel flag newNMEAreceived() ke false if (!GPS.parse(GPS.lastNMEA())) // ini juga menyetel flag newNMEAreceived() ke false return; // kita bisa gagal mengurai sebuah kalimat dalam hal ini kita harus menunggu yang lain } // jika millis() atau timer berputar, kita hanya akan meresetnya if (timer> millis()) timer =millis(); // kira-kira setiap 2 detik atau lebih, cetak statistik saat ini if ​​(millis() - timer> 2000) { timer =millis(); // reset timer Serial.print("\nWaktu:"); if (GPS.jam <10) { Serial.print('0'); } Serial.print(GPS.hour, DEC); Serial.print(':'); if (GPS.menit <10) { Serial.print('0'); } Serial.print(GPS.minute, DEC); Serial.print(':'); if (GPS.detik <10) { Serial.print('0'); } Serial.print(GPS.detik, DEC); Serial.print('.'); if (GPS.milidetik <10) { Serial.print("00"); } else if (GPS.milidetik> 9 &&GPS.milidetik <100) { Serial.print("0"); } Serial.println(GPS.milidetik); Serial.print("Tanggal :"); Serial.print(GPS.day, DEC); Serial.print('/'); Serial.print(GPS.bulan, DES); Serial.print("/20"); Serial.println(GPS.year, DEC); Serial.print("Perbaiki:"); Serial.print((int)GPS.fix); Serial.print("kualitas:"); Serial.println((int)GPS.fixquality); // output ke Layar LCD lcd.setCursor(5,0); // ,0 =baris pertama int jam =(GPS.hour) + zona waktu; // format GPS.hour UTC ke zona waktu pribadi Anda if (jam <10) { lcd.print('0'); } lcd.print(jam, DES); lcd.print(':'); if (GPS.menit <10) { lcd.print('0'); } lcd.print(GPS.minute, DEC); lcd.print(':'); if (GPS.detik <10) { lcd.print('0'); } lcd.print(GPS.detik, DEC); // output ke Layar LCD lcd.setCursor(5,1); // ,0 =baris kedua if (GPS.hari <10) { lcd.print('0'); } lcd.print(GPS.day, DEC); lcd.print('.'); if (GPS.bulan <10) { lcd.print('0'); } lcd.print(GPS.bulan, DES); lcd.print('.'); lcd.print(GPS.year, DEC); if (GPS.fix) { // apakah kita memiliki koneksi satelit? jika ya, kami memiliki lebih banyak nilai:Serial.print("Location:"); Serial.print(GPS.latitude, 4); Serial.print(GPS.lat); Serial.print(", "); Serial.print(GPS.longitude, 4); Serial.println(GPS.lon); Serial.print("Kecepatan (knot):"); Serial.println(GPS.speed); Serial.print("Sudut:"); Serial.println(GPS.angle); Serial.print("Ketinggian :"); Serial.println(GPS.altitude); Serial.print("Satelit:"); Serial.println((int)GPS.satelit); lcd.setCursor(0,2); // ,2 =baris ketiga // 1 Simpul =1.852 Kilometer per jam kecepatan float =(GPS.speed) * 1.852; // Beralih dari Kecepatan/Simpul> Kecepatan/km/j //lcd.print("Kecepatan km/j:"); lcd.print(kecepatan); // Bewertung der Windstärke nach https://de.wikipedia.org/wiki/Windgeschwindigkeit /* Beschreibung - Geschwindigkeit dalam km/j * Windstille - 0-1 * leiser Zug - 2-9 * leichte Brise - 10-19 * schwache Brise - 20-28 * mäßige Brise - 29-37 * frische Brise - 38-46 * Angin kencang - 47-56 * Angin stürmischer - 57-74 * Sturm - 75-83 * schwerer Sturm - 84-102 * Orkan -> 103 */ if (kecepatan <=1) {lcd.print(" Windstille");} else if ((kecepatan> 1) &&(kecepatan <=9)) {lcd.print(" leiser Zug");} else if ((kecepatan> 9) &&(kecepatan <=46)) {lcd.print(" Brise");} else if ((kecepatan> 46) &&(kecepatan <=56)) {lcd.print(" starker Wind ");} else if ((kecepatan> 56) &&(kecepatan <=74)) {lcd.print(" stuerm. Angin");} else if ((kecepatan> 74) &&(kecepatan <=83)) { lcd.print(" Sturm");} else if ((kecepatan> 83) &&(kecepatan <=102)) {lcd.print(" schwerer Sturm");} else if (kecepatan> 102) {lcd.print( " Orkan");} else {lcd.print(" ohne Bewertung");} lcd.setCursor(0,3); // ,3 =baris keempat lcd.print("Hoehe:"); lcd.print(GPS.altitude); } }}

Proses manufaktur

  1. Pengontrol sarung tangan murah DIY dan mobil baling-baling
  2. Sensor DHT11 dengan LED dan Speaker Piezo
  3. GPS Datalogger, Analisis Spasial, dan Azure IoT Hub.
  4. Pencatat Data Suhu dan Kelembaban
  5. Suhu Arduino. Monitor Dan Jam Waktu Nyata Dengan Tampilan 3.2
  6. Jam POV LED Gaya Analog
  7. Selamat Ulang Tahun:Lampu dan Suara
  8. u-blox LEA-6H 02 Modul GPS dengan Arduino dan Python
  9. Otomata Seluler berbasis Arduino dan OLED
  10. Pick Kecepatan Gitar dan Pedal Injak!