Arduinoセンサーの使い方|温度・距離・光入門
Arduino UNOでセンサーを始めるなら、まずは「値がちゃんと変わる感覚」をつかむのが近道です。
この記事では温度ならLM35DS18B20、距離なら超音波・IR・VL53L0X、光ならLDRを横断しながら、A0・A4・A5・Dピンの配線、必要ライブラリ、シリアルモニタでの確認までを1本でつなげます。
筆者のワークショップでは、LDRで0〜1023の変化を見て入力の手応えをつかみ、そのあとDS18B20で安定した温度表示を確認し、さらにVL53L0Xで滑らかに距離が読めるところまで進める流れが最も定着しました。
Arduino Getting Started(https://docs.arduino.cc/learn/starting-guide/getting-started-arduino/でも基本が整理されている通り、Arduinoは入力を読み取って出力につなげる土台として扱いやすいです。
最初の一歩では「高機能な部品を集める」より「配線と読み取りを確実に通す」ほうが失敗が減ります)。
どのセンサーを選ぶかは性能表だけでは決まらず、アナログで学ぶか、OneWireやI2Cで安定して読むかで向き不向きが分かれます。
この記事では、その選び分けと、よくあるつまずきを先回りして整理します。
arduinoでセンサーを使う前に知っておきたい基礎">Arduinoでセンサーを使う前に知っておきたい基礎
入力方式の4分類
Arduinoでセンサーを扱うときは、まず「そのセンサーがどんな信号を出すか」を整理すると迷いません。
Arduino UnoにはデジタルI/Oが14本(D0〜D13)、アナログ入力が6本(A0〜A5)あり、このどこに何をつなぐかは入力方式で決まります。
まず全体像を図にすると、Unoの基本配置は次のイメージです。
Arduino Uno の主な入力ピン構成
デジタルI/O: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13
アナログ入力: A0 A1 A2 A3 A4 A5
| |
SDA SCL (Uno系)
ここで押さえたいのが、センサー入力は大きく4つに分かれるという点です。
温度のLM35や光センサーのLDR/CdSはアナログ入力、押しボタンや単純なスイッチ出力のセンサーはデジタル入力、VL53L0XはI2C、DS18B20はOneWireという具合です。
アナログ入力は、0V〜5Vの電圧を0〜1023の数値として読み取る方式です。
Arduino UnoのADCは10ビットなので、たとえばA0に入った電圧が低ければ小さい値、高ければ大きい値になります。
LDR/CdSを10kΩの固定抵抗と組み合わせた分圧回路にすると、明るさに応じてA0の値が連続的に変化します。
ワークショップでも、この0〜1023がなめらかに動くのを見た瞬間に「センサーを読めている」という実感をつかむ人が多いです。
デジタル入力はもっと単純で、HIGHかLOWかの2値だけを読みます。
たとえば人感センサーや傾きセンサーの中には、しきい値を超えたらHIGHを出すタイプがあります。
この方式はコードが読みやすく、反応の有無をまず確認したいときに向いています。
I2Cは、SDAとSCLの2本で複数デバイスをぶら下げられる通信方式です。
VL53L0XのようなToF距離センサーが代表例で、配線本数が少ないのが利点です。
その代わり、アドレス管理の考え方が入ってきます。
VL53L0XのデフォルトI2Cアドレスは0x29なので、同じモジュールを複数台つなぐときは衝突対策が必要になります。
配線は少なくても、通信のルールはアナログ入力より一段だけ抽象度が上がる、という理解でちょうどよいです。
OneWireは、1本のデータ線で複数センサーを扱える方式です。
DS18B20が定番で、デジタルピン1本に複数個をつなげる構成が取れます。
温度センサーを何点かに分けて置きたいときに便利で、配線を増やさずに済みます。
ArduinoではOneWireライブラリとDallasTemperatureライブラリを組み合わせる形が一般的です。
最初はライブラリ名に身構えがちですが、実際にはアナログ換算式を自分で組むLM35より、表示まで素直に進む場面も多いです。
入力方式ごとの違いを、よく使う例で並べると次のようになります。
| センサー例 | 信号方式 | 主な接続先 | 読み取りの考え方 |
|---|---|---|---|
| LM35 | アナログ電圧 | A0など | 0〜1023を電圧・温度に換算 |
| LDR/CdS | アナログ電圧(分圧回路) | A0など | 明るさで値が連続変化 |
| DS18B20 | OneWire | Dピン1本 | ライブラリで温度を取得 |
| VL53L0X | I2C | SDA/SCL | 通信で距離を取得 |
初心者のうちは、センサーの種類より先に「その部品はAピンに入るのか、Dピンなのか、SDA/SCLなのか」を見分けられるようになると、配線図の読み違いが一気に減ります。
ここが曖昧なまま進むと、コードの問題なのか、配線先の問題なのか切り分けられなくなります。
UnoのピンマップとSDA/SCLの位置
Arduino Unoを前にしたとき、初心者が最初につまずきやすいのは「A0〜A5はアナログ専用の列」「D0〜D13はデジタルの列」という見方が頭の中で固まっていないことです。
物理的な配置を一度整理しておくと、センサーごとの接続先が見えてきます。
Arduino Uno のピンマップ(入力まわりの見取り図)
[デジタル列]
D0 D1 D2 D3 D4 D5 D6 D7
D8 D9 D10 D11 D12 D13
[アナログ列]
A0 A1 A2 A3 A4 A5
[I2Cの兼用]
A4 = SDA
A5 = SCL
デジタルI/O 14本のうち、D0とD1はシリアル通信にも関わるため、センサー入門の段階では空けておくとトラブルを避けやすくなります。
D2以降を使うと、シリアルモニタとの干渉を考えずに進められます。
D13には基板上のLEDがつながっているので、点灯テストには便利ですが、センサー入力の初回確認では別のピンを使うほうが混乱がありません。
アナログ入力はA0〜A5の6本です。
LM35やLDR/CdSのように電圧の変化を読むセンサーは、まずA0につないで動作確認する流れが定番です。
たとえばLM35は1℃あたり10mVの線形出力なので、アナログ入力と相性がよく、センサーの基礎を学ぶ題材として扱いやすい部類に入ります。
I2Cで見逃しやすいのが、Uno系ではSDAがA4、SCLがA5だという点です。
アナログ列に並んでいるので、最初は「I2CなのにAピンを使うのか」と戸惑いがちですが、Unoではこれが正しい配線です。
さらに、ボード上にはSDA/SCLと刻印されたヘッダが別に並んでいることがあります。
これはA4/A5と同じ信号を引き出しているだけで、機能が増えているわけではありません。
VL53L0Xの配線例でSDA/SCL表記を見たら、UnoではA4/A5と同じ線だと理解すると整理できます。
MakerguidesのVL53L0X Distance Sensor with ArduinoMakerguidesのVL53L0X Distance Sensor with Arduinoのような作例でも、I2C接続はSDAとSCLの2本を軸に説明されています。
Unoではその接続先がA4/A5に当たるので、ピン名の読み替えができれば、ほかのI2Cセンサーにもそのまま応用できます)。
ここで一つ覚えておくと便利なのが、「信号名で見る」習慣です。
A4という番号だけで覚えると、ボード写真や作例によっては見失います。
SDA、SCLという信号名で追うと、VL53L0Xでも液晶モジュールでも同じ考え方でつながります。
筆者はワークショップで、基板の印字を指差しながら「番号より役割で見る」と伝えるようにしています。
この段階で役割が頭に入ると、配線図を丸暗記しなくても自分で読めるようになります。

