Skip to content

필사 모드: FingerScore ハードウェア 2 — 電子工学の基礎(電圧・電流・抵抗からデジタル信号まで)

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

はじめに — コードだけ書いてきた開発者が電子工学に出会うと

FingerScore シリーズの第一回では、「ラケットスポーツのスコアを指のジェスチャーで記録する BLE リング」という製品の全体像を描きました。マイコン(MCU)を選び、バッテリーと IMU センサー、BLE 無線チップをどう組み合わせるかを部品レベルで見ていきました。ところがいざ部品を手に取ってブレッドボードに挿そうとした瞬間、多くのソフトウェア開発者が同じ壁にぶつかります。「この抵抗は何のために挿すのか。ピンに直接 LED をつないではいけないのか。3.3V と 5V を混ぜると何が起きるのか」。

この記事は、まさにその壁を越えるためのものです。コードは書いたことがあるが電子工学は初めて、という方を対象に、FingerScore のような小さな組み込み機器を作るときに実際に必要な電子工学の基礎だけを絞って解説します。大学の回路理論の教科書のように微分方程式を解くことはしません。代わりに「なぜこの部品が必要なのか」「この数字はどこから出てくるのか」を直感的に理解することに集中します。

ソフトウェア開発者にとって、よい例えが一つあります。電気回路は水が流れる配管に似ています。電圧は水圧、電流は水の量、抵抗はパイプの狭まりです。この例えを一つ頭にしっかり植えておけば、この記事の半分は理解したことになります。では始めましょう。

電圧・電流・抵抗 — 三つの基本量

電子工学の出発点は三つの量です。この三つの関係さえしっかり押さえれば、あとは応用です。

- 電圧(単位 V ボルト): 二点間の電位差です。水でいえば水圧、つまり水を押し出す力です。バッテリーのプラスとマイナスの間に電圧があります。

- 電流(単位 A アンペア): 単位時間あたりに流れる電荷の量です。水でいえばパイプを通過する水の量です。組み込み機器では普通ミリアンペア(mA)やマイクロアンペア(uA)の単位を使います。

- 抵抗(単位 オーム): 電流の流れを妨げる度合いです。水でいえばパイプが狭くなる部分です。抵抗が大きいと同じ電圧でも流れる電流は少なくなります。

水の例えを表に整理すると次のようになります。

| 概念 | 単位 | 水の例え | FingerScore では |

| --- | --- | --- | --- |

| 電圧 | V ボルト | 水圧 | バッテリー 3.7V、ロジック 3.3V |

| 電流 | A アンペア | 水の量 | LED 約 5mA、スリープ時 数十 uA |

| 抵抗 | オーム | パイプの狭まり | LED 電流制限、プルアップ抵抗 |

ここで一つ大事な直感があります。電圧は「かかるもの」で、電流は「流れるもの」です。バッテリーは電圧源なので常に一定の電圧を供給しようとし、電流は回路がどれだけよく通るかによって決まります。だから「ピンに LED を直接挿してはいけないのか」という問いの答えが出ます。抵抗で流れを止めなければ、電流が過剰に流れて部品が焼けてしまうからです。

オームの法則 — 電子工学の F = ma

三つの量を一つに結ぶ式がオームの法則です。電子工学で最もよく使う公式で、実質これ一つで回路計算の 80 パーセントが片付きます。

オームの法則

V = I * R

V : 電圧(ボルト)

I : 電流(アンペア)

R : 抵抗(オーム)

変形すると

I = V / R (抵抗が大きいほど電流は小さくなる)

R = V / I (望む電流のために必要な抵抗を求める)

この式の意味は明確です。同じ抵抗で電圧を上げれば電流は比例して増え、同じ電圧で抵抗を上げれば電流は反比例して減ります。水の例えでは「水圧を上げれば水がより多く流れ、パイプを狭くすれば水が少なく流れる」という当たり前の話です。

電力(消費されるエネルギー)も一緒に覚えておくとよいでしょう。バッテリー寿命を計算するときに必ず必要です。

電力の式

P = V * I

P : 電力(ワット)

オームの法則と組み合わせると

P = I * I * R

P = V * V / R

