💻

HX711ロードセルとRaspberry Piを使ったデジタルデトックス用の仮想ドアセンサーの作成

2024/06/23に公開

利用目的

PCで作業する際に、スマートフォンやタブレットなどの注意を散らすデバイスを遠ざけ、それらを手に取らないようにする方法を探していました。これにより、デジタルデトックスを助けるIoTシステムを作ることが目的です。

実際に作ったトレイ

横から見たロードセルセンサー 斜め上から見たトレイ

開発の概要

  1. ロードセルセンサーを内蔵したトレイの作成
    • トレイにスマートフォンやタブレットを置き、その重量を測定します。
  2. 重量の設定
    • トレイに置かれたデバイスの重量が設定値付近である場合に仮想ドアセンサーがONになり、大きく外れた場合にOFFとなる仕組みを作成します。
  3. Homebridgeのプラグインの使用
    • 仮想ドアセンサーがON/OFFになると、仕事場のモニターがON/OFFになるホームオートメーションを作成します。

必要なハードウェア

  1. PC環境のON/OFFを切り替えるためのデバイス

    • HomeKit対応のスマートスイッチ:PCモニターの電源を制御
    • HomeKit対応のスマートライト:仕事場の照明を制御
  2. ロードセルセンサー

    • HX711:重量を測定
    • Raspberry Pi:HomebridgeとHX711からデータを取得

使用言語

  • Python:HX711からデータを取得するために使用
  • Node.js:Homebridgeのプラグインを作成するために使用

開発方法の詳細

1. HX711とRaspberry Piの接続

ハードウェア接続

  • HX711:デジタル重量センサー。
  • Raspberry Pi:データを収集し、Homebridgeと連携。

接続手順

  1. HX711モジュールのDT(データ)ピンをRaspberry PiのGPIO 5番ピンに接続。
  2. HX711モジュールのSCK(クロック)ピンをRaspberry PiのGPIO 6番ピンに接続。
  3. VCCピンを5Vピンに、GNDピンをGNDに接続。

2. HX711からデータを取得するスクリプトの作成

必要なライブラリのインストール

まず、Raspberry Piに必要なライブラリをインストールします。

sudo apt-get update
sudo apt-get install python3-pip
pip3 install RPi.GPIO hx711

Pythonスクリプト

HX711からデータを取得し、トレイに置かれたデバイスの重量を測定するPythonスクリプトを作成します。

import time
import RPi.GPIO as GPIO
from hx711 import HX711

def setup():
    hx = HX711(dout_pin=5, pd_sck_pin=6)
    hx.set_reading_format("MSB", "MSB")
    hx.set_reference_unit(1)
    hx.reset()
    hx.tare()
    return hx

def loop(hx):
    while True:
        weight = hx.get_weight(5)
        print("Weight: ", weight)
        hx.power_down()
        hx.power_up()
        time.sleep(1)

def cleanAndExit():
    GPIO.cleanup()
    print("Bye!")
    sys.exit()

if __name__ == "__main__":
    try:
        hx = setup()
        loop(hx)
    except (KeyboardInterrupt, SystemExit):
        cleanAndExit()

3. Homebridgeのプラグイン作成

Homebridgeのセットアップ

Raspberry PiにHomebridgeをインストールします。

sudo apt-get update
sudo apt-get install -y nodejs npm
sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x
sudo hb-service install --user homebridge

プラグインの作成

Homebridgeのプラグインを作成し、仮想ドアセンサーとしてHX711のデータを扱います。

homebridge-digital-detox-pluginディレクトリを作成し、以下のようにファイルを配置します。

mkdir homebridge-digital-detox-plugin
cd homebridge-digital-detox-plugin
npm init -y
npm install request

index.jsファイルの内容:

const request = require('request');
const Service, Characteristic;

module.exports = (homebridge) => {
  Service = homebridge.hap.Service;
  Characteristic = homebridge.hap.Characteristic;
  homebridge.registerAccessory('homebridge-digital-detox', 'DigitalDetox', DigitalDetox);
};

class DigitalDetox {
  constructor(log, config) {
    this.log = log;
    this.name = config.name;
    this.url = config.url;
    this.threshold = config.threshold || 100;
    this.service = new Service.ContactSensor(this.name);
    this.service.getCharacteristic(Characteristic.ContactSensorState)
      .on('get', this.getState.bind(this));
  }

  getState(callback) {
    request(this.url, (error, response, body) => {
      if (!error && response.statusCode === 200) {
        const weight = parseFloat(body);
        const isContact = weight < this.threshold ? 1 : 0;
        callback(null, isContact);
      } else {
        callback(error);
      }
    });
  }

  getServices() {
    return [this.service];
  }
}

config.jsonファイルにプラグインを追加します。

{
  "bridge": {
    "name": "Homebridge",
    "username": "CC:22:3D:E3:CE:30",
    "port": 51826,
    "pin": "031-45-154"
  },
  "accessories": [],
  "platforms": [
    {
      "platform": "DigitalDetox",
      "name": "Digital Detox Sensor",
      "url": "http://localhost:5000/weight",
      "threshold": 100
    }
  ]
}

4. ホームオートメーションの設定

HomeKitアプリ(iOSデバイス)でホームオートメーションを設定します。

手順

  1. HomeKitアプリを開き、Homebridgeを追加。
  2. 仮想ドアセンサーが表示されたら、それを選択。
  3. 仮想ドアセンサーがONになったときにPCモニターやライトがONになるように設定。
  4. 仮想ドアセンサーがOFFになったときにPCモニターやライトがOFFになるように設定。

これで、デジタルデバイスをトレイに置くことで作業環境を最適化し、デジタルデトックスを支援するIoTシステムが完成します。

Discussion