ChatGPTだけでセンサーの選定から動作確認までできるのか検証してみた

IoTのプロトタイプ開発や個人開発などで、要件に合ったセンサーの調査に時間がかかることがあります。
そのような調査の時間を短縮できればよいなと思い、ChatGPTにお願いしてみることにしました。

# 検証
今回は温湿度センサーと水位センサー、2つのセンサーを選定してもらいます。
どちらもArduinoで使うことを想定しています。

## 温湿度センサー
### 選定
Arduinoで使用できる安価な温湿度センサーのおすすめを聞いたところ、下記のような回答が得られました。
![温湿度センサー選定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/c45110ee-a697-8f46-e22a-41162a08aa5f.png)
今回は簡単な検証なので、精度は度外視で安価なDHT11を選定します。
秋月電子通商で下記の商品を購入しました。
[温湿度センサ モジュール　DHT11](https://akizukidenshi.com/catalog/g/gM-07003/)

### 配線
Arduinoでどのように配線すればよいか聞いてみます。
![DHT11の配線方法.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/985ef151-8f85-248d-5865-950909a444fc.png)
これは購入した商品がどこまで加工されているのかによると思うのですが、ChatGPTが提示した配線は3ピン、対して **実物は4ピンあります。**
![DHT11.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/f7d1c9c3-6eb1-16e3-c34c-cbcfbb7b3b5d.jpeg)
4ピンの場合の配線方法を聞いてみます。
![DHT11の配線方法2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/ecc9c8e6-70fc-9bfb-bce4-cbbdf9382061.png)
 **4ピンの場合でも、無事配線方法を提示してくれました。**
ただぶっつけ本番で直接繋ぐのは少し不安が残ったので、[データシート](https://akizukidenshi.com/download/ds/aosong/DHT11_20180119.pdf)を見てピン配置が合っているか確認してから配線を行ないました。
（上記のピン配置図をそのまま左に90度回転させると、実物と同じ配線になりました）

### 動作確認
配線方法を聞くと大抵一緒に動作確認用のコードも提示してくれるので、
試しに動作確認してみます。
ちなみに修正なしでコンパイル・書き込み共に問題なく実施できました。
![ChatGPTが出力したコード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/ce83d1a5-72a7-2006-1acd-8b603631cfa2.png)
<details><summary>ChatGPTから出力されたコード</summary>

```c:DHT11_test.ino
#include <DHT.h>

#define DHTPIN 2          // DHT11センサーのSIGNALピンに接続されたデジタルピンの番号を指定する
#define DHTTYPE DHT11     // 使用するDHTセンサーの種類を指定する

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);   // シリアル通信を開始する
  dht.begin();          // DHTセンサーの初期化
}

void loop() {
  // 温度を取得する（摂氏）
  float temperature = dht.readTemperature();

  // 湿度を取得する
  float humidity = dht.readHumidity();

  // 温度を表示する
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print("C");

  // 湿度を表示する
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.print("%");

  delay(2000);          // 2秒待つ
}

```
</details>
そのままコンパイルしてスケッチを書き込んでみると、このような結果になります。

![ChatGPTから出力された温湿度センサーコードの結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/7caba5b3-2cc6-dfcf-acb1-90ed6f5adacf.png)
値は正しく取得できているのですが、シリアルモニターでの見やすさを考えると改行が欲しいところです。
人視点での利便性を考えて、僅かですが修正を加えます。

<details><summary>軽微な修正を加えた後のコード</summary>

```c:DHT11_test.ino
#include <DHT.h>

#define DHTPIN 2          // DHT11センサーのSIGNALピンに接続されたデジタルピンの番号を指定する
#define DHTTYPE DHT11     // 使用するDHTセンサーの種類を指定する

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);   // シリアル通信を開始する
  dht.begin();          // DHTセンサーの初期化
}

void loop() {
  // 温度を取得する（摂氏）
  float temperature = dht.readTemperature();

  // 湿度を取得する
  float humidity = dht.readHumidity();

  // 温度を表示する
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println("C");    // 改行追加

  // 湿度を表示する
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.println("%\n");  // 改行追加

  delay(2000);          // 2秒待つ
}

```
</details>

![修正後の結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/8c533cee-8508-50b2-91b3-f3018ddeca4a.png)


### 結果
以上の過程を経て、温湿度センサーの選定、配線の確認、動作確認が問題なくできることが分かりました。
ただ、前述の「購入した商品がどこまで加工されているか」に左右される点ではあるのですが、本来計測値を安定させるのに必要な **プルアップ抵抗** に関しての言及は、ChatGPTからは一度も出てきませんでした。
こちらから質問すると説明してくれました。
（同じコードが続くので画像は一部省略しています）
![DHT11のプルアップ抵抗について1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/8fc4902f-7cc2-2914-06c4-517f5808b6a8.png)
![DHT11のプルアップ抵抗について2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/c89b8740-ad6e-61c4-518e-a19d28046597.png)
あまり加工されていない部品を購入し、かつ長期的に安定したデータを取れるか試したい場合は、事前に **抵抗の有無** を聞いた方がよさそうです。

## 水位センサー
### 選定
先ほどは漠然とセンサーの種類のみを指定しましたが、今度は **購入サイトをAmazonに絞って** おすすめを聞いてみます。
![水位センサー選定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/515cbe7d-d174-217a-9252-372aadefd7b2.png)
「Amazonで購入できる」と指定をしましたが、 **日本のAmazonでは、挙がった3つのうち1つしか購入できませんでした。**
残り2つは商品が存在していませんでした。
もしかすると日本以外の国では購入できるのかもしれません。
[uxcell フロートスイッチ ミニ水液レベルセンサー](https://amzn.asia/d/c1AetsE)

### 配線
同じく、配線方法を聞いてみます。
![水位センサーの配線方法.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/4d0bc927-2146-8766-4580-1969aa1e3ca5.png)
Amazonで電子部品を購入するときによくある現象だと思うのですが、しっかり型番が書かれていないので大抵データシートが見つかりません。
商品画像にも配線図が書かれていないとなると、購入をかなり躊躇います。
今回はChatGPTがコード付きで頼もしく説明してくれているので（『一方の端子を』『もう一方の端子を』と明確な指定が無いので少し不安ですが）、信じて配線してみます。

### 動作確認
提示されたコードを実際に動かしてみます。
今回も修正なしでコンパイル・書き込み共に問題ありません。
<details><summary>ChatGPTが出力したコード</summary>

```c:float_switch_test.ino
const int sensorPin = 2; // センサーの一方の端子に接続されたピン番号
int waterLevel = 0; // 水位の変数を初期化

void setup() {
  pinMode(sensorPin, INPUT); // センサーの端子を入力ピンに設定
  Serial.begin(9600); // シリアル通信の初期化
}

void loop() {
  waterLevel = digitalRead(sensorPin); // センサーからの信号を読み取り、水位の変数に代入
  Serial.println(waterLevel); // 水位の変数をシリアルモニタに表示
  delay(100); // 100ミリ秒待機
}
```

</details>

![ChatGPTから出力された水位センサーコードの結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/ee43a6ad-31a5-a250-64c9-83e0fe7eaa88.png)
今回は修正なしでも見やすい結果となりました！

### 結果
購入サイトを指定する場合、提示された商品が実際に販売されているかどうかは検索してみるまで分からないので、注意が必要です。
また、データシートが見つからない部品の場合、 **商品名を具体的に指定する** と、より有用なコードが出力できそうです。
前述の通りAmazonで購入する電子部品は少しリスキーであるため、ChatGPTで事前に配線・コードを確認して、「配線図とサンプルがある」という目安があれば、購入に踏み切りやすいのではないかと思いました。
もちろん、ChatGPT以外に有力な参考資料・参考ページがあればそれに越したことはないと思います！

# まとめ
今回は安価なセンサーだったので気軽に購入できました。
しかし、高価なセンサー・デバイスを使いたい場合、「購入しても自分の環境で本当に使えるのか、どうやって使えばいいのか」と購入前に不安になることはよくあると思います。
参考資料を探すことは前提として、購入を一歩後押ししてくれる指標として、ChatGPTは有用なのではないかと思いました。
また、単純に調査時間の短縮・調査の方針決めとしても使いやすいと感じたため、これ以外にも様々なところでChatGPTを活用していきたいと思います。