11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【壊れた?Arduinoボードの修理方法まとめ】ATmega328Pチップの交換、ブートローダーやATmega16U2ファームウェアの書き換えにより復活できる場合があります!

Arduinoを使った電子工作を普段楽しんでいますが、正常に動作しなくなったArduinoボードが手元に増えてきたのでその修復(修理)をいろいろと試みてみました。

Arduinoはよく出来たマイコンボードで、初心者でも比較的簡単に扱うことが出来るようになっている大変便利なマイコンボードです。
しかし突然正常に動かなくなったり、PCにデバイスとして認識されなくなるなどのトラブルは稀に起こります。

ブートローダーやUSB-シリアル変換を行うチップ内のファームウェアの破損などソフトウェア側の問題や電源ラインのパーツやマイコンチップの物理的な破損となるハードウェア側の問題など様々です。

何らかの原因でATmega328P内のブートローダーやUSB-シリアル変換を担うATmega16U2内のファームウェアの破損といったソフトウェアの問題が原因であれば、新たに書き直すことでArduinoボードを修復する事ができました。

【Arduino】ブートローダーの修復(書き換え)でArduinoボードが復活する場合があります!【壊れたArduinoの修復 その①】
【Arduino】デバイスが認識されない!ATmega16U2のファームウェアの修復で対処出来る場合があります!【壊れたArduinoの修復 その③】

また物理的なパーツの破損の場合、電源ラインのパーツやATmega16U2チップの破損だとそのパーツ交換は難易度が高いため難しくなりますが、ブートローダーが入ってArduinoとして機能させているATmega328PチップはDIP-ICとなっておりソケットに付けられているので交換は簡単です。(Arduino Unoの場合です)

【Arduino Uno】壊れたArduinoを修理する!マイコンチップATmega328Pの交換方法【壊れたArduinoの修復 その②】

上記方法により正常に動作しなくなりゴミ状態で保管してたArduino UnoやNanoの数台を直すことが出来ました。
やってみるものですね!

今回は、これまで使っていて突然動かなくなったいくつかのArduinoボードを復活させることが出来たのでその方法をまとめてみたいと思います。

壊れたArduinoボードの修理&修復方法まとめ!

Arduinoは電子工作初心者でも比較的簡単に扱うことが出来るように作られた非常に便利なマイコンボードです。

しかし使っていると急に正常に動作しなくなってしまうことは稀に起こります。
いろいろな要因があると思いますが、動かなくなったArduinoボードを修復し復活できる場合もあります。
その一例として読んで頂ければと思います。

ソフトウェアが問題となる場合の修復

ArduinoボードにはUnoやNano、Megaなどいろいろなボードがあり、そしてボードにはその心臓部となるマイコンチップが搭載されています。

Arduino UnoやNanoでは、Atmel(アトメル)のATmega328Pと呼ばれるAVRマイコンで動かしています。

またArduino ProやPro MiniなどProシリーズでは省かれていますが、UnoやNano、Megaなど一般的?なArduinoボードにはUSB-シリアル変換(USB-TTL)を行うマイコンチップも搭載されていて、PCと接続しUSB端子からスケッチの書き込みやシリアルモニタを動かすなど出来るようになっています。

ボードにより搭載されているマイコンチップに違いがありますが、こちらではArduino Unoを例に進めていきます。

Arduino Unoにはブートローダーが書き込まれArduinoとして機能しスケッチ(プログラム)を動かす心臓部となるATmega328Pマイコンチップが搭載されています。

また、USB端子と接続しPCからATmega328Pにスケッチの書き込みを行うためのUSB-シリアル変換器として機能するATmega16U2マイコンチップも搭載されています。(互換機ではCH340が積まれている場合もあります)

ATmega328PにArduinoブートローダーが書き込まれている事により、ATmega16U2とUART(シリアル通信)によりスケッチの書き込みが出来るようになっています。

この2つのマイコンチップに書き込まれているブートローダーやファームウェアのソフトウェア的な破損がArduinoボードが正常に動作しない原因なら、新たに書き込むことにより修復することが出来る可能性があります。

ブートローダーの修復(ATmega328P)

何らかの原因でATmega328Pチップ内に書き込まれているブートローダーが破損してしまった場合、新たにブートローダー(ソフトウェア)を書き込む事により正常な状態に戻すことが出来る場合があります。

