Lab. of Voynich Code
2020年アルゼンチン皆既日食のたくらみ
GPSとRTCからの時刻取得-①
2019.09.23 Open 2019.10.21 Update

ArduinoでRTC(Real Time Clock)から時刻を取得する

ArduinoでRTSから時刻を取得するスケッチを動かす。使用したRTCはAmazonで売っていたコレ
Arduino IDEのLibraryを私はC:\のProgram (x86)のArduino以下からドキュメントにコピーして、ダウンロードしたDS3231の試験用.zipファイルを展開し、コンパイル~書き込みしてシリアルモニタで確認しました。
DS3231_test.inoを実行すると下の様な形で表示されます。

実験機器全景
 ブレッドボード一番上からDCジャック、GPSとのやり取り用のマイクロUSBメス口(左上GPSセンサーの隣のマイクロUSBを刺して使う)、OLEDディスプレイ(デモを表示中)、RTC
参考URL
RTC DS3231 AT24C32 時計モジュールをArduinoにつなげて動かすLibrary: DS3231

ArduinoでGPSから時刻を取得する

  ArduinoでGPSから時刻を取得するスケッチを製作する。使用したGPSは秋月電子通商で売っていたコレ
下記のスケッチでGPSから時刻が取得されてPCのシリアルモニタ上に表示される。
TinyGPSのソースではうまく動かなかったのでDevicePlusの方に載っていた緯度経度高度のスケッチをちょっと改変して使いました。
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
 
TinyGPSPlus gps;
SoftwareSerial mySerial(10, 11); // RX, TX
//TinyGPSCustom magneticVariation(gps, "GPRMC", 10);
 
void setup() {
 // Open serial communications and wait for port to open:
 Serial.begin(57600);
 while (!Serial) {
 ; // wait for serial port to connect. Needed for native USB port only
 }
 
 Serial.println("Goodnight moon!");
 
 // set the data rate for the SoftwareSerial port
 mySerial.begin(9600);
 mySerial.println("Hello, world?");
}
 
void loop() { // run over and over
 while (mySerial.available() > 0){
   char c = mySerial.read();
   //Serial.print(c);
   gps.encode(c);
   if (gps.location.isUpdated()){
     Serial.print("hr="); Serial.println(gps.time.hour());
     Serial.print("min="); Serial.println(gps.time.minute());
     Serial.print("sec="); Serial.println(gps.time.second());
   }
 }
}

参考URL
DevicePlusTinyGPS

OLEDディスプレイを試す

 OLEDディスプレイ(Amazonのコレ)のうち、128x64dotのものはどうもうまく行かず、結果128x32dotのもので稼働を可能を確認した。デモの中でテキストを表示するルーチンを見つけたので、そこにRTCの時刻を書き込むようにすればいいと考える。その辺の文法にしばし悩ませられると考えつつ、先ずは稼働することを確認した。
おまけ
RTCとディスプレイを同時に使うとArduino込で40mA程度の電流を食うようである。これにGPSを加えると50mAくらい。
 OLEDディスプレイのデモを実行した画面。視認性は高く、表示部の高さは7mmほどだが、2行表示なら難なく見れそう。もう一枚あるので、1つは時刻、1つは動作状況と行った形に出来れば良いが。勿論、128x64dotのディスプレイを動かすことが出来ればそれに越したことは無い
 上の0.91インチOLEDディスプレイのドライバはSSD1306、この1.3インチOLEDディスプレイはSSH1106 (SSD1306の場合もあるらしい)。そのドライバがなかなか見つからなかったけど、何とか見つけて実験してみたらこんな感じ。文字の大きさを「2」にすると10桁表示で十分に視認性がある大きさで表示できると判りました。その上4行表示できるので、この1枚で、RTCとGPSの時刻、コマンドの実行状況を十分な大きさの文字で表示できそうです。
参考URL
SSD1306用 I2C通信の超小型有機EL(OLED)をArduinoで試してみましたGitHub
SSH1106用 GitHub

更に行いたい事

I. RTCからの時刻を元に各種制御を行うが、時刻がずれた時にスイッチ一発か自動でGPSで時刻を合わせるようにしたい
II. その結果をI2C接続のOLEDディスプレイ(Amazonで売っていたコレ)に表示したい

 これらに関しては次のページにて公開予定
参考URL
RTCの時刻合わせ:ラズベリーパン
inserted by FC2 system