気圧センサモジュールを使ってみる(Arduino)

今回は、気圧センサモジュールからの値を、
Python言語で自作のターミナル(シリアル通信)ソフトで、
表示させてみたいと思います。

今回使用する、気圧センサモジュールです。

気圧センサモジュール
気圧センサモジュール

aitendo
気圧センサモジュール [M180-4P]
 ¥299-(税別)
 https://www.aitendo.com/product/10760
 ※私のモジュールは、AliExpress(大陸)からの購入品です。

このモジュールは、
気温(温度)センサーも内蔵されていますから、
気圧と温度の取得が可能です。
また、通信方式は I2C なので、回路も簡単ですが、
動作電源:1.8~3.6Vなので、供給電源に注意が必要です。

気圧センサモジュールとArduinoの接続です。
回路は図の通りです。
   この回路図の作図には fritzing を利用させて頂いております。
   https://fritzing.org/home/

回路図
回路図

では、スケッチします。

スケッチ内容は、センサモジュールから、
気圧・気温を取得して、シリアルモニタに表示するものとします。

気圧センサモジュールとArduinoの通信・制御ですが、
このセンサモジュールの通信方式は、I2Cなので、
I2C用のライブラリ、”Wire” と、
このセンサモジュール制御用の ”Adafruit_BMP085” を
使用させて頂くことにします。

Arduino IDE にインストールする方法は、
1.メニュー「スケッチ」 → 「ライブラリをインクルード」
   → 「ライブラリを管理」 を選択します。

ライブラリを管理
ライブラリを管理

2.ライブラリマネージャ画面の
 検索欄に、”Adafruit BMP085” と入力します。
 表示された一覧の中から、
 ”Adafruit BMP085 Library” を選択し、〔インストール〕ボタンと押します。
これで、ライブラリの準備は完了です。

ライブラリのインストール
ライブラリのインストール

スケッチです。

// ライブラリインクルード
#include <Wire.h>   // I2C通信用
#include <Adafruit_BMP085.h>    // 気圧センサ用

double t_data;   // 温度情報用
double d_data;   // 気圧情報用

// オブジェクト生成
Adafruit_BMP085 a_bmp;

