
■ デジタル出力の気圧センサー LPS25Hを制御する ■ |
非常にコンパクトで、少ない配線とわずかな外付け部品で高精度な気圧を測定できる、気圧・温度センサーLPS25Hをテストします。
LPS25Hは、2線式のI2Cと4線式のISPの両方のインターフェースを搭載しているので、回路構成に合わせてどちらでも選択することができます。
工場での較正データはデバイス内部で計算されるので、出力データは簡単な単位変換の割り算だけで気圧値と温度値が得られます。
下記に掲載してある旧型のLPS331APには致命的なデバイスのエラーがあり、秋月電子での取り扱いも無くなったので、後継のLPS25Hを導入します。
LPS331APとLPS25Hのモジュールはピン配置が同じですが、LPS25Hは割り込み出力が1つになったため、モジュールの6番ピンが未使用となっています。
内部のレジスターが各所で変更になっているため、プログラムの互換性はありません。
また、センサーが測定した気圧データをデバイス内部で平均化する、FIFOバッファーが新たに搭載されています。
これにより、これまで外部のマイコンで平均化(ローパス・フィルター)を行っていた作業を、デバイスの内部で行う事ができます。
LPS25Hの日本語マニュアルが見つからないので、私的に翻訳してあります。
個人で使用するために翻訳した物を掲載しておりますので、翻訳間違いや誤字による、
いかなる損害にも責任を負いません。 |

|
テストは、秋月電子のDIP変換基板に実装されたモジュールを使用しました。
・測定圧力範囲: 260〜1260hPa
・電源電圧: 1.7V〜3.6V
・消費電流: 25μA(平均) パワーダウン時: 0.5μA
・動作温度範囲: -30℃〜+105℃
・変換時間: ワンショット変換時 約36.7mS
|
 |
・秋月電子のモジュール基板にはLEDが付いていますが、このセンサーは
光や温度に敏感なので、LEDは必ず外すかLEDにつながるパターン
(写真の赤丸)を切って消灯して下さい。
|
LPS25Hの気圧・温度 測定テスト・プログラム |
● 回 路
・当ページに掲載のAVR
&
BASCOM-AVR トレーニング・ボードを使用して、LPS25Hを制御します。
・もちろん、各種のAVRやポートを選択することもできます。
・トレーニング・ボードとの接続は、SPI通信で行います。 端子名 : CS , SPC , SDI , SDO , INT1
・トレーニング・ボードは5V電源を使用し、LPS25Hは3.3V(最大3.6V)電源を使用するので、3端子
レギュレータと、通信線の5V→3.3V簡易レベル変換回路を組み込みます。
注意!
この図面を使用した、いかなる損害にも責任を負いません。
|
● プログラム
・マイコンとの通信は、4本の線で行うSPI通信ですが、圧力と温度の変換終了を調べるために、
INT1ピンを「データの準備完了」に設定して使用します。
・INT1ピンを使用せずにセンサーの内部レジスターから変換終了のステータスを読み出す事も可能
ですが、ステータスを読み出すためにセンサーとの通信を長く続けると、センサーの消費電力が
上がると共にデバイスの温度も上がるため、測定精度が悪くなります。
・このため、INT1ピンを使用するか、測定をワンショット・モードにして、センサーとの通信を極力
減らすことが得策です。
・テストプログラムでは、分解能を最高値にして、出力データ速度を1Hz(1秒)で変換を行います。
・LPS25Hの内蔵FIFOを有効にして、32個の移動平均を行わせます。
・INT1ピンをデータ準備完了(変換終了)に設定して、[H]レベルの割り込み信号を発生させます。
・変換が終了するとINT1ピンが[H]レベルになり、センサーの内部レジスターに移動平均した圧力値と
温度値の出力データが入ります。
・このデータは、工場での較正値を適用済みなので、簡単な単位変換の割り算だけで気圧値と
温度値が得られます
・LCDの表示は、センサーが計測を繰り返す1秒毎に更新されます。
・LCDの上段が移動平均された気圧値と温度値で、下段がそれぞれの16進値(HEX値)です。
注意! 著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。 (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)
|
|
 |
