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

【電子工作】Arduinoを使った無線コントローラー(送信機)製作ノート①!KiCadの基板設計から基板発注(JLCPCB)までの話(nRF24L01)

普段Arduinoを使った電子工作をメインで楽しんでいます!
Arduinoは電子工作初心者の方でも難しい回路やプログラムなどの知識が無くても比較的簡単に扱えるように作られたよく出来たマイコンボードです。
実際に動かしながら学んでいくと理解もしやすく、ある程度のことなら簡単に動作させることが出来ます。

そして世界中には多くのArduino Loveな方々がいるので、非常に多くの情報が公開されています。
そのため何かしらのトラブル等発生した場合でも大抵のことはネットで調べて自力で解決する事が出来るかと思います。
ESPなど後発となるマイコンボードと比べてこの情報量の多さは、Arduinoを使った電子工作の魅力の一つでもあります。

またArduinoはオープンソースハードウェアとなり、各種ボードに関する仕様や回路など詳細な情報が全て公開されています。
そのためある程度Arduinoに慣れてくると、自作のArduinoボードやシールドを作ったりなんていう楽しみも生まれてきます。

【Arduino】自分だけのオリジナルArduinoシールドを作る!既存シールドにはない自分の環境で便利に使えるものが作れます
【電子工作/Arduino】オリジナルの自作Arduinoを作りたい!どんな機能を追加する?ボード構成を考えてみる

そんな電子工作やマイコン初心者の方でも楽しむ事が出来るArduinoなんですが、使っていて不便に感じる所もいくつかあります。

Arduinoは登場してもう10年程が経つため、本家ボードではUSB端子の規格が古いなど細かい所はいくつかありますが(互換ボードで対応出来ます)、やはり標準で無線機能を持たないことではないでしょうか?

ESP系のマイコンボードではWi-FiやBluetoothといった無線機能を標準で使うことが出来ます。
またラズパイでは最近Wi-Fi機能が搭載されたRaspberry Pi Pico Wも販売が開始されました。

このように後発となるマイコンボードでは無線機能が標準で搭載されているものも多いわけですが、Arduinoで無線機能を使いたい場合はそれらに対応した無線モジュールをArduinoと外部接続して使う必要があります。(一部Arduinoボードでは無線機能が搭載されたものもあるようですが)
ArduinoでWi-FiやBluetooth、またはその他無線モジュールを使い無線通信をしたい場合にはひと手間かかるということですね!

そんな事で今回は、Arduinoをベースとした無線コントローラー『Arduino Controller』を製作した話となります。
個人的にArduinoを始めた頃からこのような送信機(コントローラー)的なものが1台あると便利だなと考えていたもので・・・ようやく製作する事が出来ました。

このArduino Controllerを製作する経緯や、また興味を持って頂いた方もパーツを揃えれば組めるように基板データ(ガーバーファイル)なども動作確認後、問題がなければ公開出来ればと思っています。

ブログ記事として少し長くなってしまうので、今回は製作したArduino Controllerの仕様や製作の経緯、基板発注の話などを中心にご紹介できればと思います。

Arduinoを使った無線コントローラー(送信機)の製作!(nRF24L01)

Arduinoで無線機能を使いたい場合、冒頭でもお話したように対応した無線モジュールを外部接続する必要があり少し手間がかかります。

Arduionoで使えるWi-FiやBluetoothモジュールに関してはこちらの記事で詳しく解説しています。
合わせて読んで頂ければ参考になるかと思います。

【Arduino】小型Wi-FiモジュールESP8266(ESP-01)の基本的な使い方!スケッチの書き込み&モジュール単体で動かす基本的な方法!
Arduinoを使いBluetooth通信をやってみる!HC-05/HC-06 Bluetoothモジュールの使い方!

