秋月で売っている気圧センサモジュールのSCP1000モジュールを試してみました。
センサ単体では扱いにくいのですが、モジュールでは8pinDIPにまとめられています。これを3.3V版のArduinoにつないでみました。
Arduino 0022 にはExampleの「SPI」のグループの中に「BarometricPressureSensor」としてSCP1000を制御するサンプルが含まれています。そのソースの始めの方にSCP1000の端子との接続方法が記載されていますので、その通りにつなぎます。ただし、ここに記載されているのはSCP1000のピン番号ですから、モジュールと接続するときは注意が必要です。モジュールの各端子と、Arduinoの接続方法は以下の通りです。
- TRIG信号。無接続。
- DRDY信号。ArduinoのDigital Pin 6に接続する。
- SCK信号。ArduinoのDigital Pin 13に接続する。
- GND。
- MOSI信号。ArduinoのDigital Pin 11に接続する。
- MISO信号。ArduinoのDigital Pin 12に接続する。
- CSB信号。ArduinoのDigital Pin 7に接続する。
- VCC。ArduinoのVCCに接続する。このセンサは3.3Vまでしか印加できないので、要注意!
これで、サンプル「BarometricPressureSensor」をコンパイル・ダウンロードし、シリアルモニタでモニタすれば表示されるはずですが・・・・このサンプルはバグがあります。
自分が修正した箇所(loop()の中です)を示します。
//combine the two parts into one 19-bit number:
long pressure = (((long)pressure_data_high << 16) | pressure_data_low)/4;
float hPa = (float)pressure/100.0;// display the temperature:
Serial.print(“\tPressure [hPa]=”);
Serial.println(hPa);
サンプルでは上記の箇所の2行目で(long)のキャストが抜けているために、正しく表示してくれません。ここを修正すれば、パスカル(Pa)単位で値が表示されます。(他に、SPIのレジスタアクセス部分にデバッグ用の表示があるので、それをコメントアウトしないと表示が鬱陶しいです)
さらに自分はヘクトパスカルで表示したかったので、計算後にfloatの変数を定義して値を100で割って、それを表示するように変更しています。
天気の変化に合わせて気圧が変化するのが目に見えるようになるのは面白いです。