Daftar Isi:

Arduino Date/Time Plotting/Logging Menggunakan Millis() dan PfodApp: 11 Langkah
Arduino Date/Time Plotting/Logging Menggunakan Millis() dan PfodApp: 11 Langkah

Video: Arduino Date/Time Plotting/Logging Menggunakan Millis() dan PfodApp: 11 Langkah

Video: Arduino Date/Time Plotting/Logging Menggunakan Millis() dan PfodApp: 11 Langkah
Video: Arduino Data Logger Project - Very Easy 2024, November
Anonim
Arduino Date/Time Plotting/Logging Menggunakan Millis() dan PfodApp
Arduino Date/Time Plotting/Logging Menggunakan Millis() dan PfodApp

Tidak diperlukan pemrograman Arduino atau Android. Modul RTC dan GPS juga didukung. Koreksi otomatis untuk zona waktu, penyimpangan RTC, dan GPS yang hilang detik kabisat

pengantar

Tutorial ini menunjukkan cara menggunakan stempel waktu Arduino millis() Anda untuk memplot data terhadap tanggal dan waktu di ponsel Android Anda menggunakan pfodApp.

Tidak diperlukan pemrograman Arduino atau Android. pfodApp juga mencatat data yang cukup sehingga nanti Anda dapat mereproduksi plot tanggal/waktu dalam spreadsheet.

NO RTC atau modul GPS diperlukan, namun jika proyek Arduino Anda memiliki RTC (Real Time Clock) atau modul GPS mereka juga dapat digunakan. Dalam kasus tersebut, plot pfodApp akan secara otomatis mengoreksi zona waktu, penyimpangan RTC, dan detik kabisat GPS yang hilang. Tidak ada kode Arduino khusus yang diperlukan untuk koreksi ini. Seperti biasa dengan pfodApp, data yang diterima dicatat persis seperti apa adanya, tidak dikoreksi, namun file log juga berisi informasi yang cukup untuk memungkinkan Anda menerapkan koreksi ini sendiri saat Anda mengunduh log ke komputer Anda. Lihat di bawah untuk contoh pasca-pemrosesan ini.

Berbagai macam format sumbu X waktu dan tanggal didukung, yang semuanya sepenuhnya dikendalikan oleh string teks pendek di sketsa Arduino Anda. Tidak diperlukan pemrograman Android.

pfodApp akan terhubung melalui WiFi, Bluetooth Classic, BLE dan SMS. pfodDesigner gratis menghasilkan sketsa Arduino lengkap untuk tanggal/waktu merencanakan/logging untuk terhubung ke berbagai papan. Tidak diperlukan pemrograman Arduino.

Instruksi ini akan menggunakan Adafruit Feather52 sebagai contoh papan Arduino, yang terhubung melalui BLE.

Instruksi ini mencakup tiga kasus:- 1) Proyek mikroprosesor Anda hanya memiliki stempel waktu milidetik – milis()2) Proyek mikroprosesor Anda memiliki Jam Waktu Nyata (RTC) – pfodApp secara otomatis mengoreksi penyimpangan. 3) Proyek mikroprosesor Anda memiliki modul GPS – pfodApp secara otomatis mengoreksi detik kabisat saat terjadi (saat ini 18 detik pada 2018).

Langkah 1: Menggunakan Stempel Waktu Milidetik Arduino, Milis ()

Ada dua bagian untuk menggunakan milidetik untuk tanggal dan waktu. Salah satunya adalah untuk memplot data terhadap waktu yang telah berlalu atau tanggal/waktu dan bagian lainnya membuat ulang tanggal dan waktu dari stempel waktu milidetik data mentah yang dicatat. pfodApp tidak mengubah data mentah yang diterima dari pfodDevice (mikro Arduino). Itu hanya log persis byte yang diterima.

