以前のチュートリアルでは、GPSモジュールをコンピューターとインターフェースする方法、Arduino GPSクロックを構築する方法、GSMとGPSを使用して車両を追跡する方法について学習しました。このプロジェクトでは、GPS、GSM、加速度計を使用して、Arduinoベースの車両事故警報システムを構築します。加速度計は車両の軸の突然の変化を検出し、GSMモジュールは事故の場所を携帯電話に警告メッセージを送信します。事故の場所は、GPSモジュールからの緯度と経度から導出されたGoogleマップリンクの形式で送信されます。メッセージには、車両の速度もノット単位で含まれています。デモビデオを見る最後に。この車両事故警報プロジェクトは、ハードウェアとソフトウェアにわずかな変更を加えるだけで、追跡システムなどとしても使用できます。
必要なコンポーネント:
- Arduino Uno
- GSMモジュール(SIM900A)
- GPSモジュール(SIM28ML)
- 加速度計(ADXL335)
- 16x2 LCD
- 電源
- 接続線
- 10 K-POT
- ブレッドボードまたはPCB
- 電源12v1amp
プロジェクトに入る前に、GPS、GSM、加速度計について説明します。
GPSモジュールとその動作:
GPSは全地球測位システムの略で、正確なUTC時間(協定世界時)で地球上の任意の場所の緯度と経度を検出するために使用されます。GPSモジュールは、プロジェクトの事故の場所を追跡するために使用されます。このデバイスは、衛星から毎秒、時刻と日付の座標を受信します。以前 、車両追跡システムで$ GPGGA文字列を抽出 して、緯度と経度の座標を見つけました。
GPSモジュール は、追跡位置に関連するデータをリアルタイムで送信し、NMEA形式で非常に多くのデータを送信します(下のスクリーンショットを参照)。NMEA形式は複数の文で構成されており、必要な文は1つだけです。この文は$ GPGGAから始まり 、座標、時間、その他の役立つ情報が含まれています。この GPGGA は、全地球測位システム修正データと呼ばれ ます。NMEAセンテンスとGPSデータの読み取りについて詳しくはこちらをご覧ください。
文字列内のコンマを数えることで、$ GPGGA文字列から座標を抽出できます。$ GPGGA文字列を見つけて配列に格納すると、Latitudeは2つのコンマの後に、Longitudeは4つのコンマの後に見つけることができます。これで、この緯度と経度を他の配列に入れることができます。
以下は、$ GPGGA文字列とその説明です。
$ GPGGA、104534.000,7791.0381、N、06727.4434、E、1,08,0.9,510.4、M、43.9、M,, * 47 $ GPGGA、HHMMSS.SSS、latitude、N、longitude、E、FQ、NOS、HDP 、高度、M、高さ、M 、、チェックサムデータ
識別子 |
説明 |
$ GPGGA |
全地球測位システムの修正データ |
HHMMSS.SSS |
時間、分、秒、ミリ秒の形式の時間。 |
緯度 |
緯度(座標) |
N |
方向N =北、S =南 |
経度 |
経度(座標) |
E |
方向E =東、W =西 |
FQ |
品質データを修正する |
NOS |
使用されている衛星の数 |
HDP |
精度の水平希釈 |
高度 |
高度(海抜メートル) |
M |
メーター |
高さ |
高さ |
チェックサム |
チェックサムデータ |
GSMモジュール:
SIM900は完全なクアッドバンドGSM / GPRSモジュールであり、顧客や愛好家が簡単に使用できるように組み込むことができます。SIM900 GSMモジュールは、業界標準のインターフェースを提供します。SIM900は、低消費電力で音声、SMS、データにGSM / GPRS 850/900/1800 / 1900MHzのパフォーマンスを提供します。市場で簡単に入手できます。
- AMR926EJ-Sコアを統合したシングルチッププロセッサを使用して設計されたSIM900
- 小型のクアッドバンドGSM / GPRSモジュール。
- GPRS対応
ATコマンド:
ATは注意を意味します。このコマンドは、GSMモジュールを制御するために使用されます。Arduinoを使用した以前のGSMプロジェクトの多くで使用した通話とメッセージング用のコマンドがいくつかあります。GSMモジュールのテストには、ATコマンドを使用しました。ATコマンドGSMモジュールを受信した後、OKで応答します。これは、GSMモジュールが正常に機能していることを意味します。以下は、このプロジェクトでここで使用したATコマンドです。
ATE0エコーオフの場合AT + CNMI = 2,2,0,0,0
(GSMモジュールの詳細については、ここでさまざまなマイクロコントローラーを使用したさまざまなGSMプロジェクトを確認してください)
加速度計:
加速度計のピンの説明:
- Vcc5ボルト電源はこのピンに接続する必要があります。
- X-OUTこのピンはx方向にアナログ出力を提供します
- Y-OUTこのピンはy方向にアナログ出力を提供します
- Z-OUTこのピンはz方向にアナログ出力を提供します
- GNDグラウンド
- STこのピンはセンサーの感度を設定するために使用されます
また、加速度計を使用した他のプロジェクトも確認してください。Arduinoと加速度計ベースのハンドジェスチャ制御ロボットを使用したピンポンゲーム。
回路の説明:
この車両事故警報システムプロジェクトの回路接続 は簡単です。ここでは、GPSモジュールのTxピンがArduinoのデジタルピン番号10に直接接続されています。ここでソフトウェアシリアルライブラリを使用することにより、ピン10と11でシリアル通信を許可し、それぞれRxとTxにし、GPSモジュールのRxピンを開いたままにしました。デフォルトでは、Arduinoのピン0と1がシリアル通信に使用されますが、SoftwareSerialライブラリを使用することで、Arduinoの他のデジタルピンでのシリアル通信を許可できます。12ボルトの電源はGPSモジュールに電力を供給するために使用されます。
GSMモジュールのTxピンとRxピンは、ArduinoのピンD2とD3に直接接続されています。GSMインターフェースについては、ここではソフトウェアシリアルライブラリも使用しています。GSMモジュールも12v電源から電力を供給されます。オプションのLCDのデータピンD4、D5、D6、およびD7は、ピン番号6、7、8、及びアルドゥイーノ9に接続されています。LCDのコマンドピンRSとENはArduinoのピン番号4と5に接続され、RWピンは直接グランドに接続されています。ポテンショメータは、LCDのコントラストや明るさを設定するためにも使用されます。
このシステムには事故を検出するための加速度計が追加されており、そのx、y、z軸ADC出力ピンはArduino ADCピンA1、A2、A3に直接接続されています。
作業説明:
このプロジェクトでは、Arduinoを使用してGPS受信機とGSMモジュールを使用してプロセス全体を制御し ます。 GPS受信機は車両の座標を検出するために使用され、GSMモジュールは座標とGoogleマップへのリンクを含むアラートSMSを送信するために使用されます。加速度計、つまりADXL335は、事故や軸の突然の変化を検出するために使用されます。また、オプションの16x2 LCDは、ステータスメッセージまたは座標を表示するためにも使用されます。GPSモジュールSIM28MLとGSMモジュールSIM900Aを使用しました。
プログラミング後にハードウェアの準備ができたら、車両に取り付けて電源を入れることができます。これで、事故が発生するたびに、車が傾いて、加速度計が軸の値を変更します。これらの値はArduinoによって読み取られ、軸に変更が発生したかどうかを確認します。変更が発生した場合、ArduinoはGPSモジュールデータから$ GPGGA文字列を抽出して座標を読み取り(GPSの動作については上記で説明)、事故現場の位置座標を使用して、事前定義された番号にSMSを警察、救急車、または家族に送信します。メッセージには事故の場所へのGoogleマップのリンクも含まれているため、場所を簡単に追跡できます。メッセージを受け取ったら、リンクをクリックするだけで、Googleマップにリダイレクトされ、車両の正確な位置を確認できます。ノット単位の車両速度(1.852 KPH)もSMSで送信され、LCDパネルに表示されます。プロジェクトの下にある完全なデモビデオを確認してください。
このプロジェクトでは、コードに最小値と最大値を入力することで、加速度計の感度を設定できます。
ここでのデモでは、指定された値を使用しています。
#define minVal -50 #define MaxVal 50
ただし、より良い結果を得るには、50の代わりに200を使用するか、要件に応じて設定することができます。
プログラミングの説明:
完全なプログラムは、以下のコードセクションに記載されています。ここでは、そのさまざまな機能について簡単に説明します。
まず、必要なすべてのライブラリまたはヘッダーファイルを含め、計算およびデータの一時的な保存のためにさまざまな変数を宣言しました。
この後、GSMモジュールを初期化し、ATコマンドを使用してその応答を確認する関数 void initModule(String cmd、char * res、int t) を作成しました。
void initModule(String cmd、char * res、int t){while(1){Serial.println(cmd); Serial1.println(cmd); delay(100); while(Serial1.available()> 0){if(Serial1.find(res)){Serial.println(res); delay(t); 戻る; } else {Serial.println( "Error"); }} delay(t); }}
この後、 void setup() 関数で、ハードウェアとソフトウェアのシリアル通信、LCD、GPS、GSMモジュール、および加速度計を初期化しました。
void setup(){Serial1.begin(9600); Serial.begin(9600); lcd.begin(16,2); lcd.print( "事故警報"); lcd.setCursor(0,1); lcd.print( "システム"); delay(2000); lcd.clear();………………..。
加速度計の校正プロセスも セットアップ ループで行われ ます 。ここでは、いくつかのサンプルを取得してから、x軸、y軸、およびz軸の平均値を見つけました。そして、それらを変数に格納します。次に、これらのサンプル値を使用して、車両が傾いた(事故)ときの加速度計の軸の変化を読み取りました。
lcd.print( "Callibrating"); lcd.setCursor(0,1); lcd.print( "Acceleromiter"); for(int i = 0; i
この後、 void loop() 関数で、加速度計の軸の値を読み取り、キャリブレーションで取得されたサンプルを使用して変更を抽出するための計算を実行しました。これで、変更が定義されたレベルよりも多かれ少なかれある場合、Arduinoは事前定義された番号にメッセージを送信します。
void loop(){int value1 = analogRead(x); int value2 = analogRead(y); int value3 = analogRead(z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-value3; Serial.print( "x ="); Serial.println(xValue); Serial.print( "y ="); Serial.println(yValue); Serial.print( "z ="); Serial.println(zValue);………………..。
ここで我々はまた、のような様々なpuposesのためのいくつかの他の機能を作成しました )(空gpsEventを 、GPS座標を取得するために )(空coordinate2decを GPS列から座標を抽出するための、および小数点値に変換し、 無効show_coordinate() シリアルモニター上の値を表示すると、 LCD、そして最後に、事前定義された番号にアラートSMSを送信するための void Send() 。
完全なコードとデモビデオを以下に示します。コード内のすべての機能を確認できます。