Arduinoはなぜ動かない?初心者向け原因切り分け手順

0
12
Arduinoはなぜ動かない?初心者向け原因切り分け手順

LEDが光らない。書き込みは成功したのにセンサー値が変わらない。あるいは、パソコンに接続してもポートが見つからない。こうした場面で「Arduino は なぜ 動かない」と検索したくなるのは、電子工作を始めた人なら自然なことです。けれどArduinoは、突然気まぐれに止まる機械ではありません。電源、通信、設定、配線、コードを順番に分ければ、原因はかなりの確率で見つかります。

電子工作では、完成した装置全体を一度に直そうとしないことが大切です。たとえば自動水やり器が動かなければ、いったんポンプもセンサーも外し、Arduino単体でLEDを点滅させます。小さく動く状態へ戻してから部品を一つずつ足す。この手順は、ロボットでもIoT工作でも同じように使えます。

Arduinoはなぜ動かない?最初に「どこまで動くか」を決める

「動かない」には複数の状態があります。まず、次のどれに近いかを言葉にしてください。Arduino IDEにボードが表示されないのか、スケッチを書き込めないのか、書き込めるがLEDやモーターが動かないのか、最初だけ動いて途中で止まるのか。状態が違えば、確認する場所も違います。

最初の目標は、外部回路なしでスケッチを書き込めることです。その次に、ボード上のLEDを点滅させます。Uno系なら多くの場合、内蔵LEDは13番ピンにつながっています。ボードによってはLED_BUILTINを使うと、ピン番号の違いを意識せずに確認できます。

“`cpp void setup() { pinMode(LED_BUILTIN, OUTPUT); }

void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(500); digitalWrite(LED_BUILTIN, LOW); delay(500); } “`

このスケッチでLEDが0.5秒ごとに点滅すれば、Arduino本体、USB通信、ボード選択、基本的な書き込み機能はひとまず正常です。ここまで確認できたら、問題は外部配線、部品、または追加したコードに絞れます。

1. 電源とUSBケーブルを疑う

Arduinoの電源LEDが点かないときは、まずUSBケーブルを交換します。見た目が同じUSBケーブルでも、充電専用でデータ通信ができないものがあります。スマートフォンを充電できても、Arduino IDEがポートを認識しないなら、そのケーブルは電子工作には使えないかもしれません。

USBハブ経由で接続している場合は、パソコン本体のUSB端子へ直接つなぐのも有効です。特にモーター、サーボ、LEDテープなどを同時に使う工作では、USBの電力だけでは足りません。サーボが震える、Arduinoが再起動する、シリアルモニタの文字が途中で途切れる場合は、電源不足を疑います。

ただし、外部電源を追加すれば何でも解決するわけではありません。Arduinoの5Vピンへ不適切な電圧を入れると壊れる危険があります。モーターやサーボには仕様に合った別電源を使い、ArduinoのGNDと外部電源のGNDを共通にしてください。この共通GNDがないと、信号の基準がそろわず、コードが正しくても部品は期待通りに動きません。

2. Arduino IDEのボードとポートを確認する

書き込みエラーの多くは、Arduino IDEで選んだボードやポートが実機と一致していないことが原因です。ツールメニューで、使用中のArduino Uno、Nano、ESP32などが正しく選ばれているかを確認します。似た形でも、マイコンが違えばコンパイル設定も書き込み方法も変わります。

ポートが表示されない場合は、Arduinoを抜いたときと挿したときで一覧がどう変わるかを見ます。挿したときだけ現れるポートが対象です。それでも出ない場合は、USBケーブル、USB端子、またはUSBシリアル変換チップ用ドライバの問題を順に確認します。

互換Nanoでは、プロセッサ設定に「ATmega328P」と「ATmega328P (Old Bootloader)」の選択肢があることがあります。書き込み時に同期エラーが出るなら、旧ブートローダーを試す価値があります。ただし、適当に設定を変え続けるのではなく、使っているボードの仕様を確認して候補を絞りましょう。

