センサ一問一答：呼吸の検出

# 経緯

とある非常勤の授業において学生さんから下記の質問あり

「呼吸を検知できるセンサーがないか？」

具体的な用途として

「呼吸の可視化、例えば：呼吸の頻度、呼吸時の気流の大きさによって、ライトの明るさ、画面のイメージを変えたい」

とのことで、呼吸センサを探してみた

# MPRLS Ported 気圧センサモジュール

![file](https://tva1.sinaimg.cn/large/0081Kckwgy1gmax1ft0y2j30qy0k84qp.jpg)



スイッチサイエンスにて発見

https://www.switch-science.com/catalog/4084/

> *他の気圧センサと異なり、ボードの中央に搭載されたメタルポートにチューブを取り付けて、息を吹き付けるなど、その密閉空間内の気圧を測定するモジュールです。sip & puffと呼ばれる息操作インターフェイスや、真空チャンバーや他の加圧容器内の圧力測定に使用するのに最適なセンサです。*

とのことで、気圧センサの中でも呼吸を検知する用途に適しているとのこと。



# ハードウェア準備

スイッチサイエンスHP内にある「ガイド」を参照してピンヘッダ、ソケットとジャンプワイヤをはんだ付け

https://learn.adafruit.com/adafruit-mprls-ported-pressure-sensor-breakout

Arduino Testの項にある下記を参考に、センサとArduinoを接続

https://learn.adafruit.com/adafruit-mprls-ported-pressure-sensor-breakout/arduino-test

>- *Connect **Vin** to the power supply, 3-5V is fine. Use the same voltage that the microcontroller logic is based off of. For most Arduinos, that is 5V*
>- *Connect **GND** to common power/data ground*
>- *Connect the **SCL** pin to the I2C clock **SCL** pin on your Arduino. On an UNO & '328 based Arduino, this is also known as **A5**, on a Mega it is also known as **digital 21** and on a Leonardo/Micro, **digital 3***
>- *Connect the **SDA** pin to the I2C data **SDA** pin on your Arduino. On an UNO & '328 based Arduino, this is also known as **A4**, on a Mega it is also known as **digital 20** and on a Leonardo/Micro, **digital 2***
>
>*The MPRLS has a default I2C address of **0x18** and cannot be changed!*

上に習って、下記の通り配線
センサ側の**VIN**（下図赤色）→Seeeduino(Arduino)の**5V**
センサ側の**GND**（下図黒色）→Seeeduino(Arduino)の**GND**
センサ側の**SCL**（下図黄色）→Seeeduino(Arduino)の**A5**
センサ側の**GND**（下図青色）→Seeeduino(Arduino)の**A4**


センサのポートにつけるチューブは収縮チューブで代用した
![IMG_0605](https://tva1.sinaimg.cn/large/0081Kckwgy1gmay7cke83j31400u0u10.jpg)
# ソフトウェア準備

**Install Arduino Libraries**を参考にライブラリをインストール

https://learn.adafruit.com/adafruit-mprls-ported-pressure-sensor-breakout/arduino-test

**Basic Example**を試してみた。
hPaの単位系のほうが使いやすそうなので、少し改変してシリアル出力するようにした
ArduinoIDE上の「シリアルプロッタ」を起動して収縮チューブに息を吹き込んでみると・・・
→実行結果参照

```c++
#include <Wire.h>
#include "Adafruit_MPRLS.h"

// You dont *need* a reset and EOC pin for most uses, so we set to -1 and don't connect
#define RESET_PIN  -1  // set to any GPIO pin # to hard-reset on begin()
#define EOC_PIN    -1  // set to any GPIO pin to read end-of-conversion by pin
Adafruit_MPRLS mpr = Adafruit_MPRLS(RESET_PIN, EOC_PIN);

void setup() {
  Serial.begin(115200);
  Serial.println("MPRLS Simple Test");
  if (! mpr.begin()) {
    Serial.println("Failed to communicate with MPRLS sensor, check wiring?");
    while (1) {
      delay(10);
    }
  }
  Serial.println("Found MPRLS sensor");
}


void loop() {
  float pressure_hPa = mpr.readPressure();
  Serial.print("Pressure (hPa): "); Serial.println(pressure_hPa);
 // Serial.print("Pressure (PSI): "); Serial.println(pressure_hPa / 68.947572932);
  delay(50);
}
```



# 実行結果

Youtube映像埋め込みできないのでリンクは[こちら](https://youtu.be/Bu2FrqHo7Jw)から
　※マイクの調子が良くないので後日再収録予定


# 息操作インターフェイス「sip & puff」

上記息操作インターフェイスについて調査したところ、下記PDFを発見

アメリカ化学会資料「Teaching Chemistry to Students with Disabilities: A Manual for High Schools, Colleges, and Graduate Programs Edition 4.1」，翻訳資料
https://www.rcast.u-tokyo.ac.jp/content/000009036.pdf

sip & puffインタフェースについて調べてみると
「[空気圧を使用してデバイスに信号を送信するために使用される支援技術。主に手を使わない人が利用(- wikipedia)](https://en.wikipedia.org/wiki/Sip-and-puff)」とある。
視線による文字入力と組み合わせることで、息を吐いて入力文字を確定、息を吸うことで一文字削除、というような使い方が想定される。
もしくは、視線入力で自由な線を引きながら絵を描く際、ペンの太さ（手でいうところの力の入れ具合）を息で行うなど、様々な用途が検討できる。


<meta property="og:image"       content="https://camo.qiitausercontent.com/e2701068b6ee098f8c99f98426456f408672e666/68747470733a2f2f747661312e73696e61696d672e636e2f6c617267652f303038314b636b77677931676d617937636b6538336a333134303075307531302e6a7067">