Make.

大気圧センサー(MPL115A2)を使う

Pocket

RaspberryPiで大気圧を計ります。
大気圧を測るには、 I2C接続の大気圧センサー(MPL115A2)を動作させます。
大気圧を測ることで、天気予報のアプリ等を作成できるようになります。


準備

あらかじめRaspberryPiのI2Cを使用可能にしておく必要があります。
(Python用のI2Cライブラリも忘れずにインストールしてください)
I2Cを使う(設定編)

MPL115A2のデータシートは翻訳してくれている方がいるので、以下ではそれを参考にしています。

小型のデジタル気圧計 MPL115A2・MPL115A1を制御


回路図

MPL115A2は8ピンのモジュールです。
I2C接続を行うため、RaspberryPiのSCL,SDAに接続します。
電源は、Raspberry Piの3.3Vを使い、GNDにも接続します。
CAPは、10uFほどのコンデンサをGNDを挟んで接続します。

00121

00120


Pythonプログラム

Pythonでのプログラムは以下のようになります。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import smbus
import time

def convert_coefficient(msb, lsb, total_bits, fractional_bits, zero_pad):
    data = (msb << 8) | lsb
    period = float(1 << 16 - total_bits + fractional_bits + zero_pad) if (msb >> 7) == 0:
        result = float(data / period)
    else:
        result = -float(((data ^ 0xFFFF) + 1) / period)

    return result

def get_hectopascal():

    i2c = smbus.SMBus(1)
    address = 0x60

    i2c.write_byte_data(address, 0x12, 0x01)
    time.sleep(0.003)

    block = i2c.read_i2c_block_data(address, 0x00, 12) 

    a0 = convert_coefficient(block[4], block[5], 16, 3, 0)
    b1 = convert_coefficient(block[6], block[7], 16, 13, 0)
    b2 = convert_coefficient(block[8], block[9], 16, 14, 0)
    c12 = convert_coefficient(block[10], block[11], 14, 13, 9)

    padc = (block[0] << 8 | block[1]) >> 6
    tadc = (block[2] << 8 | block[3]) >> 6

    c12x2 = c12 * tadc
    a1 = b1 + c12x2
    a1x1 = a1 * padc
    y1 = a0 + a1x1
    a2x2 = b2 * tadc
    pcomp = y1 + a2x2

    pressure = (pcomp * 65 / 1023) + 50
    hectopascal = pressure * 10

    return hectopascal

print get_hectopascal()

これで、大気圧を簡単に計測することができます。

mpl115a2.pyとしてファイルを作成して、以下のコマンドで実行可能です。

$ sudo python mpl115a2.py
Pocket