Slide 1

Slide 1 text

Arduinoで作るGPSロガー 2023-03-04, @keisuke_n

Slide 2

Slide 2 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 2 自己紹介 ● @keisuke_n ● ソフトウェア屋さん (Webアプリ) ● ハードもぼちぼち ● 天体観測もぼちぼち – 皆既月食 2022-11-08 – MAKSY60 + LUMIX GX7mk2 – 子供用望遠鏡でもここまで写る

Slide 3

Slide 3 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 3 GPSとは ● GPS(Global Positioning System)衛星を使った ● 緯度・経度を計測するシステム ● 衛星内原子時計 + 三角測量 + 特殊相対論補正うんぬん ● GPS衛星: 中軌道 20,200km, 傾斜角55度, 12H周期 ● わかる(わからん)

Slide 4

Slide 4 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 4 GPS端末の種類 ● モジュール式(UART) ● ドングル式(USB) ● ArduinoはUARTが便利

Slide 5

Slide 5 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 5 GPSのデータ ● NEMA 0183 – テキスト(ASCII)型式 – GPSではよく使われる – 緯度・経度 – 時刻や高度、精度、衛星、 電波強度情報も含まれる $GPRMC,064527.00,A,3436.29378,N,1335 6.47954,E,0.341,,050223,,,A*7E $GPVTG,,T,,M,0.341,N,0.631,K,A*21 $GPGGA,064527.00,3436.29378,N,13356. 47954,E,1,04,3.51,81.5,M,32.1,M,,*6D $GPGSA,A,3,27,16,26,01,,,,,,,,,5.34, 3.51,4.03*07 $GPGSV,4,1,13,01,06,195,29,05,,,20,0 7,,,32,08,,,33*46 $GPGSV,4,2,13,11,,,23,16,54,064,36,1 7,,,22,18,,,21*41 $GPGSV,4,3,13,21,,,30,23,,,22,26,26, 099,36,27,64,021,39*76 $GPGSV,4,4,13,30,,,11*78 $GPGLL,3436.29378,N,13356.47954,E,06 4527.00,A,A*67

Slide 6

Slide 6 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 6 今回の目標 Arduino NanoでGPSロガーを作る ● 移植は考えない (Arduino Nano, C言語) ● 緯度・経度を液晶に表示 ● ボタンを押すとSDカードに記録開始/停止 ● 記録(ログ)は1ファイル、追記

Slide 7

Slide 7 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 7 全体写真

Slide 8

Slide 8 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 8 全体構成 SDカード スロット (SPI) 液晶モニタ 160x80 (SPI) GPSモジュール (UART) GPSアンテナ Arduino Nano (互換マイコン) USBコネクタ+ ケーブル 記録ボタン

Slide 9

Slide 9 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 9 記録系:ボタン/表示 記録開始/停止ボタン 通常時(記録なし) 記録時

Slide 10

Slide 10 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 10 部品リスト 名前 価格 備考 Arduino Nano(互換) 3,589円 / 3個 ELEGOO GPSモジュール 1,682円 NEO-7M, アンテナ付き SDカードスロットモジュール 699円 / 5個 KKHMF 液晶 (160x80, 65536色) モジュール 880円 waves 0.96インチ その他(ケース, 木板など) - 100均 + 手持ちの物 計 3,898円+ ※価格は2023-01-31時点

Slide 11

Slide 11 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 11 部品:写真 NEO-7M GPSモジュール ELEGOO Arduino Nano waves 0.96” 液晶モニタ SDカードスロット

Slide 12

Slide 12 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 12 配線図

Slide 13

Slide 13 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 13 注意点 ● SDカード – SDHC/FAT16/FAT32のみサポート (exFAT未サポート) – SDカードの相性問題 ● GPS端末 – コールドスタート時、座標取得に2-3分かかる – (最近の端末はバッテリ搭載でホットスタート可能)

Slide 14

Slide 14 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 14 ソフト:ライブラリ ● Arduino IDEでライブラリインストール – TinyGPS: GPSデータの抽出 – SDカード(標準): ファイルの読み書き – Adafruit_ST7735: 画面表示・描画

Slide 15

Slide 15 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 15 ソフト内容:GPSデータ受信 // 初期化(8PIN, 9PIN); 9600bps通信 SoftwareSerial gpsSerial(8, 9); gpsSerial.begin(9600); ... // シリアル通信があるまで待つ, 受信データを取得 while (gpsSerial.available() <= 0); data = gpsSerial.read();

Slide 16

Slide 16 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 16 ソフト内容:SDカード追記 // SDスロット初期化, ファイル生成(追記) SD.begin(4); File gpsLogFile = SD.open(“gpslog.txt”, FILE_WRITE); ... // 一行分取得; ファイルに1行書き出し row = ...; gpsLogFile.println(row);

Slide 17

Slide 17 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 17 ソフト内容:座標取得, 画面表示 // インスタンス初期化 TinyGPS gps; ... // GPSデータ受信, エンコード (GPSデータ解釈) data = gpsSerial.read(); gps.encode(data); ... // 位置(緯度経度)情報取得 // 位置の文字列化 gps.get_position(&lat, &lng); sprintf(latStr, “% 4ld.%6ld”, lat / 1000000, labs(lat) % 1000000); tft.print(latStr);

Slide 18

Slide 18 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 18 ソフト開発状況

Slide 19

Slide 19 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 19 ソフト内容:容量, 行数 ソフト容量: 25,752バイト 変数容量: 1,582バイト 行数: 242行 (コメント空行を除く)

Slide 20

Slide 20 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 20 苦労した:ログ記録 ● SDカード書込みが不安定 – 記録期間(時刻)があっていない – 記録データが少ない ● 記録のタイミング(状態変移)がおかしかった – 「記録中」が実は記録してなかった(逆になっていた)

Slide 21

Slide 21 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 21 苦労した:GPSデータ化け ● 時々ソフトシリアル受信を取りこぼす – 画面表示がボトルネック(時間がかかる) – 遅延時間分散して文字を1文字ずつ描画した ● 画面通信(SPI)でソフトシリアル受信が間に合わない ● シリアル通信のない時に1文字ずつ描画 ● 手動平行処理(スレッド欲しい)

Slide 22

Slide 22 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 22 苦労した:画面表示化け ● 画面表示ライブラリ(Adafruit_ST7735)にバグ – 色が変, 座標指定が変 – ハードの初期化がバグっているらしい – 似た環境IDを設定してお茶を濁(回避)した

Slide 23

Slide 23 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 23 苦労した:画面表示化け ● すべてはAdafruitのせい ● い、いえお世話になっております... ● ちなみにAdafruitは – MIT発 – ハードウェアの開発・販売 – ソフトウェアの配布 – やって〼 Adafruitのおば...お姉さん

Slide 24

Slide 24 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 24 ロケーションテスト ● 自転車に自作GPSロガーを積んで走り回る – プロトタイプ(Arduino+GPS端末+Note PC) – GPSInfo(フリーソフト)で可視化 – 高度・精度・方位・衛星・時刻なども取れている – 結構ずれる (5m程度) 再生

Slide 25

Slide 25 text

2023-03-04 SORACOM UG Okayama #3 & IoT勉強会 in 岡山 25 まとめ ● ソフト開発: ライブラリがあるので簡単 ● パーツ入手: Amazonで中華パーツをぽちって手に入る ● 応用はたくさん考えられる – 自動運転(ロボットなど) – GPS時計 ● 天体観測の自動導入の一部に利用したい ● 意外に簡単なのでみなさんもお試しを