Wi-FiやBluetoothを使うとPCやスマホアプリなどから操作することも出来て何かと便利なんですが、Arduinoで作った製作物、例えばラジコンやロボットなどを動かす際には物理コントローラーを使った方が操作がしやすい場合は多いと思います。

また製作過程で何かしらテスト動作などさせたい場合にもこのような完成した(パッケージ化した)コントローラーが1台あると、テストのたびに毎回無線で操作する部分をブレッドボードなどを使い組む手間も省けて便利に使うことが出来ます。

今回製作したArduino ControllerはnRF24L01という2.4GHzの無線トランシーバーモジュールを使っています。
Wi-FiやBluetoothと比べ接続が非常に早く、このようなコントローラーとしての用途に適しており非常に便利です!

nRF24L01は安価で入手もしやすい無線モジュールとなり、Arduinoや他のマイコンボードでも便利に使える無線モジュールです。
しかし日本での技適が取得されていないため、その使用には注意も必要です!

nRF24L01無線モジュールに関して詳しくはこちらの記事も参考にして下さい!

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

自分の手にフィットする形状のコントローラーが作りたかった!

Arduinoにスイッチやポテンショメーター、ジョイスティックなどを接続して動作確認やテスト動作などさせることはよくあります。

Arduinoとの接続自体は難しいものではありませんが、ブレッドボードで組むと結構な配線の数となります。
また、動作確認などしたい場合に毎回組むのは面倒で結構手間のかかる作業となります。

そんな事から以前このような有線タイプのコントローラーを作りました。
簡単な構成のコントローラーですが、3D CADでケースをモデリングし何度か試作して自分の手にフィットする形状で作っています。

3Dプリントパーツでジョイスティックコントローラーを作る!電子工作用途で便利に使えます。【STLデータ公開】

いつかこれを無線化して便利なコントローラーとして作り変えたいと考えていましたが・・・これが今回製作したArduino Controllerのベースとなっています。

KiCadでの基板設計

無線化するなら今後電子工作で製作するものでもいろいろと対応出来るように、タクトスイッチやポテンショメーター・トグルスイッチ・加速度センサー・ブザー・OLEDディスプレイなど想定できるものを全て詰め込みました。

使用出来るGPIO端子の数やボードサイズからArduinoを使ったコントローラーとして作るには、Arduino NanoかPro Miniという選択肢になるかと思います。
共にATmega328Pを使ったボードとなり、デジタル入出力端子&アナログ入力端子の数は同じです。

基板寸法から小型なPro Miniを使いスケッチ書き込みの際はUSB-シリアル変換モジュールを外部接続して書き込む事を想定していましたが、Arduino Pro MiniはSparkFun製の正規ボードと他の互換ボードではアナログ入力端子の位置が微妙に異なるなどの違いがあるため、汎用性のあるArduino Nanoを使うことにしました。
Type-C端子に変更された互換Arduino Nanoボードを使っています。

結果的に送信機側のスケッチを変更したい場合にUSBケーブルを直挿しして行えるので、こちらの方が使い勝手はいい感じです!

Arduino Nanoで使える全てのGPIO端子を使うことにより実現出来ました。

まずブレッドボードを使っての試作&テスト段階で組んだものはこんな感じです。
これだけの配線ともなるとユニバーサル基板で作るのはかなり大変となり、使い勝手もあまりよくないと思います。

もうこれはオリジナルの基板製作が出来なければ実現することが出来ない案件ですね!
そんな事でKiCad(基板設計のCADソフト)を使った基板の設計&製作の練習を始めるようになりました。

Arduinoとの接続、全体の回路構成はこのようになります。

Arduino Nanoの仕様、Arduinoのデジタル&アナログ入力に関して理解できていれば比較的簡単なものとなります。

【電子工作】Arduino Nanoの基本仕様・ピン配列まとめ!

タクトスイッチやトグルスイッチ、ジョイスティックの押し込み判定といったデジタル入力が全8チャンネル、そして左右ジョイスティックのX方向/Y方向とポテンショメーターを含めたアナログ入力が全6チャンネルとなるので合計14チャンネルの状態を送信出来る仕様のコントローラーとなります。

