Arduinoの時刻合わせと浮動小数点数 ノ巻

Arduinoを線量ロガーとして使うにあたり、やっぱり時刻が欲しいよね… ってことで、とりあえずTimeライブラリで時計機能を持たせてみる。問題はその時刻合わせでRTCがないため、起動するごとに時刻を設定し直す必要がある。

時刻合わせの方法はTimeライブラリでいくつか提供されているが、外付けハードウェアが必要なものは手間かお金がかかってしまう… プログラム内に初期値を持たせるのも後で調整できないので、正確さと手間の点でイマイチ。というわけで、消去法的ににシリアルからの設定を選択となる。

サンプルスケッチでは'T'に続けて時刻をUNIX Epoch時間で設定する。ググれば現在時刻のEpoch時間を表示するサイトがいくつかあるので、ここからコピペでいける。サンプルはloop内で随時時刻合わせを受け付けるが、これを起動時に正しく受け取るまで待たせるように変更して取り込み。そのままでは時刻はGMTグリニッジ時間になるが、どこかで+9時間しておけば良いので気にしない。シリアルとログファイルに時刻を出すようにして出来上がり。

だが、USBを抜くとArduinoも電源が落ちて終了してしまう。これはUSBがシリアル通信と電源の供給を兼ねているので仕方がない。DCジャックのほうに電源供給してからUSBを接続すれば、後でUSBを抜いても大丈夫だが、シリアルが認識されなかったり多少あやしい… しかし、時刻さえ合えば、後は測定したいところに放置しておけば、どんどんログファイルに記録されていく。

ふとログをみていてcpmの値がいつも整数(小数点以下が00)なことに気づいた。Cのつもりで演算結果を浮動小数点数(float)変数で受けているので大丈夫と思ったが、これではダメらしく演算に使う変数をfloatにキャストしておかなければならなかったようだ。printfの件もあるが、Arduinoは浮動小数点数関連が弱そうだ。アナログとか測定では不可欠に思われるのだが…

そう考えていくと、測定系になるとRaspberryPiが適している?と思って悩ましい。いっそ、RaspPi用のArduino互換シールドを作れば解決!?


α700 + Minolta AF100mm MACRO F2.8





コメント

このブログの人気の投稿

退役iPod ClassicとRockbox化による再生 ノ巻

ジャンクなiPod miniをGetして、SDをCF変換アダプタ経由で換装してゼロスピンドル化 ノ巻

BOSE AW-1修理とラジオノイズ ノ巻