たとえば LED 一つに 2V がかかり 5mA が流れるなら、その LED が消費する電力は次のように計算します。

P = V * I

P = 2 * 0.005

P = 0.01 ワット = 10 ミリワット

小さな数字に見えますが、コイン電池で動く FingerScore リングでは、こうした小さな消費も積み重なればバッテリー寿命を左右します。だから組み込みでは常に電流バジェット(current budget)を勘定します。

LED と電流制限抵抗 — 最初に作る計算

電子工学を初めて学ぶとき、ほぼ誰もが行う最初の実習が「LED を点灯する」ことです。ところが LED をそのまま電源につないではいけません。LED は決まった電圧(順方向電圧、Vf)がかかると、それ以上の電圧を受けようとせず、代わりに電流を際限なく吸い込もうとします。制限する装置なしにつなぐと過電流で LED が即座に焼けます。そこで電流制限抵抗を直列に入れて流れを止めます。

計算はオームの法則の変形です。

電流制限抵抗の計算

R = (Vsupply - Vled) / I

Vsupply : 供給電圧(例: 3.3V)

Vled : LED 順方向電圧(赤 約 2.0V、青 約 3.0V)

I : 流したい電流(例: 5mA = 0.005A)

FingerScore の状態表示用の赤 LED を 3.3V のロジック電源につなぎ、5mA を流すとしましょう。

R = (3.3 - 2.0) / 0.005

R = 1.3 / 0.005

R = 260 オーム

計算結果は 260 オームですが、実際の部品は決まった標準値(E シリーズ)でしか売っていません。260 オームに最も近い標準値は 270 オームなので 270 オームを使います。抵抗を少し大きめに取れば電流がわずかに減るだけで、LED はちゃんと点灯します。組み込みでは「少し保守的に(電流を少なめに)」取るのが安全です。

ブレッドボード上の回路を ASCII で描くと次のようになります。

LED 点灯回路

3.3V ----[ R1 270 オーム ]----|>|---- GND

LED1

(長い足 = +)

R1 : 電流制限抵抗

LED1 : 表示用 LED、長い足(アノード)が電源側

ここでよくある二つの間違いを押さえておきます。第一に、LED には極性があります。足が長い方がプラス(アノード)で、短い方がマイナス(カソード)です。逆に挿すと点灯しません。第二に、抵抗を入れ忘れると LED が焼けるか MCU のピンが損傷します。「なぜ抵抗を挿すのか」の答えは、まさにこの電流制限のためです。

ボタン入力とプルアップ/プルダウン抵抗

FingerScore は指のジェスチャーをセンサーで検知しますが、開発段階では単純なボタンで入力をテストすることが多いです。ところがボタンを MCU のピンにそのままつなぐとまた問題が起きます。ボタンを押していない状態でピンが「宙に浮いた(フローティング)」状態になるからです。

フローティングのピンは周囲の電気ノイズを拾って 0 と 1 の間を勝手に行き来します。すると押してもいないのに入力が入ったように読まれます。これを防ぐには、ピンを安定した基準電圧に弱くつなぐ抵抗が必要です。これがプルアップ(pull-up)とプルダウン(pull-down)抵抗です。

- プルアップ抵抗: ピンを電源(3.3V)側に弱くつなぎます。普段は 1(HIGH)と読まれ、ボタンを押すとピンが GND につながって 0(LOW)と読まれます。

- プルダウン抵抗: ピンを GND 側に弱くつなぎます。普段は 0(LOW)と読まれ、ボタンを押すと 1(HIGH)と読まれます。

| 種類 | 普段の状態 | ボタン押下 | 抵抗の接続位置 |

| --- | --- | --- | --- |

| プルアップ | HIGH (1) | LOW (0) | ピンと電源の間 |

| プルダウン | LOW (0) | HIGH (1) | ピンと GND の間 |

最も一般的なプルアップ方式のボタン回路を ASCII で描くと次のようになります。

プルアップ ボタン回路

3.3V ----[ R1 10k オーム ]----+---- GPIO2 (MCU 入力)

|

SW1 (ボタン)

|

GND

R1 : プルアップ抵抗、普通 10k オーム