void setup() {
  // put your setup code here, to run once:
  // シリアルモニタ設定
  Serial.begin( 9600 );
  // 気圧センサ起動
  if ( !a_bmp.begin() ) {
    Serial.println( "センサ起動エラー" );
    while(1);	// エラー時の強制ループ
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  // 温度情報取得
  t_data = a_bmp.readTemperature();
  // コンソールモニタへ出力
  Serial.print( t_data );
  Serial.println( " ℃" );

  // 気圧情報取得
  d_data= (double)a_bmp.readPressure()/100;
  // コンソールモニタへ出力
  Serial.print( d_data );
  Serial.println( " hPa" );
    
  // 2000ms待機
  delay( 2000 );
}

では、マイコンボードに書き込んで実行してみます。

実際の回路
実際の回路
実行時のシリアルモニタ画面
実行時のシリアルモニタ画面

シリアルモニタを開くと、
気圧と温度が表示されています。

続いて、この表示情報を、
Python言語で自作のターミナル(シリアル通信)ソフトで、
表示してみます。

シリアル通信のプログラムを1から記述しても良いのですが、
Python言語には、数多くのライブラリが用意されています。
技量のない私は、このライブラリのお世話になることにします。
シリアル通信用のライブラリ “pySerial” を使用します。

この “pySerial” ライブラリを使用するには、
インストールが必要です。

”pySerial” のインストールは、
コマンドプロンプトから
デスクトップにショートカットがない場合、
 Windowsメニュー「スタート」→「Windowsシステムルール」
     →「コマンドプロンプト」
で起動します。

インストールの開始
インストールの開始

”pip install pyserial” と打鍵します。

インストールの完了
インストールの完了

これで、インストールは完了でライブラリの利用が可能になります。

プログラミングは Visual Studio Code で行います。
デスクトップにショートカットがない場合、
 Windowsメニュー「スタート」→「Visual Studio Code」
    →「Visual Studio Code」
で起動します。

 Visual Studio Cod の起動
Visual Studio Cod の起動

メニュー「ファイル(F)」→「新規ファイル」で、
新規のプログラミング用のシート(Untitled-1)を用意します。

新規ファイル の準備
新規ファイル の準備
 新規ファイル
新規ファイル

もちろん、Arduino IDE での Arduino 言語と、
Python言語では、言語の違いから記述方法が違います。
ですが、ある程度 Arduino 言語が理解出来ていれば、
何となく分かるのではと思います。

違いを何点かあげてみると、
 ・行コメントは、 // ではなく、 # です。
 ・1文の終わりに ; は必要ない。
 ・制御文法(for、while等)のブロック記述は、 { } ではなく、
  インデントで行う。
などでしょうか。

プログラムの記述前に次の2点を確認しておきます。
 ・Arduino との接続ポートの確認
  ※Windowsメニューで、右クリック→「デバイスマネージャー(M)」、
   デバイスマネージャー画面のポート(COMとLPT)欄で確認します。
   このとき、Arduino とUSBケーブルで接続されていないと表示されません。 

デバイスマネジャー画面
デバイスマネジャー画面

 ・Arduino 側スケッチの Serial.begin( ) の通信速度を確認
 私の場合、
  ・ポート:COM3
  ・通信速度:9600bps
 でした。

では、記述してみます。

# pySerialモジュールをインポート
import serial

# 通信条件設定・通信オープン
seri = serial.Serial('COM3',9600,parity=serial.PARITY_NONE)

# 通信(受信)無限ループ
#     ”crtl + c” キーでの停止を例外処理で可能にしておく
try:
    while True:
        # ポートより一行を取得    
        r_data = seri.readline()
        # 全角文字を含むため文字コード変換
        r_data = r_data.decode('utf-8')
        # 改行を無効にして表示出力(Python print()の改行を無効に)
        print(r_data,end='') 
except KeyboardInterrupt:
    print('Stop with key!')

# 通信クローズ   
seri.close() 

こんな感じで書いてみました。
簡単な解説です。

・今回作成のターミナルソフトは、受信のみ対応です。
・serial.Serial( ) 文の、'COM3' は、デバイスマネージャー(M)の
 ポート(COMとLPT)欄より確認し、Arduino との接続ポートを設定します。
 次の 9600 は、Arduino 側スケッチの Serial.begin( ) の設定値と合わせます。
・受信処理を永久ループ(while True:)で行うように記述していますので、
 停止できません。
 そのため、キーボードからの ”crtl + c” キーで停止出来るように、
 例外処理(try:)で対応しています。
・Arduino 側から、全角文字(℃)を送信してきますので、
 decode( ) 文を使って文字コード変換を行っています。
 送信データが半角のみの場合は、不要だと思います。
・print( )文では、改行することがデフォルトとなっていますので、
 今回は、受信した情報に改行指示が含まれるので、
 二重改行になってしまいます。 
 そのため、print( )文の引数に、end='' を付けて、
 print( ) 文の改行を無効にしています。

実行してみます。
1.メニューの「ファイル(N)」 → 「名前を付けて保存…」
 で、保存します。
 私の場合、
  ・保存場所:C:\python_lang
  ・ファイル名:”terminal_1.py”
  ・ファイルの種類:Python
 としました。
 ※本来は、1,2行記述したところで、一度保存されるのが良いと思います。
  そうすれば、Python言語での文法チェックを受けながら記述することが出来ます。

ファイルの保存1
ファイルの保存1
 ファイルの保存2
ファイルの保存2
保存済みのファイル
保存済みのファイル

2.Arduino と PCをUSBケーブルで接続します。
 このとき、デバイスマネジャーより、ポートを再確認しておきます。
 私の場合、
  ・ポート:COM3
 でした。

3.メニューの「実行(R)」 → 「デバッグなしで実行」
 で、プログラムを起動します。

実行指示
実行指示
 実行中の回路
実行中の回路

これで、Visual Studio Code のターミナル窓(右下窓)に
Arduinoからの、気圧と温度が表示されれば完了です。

実行結果画面
実行結果画面