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

【自作Arduino製作ノート】世界にたった一つだけのオリジナル自作Arduinoを作る!

Arduinoとの出会いで電子工作という趣味を始めたのですが、いつか作ってみたいと思っていた自作のオリジナルArduino製作を始めました。
上記記事でご紹介したように、普段Arduinoを使っていてボードにこんな機能が標準で付いていたら便利なのにとか他の互換ArduinoボードのようにType-C端子だったら使い勝手がいいのに・・・なんて思う部分は多々あります。

自作Arduinoを設計して製作するなら私の環境ではありますが、こんなイメージのArduinoに仕上げたいといった構想を上記記事でまとめています。

最近KiCadを使った基板設計や製作を行うようになり、まずは小規模な回路&基板構成のものでこれまで電子工作であると便利だなと思うものから練習も兼ねて製作するようになりました。

その他自作基板関連の記事

ある程度KiCadの扱いにも慣れてきたので、前々から作ってみたいと考えていたオリジナルの自作Arduino製作に取り掛かりました。

今回は実際に基板を製作してパーツを実装して動かしてみましたが、基板設計としてミスしている箇所や、また実際に使ってみて接続端子などの各所配置等をもう少し使い勝手がいいように変えたりもしたくなってきました。

修正等を行った完成版は後ほど追記としてご紹介できればと思いますが、現状の私の自作Arduinoくんを見て頂きたいと思います。

世界に一つだけのオリジナル自作Arduinoの製作!

冒頭でご紹介した記事では自作Arduinoを製作するならこんな構成にしたいといった構想(イメージ)を書いています。
これまでArduinoを使ってきて自作Arduinoを作るなら本家Arduinoボードにはない付加機能をいくつか付けて製作したいといった内容です。

今回製作した自作Arduinoくんでは本家ボードにはない以下の付加機能を付けて製作しました。

USB端子はType-Cを使用

Arduinoは登場以来もう10年ほどが経っているため、本家ボードでは少し古い規格のUSB端子が使われています。
Arduino UnoではUSB-B端子、Arduino NanoではMiniUSB端子といった具合ですね!

最近では身の回りのデバイスでType-Cケーブルや端子を使うことが多くなってきましたが、Arduinoを使う時に古い規格のケーブルを用意するのは結構面倒となるため、Type-C端子になったArduino互換ボードを使うことが多くなってきました。

またType-CケーブルからType-BやmicroUSB、miniUSB端子に変換できるこのようなアダプターも便利なので最近よく使っています。

【電子工作】ArduinoやESPなどのマイコンボードで便利に使えるType-C変換アダプターを買ってみました!

今風なArduinoを自作するならUSB端子はType-Cを使いたいところですね!

I/O端子にピンヘッダーも用意

今回製作いているArduinoはUno形状で作っています。
Arduino UnoはI/O端子の数やボードサイズから一番使いやすいArduinoなので使われている方も多いと思います。
通常UnoのI/O端子にはシールドとの接続の事もあるのでメス型のピンソケットが取り付けられています。

しかしブレッドボードへの配線や他のモジュールなどとの接続を考えると、I/O端子にオス型のピンヘッダーもあれば接続が容易になる場面も多いと思います。

通常のピンソケットに加えピンヘッダーも取り付けられるようにしているので、ジャンパーワイヤー等を使った接続の自由度が上がります。
一部のArduino互換ボードではこのような構成になっているボードもありますね!

nRF24L01無線モジュール接続用端子

Arduino UnoのICSP端子はブートローダーの書き込みといった特定の用途以外ではほぼ使われることがありません。

Arduino Megaなど大きなボードにUno用のシールドを共通して使えるようにシールド側にICSP端子への接続ソケットが付けられたシールドもありますが・・・実質このようなシールドを使う頻度はあまり高くないかな?
という事でICSP端子はカットして変わりにnRF24L01無線モジュール接続用の端子を配置しました。

nRF24L01はWi-FiやBluetoothと比べ接続が非常に早く複数モジュール間でのデータ送受信などでも使えるので非常に便利な無線モジュールです。

【電子工作】無線モジュールnRF24L01を使いArduino間で無線通信をやってみる!

これまで製作したものでもいくつか使いマイコンを使った電子工作ではよく使われる無線モジュールとなりますが、日本では技適が取得されていないのでその使用には注意も必要です!

