Arduinoでの日曜大工GPSトラッカー

arduinoでのいくつかの実験の後、GPRSを介してサーバーに座標を送信するシンプルでそれほど高価ではないGPSトラッカーを作成することにしました。

Arduino Mega 2560(Arduino Uno)、SIM900-GSM / GPRSモジュール(サーバーへの情報送信用)、GPS受信機SKM53 GPSを使用します。



すべてがebay.comで約1,500 r(約500 rのアルデュイン、少し少ない-GSMモジュール、もう少し-GPS)の量で購入されました。



GPS受信機



GPS受信機



まず、GPSに対処する必要があります。 選択したモジュールは、最も安価で簡単なモジュールの1つです。 しかし、メーカーは衛星データを保存するためのバッテリーを約束しています。 データシートによると、コールドスタートには36秒かかりますが、私の状況(窓辺から10階、すぐ隣に建物はありません)では、20分もかかりました。 ただし、次の開始はすでに2分です。



Arduinoに接続されているデバイスの重要なパラメーターは、消費電力です。 arduinoコンバーターに過負荷をかけると、燃え尽きる場合があります。 使用するレシーバーの最大消費電力は45mA @ 3.3vです。 なぜ仕様書に、必要な電圧(5V)以外の電圧での電流強度が示されているのか、私には謎です。 ただし、45 mAのArduinoコンバーターは耐えます。



接続


GPSはRXピンを備えていますが、制御できません。 何のために-それは不明です。 このレシーバーで実行できる主なことは、TXピンからNMEAデータを読み取ることです。 レベルは、アルデュイン専用の5Vで、速度は9600ボーです。 VINをVCCに、GNDをGNDに、TXをRXに対応するシリアルに接続します。 最初にデータを手動で読み取り、次にTinyGPSライブラリを使用しました。 驚くべきことに、すべてが読み取られます。 Unoに切り替えた後、SoftwareSerialを使用する必要があり、問題が発生しました-メッセージ文字の一部が失われます。 TinyGPSは無効なメッセージをカットするため、これはそれほど重要ではありませんが、かなり不快です。1Hzの周波数を忘れることができます。



SoftwareSerialに関する小さな注意:Unoにはハードウェアポートがないため(USBシリアルに接続されているポートを除く)、ソフトウェアを使用する必要があります。 そのため、ボードが割り込みをサポートしているピンでのみデータを受信できます。 Unoの場合、これらは2と3です。また、一度にデータを受信できるポートは1つだけです。



これが「テストベンチ」の外観です。



試験台



GSM受信機/送信機



GSMシールド



今からもっと面白い部分が始まります。 GSMモジュール-SIM900。 GSMとGPRSをサポートしています。 EDGEも3Gもサポートされていません。 座標データを送信する場合、これはおそらく良いことです。モード間を切り替えるときに遅延や問題が発生することはありません。また、GPRSはほぼどこにでもあります。 ただし、一部のより複雑なアプリケーションでは、これでは不十分な場合があります。



接続


モジュールは、同じレベル-5Vのシリアルポート経由でも制御されます。 そして、ここではRXとTXの両方が必要になります。 モジュールはシールドです。つまり、arduinoにインストールされます。 さらに、megaとunoの両方と互換性があります。 デフォルトの速度は115200です。



Megaに統合すると、最初の不快な驚きに直面します。モジュールのTXピンが7番目のメガピンに到達します。 Megaの7番目のピンでは割り込みは使用できません。つまり、7番目のピンを6mに接続する必要があります。 したがって、1ピンのアルデュインを無駄にします。 まあ、メガにとってはそれほど怖くない-結局のところ、十分なピンがあります。 しかしUnoの場合、これはすでにより複雑です(割り込みをサポートするピンは2と3のみであることに注意してください)。 この問題の解決策として、arduinoにモジュールをインストールするのではなく、ワイヤーで接続することを提案できます。 その後、Serial1を使用できます。



接続後、モジュールと「話す」ことを試みます(忘れずに有効にしてください)。 ポート速度-115200を選択します。すべての組み込みシリアルポート(メガで4、unoで1)とすべてのソフトウェアが同じ速度で動作するのは良いことです。 これにより、より安定したデータ転送を実現できます。 なぜ-わからないが、私は推測する。



したがって、シリアルポート間でデータを転送し、atzを送信し、応答で無音にするプリミティブコードを作成します。 なに ああ、大文字と小文字が区別されます。 ATZ、OK。 やばい、モジュールは私たちを聞いています。 しかし、楽しみのために私たちに電話しないでください? ATD + 7499 ...市の電話が鳴り、アルデュインから煙が出て、ラップトップが切断されます。 Arduinoは燃え尽きました。 彼に6ボルトから20ボルトで働くことができると書かれているが、彼らは7-12ボルトを推奨しています。 GSMモジュールのデータシートでは、負荷時の消費電力については何も言われていません。 さて、メガは部品倉庫に行きます。 心が沈むと、ラップトップの電源を入れます。USBから+ 5Vライン経由で+ 19Vを受け取りました。 それは機能し、USBでさえ燃え尽きませんでした。 保護してくださったLenovoに感謝します。