これくらいの回路規模なら基板設計初心者の私にでもなんとか作れそう・・・ということで挑戦することに!

そしてコントローラーなので握った時のホールド感が良く、ジョイスティックや各ボタンの操作性(位置関係)も良いものが作りたいという事が大前提にあったので、基板形状(サイズ感)と各パーツの配置にはこだわりました。

ジョイスティックを傾けた時のパーツとの干渉や指で操作する際の各スイッチとのクリアランスなどこれはKiCadだけでは分かりにくいため、基板形状を含め全てのパーツの配置はFusion360(3D CADソフトです)を使って行いました。

パーツを配置した時の全体イメージや各スイッチを可動させた時のパーツの干渉など・・・これは3D CADが得意とする部分ですね。

Fusion360で作った基板外形データおよび各パーツの配置データをKiCad側にインポートする事により狙い通りの基板設計が出来たと思います。(手が小さい私のサイズに合わせているので他の方が使うとどうだろう?)

実際に基板にパーツをはんだ付けして動作テストをしていますが、握った時のホールド感、そして操作性は非常にいいものになったと思います。

基板発注はトータルコストで考えると圧倒的にJLCPCBがお得!

KiCadを使った基板設計が出来たら基板の発注です。
今回JLCPCBさんに発注して基板製作を行いました。
ここで基板屋さん(PCB製造メーカー)への基板の発注に関しても少し見ておきます。

つい最近、KiCadを使った基板の設計やPCB製造メーカーさんを使い基板製作依頼を行うようになったのですが、全く初めての方からしたら非常に難しそうに感じるかもしれません。

私も電子工作を始めてからオリジナル基板の設計や製作は非常に興味がある項目の一つでしたが、「なんだか難しそう?」といったイメージから長らく後回しにしていた項目です。

今回のArduino Controllerの製作にあたり先述のように基板が作れないと実現することが出来ないだろうということで、KiCadを使った基板設計の練習を始めたのですが・・・
私のように全く初めてだとKiCadを使った基板設計は何度か練習する必要があると思いますが、これくらいの回路規模のものなら1週間ほど練習すれば作れるかと思います。(私は他の練習基板もいくつか同時に作っていたので製作に2ヶ月ほどかかってしまいましたが!)

KiCadの使い方などはまだまだブログでご紹介できるレベルではないのですが、CADソフトなので練習あるのみですね!
これまでArduinoなどのマイコンボードを使った電子工作をやっていて、「こんな基板あると便利だな!」と感じるものは多数あります。
その中から回路規模の小さいものから練習として基板を設計&製作していきました。
初めてのオリジナル基板が動いた時は非常に感動しました!

【電子工作/PCB】ESP-01(ESP8266)のプログラム(スケッチ)書き込みボードを作ってみました!

基板の製作が出来れば、オリジナルのArduinoシールドなんかも作ることが出来るので非常に便利です!

【Arduino】自分だけのオリジナルArduinoシールドを作る!既存シールドにはない自分の環境で便利に使えるものが作れます

そして基板の製造依頼の話になります。
基板の設計が出来たらPCB製造メーカーさんに基板の製作依頼をするわけですが、これも初めてだと「難しそう?」や「料金が高そう?」といったイメージがあるかと思います。

国内の基板屋さんに発注するとおそらくかなり高額な料金が発生するかと思いますが、海外製造メーカーさんに依頼すると非常に安価な価格で基板を作ることが出来ます。
これは非常に驚きです!
そして発送も早い!

海外のPCB製造メーカーさん(主に中国の会社となります)に基板の製作依頼をするわけですが、JLCPCBやFusionPCB、PCBgogo、NextPCBさんなどはよく耳にする有名なメーカーさんになるかと思います。

