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

【電子工作/Arduino】ATtiny84で動かすミニ無線コントローラー『TinyPad』を作ってみました!

普段ArduinoやESPなどのマイコンボードを使った電子工作を楽しんでいます。

これらマイコンボードを使った製作物を操作する際に共通して使うことが出来るコントローラーがあると便利なことから、以前Arduino NanoとnRF24L01という無線モジュールを使った無線コントローラーを作りました。

これが非常に便利で、これまで製作したものを全てこの無線コントローラーで動かすことが出来るようにしました。
そして今後製作するであろうものも無線モジュールを組み込めば操作することができ便利に使えると思います。

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

そして最近KiCadを使った基板製作も始めたことから、上記無線コントローラーの機能を限定したキーホルダーサイズのミニ無線コントローラーも作ってみました。

基板設計は最近始めたばかり、そして表面実装パーツでどこまで小型な基板に仕上げることが出来るかなど個人的に試してみたかった事を盛り込んだ形となり、ATtiny84を使い上手くこのサイズにまとめることが出来たと思います。

ATtiny84で動かすミニ無線コントローラー『TinyPad』の製作

nRF24L01は安価な無線モジュールですが、1対1でのデータのやり取りのほかに複数モジュール間での双方向のデータ通信にも対応しています。

nRF24L01はNordic Semiconductor(ノルディック・セミコンダクター)社製の2.4GHz帯域用RFチップ(nRF24L01)が使われた低消費電力を実現した無線モジュールとなります。

3.3V動作でのモジュールとなりますが低電圧1.8Vくらいまでの電圧で動作させることができ接続も非常に早いことから、このような何か操作するための無線モジュールとして使うには最適です。

電子工作用途で多くのプロジェクトで使われているモジュールですが、日本では技適が取得されていないためその使用には注意が必要です!

nRF24L01無線モジュールの基本的な使い方に関しては、こちらの記事で詳しく解説しているので合わせて読んで頂ければと思います。

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

nRF24L01はSPI接続で扱うモジュールとなりますが、マイコン側にSPI接続さえ出来ればArduino間でのデータ通信以外にArduiono-ESP間など異なるマイコン間でもデータのやり取りが出来るので、やはりこのような無線コントローラーの製作には向いています。

最近使い始めたmicro:bitに組み込んでみましたが上手く動作させることが出来ました。
電子工作をやられている方なら、これだけで何か面白く使えそうなんて想像できるかと思います。

ミニサイズの基板に収める

冒頭でもご紹介したArduino無線コントローラーはその制御にArduino Nanoを使いアナログ6チャンネル、デジタル8チャンネルの計14チャンネルのデータを送信出来る無線コントローラーとなっています。

Arduino Nanoではもうこれ以上I/Oを取ることは出来ませんが、無線コントローラーとして想定できるものはほぼ盛り込めた形となりました。
これだけあれば、今後製作するものを操作する際に支障はなく便利に使えそうです!

そして今回はこのArduino無線コントローラーをベースに機能を限定したミニ無線コントローラーを製作しました。

UP/DOWN/LEFT/RIGHTの4つの操作ボタンにA/Bボタンをプラスした6キー構成の無線コントローラーです。
最低限の操作系スイッチの数となりますが、これだけあれば大抵のものは操作する事が出来ると思います。

基板の製作はまずFusion360を使って行いました。
6つの操作スイッチを基板に配置し片手でも操作出来るサイズ感ということで主要なパーツを配置して基板サイズを決めています。

操作性を損なうことなくキーホルダーサイズのミニ基板とするため、最終的に35mm×45mmの基板サイズとなりました。

KiCadなど基板設計ソフトよりFusion360などの3D CADソフトを使った方が各パーツのクリアランスやサイズ感等のイメージは圧倒的にしやすくなります。

基板外形が出来ればDXFファイルをKiCad側にインポートすることによりそのまま使うことが出来るので便利です。

Fusion360で作った基板外形データ(DXFファイル)をKiCadにインポートして使ってみる!

ATtiny84を使った回路構成

制御するマイコンチップ(MCU)は最終的にATtiny84を使いました。
ATtinyはArduinoでも使われているAtmelのAVRマイコンです。

このミニ無線コントローラーに必要なI/O端子の構成は、デジタル端子が6本(スイッチで使用)とSPI接続するnRF24L01無線モジュールで5本必要となるので合計11本のI/O端子が必要となります。

ATtinyは非常に多くのチップがあり11本以上のI/O端子が使えるチップでは、ATtiny44やATtiny84、またATtiny2313やATtiny4313あたりが使えそうです。

【ATtiny】各種ATtinyチップをArduino IDEを使って開発する方法まとめ!ブートローダーやArduinoスケッチの書き込み方法!

ATtiny84またはATtiny44では最大12本のI/O端子を使うことが出来ます。
ヒューズビットを書き換えることによりRESET端子もI/O端子として使うことが出来ますが、ISPでのプログラム書き込みの際にRESET端子は必要となるので実質使えるI/O端子の数は11本となります。
今回のミニコントローラーには最適なマイコンチップになりそうです。

そして回路構成はこのようになりました。
非常に簡単ですね!

今回この基板サイズ(35mm×45mm)に収めるために表面実装タイプ(SMD)のATtiny84チップを使いました。

nRF24L01無線モジュールの動作電圧は3.3Vとなりますが、1.8Vあたりまで下げても問題なく動作させることが出来ます。(データシート上1.9V~3.6V)
またATtiny84の動作電圧は2.7V~5.5V、ATtiny44では1.8V~5.5Vの動作が可能となっています。
今回駆動電源にはCR2032ボタン電池(3V)を使いました。

