福野泰介の一日一創 - create every day

IchigoJam x IchigoROM x IchigoSensors でつくるGPSロガー

2018/08/09
#IchigoJam #maker 

位置情報をどんどん記録する、GPSロガー。
GPSモジュールも搭載可能なIchigoSensorsで作ってみました。
IchigoSensorsに、GPS受信キットだけを実装しても動きます。(記録にIchigoROM、表示にAQM1602Yを使用)

モバイルバッテリーと組み合わせて、スタンドアローン動作します。緯度経度速度を外でも見やすいLCD表示機能付き。


キーボード、ディスプレイをつなぐだけで、いつでもどこでもプログラムを書き換え可能!


記録は1MbitのEEPROMの自由記録領域64KBに書き込んでいきます。4095点分、記録可能(1データ16byte)。

GPSロガーのつくりかた
1. GPSモジュールの設定を変更する
シリアル送受信を止め、BPS9600に設定する

UART0,0:BPS9600

IchigoJamのTXDとGPSモジュールをジャンパーでつなぐ(IchigoSensorsの場合)
チェックサムを付けてシリアル送信するプログラムを書き込む。

200 N=0:FORI=0TOLEN(S)-1:N=N^ASC(S+I):NEXT:UART3:?:?"$";STR$(S);"*";HEX$(N,2):UART0:RTN

GPSモジュールからのメッセージ、NMEAの内GPSMCのみを1秒おきに取得するように設定する

S="PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0":GSB200

* この設定は保存されるので、次回以降は不要

2. プログラムする

1 'GPS Logger 2 BPS9600:L=8 10 CLS:GSB300:P=#900:GSB700:GSB@EPUSH:CLS:?[3];".";[4]:?[5];".";[6],[7]:GSB@LC:WAIT3*60:CONT 'GET 1 line from GPS 300 UART3,2 301 K=INKEY():IF!KCONT 304 IFK!=36GOTO300 305 K=INKEY():IF!KCONT 306 IFK!=71GOTO300 307 ?"G"; 308 K=INKEY():IF!KCONT 309 IFK=42UART0,0:?:RTN 310 ?CHR$(K);:GOTO308 'parse 1 number 500 N=0 510 C=ASC(P):P=P+1:IF!CORC=44ORC=46ORC=34C=C=46:RTN 520 IFC>=48&&C<=57N=N*10+C-48 530 GOTO510 'parse 1 number with the beam setting 540 N=0:IFASC(P)=44RTNELSEFORI=1TOM:N=N*10+ASC(P)-48:P=P+1:NEXT:RTN 'parse GPS message 700 GSB500:M=2:GSB540:[1]=N:GSB500:[2]=N:GSB500:GSB500 711 GSB500:[3]=N:IFCGSB500:[4]=N:ELSE[4]=0 712 GSB500:GSB500:[5]=N:IFCGSB500:[6]=N:ELSE[6]=0 713 GSB500:GSB500:[7]=N:GSB500:GSB500:GSB500:GSB540:[1]=[1]+N*100:GSB500:[0]=N 720 FORI=0TO7:?I,[I]:NEXT:RTN 'EEPROM 800 @EPUSH:N=0:?I2CR(81,#8E6,2,#8E4,2),M:M=M+1:N=M*L*2:N=N<<8|N>>8&#FF:?I2CW(81,#8E6,2,#800,L*2):N=0:?I2CW(81,#8E6,2,#8E4,2):RTN 'LCD 900 @LC:LET[96],640,64,#5639,#C6C,#C080,64:?I2CW(62,#8C3,5)+I2CW(62,#8C0,3,#900,16)+I2CW(62,#8C8,3,#920,16):RTN

* 約3秒おきに記録(10行のWAITで間隔調整可能)
* EEPROMの書き込み、取り出しは「IchigoJamとIchigoROMで作る、高精度な温湿度ロガー」参照
* LCDのドライバは「ボクにもわかる IchigoJam用 I2Cキャラクタ液晶LCDの接続方法 AE-AQM0802, AE-AQM1602A, AQM1602Y」を弱改造

データは下記のように配列8つにいれて、EEPROMに書き出しています。
[0] 日付 1808 年月
[1] 時間 0920 日時
[2] 時間 3406 分秒
[3] 緯度1 3589 度分(南緯の場合マイナスにしたい)
[4] 緯度2 2732 秒
[5] 経度1 13624 度分(西経の場合マイナスにしたい)
[6] 経度2 7071 秒
[7] 速度 0 knot


ハローインターナショナル」にて、未就学児〜小1の子供とお母さん向けのプログラミング体験がありました。IchigoJamでのプログラミングとIoT体験。子供でもお母さんでもできちゃう、未来づくり!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像