今回の基板製作はJLCPCBさんにお願いしました。
基板製作料金と海外発送の送料を合わせたトータルコストは他社を使うより圧倒的にお安く製作する事が出来ます。

海外のPCB製造会社さんに基板製作を依頼する場合、基本サイズ(10cm×10cm以内)に収まる基板ではどのメーカーさんも約4ドル程で製作する事が出来ます。(2022.10月現在)

この時点で非常にお安くてビックリなんですが、海外からの発送となるためどのメーカーも送料の方が高くなる場合が多いと思います。

JLCPCBさんではOCS ExpressやOCS NEPといったOCSでの発送を選択する事ができ、到着も比較的早く送料も非常にお安く抑えることが出来ます。
基本サイズに収まる基板なら送料を入れても日本円で1,000円前後の価格(基板5枚セットです)で製作することが出来ます。
これは電子工作をやっている方なら試さない手はないですよね!

そしてこの基本サイズを超える基板サイズとなると各社基板製作料金は一気に高くなってしまいます。
今回製作したArduino Controllerの基板サイズは約150mm×80mmとなり1辺が10cmを超えるため、各社見積を出してみましたが基板製作料金は結構高くなります。

例えばFusionPCBさんやPCBgogoさんでの見積では基板製作料金だけで約40ドル弱前後の価格だったと思います。
基本サイズを超える基板に関しては各社結構高くなってしまうわけですが、JLCPCBさんでは8.9ドルと基本サイズを超える基板でもかなりお安く製作することが出来ます。
そして送料区分もOCS Expressを使うことができ、トータルのコストは他社と比べると大きく抑えることが出来ます。

これまで何度かJLCPCBさんを利用していますが、もう現時点で基板の製作依頼はJLCPCBさん一択でいいのでは?
なんて思ったりします。

製作依頼も基板データ(ガーバーファイル)をサイトにアップロードするだけで基板製作料金や送料を確認する事ができ、各所製作項目もほぼデフォルトの設定で簡単に発注する事が出来ます。

JLCPCBでの基板発注方法に関しては、こちらの記事で詳しく紹介しているので参考にして下さい!

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

次回記事で基板データや発注等に関して詳しくご紹介できればと思います。

背面パネルは3Dプリンタで製作

このArduino Controllerの動作には7~12Vの電源が必要となります。
18650などのリチウムイオン電池を2本使って駆動するのが望ましくなります。(2セルのリポバッテリーなどからでも駆動できます)

そして電池ボックスの固定と握りやすいように適度な厚みを持たせるために、3Dプリンタで作った背面パネルに固定して使う形状としています。
スペーサーの長さを変えて好みの握りやすい厚みに調整して使う事が出来ます。

そして製作当初、前面パネルも3Dプリントパーツで作り固定する予定でしたが・・・使ってみるとこれは無くても問題なく、メカ部がむき出しの方がカッコいいかもしれません!

前面パネルを取り付けるなら透明なアクリルパネルなどが良さそうです。
調べてみるとElecrowさんではPCBの製造以外にもアクリルの加工も出来るようです!
試してみようか検討していますが・・・、これは無くてもいいかな?

動作確認&各所チェック

基板の設計&製作に関しては最近始めた初心者なので、これまで製作した基板では回路パターンのミスやシルクの印刷ミスなど・・・何かしらの誤りがありました。

今回製作したArduino Controllerもそのようなミスがないか現在入念にチェックしています。
各所確認、無線での動作チェックなどをやっていますが、問題ないようなので次回記事で基板データ(ガーバーファイル)を公開するとともに基板の発注方法や必要となるパーツの詳細、組み立て方法、Arduinoスケッチなどをまとめてご紹介できればと思います。

そして動作確認の様子も少し見ておきましょう。

このArduino Controllerの仕様は、左右2つのジョイスティック・トグルスイッチ・ポテンショメーターに、4つのタクトスイッチで操作を行うコントローラーとなっています。