Wi-Fi/Bluetoothモジュール接続用端子

ArduinoにはWi-FiやBluetoothといった無線機能が標準で搭載されていないので(一部搭載されたボードもあります)、これら無線モジュール接続用の端子も付けました。

回路構成的には技適が取得された、例えばESP-WROOM-02といったモジュールを基板上に直接搭載しようかとも当初考えていましたが・・・
モジュールサイズが大きく基板面積を占領してしまうことやハードウェアシリアルまたはソフトウェアシリアルでの接続やボーレートの変更&接続など操作性が複雑になり使い勝手が悪くなるということで、単純にWi-FiやBluetoothモジュールをピンソケットに差し込んで使える構成にしています。

ESP-WROOM-32を使い完全にArduino UnoライクなWeMos D1 R32のような回路構成のものも同時に作ったのですが、これだとMCUにATmega328Pを使う必要性がなくなり方向性としてArduinoではなくESP32開発ボードとなってしまうため、今回はATmega328Pを使った完全なArduino自作ボードとして仕上げています。

Arduino Uno形状でWi-Fi/Bluetoothが使える便利なESP32開発ボード!WeMos D1 R32(ESPDuino32)の基本的な使い方!

Wi-FiモジュールはESP-01(ESP8266)、そしてBluetoothモジュールはHC-05やHC-06を接続して使える構成にしています。
共にArduinoとはUART(TX/RX)での接続で使える使いやすい便利なWi-Fi/Bluetoothモジュールです。

【Arduino】小型Wi-FiモジュールESP8266(ESP-01)の基本的な使い方!スケッチの書き込み&モジュール単体で動かす基本的な方法!
Arduinoを使いBluetooth通信をやってみる!HC-05/HC-06 Bluetoothモジュールの使い方!
MEMO
ESP-01やHC-05/06は技適が取得されていないモジュールなので、その使用には注意が必要です!

ESP-01やHC-05/06はArduinoとはUARTシリアル(TX/RX)を使ったやり取りで接続しますが、Arduinoのスケッチ書き込みの特性上ハードウェアシリアルでの使用ではTX/RXラインにモジュールが接続された状態だとスケッチの書き込みが上手く出来ません。

そのため各モジュールの電源ON/OFFを切り替えるDIPスイッチを取り付けています。
また接続するモジュールによっては通電されていない状態でもTX/RXラインが繋がっていると書き込みできないものもありますが、そのような場合は横のスライドスイッチを使ってシリアルのライン自体をカット出来るのでモジュールの抜き差しを行う必要がないようにしています。

またこのスライドスイッチによりハードウェアシリアル(RX:D0/TX:D1)との接続以外にソフトウェアシリアルで接続する場合にRXをD2/TXをD3端子に切り替えが出来るようにもなっています。

OLEDディスプレイ接続用端子 & スピーカーを内蔵

Arduino開発ボードとしてはディスプレイ接続用端子もあると便利だと思います。

スケッチのデバッグ等でシリアルモニタを使うことはよくありますが、変数の値などをディスプレイに表示させるといった用途などでも何かと便利に使えるかと思います。

ディスプレイは一般的によく使われる4PタイプのI2C接続のものにピンの並びを配置しています。
通常のI2Cポートとしても使えます。

また当初テスト用のタクトスイッチを1つ取り付ける予定でしたが、これはカットして小さなスピーカーを搭載させました。

これもDIPスイッチでON/OFFの切り替えが出来るようになっています。(D8端子を使用)

全体構成

このように本家Arduinoにはない自分が欲しい機能を一覧で書き出し盛り込んでみると・・・この配置がなかなか大変になりました。

KiCadだけではパーツや端子・スイッチ等の配置による干渉や使い勝手などイメージしづらいので、一旦Fusion360を使い主要パーツを配置をして確認することに・・・。

Arduino Uno互換ボードとして製作を考えておりそこそこ大きなボードサイズのように思いますが、CAD上にパーツを配置してみると結構これが大変、接続したモジュールが干渉しないように配置するとI/Oラベルなどを書き込むスペースが無くなってしまいます。