3. 書き込みに失敗するときは配線を外す

0番ピンのRXと1番ピンのTXは、USB経由の書き込みやシリアル通信にも使われます。このピンにBluetoothモジュール、GPS、別のマイコンなどを接続したままにすると、書き込みが失敗することがあります。

まず外部部品をすべて外し、Arduinoだけの状態でBlinkを書き込んでください。成功したら、外した部品を一つずつ戻します。どの部品を戻した瞬間に失敗するかがわかれば、原因はかなり明確です。書き込み中だけRX/TXの配線を外す方法もありますが、初心者は通信に使う部品を別のピンへ移す設計のほうが扱いやすいでしょう。

4. 配線は「見た目」ではなく電気的につながっているか確認する

ブレッドボードは便利ですが、穴の内部接続は初めてだと間違えやすい部分です。同じ列がつながるエリアと、中央の溝をまたいでつながらないエリアがあります。また、電源レールが途中で分断されているタイプもあります。赤い線の横に部品を挿したから5Vにつながっている、とは限りません。

配線を確認するときは、回路図と実物を見比べながら、電源から順番に指で追います。5Vはどこへ入り、GNDはどこへ戻り、信号線は何番ピンに接続されているか。ジャンパ線の色を、赤は電源、黒はGND、その他は信号というように決めると、後から修正しやすくなります。

LEDにも向きがあります。一般に足が長い側がアノード、平らな切り欠き側がカソードです。抵抗を入れ忘れるとLEDやArduinoのピンに負担がかかります。220Ωから1kΩ程度の抵抗を直列に入れ、最初は明るさより安全を優先してください。

センサーや表示器では、VCC、GND、SDA、SCLといった端子名を必ず確認します。同じI2C機器でも、Arduino Unoと別のボードでは使うピン位置が異なる場合があります。部品名だけで配線例をまねるのではなく、使っているボードのピン配置を見る習慣が、製作の失敗を減らします。

5. コードはシリアルモニタで「見える化」する

LEDもモーターも動かないと、コード全体が間違っているように感じます。しかし、変数の値を表示すれば、プログラムがどこまで動いているかを確かめられます。センサー値を読む処理なら、まず出力だけにした短いスケッチを作りましょう。

“`cpp void setup() { Serial.begin(9600); }

void loop() { int value = analogRead(A0); Serial.println(value); delay(500); } “`

シリアルモニタに数値が表示されるなら、Arduinoは少なくともA0を読んでいます。数値が常に0、常に1023、または不規則に飛ぶなら、センサーの配線、電源、読み取るピン番号を確認します。シリアルモニタ右下の通信速度も、`Serial.begin(9600)` と同じ9600に合わせてください。

`delay()`を長く入れすぎて、反応が止まったように見えることもあります。たとえば5秒待つコードは、その5秒間ほかの処理をほぼ行えません。ボタンを押してもすぐ反応しない工作では、delayの値を短くするか、将来的には`millis()`を使った時間制御へ進むとよいでしょう。

6. 壊れたと判断する前に比較する

焦げたにおいがする、部品が異常に熱い、USB接続時にパソコンが何度も切断音を出す場合は、すぐに電源を外してください。それ以外なら、Arduinoが故障していると決める前に、別のUSBケーブル、別のUSB端子、既知の正常なLED、最小のBlinkスケッチで比較します。

可能なら、同じ回路を別のArduinoに載せ替えるのも有効です。正常なボードで動けば、元のボードや設定に原因があります。どちらでも動かなければ、回路、部品、コードのどこかを見直すべきです。部品を交換する前に比較することは、無駄な買い直しを減らすだけでなく、電子工作の仕組みを理解する近道になります。

動かない時間は、失敗ではなく回路を読む練習の時間です。まずはBlinkへ戻り、次にシリアルモニタで値を見て、最後に部品を一つずつつなぐ。この小さな確認を積み重ねれば、光る、回る、測る、動かすという自分のアイデアを、再現できる作品へ育てていけます。