スイッチのON/OFF判定(デジタル入力)が計8チャンネルにジョイスティックとポテンショメーターのアナログ入力が計6チャンネルの合計14チャンネル分のデータをnRF24L01無線モジュールを使い送信する構成となっています。(ブザーも搭載しています)

コントローラーはArduino Nanoを使い制御していますが、Nanoの全てのデジタル入出力端子(D0~D13)およびアナログ入力端子(A0~A7)を使っています。(もうこれ以上増やせませんね)

そして各スイッチポジションをセンターの0.96インチOLEDディスプレイに表示&確認出来るようにもしています。

また加速度センサー(MPU6050)も搭載しているので、コントローラーの傾きを受信側に送り操作することも出来ます。

現時点でコントローラーは送信機能のみで動作するスケッチとしていますが、nRF24L01無線モジュールは送受信に対応しているので、例えば受信側のセンサー情報を送信機に送りディスプレイに表示させたり、ブザーも搭載しているので無線接続が切れたら警告音を鳴らすといったカスタマイズなども出来るかと思います。

受信側に接続するマイコンにnRF24L01をSPIで接続することが出来れば、基本的に送信機側のスイッチポジションデータを受信して操作することが出来るので、テスト動作や製作物のコントローラーとして便利に使うことが出来ると思います。

注意
nRF24L01無線モジュールは、日本での技適が取得されていない無線モジュールなのでその使用には注意が必要です!

最後に!

Arduinoを使った電子工作を始めた当初からこのようなコントローラーが1台あると便利だと思っていたので、一つ目標を実現することが出来ました。

使用しているnRF24L01無線モジュールは技適の問題もあるのでその使用には注意が必要ですが、Wi-FiやBluetoothと比べ接続が早くこのようなコントローラーを作るには非常に便利な無線モジュールで、Arduinoの学習用としても適していると思います。

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

これまで作った2足歩行ロボットなどにも組み込んで動かしてみましたが、動作を多数割り振ることも出来るのでやはりこのような物理コントローラーが1台あると便利ですね!

自分で作った自作コントローラーを使って自作ロボットを動かす、非常に楽しいものです!

少し話が長くなりましたので今回はArduino Controller製作にあたり、その設計から基板発注までの話をまとめてみました。

動作確認等問題がなければ、次回記事で基板データや必要なパーツ、組立方法やArduinoスケッチなどもご紹介できればと思います。

【電子工作】Arduinoを使った無線コントローラー(送信機)製作ノート②!Arduinoや他のマイコンボードでも使える便利な無線コントローラーです!【nRF24L01/JLCPCB】

3 COMMENTS

【Arduino】Pro Microの基本仕様・ピン配列等まとめ! | ぶらり@web走り書き

[…] こちらは以前製作したArduino無線コントローラーを使いPC上のファミコン(NES)エミュレーターを動かしている様子です。 コントローラーから無線送信されたスティック操作を一旦Pro Microで受信してゲームパッドのキー配列に合わせてPC操作(キーボード操作)を行っています。 […]

返信する
【Arduino】Arduino Leonardoの基本仕様・ピン配列等まとめ! | ぶらり@web走り書き

[…] こちらは以前製作したArduino無線コントローラーを使いPC上のファミコン(NES)エミュレーターを動かしている様子です。 コントローラーから無線送信されたスティック操作を一旦Leonardo(動画ではPro Microを使っています)で受信してゲームパッドのキー配列に合わせてPCを操作をさせています。 このようなマウスやキーボード操作といったHID機能が使えるのがArduino Leonardoの大きな特徴となります。 […]

返信する

【電子工作】Arduinoを使った無線コントローラー(送信機)製作ノート②!Arduinoや他のマイコンボードでも使える便利な無線コントローラーです!【nRF24L01/JLCPCB】 | ぶらり@web走り書き へ返信する コメントをキャンセル