LPS25Hをブレッド・ボードでテスト。
センサーの注意点。
・気圧センサーLPS25Hは、光によって気圧値に誤差が出ます。
暗いケース内に入れるなどの工夫が必要です。
・ハンダ付け時のフラックスや基板洗浄時などの薬品類でセンサーが
故障する場合がありますので注意して下さい。
|
 |
LPS25Hの内蔵FIFO(移動平均)のテスト動画です。
・サンプルは1秒間隔、分解能は AVGT=64 , AVGP=512
・画面の上は、LPS25Hの内蔵FIFOを有効にして、32個の移動平均を
行わせた気圧値。
(0.01hPa単位まで安定しています)
・画面の下は、LPS25Hの内蔵FIFOを無しにした、測定の生データ。
(測定ノイズにより、0.1hPa程度の揺らぎが出ています)
|

■ デジタル出力の気圧センサー LPS331APを制御する ■ |
LPS331APは旧製品です。
後継品のLPS25H(上記)を推奨します。
LPS331APの日本語マニュアルが見つからないので、私的に翻訳してあります。
個人で使用するために翻訳した物を掲載しておりますので、翻訳間違いや誤字による、
いかなる損害にも責任を負いません。 |
 |
テストは、秋月電子のDIP変換基板に実装されたモジュールを使用しました。
・測定圧力範囲: 260〜1260hPa
・電源電圧: 1.71V〜3.6V
・消費電流: 30μA(平均) パワーダウン時: 0.5μA
・動作温度範囲: -40℃〜+85℃
・変換時間: ワンショット変換時 約41.5mS
・秋月電子のモジュール基板にはLEDが付いていますが、
このセンサーは光や温度に敏感なので、LEDは必ず外すか
パターンを切って消灯して下さい。 |
LPS331APの気圧・温度 測定テスト・プログラム |
● 回 路
・当ページに掲載のAVR
&
BASCOM-AVR トレーニング・ボードを使用して、LPS331APを制御します。
・もちろん、各種のAVRやポートを選択することもできます。
・トレーニング・ボードとの接続は、SPI通信で行います。 端子名 : CS , SPC , SDI , SDO , INT1
・トレーニング・ボードは5V電源を使用し、LPS331APは3.3V(最大3.6V)電源を使用するので、3端子
レギュレータと、通信線の5V→3.3Vレベル変換回路を組み込みます。
注意!
この図面を使用した、いかなる損害にも責任を負いません。
|
● プログラム
・マイコンとの通信は、4本の線で行うSPI通信ですが、圧力と温度の変換終了を調べるために、
INT1端子を「データの準備完了」に設定して使用します。
注意.モジュールの説明書にあるような、変換を開始させた後で、変換のタイミングと非同期にデータ
を読み出すと、レジスターの更新にタイムラグがあるため、データがおかしくなる可能性があります。
[STATUS_REG](ステータス・レジスター)や INT1を「データの準備完了」に設定して、変換の終了を
待つか、[CTRL_REG1](制御レジスタ1)の[BDU]をONにします。
・テストプログラムでは、分解能を最高値にして、ワンショット・モードで変換を行います。
・BASCOM-AVRには、SHIFTOUT,SHIFTIN命令が用意されていますので、簡単な記述で通信が
可能です。
・変換が終了すると、内部レジスターに圧力と温度値の出力データが入ります。
・このデータは、工場での較正値を適用済みなので、簡単な単位変換の割り算だけで気圧値と
温度値が得られます
・変換は1秒毎に行います。
・気圧値は、0.3hPaほどのバラツキが出るため、移動平均を行い変動を抑えます。
・LCDの上段がセンサーの出力値で、下段が移動平均された値です。
注意! 著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。 (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)
|
|
 |
