LoginSignup
2

More than 3 years have passed since last update.

Raspberry PiでADT7410, DHT11, BMP180, HC-SR501を動かしてみた

Last updated at Posted at 2020-07-23

話すこと

以前からRaspberry Piを使うことが多かったのですが、センサーを多く取り付けようとすると配線がめちゃくちゃ大変になります。
この記事は、使用したセンサーの使い方と配線のコツをまとめたものになります。

環境

配線のルール

配線するときに注意すべき点を自分なりにまとめました。
補足の情報があればコメントにてアドバイスしていただけると助かります!

  • VDD(電源)は赤色あるいは橙色を使用する
  • GND(アース)は青色または黒色を使用する
  • VDD・GNDは一色のみに統一
  • センサーごとに色を統一/データ種別で色を統一
  • 入力用か出力用かで色分けを行う
  • ブレッドボードを使用する場合は配線がたるまないようにする
  • 金属部が他の配線と接触しないように間隔をあける
  • 焼きそば配線にしない

adt7410

基本的なことですが、やっていると忘れがちなので注意が必要です。

センサーの実装

各センサーで説明をしているピン番号は以下の画像を参考にしてみてください。

gpio

GPIOについて詳しく知りたい方は公式サイトを見てみてください。

ADT7410 (温度センサー)

I2C対応センサーなので、データの取得は簡単です。
I2C用のコマンドが用意されていますので、詳しくはこちらのサイトを見てみてください。
また、センサーのアドレスが異なれば並列につなぐことで複数のi2c対応センサーを扱うことが可能です。

adt7410_img

ADT7410は接続箇所が4か所あるため、Raspberry PiのVDD(電源)・SCL(5番ピン)・SDA(3番ピン)・GND(アース)にそれぞれ接続しましょう。
プログラムはPython3で書いてあります。以下がコードになります。

adt7410.py
import smbus

i2c = smbus.SMBus(1)
address = #アドレス番号(i2cdetectなどで確認)

block = i2c.read_i2c_block_data(address, 0x00, 12)
temp = (block[0] << 8 | block[1]) >> 3
if(temp >= 4096):
   temp -= 8192
print("Temperature:%6.2f" % (temp / 16.0))

DHT11 (温湿度センサー)

DHT11はI2C規格ではないので、ライブラリを使用します。

pip install dht11

pipコマンドでライブラリをインストールし、Pythonで使用できるようにします。
@mininobu さんの記事が分かりやすかったので紹介します。
DHT11は左から順に

  • VDD:power supply 3.3~5.5V
  • DATA:serial DATA (single bus)
  • NC:empty
  • GND:power supply negative(grounding)

となっているため、左から2つ目の場所をRaspberry Piのピンと接続させましょう。
以下がデータ取得用のコードです。

dht11.py
import RPi.GPIO as GPIO
import dht11

# GPIO初期化
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
# 使用するピン番号
PIN = #番号

# データ取得
instance = dht11.DHT11(pin = PIN)
result = instance.read()
if result.is_valid():
    print("Temperature: %-3.1f C" % result.temperature)
    print("Humidity: %-3.1f %%" % result.humidity)
else:
    print("Error: %d" % result.error_code)

BMP180 (大気圧センサー)

BMP180は今回Githubにあるライブラリを使用しました。

https://github.com/adafruit/Adafruit_Python_BMP

BMP180は4箇所接続するところがあります。

kxm52-1050

VIN(電源)・GND(アース)・SCL(5番ピン)・SDA(3番ピン)の4か所をRaspberry Piに接続しましょう。
また、BMP180はi2c対応であるため、adt7410と同様にデータを取り出すことも可能です。
このライブラリを用いて実装していきます。以下がコードです。

bmp180.py
import RPi.GPIO as GPIO
import Adafruit_BMP.BMP085 as BMP085
import time
import datetime

# GPIO初期化
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
# BMP085初期化
sensor = BMP085.BMP085()

try:
    while True:
        result = instance.read()
    if result.is_valid():
        print("[Last valid input: " + str(datetime.datetime.now()) + "]")   
        print("Temperature: {0:0.2f} C".format(sensor.read_temperature()))
        print("Altitude: {0:0.2f} m".format(sensor.read_altitude()))
        print("Barometric Pressure: {0:0.2f} Pa".format(sensor.read_pressure()))
        print("Sea level Pressure: {0:0.2f} Pa".format(sensor.read_sealevel_pressure()))
    time.sleep(5)
except KeyboardInterrupt:
    print("Cleanup")
    GPIO.cleanup()

BMP180は、気圧データの他に温度や高度といった情報も取得できるようです。

HC-SR501 (人感センサー)

HC-SR501は3つのピンがあります。

kxm52-1050

VCC(電源)・OUT(データ取得用)・GND(アース)の3か所をRaspberry Piに接続しましょう。
人を感知した場合に入力ピンから電気が流れるため、GPIO.HIGHでチェックができます。
以下がコードです。

hc-sr501.py
from datetime import datetime
import time
import RPi.GPIO as GPIO

# インターバル
INTERVAL = 3
# スリープタイム
SLEEPTIME = 20
# 使用するGPIO
GPIO_PIN = #ピン番号
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN, GPIO.IN)

try:
    print ("処理キャンセル:CTRL+C")
    cnt = 1
    while True:
        # センサー感知
        if(GPIO.input(GPIO_PIN) == GPIO.HIGH):
            print(datetime.now().strftime('%Y/%m/%d %H:%M:%S') + ":" + str("{0:05d}".format(cnt)) + "回目の人感知")
            cnt = cnt + 1
            time.sleep(SLEEPTIME)
        else:
            print(GPIO.input(GPIO_PIN))
            time.sleep(INTERVAL)
except KeyboardInterrupt:
    print("終了処理中...")
finally:
    GPIO.cleanup()
    print("GPIO clean完了")

さいごに

Raspberry Piは今後も使っていくので, 使ったセンサーはちょくちょくまとめていこうと思います.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2