İçindekiler:
- Adım 1: Arduino Milisaniye Zaman Damgalarını Kullanma, Millis()
- Adım 2: Menüye Grafik Ekleme
- Adım 3: Grafik Kaynağını ve Etiketleri Düzenleme
- Adım 4: Tarih/Saat Formatını Seçme
- Adım 5: Arduino Sketch'i Oluşturun ve Test Edin
- Adım 6: PfodApp Tarih/Saati Millis()'ten Nasıl Çiziyor?
- 7. Adım: Bilgisayarınızda Tarih/Saat Grafiklerini Yeniden Oluşturma
- 8. Adım: 49.7 günlük Millis() Sınırından Nasıl Kaçınılır ve Neden Olmamalısınız?
- 9. Adım: Bir RTC Kullanma (Gerçek Zamanlı Saat)
- Adım 10: Bir GPS Modülü Kullanma
- Adım 11: Sonuç
Video: Millis() ve PfodApp Kullanarak Arduino Tarih/Saat Çizme/Logging: 11 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Arduino veya Android programlama gerekmez. RTC ve GPS modülleri de desteklenir. Zaman dilimleri, RTC kayması ve GPS eksik artık saniyeler için otomatik düzeltme
Tanıtım
Bu öğretici, pfodApp kullanarak Android mobil cihazınızda tarih ve saate göre verileri çizmek için Arduino millis() zaman damgalarınızı nasıl kullanacağınızı gösterir.
Arduino veya Android programlama gerekmez. pfodApp ayrıca, daha sonra bir elektronik tabloda tarih/saat grafiklerini yeniden oluşturabilmeniz için yeterli veriyi günlüğe kaydeder.
RTC veya GPS modülüne gerek yoktur, ancak Arduino projenizde bir RTC (Gerçek Zamanlı Saat) veya bir GPS modülü varsa bunlar da kullanılabilir. Bu durumlarda, pfodApp grafikleri saat dilimi, RTC kayması ve GPS'in kayıp artık saniyelerini otomatik olarak düzeltecektir. Bu düzeltmeler için özel bir Arduino kodu gerekmez. pfodApp ile her zaman olduğu gibi, alınan veriler tam olarak olduğu gibi, düzeltilmeden kaydedilir, ancak günlük dosyası ayrıca günlükleri bilgisayarınıza indirirken bu düzeltmeleri kendiniz uygulamanıza izin vermek için yeterli bilgiyi içerir. Bu son işleme örnekleri için aşağıya bakın.
Hepsi Arduino taslağınızdaki kısa metin dizeleri tarafından tamamen kontrol edilen çok çeşitli saat ve tarih X ekseni biçimlendirmesi desteklenir. Android programlama gerekmez.
pfodApp WiFi, Bluetooth Classic, BLE ve SMS yoluyla bağlanacaktır. Ücretsiz pfodDesigner, çok çeşitli panolara bağlanmak için tarih/saat çizimi/kaydetme için eksiksiz Arduino eskizleri oluşturur. Arduino programlamaya gerek yoktur.
Bu talimat, BLE aracılığıyla bağlanan örnek Arduino kartı olarak bir Adafruit Feather52 kullanacaktır.
Bu talimat, üç durumu kapsar:- 1) Mikroişlemci projenizin yalnızca milisaniyelik zaman damgaları vardır – millis()2) Mikroişlemci projenizin Gerçek Zamanlı Saati (RTC) vardır – pfodApp sapmayı otomatik olarak düzeltir. 3) Mikroişlemci projenizin bir GPS modülü vardır - pfodApp, artık saniyeleri oluştukça otomatik olarak düzeltir (şu anda 2018'de 18 saniye).
Adım 1: Arduino Milisaniye Zaman Damgalarını Kullanma, Millis()
Tarih ve saat için milisaniye kullanmanın iki bölümü vardır. Biri, verileri geçen zamana veya tarih/saate göre çizmek içindir ve diğer kısım, günlüğe kaydedilen ham veri milisaniye zaman damgalarından tarih ve saati yeniden oluşturmaktır. pfodApp, pfodDevice'den (Arduino mikro) alınan ham verileri değiştirmez. Sadece alınan baytları tam olarak günlüğe kaydeder.
İlk olarak, mikro için bir Arduino taslağı oluşturmak için ücretsiz pfodDesigner'ı kullanın; bu, milisaniyeleri ve veri ölçümlerini çizim/kayıt için pfodApp'a gönderecektir. Bu örnek, A0 yazan Adafruit Feather 52 BLE panosu için bir menü oluşturur. Adafruit Feather nRF52 LE - pfodApp ile Özel Kontroller ile ilgili eğitim, Feather nRF52 için bir Grafik düğmesi içeren bir menü oluşturmak üzere pfodDesigner adımlarından geçer, bu yüzden daha fazla ayrıntı için kontrol edin. Bu eğitimde sadece bir grafik düğmesi ekleyeceğiz ve geçen zaman ve tarih/saat karşısında A0 okumalarını çizmek için yeni X ekseni format seçeneklerini kullanacağız.
Bu öğreticinin ilk kısmı, Android cep telefonunuzda örnek bir tarih/saat çizelgesi oluşturmak için ücretsiz pfodDesigner'ı kullanacak. Ekrandan memnun kaldığınızda, pfodApp ile bağlandığınızda bunu yeniden üretecek Arduino taslağını oluşturabilirsiniz. Android Programlaması gerekmez ve pfodDesigner, çok çeşitli Arduino kartları için eksiksiz Arduino çizimleri oluşturduğundan, Arduino programlaması da gerekmez.
Adım 2: Menüye Grafik Ekleme
Google Play'den pfodDesigner uygulamasını indirin, açın ve “Yeni Menüyü Başlat”a tıklayın
Bazı 11 BLE kartının listesini görüntülemek için “Hedef Seri” ve ardından “Bluetooth Düşük Enerji” düğmesine tıklayın (diğer seçenekleri görmek için aşağı kaydırın). Adafruit Bluefruit Feather52'yi seçin.
Düzenleme menüsüne geri dönün ve "İstemi Düzenle"ye tıklayın ve bu menü için uygun bir komut istemi ayarlayın, örn. “Feather52” ve metin kalın ve +7 boyutunda. Arka plan rengi 'varsayılan' Beyaz olarak bırakıldı
Geri dönün ve “Menü Öğesi Ekle”ye tıklayın, aşağı kaydırın ve grafik düğmesi düzenleme ekranını açan “Grafik Düğmesi”ni seçin. Burada düğmenin görünümünde herhangi bir değişiklik yapabilirsiniz. Bu durumda butonun metni “A0'ın Tarih/Saat grafiği” olarak değiştirildi ve diğer varsayılanlar olduğu gibi bırakıldı.
Bu size menüde grafik ekranını açacak bir düğme verir.
Adım 3: Grafik Kaynağını ve Etiketleri Düzenleme
Grafik etiketine, X ekseni formatına, çizim veri aralığına ve (aşağı kaydırarak) çizim ayarlarına erişebileceğiniz Editing Plots ekranını açmak için “A0 Tarih/Saat grafiği” düğmesine tıklayın. Grafik Etiketini uygun bir şeye düzenleyin, örn. "A0 Volt".
Aşağı kaydırın ve Grafik 2 ve 3 için Plot Düzenle'yi açın ve grafik ekranından kaldırmak için Plot'u Gizle'yi tıklayın.
Ardından “Edit Plot 1”e tıklayın ve bir çizim etiketi (örn. A0), yAxis birimleri (örn. Volt) ayarlayın, maksimum 3.6V görüntüleyin ve I/O pin A0'a bağlayın.
Geriye gidin ve 1 saniye aralıklarla, geçen süreye göre dakika:sn olarak çizilmiş en son 0 örnek veri noktasına "Grafik Önizleme"ye tıklayın.
Tüm geçen zaman çizelgeleri için sıfır birimlerin başında görüntülenmez, bu nedenle bu çizimde yalnızca > 1dk olan sürelerin başında dakikalar gösterilir.
Adım 4: Tarih/Saat Formatını Seçme
Geçen zaman grafikleri için, önde gelen birim zaman geçtikçe artmaya devam ediyor. Bunun bir örneğini görmek için “Editing Plots” ekranına geri dönün ve Plot Data aralığını 15 dakikaya çıkarın (bu ekranın alt kısmı)
Ardından, aynı örnek verilerini göstermek için Grafik Önizleme'ye tıklayın, ancak şimdi örnekler arasında 15 dakikalık aralıklarla. Gördüğünüz gibi mm:ss'nin dakika kısmı artmaya devam ediyor.
Şimdi geri dönün ve olası tüm X ekseni veri/zaman formatlarının küçük bir seçimini göstermek için X ekseni düğmesine tıklayın (daha fazlası için aşağı kaydırın)
Yukarıda, farklı X ekseni formatlarını kullanan bir dizi grafik önizlemesi bulunmaktadır.
Burada gösterilen tarih/saat grafikleri 'yerel' saat dilimindedir. UTC'de tarih/saati çizmek için format seçenekleri de vardır. Tüm olası tarih/saat biçimi seçenekleri için pfodSpecification.pfd'ye bakın.
Adım 5: Arduino Sketch'i Oluşturun ve Test Edin
Grafiğinizin formatından ve veri aralığından memnun kaldığınızda, “Düzenleme Menüsü_1” ekranına giderek aşağı kaydırıp seçtiğiniz hedef tahtası için “Kod Oluştur” yapabilirsiniz. Adafruit Feather52 için 1sn veri aralıkları ve mm:ss geçen zaman formatı kullanan örnek bir çizim, pfodFeather52_timeplot.ino
Yukarıda Feather52'den bir A0 grafiği var.
Formatı Hafta içi sa:dakika:saniye (~E HH:dd:ss) olarak değiştirmek ve kodu yeniden oluşturmak (pfodFeather52_dateplot.ino) yukarıdaki gibi bir çizim verir.
X ekseni formatını, aşağıda açıklandığı gibi doğrudan Arduino çiziminizde düzenleyebilirsiniz.
Adım 6: PfodApp Tarih/Saati Millis()'ten Nasıl Çiziyor?
pfodApp bağlandığında, 'yerel' ve UTC zamanını hatırlar ve pfodDevice'in (Arduino kartının) mevcut çizim verisi zaman damgalarını ister. Bu bilgiyi kullanarak pfodApp daha sonra milisaniye zaman damgalarını geçen süre, yani milisaniyeyi saat dakika saniyeye dönüştürme vb. olarak çizebilir veya milisaniye zaman damgalarının bağlantı kurulduğu ve pfodDevice'in geçerli saatinin talep edildiği zamana göre temsil ettiği tarih ve saati çizebilir.
Arduino tarafından oluşturulan taslağa bakıldığında (örneğin, pfodFeather52_dateplot.ino), arazilerin Arduino tarafını işleyen üç küçük kod parçası vardır.
pfodApp'ın {@} geçerli zaman isteğini işleyen loop() kod bölümü
// {@} isteği işle } else if('@'==cmd) { // pfodApp istenen 'geçerli' zaman plot_mSOffset = millis(); // geçerli milisleri ofset ham veri zaman damgaları olarak yakala parser.print(F("{@`0}")); // '0'ı 'geçerli' ham veri milisaniyesi olarak döndür
Sadece millis() öğesinin geçerli değerini döndürebilirsiniz, ancak millis() her 49.7 günde bir 0'a geri döner, bu da grafiğin geriye sıçramasına neden olur. Bunun yerine kod, {@} isteği yapıldığında geçerli millis() değerini hatırlar ve {@`0} yani geçerli bir milisaniye zaman damgasını sıfır olarak döndürür. Ardından, ham veri noktalarını gönderirken çizim kullanır
plot_1_var = analogRead(A0); // çizim için girdiyi oku // plot_2_var plot Gizlidir, bu yüzden buraya veri atanmaz // plot_3_var plot Gizlidir, bu yüzden buraya veri atanmaz // çizim verilerini CSV formatında gönder parser.print(millis()-plot_mSOffset);// milisaniye cinsinden süre ….
böylece verilerle birlikte gönderilen milisaniye zaman damgası 0'dan başlar ve 49.7 güne kadar yükselir. 49.7 gün boyunca sürekli olarak bağlı kalırsanız, arsanın ~ 50 gün geriye gittiğini göreceksiniz. 49,7 günde bir bağlantının kesilmesi ve yeniden bağlanması bunu önler.
Tarih/saat grafiğinin üçüncü kısmı, çizim mesajıdır.
} else if('A'==cmd) { // basılan kullanıcı -- 'A0'ın Tarih/Saat grafiği' // Menu_1 ana Menüsünde // çizime geri dön msj. parser.print(F("{=A0 Volt~E SS:dd:ss|tarih|A0~~~Volt||}"));
Kullanıcı "A0'ın Tarih/Saat grafiği" düğmesine bastığında, pfodApp {A} cmd'sini pfodDevice'a gönderir ve pfodDevice, çizim mesajıyla yanıt verir, {=…{=A0 Volts~E SS:dd:ss|date |A0~~~Volt||}X ekseni biçimini içeren E HH:dd:ss
Java SimpleDateFormat biçimleri burada kabul edilebilir. pfodApp Data Logging and Plotting ve pfodSpecification.pdf, çizim mesajı hakkında daha fazla ayrıntıya sahiptir.
7. Adım: Bilgisayarınızda Tarih/Saat Grafiklerini Yeniden Oluşturma
Varsayılan olarak, pfodApp gelen tüm ham verileri cep telefonunuzdaki bir günlük dosyasına kaydeder, bu kaydı bağlantı düzenleme ekranında devre dışı bırakmadıysanız, bkz. pfodAppForAndroidGettingStarted.pdf
pfodApp'i düzenlediğinizde, günlük dosyasının konumunu ve adını içeren kısa bir mesaj görüntülenir, örn. /pfodAppRawData/pfod_bluefruit52.txt Bu dosya CSV formatında, virgülle ayrılmış ve bilgisayarınıza aktardıktan sonra (aktarım seçenekleri için pfodAppForAndroidGettingStarted.pdf'ye bakın), verileri çizmek için bir elektronik tabloda açabilirsiniz.
İşte bir günlük dosyasının ilk birkaç satırı.
// pfodApp V3.0.360, yerel saat, UTC, günlük mS, pfod bluefruit52 geçerli saat(mS), pfod bluefruit52 geçerli saat, // bağlı, 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,,
Yukarıda, pfodApp'ın Feather52'ye bağlandığı 'yerel' ve UTC saatini ve Feather52'nin {@..} yanıtı aracılığıyla bildirdiği geçerli saati mS cinsinden görebilirsiniz. Son sütun boştur, çünkü RTC veya GPS yoktur ve bu nedenle Feather52 tarafından yyyy/AA/gg zamanında herhangi bir geçerli saat bildirilmemiştir.
Verileri geçen zamana göre çizmek için, milisaniye zaman damgasından geçerli saati (mS) çıkarın ve ardından gün başına mS değerine bölün. İşte formülün eklendiği ve sonucun çizildiği elektronik tablo. Aşağıdaki elektronik tablo (pfod_bluefruit52.xls), Excel biçiminde kaydedilmiş bir OpenOffice elektronik tablosudur.
OpenOffice'te çizim bir dağılım grafiğidir ve grafiğin x ekseni SS:DD:SS olarak biçimlendirilmiştir Not: elektronik tablo tarih/saat biçimleri, pfodApp tarafından kullanılan çizim biçimleriyle aynı DEĞİLDİR. Örneğin pfodApp'ta MM aylardır ve mm dakikadır.
Tarih ve saate göre çizim yapmak için, yalnızca bağlantı süresini elektronik tablo saatine eklemeniz ve yeniden planlamanız gerekir. (pfod_bluefruit52_date.xls)
Not: Yerel saat ve UTC, e-tablomda metin olarak içe aktarıldı, bu yüzden bir formülde kullanmadan önce baştaki ' işaretini kaldırmam gerekiyordu.
8. Adım: 49.7 günlük Millis() Sınırından Nasıl Kaçınılır ve Neden Olmamalısınız?
Yukarıda pfodApp Tarih/Saati millis()'ten nasıl çizer? bölümünde belirtildiği gibi, sürekli olarak 49.7 günden daha uzun bir süre bağlı kalırsanız, milisaniye zaman damgaları sıfıra döner. Birkaç satır kod bunu önleyebilir, ancak önerilmez.
İlk önce etrafı sarmaktan nasıl kaçınılır. Zaman damgalarının kaç kez sarıldığını takip etmek ve birleştirilmiş sonucu HEX'te yazdırmak için başka bir imzasız int değişkeni ekleyin.
uint_t mSwrapCount = 0;uint32_t lastTimeStamp = 0;
… plot_1_var = analogRead(A0); // çizim için girdiyi oku // plot_2_var plot Gizlidir, bu yüzden buraya veri atanmaz // plot_3_var plot Gizlidir, bu yüzden buraya veri atanmaz // çizim verilerini CSV formatında gönder uint32_t timeStamp = millis()-plot_mSOffset; if (timeStamp < lastTimeStamp) { // timeStamp 0 mSwrapCount++'a geri sarılır; // saymak için bir tane ekle } lastTimeStamp = timeStamp; parser.print("0x"); parser.print(msWrapCount, HEX); parser.print(timeStamp, HEX);// HEX cinsinden milisaniye cinsinden süre….
{@.. yanıtını döndürürken mSwrapCount'u da temizleyin.
// {@} isteği işle } else if('@'==cmd) { // pfodApp istenen 'geçerli' zaman plot_mSOffset = millis(); // mevcut milisleri ofset ham veri zaman damgaları olarak yakala mSwrapCount = 0; // sarma sayısını temizle. parser.print(F("{@`0}")); // '0'ı 'geçerli' ham veri milisaniyesi olarak döndür
Zaman damgaları artık sonraki 40.7 gün * 65536 ~= 7308 yıl için 'doğru' değeri verecektir.
pfodApp, çizim için onaltılı zaman damgalarını otomatik olarak dönüştürür ve bunları tam olarak alındığı gibi, yani onaltılık olarak günlüğe kaydeder. (OpenOffice) elektronik tablosunda, A2'deki onaltılı dizeyi mS'ye dönüştürmek için bu formülü kullanırsınız (burada A1 herhangi bir boş hücredir) =HEX2DEC(REPLACE(A2;1;2;A1))
neden bunu yapmak istemiyorsun
Yukarıda gösterildiği gibi, mS zaman damgalarını 50 günden fazla uzatmak kolaydır. Bununla birlikte, muhtemelen bunu yapmak istemezsiniz çünkü giderek daha doğru olmazlar. Mikroda millis() sonuçlarını oluşturmak için kullanılan tipik bir 16Mhz kristal ~50ppm (milyonda parça) doğruluğa sahiptir. Bu, 49.7 gün sonra milisaniye zaman damgasının 3 ½ dakika sonra bitebileceği ve sıcaklığın kristal doğruluğu üzerindeki etkisini göz ardı ettiği anlamına gelir.
Kısa bağlantı süreleri boyunca, {@.. yanıtı, her yeniden bağlantıda milisaniyelik zaman damgasını cep telefonunun tarih/saatiyle yeniden senkronize ettiğinden, bu yanlışlık bir sorun değildir. Ancak, uzun süreler (günler) boyunca bağlı kalmak ve verileri sürekli olarak günlüğe kaydetmek istiyorsanız, RTC veya GPS modülü gibi yerleşik millis()'den daha doğru bir şey kullanmalısınız.
9. Adım: Bir RTC Kullanma (Gerçek Zamanlı Saat)
Bir dizi RTC modülü mevcuttur, daha doğru olanlardan biri DS3231'dir, ör. Adafruit'in DS3231 modülü. Belirtilen doğruluk 0 ila 40C üzerinde +/-2ppm'dir. yani ~+/-5 sn/ay.
Tarih/saat zaman damgaları olan verileri çizmek istiyorsanız, ör. 2019/04/19 20:4:34, ardından geçerli tarih/saati döndürmek için {@ yanıtını değiştirmeniz gerekir, ör. {@`0~2019/4/19 3:33:5}. Burada, RTClib kitaplığını kullandığınızı ve RTC modülünü başlatma kodunu eklediğinizi varsayarak, bir RTC modülü kullanmak için pfodDesigner tarafından oluşturulan çizime uygulanacak bazı örnek kod değişiklikleri verilmiştir.
// {@} isteği işle } else if('@'==cmd) { // pfodApp istenen 'geçerli' zaman plot_mSOffset = millis(); // geçerli milisleri ofset ham veri zaman damgaları olarak yakala parser.print(F("{@`0"}); // '0'ı 'geçerli' ham veri olarak döndür milisaniye parser.print('~'); // başlangıç dizesi tarih/saat DateTime now = rtc.now() sendDateTime(&now); // parser.print'e yyyy/M/d/ H:m:s gönder, adresi & argüman olarak ilet parser.print('}'); // {@ yanıtının sonu, örneğin {@`0~2019/4/19 3:33:5}….
// ayrıştırıcıya tarih saati gönder printvoid sendDateTime(DateTime* dt) { parser.print(dt->year(), DEC); parser.print('/'); parser.print(dt->ay(), Aralık); parser.print('/'); parser.print(dt->gün(), Aralık); parser.print(''); parser.print(dt->hour(), DEC); parser.print(':'); parser.print(dt->dakika(), Aralık); parser.print(':'); parser.print(dt->ikinci(), DEC); }
void sendData() { if (plotDataTimer.isFinished()) { plotDataTimer.repeat(); // çizim verileri zamanlayıcısını sürüklenmeden yeniden başlat // döngü değişkenlerinizden değişkenleri çizmek için değerler atayın veya ADC girişlerini okuyun plot_1_var = analogRead(A0); // çizim için girdiyi oku // plot_2_var plot Gizlidir, bu yüzden buraya veri atanmaz // plot_3_var plot Gizlidir, bu yüzden buraya veri atanmaz // çizim verilerini CSV formatında gönder DateTime şimdi = rtc.now(); sendDateTime(&şimdi); // yyyy/M/d/ H:m:s'yi parser.print'e gönder, adresi & argüman olarak ilet. parser.print(','); parser.print(((float)(plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print(','); // Grafik 2 gizlendi. Veri gönderilmedi. parser.print(','); // Grafik 3 gizli. Veri gönderilmedi. parser.println(); // CSV veri kaydının sonu } }
{@ yanıtının ~2019/4/19 3:33:5 kısmı, pfodApp'in pfodDevice'in geçerli tarih ve saat hakkında ne düşündüğünü bilmesini sağlar. Çiziminiz daha sonra yMd Hms zaman damgalarıyla veri gönderebilir ve pfodApp bunları belirttiğiniz X ekseni formatına bağlı olarak bağlantı zamanından geçen süre olarak VEYA tarih ve saat olarak çizer.
Tarih ve saate göre çizim yaparken, pfodApp çizim rutini, pfodDevice'in rapor edilen geçerli saati ile mobilin geçerli saatini karşılaştırarak RTC'deki herhangi bir 'sapmayı' düzeltir. Bu düzeltme aynı zamanda RTC'nin cep telefonunuzun yerel saat diliminden farklı bir saat dilimine ayarlanmasını da sağlar. millis() zaman damgaları, yukarıdaki Arduino milisaniye zaman damgalarını kullanma, Adım 5'teki gibi çalışmaya devam eder.
İşte 8 günlük bir süre boyunca oda sıcaklıklarının örnek bir elektronik tablosu, Office_Temp.xls Günlük dosyası içe aktarıldığında, metni bir tarih/saate dönüştürmek için ilk sütun YMD olarak işaretlendi. E-tablonun bunları tarih ve saat olarak yorumlaması için yerel saat, UTC ve Office Temp geçerli saat girişlerinden önde gelen ' işaretini kaldırmanız gerekir.
pfodApp'in gösterdiği grafiğin aynısını elde etmek için “Düzeltilmiş Tarih/Saat”i hesaplamanız gerekir. Bu durumda, RTC saati cep telefonunun yerel saatinin 2 saniye gerisindedir, bu nedenle gerçek yerel saati elde etmek için her bir RTC zaman damgasına (yerel saat – Office Temp geçerli saati) eklenir.
Geçen zaman çizelgeleri için (tarih/saat timstamp - Ofis Saati geçerli saati) içeren yeni bir sütun oluşturun ve bunu grafikte X ekseni olarak kullanın (Office_TempElapsed.xls) Aslında bu durumda, pfodApp daha güzel geçen zaman çizelgeleri üretir gün olarak sa:dakika:sn.
Adım 10: Bir GPS Modülü Kullanma
Bir GPS modülü kullanmak, bir RTC modülü kullanmaya benzer, ancak GPS modüllerinin kullanılabilir milisaniyelere sahip olması, yılların 2000'de başlaması ve zamanın UTC artık saniyelerinin olmaması (bkz. https://tycho.usno.navy.mil/leapsec.html)) GPS tarih ve saati, Ocak 2018 itibariyle şu anda UTC'den 18 saniye ileridedir.
Adafruit Ultimate GPS için Adafruit GPS kütüphanesi, RTClib'den farklı olarak, 2000 yıl ofsetini GPS yıllarına eklemez, bu nedenle tarih ve saat zaman damgasını gönderdiğinizde eklenmesi gerekir. Ayrıca, GPS kütüphanesi, çok iyi uzun vadeli doğruluğa sahip milisaniyeler sağlamasına rağmen, çok kesin değillerdir. GPS zaman güncellemeleri her 100mS'de yalnızca bir kezdir ve ardından seri verileri yavaş bir 9600 baud'da alırken ekstra bir gecikme ve onu ayrıştırmada başka bir gecikme olur. Bunların tümü, veri okumalarına zaman damgası koyarken milisaniyelik hassasiyete eklenir.
Adafruit'in GPS kitaplığını kullandığınızı ve mesajları almak ve bir GPS nesnesine ayrıştırmak için kodu eklediğinizi varsayarak, bir GPS modülü kullanmak için pfodDesigner tarafından oluşturulan çizime uygulanacak bazı örnek kod değişiklikleri burada.
// {@} isteği işle } else if('@'==cmd) { // pfodApp istenen 'geçerli' zaman plot_mSOffset = millis(); // geçerli milisleri ofset ham veri zaman damgaları olarak yakala parser.print(F("{@`0"}); // '0'ı 'geçerli' ham veri olarak döndür milisaniye parser.print('~'); // başlangıç dizesi tarih/saat sendDateTime(&GPS); // parser.print'e yyyy/A/d/ H:m:s gönder, adresi & argüman olarak ilet.parser.print('}'); // {@ yanıtının sonu örn. {@`0~2019/4/19 3:33:5}….
// ayrıştırıcıya tarih saati gönder printvoid sendDateTime(Adafruit_GPS* gps) { parser.print(F("20"); // 20.. yıl parser.print(gps->year, DEC); parser.print('/ '); parser.print(gps->ay, DEC); parser.print('/'); parser.print(gps->gün, DEC); parser.print(' '); parser.print(gps- >saat, Aralık); parser.print(':'); parser.print(gps->dakika, Aralık); parser.print(':'); parser.print(gps->saniye, Aralık); // parser.print('.'); eğer milisaniye gönderiyorsa // mS göndermek istiyorsanız gps->milisaniye değerini baştaki sıfırlarla doldurmanız gerekir // yani 3'ün 003'e doldurulması gerekir }
void sendData() { if (plotDataTimer.isFinished()) { plotDataTimer.repeat(); // çizim verileri zamanlayıcısını sürüklenmeden yeniden başlat // döngü değişkenlerinizden değişkenleri çizmek için değerler atayın veya ADC girişlerini okuyun plot_1_var = analogRead(A0); // çizim için girdiyi oku // plot_2_var plot Gizlidir, bu yüzden buraya veri atanmaz // plot_3_var plot Gizlidir, dolayısıyla buraya veri atanmaz // çizim verilerini CSV formatında gönder sendDateTime(&GPS); // yyyy/M/d/ H:m:s'yi parser.print'e gönder, adresi & argüman olarak ilet. parser.print(','); parser.print(((float)(plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print(','); // Grafik 2 gizlendi. Veri gönderilmedi. parser.print(','); // Grafik 3 gizli. Veri gönderilmedi. parser.println(); // CSV veri kaydının sonu } }
Tarih ve saate göre çizim yaparken, pfodApp artık saniyeleri otomatik olarak düzeltir. Ocak 2018 itibariyle, GPS saati UTC'den 18 saniye ileridedir. pfodApp, bağlantı sırasında GPS tarafından {@ yanıtı aracılığıyla döndürülen tarih/saati cep telefonunun UTC tarih ve saatiyle karşılaştırarak bunu düzeltir. pfodApp günlük dosyasından bir elektronik tabloda grafikler oluşturmak, yukarıdaki RTC modülleriyle aynıdır. GPS zaman damgalarına (yerel saat – Office Temp geçerli saati) eklenmesi artık saniyeleri düzeltir.
millis() zaman damgaları, yukarıdaki Arduino milisaniye zaman damgalarını kullanma, Adım 5'teki gibi çalışmaya devam eder.
Adım 11: Sonuç
Android mobil cihazınızda pfodApp kullanmak, yalnızca Arduino'nun millis() işlevini kullanarak verileri tarih ve saate veya geçen zamana göre planlamanıza olanak tanır. pfodApp günlük dosyasını kullanarak bu tarih/saat grafiklerini bir elektronik tabloda yeniden oluşturabilirsiniz. Arduino projenizde bir RTC modülü varsa, RTC 'sapmasını' otomatik olarak düzelterek tarih ve RTC zaman damgalarını günlüğe kaydedebilir ve çizebilirsiniz. Arduino projenizin bir GPS modülü varsa, son derece hassas zaman damgalarını kaydedebilir ve çizebilirsiniz; pfodApp, GPS'in eksik artık saniyelerini otomatik olarak düzeltecektir.
Her durumda, Arduino projenizdeki ham veriler tam olarak alındığı gibi, düzeltilmeden kaydedilir. Ancak pfodApp günlük dosyası, bu düzeltmeleri indirilen günlük dosyasından bir elektronik tabloda yeniden oluşturmanıza olanak tanıyan ek veriler içerir.
Android kodlaması gerekmez. Çizim biçimlerinin tümü, Arduino taslağınızdaki küçük metin dizileriyle belirtilir. Ücretsiz pfodDesigner, WiFi, Klasik Bluetooth, BLE ve SMS ile bağlanan çok çeşitli Arduino kartları için eksiksiz Arduino veri kaydı ve çizim çizimleri oluşturur.
Önerilen:
ESP8266 OLED - İnternetten Saat ve Tarih Alın: 8 Adım
ESP8266 OLED - İnternetten Saat ve Tarih Alma: Bu eğitimde, ESP8266 OLED ve Visuino kullanarak NIST TIME sunucusundan tarih ve saati nasıl alacağımızı öğreneceğiz,Bir tanıtım videosu izleyin
MSP432 LaunchPad ve Python Kullanarak Bir Sıcaklık Sensörünün (TMP006) Canlı Verilerini Çizme: 9 Adım
MSP432 LaunchPad ve Python Kullanarak Bir Sıcaklık Sensörünün (TMP006) Canlı Verilerinin Çizilmesi: TMP006, bir nesnenin sıcaklığını nesneyle temas etmeye gerek kalmadan ölçen bir sıcaklık sensörüdür. Bu eğitimde Python kullanarak BoosterPack'ten (TI BOOSTXL-EDUMKII) canlı sıcaklık verilerini çizeceğiz
XinaBox Kullanarak Tarih, Saat ve Sıcaklık Görüntüleme: 8 Adım
XinaBox Kullanarak Tarih, Saat ve Sıcaklık Görüntüleme: ESP8266'ya dayalı Xinabox xChips kullanarak tarih, saat ve sıcaklığı Celsius ve Fahrenheit cinsinden gösteren harika OLED ekran
NodeMCU, MySQL, PHP ve Chartjs.org Kullanarak Verileri Günlüğe Kaydetme ve Çevrimiçi Grafik Çizme: 4 Adım
NodeMCU, MySQL, PHP ve Chartjs.org Kullanarak Verileri Günlüğe Kaydet ve Çevrimiçi Bir Grafik Çiz: Bu Eğitilebilir Tablo, birden fazla sensörden veri toplamak için Düğüm MCU panosunu nasıl kullanabileceğimizi açıklar, bu verileri barındırılan bir PHP dosyasına gönderir ve ardından verileri ekler. bir MySQL veritabanı. Veriler daha sonra chart.js.A ba
Saat/Tarih Ayarları için IR Uzaktan Kumandalı Saat: 5 Adım
Saat/Tarih Ayarları için IR Uzaktan Kumandalı Saat: Bu, hazır bileşenler kullanılarak yapılan basit bir saattir. Kullanılan Mikrodenetleyici, ucuz bir STM32F030F4P6'dır. Ekran, I2C sırt çantası (PCF8574) ile 16x2 LCD'dir. Saat devresi, küçük prototipleme panoları ve bir TSSOP kullanılarak oluşturulabilir