Pertama-tama gunakan pfodDesigner gratis untuk menghasilkan sketsa Arduino untuk mikro Anda yang akan mengirimkan milidetik dan pengukuran data ke pfodApp untuk merencanakan/mencatat. Contoh ini membuat menu untuk papan Adafruit Feather 52 BLE yang bertuliskan A0. Tutorial tentang Adafruit Feather nRF52 LE - Kontrol Kustom dengan pfodApp melalui langkah-langkah pfodDesigner untuk membuat menu untuk Feather nRF52 yang menyertakan tombol Bagan, jadi periksalah untuk lebih jelasnya. Dalam tutorial ini kita hanya akan menambahkan tombol bagan dan menggunakan opsi format sumbu X baru untuk memplot pembacaan A0 terhadap waktu dan tanggal/waktu yang telah berlalu.

Bagian pertama dari tutorial ini akan menggunakan pfodDesigner gratis untuk membuat contoh bagan tanggal/waktu di ponsel Android Anda. Saat Anda puas dengan tampilannya, Anda dapat membuat sketsa Arduino yang akan mereproduksinya saat Anda terhubung dengan pfodApp. Pemrograman Android tidak diperlukan dan karena pfodDesigner menghasilkan sketsa Arduino lengkap untuk berbagai macam papan Arduino, pemrograman Arduino juga tidak diperlukan.

Langkah 2: Menambahkan Bagan ke Menu

Menambahkan Bagan ke Menu
Menambahkan Bagan ke Menu
Menambahkan Bagan ke Menu
Menambahkan Bagan ke Menu
Menambahkan Bagan ke Menu
Menambahkan Bagan ke Menu
Menambahkan Bagan ke Menu
Menambahkan Bagan ke Menu

Unduh aplikasi pfodDesigner dari Google Play, buka dan klik "Mulai Menu baru"

Klik pada "Target Serial" dan kemudian pada tombol "Bluetooth Low Energy" untuk menampilkan daftar 11 papan BLE (gulir ke bawah untuk melihat pilihan lainnya). Pilih pada Adafruit Bluefruit Feather52.

Kembali ke menu Editing dan klik "Edit Prompt" dan atur prompt yang sesuai untuk menu ini, mis. "Feather52" dan teks tebal dan ukuran +7. Warna latar belakang dibiarkan sebagai 'default' Putih

Kembali dan klik "Tambah Item Menu", gulir ke bawah dan pilih "Tombol Bagan" yang membuka layar edit tombol bagan. Anda dapat membuat perubahan apa pun pada tampilan tombol di sini. Dalam hal ini teks tombol diubah menjadi “Plot Tanggal/Waktu A0” dan default lainnya dibiarkan apa adanya.

Ini memberi Anda tombol pada menu yang akan membuka layar grafik.

Langkah 3: Mengedit Sumber Plot dan Label

Mengedit Sumber Plot dan Label
Mengedit Sumber Plot dan Label
Mengedit Sumber Plot dan Label
Mengedit Sumber Plot dan Label
Mengedit Sumber Plot dan Label
Mengedit Sumber Plot dan Label
Mengedit Sumber Plot dan Label
Mengedit Sumber Plot dan Label

Klik tombol “Date/Time plot of A0” untuk membuka layar Editing Plots, di mana Anda dapat mengakses label grafik, format sumbu X, interval data plot dan (dengan menggulir ke bawah) pengaturan plot itu sendiri. Edit Label Bagan menjadi sesuatu yang cocok, mis. “A0 Volt”.

Gulir ke bawah dan untuk Plot 2 dan 3 buka Edit Plot dan klik Sembunyikan Plot untuk menghapusnya dari tampilan grafik.

Kemudian klik “Edit Plot 1” dan atur label plot (mis. A0), unit yAxis (mis. Volt), tampilkan maks 3.6V dan sambungkan ke pin I/O A0.

Gulir kembali ke atas dan klik "Pratinjau Bagan" ke 0 titik data sampel terbaru, pada interval 1 detik, diplot terhadap waktu yang telah berlalu dalam menit: detik.