DIP型のATmega328Pを当初使う予定でしたが、この大きなチップを配置してしまうと他のパーツの位置等の自由度がなくなってしまうという事でSMD(表面実装)タイプのATmega328P-AUを使うことにしました。
これで他のパーツ配置の自由度も上がります。
全体構成としてはこのようなパーツの配置に落ち着きました。

KiCadでの設計&JLCPCBでの基板発注

全体構成&パーツの配置が決まるとKiCadでの基板設計です。
今回0805サイズの表面実装パーツをベースに製作しました。
Arduino Unoのボードサイズって結構大きいように感じますが、これだけ付加機能を盛り込むと面積的に結構いっぱいです。

クリスタルをコンデンサ入りのセラロックを使ったり、またDIPスイッチやスライドスイッチをSMDタイプの小さなものを使うなど考えましたが、スイッチ系はこれより小さくなると使い勝手が一気に悪くなるのでスルーホールの大きめのパーツを使っています。

そして通常Unoには4箇所に基板固定用のビス穴が入っていますが、これは使わないかな?という事でカットしたのですが・・・
パーツを実装して動作テストしてみると無線機能など便利に使えるボードで、今後製作するものに乗せて使うことも出てきそうなので頑張って付けておいた方がよかったかななんて思い、修正バージョンを今後作ることにしました!(後述します)

今回も基板製造はJLCPCBさんを使いました。
このサイズの基板なら5枚で海外からの送料を入れても4~500円程度で製作することが出来ます。
この安さで発注から10日ほどで届いてしまうので、不備があれば何度でもチャレンジできますね!

テスト動作やある程度使ってみて修正基板を作る予定ですが、一応Rev1.0として現状の基板データをダウンロード出来るようにしておきます。
何かの参考になればと思います。

またこれから基板製作を始めてみようとお考えの方は、JLCPCBでの基板発注方法等をこちらの記事でまとめているので一緒に見て頂ければと思います。

【電子工作】はじめての基板製作!JLCPCBさんに基板を発注してみました。ユーザー登録・データ納品・基板到着までの一連の流れをご紹介!

基板発注から今回は8日で手元に届きました。
この製作料金で驚くほどの早さ、毎回JLCPCBには驚かされます!

パーツ実装&各所チェック

0805サイズのパーツをベースとしているので手はんだでも可能だと思いますが、ATmega328P-AUはピッチが非常に狭いので表面実装パーツのはんだ付けに慣れていない方はちょっと大変かもしれませんね。

今回パーツの実装はヒートガンを使って行いました。
手はんだよりも圧倒的に早く綺麗にパーツ実装が出来ます。
電子工作用途でヒートガンが1台あると何かと重宝します。

【電子工作】初めてのヒートガン(リワークステーション)を買ってみました!1台持っているとはんだ作業で大変重宝します!【RF4 RF-H2】

パーツ点数がそこそこ多いので基板発注時にステンシルを一緒に発注してリフローによるパーツ実装をした方が効率は良さそうですが・・・まだリフロー装置を持っていないので今回はヒートガンを使って頑張って実装しました。

I/O端子の入出力やUART/I2C/SPI端子を使った各種モジュールとの接続など動作チェックを行いましたが問題なさそうです!

改善ポイント① リセットウイッチの修正

1ヶ所リセットスイッチ部分のシンボルとフットプリントの不一致があり予定したものが使えないという痛恨のミスがありました。

本家ボードのUSB-B端子からType-Cに変更しているので背が低くなった分この位置にあるスイッチもある程度押しやすくなっているので、これはもう本家で使われているサイズの5Pのタクトスイッチでも問題ないかな?
修正基板では変更する予定です。

改善ポイント② モジュール接続端子の位置調整

Wi-FiとBluetoothモジュールは共にUARTでの接続モジュールなので同時接続は想定しておらず接続端子も干渉する位置関係になっています。
仮に同時に使用したい場合はどちらかのモジュールを通常のI/O端子に差し込んで使えば問題ありません。

ただOLEDディスプレイ接続用の端子については位置を微妙に変えたいところです。
Wi-Fi機能を使いながらディスプレイも同時に使うといった用途も想定できるので、現状の配置ではこの2つのモジュールは干渉してしまいます。

またOLEDディスプレイを接続した状態ではDIPスイッチが一部隠れてしまうので、この位置関係は修正しておきたいところです!

