Arduino始めます

Arduino始めます。この手のボードマイコンは、気になってはいました。しかし、何となく、難しそうで、色々と覚えることも多そうなので食指は伸びませんでした。しかし、ヘッドホンアンプの制作がひと段落しましたので、重い腰を上げて、Arduinoを始めることにしました。今回は、割高な本家Arduinoを避け、安価な互換機を使っています。初めて早々に、互換機ならではのトラブルに見舞われました。その解決方法についても、備忘録として残しておきます。
Arduinoの正規品は結構高い
初心者なら、先ずは正規品を使うべきなのでしょう。しかし、正規品は結構いいお値段で販売されています。

Arduinoは、基盤に、マイクロコントローラーと若干の部品やコネクター類を乗せた簡素なものです。部品はむき出しで、プログラミングには別途PCが必要です。そして、表示装置やセンサー類も別途用意が必要です。つまり、Arduinoだけ買っても、何もできないわけです。そんなものに5000円も払うのは嫌です。
Arduinoの互換品なら手が出せる
色々調べてみると、Arduinoには互換品があるようです。しかし、正規品でできることが、互換品でできないのは困ります。そこで、ArduinoについてWikipediaで調べてみました。すると、Arduino自体はオープンソースで、回路図や基板の設計データは公開されているようです。
つまり、互換品といても正規の回路図や正規の基板レイアウトをそのまま使っているらしいです。そして、互換品については、Arduinoという名称を使用しなければ、販売も可能とのことです。
そこで、いつものアリエクで、Arduino nanoの互換機を探してみました。検索キーワードは、”atmega uno”です。atmegaはArduinoで使用されているマイクロコントローラーの名前です。そして、unoは標準型です。すると、たくさん出てきました。

互換機なら、安いものは300円台で販売されています。これなら、手が出せます。
Arduino互換機を注文
今回は、Arduino UNOよりも、基板サイズの小さなArduino Nanoの互換機を購入することにしました。

今回は、ある理由から2個のArduino Nano互換機を購入することにしました。
ピンヘッダは自分で取り付けなければならない
入手したArduino Nano互換機は、ピンヘッダを取り付けていない状態で送られてきました。

スケッチ(プログラムのことを、こう呼ぶらしい)の書き込みはUSBで行います。したがって、ピンヘッダ無しでもある程度のことはできます。しかし、実験的に外付け部品を付け外しするならピンヘッダがあると便利です。しかも、ピンヘッダは付属しますので、はんだ付けするだけです。
ピンヘッダをブレッドボードに挿しておくと作業しやすいです。

6ピンのピンヘッダは、プログラマを使って、マイクロコントローラに直接書き込むためのISP端子です。プログラマを持っていませんので、ISP端子を使うことはありません。しかし、無駄にするのももったいないので、取り付けました。そして、はんだ付けが終わったArduino Nano互換機がこれです。

動作確認
ピンヘッダの取り付けが終わったら動作確認をします。USBケーブルで、PCとArduino Nano互換機を接続します。すると、製造時に書き込まれたスケッチが動き始めます。初期状態で、内蔵LED(基板上にLと表記されている)が点滅します。

なお、正規はATmega328Pというマイクロコントローラが使用されています。しかし、互換品ではATmega328PBが使用されています。328PBは328Pの後継で、若干の機能追加が行われています。しかし、価格は328Pよりも安価だと言われています。機能向上して、価格が安くなるのは、この手の部品ではよくあることです。
Arduino UNOとの違いはいくつかあります。まず、アナログ入力ピンA6とA7が追加されています。しかし、若干注意が必要です。A0~A5は出力ピンとしても使用できます。しかし、A6とA7は入力専用です。
また、Nano互換品は、本家NanoにはないPE0ピンとPE1ピンが追加されています。このピンは、I2C通信に使用できるようです。しかし、詳細は不明です。
ブートローダー書き換え
動作確認が終わったArduino Nano互換機は、そのまま使用開始しても良いでしょう。しかし、ここでひと手間かけて、ブートローダーの書き換えを行います。というのも、後々Arduino UNOの互換機も入手したいからです。スケッチを書き込む際、開発環境であるArduino IDEの設定をUNOとNanoでは、変える必要があります。