SW1 : ボタン。押すと GPIO2 が GND につながり LOW

抵抗値として普通 10k オームを使うのには理由があります。小さすぎるとボタンを押したとき電源から GND へ大きな電流が漏れて電力が無駄になります。大きすぎるとノイズを抑える力が弱くなります。10k オームはそのバランス点として長く検証された値です。

うれしい知らせが一つあります。ほとんどの MCU はチップ内部にプルアップ/プルダウン抵抗を内蔵しているので、コードで有効にするだけで外部抵抗なしでも動きます。FingerScore のように部品数を減らしたい小さな機器では、この内部プルアップを積極的に活用します。ただし内部プルアップは値が正確でなく普通は数十 k オームと大きいので、ノイズの多い環境では外部抵抗のほうが安定します。

コンデンサ — デカップリングとデバウンス

抵抗の次によく出会う部品がコンデンサです。コンデンサは電荷を一瞬ためて放出する部品で、水の例えでは小さな水タンクです。電圧が急に揺れたとき、タンクが水を満たしたり抜いたりして衝撃を緩和します。

組み込みでコンデンサが使われる代表的な二つの用途があります。

第一に、デカップリング(decoupling)またはバイパスコンデンサです。MCU やセンサーのようなチップは動作するとき瞬間的に電流をぐっと引きます。このとき電源電圧が一瞬ガクッと落ちますが、チップのすぐ横に小さなコンデンサ(普通 0.1uF)をつけておくと、このコンデンサが瞬間の電流を供給して電圧を安定させます。ほぼすべてのチップの電源ピンの横にデカップリングコンデンサをつけるのが定石です。これを入れ忘れると、チップがたまに理由もなくリセットされたり誤動作したりします。

デカップリングコンデンサの配置

3.3V ----+-------------- VCC (チップ電源ピン)

|

C1 0.1uF

|

GND -----+-------------- GND

C1 : デカップリングコンデンサ、チップ電源ピンにできるだけ近く

第二に、デバウンス(debouncing)です。機械式ボタンは押した瞬間に接点が微細に何度も跳ねます(バウンス)。すると一度押しただけなのに MCU は何度も押されたと読みます。ボタンのピンに小さなコンデンサをつけると、この跳ねがなだらかにならされて一度のきれいな信号として読まれます。ただし実務ではハードウェアデバウンスより、ソフトウェアデバウンス(コードで一定時間内の重複入力を無視)のほうが多く使われます。FingerScore のジェスチャー認識も結局はソフトウェアで信号をならす作業です。

| 用途 | コンデンサ値 | 位置 | 効果 |

| --- | --- | --- | --- |

| デカップリング | 0.1uF | チップ電源ピンの横 | 電圧の安定化 |

| バルクデカップリング | 10uF 以上 | 電源の入口 | 大きな電流変動の吸収 |

| デバウンス | 0.1uF | ボタンピンと GND の間 | 接点の跳ねの緩和 |

分圧 — 二つの抵抗で電圧を分ける

ときにある電圧を半分に、または特定の比率に下げる必要があります。たとえばバッテリー電圧(3.7V)を MCU の ADC で測定したいのに ADC 入力の上限が 3.3V なら、電圧を少し下げて入れる必要があります。このとき使う最も簡単な回路が分圧回路(voltage divider)です。抵抗を二つ直列に置いてその間から電圧を取り出す方式です。

分圧回路

Vin ----[ R1 ]----+----[ R2 ]---- GND

|

Vout (R1 と R2 の間)

Vout = Vin * R2 / (R1 + R2)

R1 と R2 が同じなら Vout は Vin のちょうど半分になります。比率を調整すれば望む電圧を作れます。たとえば 3.7V を約 1.85V に半分にしたいなら、同じ値の抵抗を二つ使えばよいです。

Vout = 3.7 * 10k / (10k + 10k)

Vout = 3.7 * 0.5

Vout = 1.85V

注意点があります。分圧回路は常に電流が R1 と R2 を通って GND へ漏れるので電力を消費します。バッテリー機器ではこの損失を減らすため抵抗値を大きく(数十 k オーム以上)取ります。また分圧出力から大きな電流を引くと比率が崩れるので、分圧器は「信号を読む」用途(たとえば ADC 測定)だけに使い、「電源を供給する」用途には使いません。