VL53L0X/TOF0200C Distance Sensor with Arduino
Learn how to use the VL53L0X/TOF0200C Distance Sensor with Arduino. With complete wiring diagrams and code examples.
makerguides.com電源とGND共通/シリアルモニタの基礎
センサーが読めないとき、初心者の配線でいちばん多い原因は信号線のつなぎ間違いではなく、GNDの共通漏れです。
VCCと信号線は刺さっているのに、Arduino側のGNDとセンサー側のGNDがつながっていないため、基準電位が共有されず、値が出ないというケースを筆者は何度も見てきました。
見た目には「ほぼ配線できている」ので気づきにくいのですが、ここが抜けると動きません。
そのため、配線色は最初から役割で固定したほうが混乱を減らせます。
筆者はGNDを黒、5Vを赤、信号を黄色や白にそろえる運用で教えることが多いです。
とくにGNDを黒で統一すると、ブレッドボード上で見失いません。
一本ずつ配線を追わなくても、黒線が全部GNDに集まっているかを目視で確認できます。
受講者の作業を横から見ていても、このルールを入れたあとに配線ミスが減りました。
Arduino Unoを基準にすると、この記事の前提電圧は5V系です。
Unoの5Vピンから電源を取るセンサーなら、そのまま組みやすい構成になります。
一方で、センサー側には3.3V動作のものもあります。
VL53L0X搭載モジュールの中にはDC3.3V〜5V対応の製品もありますが、基板上のレギュレータやレベル変換の有無で扱い方が変わるので、モジュール単位で見る必要があります。
このセクションでは混乱を避けるため、Unoの5V基準で配線を考える前提に絞って進めます。
NOTE
センサーが反応しないときは、信号線より先に「5V」「GND」「信号」の3本がそろっているかを見ると切り分けが早く進みます。
とくにGNDの抜けは、コードを書き換えても直りません。
値の確認にはシリアルモニタを使います。
ArduinoのSerial.begin()では115200bpsが一般的な選択肢として使え、Unoのハードウェアシリアルでも扱えます。
入門段階ではこの速度に統一しておくと、スケッチごとに設定を変えずに済みます。
センサーが正しく読めているかの目安は、シリアルモニタに値が連続して流れることです。
LDR/CdSなら手で覆うと数値が変わり、DS18B20なら温度が周期的に表示され、VL53L0Xなら距離の更新が並びます。
止まる、文字化けする、まったく出ないという症状なら、配線かボーレートのどちらかを疑うのが順番として素直です。
シリアルモニタの表示は、単なるログではなく「センサーとArduinoが会話できている証拠」です。
LED点灯だけでは入力の中身は見えませんが、数値が流れれば、少なくとも電源、GND、入力処理のどこかまでは通っています。
筆者は最初の授業で、まずシリアルモニタに数値を出すところまでを一区切りにしています。
センサー工作は部品を増やすより、この確認の筋道を体に入れるほうが次の失敗を減らせます。
温度センサーの使い方|LM35とDS18B20の違い
LM35をA0で読む
LM35は、温度を電圧として出してくれるアナログ型センサーです。
まずは「センサーの値をA0で読む」感覚をつかむ題材として相性がよく、配線もシンプルです。
接続は Vcc を 5V、GND を GND、Vout を A0 につなぎます。
ここがポイントで、温度センサーなのにデジタルピンへつなぐのではなく、電圧を読むためにA0へ入れるわけです。
LM35は 1℃ あたり 10mV を出力します。
つまり 25℃ なら約 0.25V、30℃ なら約 0.30V です。
Uno の標準的な 5V 基準で読むなら、温度は次の式で求められます。
温度[℃] = (analogRead × 5.0 / 1023) × 100
コードにすると、最初の確認はこの形で十分です。
// 使用ボード: Arduino Uno系
// シリアルモニタ: 115200bps
const int lm35Pin = A0;
void setup() {
Serial.begin(115200); // シリアル通信を115200bpsで開始
}
void loop() {
int rawValue = analogRead(lm35Pin);
float voltage = rawValue * 5.0 / 1023.0;
float temperatureC = voltage * 100.0;
Serial.print("temp=");
Serial.println(temperatureC);
delay(1000);
}
シリアルモニタでは、室温ならおおよそ 20〜30℃台 が 1秒ごとに更新されます。
数字がまったく変わらないときは配線ミスを疑えますし、指でセンサーに触れたときに少し上がるなら、読み取り自体は通っています。
ワークショップでも、ここで「電圧が温度になる」流れがつながると、アナログ入力の理解が一気に進みます。
つまずきやすいのは、LM35 の向きの取り違えです。
LM35(TO‑92など一般的なパッケージ)では、フラット面を向けたとき中央ピンが Vout(A0 に接続する信号)となることが多いです。
ただしパッケージやメーカーでピン配列が異なる場合があるため、使う個体のデータシートや基板の印字で必ず Vcc・Vout・GND を確認してから配線してください。
DS18B20は、温度を最初からデジタルの数値として扱えるセンサーです。
接続は Vdd を 5V、GND を GND、データ線を D2 などのデジタルピン へつなぎます。
ここでは D2 を使う例で進めます。
DS18B20はLM35と違って A0 ではなく、OneWire 用のデジタルピンにつなぐ点が大きな違いです。
もうひとつ外せないのが、データ線と Vdd の間に 4.7kΩ のプルアップ抵抗を入れることです。
これがないと、シリアルモニタに値が出なかったり、読めても不安定になったりします。
初回の配線で止まりやすい場所はここなんですよね。
配線そのものは3本で終わったように見えても、OneWire ではこの 4.7kΩ が通信の安定に効きます。
Arduino では、一般的にOneWireライブラリとDallasTemperatureライブラリを組み合わせます。
『DS18B20 Temperature Sensor with Arduino』 でもこの組み合わせが基本として紹介されています。
最小構成のコードは次の通りです。
// 使用ボード: Arduino Uno系
// 使用ライブラリ: OneWire, DallasTemperature
// シリアルモニタ: 115200bps
#include <OneWire.h>
#include <DallasTemperature.h>
const int oneWireBus = 2;
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200); // シリアルポートを初期化
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
Serial.print("temp=");
Serial.println(temperatureC);
delay(1000);
}
正常に読めていれば、こちらも室温で 20〜30℃台 が 1秒ごとに並びます。
筆者の感覚では、DS18B20はアナログ換算が不要なぶん、最初の段階で「数字がピタッと落ち着いた」と感じやすいセンサーです。
指を当てると数秒で 2〜3℃ ほど上がる動きが見えやすく、温度がちゃんと変化している実感をつかみやすいのも利点です。
スペック面では、DS18B20は -55℃〜+125℃ を扱え、-10℃〜+85℃ で ±0.5℃ の精度があります。
LM35のように「読んだ電圧を自分で温度へ換算する」工程が不要なので、温度表示や記録まで進める流れが短くなります。
しかも OneWire は 1本のデータ線に複数台を並列接続できるので、同じ場所を何点か測る用途にも発展させやすい構成です。
TIP
DS18B20で値が出ないときは、4.7kΩの入れ忘れ、データ線の接続先を D2 以外にしているのにコードを書き換えていない、という2つで止まることが多いです。

