気の向くままに辿るIT/ICT
webzoit.netウェブサイトホームページ
IoT・電子工作

Pro Mini 5V版/Nano 5V版/Uno版ArduinoISPを作る

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
Arduinoって?

Pro Mini 5V版/Nano 5V版/Uno版ArduinoISPを作る

Pro Mini 5V版/Nano 5V版/Uno版ArduinoISPを作る

2017/06/30

 Arduino Pro Mini 5V/16MHz、Nano 5V/16MHz、Uno R3の各互換機を使って『AVRマイコン・AVRマイコン搭載Arduino用書き込み装置』を作るページ。

 いわゆるArduinoISPのことであり、ArduinoISPとは、FTDI232(FT232)などのシリアル書き込み機能をArduinoボードで代替できるもの。

 作ると言ってもスケッチは、Arduino IDEでサンプルとして提供されていて、公式サイトのArduinoISPガイドもあり、検索すればArduino UNOや中にはPro Mini 3.3V/8MHzを使ったArduinoISPの記事もすぐに見つかるので目新しいわけではないが、Pro Mini 5V/16MHzやNano 5V/16MHzだとガイドにも注記のあるUNO同様、10μFのコンデンサが必要みたいだったよという話。

[編集:2017/07/23]

 Pro Miniだけでなく、Nano、Unoも含んでおり、追記もしているため、前段で一部文章追記およびページタイトルを『Pro Mini 5V版ArduinoISPを作る』から『Pro Mini 5V版/Nano 5V版/Uno版ArduinoISPを作る』へ変更。

 この3つならArduinoISPには、ブレッドボード実装でさえ、最も嵩張らず小型化できるNanoが最適。

 ArduinoISP用回路を作る(作るというほどではないが)に至った理由は、先日、複数持っていたPro MiniやESP8266の書き込みに手持ちのFTD1232(FT232/FTDI232互換)が使えず、検証のため、追加で複数個のFTD1232やFT232RL(FTDI232)、USB(A-ミニ)ケーブル、ESP8266などを買ってみたが、これらが壊れているわけではなく、もしかして何かやっている時にうっかりブートローダを消してしまったのか?とあたりをつけ、結果、原因はこれだったのだが、FTDIでは、やはりブートローダを書き込めず、一方で、UNOを使ってArduinoISPを試してみたら、なぜか、ブートローダを書き込むことができ、その後はArduinoISP、FTDIモジュール共にスケッチを書き込むことができるようになったということがあったから。

 書き込み装置の小型化を図るため、UNOは現状2個あるとはいえ、1個はマイコンが外れるタイプ(Atmega16U2)で他方は違うというのもあるし、何か始める際は、とりあえず、UNO、実装・作り置きしておく試作品にはPro Miniを使おうと思っていることもあってUNOをフリーにしておくため、複数持っているPro Miniの1つをArduinoISPにしておこうかと。

 尤も何度かやっていると覚えてしまえるくらいの配線・回路なので余程、しょっちゅう使うというのでもなければ、そもそも作り置きしておくまでもないといえばないが。

Pro Mini 5V版ArduinoISPを作る

 Pro Mini 5VをArduino ISPとすべく使ったのは、5個200円のミニブレッドボード1個と40ピンで105〜120円のジャンパワイヤ(オス-オス/オス-メス)計16本(8本でも可)、各種120個で180円のコンデンサ(10μF)1個、ArduinoISPとする278円のPro Miniが1個、これ用で245円のUSBシリアル変換モジュール(FTDI)1個、100円ショップSeriaにもあるUSB(Aオス-ミニBオス)ケーブル1個、スケッチを書き込むマイコンかArduinoボード、今回は610円のAtmega16U2 UNO 1個を想定。

EasyWordMall Arduino Pro Mini互換ボード Atmega328 5V 16MHz

Rasbeeオリジナル FT232RL互換 3.3V/5V FTDI/USB/TTL変換アダプタ

Amazonベーシック USB2.0ケーブル 1.8m Aオス-miniBオス 7GUK