電源投入時、ボード上の[ON LED]が点灯し通電が確認出来れば電源ラインは生きています。

そして電源投入時やリセットボタンを押した際にブートローダーが正常に動いている場合は、ビルトインLED[ボード上のLと書かれたLED]が短い周期で点滅します。(約1秒ほど)

この動作が確認できない場合、ATmega328Pに書き込まれているブートローダーの破損やチップ自体の物理的破損が考えられます。

ブートローダの破損であれば書き換えることで正常に戻すことが出来ます。
ブートローダーの書き換えにはライタと呼ばれる専用ハードが必要となってきますが、正常に動くArduinoがもう1台あればそれをライタとして使い書き込むことが出来ます。

【Arduino】ブートローダーの修復(書き換え)でArduinoボードが復活する場合があります!【壊れたArduinoの修復 その①】

ATmega16U2のファームウェア修復

次にUSB-シリアル変換器として機能しているATmega16U2チップ内のファームウェアの破損が原因の場合、新たにファームウェアを書き換えることにより復活できる場合があります。

【Arduino】デバイスが認識されない!ATmega16U2のファームウェアの修復で対処出来る場合があります!【壊れたArduinoの修復 その③】

また、このチップ自体の物理的な破損であればチップの交換は難易度が高いので修理は難しくなりますが、外部から繋いだUSB-シリアル変換モジュールなどを使いスケッチの書き込みを行いボードを動かすことは可能です。(後述します)

パーツ破損が原因となる場合の修復

Arduinoは難しい回路を1から組まなくてもセンサーやモジュールなどを接続するだけである程度のものなら比較的簡単に作ることができます。

そしてArduinoはオープンソース・ハードウェアなので、公式サイトに各ボードの回路図などの情報が公開されています。
回路図を眺めていると間違ってこんな繋ぎ方をしてしまうと壊れるんだろうなということはある程度予想が出来るかと思います。

参考 ボード情報Arduino公式サイト

ATmega328Pの物理的な破損

Arduinoの心臓部であるマイコンチップATmega328Pが壊れる要因を考えてみます。

例えば、I/Oピンに5V以上の電圧を加えてしまった場合や出力(OUTPUT)に設定したI/OピンをGNDに接続すると過電流状態となりかなり危険だと思います。

また、HIGH/LOWに設定したI/Oピン同士を繋げてしまうと同様なことが起こりますね。
ブレッドボードを使いテスト回路を組んでいる時などこのような配線ミスはよくやってしまいます。

このような配線ミスなどによりATmega328Pチップを物理的に壊してしまうことは、私のようなArduino初心者の方なら起こる可能性は高いと思います。

しかし、Arduino Uno Rev3(通常版)ではATmega328PはDIP-ICタイプのチップとなっていてICソケットに付けられているため簡単に取り外し交換する事ができます。
ATmega328Pチップの破損が原因なら交換により復活させることが出来ます。(ブートローダの書き込みも必要となります)

ATmega328Pチップは200~300円程度で入手する事ができ、Arduinoのブートローダーが書き込まれた状態で販売されているものもあります。
Arduinoボードの故障原因がATmega328Pチップの物理的な破損だけなら簡単に直すことが出来ます。
こちらの記事を参考にして下さい。

【Arduino Uno】壊れたArduinoを修理する!マイコンチップATmega328Pの交換方法【壊れたArduinoの修復 その②】

電源ラインのパーツ破損

Arduinoボードの故障原因として、電源ラインのパーツが破損してしまう場合も高い確率で起こるかと思います。
Arduinoを使い始めたばかりの方は、これもよくやりがちなミスになるかと思います。
私も数台壊した経験があります。

電源ラインを破損させるものとして考えられるのは、外部電源を使用する場合が多いと思います。
Arduino UnoにはUSB端子のほかにDCジャックやVin端子、または5V端子からボードを起動することが出来ます。

5V端子は基本的にブレッドボードなど外部の回路に5Vを供給するための端子として使いますが、5Vラインは内部でATmega328PやATmega16U2など各部に繋がっているので、この端子を使い5Vを加えることによりArduinoボードを起動する事もできます。

