要約
このアプリケーションノートでは、1-Wire®技術に基づいて、車両の位置を追跡し、車両の運転手が正規の運転者かどうかを確認するための簡単な方法について述べています。この装置は、盗難車両の発見、車両運行記録の自動作成、バス会社やトラック運送会社の全車両の管理など、数多くの用途に使用できます。この方法の一例を説明します。ここでは、Garmin社GPS 35 GPSレシーバ、Siemens社TC35 GSMモジュール、DS1990A iButton®、Parallax社BASIC Stamp® (BS2P)マイクロコントローラ、および当然ですがサンプルソースコードを使用しています。
本記事に類似した内容が「EPD」誌の2002年11月号に掲載されています。
このアプリケーションノートでは、車両の位置を追跡し、車両の運転手が正規の運転者かどうかを確認するための簡単な方法を述べています。この装置は、盗難車両の発見、車両運行記録の自動作成、バス会社やトラック運送会社の全車両の管理など、数多くの用途に使用できます。
緯度と経度で表した座標が標準的な携帯電話に「文字」メッセージとして転送されます。転送された「文字」メッセージを利用して、車両の正確な位置を求めることができます。
このプロジェクトに必要なコードは、以下のサイトからダウンロードできます。
- EPD-v2-01-3E.BSP:BASIC Stamp用メインプログラム
- 1WIRE-ID.BSP:DS1990A iButtonのシリアル番号の読み取りプログラム
構成要素
このプロジェクトは、以下の構成要素を使用しています。
- GPSレシーバ(Garmin社のGPS 35)。この部品により、車両の位置情報が得られます。
- GSMモジュール(Siemens社のTC35)。GSMモジュールは、あらかじめプログラミングされた携帯電話番号にSMS (文字メッセージ)を送るために使用します。
- iButton (DS1990A)。iButtonにより、正規の運転者であるかどうかを確認します。
- Parallax社 BASIC Stamp (BS2P)およびBASIC Stamp 「Board of Education」開発ボード(www.parallaxinc.com)
- ソフトウェア:
- EPD-v2-01-3E.BSP:BASIC Stamp用メインプログラム
- 1WIRE-ID.BSP:DS1990A iButtonのシリアル番号の読み取りプログラム
ブロック図
図1. ブロック図。
GPSレシーバは情報を「NMEA」形式で提供します。緯度と経度は「$GPRMC」文から取り出すことができます(「北緯ABC度」、「西経DEF度」の形式)。
GSMモジュールは、あらかじめプログラミングされた携帯電話にSMSメッセージ(文字メッセージ)を送るために使用します。
DS1990A iButton (「シリアル番号iButton」としても知られる)は、識別手段すなわち「キー」として使用します。iButtonには、工場出荷時にプログラミングされた6バイトの固有IDと2バイトのCRC (誤り訂正)があります。このキーコードは読み取り専用です。システムは、予備キーまたは2人目の運転者のキーとして、2つのiButtonキーを受け入れることができます。さらに3つ目以降のキー番号も簡単に追加できます。
動作
始動時、BASIC Stampが、以下の2つの項目を連続してスキャンします。
- iButtonの入力ポートへの瞬間的な接続
- エンジンの点火
通常動作では、「正規の」iButtonがポートに接続された後、25秒以内に車両が始動します。
次の状態になると、侵入が検出されます。
- 車両始動までの25秒以内に、有効なiButtonがない状態でエンジンの点火が検出された場合。
- 車両始動までの25秒以内に、iButtonが接続されていない場合。この場合も侵入状態となります。
侵入発生が確定すると、BASIC StampはGPSレシーバからの情報を求めます。BASIC Stampは、GPSレシーバのシリアル出力に文字列「$GPRMC」が現れるのを待ちます。
- 次にBASIC Stampは、あらかじめプログラミングされた携帯電話の番号宛てにSMSメッセージと座標を送ります。この座標はGPSから受信した「GPRMC」文より取り出したものです。
- このプロセスは2分毎に繰り返され、所有者に車両の位置を通知します。
すべてを統合
このプロジェクトの中核となるのはBASIC Stampです。BASIC Stampは、GPSレシーバ、GSMモデム、iButton、および車両のエンジン点火接続部へのインタフェースになります。
このプロジェクトでは、エンジン点火線を使用して、車両が始動したかどうかを検出していますが、他のインジケータも使用できます(例:超音波トランスデューサやその他の侵入検出装置)。
- GPSレシーバの出力はBASIC StampのP0に接続します。
- GSMモジュールのレシーバ入力はBASIC Stampのピン1すなわち「Sout」に接続します。
- BASIC StampのP1はエンジン点火接続部に接続します。ハイ状態はエンジン点火がオンであることを示します(その逆はオフです)。
- P15はiButton用のインタフェースです。
BASIC StampのBS2PはiButton用の1-Wireインタフェースに対応しますが、旧型はこのインタフェースには対応しません。
携帯電話番号の入力
コード内に携帯電話番号をプログラミングするには、以下に示すプログラム内の指定した行に携帯電話番号を入力します。
======================================================
DEBUG "+44********** " '宛先の携帯電話番号をここに入力
======================================================
以下の書式に従う必要があります。
「+ 国コード」(上の例ではイギリスの国コードを使用)の後に携帯電話の番号(番号の先頭の0を省略)
これは、システムがSMSメッセージと車両位置を送信する場合に使用する番号です。
iButtonシリアル番号の入力
使用するiButtonの「iButtonシリアル番号」を入力します。使用するiButtonが1つだけの場合は、入力後、2番目のiButton用のスロットに1番目のシリアル番号をコピーします。
以下に示すようにiButtonのキーコードを入力します。この例の場合、iButtonのシリアル番号は入力済みです。「$」記号の後のナンバーを置き換えてください。シリアル番号は16進数表記です。
特定のiButtonのシリアル番号を表示する別のプログラムが供給されます。ここで、シリアル番号を入力すると、これがBASIC Stampにダウンロードされる最終コードとなります。
「1番目のiButtonシリアル番号を以下の行に入力してください」
IF romData (0) <> $03 THEN CheckSecond '第1バイト
IF romData (1) <> $F0 THEN CheckSecond
IF romData (2) <> $BC THEN CheckSecond
IF romData (3) <> $08 THEN CheckSecond
IF romData (4) <> $10 THEN CheckSecond
IF romData (5) <> $00 THEN CheckSecond
IF romData (6) <> $00 THEN CheckSecond
IF romData (7) <> $30 THEN CheckSecond '第8バイト
GOTO ButtonOK
CheckSecond:
「2番目/予備のiButtonシリアル番号を以下の行に入力してください」
IF romData (0) <> $01 THEN BadButton '第1バイト
IF romData (1) <> $68 THEN BadButton
IF romData (2) <> $21 THEN BadButton
IF romData (3) <> $24 THEN BadButton
IF romData (4) <> $08 THEN BadButton
IF romData (5) <> $00 THEN BadButton
IF romData (6) <> $00 THEN BadButton
IF romData (7) <> $31 THEN BadButton '第8バイト
以上を修正すると、システムはいずれの車両も追跡できるようになります。
このプロジェクトに必要なコードは、以下のサイトからダウンロードできます。
- EPD-v2-01-3E.BSP:BASIC Stamp用メインプログラム
- 1WIRE-ID.BSP:DS1990A iButtonのシリアル番号の読み取りプログラム
この記事に関して
製品カテゴリ
{{modalTitle}}
{{modalDescription}}
{{dropdownTitle}}
- {{defaultSelectedText}} {{#each projectNames}}
- {{name}} {{/each}} {{#if newProjectText}}
-
{{newProjectText}}
{{/if}}
{{newProjectTitle}}
{{projectNameErrorText}}