等々、個人ユーザーには敷居が高い代物でした。今回発売された気圧センサモジュールはモジュール化されただけでなく価格が大幅に下がりました。思っている人も多いのではないでしょうか?どんな感じで制御して、どんな情報が得られるのか...試食してみました。注意事項SCP1000-D01はVTIテクノロジー社の製品です。■モジュール購入したセンサは除湿剤入りのパックに入っていました。気圧センサーは既にハンダ付けされています。基板下に8pinDIP型ピンコネクタが接続されているので、ブレッドボードにそのまま差し込むことができます。写真は2.54mmユニバーサル基板に載せた状態です。全体サイズを確認できると思います。■ブレッドボード作成例これまでのサンプルに準ずるわけではありませんが、PIC12F683とセンサモジュールを接続して実験を行いました。少ピンマイコンなので電源以外の6ピンを総て使用しました。PIC12F683にはシリアル通信、SPI通信の機能が無いのでポート制御で代用しています。センサモジュールから得られた情報はシリアル通信で外部(青いワイヤ)に出力しています。この信号をレベル変換してパソコン側でモニタします。ポートが不足したのでリセット用の端子(GP3/_MCLR)を入力ポートに割り付けています。センサがモジュール化されているのでPIC12F683以外のマイコンでも容易に接続することができます。センサモジュールの動作電圧は最大3.6Vなのでマイコン側の電圧が5V系の場合はレベル変換が必要です。TXDは通信速度9600bps相当の調歩同期式シリアル通信で使用しますRS232Cを利用してパソコンに直結するのであれば以下のインタフェースICが利用できます。電源電圧が3.3V~5Vまでと範囲が広いのが特徴です。どれも秋月電子通商様で取り扱っています。データシート、必要な外付け部品も添付されるので、回路例の通りに作成すればまず動作します。上記I-00469と同じ構成で2個入り(コスト的にはこれがベター)RS232Cは枯れたインタフェース(?)ですが扱いは非常に簡単です。最近のパソコンにはインタフェースコネクタが無い場合もありますが「USB-シリアル変換器」を接続すれば利用することができます。今回利用したマイコンにはシリアル通信用の機能が備わっていません。扱いが簡単ゆえ、出力ポートを時間を区切って制御することで疑似的にシリアル通信を実現することができます。必要であればマイコンを動作しつつ内部情報をパソコンで表示することもできるので、今回の実験とは別に「RS232Cレベル変換器」を1台作成しておくと何かと便利です。通信アプリケーションを利用してモニタしました。温度は別として気圧の値が正しいか否かは微妙(?)です。公式発表される気圧は観測地点の標高と気温を利用し、海面校正された値になるので単純比較はできません。別途アプリケーションが必要ですが、今回は試食レベルなので単純数値化までです。センサから気圧だけでなく温度を得られますが、あくまでもセンサデバイス内部の温度です。厳密に言えば得られる温度は周囲の気温と異なりますが、近似値として利用できると思います。詳細な数字を表示しようとしましたが...今回はデバッグ処理を含めたプログラム容量の関係で簡易演算だけで済ませました。センサモジュールの電源電圧のこともあるので、専用の小型マイコンを間に挟み、より高度なアプリケーションは別のマイコンに行わせる方法もあります。電源電圧と実数演算...これが課題です。注意:新しいページでカシオ計算機株式会社殿のページが開きます。利用しています(開発環境の準備)。物理量計算で手抜きをしていますがご容赦。今回のサンプルプログラムではモジュール分割を行っています。センサからデータを取得し文字列に成形して送信します。圧力センサを制御します。開発環境、デバイスに依存した部位を集約しています。PIC12F683はSPI通信、シリアル通信機能がないので総てポート制御で代用しています。極論ですが「device.c」をカスタマイズすればマイコンの種類を問わず利用することができます。SPI通信やシリアル通信をマイコンが備える機能に置き換えることでプログラム容量を小さく、また高速に制御することができます。気圧センサは気圧は30kPa~120kPaまで、温度は-20°Cから+70°Cまでを測定範囲としています。測定データは補正済みの物理量が取得できるので、取得した値に対して特別な演算を加える必要がありません。そうそう、天気予報で目にする気圧の値「hPa(ヘクトパスカル)」は「100Pa=1hPa」です。(2)測定モード用途に応じて測定モードを選択することができます。特別な仕様はありませんが、機能面で列挙してみます。あり(4)気になることところで...デバイスメーカはVTIテクノロジー社。最新データシートを入手すべくアクセス...。ん?製品見つからない。私にもよくわからないのですが、VTIテクノロジージャパン様のホームページからデータシートを探すことができません。検索エンジンを使うと見ることのできるページもありますが...。2010/06/23加筆。VTIテクノロジーさん、ありがとうございます。気圧センサは電子工作レベルで扱うものではないから?このあたりは大人の事情なのかもしれません。データシートは秋月電子様のページからダウンロードできるので、そちらを利用してください(2/10現在)。基板モジュールを基準にしていますSCP1000-D01はSPI通信で制御します。一般的な通信方式なのでマイコンによっては内蔵SPIコントローラにより容易に通信することができます。今回利用したマイコンPIC12F683はSPIコントローラがありません。そのような場合は汎用入出力ポートを利用して制御します。必須TRIG信号はセンサのレジスタを書き換えることで代用することができます。DRDY信号はセンサからステータスを読み出すことで代用することができます(注:ポーリングによる負荷増)。CSB信号のActive論理は他のSPI通信をサポートするデバイスと異なる場合があるので注意してください。別型番でSCP1000-D11があります。こちらはTWI通信と呼ばれるIIC通信に「似た」方式で通信を行います。絵は簡単に描いています。基本はデータシートに記述されているタイミングチャートを参照してください。緑色の網掛けの部分はタイミングチャートから読み取ったデータ処理推奨期間です(個人的な見解)。いわゆるSPI通信の形式ですが、マイコン内蔵のSPI通信用コントローラを使用する場合はデータの変化タイミングに注意してください。信号線をポートで制御する場合、4Mhz相当の動作周波数であれば速度については問題ないと思いますが、信号の切り替わりとデータの変化のタイミングだけはしっかり押さえる必要があります。気になる場所は「tHOL」。マイコン側のデータ保持期間になりますがMin20nsとありました。「絵」としてはクロックの立下りの後ろで変化させてますが「tCH」がMin100nsであることから、センサ側はクロックの立ち上がりでデータ(MOSI)を読み出しているようです。1つ気になる場所は「tVAL2」でしょうか。クロック(SCK)の立下りから次のデータに変化するまでの時間がTyp50nsです。センサからのデータ(MISO)はクロックの立ち下がり前に読み出す方が無難です。今回のサンプルプログラムではクロックの立ち上がり前に読み出しを行いましたが、クロックの立ち上がり後に読み出した方が良かったかな?書き込みと読み出しのタイミングを合わせたかっただけですが...。(3)レジスタ代表的なレジスタを掲載します。各レジスタ(未掲載含む)の詳細についてはデータシートを確認願います。センサは測定完了をDRDY信号で通知します。このタイミングでマイコンは各データを取得しますが、何らかの要因でマイコン側が気圧データを取得せずに次の測定完了が発生した場合はリアルタイムエラーが発生します。リアルタイムエラーはSTATUSレジスタにより知ることができますが、その直前で読み出した気圧データの値は信頼性が低いことが予想されるので扱いには注意してください(上位データと下位データの時間的な不一致)。リアルタイムエラーの解除はDATARD16レジスタのデータをダミーリードすることで行います。(4)レジスタ指定とデータマイコン側がマスタでセンサ側がスレーブです(例外無し)。マスタはレジスタアドレスを送信し、続けてデータの送信、データの受信を行います。各データは8ビットの倍数です。図中では表現していませんが、データはクロック(SCK)に合わせてMSBから1ビットずつ順番に指定します。チップセレクト信号(CSB)は通信を開始する前にLowとし、通信中はLowを維持します。通信終了後Highに戻します。センサからデータを読み出す場合、コマンド送信完了からデータの受信までの間で待機は不要です。気圧データはDATARD8(MSB側)、DATARD16(LSB側)と呼ばれる2つのレジスタから取得し、得られたデータを結合して1つの気圧データとして扱います。1ビットの重みは0.25Paです。4で得ることができます。整数演算では小数点以下の切り捨てが生じるので注意してください。100Pa)必要があるので、最初の演算で得られる小数点以下はあまり気にしなくても良いと思います(どこかの桁で四捨五入を行う必要はあるかもしれませんが)。数値表現上の最大値は0x7FFFFになります。これは131071.75Pa(=1310.7175hPa)に相当します。センサの性能は30Kpa~120Kpaなので、元の数値を予め範囲チェック(0x1D4C0~0x75300)してセンサエラー処理を作成しておくと何かと便利かもしれません。温度データはTEMPOUTレジスタから取得します。1ビットの重みは0.05度です。データには符号が付いているので、14ビットの符号付き整数として扱う必要があります(マイナスは2の補数表現)。20で得ることができます。整数演算では小数点以下の切り捨てが生じるので注意してください。値の取りうる範囲です。元の数値を予め範囲チェックして...気圧データの場合と同じですね気圧データ、温度データ共に測定限界点は幅を持っていると思われますが、何分にも実験環境がないので確認できません。気圧関係は設備が必要...。数値上は有効範囲の1割増しでチェックしておけば良いと思われます。ステータス系のデータはビット単位で意味を持ちます。ビットの割り付けについてはデータシートを参照願います。■センサの運用(1)はじめにセンサの運用はデータシートに記載されている通りなのですが、気になる個所だけピックアップしてみます。(2)初期設定センサ電源投入時、RSTRレジスタへASICリセット書き込み後、マイコンはセンサの起動完了を待機します。起動完了状態はセンサからステータスを読み出すことにより判断します。STATUSレジスタを繰り返し読み出す代わりに90msの待機で代用することができます。