改善ポイント③ 基板固定用のビス穴は必要か?

表面実装タイプのATmega328P-AUではDIP形状のATmega328Pにはないアナログ端子A6/A7を使うことも出来ます。
Arduino Unoにはないアナログ端子A6/A7はNanoやPro miniなどのボードでは使えるようになっていますね!

今回製作した基板でもA6/A7端子を引き出して使えるようにしており、さらにI/O端子にピンヘッダーも追加しているのでこの定位置にある基板固定用のビス穴が邪魔になることやあまり使うことはないかな?という事でカットしたのですが・・・残しておいた方がよかったかもしれません!(修正済みの画像です)

無線モジュールを手軽にマウントして使えるUnoとして今後製作するものに搭載して使う機会もあるかもしれないので、修正基板を発注するのであればこの取付ビス穴は復活させようかとも考えています。

テスト動作を兼ねて現状使ってみて改善したい大きなポイントはこんなところです。
CAD上で結構頭を絞って考えましたが、実機を使ってみると気付く部分も多いですね!

回路構成

全体の回路構成も簡単に見ておきます。
USB-シリアル変換チップにCH340Cを使ったごくごく一般的な回路構成だと思います。

無線モジュールESP-01やnRF24L01は3.3V動作でのモジュールですが、信号ラインのレベルシフト回路は入れていません。
RX側のみ抵抗の分圧等による簡単な回路を入れてもよかったのですが、これまでこれらモジュールは結構使っていますがArduino(ATmega328P)からの5V信号ラインからでも特に問題ないのでカットしています。

また電源ラインは本家UnoではオペアンプとMOS-FETを使ってUSB端子からの給電とDCジャック(またはVIN端子)からの給電を電圧により上手く切り替える構成で作られていますが、5Vおよび3.3Vレギュレーターを使ったシンプルな構成にしています。

ブートローダーの書き込み

基板の製作&パーツの実装が出来ましたが、Arduinoとして動かすにはまずATmega328Pにブートローダーを書き込む必要があります。

今回製作した自作Arduino基板ではICSP端子はカットしているので、Arduinoの通常のSPI端子(D10 SS/D11 MOSI/D12 MISO/D13 SCK)を使って書き込みを行います。

ブートローダーの書き込みにはUSBaspなどAVRライタが必要となってきますが、Arduinoボードがもう一台あれば書き込み装置として使うことが出来るのでこの方法で行いました。

【電子工作】Arduino(AVRマイコン)のブートローダー書き込みにUSBaspを使ってみる!

Arduino IDEの[スケッチ例]の中にある[ArduinoISP]スケッチを書き込み装置として使うArduinoに書き込みます。

接続は書き込み装置として使うArduinoISPを書き込んだArduinoの対応した端子同士を接続するだけです。
今回Unoを使って書き込みを行いました。

書き込み側のArduino製作したArduino
D10RESET
D11D11
D12D12
D13D13
5V5V
GNDGND

ブートローダーを書き込む対象は[Arduino Uno]、そして書き込み装置を[Arduino as ISP]に設定。
あとは[ブートローダーを書き込む]で完了です。

ブートローダーの書き込みが完了したら通常通りUSB端子からのスケッチ書き込みが行えるようになります。

Arduinoのブートローダーの書き込みに関しては、こちらの記事も参考にして下さい。

【Arduino/ 小ネタ⑧】ArduinoはAVRプログラマ(ライタ)として使うことも出来ます!

Lチカスケッチを書き込み無事オンボードLEDの点滅に成功しました。
これで世界に一つだけの自作Arduinoくんの完成です!
やったぁ〜!!!!

使用パーツ一覧

修正基板では変更するかもしれませんが、現状のボードで使用しているパーツ一覧です。