Untuk semua plot waktu yang telah berlalu, unit nol di depan tidak ditampilkan, jadi dalam plot ini hanya waktu > 1 menit yang menunjukkan menit awal.

Langkah 4: Memilih Format Tanggal/Waktu

Memilih Format Tanggal/Waktu
Memilih Format Tanggal/Waktu
Memilih Format Tanggal/Waktu
Memilih Format Tanggal/Waktu
Memilih Format Tanggal/Waktu
Memilih Format Tanggal/Waktu

Untuk plot waktu yang telah berlalu, unit utama terus meningkat seiring berjalannya waktu. Untuk melihat contohnya, kembali ke layar “Pengeditan Plot” dan tingkatkan interval Data Plot menjadi 15 menit (di bagian bawah layar ini)

Kemudian klik pada Pratinjau Bagan untuk menampilkan data sampel yang sama tetapi sekarang dengan interval 15 menit antar sampel. Seperti yang Anda lihat, bagian menit dari mm:ss terus meningkat.

Sekarang kembali dan klik tombol sumbu-X untuk menampilkan pilihan kecil dari semua kemungkinan format data/waktu sumbu-X (gulir ke bawah untuk melihat lebih banyak)

Di atas adalah pilihan pratinjau bagan menggunakan format sumbu X yang berbeda.

Plot tanggal/waktu yang ditampilkan di sini berada di zona waktu 'lokal'. Ada juga opsi format untuk memplot tanggal/waktu dalam UTC. Untuk satu set lengkap kemungkinan opsi format tanggal/waktu, lihat pfodSpecification.pfd.

Langkah 5: Hasilkan dan Uji Sketsa Arduino

Hasilkan dan Uji Sketsa Arduino
Hasilkan dan Uji Sketsa Arduino
Hasilkan dan Uji Sketsa Arduino
Hasilkan dan Uji Sketsa Arduino

Setelah Anda puas dengan format grafik dan interval data Anda, Anda dapat ke layar "Editing Menu_1" dan gulir ke bawah dan "Generate Code" untuk papan target yang Anda pilih. Berikut adalah contoh sketsa untuk Adafruit Feather52 menggunakan interval data 1 detik dan format waktu berlalu mm:ss, pfodFeather52_timeplot.ino

Di atas adalah plot A0 dari Feather52

Mengubah format ke Hari Kerja jam:menit:detik (~E HH:mm:dd) dan membuat ulang kode (pfodFeather52_dateplot.ino) memberikan plot seperti yang kedua di atas.

Anda dapat mengedit format sumbu X langsung di sketsa Arduino Anda, seperti yang dijelaskan selanjutnya.

Langkah 6: Bagaimana PfodApp Memplot Tanggal/Waktu Dari Millis()?

Ketika pfodApp terhubung, ia mengingat waktu 'lokal' dan UTC dan meminta stempel waktu data plot pfodDevice (papan Arduino) saat ini. Dengan menggunakan informasi ini pfodApp kemudian dapat memplot stempel waktu milidetik sebagai waktu yang telah berlalu, yaitu mengubah milidetik menjadi jam menit detik, dll., atau memplot tanggal dan waktu stempel waktu milidetik mewakili relatif terhadap saat koneksi dibuat dan waktu pfodDevice saat ini diminta.

Melihat sketsa yang dihasilkan Arduino (misalnya pfodFeather52_dateplot.ino), ada tiga bit kecil kode yang menangani sisi Arduino dari plot.

Bagian kode loop() yang menangani {@} permintaan waktu pfodApp saat ini

// menangani {@} request } else if('@'==cmd) { // pfodApp meminta waktu 'saat ini' plot_mSOffset = milis(); // menangkap mili saat ini sebagai offset rawdata timestamps parser.print(F("{@`0}")); // mengembalikan `0 sebagai milidetik data mentah 'saat ini'

