自作Arduinoを作ろう

# 自作Arduinoとは

Arduinoには、ATmegaというマイクロコントローラーが使われていて、それにコンデンサーや抵抗などの部品を基盤に実装することで作られています。さらにArduino自体がオープンソースになっているので、Arduinoの名称を使わなければ誰でも互換品を作って販売することができます。そのため、部品さえ揃えてしまえばブレッドボード上にArduino互換機（今回作るものは本家と少し違います）を500円程度で作ることもできるのです。

## メリット
- とにかく**安い**

## デメリット

- 普通のArduinoが一台必要
- USBをそのままでは刺せない
  - シリアル通信ができない（部品を足せばできます）

# 用意するもの

- 環境
    - パソコン
        - Arduino IDEをインストール
        - （この記事ではMacでやっていますが、Windowsでも同様の手順です）
  - Arduino一台（互換機も可）
  - Arduino-パソコンのUSBケーブル

- 材料

  - [ブレッドボード](http://akizukidenshi.com/catalog/g/gP-05294/)
  - ジャンパー線
  - [ATmega328P-PU](http://akizukidenshi.com/catalog/g/gI-03142/)
  - [クリスタル (水晶発振子) 16MHz (秋月電子)](http://akizukidenshi.com/catalog/g/gP-08671/)１個
  - [22pF セラミックコンデンサ (秋月電子)](http://akizukidenshi.com/catalog/g/gP-04060/) ２個（リンクは10個入り）
  - [0.1μF セラミックコンデンサ (秋月電子)](http://akizukidenshi.com/catalog/g/gP-00090/)１個（リンクは10個入り）
  - [10KΩ 抵抗 (秋月電子)](http://akizukidenshi.com/catalog/g/gR-03399/)１個（リンクは100個入り）
  - [タクトスイッチ (秋月電子)](http://akizukidenshi.com/catalog/g/gP-03647/)１個

  

  全部[秋月電子](http://akizukidenshi.com/catalog/top.aspx)で手に入れることができます。

  ジャンパー線はブレッドボード上でつなげるものは[硬いもの](http://akizukidenshi.com/catalog/g/gP-00288/)を使い、ブレッドボードとArduinoをつなげるのは[柔らかいもの](http://akizukidenshi.com/catalog/g/gC-05159/)を使うことをお勧めします。

# 制作
## 組立
![atmega328p_06s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/93e24ae7-36b2-862f-43ac-11a395247077.png)
[https://ht-deko.com/arduino/atmega328p.html](https://ht-deko.com/arduino/atmega328p.html)より引用
上図のように組立ます。
## セットアップ

用意した既製品のArduinoからATmegaに書き込むためのプログラムをArduinoに書き込みます。

1. パソコンで、Arduino IDEを起動します。

1. `ファイル＞スケッチ例＞11.Arduino ISP＞Arduino ISP` を選択してプログラムを開きます。<img width="1280" alt="スクリーンショット 2019-10-20 11.59.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/e86b0dc7-4c73-e5d9-51c5-9ffe2b533687.png">
1. Arduinoをパソコンに接続します。
1. 2で開いたプログラムを「マイコンボードに書き込む」ボタンで書き込みます。<img width="390" alt="スクリーンショット 2019-10-20 13.54.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/ba53a032-b9d0-404d-ca96-f708098d84f2.png">




次にATmegaにブートローダーを書き込みます。
![atmega328p_02s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/fbc6ff81-954c-5550-a579-804cec6d77c9.png)
https://ht-deko.com/arduino/atmega328p.htmlより引用


上図のようにArduinoとAtmegaを配線します。先ほど作ったものにジャンパー線をいくつか足しただけです。

次にパソコンから作業をします。

1. パソコンとArduinoを接続し、Arduino IDEを開きます。
1. `ツール＞書き込み装置＞Arduino as ISP`を選択します。<img width="1280" alt="スクリーンショット 2019-10-20 13.55.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/3aa8a29c-e1f5-35b0-3f56-67493efa2f14.png">

1. `ツール＞ブートローダーを書き込む`を実行します。<img width="1280" alt="スクリーンショット 2019-10-20 13.55.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/7f08fa9e-a3f1-0d21-085f-da468a71f0fa.png">


これでブートローダーが書き込まれました。

# スケッチの書き込み

最後にATmegaにスケッチを書き込みます。

上で作ったArduinoとATmegaの配線をそのままの状態で行います。

1. Arduino IDEでATmegaに書き込みたいプログラムを開きます。
1. `スケッチ＞書き込み装置を使って書き込む`を実行すると書き込まれます。<img width="598" alt="スクリーンショット 2019-10-20 13.56.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/0ee79467-4e1d-7a72-8f4b-68f245cba962.png">

1. 書き込みが終わったらArduinoの10~13番ピンに繋がっているジャンパー線は外しても大丈夫です。

# 補足

## ピン配置

ATmega328P-PUとArduinoのピン配置の対応は以下の通りです。
![Atmega168PinMap2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/cb0d8ec8-aba6-7c9a-1fa6-49d0788f834c.png)
[Arduino - ATmega168/328P-Arduino Pin Mapping](https://www.arduino.cc/en/Hacking/PinMapping168)より引用

## 電源

先ほどの配線ではArduinoからATmegaに電源を供給していましたが、電池などを使って電源を供給することもできます。

その時はArduinoとの接続のジャンパー線はすべて外して、ブレッドボードの+と-のところに電池などで5VとGNDを繋ぐことでATmegaに電源が供給されます。

# 参考サイト

[ATMEGA328P を Arduino として使う](https://ht-deko.com/arduino/atmega328p.html)
[【ArduinoIDE1.8.x】ATmega328PでArduinoを作る(内蔵8MHz使用)](http://teppodone.hatenadiary.jp/entry/ArduinoIDE1.8.5_8MHz_internalClock_ATmega328P)
[Atmel AVR -Wikipedia](https://ja.wikipedia.org/wiki/Atmel_AVR)
[2.Arduinoオープンソース | 大好きArduino](https://daisuki-arduino.com/arduino-opensource/)

# 最後に

この方法はすでに多くの記事が出ていますが、自分なりにわかりやすくまとめてみました。
何か間違いや改善点があればコメントお願いします。
最後まで読んでくださり、ありがとうございました。