LPS331APとMPL115A1の比較。
LCD上段がLPS331AP、下段がMPL115A1の値。
1〜2hPaの差が出ています。
規格上はMPL115A1の方が、5倍ほど絶対誤差が大きいことに
なっています。
|
 |
センサーの注意点。
LPS331APやMPL115A1の気圧センサーは、光によって気圧値に
誤差が出ます。
特にLPS331APは感度が良いので、暗いケースに入れるなどの
注意が必要です。
上−蛍光灯の光があたっている。
下−黒い紙ケースで遮光。 約0.2hPaの差が出ています。
|
 |
高度の測定。
テスト段階なので、気圧値の差分だけの確認です。
上−床から1m上で測定。
下−床の上で測定。
周囲の気圧値も微妙に変化しており、差分は常に一定ではありま
せんが、10回上下してほぼ0.1hPaの気圧差つまり高度差が確認
できます。
|
 |
測定中の動画です。
|
※ テスト時のロットで、「秋月電子」と「ストロベリー・リナックス」にて販売されているLPS331APには、
デバイスの不具合またはマニュアルの誤記と思われる症状が何点か確認されておりますので
ご注意下さい。
1. 自動モードで、[RES_CONF]レジスターを、77h,76h,74h,70h以外に設定すると、指定した変換間隔が
不定期に飛んでしまう(変換しない時間が出る)現象があります。
例えば、1Hz(1秒)に設定すると、数秒毎に1〜3秒くらい変換が停止してしまいます。
2. [BOOT](メモリー内容の再起動)と[SWRESET](ソフトウェアからのリセット)を同時に立てると、
ソフトウェア・リセットが働かない。
[BOOT]と[SWRESET]は、別々に処理するようにします。
3. [STATUS_REG](ステータス・レジスター)は、[SWRESET](ソフトウェア・リセット)ではクリアされない。
デバッグ中などに、デバイスの電源を切らずにソフトウェア・リセットを行う場合は、[PRESS_OUT]
(圧力データ)と[TEMP_OUT](温度データ)レジスターを空読みして、フラグをクリアします。
4. ワンショット変換が終わっていない時点でデバイスをパワーダウン・モードにすると、次に[PD]ビット
でパワーオンにしても、変換が一切行われずに止まったままになってしまう。
(通常、ワンショット変換ビットは変換が終わると自動的にクリアされるが、これがクリアされない)
パワーダウン・モードにする場合は、ワンショット変換ビット(CTRL_REG2のONE_SHOT)を
必ず手動リセットする必要があります。
特性についての難点。
1. 変換時間(間隔)による誤差。
1秒 → 0.1秒 0.1〜0.2hPa低くなる。
2. 電源電圧による誤差。
3.3V → 2.7V 0.3〜0.4hPa低くなる。
|