デジタルとアナログ — 二つの世界の違い

ここで少し全体像を整理します。電子信号には大きく二種類あります。

- デジタル信号: 0 と 1 の二つの値だけを持ちます。正確には LOW(0V 付近)と HIGH(電源電圧付近)です。ボタンが押されたか、LED を点けるか消すかといった on/off 情報がデジタルです。ノイズに強く正確です。

- アナログ信号: 0V から電源電圧まで連続したあらゆる値を取りえます。温度、明るさ、マイクの音、バッテリー残量といった「度合い」を表す情報がアナログです。

MCU はデジタル世界の部品です。内部では 0 と 1 だけを扱います。だからアナログ情報(たとえばバッテリー電圧の微細な変化)を読むには、アナログをデジタルに変える変換器が必要で、これが後で説明する ADC です。

| 観点 | デジタル | アナログ |

| --- | --- | --- |

| 値 | 0 か 1 の二つ | 連続したあらゆる値 |

| 例 | ボタン、LED の on/off | 温度、明るさ、バッテリー電圧 |

| ノイズ耐性 | 強い | 弱い |

| MCU の処理 | 直接処理 | ADC で変換後に処理 |

GPIO — MCU と外の世界をつなぐ

GPIO は General Purpose Input/Output、汎用入出力ピンの略です。MCU についた足のうち、私たちがコードで自由に制御できるピンです。ソフトウェアの観点では、GPIO はメモリ上の特定のビットのようなものです。そのビットに 1 を書けばピンが HIGH になり、0 を書けば LOW になります。逆にそのビットを読めば、ピンが今 HIGH か LOW かが分かります。

GPIO は二つの方向(モード)に設定します。

- 出力(Output)モード: MCU がピンに電圧を出します。LED を点けたり、別のチップに信号を送ったりするときに使います。コードで HIGH を書けばピンが 3.3V を出力し、LOW を書けば 0V を出力します。

- 入力(Input)モード: MCU がピンの電圧を読みます。ボタンの状態やセンサーのデジタル出力を読むときに使います。

擬似コードで表すと次のようになります。

// GPIO 出力で LED を点ける

pinMode(LED_PIN, OUTPUT);

digitalWrite(LED_PIN, HIGH); // LED 点灯

digitalWrite(LED_PIN, LOW); // LED 消灯

// GPIO 入力でボタンを読む(内部プルアップ使用)

pinMode(BUTTON_PIN, INPUT_PULLUP);

int state = digitalRead(BUTTON_PIN);

// プルアップなので普段 HIGH、押すと LOW

if (state == LOW) {

// ボタンが押された

}

GPIO で必ず覚えておくべき限界があります。ピンが流せる電流には上限があります(普通ピンあたり数十 mA)。この限界を超える負荷(たとえばモーターや複数の強い LED)を直接つなぐとピンが損傷します。大きな負荷はトランジスタや専用ドライバチップを介して制御しなければなりません。FingerScore の小さな表示 LED 程度なら、電流制限抵抗さえきちんと入れれば GPIO で直接駆動してかまいません。

ロジックレベル — 3.3V と 5V の世界

デジタル信号で HIGH と LOW を分ける基準電圧をロジックレベルといいます。ところがこの基準がチップごとに違います。昔の Arduino Uno のようなチップは 5V ロジックを使い、最近の低消費電力 MCU や BLE チップ、ほとんどのセンサーは 3.3V ロジックを使います。FingerScore はバッテリー効率と BLE チップの互換性のため 3.3V ロジックを基本に使います。

3.3V ロジックでのおおよその基準は次のとおりです。

3.3V ロジックレベル(おおよそ)

HIGH と認識 : 約 2.0V 以上

LOW と認識 : 約 0.8V 以下

あいまいな帯 : 0.8V ~ 2.0V(不確定、避けるべき)