Guide for DS18B20 Temperature Sensor with Arduino | Random Nerd Tutorials
The DS18B20 temperature sensor is a One-Wire digital temperature sensor. Learn how to read the temperature from one or m
randomnerdtutorials.com温度センサーの選び方
最初の1個を選ぶなら、何を学びたいかで分けると迷いません。
LM35は、センサーが出す電圧を analogRead() で受けて、式で温度へ直す流れを自分の手で追えます。
A0入力、基準電圧、換算式という Arduino の基本が1本にまとまっているので、「アナログ入力の意味を理解したい」という目的に向いています。
一方で、DS18B20は「確実に安定した温度を数値で取りたい」ときに強い選択です。
OneWire とライブラリの準備は必要ですが、読み出した値がそのまま温度として使えるため、表示・記録・しきい値判定までつなげやすくなります。
温度計としての完成度を早めに出したいなら、こちらのほうが流れは素直です。
ここで意識しておきたいのが、キャリブレーション済みセンサーという考え方です。
DS18B20のようなデジタル温度センサーは、内部で温度を扱いやすい数値として出してくれるので、入門段階では「すでに温度として読める部品」と考えると理解が進みます。
対してLM35は線形で扱いやすいものの、Arduino 側で電圧から温度へ換算する工程が残ります。
どちらも温度は測れますが、学習の重心が違うわけです。
測定範囲と精度の見方でも差があります。
広い温度範囲や精度の目安まで含めて考えるならDS18B20が有利です。
室温付近をまず読めればよく、センサーの出力と ADC の関係を自分で理解したいならLM35が向いています。
講座では、換算式を学ぶ回はLM35、動く温度計を形にする回はDS18B20という並べ方にすると、受講者の理解が揃いやすい印象があります。
最初の温度計測として見るなら、アナログ型のLM35は「Arduino が電圧をどう読むか」を教えてくれる教材で、デジタル型のDS18B20は「センサーを実用品としてどう使うか」を教えてくれる部品です。
同じ温度センサーでも、配線先、必要な部品、コードの考え方が変わるところに注目すると、次に光センサーや距離センサーへ進んだときの理解もつながっていきます。
距離センサーの使い方|超音波・IR・ToFはどう選ぶ?
距離センサーは、どれも「物体までの距離を測る部品」ですが、実際に触ってみると得意分野がはっきり分かれます。
ここがポイントです。
障害物の有無を大まかに知りたいのか、机の上で数cm単位の変化を素直に追いたいのか、配線本数を減らしたいのかで、選ぶべきセンサーは変わります。
筆者が入門講座でよく並べるのはHC-SR04のような超音波、GP2Y0A21YK0FのようなIR距離センサー、そしてVL53L0Xです。
屋内の安定計測ならVL53L0X、コスト優先の障害物検知なら超音波、小型で応答の軽さを取りたいならIRという整理にすると迷いません。
超音波の得意/不得意
屋外では風や温度の影響も無視できません。
超音波は空気中を伝わるので、室内で問題なくても、風が当たる場所では戻り方が乱れます。
日なたと日陰で空気の状態が変わる環境でも、机上のテストほど素直には並びません。
つまり、超音波は「色に強い」代わりに「空気と反射面の条件」に敏感です。
対象が大きくて、正面に置かれた障害物の有無を知りたい用途では扱いやすく、距離の絶対値をぴったり詰めたい用途では別方式のほうが話が早いことがあります。
IR距離センサーの注意点
IR距離センサーは、赤外線を使って距離を出す方式です。
SharpのGP2Y0A21YK0Fは代表的な三角測距タイプで、10cm〜80cmのレンジを持ち、アナログ電圧で距離に応じた値を返します。
超音波より本体を小さくまとめやすく、反応も軽いので、近距離で素早く変化を見たい用途に向きます。
小型ロボットや簡単な手前検知では、このタイプが収まりよく感じる場面があります。
ただしIRは、外光の影響を受けやすい方式です。
屋内の蛍光灯下では普通に読めても、窓際や屋外では値が不安定になることがあります。
さらに、対象物の色や材質でも結果が変わります。
白い紙はよく反応するのに、黒い布や光沢の強い面では読みが落ち着かない、というのは典型例です。
超音波が色に引っぱられにくいのに対し、IRは「光がどう返るか」に結果が乗るので、同じ20cmでも相手が変わると出力の雰囲気が違って見えます。
ここでつまずきやすいのが、IR距離センサーは「近いほど高い電圧、遠いほど低い電圧」といった単純な比例ではない点です。
Sharpのデータシートでも距離と電圧は反比例に近いカーブで示されており、analogRead() の値をそのまま cm に置き換えるのは難しい部類です。
センサーの動きを眺める段階では十分学びがありますが、距離を数字としてきれいに出したいなら補正が前提になります。
つまりIRの得意分野は、精密な物差しというより「この範囲に何か来た」「近づいている」という変化の検出です。
ToF(VL53L0X)の接続とI2Cアドレス注意
NOTE
VL53L0Xを複数台つなぐときは、全台が同じ 0x29 で起動するため、そのままでは衝突します。
1台ずつ起動してアドレスを振り直す構成や、XSHUT端子を使って順番に立ち上げる構成が必要になります。
補足: チップ(VL53L0X)自体の特性と、実際に手に入る「モジュール(ブレークアウト基板)」の仕様は異なることが多く、電源電圧対応範囲、最大測距、消費電流などの数値はモジュール実装や回路設計・ファームウェア設定に依存します。
設計や電源管理に影響する値を使うときは、購入したモジュールの製品ページ/データシートで必ず確認してください。
分圧回路の作り方
分圧回路の作り方
CdSセルやLDRは、当たる光の量で抵抗値が変わる部品です。
明るいと抵抗が下がり、暗くなると抵抗が上がります。
Arduino のアナログ入力は電圧(0V〜5V)を読むので、抵抗の変化を電圧に変換する分圧回路を作ります。
入門で定番の構成は固定抵抗 10kΩ と LDR を直列にして、中点(接続点)を A0 に取り出す方法です。
ここでは「固定抵抗を上側(5V 側)、LDR を下側(GND 側)」に置く構成を標準例として示します。
回路(推奨): 5V — [10kΩ] — (A0) — [LDR] — GND
挙動(この向き): 明るくなると LDR の抵抗が下がるため、分圧の下側抵抗(R_lower)が小さくなり、A0 に現れる電圧は下がります(analogRead の値は小さくなる)。
逆に暗くなると LDR 抵抗が上がり、A0 の電圧は上がる(analogRead の値は大きくなる)という向きになります。
分圧の一般式(確認用):
Vout = Vcc × (R_lower / (R_upper + R_lower))
(この構成では R_upper = 10kΩ、R_lower = LDR)
NOTE
本記事内の回路図とサンプルコードは「5V — [10kΩ] — (A0) — [LDR] — GND」(固定抵抗を上側、LDR を下側)を標準例として統一しています。
もし逆向き(5V—[LDR]—(A0)—[10kΩ]—GND)で組む場合は、明るさ増加時に analogRead が大きくなる点や、サンプルコード中のしきい値・条件判定を必ず反転して読んでください。
R_fixed=10kΩは入門向けの目安で、環境やLDR個体差に応じて調整が必要です。
まずは生の値をシリアルモニタに流すと、反応の雰囲気がつかめます。
void setup() {
Serial.begin(115200); // シリアル出力の設定
}
void loop() {
int lightValue = analogRead(A0);
Serial.println(lightValue);
delay(100);
}
正常に配線できていれば、手をかざしたり、机の上の照明の向きを変えたりすると数値が追従します。
筆者の手元では、室内の蛍光灯下で500〜800近辺を行き来し、LDRを手で覆うと一気に200以下まで落ちる動きが見えました。
この反応は「入力が生きている」ことを体感するにはちょうどよく、数字が変わるたびにセンサーと回路のつながりが頭に入ってきます。
ただ、LDRの値は照明のちらつきや手の影の揺れにも反応するので、そのままでは表示が細かく上下することがあります。
そこで有効なのが平滑化です。
入門段階では、直近の数回分を平均するだけで十分です。
たとえば10回読んで平均を出すと、LED制御や表示のブレが減り、しきい値を決める作業も進めやすくなります。
void setup() {
Serial.begin(115200); // シリアルを開始
}
void loop() {
long sum = 0;
for (int i = 0; i < 10; i++) {
sum += analogRead(A0);
delay(5);
}
int averageValue = sum / 10;
Serial.println(averageValue);
delay(100);
}
平滑化の目的は、値をきれいに見せることだけではありません。
しきい値判定でLEDがパカパカ切り替わるのを抑える効果もあります。
LDRは周囲の照明に素直に反応するぶん、天井灯の位置や窓からの光で数字の中心が変わります。
だからこそ、生の値を見てから平均値も眺めると、「この場所ではどの辺が明るい状態か」がつかみやすくなります。
TIP
シリアルモニタで値を見ながら、開放した状態と手で覆った状態の両方を確かめると、しきい値の置き場所が決めやすくなります。
LDRは照度計ではなく、まずは「明暗の変化を拾う入力」として捉えると回路の意味が見えやすくなります。
明るさしきい値でLEDを制御
値が読めたら、次はその数字を動作へつなげます。
いちばん手応えが出るのは、明るさのしきい値でLEDをON/OFFする方法です。
UnoにはD13につながった内蔵LEDがあるので、外付けLEDを用意しなくても試せます。
考え方は単純で、A0の値がある閾値を下回ったら点灯、上回ったら消灯、という条件分岐にするだけです。
先ほどの配線向きでは、明るいと値が下がり、暗いと値が上がる傾向になります。
そこで、たとえば「暗いときにLEDを点ける」なら、読み値が閾値より大きいかどうかを見ます。
コードは次のように書けます。
const int sensorPin = A0;
const int ledPin = 13;
const int threshold = 600;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(115200); // シリアル通信開始
}
void loop() {
long sum = 0;
for (int i = 0; i < 10; i++) {
sum += analogRead(sensorPin);
delay(5);
}
int lightValue = sum / 10;
if (lightValue > threshold) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
Serial.println(lightValue);
delay(100);
}
この例では threshold を600にしていますが、ここは固定の正解がある値ではありません。
室内照明の位置や机の明るさで、ちょうどよい境目は変わります。
筆者はまずシリアルモニタで普段の値を見て、手で影を作ったときにどこまで動くかを確認し、その中間あたりから決めることが多いです。
蛍光灯下で500〜800あたりを動いて、手で覆うと200以下へ落ちる配線なら、その結果に合わせて「明るいと点灯」なのか「暗いと点灯」なのかを条件ごと入れ替えれば、狙った反応に寄せられます。
ここがポイントです。
LDRは周囲の照明そのものに強く引っぱられるので、教室、作業机、窓際では同じコードでも境目の感触が変わります。
だから実際には、しきい値を一度決めたら終わりではなく、その場の明るさに合わせて数値を合わせ込むのがコツになります。
こうした調整込みで扱うと、アナログ入力の読み値が「ただの数字」ではなく、「環境を反映した入力信号」だと実感できます。
まず動かすための配線とコードのコツ
必要ライブラリの導入手順
ここでは、まず1つずつ確実に読める状態を作ることを優先します。
初心者の方がつまずきやすいのは、配線とコードを一気にまとめてしまう場面です。
筆者はワークショップでも、LDR、LM35、DS18B20、VL53L0Xを1本の大きなスケッチに最初から詰め込まず、各センサーごとに最小構成のスケッチを別々に用意する流れを取っています。setup() で初期化し、loop() で1秒ごとに読み取り、Serial に出す形にしておくと、どこで止まっているか切り分けやすくなります。
Arduino IDEでは、DS18B20用にOneWireとDallasTemperature、VL53L0X用にAdafruit_VL53L0Xを入れておくと進めやすくなります。
導入手順は、メニューの「ツール」ではなく、ライブラリ管理画面から行います。Arduinoの基本手順はArduino Getting Started(https://docs.arduino.cc/learn/starting-guide/getting-started-arduino/の流れに沿って進めると迷いません)。
ライブラリの追加は、Arduino IDEの「ライブラリマネージャ」を開き、検索欄にそれぞれの名前をそのまま入力します。
検索語は OneWire、DallasTemperature、Adafruit_VL53L0X です。
候補が出たらインストールし、スケッチ例が開ける状態にしておくと確認が早く進みます。
筆者はAdafruit_VL53L0Xを入れたあと、まず「サンプル」からAdafruit_VL53L0Xの example をそのまま動かします。
これで距離が出れば、配線もI2C通信も通っていると判断できるので、その後に自分のコードへ移ると不安が減ります。
コードの骨格は、どのセンサーでもほぼ共通です。setup() では Serial.begin(115200); を書き、必要なライブラリの初期化や begin() を呼びます。loop() ではセンサーの値を取得し、Serial.println() で出力し、delay(1000); で1秒間隔にします。
アナログ系のLDRやLM35はまず生の値を出し、DS18B20やVL53L0Xはライブラリのサンプルに近い形で「温度」「距離」の数値をそのまま確認するのが近道です。
ピン番号の明記と配線表
この先の説明では、Arduino Uno基準でピンを固定して進めます。
配線が人によって違うと、コード例を読んだときに頭の中で置き換えが必要になり、そこで止まりがちです。
本記事では、LDRをA0、LM35もA0に接続し、LDRとLM35は同時接続ではなく切り替えて使う前提にそろえます。
DS18B20はD2、VL53L0XはI2CでSDA=A4、SCL=A5です。
| センサー | Unoでの接続先 | 補足 |
|---|---|---|
| LDR/CdS | A0 | 分圧回路で接続 |
| LM35 | A0 | LDRと切替使用 |
| DS18B20 | D2 | データ線に4.7kΩプルアップ |
| VL53L0X | SDA=A4、SCL=A5 | I2C接続 |
LDRは分圧回路としてA0へ入れます。
前のセクションで触れた通り、アナログ入力は0〜1023で読まれるので、まずはこの変化を確認する役目です。
LM35もA0へつなぎますが、LDRと同時には使わず、配線を差し替えて動作確認する形にすると混乱しません。
A0という同じ入口で、光と温度の両方を試せるので、アナログ入力の感覚がつながります。
DS18B20は3.0V〜5.5Vで動作し、Unoの5V系でも扱えます。
接続はVCC、GND、DATAの3本で、DATAをD2へ入れ、DATAと5Vの間に4.7kΩのプルアップ抵抗を入れます。
この抵抗が抜けていると、ライブラリは入っていても温度が読めないことが多く、初心者が最初に止まりやすい場所です。
VL53L0XはI2Cなので、電源のほかはSDAとSCLの2本です。
UnoではSDAがA4、SCLがA5です。
ボード上にSDA/SCLと独立表示されたヘッダがある場合も、信号としてはA4/A5と同じです。
配線本数が少ないので見た目はすっきりしますが、I2C機器を複数つなぐときはアドレスに注意が必要です。
VL53L0Xの標準アドレスは 0x29 なので、同じアドレスの機器がいると競合します。
その場合は、対象を1台ずつ初期化する構成や、XSHUTのようなシャットダウン系のピンを使って順番に立ち上げる構成を考えます。
配線全体で効くコツもあります。
5VとGNDはすべてのセンサーで確実に共通化し、ブレッドボード上のジャンパ線は短めにまとめると、読み値のふらつきや接触不良が減ります。
アナログ入力のLDRやLM35は、1回だけ読んだ値をそのまま使うより、複数回読んで平均を取ったほうが表示が落ち着きます。
直近の数回を平均するだけでも、手元で見るSerialの数字が追いやすくなります。
TIP
1つのセンサーが読めたら、その配線をいったん崩さずにコードだけ少し変える、という順番だと原因を絞り込みやすくなります。
配線とコードを同時に大きく触ると、止まったときに見る場所が一気に増えます。
シリアルモニタでの確認ポイント
値の確認は、シリアルモニタを開いて数字が周期的に更新されるかを見るところから始めます。Arduino IDEでは「ツール」から「シリアルモニタ」を開き、ボーレートを 115200bps に合わせます。Serial.begin(115200); とモニタ側の設定がそろっていないと、文字化けしたり、何も読めなかったりします。
表示の見方もセンサーごとに分けると判断が早くなります。
LDRやLM35は、まず生の値や換算値が1秒ごとに更新されるかを見ます。
コード側で delay(1000); を明示しておけば、更新間隔が目で追いやすくなります。
DS18B20は requestTemperatures() のあとに温度を出力し、VL53L0Xは測距結果を距離として表示します。
どのセンサーでも、最初の段階ではグラフのような見せ方より、1行ごとの数字が一定間隔で増えていく形のほうが状態を読み取りやすいです。
確認するときは、表示された値が変わる理由を自分で作るのがコツです。
LDRなら手で覆う、LM35やDS18B20なら指で触れる、VL53L0Xなら対象物を近づけたり離したりする、という具合です。
変化を自分で起こし、その直後にシリアルモニタの値が反応するなら、配線とコードの両方が通っている可能性が高くなります。
逆に、数字がずっと固定なら、ピン番号の書き間違い、GNDの抜け、プルアップ抵抗の不足、ライブラリ未導入のどれかを疑う流れになります。
とくにVL53L0Xでは、サンプルコードが動くかどうかの確認が効きます。
筆者は自作コードに入る前に、ライブラリ導入後のサンプルをそのまま書き込んで測距が出るところまで進めます。
そこで距離が表示されれば、「I2C配線」「電源」「ライブラリ」の3つは通過できています。
自分のスケッチで読めなくなった場合も、戻る場所がはっきりするので、復旧が早くなります。
シリアルモニタに出す内容は、最初から装飾しすぎないほうが判定しやすくなります。
たとえば Temperature: 24.5 や Distance: 312 のように、項目名と値だけに絞ると十分です。
文字列を大量に付けると、読めていないのか、送信が多すぎるのかが見えにくくなります。
1秒間隔、1行1データ、115200bpsという形にそろえると、センサー追加のたびに同じ手順で確認できます。
実践演習:3ステップで値を読む
Step1:LDRで0〜1023を観察
最初の1本として勧めやすいのは、LDRをA0につないで生の値を読む手順です。
ここで見るのは「明るさを正しい単位で測る」ことではなく、手で覆う、ライトを当てる、机の向きを変えるだけで数字が動くという感覚です。
Arduino Uno系のアナログ入力は0〜1023で読めるので、LDRの分圧回路を組み、analogRead(A0) の結果をそのままシリアルモニタへ出せば、センサー入力の入り口がつかめます。
筆者の経験では、この「数値が動く」体験が最初のハードルを一気に下げます。
温度や距離のセンサーは配線や初期化の手順が少し増えますが、LDRでまず反応を見ると、読者も自分の手で変化を作って確認する癖がつきます。
そこから先は、配線の向きやピン番号を丁寧に追う意識が自然に強まり、温度や距離でも成功までの回り道が減ります。
配線は、5VとA0の間に10kΩの固定抵抗、A0とGNDの間にLDRを入れる形が定番です。
Device Plusの光センサーでArduinoへの入力を試すDevice Plusの光センサーでArduinoへの入力を試すの流れでも、分圧回路でアナログ入力へ入れる基本が確認できます。
この向きなら、暗くすると値が上がる側に動きます)。
コードは最小構成で十分です。
void setup() {
Serial.begin(115200); // シリアルのボーレートを設定
}
void loop() {
int ldrValue = analogRead(A0);
Serial.println(ldrValue);
delay(1000);
}
所要時間の目安は10〜15分です。
ブレッドボードの電源レールに5VとGNDを配り、A0へ分圧の中点を入れられれば動きます。
正常値の目安としては、10kΩの分圧なら明るい室内で100前後、普通の室内で500前後、暗くすると900台に近づくことがあります。
数字は照明の当たり方で変わりますが、明るさで連続的に増減するなら読み取りは通っています。
つまずきやすいポイントは、LDRと固定抵抗を直列にせず並列にしてしまうことと、A0を分圧の中点ではなく5VやGNDへ直結してしまうことです。
表示がずっと0か1023に張り付くときは、この2か所を見直すと原因が見つかることが多いです。
数値が取れたら、次はしきい値の感覚も試せます。
たとえばD13の内蔵LEDを使い、ldrValue > 700 で点灯という条件にすると、「暗い」を数字で判定する流れがつながります。
const int ledPin = 13;
void setup() {
Serial.begin(115200); // デバッグ用シリアル開始
pinMode(ledPin, OUTPUT);
}
void loop() {
int ldrValue = analogRead(A0);
Serial.println(ldrValue);
if (ldrValue > 700) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(1000);
}
ここでの完成形は、シリアルモニタに値が並び、手で覆った瞬間に数字とLEDの両方が変わる状態です。センサー1個でも、この反応が安定して出れば先に進めます。

光センサーでArduino(アルディーノ)への入力を試してみる! - DEVICE_PLUSのブログ
前回までLEDを使った回路を利用してArduino(アルディーノ)の基本的な流れをご紹介いたしました。今回から、LEDに加えて、他の電子部品の利用や、それを使ってどんなことができるのか、ということをやっていきたいと思います。 目次 そもそも
deviceplus.jpStep2:温度を摂氏で表示
温度はLM35でも進められますが、この段階ではDS18B20で摂氏をそのまま表示するほうが流れをつかみやすいです。
動作電圧は3.0V〜5.5Vで、Unoの5V系にそのまま載せられます。
測定範囲は-55℃〜+125℃、-10℃〜+85℃では±0.5℃の精度があるので、室温の確認から身近な温度変化の観察まで扱いやすい部類です。
配線はVCCを5V、GNDをGND、DATAをD2へつなぎ、DATAと5Vの間に4.7kΩを入れます。
前のセクションでも触れた通り、この抵抗が抜けると温度が返ってこないまま止まりやすいので、まずここを固めます。
LDRでA0の変化を見たあとにDS18B20へ進むと、読めないときでも「今回は配線かライブラリ側だな」と切り分けやすくなります。
ライブラリはOneWireとDallasTemperatureを使います。
Random Nerd TutorialsのDS18B20 Temperature Sensor with ArduinoRandom Nerd TutorialsのDS18B20 Temperature Sensor with Arduinoでも、その組み合わせで温度取得の流れが整理されています。
コードは次の形が基本です。
#include <OneWire.h>
#include <DallasTemperature.h>
const int oneWireBus = 2;
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200); // シリアル通信用に初期化
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.print(tempC);
Serial.println(" C");
delay(1000);
}
所要時間の目安は15〜20分です。
LDRより部品は1つ増えますが、シリアルモニタに Temperature: 24.50 C のような表示が出れば成功です。
室内なら20〜30℃台に落ち着くことが多く、指で触れると数秒遅れて少し上がる動きが見えます。
ここでは「1秒ごとに数字が出る」「触れると変わる」という2点がそろえば十分です。
つまずきやすいポイントは3つあります。
1つ目はプルアップ抵抗の入れ忘れ、2つ目はDATA線の接続先とコード中のピン番号が一致していないこと、3つ目はライブラリを入れたつもりでスケッチが別の環境を参照していることです。
値が -127.00 のように表示される場合は、センサー未検出のサインとして読むと復旧が早くなります。
LDRの段階でシリアルモニタの見方に慣れていれば、ここでは温度の変化だけに集中できます。
Step3:距離をmm表示
距離センサーはHC-SR04のような超音波も定番ですが、この実践ではVL53L0XでI2C通信を体験しながら、mm単位で数値を出す流れがまとまりやすいです。
標準I2Cアドレスは0x29で、モジュール例では電源電圧がDC3.3〜5V、最大測距は約2mです。
電源とGNDに加え、SDAとSCLの4本でつながるので、配線本数を抑えたまま「通信で値を読む」段階へ進めます。
UnoではSDAがA4、SCLがA5です。
VCCを5V、GNDをGND、SDAをA4、SCLをA5へつなぎます。
アナログ入力とは違って、ここでは電圧を自分で換算しません。
ライブラリ経由で距離データを受け取り、そのままmm表示にする形です。
LDRで配線の並べ方に慣れ、DS18B20で電源とデータ線の確認を丁寧に進めたあとだと、VL53L0Xの結線でも迷いが減ります。
筆者はこの順番で教えることが多いのですが、1段ずつ積むとブレッドボード上の線の置き方まで整ってきます。
AdafruitのAdafruit VL53L0X Arduino CodeAdafruitのAdafruit VL53L0X Arduino Codeに沿った初期化を使うと、mm表示まで短い距離で到達できます。
コードは次のような構成です)。
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(115200); // シリアルを115200bpsで設定
if (!lox.begin()) {
Serial.println("VL53L0X not found");
while (1);
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false);
if (measure.RangeStatus != 4) {
Serial.print("Distance: ");
Serial.print(measure.RangeMilliMeter);
Serial.println(" mm");
} else {
Serial.println("Out of range");
}
delay(1000);
}
所要時間の目安は15〜25分です。
I2Cライブラリの導入とサンプルの書き込みまで含めると少し長くなりますが、対象物を近づけたり離したりして Distance: 180 mm のように変化が出れば、距離センサーの入り口は通過です。
手のひらやノートを前に出し入れして、数字が連続して動くかを見ると判定しやすくなります。
つまずきやすいポイントは、SDAとSCLの取り違え、電源の入れ忘れ、ライブラリ未導入の3つです。
I2Cは見た目の配線が少ないぶん、1本違うだけで何も出ない状態になりやすいので、読めないときはサンプルコードに戻して確認すると切り分けが早くなります。
複数のI2C機器を同時接続するとアドレス競合を意識する必要がありますが、この段階ではVL53L0Xを1台だけつないで、mm表示が安定して出るところまで進めれば十分です。
TIP
この演習の完成目標は、3種類すべてを一度に並べることではありません。
LDRDS18B20VL53L0Xのどれか1種類以上で、シリアルモニタに数値が安定して表示され、自分で変化を与えたときに反応が返ってくる状態まで持っていければ、次の工作へ進む土台ができています。
Arduino Code | Adafruit VL53L0X Time of Flight Micro-LIDAR Distance Sensor Breakout | Adafruit Learning System
learn.adafruit.com動かないときのチェックリスト
配線・極性の再点検
動かないときに最初に見るべきなのは、コードより先に配線です。
初心者向けのワークショップでも、原因の多くはセンサー本体の故障ではなく、電源線・信号線・向きのどれかにあります。
とくに見落とされやすいのが、ArduinoとセンサーのGNDが共通になっていない状態です。
5Vと信号線だけつないでも、基準電位がそろっていないと値は読み取れません。
ブレッドボードで電源レールをまたいでいるときは、見た目ではつながっているように見えても、GNDだけ別系統になっていることがあります。
アナログ系のセンサーでは、A0とデジタルピンの取り違えも定番です。
LM35やLDRは電圧の変化を読むのでA0側につなぎますが、これをDピンに挿しているとシリアルモニタの数字が動きません。
逆にDS18B20のようなOneWireのデジタルセンサーをA0に入れて、コードではDピン番号を指定しているケースもよくあります。
Arduino UnoはデジタルI/Oが14本、アナログ入力が6本あるので、ブレッドボード上で線が増えてくると混同しやすくなります。
ピン名を「色」ではなく「印字」で追うだけで、切り分けが進みます。
センサーの向きや極性の逆差しも、真っ先に疑いたい。
LM35は平らな面の向きを基準にピン順を見ないと、VccとGNDを逆に入れてしまいます。
LDRそのものには極性がありませんが、分圧回路として組んだときにA0へ行く中点ではなく、固定抵抗や5V側へそのまま挿してしまうと、期待した変化が出ません。
VL53L0Xでは、レンズ面を測りたい方向へ向けていないだけで「反応しない」と感じる場面もあります。
距離センサーは配線が合っていても、向いている先に対象物がないと値の確認ができません。
筆者の経験では、ブレッドボードは1列ずれただけで全滅します。
見た目では正しく並んでいても、電源列ではなく隣の絶縁列に刺さっていた、ということは珍しくありません。
こういうときは配線を目で追うより、隣の列との導通をテスターで確認したほうが早いです。
とくにセンサーの3本足や4本足は、差したつもりの列と実際の列がずれていることがあり、そこを直しただけで一気に復旧します。
TIP
値がまったく出ないときは、センサーから追うより「5Vが来ているか」「GNDが同じ列に落ちているか」「信号線が指定ピンへ届いているか」の順で見ると、止まっている場所を見つけやすくなります。
ライブラリとIDE設定の見直し
配線に問題が見当たらないのに動かない場合は、開発環境の設定を見直します。
ここで多いのが、ライブラリ未導入、または古いライブラリや別名のライブラリを参照している状態です。
DS18B20ならOneWire系と温度取得用ライブラリの組み合わせ、VL53L0Xなら対応ライブラリが必要です。
同じセンサー名でも複数の実装があり、サンプルコードを書いた人と手元の環境で参照先がずれていると、コンパイルは通っても初期化に失敗することがあります。Arduino公式の導入手順はArduino Getting Started(https://docs.arduino.cc/learn/starting-guide/getting-started-arduino/の流れに沿って見直すと、IDEまわりの抜けを拾いやすくなります)。
ボードとポートの選択ミスも、初心者が止まりやすいところです。
スケッチの書き込み先が別のCOMポートになっていたり、ボード設定がUno以外のままだったりすると、書き込めても期待どおりに通信できません。
USBを挿し直した直後はポート番号が変わることもあり、前回の設定が残っているだけで「急に動かない」に見えます。
シリアルモニタでは、ボーレートの不一致を疑う場面も多いです。
コード側で Serial.begin(115200); としているのに、モニタ側が9600になっていると文字化けします。
逆に、文字化けではなく何も出ない場合でも、まず通信速度を合わせてから判断したほうが切り分けが正確になります。
表示内容が壊れているだけで、センサー自体は正常ということがあるためです。
サンプルコードを試すときは、書き換えたピン番号と、実際に挿したピン番号が一致しているかも見落とせません。
前のセクションで触れたように、配線だけでなくコード側の指定先もそろって初めて動きます。
DS18B20で -127.00 のような値が出る、あるいはVL53L0Xで初期化失敗の表示が出るときは、ライブラリの読み込み先とピン設定の両方を同時に見直すと復旧が早まります。
センサー固有の落とし穴
センサーごとに、配線やIDE設定だけでは片づかない落とし穴があります。
代表例がDS18B20の4.7kΩプルアップ抵抗の不足です。
データ線とVccの間にこの抵抗が入っていないと、OneWire通信が不安定になり、温度が取れなかったり未検出になったりします。
DS18B20は3.0V〜5.5Vで動作しますが、電源電圧が範囲内でもプルアップが抜けていると通信は成立しません。
温度センサーとしての精度以前に、まず信号線を正しく引き上げる必要があります。
VL53L0Xでは、I2Cアドレス衝突が見落とされがちです。
標準アドレスは0x29なので、複数台をそのまま同じI2Cバスへつなぐと衝突します。
1台なら動くのに2台で止まるときは、配線ミスよりこの競合を疑ったほうが筋が通ります。
I2Cは配線本数が少ないぶん、アドレス管理まで含めて配線と考えると整理しやすくなります。
光を使う距離センサーや光センサーでは、外光の影響も無視できません。
IR距離センサーは照明や直射日光で読みが乱れますし、LDRも部屋の向きや机上のライトだけで値が大きく動きます。
ブレッドボードもコードも正しいのに数値が安定しないときは、センサーの前に手をかざす、照明の向きを変える、窓際から離すといった操作だけで挙動が変わることがあります。
LDRは0〜1023の連続値を見る題材として向いていますが、そのぶん外乱もそのまま拾います。
LM35でも、向きが合っていて配線も正しいのに値がおかしいときは、出力をA0ではなく別の場所から取っていないかを見直したいところです。
1℃あたり10mVという素直な出力なので、アナログ入力に正しく入っていれば、指で触れたときの変化が確認しやすいセンサーです。
そこで動きが出ないなら、極性、A0の接続、GND共通の3点に戻ると原因にたどり着きやすくなります。
この段階で大切なのは、全部を一度に疑わず、センサー固有の決まりごとを1つずつ外していくことです。
DS18B20ならプルアップ、VL53L0XならI2Cアドレス、LDRやIR距離センサーなら外光という具合に、その部品ならではの癖を先に押さえると、初心者でも復旧の道筋が見えます。
どのセンサーから始めるべきか
初心者の最初の1個:LDR
最初の1個を選ぶなら、筆者はLDRを先に挙げます。
理由は単純で、明るい・暗いの変化が数値にそのまま出やすく、配線も最小限で済むからです。
Arduino Unoのアナログ入力は6本あり、0〜1023の読み値で変化を追えるので、手で影を作った瞬間に値が動く感覚をつかみやすい題材です。
固定抵抗に10kΩを使う定番の分圧なら、明るい室内で100前後、普通の室内で500前後、暗所で900台まで上がる場面があり、数字の変化が目で追えます。
こういう「触るとすぐ変わる」体験は、最初の成功体験として強いです。
筆者の教室でも、最初はLDRから入る流れがいちばん安定します。
暗くすると数値が上がる、ライトを当てると下がる、という反応がその場で返ってくるので、受講者が「入力ってこう読むのか」と腹落ちしやすいのです。
そのあとにDS18B20、さらにVL53L0Xへ進む順番だと、配線とコードの難しさが少しずつ増えていく一方で、毎回きちんと成果が見えるので、継続する人が増える傾向があります。
向いている用途は、部屋の明るさでLEDの点灯条件を変えるような入門工作です。
逆に向かない用途は、照度を物理量として正確に記録したい場面です。
LDRは光の変化を見るには向いていますが、「何ルクスか」をそのまま信頼できる数字として扱うセンサーではありません。
まずは「値が変わる感覚」をつかみたい人、アナログ入力の基本を体で覚えたい人なら、LDRがいちばん入りやすい選択です。
精度重視の温度:DS18B20
温度を確実に数値で読みたいなら、DS18B20が一歩抜けています。
温度センサーの入門ではLM35も定番ですが、DS18B20はデジタル出力なので、アナログ値を電圧へ換算して、そこから温度へ直す段階がありません。
しかも仕様としては3.0V〜5.5Vで動作し、測定範囲は-55℃〜+125℃、-10℃〜+85℃で±0.5℃の精度があります。
ここまで条件がそろっていると、「室温を数字で出したい」という目的に対して話が早いです。
DS18B20が向いているのは、温度表示、温度ログ、しきい値での制御のように、数値の意味がそのまま使える場面です。
たとえば室温が何℃かをシリアルモニタに安定して出したいとき、アナログ換算の揺れを気にせず進められます。
DS18B20は「ちゃんと温度計になった」と感じるまでの距離が短いセンサーです。
一方で、向かない用途はアナログ入力そのものの勉強を最初にやりたい場面です。
データ線1本で扱えるのは利点ですが、OneWireの考え方やライブラリの導入が入るので、電子回路の超初歩としてはLDRより一段だけ抽象度が上がります。
つまり「最初の1個」としての気軽さではLDRに譲りますが、「温度をちゃんと数字で読みたい」という目的がはっきりしているなら、DS18B20のほうが遠回りになりません。
遊びやすい距離:超音波 or ToF
距離を手軽に試すなら、候補はHC-SR04のような超音波センサーか、VL53L0XのようなToFセンサーです。
どちらも「手を近づけると数字が変わる」ので反応が見ていて楽しく、作品の題材にもつながりやすい分野です。
超音波は昔からの定番で、2cm〜400cmを測れるHC-SR04のようなモジュールが広く使われています。
価格面でもマルツでは310円の掲載例があり、まず動かしてみる題材として手に取りやすい存在です。
超音波が向いている用途は、障害物までのおおよその距離を安価に知りたい工作です。
色の影響を受けにくいので、紙でも箱でも反応を見やすいのが利点です。
ただし、向かない用途としては細かい対象物や反射条件が悪い物体を安定して測る場面が挙がります。
角度がついた面や細い棒では値が飛ぶことがあり、ここで「距離センサーって難しい」と感じる初心者もいます。
その点で、室内での扱いやすさまで含めるとVL53L0Xのほうに分があります。
I2C接続でまとまり、標準アドレスは0x29、モジュール例ではDC3.3〜5Vで動き、最大約2mまで測れるので、机の上で手や小物との距離を読む遊びには収まりがいいです。
向いている用途は、室内での手元距離の検出や、近距離の反応をきれいに出したい工作です。
向かない用途は、複数台をそのまま同じI2Cバスへ並べる構成です。
この場合はアドレス衝突を考える必要が出てきます。
目的別に切り分けると、判断はそこまで難しくありません。
まず「何でもいいから最初の成功体験がほしい」ならLDRです。
「温度を数字でちゃんと読みたい」ならDS18B20です。
「距離で遊びたい」なら、まずは超音波でも始められますが、室内で机の上から外れにくい一台を選ぶならVL53L0XのようなToFが収まりやすいです。
TIP
迷ったら、値の変化を見る練習はLDR、温度をそのまま表示したいならDS18B20、距離の反応を作品に使いたいならVL53L0Xという順で考えると、選ぶ理由がはっきりします。
筆者の現場でも、この順番だと「読めた」「次もやれそうだ」という感覚が途切れにくくなります。
補足:Arduinoの現行事情と価格例
この補足では、本文中の配線表記がどのUnoを基準にしているかをそろえておきます。
本記事はArduino Uno系の基本形を土台にしており、デジタルI/Oは14本、アナログ入力は6本という定番の構成を前提に、A0やA4、A5といった名前で配線を書いています。
ワークショップでも、最初にこの命名で頭の地図を作ってもらうと、温度・光・距離の各センサーへ横展開するときに迷いが減ります。
現行モデルに目を向けると、Arduino公式ストアではArduino UNO R4 WiFiが27.60米ドル、Arduino UNO Q 4GBが61.04米ドルで掲載されています。
位置づけとしては、UNO R4 WiFiは現行のUNO系を広げたモデル、UNO Qはより新しい世代の高性能モデルとして見ると整理しやすいです。
ただ、本記事のように「まずセンサーをつないで読む」段階では、どのボードでも最初に覚えるべき軸は大きく変わりません。
UNO R4 WiFiはUSB-Cになっていて給電まわりも落ち着いており、授業や自宅学習で扱うときに取り回しの良さを感じます。
ケーブルの選択でつまずきにくく、電源投入まわりも素直なので、学習用の現行機としては印象がいいです。
その一方で、初心者が最初に覚える名前は、やはりUno基準のピン命名に寄せたほうが混乱が少なく済みます。
A0はアナログ入力、D2はデジタル、I2CはSDAとSCL、という基本の呼び方を先に固めておくと、R3でもR4でも説明を読み替えやすくなります。
I2Cまわりはその典型です。
VL53L0XのようなI2Cセンサーを使うとき、SDAとSCLで通信するという考え方自体はR4世代でも同じです。
違いとして意識したいのは、基板上のシルク印刷やピン位置の見え方です。
UnoではA4がSDA、A5がSCLとして読まれる説明に慣れている人が多い一方、世代によっては基板上にSDA/SCLが前面に出た表記になっていて、最初に見たときの印象が少し変わります。
ここが。配線するときは、記事中の「A4/A5」という表記を丸暗記するのではなく、実機のSDA/SCLシルクと対応づけて読むと迷いません。
Arduino Uno系は世代が進んでも、入門の筋道そのものは崩れていません。
アナログならA系、デジタルならD系、I2CならSDA/SCLという見方で整理しておけば、たとえばLDRDS18B20VL53L0Xの配線も、そのまま現行機へ持っていけます。
新しいボードほど機能は増えますが、最初の一歩では「どの信号線をどこへ入れるか」を一本ずつ追えることのほうが効いてきます。
よくある質問
配線・ピンに関する質問
Arduino UnoのI2Cピンはどこですか、という質問は本当によく出ます。
本文でも触れた通り、UnoではSDAがA4、SCLがA5です。
ここで引っかかりやすいのは、配線図によって「A4/A5」と書かれていたり、「SDA/SCL」と書かれていたりする点です。
Uno R3系では基板上にSDA/SCLの表記が追加されており、信号としてはA4/A5とつながっています。
筆者のワークショップでも、A4とA5だけを暗記するより、実機のシルク印刷でSDAとSCLを見つけて、A4/A5と対応づけるほうが配線ミスが減ります。
DS18B20は3.3Vでも動きますか、という点も気になるところです。
DS18B20は3.0V〜5.5Vで動作するので、3.3V系でもArduino Unoの5Vでも使えます。
Unoと組み合わせる入門用途では5V配線のまま扱う場面が多く、電源条件で困ることはあまりありません。
温度センサーとして使う分には、電源電圧よりもデータ線の配線とプルアップ抵抗の入れ方のほうが、動作の成否に直結します。
LDRの分圧抵抗は何Ωがよいですか、という質問には、筆者はまず10kΩ付近から始めると答えています。
LDRは明るさで抵抗値が大きく変わるので、固定抵抗の値で読み取りの雰囲気が変わります。
10kΩは、明るい場所でも暗い場所でも変化を追いやすい中間点になりやすく、0〜1023の変動を観察する最初の一歩として収まりがいい値です。
部屋の照明下で値が片側に寄り切るなら、そこで初めて抵抗値を振って調整すると、回路の意味もつかみやすくなります。
ライブラリ・アドレスに関する質問
VL53L0Xを複数台つなぎたいときはどうしますか、という質問では、I2Cの標準アドレスが0x29である点が出発点になります。
同じアドレスのセンサーをそのまま同じI2Cバスへ載せると衝突するため、1台ずつ起動してアドレスを振り直す流れが必要です。
実務でも入門でも、ここで使われるのがモジュールのXSHUT端子です。
全台を同時に起動せず、XSHUTで個別に立ち上げて順番に初期化し、それぞれへ別アドレスを割り当てる形です。
1台だけなら素直ですが、2台目からは「配線」より「初期化の順番」でつまずくことが増えます。
ライブラリがうまく入らない、サンプルコードの名前が違う、という相談も珍しくありません。
VL53L0XではAdafruit系のライブラリ構成がよく使われます。
『Adafruitの解説ページ』でも初期化から測距までの流れが整理されています。
I2Cデバイスは、配線が合っていてもライブラリ名とサンプルコードの組み合わせがずれると動かないように見えます。
筆者の経験では、「センサー名で検索して別作者のコードを混ぜる」と、初学者ほど迷路に入りやすくなります。
TIP
VL53L0Xが1台で動くのに複数台で止まるときは、故障より先にアドレス衝突を疑うと整理が早いです。
I2Cは配線本数が少ないぶん、初期化手順の意味を理解すると一気に見通しが良くなります。
用途選定に関する質問
超音波とToFはどちらが初心者向けですか、という質問には、筆者は最初の成功率で見るならToFのVL53L0Xが一歩上と答えます。
理由は明快で、I2C接続なので配線がまとまりやすく、机の上で手や小物を相手にすると反応が安定しやすいからです。
超音波のHC-SR04も定番で、2cm〜400cmを測れる扱いやすいモジュールですが、対象の角度や形で値が飛ぶ場面があります。
距離センサーに初めて触れる人ほど、「ちゃんと反応する」感覚を早く得られるのはToFのほうです。
一方で、コストや入手性を重視するならHC-SR04も依然として魅力があります。
マルツでは310円の掲載例があり、距離を読む仕組みを試す題材として手を出しやすい位置にあります。
音波で距離を測るという原理も直感的で、トリガとエコーの関係を追うと、センサーの読み取りそのものへの理解が深まります。
つまり、安く始めて動作原理も学びたいなら超音波、室内での安定感を優先するならToFという整理が合っています。
温度センサー選びでLM35とDS18B20のどちらがよいですか、という話も用途で答えが変わります。
アナログ入力の勉強を兼ねるならLM35、温度をそのまま数字で扱いたいならDS18B20という切り分けです。
DS18B20はOneWireで扱え、温度レンジは**-55℃〜+125℃、-10℃〜+85℃で±0.5℃**という仕様があるので、表示や記録へ進む流れが作りやすいです。
対してLM35は電圧から温度へ換算する一手間があるぶん、アナログ読取りの基本が身につきます。
学びたい軸が「回路」なのか「測定結果」なのかで、選ぶべき一台は自然に決まります。
次のステップ
ここまで読めたら、センサー入力の入口はもう越えています。
次は、読めた値をどう判断し、どう動作につなげるかに進む段階です。
まずはプログラミング基礎の条件分岐や平均化、しきい値処理を組み合わせて、数値を「意味のある反応」に変えてみてください。
1つのセンサーで手応えをつかんだあとに、出力制御や複数センサーの同時読取りへ広げると、Arduinoの面白さが一気に立ち上がります。
I2Cに慣れてきたら、温度や距離だけでなく、加速度や気圧のような別分野の計測へ横展開する流れも自然です。
大手メーカーで組込みシステムの開発に15年従事。Arduino・Raspberry Piを活用した自作IoTデバイスの制作実績多数。電子工作の基礎から応用まで、実務経験に基づいた解説を得意とする。