■ LPS25H (LPS331AP) 気圧・温度・高低差 計の製作 ■ |
気圧・温度センサーLPS25H(LPS331AP)を使用した、気圧・温度・高低差計を製作しました。
持ち運びができる様に、ボタン電池を電源としてフリスクの空きケースに収めました。
回路の解説 |
1.電源回路
・ボタン電池「CR2032」 3Vを使用します。
・消費電流は、動作時で最大2mA、停止時はATtiny85のマニュアルから約0.2μAです。
(微少の電流計を持ち合わせていないので、想定値です)
2.AVRとクロック
・AVRマイコンは、8ピンのAVR「ATtiny85-20PU」を使用。
・動作クロックは、内臓発振器8MHzを1/8した、1MHzで動作しています。
3.気圧・温度センサー
・上記のテストで使用した、秋月電子の「LPS331使用 高精度大気圧センサーモジュール」です。
・後継品の「LPS25H使用 気圧センサーモジュール」も使用できます。
※モジュールは互換性がありますから、回路図と部品配置図は共用です。
「LPS331AP」を「LPS25H」に読み替えて下さい。
・AVRマイコンとの通信は、I2Cインターフェースです。
・このモジュール基板にはLEDが付いていますが、LEDは必ず外すかパターンを切って
消灯して下さい。
4.液晶表示器
・秋月電子の、「I2C接続 小型LCDモジュール 8x2行」 [AQM0802A-RN-GBW]です。
・AVRマイコンとの通信は、I2Cインターフェースです。
・このLCDは、リードのピッチが1.5mm間隔と中途半端なので、ユニバーサル基板への取り付け
には、変換基板が便利です。
・BASCOM-AVRで制御する際には、専用のライブラリを組み込む必要があります。
・LCD[AQM0802A , AQM1602XA]共用ライブラリ[ Lcd_AQMxx02.LBX ]をダウンロードして、
パソコンの下記フォルダーに保存してからコンパイルして下さい。
C:\Program Files (x86)\MCS Electronics\BASCOM-AVR\LIB
※専用ライブラリを使用して各自でプログラムを作るときは、下記を記載して下さい。
(プログラムの一例です。このページの製作(装置)には関係がありません。)
Config Scl = Portb.0
Config Sda = Portb.1
I2cinit
Const Vmode = 3
Config Lcd = 16x2 , Chipset = St7032
$lib "Lcd_AQMxx02.LBX"
Initlcd |
'I2CバスのSCLラインを接続するポートピンを設定する。(任意)
'I2CバスのSDAラインを接続するポートピンを設定する。(任意)
'I2Cバスを初期化する。
'[AQMxx02A]の電源電圧。(3.5V以下 = 3 , 3.5V以上 = 5)
'LCD表示を16文字2行に設定。
'LCD [AQM0802A]用のライブラリを組み込む。
'LCDを初期化する。 |
これ以降は、通常のLCD命令が使用できるようになります。
5.操作スイッチ
・汎用のタクトスイッチを2個使用します。
・フリスク ケースの高さに制限があるので、任意で選択して下さい。
6.ISP端子
・AVRにプログラムを書き込むためのISP端子は、完成後に使用することはありませんが、
ケースの高さ制限からAVRチップをICソケットにできないため、あえて取り付けてあります。
・6ピン オス 背の低いタイプ (2.54mm 3ピンX2列)
・AVRにプログラムを書き込む際には、[J1]のショートプラグを必ず抜いて下さい。
・通常動作では、必ず[J1]のショートプラグを差し込んで下さい。 (ハンダによるショートでも可)
|
注意! この図面を使用した、いかなる損害にも責任を負いません。
|
● [LPS25H版] プログラム
・この製作では、ヒューズ ビットを工場出荷状態のまま使用しますので、変更の必要はありません。
・LCD[AQM0802A , AQM1602XA]共用ライブラリ [ Lcd_AQMxx02.LBX ] をダウンロードして、
パソコンの下記フォルダーに保存してからコンパイルして下さい。
C:\Program Files (x86)\MCS Electronics\BASCOM-AVR\LIB
・BASCOM 「試用版」の方は、「設定モード」が無くなりますが冒頭の下記行を[0]にするとコンパイル
できます。
Const Setmode = 1 '設定モードの有無。(0:無し[BASCOM-試用版用] , 1:有り)
注意! 著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。 (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)
|
● [LPS331AP版] プログラム
・この製作では、ヒューズ ビットを工場出荷状態のまま使用しますので、変更の必要はありません。
・LCD「AQM0802A」用ライブラリ [ Lcd_AQM0802A.lib ] をダウンロードして、パソコンの
下記フォルダーに保存してからコンパイルして下さい。
C:\Program Files (x86)\MCS Electronics\BASCOM-AVR\LIB\
・BASCOM 「試用版」の方は、「設定モード」が無くなりますが冒頭の下記行を[0]にするとコンパイル
できます。
Const Setmode = 1 '設定モードの有無。(0:無し[BASCOM-試用版用] , 1:有り)
|

LCD搭載前 |

基板 前面 |

基板 左側面 |

動 画 |
 基板 後面 |