ここで重要な注意が出てきます。5V の信号を 3.3V チップのピンに直接つなぐと 3.3V チップが損傷することがあります。3.3V チップは自分の電源より高い電圧に耐えるように設計されていないからです。逆に 3.3V で 5V チップに信号を送るのは普通は問題ありません(3.3V が 5V チップの HIGH 基準を超えるため)。異なるロジックレベルのチップを混ぜるときはレベルシフター(level shifter)という変換部品を使います。

幸い FingerScore は MCU、IMU センサー、BLE をすべて 3.3V 系で統一したのでレベルシフターは不要です。部品を選ぶとき動作電圧を統一することが回路を単純にする要諦です。

I2C・SPI・UART — チップ同士が会話する方法

FingerScore の中核機能は IMU(加速度計+ジャイロ)センサーで手の動きを読むことです。ところが MCU と IMU センサーはどうやってデータをやり取りするのでしょうか。ピン一本で 0 と 1 だけを送っても複雑なセンサー値は伝えられません。そこで複数のピンを束ね、約束された規則で通信するデジタル通信プロトコルを使います。組み込みで最もよく使う三つが I2C、SPI、UART です。

- I2C: わずか二本の線(SDA データ、SCL クロック)で複数のチップをつなぎます。各チップは固有のアドレスを持ち、MCU がアドレスを呼ぶと該当チップだけが応答します。線が少なく配線が簡単で、センサー接続に最も多く使われます。速度は中程度で距離は短いです。FingerScore の IMU は I2C でつなぐのが最も無難です。

- SPI: 四本以上の線(MOSI、MISO、SCK、CS)を使いますが I2C よりはるかに速いです。高速データが必要なセンサーやディスプレイ、メモリに使います。線が多く配線が複雑です。

- UART: 二本の線(TX 送信、RX 受信)で二つの装置が一対一で通信します。アドレスの概念がなく単純です。GPS モジュールやデバッグ用のシリアル出力、モジュール間通信に多く使います。

三つのプロトコルを比較すると次のようになります。

| プロトコル | 線の数 | 多デバイス | 速度 | 主な用途 |

| --- | --- | --- | --- | --- |

| I2C | 2 本 (SDA, SCL) | 可能(アドレス基準) | 中程度 | センサー接続 |

| SPI | 4 本以上 | 可能(CS ピンごと) | 速い | 高速センサー、ディスプレイ |

| UART | 2 本 (TX, RX) | 一対一のみ | 中程度 | GPS、デバッグ、モジュール通信 |

I2C で IMU をつなぐ配線を ASCII で描くと次のようになります。

I2C 接続(MCU と IMU センサー)

3.3V ----+----[ R1 4.7k ]----+

| |

| +-------------+----- SDA ---- MCU GPIO (SDA)

| |

+-----|----[ R2 4.7k ]----+

| |

IMU +----- SCL ---- MCU GPIO (SCL)

|

GND ---- GND

R1, R2 : I2C プルアップ抵抗(普通 4.7k オーム)

IMU : 加速度/ジャイロセンサー、I2C アドレスを持つ

I2C ではプルアップ抵抗(普通 4.7k オーム)が SDA、SCL の二本の線それぞれに必要だという点を覚えておいてください。I2C はピンを LOW にだけ引き下げる方式なので、普段 HIGH を保つにはプルアップが必要です。多くのセンサーボードにはこのプルアップがすでに載っているのでデータシートを確認すればよいです。

ADC — アナログを数字に変える

先にデジタルとアナログを区別しました。MCU はデジタル世界の部品なのでアナログ電圧を直接理解できません。アナログ値を読むには ADC(Analog to Digital Converter、アナログ・デジタル変換器)が必要です。ADC は入力電圧を一定の段階に刻んで数字に変えます。

ADC の核心概念は分解能(resolution)です。たとえば 10 ビット ADC は 0V から基準電圧までを 1024 段階(2 の 10 乗)に分けます。12 ビット ADC は 4096 段階にさらに細かく分けます。

ADC 変換(10 ビット、基準電圧 3.3V の例)

digital_value = (Vin / Vref) * (2^bits - 1)

Vin : 測定する入力電圧

Vref : 基準電圧(例: 3.3V)

bits : 分解能(例: 10)

例) Vin = 1.65V, Vref = 3.3V, 10 ビット

digital_value = (1.65 / 3.3) * 1023