Anda bisa saja mengembalikan nilai milis() saat ini, tetapi milis() membungkus kembali ke 0 setiap 49,7 hari, yang akan membuat plot melompat mundur. Jadi, alih-alih kode tersebut mengingat nilai milis() saat ini saat permintaan {@} dibuat, dan mengembalikan {@`0} yaitu stempel waktu milidetik saat ini dari nol. Kemudian saat mengirim poin data mentah yang digunakan sketsa

plot_1_var = analogRead(A0); // membaca input ke plot // plot_2_var plot Tersembunyi sehingga tidak ada data yang ditetapkan di sini // plot_3_var plot Tersembunyi sehingga tidak ada data yang ditetapkan di sini // mengirim data plot dalam format CSV parser.print(millis()-plot_mSOffset);// waktu dalam milidetik ….

sehingga stempel waktu milidetik yang dikirim dengan data dimulai dari 0 dan meningkat hingga 49,7 hari. Jika Anda tetap terhubung terus menerus selama 49,7 hari maka Anda akan melihat plotnya melompat mundur ~50 hari. Memutuskan dan menyambungkan kembali setiap 49,7 hari akan menghindari hal ini.

Bagian ketiga dari plot tanggal/waktu adalah pesan plot.

} else if('A'==cmd) { // pengguna menekan -- 'Plot Tanggal/Waktu A0' // di Menu utama Menu_1 // mengembalikan pesan plot. parser.print(F("{=A0 Volts~E HH:mm:dd|date|A0~~~Volt||}"));

Saat pengguna menekan tombol “Date/Time plot of A0”, pfodApp mengirimkan cmd {A} ke pfodDevice dan pfodDevice merespons dengan pesan plot, {=…{=A0 Volts~E HH:mm:ss|date |A0~~~Volt||}yang berisi format sumbu X E HH:mm:ss

Format Java SimpleDateFormat dapat diterima di sini. pfodApp Data Logging and Plotting dan pfodSpecification.pdf memiliki detail lebih lanjut tentang pesan plot.

Langkah 7: Mereproduksi Plot Tanggal/Waktu di Komputer Anda

Mereproduksi Plot Tanggal/Waktu di Komputer Anda
Mereproduksi Plot Tanggal/Waktu di Komputer Anda
Mereproduksi Plot Tanggal/Waktu di Komputer Anda
Mereproduksi Plot Tanggal/Waktu di Komputer Anda
Mereproduksi Plot Tanggal/Waktu di Komputer Anda
Mereproduksi Plot Tanggal/Waktu di Komputer Anda

Secara default, pfodApp mencatat semua data mentah yang masuk ke file log di ponsel Anda, kecuali Anda telah menonaktifkan pencatatan ini di layar edit koneksi, lihat pfodAppForAndroidGettingStarted.pdf

Saat Anda mengedit pfodApp, pesan singkat ditampilkan dengan lokasi dan nama file log, mis. /pfodAppRawData/pfod_bluefruit52.txt File itu dalam format CSV, dipisahkan koma, dan setelah mentransfernya ke komputer Anda (lihat pfodAppForAndroidGettingStarted.pdf untuk opsi transfer), Anda dapat membukanya di spreadsheet untuk memplot data.

Berikut adalah beberapa baris pertama dari file log.

// pfodApp V3.0.360, waktu setempat, UTC, mS per hari, pfod bluefruit52 waktu sekarang(mS), pfod bluefruit52 waktu sekarang, // terhubung pada, 2019/04/20 11:32:50.238, 2019/04/20 01:32:50.238, 86400000, 0, 366, 0.25,, 1366, 0.29,, 2366, 0.31,, 3366, 0.33,, 4366, 0.33,, Di atas, Anda dapat melihat waktu 'lokal' dan UTC yang pfodApp terhubung ke Feather52 dan waktu saat ini dalam mS yang dilaporkan Feather52 melalui respons {@..}. Kolom terakhir kosong, karena tidak ada RTC atau GPS sehingga tidak ada waktu saat ini dalam waktu yyyy/MM/dd yang dilaporkan oleh Feather52.

Untuk memplot data terhadap waktu yang telah berlalu, kurangi waktu saat ini (mS) dari stempel waktu milidetik, lalu bagi dengan nilai mS per hari. Berikut adalah spreadsheet dengan rumus ditambahkan dan hasilnya diplot. Spreadsheet, di bawah, (pfod_bluefruit52.xls) adalah spreadsheet OpenOffice yang disimpan dalam format Excel.

Di OpenOffice, plot adalah plot sebar dan sumbu x plot diformat dalam HH:MM:SS Catatan: format tanggal/waktu spreadsheet TIDAK sama dengan format plot yang digunakan oleh pfodApp. Misalnya di pfodApp, MM adalah bulan dan mm adalah menit.

Untuk memplot tanggal dan waktu, Anda hanya perlu menambahkan waktu koneksi ke waktu dan replot spreadsheet. (pfod_bluefruit52_date.xls)

Catatan: Waktu lokal dan UTC diimpor sebagai teks di spreadsheet saya, jadi saya harus menghapus awalan ' sebelum menggunakannya dalam rumus.

Langkah 8: Bagaimana Menghindari Batas 49.7day Millis() dan Mengapa Anda Tidak Harus

Seperti disebutkan di atas dalam Bagaimana pfodApp memplot Tanggal/Waktu dari milis()?, jika Anda tetap terhubung terus menerus selama lebih dari 49,7 hari, stempel waktu milidetik akan kembali ke nol. Beberapa baris kode dapat menghindari hal ini tetapi tidak disarankan.

Pertama bagaimana menghindari lilitan. Tambahkan variabel int unsigned lain untuk melacak berapa kali cap waktu membungkus dan mencetak hasil gabungan dalam HEX.

uint_t mSwrapCount = 0;uint32_t lastTimeStamp = 0;

… plot_1_var = analogRead(A0); // membaca input ke plot // plot_2_var plot Tersembunyi sehingga tidak ada data yang ditetapkan di sini // plot_3_var plot Tersembunyi sehingga tidak ada data yang ditetapkan di sini // mengirim data plot dalam format CSV uint32_t timeStamp = millis()-plot_mSoffset; if (timeStamp < lastTimeStamp) { // timeStamp dibungkus kembali ke 0 mSwrapCount++; // tambahkan satu untuk menghitung } lastTimeStamp = timeStamp; parser.print("0x"); parser.print(msWrapCount, HEX); parser.print(timeStamp, HEX);// waktu dalam milidetik dalam HEX ….

Saat mengembalikan respons {@.., hapus juga mSwrapCount.

// menangani {@} request } else if('@'==cmd) { // pfodApp meminta waktu 'saat ini' plot_mSOffset = milis(); // menangkap mili saat ini sebagai offset stempel waktu rawdata mSwrapCount = 0; // hapus jumlah bungkus. parser.print(F("{@`0}")); // kembalikan `0 sebagai milidetik data mentah 'saat ini'