基板 ハンダ面 |
操 作 方 法 |
1.電源投入
・ボタン電池を入れると、気圧と温度の計測を開始し、計測値が表示されます。
・電池を入れても表示が出ない場合は、ISP端子の5ピンと6ピンを一瞬だけショートさせて下さい。
(ハードウェアの強制リセットが働きます)
・初期状態では、スイッチの操作を終えてから、約1分後に自動で電源がOFFになります。
・電源がOFFになっても、表示や設定および高低差の測定値は保持されています。
・電源(Power)スイッチを押すと、電源がOFFになる前の状態が再現されて測定が再開されます。
|
2.表示の切り換え
・電源がONの状態で電源(Power)スイッチを押すと、LCD2行目の表示項目が「温度」と「高低差」で
交互に切り変わります。
・「高低差」が表示されている状態で、[サンプリング・モード]スイッチを3秒間押し続けると、
高低差が0.0mにリセットされます。
(LCD2行目に、*(アスタリスク)マークが順に表示されます)
・高低差の基準となる場所で、気圧値が安定したのを見計らってリセットして下さい。
・リセットした場所の気圧値を基準にして、気圧値の変化量と係数で高低差を計算し表示します。
(気圧値は気象条件と時間経過により緩やかに変化するので、高低差の測定時間が長くなると、
その分誤差も大きくなります)
|
3.サンプリング・モードの切り換え
・気圧値を移動平均する時間を切り換えます。
(気圧変化に対する表示の更新速度が変わります)
・スイッチを押すたびに、[通常]と[高速]に切り替わります。
(気圧と温度のサンプリング時間は、0.5秒間隔です)
LCD左下の表示 |
モード |
移動平均数 |
更新時間 |
なし |
通常 |
32個 |
16秒 |
[h] |
高速 |
8個 |
4秒 |
・高低差の変化が緩やかな場合は、「通常」モードで測定します。
・エレベータなどの様に高速で高低差が変化する場合は、「高速」モードにすると計測の誤差
(ばらつき)は多くなりますが、高低差を計測する反応が早くなります。
|
4.機能設定モード
・電源(Power)スイッチと[サンプリング・モード]スイッチを同時に押すと、機能設定モードに入ります。
・下記3項目が設定できます。
Contrast Set |
LCDのコントラスト調整 |
30〜50 |
初期値: 32 |
AutPower OFF |
自動電源オフの時間 |
0 , 1 , 2 , 3 , 4 分 |
初期値: 1分 |
DiffElev |
気圧差から高低差を計算する係数 |
1hPa = 8〜12m |
初期値: 9m |
・[サンプリング・モード]スイッチで、設定値を選択します。
・電源(Power)スイッチで、次の項目に移ります。
・これらの設定は内蔵EEPROMに記憶されますので、電池を交換した後も残されています。
○コントラスト調整
・電池電圧によりLCDのコントラストが変わるので、見やすい値に調整します。
○自動電源オフの時間
・スイッチの操作を終えてから、設定時間(1〜4分)後に自動で電源がOFFになります。
・[0]を選択すると自動OFFは無くなり、電源(Power)スイッチは下記の動作を繰り返します。
電源ON → [温度表示] → [高低差表示] → 電源OFF
○気圧差から高低差を計算する係数
・気圧を測定する絶対高度が1,000m高くなると、1hPa変化した時の高低差[m]の係数が1m程度
大きくなるようです。
・厳密な計算式で計算するほど高性能な装置ではないので、測定する高度に合わせて係数を
選択して下さい。
・気圧と高度の詳細な関係は、各自で研究して下さい。
※BASCOM「試用版」の方は「設定モード」が無くなりますが、プログラム冒頭の下記行で設定を
変えることができます。
Const Setcontrast = 32 'LCDのコントラスト値。(0〜63)
Const Setatptime = 1 '自動電源OFFの設定時間。(0,1,2,3,4 Min)
Const Setaltcoeff = 9 '気圧差から高低差を計算する係数。(1hPa = 8〜12m)
|
|