センサーとは?
センサーは、光・温度・距離・加速度などの物理量を電気信号に変換する部品です。Arduinoやマイコンボードはセンサーのデータを読み取り、処理・表示・通信することができます。電子工作において「何かを感じ取る」部分を担うのがセンサーです。
センサーには大きく2種類の出力形式があります。
- アナログ出力:0〜5V(または0〜3.3V)の連続的な電圧値を出力。ArduinoのA0〜A5ピン(
analogRead())で読み取る。 - デジタル出力:I2C、SPI、UARTなどの通信プロトコルでデータを送信。シリアル通信で正確なデータを取得できる。
Arduinoとの接続のしやすさで言えば、アナログセンサーは配線が単純で初心者向きです。**デジタルセンサー(I2C接続)**は2本の信号線(SDA、SCL)だけで接続でき、複数のセンサーを同一バスで扱えます。
温度・湿度センサー
温湿度の計測は家庭環境モニタリングやIoTプロジェクトで最もよく使われる用途のひとつです。
| センサー | 精度(温度) | 精度(湿度) | 接続 | 価格目安 |
|---|---|---|---|---|
| DHT11 | ±2℃ | ±5%RH | デジタル(1-Wire) | ¥300前後 |
| DHT22 | ±0.5℃ | ±2%RH | デジタル(1-Wire) | ¥500前後 |
| SHT31 | ±0.3℃ | ±2%RH | I2C | ¥700前後 |
| BME280 | ±1℃ | ±3%RH | I2C/SPI | ¥500前後 |
DHT11は入門向けの定番センサーです。精度は高くありませんが、安価で専用ライブラリが充実しており、Arduinoとの接続も信号線1本で完結します。
#include <DHT.h>
#define DHTPIN 2 // センサーを接続したピン
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("センサーの読み取りに失敗しました");
return;
}
Serial.print("湿度: ");
Serial.print(humidity);
Serial.print("% 温度: ");
Serial.print(temperature);
Serial.println("℃");
delay(2000); // DHT11は最小2秒の測定間隔が必要
}
距離センサー
超音波センサー(HC-SR04)
超音波センサーは音波を発射し、物体に当たって跳ね返ってくるまでの時間から距離を計算します。価格が安く(¥300前後)、入門用として最もポピュラーな距離センサーです。
仕様:
- 計測範囲:2cm〜400cm
- 精度:±3mm
- 動作電圧:5V
- 接続ピン数:4本(VCC、Trig、Echo、GND)
const int TRIG_PIN = 9;
const int ECHO_PIN = 10;
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
// 超音波パルスを発射
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// エコーパルスの時間を計測
long duration = pulseIn(ECHO_PIN, HIGH);
// 距離に変換(音速は340m/s = 0.034cm/μs)
float distance = duration * 0.034 / 2;
Serial.print("距離: ");
Serial.print(distance);
Serial.println(" cm");
delay(500);
}
赤外線距離センサー(GP2Y0A21)
Sharp製の赤外線センサーで、10〜80cmの中短距離測定に向いています。アナログ出力なので analogRead() で直接読み取れますが、出力電圧と距離の関係が非線形なため、計算式または換算テーブルが必要です。
光センサー
| センサー | 出力形式 | 測定範囲 | 特徴 |
|---|---|---|---|
| CdS(光依存抵抗) | アナログ | 広範囲 | 安価、応答が遅い |
| フォトトランジスタ | アナログ/デジタル | 中程度 | 比較的高速 |
| BH1750 | デジタル(I2C) | 1〜65535 lux | 精度が高い、lux単位で出力 |
| VEML6070 | デジタル(I2C) | UV強度 | 紫外線測定専用 |
CdS(硫化カドミウム)セルは最も安価な光センサーで、明るさに応じて抵抗値が変わります。抵抗分圧回路を組んでアナログピンで読み取るシンプルな使い方が一般的です。明るい場所では抵抗値が低く(数百Ω)、暗い場所では高く(数MΩ)なります。
const int CDS_PIN = A0; // CdSセルを接続
void setup() {
Serial.begin(9600);
}
void loop() {
int lightValue = analogRead(CDS_PIN); // 0〜1023の値
Serial.print("明るさ: ");
Serial.println(lightValue);
delay(500);
}
加速度・ジャイロセンサー
MPU-6050はI2C接続の6軸IMU(慣性計測ユニット)で、加速度センサーとジャイロセンサーが一体化されています。¥300〜500と安価で、ドローン・ロボット・スマートウォッチなど幅広い用途に使われます。
主な仕様:
- 3軸加速度センサー(±2/4/8/16 g)
- 3軸ジャイロスコープ(±250/500/1000/2000 deg/s)
- 接続:I2C(アドレス 0x68 または 0x69)
- 電源:3.3V〜5V
気圧センサー
BME280は気圧・温度・湿度の3種類を同時に計測できる多機能センサーです。気圧から高度も計算できるため、気象観測ステーションやドローンの高度計に使われます。I2C/SPI接続で、Arduino用ライブラリが豊富に公開されています。
センサー選び方チェックリスト
センサーを選ぶ際は以下の点を確認しましょう。
- 動作電圧:Arduino Uno(5V系)で使えるか確認。3.3V専用センサーはレベル変換が必要。
- 接続方式:アナログ、デジタル(I2C/SPI/UART)どれか。
- 精度と分解能:用途に対して十分か。
- Arduinoライブラリの有無:ライブラリがあると接続が格段に楽になる。
- 価格とコスパ:入門段階では安価なモジュールから試すのが合理的。
センサーを複数使う場合は、I2Cバスを活用すると配線がシンプルになります。ただしI2Cアドレスが重複しないよう注意が必要です。
まとめ
電子工作で使うセンサーの代表的な種類と選び方をまとめました。
- 温湿度:入門にはDHT11、精度が必要ならDHT22またはSHT31
- 距離:近距離〜中距離ならHC-SR04(超音波)が最安・定番
- 光:シンプルにCdSセル、精度が必要ならBH1750(I2C)
- 加速度・ジャイロ:MPU-6050が安価で多機能
- 気圧:BME280で気圧・温度・湿度の3種を一括取得
センサーで取得したデータをWi-Fiで送信するIoTプロジェクトへの発展はIoTプロジェクト入門も参考にしてください。
よくある質問
Q. 温度センサーDHT11とDHT22はどちらがいいですか?
入門用にはDHT11(¥300)で十分です。より高精度が必要な場合はDHT22(¥500〜)を選びましょう。DHT22は±0.5℃の精度でDHT11の±2℃より優れています。
Q. 超音波センサーで測れる距離の範囲はどのくらいですか?
一般的なHC-SR04は2cm〜400cmの範囲で測定できます。精度は±3mm程度で、障害物検知やロボットの距離測定によく使われます。
Q. センサーの電源電圧はどこで確認すればいいですか?
センサーのデータシートで確認できます。多くのセンサーは3.3Vまたは5V対応です。ArduinoのUnoは5V系なので、3.3V専用センサーには注意が必要です。
Q. アナログセンサーとデジタルセンサーの違いは何ですか?
アナログセンサーは連続的な電圧値を出力し、ArduinoのanalogRead()で読み取ります。デジタルセンサーはI2CやSPIなどの通信プロトコルでデータを送信します。