Stempel waktu sekarang akan memberikan nilai 'benar' untuk 40,7 hari ke depan * 65536 ~= 7308 tahun.

pfodApp akan secara otomatis mengonversi cap waktu hex untuk merencanakan dan mencatatnya persis seperti yang diterima, yaitu dalam hex. Dalam spreadsheet (OpenOffice) Anda menggunakan rumus ini untuk mengonversi string hex, di A2, ke mS (di mana A1 adalah sel kosong apa pun) =HEX2DEC(REPLACE(A2;1;2;A1))

Mengapa Anda tidak ingin melakukan ini?

Seperti yang ditunjukkan di atas, mudah untuk memperpanjang stempel waktu mS hingga lebih dari 50 hari. Namun Anda mungkin tidak ingin melakukan itu karena mereka menjadi semakin tidak akurat. Kristal 16Mhz khas yang digunakan untuk membuat milis() menghasilkan mikro memiliki akurasi ~50ppm (bagian per juta). Ini berarti bahwa setelah 49,7 hari, stempel waktu milidetik dapat keluar 3 menit dan mengabaikan pengaruh suhu pada akurasi kristal.

Selama periode koneksi singkat, ketidakakuratan ini tidak menjadi masalah karena respons {@.. menyinkronkan ulang stempel waktu milidetik ke tanggal/waktu seluler pada setiap koneksi ulang. Namun jika Anda ingin tetap terhubung untuk jangka waktu yang lama (hari) dan terus-menerus mencatat data, maka Anda harus menggunakan sesuatu yang lebih akurat daripada milis bawaan (), seperti modul RTC atau GPS.

Langkah 9: Menggunakan RTC (Real Time Clock)

Menggunakan RTC (Jam Waktu Nyata)
Menggunakan RTC (Jam Waktu Nyata)
Menggunakan RTC (Jam Waktu Nyata)
Menggunakan RTC (Jam Waktu Nyata)

Ada sejumlah modul RTC yang tersedia, salah satu yang lebih akurat adalah DS3231 mis. Modul DS3231 Adafruit. Akurasi yang dinyatakan adalah +/-2ppm di atas 0 hingga 40C. yaitu ~+/-5 detik/bulan.

Jika Anda ingin memplot data yang memiliki cap waktu tanggal/waktu, mis. 2019/04/19 20:4:34, maka Anda perlu mengubah {@ response untuk mengembalikan tanggal/waktu saat ini, mis. {@`0~2019/4/19 3:33:5}. Berikut adalah beberapa contoh perubahan kode untuk diterapkan pada sketsa yang dihasilkan pfodDesigner untuk menggunakan modul RTC, dengan asumsi Anda menggunakan pustaka RTClib dan telah menambahkan kode untuk menginisialisasi modul RTC.

// menangani {@} request } else if('@'==cmd) { // pfodApp meminta waktu 'saat ini' plot_mSOffset = milis(); // menangkap mili saat ini sebagai offset rawdata timestamps parser.print(F("{@`0"}); // mengembalikan `0 sebagai parser milidetik data mentah 'saat ini'.print('~'); // memulai string date/time DateTime now = rtc.now() sendDateTime(&now); // kirim yyyy/M/d/ H:m:s ke parser.print, berikan alamat & sebagai argumen parser.print('}'); // akhir dari {@ tanggapan misalnya {@`0~2019/4/19 3:33:5}….

// kirim tanggal waktu ke parser printvoid sendDateTime(DateTime* dt) { parser.print(dt->year(), DEC); parser.print('/'); parser.print(dt->bulan(), DEC); parser.print('/'); parser.print(dt->hari(), DES); parser.print(' '); parser.print(dt->jam(), DEC); parser.print(':'); parser.print(dt->menit(), DEC); parser.print(':'); parser.print(dt->kedua(), DEC); }

void sendData() { if (plotDataTimer.isFinished()) { plotDataTimer.repeat(); // restart timer data plot, tanpa drift // tetapkan nilai ke variabel plot dari variabel loop Anda atau baca input ADC plot_1_var = analogRead(A0); // membaca input ke plot // plot_2_var plot Tersembunyi sehingga tidak ada data yang ditetapkan di sini // plot_3_var plot Tersembunyi sehingga tidak ada data yang ditetapkan di sini // kirim data plot dalam format CSV DateTime now = rtc.now(); sendDateTime(&sekarang); // kirim yyyy/M/d/ H:m:s ke parser.print, berikan alamat & sebagai arg. parser.print(', '); parser.print(((float)(plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print(', '); // Plot 2 disembunyikan. Tidak ada data yang dikirim. parser.print(', '); // Plot 3 disembunyikan. Tidak ada data yang dikirim. parser.println(); // akhir rekaman data CSV } }

Bagian ~2019/4/19 3:33:5 dari {@ respons memungkinkan pfodApp mengetahui apa yang menurut pfodDevice adalah tanggal dan waktu saat ini. Sketsa Anda kemudian dapat mengirim data dengan stempel waktu yMd Hms dan pfodApp akan memplotnya sebagai waktu yang telah berlalu dari waktu koneksi ATAU sebagai tanggal dan waktu, tergantung pada format sumbu X yang Anda tentukan.

Saat memplot tanggal dan waktu, rutinitas plot pfodApp mengoreksi 'pergeseran' apa pun di RTC dengan membandingkan waktu saat ini yang dilaporkan pfodDevice dengan waktu ponsel saat ini. Koreksi ini juga menangani RTC yang disetel ke zona waktu yang berbeda dari zona waktu lokal ponsel Anda. milis() stempel waktu terus bekerja seperti pada Menggunakan stempel waktu milidetik Arduino, Langkah 5 di atas.

Berikut adalah contoh spreadsheet suhu ruangan selama periode 8 hari, Office_Temp.xls Ketika file log diimpor, kolom pertama ditandai sebagai YMD untuk mengonversi teks menjadi tanggal/waktu. Anda masih perlu menghapus entri waktu terkini ' dari waktu lokal, UTC, dan Office Temp agar spreadsheet menafsirkannya sebagai tanggal dan waktu.

Untuk mendapatkan plot yang sama yang ditunjukkan pfodApp, Anda perlu menghitung “Tanggal/Waktu yang Dikoreksi”. Dalam hal ini waktu RTC adalah 2 detik di belakang waktu lokal ponsel, sehingga untuk setiap cap waktu RTC ditambahkan (waktu lokal – Waktu Office Temp saat ini) untuk mendapatkan waktu lokal yang sebenarnya.

Untuk plot waktu yang telah berlalu, buat kolom baru yang berisi (cap tanggal/waktu – waktu Office Time saat ini) dan gunakan itu sebagai sumbu X dalam bagan (Office_TempElapsed.xls) Sebenarnya dalam kasus ini, pfodApp menghasilkan bagan waktu berlalu yang lebih bagus dalam hari jam:menit:dtk.

Langkah 10: Menggunakan Modul GPS

Menggunakan modul GPS mirip dengan menggunakan modul RTC, kecuali bahwa modul GPS memiliki milidetik yang tersedia, tahun dimulai dari 2000 dan waktu tidak menggunakan detik kabisat UTC (lihat https://tycho.usno.navy.mil/leapsec.html) Tanggal dan waktu GPS saat ini 18 detik lebih cepat dari UTC, pada Januari 2018.

Pustaka GPS Adafruit untuk Adafruit Ultimate GPS, tidak seperti RTClib, tidak menambahkan offset 2000 tahun ke tahun GPS, sehingga perlu ditambahkan saat Anda mengirim cap waktu tanggal dan waktu. Juga meskipun perpustakaan GPS memasok milidetik yang memiliki akurasi jangka panjang yang sangat baik, mereka tidak terlalu tepat. Pembaruan waktu GPS hanya sekali setiap 100mS dan kemudian ada penundaan ekstra menerima data serial pada 9600 baud lambat dan penundaan lain dalam menguraikannya. Semuanya menambah presisi milidetik saat pembacaan data stempel waktu.

Berikut adalah beberapa contoh perubahan kode untuk diterapkan pada sketsa yang dihasilkan pfodDesigner untuk menggunakan modul GPS, dengan asumsi Anda menggunakan perpustakaan GPS Adafruit dan telah menambahkan kode untuk menerima dan mengurai pesan ke dalam objek GPS.

// menangani {@} request } else if('@'==cmd) { // pfodApp meminta waktu 'saat ini' plot_mSOffset = milis(); // menangkap mili saat ini sebagai offset rawdata timestamps parser.print(F("{@`0"}); // mengembalikan `0 sebagai 'saat ini' raw data milidetik parser.print('~'); // memulai string date/time sendDateTime(&GPS); // kirim yyyy/M/d/ H:m:s ke parser.print, berikan alamat & sebagai argumen parser.print('}'); // akhir {@ respons mis {@`0~2019/4/19 3:33:5}….

// kirim waktu tanggal ke parser printvoid sendDateTime(Adafruit_GPS* gps) { parser.print(F("20"); // 20.. year parser.print(gps->year, DEC); parser.print('/ '); parser.print(gps->bulan, DEC); parser.print('/'); parser.print(gps->hari, DEC); parser.print(' '); parser.print(gps- >jam, DEC); parser.print(':'); parser.print(gps->minute, DEC); parser.print(':'); parser.print(gps->second, DEC); // parser.print('.'); jika mengirim milidetik // jika Anda ingin mengirim mS, Anda perlu mengisi nilai gps->milidetik dengan nol di depan // yaitu 3 perlu diisi ke 003 }

void sendData() { if (plotDataTimer.isFinished()) { plotDataTimer.repeat(); // restart timer data plot, tanpa drift // tetapkan nilai ke variabel plot dari variabel loop Anda atau baca input ADC plot_1_var = analogRead(A0); // membaca input ke plot // plot_2_var plot Tersembunyi sehingga tidak ada data yang ditetapkan di sini // plot_3_var plot Tersembunyi sehingga tidak ada data yang ditetapkan di sini // kirim data plot dalam format CSV sendDateTime(&GPS); // kirim yyyy/M/d/ H:m:s ke parser.print, berikan alamat & sebagai arg. parser.print(', '); parser.print(((float)(plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print(', '); // Plot 2 disembunyikan. Tidak ada data yang dikirim. parser.print(', '); // Plot 3 disembunyikan. Tidak ada data yang dikirim. parser.println(); // akhir rekaman data CSV } }

Saat memplot tanggal dan waktu, pfodApp secara otomatis mengoreksi detik kabisat. Pada Jan 2018, waktu GPS 18 detik lebih cepat dari UTC. pfodApp mengoreksinya dengan membandingkan tanggal/waktu yang dikembalikan oleh GPS pada koneksi, melalui {@ respons, dengan tanggal dan waktu UTC seluler. Membuat plot dalam spreadsheet dari file log pfodApp sama seperti untuk modul RTC di atas. Menambahkan (waktu lokal – Waktu Office Temp saat ini) ke stempel waktu GPS mengoreksi detik kabisat.

milis() stempel waktu terus bekerja seperti pada Menggunakan stempel waktu milidetik Arduino, Langkah 5 di atas.

Langkah 11: Kesimpulan

Menggunakan pfodApp di ponsel Android Anda memungkinkan Anda memplot data berdasarkan tanggal dan waktu atau waktu yang telah berlalu, hanya menggunakan fungsi milis() Arduino. Dengan menggunakan file log pfodApp, Anda dapat membuat ulang plot tanggal/waktu ini dalam spreadsheet. Jika proyek Arduino Anda memiliki modul RTC, Anda dapat mencatat dan memplot tanggal dan stempel waktu RTC, secara otomatis mengoreksi 'melayang' RTC. Jika proyek Arduino Anda memiliki modul GPS, Anda dapat mencatat dan memplot cap waktu yang sangat akurat dan pfodApp akan secara otomatis memperbaiki detik kabisat GPS yang hilang.

Dalam semua kasus, data mentah dari proyek Arduino Anda dicatat persis seperti yang diterima, tidak dikoreksi. Namun file log pfodApp menyertakan data tambahan untuk memungkinkan Anda membuat ulang koreksi ini dalam spreadsheet dari file log yang diunduh.

Tidak diperlukan pengkodean Android. Format plot semuanya ditentukan oleh string teks kecil di sketsa Arduino Anda. pfodDesigner gratis menghasilkan pencatatan data Arduino lengkap dan sketsa plot untuk berbagai papan Arduino yang terhubung melalui WiFi, Bluetooth Klasik, BLE, dan SMS

Direkomendasikan: