※本記事にはプロモーション(広告)が含まれています。
マイコンでセンサの電圧を読む手順は、電圧にする → ADC で読む → 式で直す、の3段です。温度センサ MCP9700 なら温度=(電圧−0.5)÷0.01 で、3つの例の換算の式は早見表、CdS の固定抵抗は選び方の節へ。
温度や明るさをマイコンで読むのは、電子工作でも仕事でも最初の一歩です。ところが、センサをつないで数字が出ても、それが何℃なのか、正しいのかがわからないことがよくあります。
この記事では、よく使われる3つのセンサを例に、回路・読みの直し方・部品の値の決め方を、データシートの数字で計算しながら説明します。

マイコンでセンサの電圧を読む3つの例
この記事では、温度センサ MCP9700 を A0、CdS を A1、可変抵抗を A2 につなぎ、読んだ数字を温度・明るさ・位置に直します。
| センサ | わかること | 回路 | 読みの直し方 |
|---|---|---|---|
| MCP9700 | 温度 | そのまま A0 | 温度=(電圧−0.5)÷0.01 |
| CdS | 明るさ | 固定抵抗 7.5kΩ と分圧 | 抵抗に直してから明るさへ |
| 可変抵抗 10kΩ | つまみの位置 | 両はしを 5V と GND | 位置=読み÷1023 |
例はマイコンの電源が 5V、ADC が 10ビット(0〜1023)の場合です。Arduino Uno(ATmega328P)がこの組み合わせです。
ADC が電圧を数字にするしくみ(1段の電圧・基準電圧・入力の抵抗)は、対になる記事で詳しく説明しています。この記事では「読んだ数字を直す」ことに集中します。
つまり、3つとも「電圧にする → ADC で読む → 式で直す」。違うのは、電圧の作り方と直し方の式です。

センサは2種類:電圧を出すか、抵抗が変わるか
MCP9700 のように自分で電圧を出すセンサは、ADC にそのままつなぎます。CdS や可変抵抗のように抵抗が変わるだけのセンサは、固定抵抗と分圧して電圧にしてから読みます。
ADC が読めるのは電圧だけです。抵抗の大きさは、そのままでは読めません。そこで、抵抗が変わるセンサと固定抵抗を直列にして電源につなぎ、そのまん中の電圧を読みます。センサの抵抗が変わると、まん中の電圧が変わります。
この違いは、基準電圧の選び方にも関わります。電源を分けた電圧は電源を基準に読むと電源のずれが消えますが、MCP9700 のような決まった電圧は、電源のずれがそのまま誤差になります。
温度で抵抗が変わるサーミスタも、CdS と同じ分圧の形で読めます。
つまり、まず「このセンサは電圧を出すのか、抵抗が変わるのか」を見分けます。

例1 温度センサMCP9700:3本の足をつなぐだけ
MCP9700 は、VDD を 5V、GND を GND、VOUT を A0 につなぐだけで動きます。VDD と GND の間に 0.1µF を付けます。
MCP9700 は、Microchip の小さな温度センサ IC です。電源は 2.3〜5.5V で、流れる電流は 6µA(代表値)と小さく、出力(VOUT)はマイコンの ADC に直接つなげます。
IC の電源ピンのそばに置く 0.1µF(パスコン)の役目と置き方
つまり、MCP9700 は「電源・GND・出力」の3本と、0.1µF の1個で使えます。

MCP9700の出力:0℃で0.5V、1℃で10mV上がる
MCP9700 の出力の電圧は、0℃ で 0.5V、1℃ 上がるごとに 10mV(0.01V)上がります。だから、温度=(電圧−0.5)÷0.01 で直せます。
例えば 25℃ なら、0.01×25+0.5=0.75V です。−40℃ で 0.1V、125℃ で 1.75V になり、データシートにも出力は 100mV〜1.75V と書かれています。
0℃ で 0.5V という「ゲタ」をはかせてあるので、0℃ より低い温度でも電圧はマイナスになりません。マイコンの ADC は 0V より低い電圧を読めないので、この形が便利です。
つまり、MCP9700 は「0.5V から 1℃ ごとに 10mV」。式は引いて割るだけです。

25℃を読む計算:5V基準と内部1.1V基準
25℃(0.75V)を 5V 基準で読むと読みは 153 で、直すと 24.7℃、1段は 0.49℃ です。内部 1.1V 基準なら読みは 698、24.98℃ で、1段は 0.11℃ と細かくなりますが、測れるのは約60℃ までです。
| 5V(電源)基準 | 内部 1.1V 基準 | |
|---|---|---|
| 25℃ の読み | 153 | 698 |
| 直した温度 | 24.7℃ | 24.98℃ |
| 1段の温度 | 0.49℃ | 0.11℃ |
| 測れる上限 | 125℃(センサの上限) | 約60℃(1.0V の個体なら 50℃) |
| 誤差のもと | 電源のずれ(4.8V なら 25℃ が約28℃ に) | 内部基準の個体差 1.0〜1.2V |
プログラムにすると、次の3行です(Arduino の例。5V 基準)。
int n = analogRead(A0); // 0〜1023
float v = n * 5.0 / 1024.0; // 読み → 電圧(5V 基準)
float t = (v - 0.5) / 0.01; // 電圧 → 温度(MCP9700)
内部 1.1V にするときは、analogReference(INTERNAL) を呼び、式の 5.0 を 1.1 に変えます。内部基準は1台ずつ 1.0〜1.2V の差があるので、正確に測るなら、テスターで測った電圧と比べて合わせ込みます。
つまり、室温くらいを細かく測るなら内部 1.1V、高い温度まで測るなら 5V 基準。どちらも基準電圧の値が温度の誤差に効きます。

誤差を比べる:細かく読んでも正しさはセンサで決まる
ADC の1段(0.49℃ や 0.11℃)より、MCP9700 自身の誤差(0〜70℃ で最大 ±4℃)のほうがずっと大きいです。精度が要るなら MCP9700A(±2℃)を選ぶか、25℃ で合わせ込みます。
| 誤差のもと | 大きさ | 出典・条件 |
|---|---|---|
| ADC の1段(5V 基準) | 0.49℃ | 5÷1024÷0.01 |
| ADC の1段(1.1V 基準) | 0.11℃ | 1.1÷1024÷0.01 |
| MCP9700 の精度 | ±4℃(最大) | 0〜+70℃、データシートの表 |
| MCP9700A の精度 | ±2℃(最大) | 0〜+70℃、同じ表 |
| 25℃ で合わせ込んだとき | ±0.5℃(代表値) | 0〜+70℃、データシート 4.1節 |
温度計と比べて 2〜3℃ ずれていても、MCP9700 なら精度の範囲内のことがあります。読みを細かくするより、まずセンサの精度の欄を見ます。
合わせ込みは、正確な温度計と同じ場所に置いて読み、その差をプログラムで引くことです。データシートは、25℃ で合わせ込むと 0〜70℃ で ±0.5℃(代表値)になると書いています。
つまり、ADC の細かさとセンサの正しさは別もの。正しさはデータシートの「精度」の行で決まります。

例2 明るさCdS:固定抵抗と分圧して電圧にする
CdS を 5V 側、固定抵抗 Rf(7.5kΩ)を GND 側につなぎ、まん中を A1 で読みます。明るいと CdS の抵抗が小さくなり、A1 の電圧が上がります。
CdS は、明るいほど抵抗が小さくなる部品です。例えば GL5528 という品種は、データシートで 10lux のとき 10〜20kΩ、暗いと 1MΩ くらいです。
CdS の抵抗が小さくなる(明るい)と、分母が小さくなるので V は大きくなります。CdS と Rf を上下逆にすると、明るいほど電圧が下がる回路になります。どちらでも読めますが、この記事は「明るい=大きい数字」になる向きにしました。
分圧の考え方と、2本の抵抗の決め方は、分圧回路の記事にまとめています。
2本の抵抗で電圧を分ける分圧回路の、比・大きさ・誤差の決め方
つまり、CdS は「固定抵抗との分圧」で電圧にして読みます。

明るさとCdSの抵抗・A1の電圧
明るさが10倍になると、GL5528 の抵抗は約1/4 になります(γ=0.6)。Rf=7.5kΩ なら、1lux で 0.56V、10lux で 1.67V、100lux で 3.33V、1000lux で 4.44V です(イメージ)。
γ(ガンマ)は、明るさが10倍になったときに抵抗がどれだけ下がるかを表す数字です。データシートでは、10lux と 100lux の抵抗の比の対数として決められています。γ=0.6 なら、10倍明るくなると抵抗は 10^0.6≒4 分の1 です。
| 明るさ | CdS の抵抗(15kΩ の品) | A1 の電圧 | 読み |
|---|---|---|---|
| 1lux | 59.72kΩ | 0.56V | 114 |
| 10lux | 15.00kΩ | 1.67V | 341 |
| 100lux | 3.77kΩ | 3.33V | 681 |
| 1000lux | 0.95kΩ | 4.44V | 909 |
表は、10lux で 15kΩ(10〜20kΩ のまん中)の品として計算したイメージです。実物の曲線は、この式からいくらかずれます。
つまり、明るさは「10倍ごとに抵抗が約1/4」。電圧は明るさの対数にほぼ比例して上がります。

CdSの固定抵抗の選び方:見分けたい明るさの√
固定抵抗 Rf は、見分けたい2つの明るさでの CdS の抵抗をかけて √(ルート)をとった値が目安です。10lux(15kΩ)と 100lux(3.77kΩ)なら √(15×3.77)=7.52kΩ → E24 の 7.5kΩ です。
| Rf | 10lux と 100lux の電圧の差 |
|---|---|
| 1kΩ | 0.74V |
| 7.5kΩ | 1.66V |
| 10kΩ | 1.63V |
| 100kΩ | 0.47V |
Rf を 7.5kΩ にすると、2つの明るさの電圧の差が 1.66V と最も大きくなります。1kΩ や 100kΩ では差が小さく、ADC の読みの差も小さくなります。
このとき、ADC から見た抵抗は、CdS と Rf が同じ値のとき最大の 3.75kΩ(暗いときでも 7.44kΩ)で、ADC の「10kΩ 以下」の目安に入ります。CdS の電力も最大 0.83mW で、上限の 100mW よりずっと小さいです。
つまり、Rf は「見分けたい2つの明るさの抵抗の√」。迷ったら 10kΩ 前後から試します。

読みから明るさに直す:計算と個体差
読みから CdS の抵抗は R=Rf×(1024÷読み−1) で出せます。基準電圧が式から消えるので、電源のずれは効きません。ただし CdS の個体差(10〜20kΩ)で、明るさは約3.2倍ずれます。
例えば読みが 512 なら、R=7.5kΩ×(1024÷512−1)=7.5kΩ です。10lux で 15kΩ の品なら、明るさは約32lux になります。
ところが、同じ GL5528 でも 10lux の抵抗は 10〜20kΩ と2倍の幅があります。10kΩ の品なら約16lux、20kΩ の品なら約51lux で、約3.2倍も違います。
そのため CdS は、正確な照度を測るより「暗くなったら明かりをつける」のような判定に向いています。しきい値の近くで ON/OFF がバタつくときは、しきい値を上げるときと下げるときで変える(ヒステリシス)と落ち着きます。
しきい値の近くで出力がバタつく原因と、ヒステリシスの決め方
抵抗をもっと正確に測る回路の考え方として、ブリッジ回路もあります。
ホイートストンブリッジで、未知の抵抗を正確に測るしくみ
つまり、CdS は「明るい・暗い」の判定向き。正確な照度が要るなら、照度計で合わせ込むか照度センサ IC を使います。

例3 可変抵抗:位置=読み÷1023
可変抵抗の両はしを 5V と GND に、まん中の足を A2 につなぐと、つまみの位置に比例した電圧が出ます。位置(%)=読み÷1023×100 です。10kΩ なら、ADC から見た抵抗はまん中で最大 2.5kΩ です。
| つまみの位置 | 電圧 | 読み | 読み÷1023 |
|---|---|---|---|
| 0% | 0.00V | 0 | 0.0% |
| 25% | 1.25V | 256 | 25.0% |
| 50% | 2.50V | 512 | 50.0% |
| 75% | 3.75V | 768 | 75.1% |
| 100% | 5.00V | 1023 | 100.0% |
可変抵抗は、それ自体が分圧回路です。つまみを回すと、まん中の足(ワイパー)の位置が動き、上下の抵抗の比が変わります。電源を分けた電圧なので、5V(電源)を基準に読めば、電源のずれは効きません。
ADC から見た抵抗は、上と下の抵抗の並列です。いちばん大きいのはまん中で、10kΩ なら 5kΩ と 5kΩ の並列で 2.5kΩ です。100kΩ の可変抵抗では 25kΩ になり、10kΩ の目安を超えるので、A2 と GND の間に 0.1µF を足します。
つまり、可変抵抗は両はしを電源、まん中を ADC。10kΩ くらいを選べば、ADC の条件も電流も気にしなくて大丈夫です。

