極小のArduino Leonardo互換ボードを作った

自分でマイコンボードを作りたい!

そんな無謀なことを言い出したことから始まった物語です。もともとロボットにはATmegaの全ピンを2.54ピッチに変換するボードにはんだ付けし、使用する予定でした。

しかし、どこかで不具合が起きたとき、ほかの場所にまで影響が出ないように、使用するマイコンを機能ごとに分けたほうがいいなと思いました。

そこで、どこの部分で使っても、都合のいい場所にピンがあるような、マイコンボードを作ろうとしたことで、この計画は始動しました。

使用マイコンの選定

今回のボードにはATmega32U4が搭載されています。このマイコンを選んだ理由は以下の通りです。

Arduino Leonardoの互換機として使える。

・USBシリアル変換ICが不要なので、作りやすい

Arduino Leonardoという既製品の回路図が公開されている

などがあげられます。一番重要視したのは、小さい範囲に、いかに回路を小さく収めれるか、動くことが保証されている回路図があるかということです。見も知らぬマイコンを短期間で、動作できる回路を、お手本なしに作るのはとても時間がかかるものです。なので、回路図の公開されているもののいらない部分を省いて、動作できる最小限の回路にしました。

回路図作成

上の写真の当初使用予定であった基板には、ATmegaを動かすための、クロック回路、USB書き込み用回路が主に載っています。とくに難しい回路はなく、個人的には非常に扱いやすい! 動作するために必要な回路がとてもすくないこともあり、順調に制作を行えました。相変わらず、いつも通りKicadを使って制作しています。

自動配線降伏!? 地獄の配線作業

個人的にはいつもPCBの配線作業はとても楽しいと感じています。ここを通そうかなとか、こうすると見栄えがいいかなとか、いろいろ考えているときがとても楽しく感じます。しかし、今回は、それどころではありません。制御基板に複数個載せるためには、とても小さく作る必要があります。

初めて2層で「限界かも」と思いました。ビヤをあまり使いたくないと思っていましたが、そんなこといっていたら配線できないというレベルでした。なお、自動配線でさえ、配線することができませんでした。やっぱり手作業の方が大変信頼はできるなと思いました。いつも「楽しい~」といってすぐおわりますが、今回はルート決めや、ビヤの配置などの計画に時間を費やしたため、3日ぐらいかかりました。

JLCPCBで表面実装を初発注!

基板の製造を行ってくれるJLCPCBですが、表面実装のサービスも行っています。今回の基板の表面実装の値段は$40ほどと表面実装の値段としてはとても安くなっています。されに、注文した枚数すべてに表面実装だけでなく、数枚だけ表面実装するということもできます。自分のときは、5枚注文でしたが、2枚だけ表面実装するということができました。試験用の基板であるとか、そういうときに、全部表面実装するときよりも、値段を抑えて注文できます。

Kicadから表面実装をしてもらうためのファイルを出力できます。自分はすべてこのページを参考にしたので、もしも表面実装を注文したいという方は、ぜひご覧ください。

JLCPCBの実装サービスの利用方法 (jh4vaj.com)

自分の環境では、部品リストの出力がうまくいかず、コマンドプロンプトで無理やり出力しています。

そして使用部品の在庫は十分に確認しましょう。上のURL先のサイトで、JLCPCBのページで部品を検索する方法が紹介されているのですが、自分の使っている「ATmega32U4」は人気なのかすぐに在庫がなくなります。(すぐに補充されました)部品の在庫がなかったら、注文できないので、しっかり確認してください。

基板が届いた

待ちに待った到着!どんな出来具合なのか、届くまでKicadの3Dのモデルをニヤニヤしながら見ていましたが、自分の思っている以上、とてもかっこいいものが届きました。これは既製品ですではありません。自分で設計したものだと考えると、とてもワクワクするものです。こんなのどう頑張っても手はんだでは無理なので、とても助かりました。

マイコンボードのスペック

とはいってもArduino Leonardoの互換機なので、Seeeduino XIAOほどの性能はありませんが、都合のいいピンを8×2のピンに割り当てました。

ロボットのジャイロの値や、その他の部分の制御用、制御マイコンへの送信用としてはちょうどいいくらいかなって感じです。

自分で設計し、製造を依頼している形なので、既製品のSeeeduino XIAOなどのボードと比べると高くはなってしまいますが、個人的には、自分で作ることこそ面白味があり、とてもいい経験になったなと思います。

さっそく動作確認!

まずは、ブートローダーの書き込みです。Arduino ISPを使って、今回はArduino NanoからSPIでボードに書き込みLeonardo化をおこないます。書き込み一回目では、ブートローダーの書き込みがうまくいかず、USBでPCと接続しても、うまく認識されませんでしたが、再書き込みしてうまくいきました。Arduino UNOでもしたことがあるのですが、よくインターネット上には、「同じATmegaのボード同士でないとうまくいかない」とありますが、いままで、してきてそんなことはありませんでした。いままでは外部に水晶発振子などをつけていましたが、このボードにはすでに水晶発振子が内蔵されているので、ただつなぐだけで書き込み出来ました。参考にしたページはこちらです。

Monday Experiment: Bootloading an ATmega32u4 with Arduino | Murchlabs

このマイコンボードはロボットでジャイロセンサとして活躍してもらう予定なので、さっそくMPU6050と接続してみました。

ちゃんと値が取れました。いや~まさかあの小さいやつでしっかり動いてくれるとは思いませんでした(動いてくれないと困ったのですが)。ジャイロセンサ用としてしっかり機能することがわかったので、さっそく使っていこうと思います。その一方で、このボードは5Vで動きます。そのため、カメラ(OpenMV)などとシリアル通信を行う際、レベル変換が必要です。外部にレベル変換回路を設置したのですが、シリアル通信がうまくいかなかったので、あきらめてカメラとの通信用にはSeeeduino Xiaoを使うことにしました。(大事なところには信頼できる製品を....💦)

今回の感想

最高にかっこいいボードが完成してとても満足しています。

一回目の試験機としてはすでに十分な性能を発揮してくれました。余っているディジタルピンをLEDようにするとか、LEDの色を変えるとか、すこし改良しながら、ロボット用として使っていこうと思います。自分で作った新しいデバイスで電子工作するのはきっと楽しいですよ。ぜひしてみてください!

また今回利用したJLCPCBでは、表面実装用のクーポンや、新規ユーザーには$54相当のクーポンの配布を行っています。急ぎで基板を準備したいとか、安く基板を注文したいとかそいういことがあればぜひ、JLCPCBを利用してみてください!

jlcpcb.com

読んでいただきありがとうございました。