🎀目次へ🎀
Mira
自作GPSロガーの作り方。第9回目。最終回!
配線図を載せようと作ってみたんだけど、うまく書けない。
きっと理工系の人が見たら、でたらめなんでしょうね。
Fritzingというツールも初めて。
私、いつも配線図は手書きのメモだけだから。
でも、GPSロガーを作ろうとしている人の役に立てばと、恥ずかしいけれど載せます。
〇配線
こうしてみるとそれほど配線は多くないわね。8x8LEDのほうがマイコンの端子を多く使うし。
各モジュールとの具体的なつなぎ方は過去の記事にあるので、分かりにくい時にはそちらを見てね。
★「液晶ディスプレイ」の配線と表示のことならこちら
★「マイクロSDカード」に記録する方法とスロットのつなげ方はこちら
★「GPS受信モジュール」の配線と受信プログラムはこちら
配線図の左上の部分では電源から3.7vと3.3vを作って、それぞれを異電圧の電源としています。
3.7vはバッテリーが3.7v出力なのでそのまま。
3.3vは3端子レギュレーターを使って作っています。
・使用モジュール
3.7v - 「みつは(ATmega328)」「GPS受信機」
3.3v - 「液晶ディスプレイ」「GPS受信機(RX線)」「マイクロSDカードスロット」
液晶ディスプレイは省電力が必要な場合に消しておけるように、主電源のスイッチとは別にスイッチを設置した。どうしても長い間宿に泊まれないようなときには、液晶を切ってログだけとれるようにね。きっとルナが上手に使ってくれるでしょう。
マイクロSDカードを使う人はくれぐれも電圧に注意してね。5vの電気を直接流すとカードが壊れちゃうんだって。抵抗のつなぎ方だけで分圧できるから、試験運転の時にも減圧してくださいね。
配線図は規則とか作法とかを知らないので、参考図として見てください。実際に実装したI²CのLCDは、端子が上の4本だけです。端子の名前も本当はSDAとSCLです。こんな仮の図でごめんなさいね。
一番左上にあるバッテリーにつながるコネクタのところ、図の上ではマイナス線がつながっていないけど、それぞれのGND端子はみんなここにつながります。
〇プログラム Arduino<GPS logger>sketch
以下は、緯度と経度を液晶ディスプレイに表示して、マイクロSDカードに記録するスケッチです。
電源を入れると新しいフォルダを作り、そこに連続して記録します。
#include <Wire.h>
#include <ST7032.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include <TinyGPS++.h>
#include <SD.h>File sd;
TinyGPSPlus gps;
const int cs = 10; //SDカードのチップセレクト
const int rx=8,tx=9; //GPS受信機の通信線 (逆転注意)
SoftwareSerial ss(rx,tx); //GPSとの通信
ST7032 lcd;
char dayfile[16];
int fileNo =0;void setup(){
lcd.begin(8,2); //8x2のLCD
lcd.setContrast(20); //コントラスト
lcd.clear(); //液晶画面のクリア
Serial.begin(9600); //みつは通信速度
ss.begin(9600); //GPS通信速度
if(!SD.begin()){ //SDカードがない場合
while(1){
lcd.print("Not find SD "); //液晶に表示 SDカードを入れてから電源を入れなおす
delay(350);
}
}
fileName_make(); //ファイルを作る
SdFile::dateTimeCallback(&dateTime); //ファイルに日付をつける。
}void loop(){
sd =SD.open(dayfile,FILE_WRITE); //SDカードを開く
while(ss.available()>0){ //GPS受信ができている間
if(gps.encode(ss.read())){ //GPSのデータを読んで
log_sd(); //このプログラムは下にあります
}
}
sd.close(); //SDカードを閉じる
}void fileName_make(){ //ファイル名を作る 2018.1.9.の記事参照
String d;
while(1){
d = "Log";
if(fileNo < 10){
d +="00";
}else if(fileNo < 100){
d +="0";
}
d +=fileNo;
d +=".TXT";
d.toCharArray(dayfile,16);
if(!SD.exists(dayfile)) break;
fileNo++;
}
}void log_sd(){ //緯度と経度をSDカードに書くプログラム
if(gps.location.isValid()){ //GPSから位置情報を得られていれば
String n;
String m;
n = String(gps.location.lat(),6); //緯度情報を取得
m ="N";
m +=n;
lcd.setCursor(0,0); //液晶ディスプレイの上段に
lcd.print(m); // Nを付けて表示
sd.print(n); //SDカードに緯度を記録
sd.print(","); //SDカードに「,」を記録
n = String(gps.location.lng(),6); //経度情報を取得
m ="E";
m +=n;
lcd.setCursor(0,1); //液晶ディスプレイの下段に
lcd.print(m); //Eを付けて表示
sd.println(n); //SDカードに経度を記録
sd.flush(); //SDカードに書き込んだ記録を保存
}else{
lcd.print("Not Find GPS "); //位置情報を得られるまで、表示
//スイッチを入れてからGPSを捉えるまではこの表示
}
}
//以下のプログラムでログファイルにつける日付を取得する(2019.1月修正)
/*(2020.8月追記)やっぱり以下のコードでは日付を取得できていないかも。ごめんなさい。私にはまだちょっと難しいです。*/
void dateTime(uint16_t* date,uint16_t* time){
uint16_t year =(gps.date.year());
uint8_t month =(gps.date.month()),day=(gps.date.day()),
hour=(gps.time.hour()),minute=(gps.time.minute()),second=(gps.time.second());
*date =FAT_DATE(year,month,day);
*time =FAT_DATE(hour,minute,second);
}
以上、緯度経度記録用GPSロガーのプログラムです。
※スペースが消えて左揃えになり、読みにくいとは思いますがご容赦ください。
※このプログラムでうまく動作しないときは、ライブラリがないのかもしれません。その場合はこの記事 ↓ を参考にしてくださいね。
「Arduinoでライブラリを使うための準備」
このプログラムをみつはに書き込んで、ICソケットに挿し込めば……
GPSロガーの 完成!
感慨深いわねえ。
実際にこれを使ってログを取ると……
こんな感じで表示することができるわ。
上の写真は実際にルナとカタリが自転車で移動した一日のルートを表したもの。旅のルートと詳細については、明日からルナが紹介していきます。
これで全9回の「手作りGPSロガー」の紹介は終わり。
作成・紹介はミラでした。
続きの+αの記事はこちらから
↓
miraluna.hatenablog.com
高度を記録できる+βの記事はこちらから
↓
miraluna.hatenablog.com
★目次へ★