【Arduino入門編⑮】Arduino Unoへの電力供給(外部電源)および電源出力端子の使い方!【追記】

この5V端子に誤って5V以上の電圧を加えた場合(Vin端子とよく間違ってしまいます)、ボード上の5Vレギュレーターなど電源ラインに繋がっているパーツを破損させてしまうことが考えられます。(ATmega328PやATmega16U2も繋がっているのでそちらも危険だと思います)

他にも電源ラインのパーツ破損はいろいろと考えられます。
このような電源ラインのパーツが物理的に破損してしまった場合の交換は困難なので諦めた方がよさそうですね。

ATmega16U2の物理的な破損

Arduinoボードの故障としてATmega16U2チップの破損が原因?(おそらく)だったものもあります。

ATmega16U2はUSB-シリアル変換を担うため、このチップが破損するとPCからデバイスとして認識されずスケッチの書き込みが出来なくなります。

先にご紹介したファームウェアの書き換えで復活できたものもありますが、チップ自体の破損だとこちらも交換が困難なパーツとなるため修復は難しくこちらも諦めた方がよさそうです。

しかし電源ラインが生きていてATmega328Pチップも問題なければ、USB-シリアル変換モジュール(USB-TTL)を用意し外部から接続して直接スケッチの書き込みを行いボードを動作させることは出来ます。

USB-シリアル変換モジュールを外部から繋げスケッチを直接書き込む!

USB-シリアル変換を行うATmega16U2チップの破損のみなら、USB-シリアル変換モジュールを外部から繋げATmega328Pに直接スケッチを書き込みArduinoボードを動作させることが出来ます。
Arduino Proシリーズのボードを使われている方ならスケッチの書き込みの際に必要なので持っているかと思います。

USB-シリアル変換モジュールとの接続は簡単です。
こちらは何かの電子工作キットに付属していたProlific PL2303です。

DTRピンが付いていないためリセットは出来ませんが、5V・GND・TXD・RXDの4本をArduinoボードに接続すればスケッチを書き込むことは簡単に出来ます。

ボード上のUSB-シリアル変換器として機能するATmega16U2が壊れているので、外部から接続してスケッチを直接書き込むということですね!

ATmega16U2とATmega328Pは、UART通信(シリアル通信)でTX(送信)/RX(受信)が繋がっていてスケッチの書き込みが行われています。
そのため、ATmega328PのRX(ボード上のD0ピン)とTX(D1ピン)と外部から接続したUSB-シリアル変換モジュールのTX(TXD)とRX(RXD)を繋ぐことによりスケッチの書き込みが出来るということです。

当然これは、ATmega328PにArduinoのブートローダが書き込まれていることが大前提となります。

ブートローダの動作

Arduinoに電源を投入した時やリセットスイッチが押された時にブートローダは少しの間(1秒ほど)待ちます。
その間にUARTからの受信が何もなかった場合は、ATmega328Pに書き込まれているスケッチを実行します。

その僅かな待ち時間の間にUARTからデータの受信があった場合は、送られてきたデータに書き換える作業に移ります。

Arduinoを使っていると誰もが経験するかと思いますが、デジタルピンD0やD1に何かしらの回路がつながった状態でスケッチの書き込みをしようとするとエラーが出るのはそのためですね。

このUSB-シリアル変換モジュールでは、DTRピンが付いていないため上記のブートローダーの待ち時間の間に上手くスケッチが書き込める状態になるように手動でリセットスイッチを押す操作が必要となり面倒ではありますが、スケッチの書き込みは可能でした。

少し長くなりそうなので別記事で詳しくご紹介できればと思います。

このようにブートローダーが書き込まれたArduinoとして機能するATmega328Pでは外部から接続したUSB-シリアル変換モジュールを使えばスケッチを書き込み動かす事が出来ます。

Arduino UnoやNanoのボードからDCジャックなどの電源部分やUSB-シリアル変換機能を取り除き小型化したボードがArduino Pro Miniということです。

壊れたボードでも製作物などに組み込み頻繁にスケッチの書き込みを行わないものであれば有効に使えますね!

【追記】USB-シリアル変換モジュールからスケッチを書き込む方法

Arduino UnoのUSB-シリアル変換チップとなるATmega16U2の破損によりスケッチ書き込みが出来なくなったボードにUSB-シリアル変換モジュールを接続して直接スケッチを書き込む方法に関してご質問頂いたので追記しました。

