Arduino Unoの心臓部のマイコンにはATmega328Pが使われています。通常Arduino Unoでの開発が終わったらATmega328Pだけを取り外して使用することができ、低コストで製品を量産できます。
Arduino Unoにはまた新しく購入してきたATmega328Pを刺せば良いはずですが、素のままのATmega328PではArduino Unoは動きません。ブートローダと呼ばれる起動時に何をするのかを指示するプログラムを書き込む必要があります。ブートローダ書き込み済みのものも売っていますが、100円~200円程度高くなるようです。
そこで今回は確実にブートローダを書くために「Arduino Uno用ブートローダライタシールド」を製作することにしました。シールドというのはArduinoの上に重ねて刺せるようにした専用の電子回路ことです。
ネットで調べた情報を頼りに回路図を考えます。最小限の結線は以下のようになります。
Arduino Uno | ATmega328 | 備考 |
5V | 7 | |
5V | 20 | |
GND | 8 | |
GND | 22 | |
RESET | 10uFのコンデンサーを介してGNDに接続 | |
10 | 1 | RESET |
11 | 17 | MOSI |
12 | 18 | MISO |
13 | 19 | SCK |
今回はこれを元に基板を作ります。回路の設計に使ったのは「Target 3001!」です。
回路図
4つのLEDと電流制限用の抵抗は動作には関係ありませんが、ビジュアル的に付けてみました。次に基板です。
以前「Target 3001! のG-Code書き出し」に書いたようにTarget 3001!からG-Codeを書き出します。今回はGrblを使って基板の切削をするのでG-Codeの編集をしなくても大丈夫です。Linux CNCと比較するとGrblはシンプルな動作のみ解釈して動くようです。一時停止してエンドミルやドリルを変えるなどの解釈できないCodeがあるときは読み飛ばしてそのまま切削を続けます。複雑なことはできませんが、エラーで止まってしまうより分かりやすいかもしれません。
Grbl-Controllerで読み込んで切削
切削した基板。余分な銅箔はすべて取り除くように設定しました。切削時間は42分位です。
出来上がった基板にパーツをハンダ付けします。
作られたのは片面基板ですから、裏側にしか銅箔パターンがなくピンヘッダを逆さにハンダ付けすることができません。そこで下写真のように、そこでピンソケットのリード長10mmのものを使い上から刺し通常どうりハンダ付けした後、上部分をルーターで切断しました。
リード長10mmありますから、基板を通してハンダ付けしても余裕でArduino Unoのソケットに届きます。
Arduino UnoをAVRライタにする
Arduino UnoをAVRライタとして使うためのスケッチを書き込みます。Arduino UnoをUSBでPCと接続し統合環境Arduino IDEを起動し「ファイル>スケッチの例>ArduioISP」でスケッチを開き、Arduino Unoに書き込みます。これでArduino UnoがAVRライタになります。
ブートローダを書き込む
制作したブートローダライタシールドに新しいATmega328Pを取り付け、Arduino Uno接続します。「ツール>書込装置>Arduino as ISP」ライタの種類を選んでおきます。準備が整いましたので「ツール>ブートローダを書き込む」を選択します。
これでLEDがチカチカしながら数秒で書き込みが完了します。ブートローダを書き込んだATmega328PはArduino Unoで使うことができます。