digital_value = 0.5 * 1023

digital_value = 約 511

つまり入力電圧が基準電圧のちょうど半分なら、10 ビット ADC は約 511 という数字を返します。FingerScore での ADC の代表的な用途はバッテリー残量の測定です。バッテリー電圧を分圧回路で ADC 入力範囲内に入るよう下げたあと、ADC で読んだ数字を再び電圧に換算して「バッテリーが何パーセント残っているか」を計算します。

信号の測定 — テスターとオシロスコープ

回路を作っていると必ず「これは今ちゃんと動いているのか」を確認する瞬間が来ます。ソフトウェアでデバッガーやログを使うように、ハードウェアでは測定機器を使います。入門者にとって最も重要な二つはテスター(マルチメーター)とオシロスコープです。

テスター(multimeter)は電子工学の基本道具です。最もよく行う測定は次の三つです。

- 電圧測定: 二点間にプローブを当てて電圧を読みます。「3.3V ピンに本当に 3.3V が出ているか」「バッテリー電圧がどれだけ残っているか」を確認します。

- 導通(接続)確認: 二点が電気的につながっているかをピーという音で知らせます。はんだ付けがちゃんとできているか、断線がないか、ショートがないかを確認するとき必須です。

- 抵抗測定: 抵抗値を読みます。部品を逆に挿していないか、値が合っているかを確認します。

オシロスコープ(oscilloscope)は時間に沿った電圧変化をグラフで見せる機器です。テスターは「今この瞬間の電圧」だけを知らせますが、オシロスコープは「電圧が時間とともにどう揺れるか」を波形で見せます。I2C 通信がちゃんと起きているか、ボタンのバウンスがどれだけひどいか、信号の形が正常かといった動的な問題を見るとき必須です。入門者は最初から高価なオシロスコープを買う必要はなく、テスターから慣れれば十分です。

| 機器 | 見るもの | 代表的な用途 | 入門優先度 |

| --- | --- | --- | --- |

| テスター | 瞬間電圧、導通、抵抗 | 配線確認、電圧点検 | 必須(先に) |

| オシロスコープ | 時間に沿った波形 | 通信信号、バウンス分析 | あとで |

回路記号を読む — 図面の言語

部品を買い、回路をたどって作るには回路図(schematic)を読めなければなりません。回路図は部品を約束された記号で表した図面です。文字で記号を描くのは難しいですが、よく見る記号の意味を表に整理すると次のようになります。

| 部品 | 記号の説明 | ラベル慣例 |

| --- | --- | --- |

| 抵抗 | ジグザグまたは長方形 | R1, R2 |

| コンデンサ | 平行な二本の線 | C1, C2 |

| LED | 三角形に矢印二つ | LED1 |

| ダイオード | 三角形と棒 | D1 |

| バッテリー | 長短の線が交互 | BAT |

| チップ/MCU | 四角形にピン番号 | U1, MCU |

| 接地(GND) | 下に短くなる横線 | GND |

回路図で最もまぎらわしいのが GND(接地)と電源です。回路図ではすべての GND 記号が実は同じ一点だと考えればよいです。線を一つひとつつながず GND 記号をあちこちに打っておくと、それらがすべてつながっているという意味です。電源(3.3V など)も同じく同じラベル同士でつながっていると見ます。この約束を知れば、複雑に見える図面もずっと読みやすくなります。

最初の回路実習 — ボタンで LED を点ける

ここまで学んだことを一つにまとめてみましょう。「ボタンを押すと LED が点く」簡単な回路です。FingerScore の入力・反応の流れを最も小さく縮めた形でもあります。部品は MCU、ボタン(SW1)、LED(LED1)、電流制限抵抗(R1)、プルアップは MCU 内部機能を使います。

ボタンで LED を点ける回路

3.3V ---------------------+

|

[ R2 270 オーム ]

|

LED1 (長い足 = +)

|

GPIO4 ---- MCU (出力)

GPIO2 ---- MCU (入力、内部プルアップ)

|

SW1 (ボタン)

|

GND

R2 : LED 電流制限抵抗

LED1 : 表示用 LED

SW1 : 入力ボタン