構成的に1.8Vからの駆動が可能なATtiny44を使う予定でしたが、ブレッドボードでのテストではATtiny84でも2.0Vあたりまで安定動作するようなのでATtiny84を使って製作することにしました。

MEMO
ATtiny84ではプログラム容量(フラッシュメモリ)はATtiny44の倍の8kバイト使うことが出来ます。

追加でATtiny44チップを使った基板も作りましたが、動作的にはあまり違いはないようです!

ATtiny44やATtiny84に関して詳しくはこちらの記事を参考にして下さい!

ATtiny24/ATtiny44/ATtiny84をArduinoとして動かす基本的な方法!

ATtiny84を使った上記回路構成は非常に簡単なんですが、ブレッドボードのテスト段階で非常にハマった箇所があります。
SPI接続するnRF24L01無線モジュールとの接続部分です。

ATtinyにはSPI専用のピンがないためSPIまたはI2Cの接続にユニバーサルシリアルインターフェイス(USI)を使いますが、MOSI/MISOピンはISPによる書き込みには問題ないのですが、SPIデバイスに接続して使う場合ライブラリで定義されているピンマッピング(ピンアウト)を入れ替える必要があるようです。

少し話が長くなるので割愛しますが、RF24ライブラリのUSI-DO (データ出力)とUSI-DI (データ入力)を入れ替えるとこのライブラリを使っている他のプロジェクトに影響が出て面倒なので、上記回路図ではnRF24L01とATtiny84(またはATtiny44)との接続部分は物理的にMOSI→MISO/MISO→MOSIという接続にしています。(間違いではないのでお間違いなく!)

JLCPCBでの基板発注

基板発注は今回もJLCPCBさんにお願いしました。
このサイズの基板なら海外発送からの送料(OCS NEP)も含めて500円ほどで作ることが出来ます。(基板5枚の料金です)

一応基板データ(ガーバーファイル)をダウンロード出来るようにしておきました。
何かの参考になれば、また基板製作のアドバイスなど頂ければありがたいです!

JLCPCBでの基板発注方法はこちらの記事でまとめています。
これからオリジナル基板の製作を始めてみようとお考えの方は、合わせて読んで頂ければ参考になるかと思います。

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

必要なパーツ一覧

表面実装パーツ(SMD)がメインとなりますが、スルーホールパーツ(THD)を使えば上記動画のようにブレッドボードなどでもテストすることが出来るのでATtinyを使った製作物を作る際の参考等にして頂ければと思います。

製作に必要なパーツ一覧
パーツ入手先
ATtiny84またはATtiny44(SMD)Amazon / Aliexpress
nRF24L01(SMD)Amazon / Aliexpress
タクトスイッチ(6mm角SMD)Aliexpress
LED(0805)Amazon / Aliexpress
抵抗(0805) 470Ω程度Amazon / Aliexpress
コンデンサ(0805) 0.1μF×1/10μF×1Amazon / Aliexpress
スライドスイッチ(2.54mmピッチ3ピン)Amazon / Aliexpress / 秋月電子
CR2032電池ボックスAliexpress / 秋月電子
L型ピンヘッダー(2×3)秋月電子

0805サイズのパーツを使っているのではんだゴテを使っての実装も可能ですが、最近購入したヒートガンという便利な道具を使いました!

表面実装パーツのはんだ付けはヒートガンを使うと圧倒的に楽で綺麗に仕上がりますね!

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

動作確認用テストスケッチ

動作確認用の送信側/受信側の簡単なテストスケッチです。
コントローラー側(送信側)のテストスケッチのサイズは2.7kBほどなのでATtiny44でも収まります。

【送信側テストスケッチ】


【受信側テストスケッチ】


コントローラーへのスケッチの書き込みはICSP端子を付けているのでこちらから行います。
USBaspなどのAVRライタと接続してスケッチの書き込みが行えます。

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

なければArduinoボードを経由しての書き込みでも問題ありません。

ATtiny84/ATtiny44へのスケッチ書き込みに関してはこちらの記事を参考にして下さい!

ATtiny24/ATtiny44/ATtiny84をArduinoとして動かす基本的な方法!

受信側スケッチはArduinoを想定しています。
nRF24L01を接続(CEをArduinoのD9端子、CNS端子はD10端子に接続)したArduinoでデータ受信が出来ているかの確認が出来ます。

nRF24L01モジュールの接続等、詳しくはこちらの記事を参考にして下さい。

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

こんな小さな無線コントローラーですが、無事自作ロボくんを動かすことが出来ました。
このおもちゃ感満載のミニコントローラー、なかなか可愛くていいですね!

最後に!

このような無線コントローラーは製作物を操作する際にあると便利となりますが、それ以外にテスト動作などさせたい場合にも便利に使えると思います。

Arduinoを使った無線コントローラーの出来が非常に良く便利に使えたので、ミニサイズの無線コントローラーも今回製作してみました。

個人的に気に入っていた無線コントローラーの機能を限定して小型化させただけのものとなりますが、ATtinyをArduinoとして動かすことやnRF24L01の仕様やSPIでの接続、基板設計のことなど多くのことを学ぶことが出来ました。

表面実装パーツを使いミニ基板として仕上げましたが、ブレッドボードを使い組んで試すことは簡単に出来るのでArduinoやATtinyの学習用として参考になればと思います。

コメントを残す