焼けたコンバーター



コンバーターを燃やした後、消費電流を検索しました。 したがって、ピーク-2A、標準-0.5A。 これは明らかに、arduinoコンバーターの能力を超えています。 別の食事が必要です。



プログラミング


このモジュールは、幅広いデータ転送機能を提供します。 音声通話とSMSから始まり、実際にはGPRSで終わります。 後者の場合、ATコマンドを使用してHTTP要求を実行できます。 いくつか送信する必要がありますが、それだけの価値があります。実際に手動でリクエストを生成する必要はありません。 GPRSを介したデータ伝送チャネルのオープンには、いくつかのニュアンスがあります。従来のAT + CGDCONT = 1、「IP」、「apn」を覚えていますか? したがって、ここでも同じことが必要ですが、少し注意が必要です。



特定のURLでページを取得するには、次のコマンドを送信する必要があります。

AT+SAPBR=1,1 //  (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //  - GPRS AT+SAPBR=3,1,"APN","internet" //APN,   - internet AT+HTTPINIT // HTTP AT+HTTPPARA="CID",1 //Carrier ID  . AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" // URL,  sprintf   AT+HTTPACTION=0 //   GET //  AT+HTTPTERM // HTTP
      
      







その結果、接続がある場合、サーバーから応答を受け取ります。 つまり、サーバーがGETで座標データを受け入れた場合、座標データを送信する方法は既にわかっています。



栄養


ArduinoコンバーターからGSMモジュールに電力を供給することは悪い考えであったため、同じebayで12v-> 5v、3Aコンバーターを購入することにしました。 ただし、モジュールは5V電源を好みません。 ハックに行きます:5Vをピンに接続し、そこから5VがArduinsから供給されます。 次に、組み込みのモジュールコンバーター(arduinoコンバーター、MIC 29302WUよりもはるかに強力)は、モジュールが必要とするものを5Vにします。



サーバー



サーバーは、座標を保存し、Yandex.mapsに描画するというプリミティブなものを作成しました。 将来的には、多くのユーザーのサポート、「武装/非武装」の状態、車両システム(点火、ヘッドライトなど)の状態など、さまざまな機能を追加することができ、車両システムを制御することさえ可能です。 もちろん、フルウェイトのアラームにスムーズに変わるトラッカーを適切にサポートしています。



フィールドテスト



ケースなしで組み立てられたデバイスは次のとおりです。



組み立てられたデバイス



電力変換器をインストールし、デッドDSLモデムからケースに入れた後、システムは次のようになります。

その場合



ワイヤーをはんだ付けし、アルデュインのブロックからいくつかの接点を取り出しました。 次のようになります。

画像



私は車に12Vを接続し、モスクワの周りを走り、軌道に乗った。

追跡する

トラックポイントは十分に離れています。 その理由は、GPRSを介したデータの送信には比較的長い時間がかかり、この時点では座標が読み取られないためです。 これは明らかなプログラミングエラーです。 これは、まず、時間とともに座標の束をすぐに送信することによって処理され、次にGPRSモジュールとの非同期操作によって処理されます。



車の助手席で衛星を検索する時間は数分です。



結論



自分の手でarduinoにGPSトラッカーを作成することは可能ですが、簡単な作業ではありません。 ここでの主な問題は、有害な要素(水、温度)にさらされず、金属で覆われず(GPSとGPRSがシールドされる)、特に目立たないように、デバイスを車に隠す方法です。 キャビンに横たわり、シガーライターソケットに接続している間。



トラッカーがメインタスクを実行しますが、よりスムーズなトラックのためにコードを修正する必要もあります。



中古デバイス







文学



  1. の。 Arduino Webサイト (ボードとそのプログラミングに関する詳細情報が含まれています)
  2. TinyGPS (ページ中央のダウンロードリンク)
  3. GPS SKM53データシート
  4. SIM900のGSM / GPRSシールドの説明
  5. SIM900 ATコマンド
  6. Yandex.Mapsドキュメント




コード



公開されたコードは、誰でも法律で許可されている目的に使用できます。 コードの品質はひどいです。それにもかかわらず、それはテストバージョンだからです。 もっと美しいものを追加したら、更新します。



arduinoのコードをコンパイルするには、tinyppsライブラリをインポートする必要があります。



UPDコード: GDrive

スケッチ



All Articles