EasyWordMall Arduino UNO R3互換ボード(USBケーブル付属)

HiLetgo コンデンサ 0.22uf-470uf(12種x各10個 計120個)

Rasbee SY-170 ミニブレッドボード カラフルブレッドボード 5個

Rasbeeオリジナル ジャンパーワイヤ 長さ20cm(オス-オス) 40ピンx1

Rasbee デュポン ジャンパーワイヤー(オス-メス) 2.54mm 長さ20cm 40ピンx1

 書き込まれるUNOを入れても約1330円、UNOを除いて書き込み装置の試作品としてみると720円、ジャンパワイヤ8本にすれば...というわけで激安品を使って単価割りするとこんな感じ。

Arduino Pro Mini 5V/16MHz版ArduinoISP 1

 ごちゃごちゃしているのは、ブレッドボードとジャンパワイヤを使っている、かつ、ArduinoISPとしたPro Miniとこれを使ってスケッチを書き込むことを想定しているUNOを直結せず、ブレッドボードを介している(ジャンパワイヤを分けて7本と6本+1本配線している)からだが、実際には配線は8本だけ。

Arduino Pro Mini 5V/16MHz版ArduinoISP 2

 具体的な配線は以下の通り(ArduioISP側とスケッチを書き込む側の違いはあれど、Arudino IDEのサンプルスケッチArduinoISPをそのまま使う場合、何れがPro MiniでもUNOでも配線は同じ)。

[ISP(Pro Mini)]-[UNO]
Arduino Pro Mini 5V/16MHz版ArduinoISP 3

 5V版だからなのか、Pro MiniをArduinoISPとする場合には、UNO同様、10μFのコンデンサがないと書き込みに失敗(Pro Mini 5VのRSTとGND間に10μFコンデンサを入れればArduinoISPとして機能)する模様。

 ちなみにPro MiniをArduinoISPとするにあたり、ピンヘッダを初めてはんだ付けしてみた。(機能するという意味では一発OKだったものの、これまた初めてはんだごてのピン先を尖ったのに替えたけどピンヘッダのはんだ付けは、思いの外、難しく、見た目上は、納得いく仕上がりにはならなかった。)

シンプルなArduino Pro Mini 5V/16MHz版ArduinoISP回路

 やっぱり、すっきりさせた方がよいかということでコンデンサをミニブレッドボード上に直接挿し、ジャンパワイヤ(オス-オス)の他方を書き込み側に挿すべく想定するとUNOをArduinoISPとする場合と同様にジャンパワイヤ6本で済むのだが、実際のところ、無理っぽい。

 というのも互換モジュールであるFTD1232は、ピンがはんだ付けされた状態でPro Miniと直結しようとすると表裏反対になる恰好で差し込むことになるのだが、そうなると差し方は、FTD1232を実装面を表にしてPro Miniの後ろかから挿すか、裏にして前から挿すかの2パターンしかなく、このシンプルな方法でFTD1232実装面を裏にしてPro Miniの前から挿すパターンだと通電はするが、書き込みが、うまくいかず、前述の複雑な配線で取り回してみたが、やはり、FTDI互換モジュールをこのパターンで挿すと、どうにも書き込みがうまくいかない。

 よってFTD1232を使ってPro MiniをArduinoISPとする場合には、先の配線がベターな模様。

 専用にすべくFTDI互換モジュールは複数個買ってあるのだが、何れにしてもFTD1232とPro Miniの接続は微妙なので微調整するという意味でも、今回は、これら2つのはんだ付けはしていない。

 FTD1232とPro Miniをジャンパワイヤでつなぐ方法も考えられるが、その場合、更に嵩張ってしまうし、Pro Miniの垂直方向に並ぶ6ピン穴と他のピン穴の位置関係からして6穴はPro Mini表面側にピンを出すようなはんだ付けを要することになる可能性が高い、かと言って直結すべくブレッドボードの端を利用しようにもPro Miniのホールをすべて活かそうとすると干渉して無理があり、ユニバーサルボードでもカットしたとしてもギリギリいけるかどうか、一部ホールを犠牲にすれば、なんとかなるかもしれないがスマートとは言い難い。

 ブレッドボード上でPro Mini+FTD1232を使ったArduinoISPにおいて固定するなら直結ではなく配線コードを這わせれば、多少すっきりする可能性もあるが、FTDIモジュールと接続する6ホール分も配線コードを引き回すとなるとミニブレッドボードでは厳しく、400穴あたりが必要となるとUNOより嵩張ることになってしまう。

 となるとユニバーサルボード上でラッピングワイヤ、錫メッキ線や繋ぎのはんだ(はんだブリッジ)などを介してFTD1232、ヘッダピンを介して書き込む側のArduinoボードなどと接続するようにするのが良さ気な一方、ヘッダピンに都度挿すのもなんだからと予めジャンパワイヤを挿しておくとなると、やはり嵩張る。

 結果、どれも一長一短で、もしかするとUNOをArudinoISPとするのが最もシンプルでスマートなのかもと思わなくもない。