GPIO2: ボタン入力ピン(内部プルアップ)

GPIO4: LED 制御ピン(出力)

動作コードは擬似コードで次のようになります。

// ボタン入力で LED を制御

void setup() {

pinMode(BUTTON_PIN, INPUT_PULLUP); // 内部プルアップ: 普段 HIGH

pinMode(LED_PIN, OUTPUT);

}

void loop() {

int pressed = (digitalRead(BUTTON_PIN) == LOW); // 押すと LOW

if (pressed) {

digitalWrite(LED_PIN, HIGH); // LED 点灯

} else {

digitalWrite(LED_PIN, LOW); // LED 消灯

}

}

この小さな回路一つに、この記事の核心がほぼすべて詰まっています。GPIO 入力(ボタン)、内部プルアップ(フローティング防止)、GPIO 出力(LED)、電流制限抵抗(過電流防止)。このパターンを手で一度作ってみれば、あとは応用にすぎません。

初心者がよくやる間違い

最後に、入門者がほぼ必ず一度は経験する間違いをまとめておきます。あらかじめ知っておけばデバッグ時間を大きく減らせます。

- 電流制限抵抗を入れ忘れる。LED やチップのピンを電源に直接つないで過電流で焼く。出力には常に抵抗をもう一度疑いましょう。

- GND を共通でつながない。複数の部品が同じ GND を共有しないと信号の基準がずれて変な動きをする。すべての部品の GND は一点に集まるべきです。

- ロジックレベルを混ぜる。5V 信号を 3.3V ピンに入れてチップを壊す。部品の動作電圧を統一するかレベルシフターを使いましょう。

- デカップリングコンデンサを入れ忘れる。チップがたまに理由なくリセットされる。チップ電源ピンの横に 0.1uF をつけることを習慣にしましょう。

- LED やダイオードの極性を逆に挿す。点灯しません。長い足がプラスです。

- ピンの電流限界を無視する。モーターのような大きな負荷を GPIO で直接駆動してピンを焼く。大きな負荷はトランジスタを介しましょう。

- ブレッドボードの配線を誤解する。ブレッドボードの横列と縦列がどうつながるかを取り違えて回路が切れる。テスターの導通確認で点検しましょう。

このリストをチェックするだけで、最初に作る回路の失敗の半分は防げます。

おわりに — 次回予告

今回は FingerScore リングを作るための電子工学の基礎的な言語を身につけました。電圧と電流と抵抗、オームの法則、LED 電流計算、プルアップ/プルダウン抵抗、コンデンサ、分圧、デジタルとアナログ、GPIO とロジックレベル、I2C/SPI/UART、ADC、そしてテスターやオシロスコープのような測定道具まで一周しました。回路図の読み方とボタン・LED 実習でしめくくり、抽象的だった部品が少しは手に取れる対象になっていれば幸いです。

次回は一段上がって、この回路の上で実際に動く MCU ファームウェアを扱います。IMU センサーから加速度と角速度のデータを I2C で読み込み、その信号をならして「得点ジェスチャー」を認識する基礎アルゴリズムを実装します。ハードウェアに初めてソフトウェアの息を吹き込む段階です。今回学んだ GPIO、I2C、デジタル信号の概念がそのままコードになって生き返る過程を一緒にたどっていきましょう。

参考資料

- SparkFun Electronics 学習資料: https://learn.sparkfun.com

- Adafruit Learning System: https://learn.adafruit.com

- All About Circuits 教材: https://www.allaboutcircuits.com

- Texas Instruments 技術文書: https://www.ti.com

- Nordic Semiconductor(BLE チップメーカー): https://www.nordicsemi.com

- オームの法則(Wikipedia): https://en.wikipedia.org/wiki/Ohm%27s_law

- I2C バスの説明(Wikipedia): https://en.wikipedia.org/wiki/I%C2%B2C

현재 단락 (1/246)

FingerScore シリーズの第一回では、「ラケットスポーツのスコアを指のジェスチャーで記録する BLE リング」という製品の全体像を描きました。マイコン(MCU)を選び、バッテリーと IMU セ...

작성 글자: 0원문 글자: 12,063작성 단락: 0/246