NanoをUNOにしてしまえば、設定変更なしにスケッチを書き込め、便利です。幸いUNOとNanoは、搭載のマイクロコントローラーが同一ですし、回路もほとんど同じです。違うのはブートローダーといわれる、ファームウェアだけです。その他、ブートローダーのサイズは、NanoよりもUNOのほうが小さいです。そのため、UNO化することで、スケッチエリアが若干大きくなります。
つまり、NanoにUNOのブートローダーを書き込めば、NanoをUNOとして使用でき、何かと便利です。
ブートローダー書き換え準備:配線
ブートローダーを書き込むには、ISPライターが必要です。しかし、ISPライターは、結構なお値段で、アマチュアが手を出せるようなものではありません。しかし、ArduinoをISPライターとして使うことができます。
NanoをISPライターとして、Nanoのブートローダーを書き込むわけです。このためにArduino Nano互換機を二台購入したわけです。
NanoをISPライターとして書き込むには、二台のNanoをつなぐ必要があります。下図が配線の略図です。

書き込む側のピン | 書き込まれる側のピン |
+5V | +5V |
GND | GND |
D10 | RESET(RST) |
D11 | D11 |
D12 | D12 |
D13 | D13 |
ブートローダー書き換え準備:Arduino ISPスケッチ
配線が終わったら、「書き込む側」のNanoをISPライターにするためのスケッチを書き込みます。この作業は簡単です。Arduino IDEのスケッチ例の中から、ArduinoISPを選択し、書き込むだけです。

スケッチを選んだら、「ctrl+U」で書き込みます。
ブートローダー書き換え:書き込むブートローダーを選択
今回は、NanoをUNOにしますので、UNOのブートローダーを選択します。手順は、Arduino IDEで、「ツール→ボード→Arduino AVR Boards→Arduino UNO」の順に選択します。

ブートローダー書き換え:書き込み装置指定
書き込み装置を指定します。今回は、UNOにArduinoISPスケッチを書き込んでいますので、「Arduino as ISP」を選択します。Arduino IDEで、「ツール→書き込み装置→Arduino as ISP」の順で選択します。

ブートローダー書き換え:互換機特有のエラー発生
いよいよブートローダーを書き換えます。Arduino IDEで「ツール→ブートローダを書き込む」の順で操作すると、ブートローダーの書き込みが始まります。しかし、互換機にブートローダーを書き込む場合、エラーが発生します。

このエラーの原因は、Aruduinoとその互換機では、使用しているマイクロコントローラーが異なるためです。Arduinoでは、ATmega328Pが使用されています。しかし、互換機ではATmega328PBが使用されています。この違いが原因で、ブートローダーの書き換えが失敗します。
ブートローダー書き換え:エラー対策
ブートローダー書き換えエラーを解決するために、avrdude.confファイルを編集します。対象ファイルはWindowsの場合、「C:\Users\ユーザー名\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\etc\avrdude.conf」です。※Arduino IDEのインストールの仕方によって、ファイルのパスが異なることがあります。
このファイルを、メモ帳で開き、「m328」で検索すると、編集箇所が出てきます。

m328のsignatureの部分を「0x1E 0x95 0x0F」から「0x1E 0x95 0x16」に書き換えます。なお、この書き換えは、ブートローダー書き換え時のみ実施します。ブートローダー書き換え後は元に戻します。そのため、書き換え前の部分は、コメントアウトしておくとよいでしょう。
avrdude.confの書き換えが終わったら、一旦セーブします。なお、ブートローダ書き換え後は、元に戻さなければなりません。そのため、ブートローダー書き替えが終わるまで、エディターはそのまま開いておくとよいでしょう。
再度、arduino IDEで「ツール→ブートローダを書き込む」でブートローダを書き込みます。
以上で、ブートローダーの書き替えは完了です。
なお、今回は二台のNano互換機を購入しています。双方をUNO化するため、書き込む側と書き込まれる側を入れ替えて、もう一度書き換えを行いました。