Nano 5V版ArduinoISPを作る

HiLetgo Arduino Nano Ver 3.0互換ボード ATmega328P CH340G 5V 16MHz 改良版(5個セット)

 いや、待てよ、今までUSBポートを要する実装品を考えていなかったこともあり、小型かつUSBポートを持つNanoを使う機会がなかったが、こういうケースこそ、FTDIモジュール同様、Mini B用ながらUSBポートを標準で持つArduino Nanoを使うのがベストプラクティスか。。。1個これ用に買ってみよう。。。う、たかだか50円だが値上がりしてる。。。と言っても380円だけど。

[2017/07/18]

 Nanoを2個買ってやってみたのだが、どっちもデフォルトのBlinkは機能し、スケッチも書込み可能なことは確認済みも、なぜか、NanoをArduinoISPとして機能させることができなかった。。。

Arduino Nano 5V/16MHz版ArduinoISP
[2017/07/23]

 あ、Nanoでも(当然ながら)ArduinoISPとすることができた。

 購入した2個の内、1個はハンダ済み、もう1個は未ハンダで前者はピンヘッダが斜めにハンダ付けされブレッドボードに刺さらず、ジャンパワイヤで試行するも、後者ははんだせずにブレッドボードにピンヘッダを挿しNanoを載せただけだったから不安定だったのか、何れもスケッチのアップロードはできたものの、ArduinoISPとしては機能させることができなかったのだが、前者のピンヘッダを指で均してブレッドボードに挿して再度ArduinoISPとして使ってみたら、あっさりできた。(この時、10μFのコンデンサを追加したからかも。やっぱり5VだとUno/Pro Mini/Nanoに関わらず、これが必要な模様。)

 というわけで作り置きしておくArduinoISPは、Nanoに決定。

Nano+ブレッドボード版ArduinoISP兼用ケース
[2017/09/16]

 常備しておくことにしたNano+ミニブレッドボード版ArduinoISPを100円ショップSeriaで買った『約100枚収納可能トレーディングカードケース』に収納してみた。

 電源5V(赤)/GND(黒)/RST用D10(白)と橙/青/黃で11〜13のジャンパワイヤ計6本をケース外に出せるようにしてある(当然、しまうこともできる)。

 ただ、このケースArduinoISPだけを収めるには有り余る、複数つなげることも想定して凹凸のあるミニブレッドボードを長手方向に2個接続したら、このケースにピッタリだったので同じミニブレッドボードを使ったESP8266への書き込み簡易回路(FTDIモジュール+GPIO0ボタン+RST/Resetボタン+ジャンパワイヤのセット)も併設、図らずも何れの回路も同じ側にミニUSBポート用の穴を空けるに至り、フタにある突起は、ESP8266用回路のボタンスイッチ(内1個は飾りという名の失敗の名残)。

 ブレッドボード自体は、元々付いている両面テープで貼っただけ、なんならグルーガンで補強してもよいかとも思っている。

 とはいえ、2つまとめてみたところでArduinoISPも頻繁に使うものでもないし、Wifi自体のチャネル数や無線親機やアクセスポイントの対応端末数などもあって、そんなに次から次へとESP8266を買うわけでも、同じESP8266のスケッチをとっかえひっかえアップロードしまくるわけでもないが...。