【Arduino】USB-シリアル変換モジュール(USB-TTLコンバータ)からArduinoにスケッチを書き込む方法!

【追記】電源系統のレギュレータが壊れたArduinoボードをパーツを交換して直してみました!

Arduinoの電源系統が壊れて起動しないものやI/O端子から正常な電圧が出力されないボードを電源ラインにある3端子レギュレータを交換して修理してみました。

Arduinoの電源ラインのトラブルはこのパーツの破損によるものが多いようです。

外部電源からの電圧を5Vに降圧するこのレギュレータが破損して正常に動作しなくなったArduinoボードがいくつかありましたが、3端子レギュレータの交換は比較的簡単でArduinoを復活させることが出来る場合もあります。

こちらの記事も参考にして頂ければと思います。

【Arduino】電源系統が破損したArduinoボードをレギュレータチップを交換して修理する!5Vレギュレータは結構な頻度で破損する事があります。

【追記】月刊I/O 2022年5月号『Raspberry Piで作る電子工作』に記事を掲載して頂きました!

2022年4月18日発売の月刊I/O 2022年5月号『Raspberry Piで作る電子工作』に記事を掲載して頂きました。

Arduinoボードの故障や不具合等によるトラブルの解決策として本記事でご紹介した内容のものとなりますが、興味ある方は書店等で見かけた際に見て頂ければと思います。

月刊I/O 2022年5月号『Raspberry Piで作る電子工作』に記事を掲載して頂きました!破損原因を探って対処する壊れたArduinoボードの修理方法!

【追記】書籍『あっと驚く技術力 ガジェット改造』に記事を掲載して頂きました!

2022年8月26日発売の書籍『あっと驚く技術力 ガジェット改造』に記事を掲載して頂きました!

記事内容としては、本記事やリンク先記事でご紹介したArduinoの修理・修復方法に関してまとめたものとなります。

書店等で見かけましたら手に取って見て頂ければと思います。

書籍『あっと驚く技術力 ガジェット改造』に記事を掲載して頂きました!

最後に!

Arduinoを使った電子工作をやるようになり1年が経ちました。
破損等により動作しなくなったArduinoボードがいくつかたまってきたのでその修復をいろいろと試したことをまとめてみました。

今回修復させたボードは全て互換ボードとなります。
正規ボードはArduino UnoやNanoは持っていますが、電子工作初心者としては壊すことも前提として恐れずいろいろと回路を組んでテストしたり製作物に組み込んだりしているため、互換ボードは非常にお安く入手出来るので重宝しています。

Arduinoは互換ボードを使っている割合が圧倒的に高いので、正規ボードではトラブルが起きにくい?互換ボードではが起こりやすい?など分かりませんが・・・壊れたArduinoボードがあるなら試してみる価値はあるかと思います。

余談ですが互換ボードで言えばElegoo製のArduinoボードはオススメなのでこちらの記事も参考にして頂ければと思います。

【ELEGOO Arduino Uno】Arduino完全互換ボードの中ではダントツのクオリティーですね!
【ELEGOO Arduino Nano】数多くあるチャイナブランドの中ではダントツのクオリティー!ELEGOO製Arduino Nano互換ボードを買ってみました!

2 COMMENTS

北舛洋二

UNOのATmega16U2が壊れたみたいでファームウェアを書き換えても復旧しませんでした。
そこで外付けシリアル通信基盤を使おうと思いますが、DTR端子があるものを使う場合
この端子はUNOのどの端子に接続したらよいのでしょうか。リセット端子に接続したら
よいのでしょうか。

返信する
東京バード

ご質問ありがとうございます。
そうですね、リセットをかけるためのDTR端子はArduinoのRESET端子に接続します。
ですがそのまま直結ではリセットのタイミングがどうも上手くいかず、以前Arduino Unoの内部回路を調べたのですがコンデンサを1本入れる必要があります。

DTR端子ーーー0.1μFコンデンサーーー(RESET)Arduinoという接続でうまくいくはずです!
こちらの記事で以前検証したので参考にして頂ければと思います。

https://burariweb.info/electronic-work/atmega328p-sketch-wrinting.html

返信する

コメントを残す