北東北 LabVIEWユーザー会

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

路面診断ツール

***** LabVIEWアドベントカレンダー2016年12月12日の記事です。 *****

人口急減中の中山間地域の路面診断ツールを作ろうと思った (・・・なんちゃって) 

 

 

ESP8266とGPSと加速度・ジャイロセンサーとSDカードがあれば高機能な路面のデコボコ記録計ができそうだと思いました。

 

 PC110001.jpg

まだデバッグに苦戦しております。

MoveLog01d.png

 

使用する主なモジュール

GPS:「GPS受信機キット 1PPS出力付き 「みちびき」対応」 --- 2200円

加速度・ジャイロセンサー:「GY521」 --- 210円

SDカード:「マイクロSDカードスロットDIP化キット」 --- 300円

ESP8266:とりあえず「ESPr Developer(ESP-WROOM-02開発ボード)」 --- 2160円

 

ピン接続

SDカード(SPI)---------------ESPrDeveloper

CD/DAT3(2pin)---------------IO16

CMD(3pin)---------------IO13

VDD(4pin)---------------+3.3

CLK(5pin)---------------IO14

VSS(6pin)---------------GND

DAT0(7pin)---------------IO12

 

GY521---------------ESPrDeveloper

3.3V(1pin)---------------VCC
GND(2pin)---------------GND
SCL(3pin)---------------IO5
SDA(4pin)---------------IO4

 

GPS---------------ESPrDeveloper

5V---------------ESPrDeveloperには無いので別のUSB端子から給電

GND---------------ESPrDeveloperには無いので別のUSB端子から給電

RXD---------------使用しない

TXD---------------RXD

 

ESPrDeveloperではモード切替にIO0, IO2, IO15を使うのでふつうのIOとしては避けておきます。GPSのTXDをESPrDeveloperのRXDにつないでいるとプログラムの書き込みの時に誤動作しますので、ピンを抜いてから書き込む一手間が発生します。

 

とりあえず目標とする動作とデバッグ状況

ESPrDeveloperの特徴ではありますが、Wi-Fiは今回も使いません。

(1) GPSデータを読み込んで必要なデータを拾って整形します。

(2) 1秒ごとに加速度・ジャイロデータを10回測定して、平均値と最大値と最小値を求めます。

(3) SDカードに記録します。

 

(1)と(2)が連続したCSVの文字列になっています。SDへの記録部分が難航していて適当なテスト文字列などは単独テストではOKなのですが、(1)から(3)までを統合すると何も記録されない残念な状況です。

 

ここまで持ってくるのにも苦労しているのでメモを残しておきます。

 

GPSで時刻、緯度、経度、高度、補足衛星数をとりこみます。

GPSモジュールからは、デフォルトでは1秒ごとにNMEA0183準拠の文字列が出力されます。GPSからの文字列については「GPSロガーのPC版 」を参考にしてください。

文字列全体は500文字ぐらいで、欲しい部分(一部*に置換)は以下の70文字ぐらいです。「$GPGGA,093808.000,39**.*439,N,141**.*081,E,1,8,1.16,**2.8,M,36.3,M,,*53」 

 1PPSの信号と同期すれば文字列の先頭から受け取ることができますが、自由になるIOを使い切っているので欲しい文字列($GPGGA,)が現れるまでに最大1秒かかります。600文字受け取ればどこかに完全なGPGGAの一行が含まれているので論理的には探すのは簡単なのですが、この方法はLabVIEWコンパイラには負担が大きくて実行中に何処かに行ってしまいます。

そこで、地道にプログラムを書かなくてはいけません。(LabVIEWコンパイラが便利なのかどうか疑う場面です。普通と言えば普通なのですが、、。)

64文字づつ受け取ってシフトレジスタの文字列に連結します。

"$GPGGA,"が含まれていて、かつその後ろに70文字(プログラムでは100)あれば解析できます。文字数が足りなければ"$GPGGA,"の前は削除してもう64文字受け取ります。

"$GPGGA,"が検出されなければ"$"を探して、"$"がなければシフトレジスタの文字列は空に、"$"があれば"$"の前を削除します。

 

CSV用に","を挿入する関数

String__insertd.png

 

解析する関数

Break__GPGGA01d.png

 

"$GPGGA,"を受け取る関数 

read__pick__GPS__Data01d.png

read__pick__GPS__Data01d4.png

read__pick__GPS__Data01d5.png

read__pick__GPS__Data01d1.png

read__pick__GPS__Data01d2.png

 

ちょっと面倒くさいですね。

 

SDはサンプルのまま書き込むだけなのですが、合体するとうまく動かない。

手持ちのArduino Due互換機に移行してみようか、オシロを出してSDの信号を見てみようか、もうArduinoでやってしまおうか

暫し思案のしどころです。

 

そうそう、加速度、ジャイロのデータも苦労しました。ドライブで使うことを考えると3時間ぐらいはSDに記録したいのでたぶん生データすべてを保存することはできません。でも、ぼこデータは細かいに越したことはないので10msec間隔で読み取って10秒毎に平均値、最大値、最小値を記録しようかと思いましたが、コンパイルはできても動かない。

8050Datad.png

配列とシフトレジスタの多用がダメなのだろうと考えて、地道にばらしてみました。データも1秒間隔で10秒ごとの保存に変更。

8050Data__02d.png

こういうのはすごく嫌いなのですが、配列操作が得意なLabVIEWが台無しです。

 

まあね、こんな小さなWiFiのコントローラの隙間にLabVIEWのプログラムを入れ込めるだけでもすごいのですが、

デバッグがもっと楽になれば、

コンパイルしてダウンロードできてもどうして動かないのか、理由がすぐにわかるようになれば良いですね。

 

 クリスマスまでに動作テストができるようになったらいいな。

 

 

 

 

0 件の賞賛
メッセージ1/1
4,568件の閲覧回数