気圧センサモジュールを使ってみる(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」
で起動します。
メニュー「ファイル(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言語での文法チェックを受けながら記述することが出来ます。
2.Arduino と PCをUSBケーブルで接続します。
このとき、デバイスマネジャーより、ポートを再確認しておきます。
私の場合、
・ポート:COM3
でした。
3.メニューの「実行(R)」 → 「デバッグなしで実行」
で、プログラムを起動します。
これで、Visual Studio Code のターミナル窓(右下窓)に
Arduinoからの、気圧と温度が表示されれば完了です。