使用パーツ一覧
パーツ定数入手先
抵抗R1/R2 5.1kΩ(0805)Amazon / Aliexpress
R3/R6/R7/R8 10kΩ(0805)Amazon / Aliexpress
R4/R5/R9/R10/R11/R12 1kΩ(0805)Amazon / Aliexpress
コンデンサC1/C4/C5/C6/C7/C8/C11/C13/C14/C15 0.1μF(0805)Amazon / Aliexpress
C2/C3 22PF(0805)Amazon / Aliexpress
C9 10μF(タンタル)Aliexpress
C10/C12 47μF/25V(アルミ電解)Amazon / Aliexpress
LEDD1/D2/D5/D6 LED(0805)Amazon / Aliexpress
ショットキーバリアDD3 SS34(SOD-123)Aliexpress
D4 M7(SOD-123)Aliexpress
フューズF1 500mA(1812)Aliexpress
MCUU1 ATmega328P-AUAliexpress / 秋月電子
USB to TTLU2 CH340CAliexpress
クリスタルY1 16MHzAliexpress / 秋月電子
USB端子J1 Type-C秋月電子
DCジャックJ14 3PセンタープラスAmazon / 秋月電子
レギュレータU3 AMS1117-5.0Amazon / Aliexpress
U6 AMS1117-3.3Amazon / Aliexpress
ブザー7525 SMDAliexpress
スイッチSW1 TS06-667-25(5P)Aliexpress
SW2 6P Slide_DPDT(2.54mm)秋月電子
SW3 4P DIP(2.54mm)秋月電子
各種ピンヘッダーJ2/J3/J4/J5/J6/J10/J15
各種ピンソケットJ11/J12/U5/U6
P5/P6 Arduino Uno用ピンソケット(8P+6P)秋月電子
P7/P8 Arduino Uno用ピンソケット(10P+8P)秋月電子

【追記】自作Arduino修正基板を作りました!

オリジナルの自作Arduinoを製作したわけですが、実際に使ってみると無線モジュールやOLEDディスプレイ端子の配置が少し使いにくく・・・
また、今後製作するものに乗せて使うことも想定できるので基板固定用のビス穴もあった方が・・・

ある程度使い込んでみて、それら気になる箇所を修正した基板を製作しました。(Rev1.1)
これで現時点での私としては納得がいく自作Arduinoくんになったと思います。

修正基板が出来上がる頃にはミニリフロー装置『Miniware MHP30』という便利な道具も加わったため、こちらの基板は初リフロー装置によるパーツ実装を行いました。

リフロー装置はSMDパーツの実装に非常に便利に使えるアイテムです。
ヒートガンを使うよりも圧倒的に早く実装する事が出来ました。

【電子工作】コンパクトボディーで安全設計!ミニリフロー装置『Miniware MHP30』を使ってみる!

最後に!

Arduinoとの出会いで電子工作を始めて2年ほどが経ちましたが、前々から作ってみたいと考えていた自作のオリジナルArduinoを製作することが出来ました。

今回一度目の基板発注では上記に書いたような不備や改善点が見えてきたので、Rev1.1基板として修正版を現在考えています。
自分が納得出来るものって一発ではなかなか作れないものですね!
実機を触って見えてきた改善点等を踏まえ修正していく作業も電子工作では楽しくスキルアップにも大きく貢献してくれていると思います。

自作Arduinoの製作なんて完全に自己満足の世界ではありますが・・・世界に一つだけの自作Arduinoが動いてくれる、ほんとうに嬉しくて楽しいものです!

そしてArduinoはオープンソースハードウェアなので回路構成や仕様・基板情報など詳細なデータが公式サイトに公開されています。
回路や基板レベルに視点を変えArduinoボードを見ていると、普段Arduinoを開発ボードとして使っている時には気付かなかったいろんなものも見えてくるので面白く、これもまたArduinoの違った楽しみ方だと思います。

【Arduino/ 小ネタ⑦】Arduinoはオープンソースハードウェアとなり詳細なボード情報が公開されています!

【これから始めるArduino】ELEGOO Arduinoスターターキットを比較!多くの作例を試せる『Arduinoスターターキット』からArduinoに触れてみるのはオススメです!

4 COMMENTS

【KiCad / PCB】ベタGNDのハッチングパターンを試してみました! | ぶらり@web走り書き

[…] 以前、自作Arduinoを製作していた時にInstagramで交流のある海外の方が同様に自作したArduinoでこのハッチングパターンを使った例を紹介してくれました。 面白いベタ塗りパターンで基板によっては通常のベタ塗りで作成するより格好良く見えたりもします!(画像引用:Instagram) […]

返信する

【電子工作】オリジナルの自作Arduinoを作りたい。ボード製作の構想! | ぶらり@web走り書き へ返信する コメントをキャンセル