Arduinoで大気圧センサを使ってみる [Arduino]
大気圧センサを入手したので,Arduinoで動かしてみる.使用したのは,秋月電子の,「MPL115A2使用大気圧センサーモジュールキット(I2C) Ver2」.
ネットで調べると,Arduino用のライブラリが公開されていたので,ありがたく使わせてもらう.参照したのは,Arduinoで遊ぶページにある,「MPL115A2用ライブラリ」だ.
あとは,前回作った7セグLEDライブラリと組み合わせて,測定した大気圧を7セグLEDに表示してみる.
7セグLEDとの接続は前回と同じなので,大気圧センサとの接続部分のみ示そう.回路図はこんな感じ.
で,スケッチ.
測定値のばらつきが多いようなので,10回測定して平均値を採用してる.
あと,本来は高度に応じて補正を入れて,海面更正気圧を求めるべきだが,ひとまず測定値そのままにしている.
こちらの使用環境ではおおよそ5気圧ほど低くなる計算(高度からの換算値)で,補正後の値を気象庁の気圧値(たとえば東京はこんな感じ)と比較してもおおよそ一致しているので,測定は正しく行えているようである.
で,実際の動作状況はこんなかんじ.
大気圧測定ライブラリを利用すると,とても簡単に使える.作成者に感謝.
お試しあれ.
ネットで調べると,Arduino用のライブラリが公開されていたので,ありがたく使わせてもらう.参照したのは,Arduinoで遊ぶページにある,「MPL115A2用ライブラリ」だ.
あとは,前回作った7セグLEDライブラリと組み合わせて,測定した大気圧を7セグLEDに表示してみる.
7セグLEDとの接続は前回と同じなので,大気圧センサとの接続部分のみ示そう.回路図はこんな感じ.
で,スケッチ.
#include <Wire.h> #include <MPL115A2.h> #include <MsTimer2.h> #include <Led7segment.h> const int anode_pins[] = { 12, // A 8, // B 5, // C 3, // D 2, // E 11, // F 6, // G 4, // DP }; const int cathode_pins[] = { 13, // DIG.1 10, // DIG.2 9, // DIG.3 7, // DIG.4 }; const int ANODE_PINS_NUM = sizeof(anode_pins) / sizeof(anode_pins[0]); const int CATHODE_PINS_NUM = sizeof(cathode_pins) / sizeof(cathode_pins[0]); unsigned int display_buffer[CATHODE_PINS_NUM] = {0}; void write_1digit(const unsigned char bitmap) { for (int i = 0; i < ANODE_PINS_NUM; i++) { digitalWrite(anode_pins[i], bitmap & (1 << i) ? HIGH : LOW); } } void clear() { for (int i = 0; i < ANODE_PINS_NUM; i++) { digitalWrite(anode_pins[i], LOW); } } void write() { for (int i = 0; i < CATHODE_PINS_NUM; i++) { digitalWrite(cathode_pins[i], LOW); write_1digit(display_buffer[i]); delayMicroseconds(100); clear(); digitalWrite(cathode_pins[i], HIGH); } } void print_7seg(unsigned char *buff) { noInterrupts(); for (int i = 0; i < CATHODE_PINS_NUM; i++) { display_buffer[i] = buff[i]; } interrupts(); } void setup() { for (int i = 0; i < ANODE_PINS_NUM; i++) { pinMode(anode_pins[i], OUTPUT); } for (int i = 0; i < CATHODE_PINS_NUM; i++) { pinMode(cathode_pins[i], OUTPUT); digitalWrite(cathode_pins[i], HIGH); } MsTimer2::set(1, write); MsTimer2::start(); MPL115A2.begin(); } void loop() { unsigned char buff[CATHODE_PINS_NUM] = {0}; const unsigned int numeric_digits = CATHODE_PINS_NUM; const unsigned int frac_digits = 3; Led7segment led; double pressure = 0.0; for (int i = 0; i < 10; i++) { pressure += MPL115A2.read(); delay(100); } pressure /= 10.0; led.print(buff, pressure, numeric_digits, frac_digits); print_7seg(buff); }
測定値のばらつきが多いようなので,10回測定して平均値を採用してる.
あと,本来は高度に応じて補正を入れて,海面更正気圧を求めるべきだが,ひとまず測定値そのままにしている.
こちらの使用環境ではおおよそ5気圧ほど低くなる計算(高度からの換算値)で,補正後の値を気象庁の気圧値(たとえば東京はこんな感じ)と比較してもおおよそ一致しているので,測定は正しく行えているようである.
で,実際の動作状況はこんなかんじ.
大気圧測定ライブラリを利用すると,とても簡単に使える.作成者に感謝.
お試しあれ.
タグ:大気圧センサ