早見表:3つのセンサの回路と換算の式
答えだけ欲しい人向けの表です。電圧を出すセンサか、分圧で読むセンサかで、基準電圧の選び方が変わります。
| センサ | 回路 | 換算の式 | 基準電圧 | 1段・注意 |
|---|---|---|---|---|
| MCP9700(温度) | そのまま A0、VDD と GND に 0.1µF | (V−0.5)÷0.01 | 1.1V か 5V | 0.49℃(5V)/0.11℃(1.1V)。精度 ±4℃ |
| CdS(明るさ) | Rf 7.5kΩ と分圧 | R=Rf×(1024÷読み−1) | 5V(電源) | 明るさは目安(個体差 約3.2倍) |
| 可変抵抗(位置) | 両はしを 5V・GND | 読み÷1023×100% | 5V(電源) | 10kΩ でまん中 2.5kΩ。100kΩ なら 0.1µF |
つまり、表の「換算の式」をプログラムに書けば、3つのセンサの値が読めます。

ブレッドボードの配線:3つのセンサをA0・A1・A2へ
5V と GND はレールから配り、各センサの出力の列からマイコンの A0〜A2 へ線を引きます。マイコンの GND とセンサの GND は、同じ GND レールにつなぎます。
センサまでの線が長くなると、ノイズを拾って読みがゆれます。センサの近くに 0.1µF を置き、GND の線もいっしょに引きます。
GND は「0V の線」ではなく電流の帰り道。センサの GND の考え方
つまり、電源とGNDはレール、出力は列から A0〜A2。GND はすべて1か所につなぎます。

よくある失敗4つ:センサの電圧を読むとき
温度センサを逆に差す・CdS に固定抵抗がない・可変抵抗を2本の足だけで使う・長い配線でノイズ、の4つがよくある失敗です。
1. MCP9700 を逆向きに差す
VDD と GND が入れかわり、熱くなったり壊れたりすることがあります。平らな面の向きと、データシートの足の名前を確かめてから電源を入れます。
2. CdS に固定抵抗がない
CdS を 5V と A1 の間につなぐだけでは、ADC の入力はほとんど電流を流さないので、A1 は 5V 近くのまま動きません。固定抵抗と分圧して電圧にします。
3. 可変抵抗を2本の足だけで使う
まん中と片方のはしだけをつなぐと、電圧が決まりません。3本ともつなぎ、両はしを 5V と GND にします。
4. 長い配線でノイズ
センサを離れた場所に置くと、読みがゆれたり跳んだりします。0.1µF を足す・何回か読んで平均する・信号と GND の線をより合わせる、を試します。外に出る線は、静電気からマイコンを守る対策も入れます。
マイコンの入力ピンを、直列抵抗とダイオードで静電気から守る
つまり、差す向き・分圧・3本の足・配線の長さの4点を、電源を入れる前に確かめます。

テスターで確かめる:3つの出力の電圧
最低限、①A0(MCP9700)が室温で約0.75V前後か、②A1・A2 が明るさやつまみで動くか、をテスターで確かめます。
最低限ここだけ
余裕があれば
テスターの電圧から計算した温度と、プログラムが出した温度が同じかを比べます。違うなら、プログラムの基準電圧の値が実際と合っていません(5V ピンの電圧も測ります)。室温の温度計と比べて ±4℃ 以内なら、MCP9700 の精度の範囲です。
つまり、テスターで「センサの出力」と「基準電圧」を測れば、配線とプログラムのどちらが原因かを切り分けられます。


