Track ME
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
このプロジェクトについて
しばらく前に、Car / Personalトラッカーを作成することにしました。
これは、この方向での私の最初のプロトタイプでした。
システム自体は非常にシンプルです。 Arduino Mega、GPS、GPRSシールド、SDカードだけです。これはオプションですが、Facebookで友達にチャレンジを開始する際に、友達がシステムに電話をかけて、自分の位置または最後の既知の位置を含むSMSを受け取ると思ったので含めました。
システムは常に実際の位置を検索しています。誰かがSIMカードの番号に電話をかけると、システムは実際の位置とGoogleマップへのリンクを含むSMSを送信します。例:
Hugoの場所は現在:Lat:54.315010、Log:10.130997です。 http://maps.google.com/maps?q=54.315010,+10.130997
GPSが位置を受信していない場合、システムは最後の既知の位置を送信します。例:
ヒューゴが見つからないようです。前回彼に会ったのは、Lat:54.315010、Log:10.130997でした。 http://maps.google.com/maps?q=54.315010,+10.130997
日付、時刻、位置、SMSステータスがSDカードに保存されます。
コンポーネント
使用したもの:
1x Arduino MEGA
1x GPRSシールド(市場で入手可能な他のGSMシールドを使用することも可能です)
1x GPS(eBayで非常に人気のあるNEO 6を使用しました)
1xSDカードシールド
1x9Vバッテリー
1xプラスチックボックス
いくつかのワイヤー
コンポーネントを接続する
Arduino Megaは別のピン配置を使用しているため、再配線が必要です。
まず、Arduino Uno用に設計されたSDカードシールドは、SPI用にピン10〜13を使用するため、これをMegaで機能させるには、MEGAのSPIピンに「渡す」必要があります。
Arduino UNOSPIピン-ArduinoMEGASPIピン
MOSI-11から51
MISO-12から50
SCK-13から52
SS-10から53
GPRSでは、シールドのJ7ジャンパーでソフトウェアシリアルへの通信ピンを設定するために、最初にシールドが必要です。
次に、いくつかのワイヤーを使用して、GPRSシールドのピン7と8をシリアル1ポート(Arduino Megaのピン18と19)に接続しました。
GPRSシールドでSIMカードを接続する方法の詳細については、ハックスターの他のプロジェクトをご覧ください。
GPSはArduinoMegaのシリアル2ポート(ピン16と17)に接続されています。
また、GPSに必要な電力はSDカードの5VピンとGNDピンから取り出されます。
9V電池は、Vinピンまたは電源ジャックプラグに接続できます。
ボックスを閉じてフィールドテストを行う準備をしています。
コード
ここにコードに関する簡単なメモを残します。
このライブラリをGPRSシールドに使用しました。
Arduino Megaを使用するには、いくつかの変更を行う必要があります:
1)GSM.hを開き、コメント-以下のように適切な行をコメント解除します。 Arduino Megaの場合:
//#define UNO
#define MEGA
2)HWSerial.hで、メガ定義の行を削除します。 Arduino Megaの場合:
#define MEGA
GPSの場合、このライブラリを使用しています。
それ自体が実行するプログラムは非常に簡単です。すべての起動ルーチン(GPRS、GPS、SDカードの初期化)の後、GPSは、利用可能な衛星の数と有効なGPS座標ポイントを決定しようとします。
この期間中に電話がかけられた場合、電話は自動的に拒否され、何も起こりません。
GPSに有効な位置があり、3つ以上の衛星を検出している場合(GPSの受信状態が良好であると想定しています)、電話がかけられると、システムは私の位置を示すSMSを電話番号に送信します。これらのデータはすべてSDカードに保存されます。
GPSの衛星が3つ未満の場合、有効な位置を取得できません。そのため、電話をかけると、電話番号は私の最後の既知の位置を含むSMSを受信します。この場合も、すべてのデータはSDカードに保存されます。
長所と短所
これはプロトタイプなので、うまくいかなかったことがたくさんあります。しかし、目的は常に改善することです。
まず、バッテリーは1時間しか持続しません!!ソフトウェアに省エネメカニズムを実装していません。したがって、将来の改善には「スリープモード」が必須です。
サイズも見直して、完全に新しいボードをデザインしました。一見するとこれです:
間違いを見つけた場合、または提案/改善や質問がある場合は、私に書いてください。
読んでくれてありがとう。
ヒューゴゴメス
コード
- コード
コード Arduino
#include "SIM900.h" #include#include "sms.h" #include "call.h" #include //ソフトウェア/ハードウェアシリアルのピンを変更するには、 GSM.cppの27、28行// ArduinoMegaを使用するには、GSM.hの5行目にMEGAを定義してください。#include #include // Mega CS pinconst int chipSelect =53; // SMSとcallsのクラスを作成する必要があります。CallGSMcall; SMSGSM sms; char number [20]; byte stat =0; int value =0; char value_str [5]; // GPS Variable // TinyGPS ++ objectTinyGPSPlus gps; const char * googlePrefix ="http://maps.google.com/maps?q=";double Lat; double Long; int day、month、year; int hour、minute、second; int num_sat; boolean one_point_true =false; void setup(){//シリアル接続。 Serial.begin(9600); // GPRS接続Serial.print(F( "Starting GSM ...")); //ボーレートでシールドの構成を開始します。 if(gsm.begin(9600))Serial.println(F( "READY")); else Serial.println(F( "IDLE")); // GPS接続Serial.println(F( "Starting GPS")); // GPS comポートSerial2.begin(9600); // SDカードの開始Serial.print(F( "Initializing SD card ...")); //使用しない場合でも、デフォルトのチップセレクトピンが//出力に設定されていることを確認します。pinMode(53、OUTPUT); //カードが存在し、初期化できるかどうかを確認します:if(!SD.begin(chipSelect)){Serial.println(F( "Card failed、or not present")); //これ以上何もしません:return; } Serial.println(F( "カードが初期化されました。"));} // ******************************** ********************************************** //メインloopvoid loop(){Get_GPS(); //位置を取得しますCheck_call(); //誰かが電話をかけているかどうかを確認します}; ///////////////////////////////////////// ///////////////////////////////////////// ********* ************************************************** ******************* // GPSvoid Get_GPS(){while(Serial2.available()> 0)if(gps.encode(Serial2.read ()))num_sat =gps.satellites.value(); //Serial.println(num_sat); if(gps.location.isValid()==1){Lat =gps.location.lat(); Long =gps.location.lng(); if(Lat!=0 &&Long!=0)one_point_true =true; } if(gps.date.isValid()){day =gps.date.day();月=gps.date.month();年=gps.date.year(); } if(gps.time.isValid()){時間=gps.time.hour();分=gps.time.minute();秒=gps.time.second(); } smartDelay(500); if(millis()> 5000 &&gps.charsProcessed()<10){Serial.println(F( "GPSが検出されませんでした:配線を確認してください。")); while(true); }} // ********************************************** ******************************** //このカスタムバージョンのdelay()は、gpsオブジェクト//が"fed" .static void smartDelay(unsigned long ms){unsigned long start =millis(); do {while(Serial2.available())gps.encode(Serial2.read()); } while(millis()-start =3 &&one_point_true ==true){char sms_OK [160]; sprintf(sms_OK、 "Hugoの場所は現在:Lat:%s、Log:%s。%s%s、+%s \ n"、lat_print、Long_print、googlePrefix、lat_print、Long_print); Serial.println(sms_OK);エラー=sms.SendSMS(number、sms_OK); delay(500); if(error ==0)//ステータスを確認{Serial.println(F( "SMS ERROR")); } else {Serial.println(F( "SMS OK")); }} else if(num_sat <3 &&one_point_true ==true){char sms_NOK [150]; sprintf(sms_NOK、 "ヒューゴを見つけることができません。前回彼に会ったのは次の場所でした:Lat:%s、Log:%s。%s%s、+%s \ n"、lat_print、Long_print 、googlePrefix、lat_print、Long_print); Serial.println(sms_NOK); intエラー=sms.SendSMS(number、sms_NOK); if(error ==0)//ステータスを確認{Serial.println(F( "SMS ERROR")); } else {Serial.println(F( "SMS OK")); }} else if(one_point_true ==false){Serial.println(F( "有効なGPSポイントがありません")); } // SDカードファイルにすべてを保存するdataFile =SD.open( "datalog.txt"、FILE_WRITE); //ファイルが利用可能な場合は、次のように書き込みます。if(dataFile){dataFile.print(Date); dataFile.print( ""); dataFile.print(time1); dataFile.print( ""); dataFile.print(number); dataFile.print( ""); dataFile.print(lat_print); dataFile.print( "、"); dataFile.print(Long_print); dataFile.print( ""); dataFile.print(error); dataFile.println(); dataFile.close(); } //ファイルが開いていない場合は、エラーをポップアップします。else{Serial.println(F( "erroropening datalog.txt")); }} //////////////////////////////////////////////// ///////////////////////////////
回路図
製造プロセス