Uno版ArduinoISPを作る

ArduinoISPでPro Miniにブートローダを書き込む回路・配線

 前述の通り、同じことだが、ついでにUNOをArduinoISP、任意のスケッチをPro Miniと想定して配線した画像も添付しておく。

Parts tower AMS1117-3.3 DC-DCステップダウン電源モジュール 3.3V/800mA

 何れにしても仮にスケッチ書き込み側の入力が3.3Vなら降圧レギュレータを使えばよいだろう。(例えば、5V => 3.3V専用なら5個175円といった破格の降圧モジュールもある。)

 この3ピンから成るモジュールは完結明瞭でVCCに5V、そしてGNDをそれぞれつなぐだけでOUTに3.3V前後の出力を得ることができる。

 気を取り直してというわけでArduinoISPとする方(今回はNano/Uno/Pro Mini+FTDIモジュール)にサンプルスケッチArduinoISP、他方のAVRマイコンやArduinoボード(今回はUNO)に任意のスケッチを書き込むまでの手順は以下の通り。

  1. ArduinoISPとするArduinoボード(Nano/Uno/Pro Mini+FTDIモジュールなど)をArduino IDEを利用できるPCに接続
  2. Arduino IDEの[ツール]メニューからArduinoISPとするArduinoボード(Nano/Uno/Pro Mini+FTDIモジュールなど)とシリアルポートを選択・確認
  3. Arduino IDEの[ArduinoISP]サンプルスケッチを選択、ArduinoISPとするArduinoボードにアップロード(Pro Miniの場合、一度リセットボタンを押してからアップロードするのが無難かも)
  4. 前述の通り、ArduinoISPとするArduinoボード(Nano/Uno/Pro Mini+FTDIモジュールなど)と任意のスケッチを書き込むマイコン or Arduinoボード(今回はUNO)を配線
  5. Arduino IDEの[ツール]メニューから任意のスケッチを書き込むマイコン or Arduinoボード(今回はUNO)とシリアルポートを選択・確認
  6. Arduino IDEの[ツール]メニューから[書込装置]として[Arduino as ISP]を選択
  7. Arduino IDEの[スケッチ]メニューから[書込装置を使って書き込む]を選択し、任意のスケッチを書き込むマイコン or Arduinoボード(今回はUNO)に書き込む

 ちなみにマイコンやArduinoボードにブートローダが書き込まれていないのであれば、スケッチを書き込む以前にArduino IDEの[ツール]メニューから[ブートローダを書き込む]を選択してブートローダの書き込みをしておく必要がある。

 マイコンは普通ブートローダは書き込まれていないはずなのでブートローダの書き込みは、たぶん必須、一方、Arduinoボード(上のマイコンに)はデフォルトで書き込まれているはずだが、もし、ブートローダを消してしまったなど何らかの事情で、これがない場合、ブートローダを書き込んでおかないと電源を入れてもマイコンやボードが起動しないため、スケッチを書き込むことができない。

 今回、Blinkを書き込んでみたところ、ArduinoISPとしているPro MiniとUNOのLEDが同時に点滅していたため、一瞬失敗したか?と思ったが、ジャンパワイヤを外して他のボードのアップロードを試してみるとPro MiniはArduinoISPのまま、実は、それまでArduinoISPスケッチを書き込んであって今回、Blinkを書き込んだUNOをLANケーブルでPCにつないだらLEDが点滅、というわけで成功していた。

 ArduinoISPに限ったことではないが、スケッチの書き込みが終わったら、配線を外さないと(書き込み時と実行時には、それぞれ適切な配線にしないと)本来の機能はしない模様。(あれ、当たり前のこと言ってる!?)