「おもちゃ用のRCショベルカーを、無線で遠隔制御できるようにしたい」とのご要望を頂き、無線化を行った際の事例です。
案件額としては赤字覚悟での受注でしたが、再販を条件にお受けしました(というよりも、やりたい!という好奇心が強かった…)
基本構成は、ESP32(Arduino)でモータ6軸制御(うち4軸はエンコーダ付き位置制御、キャタはオープン速度制御)の構成です。エンコーダは取付位置確保が困難で、外皮を削らざるを得ませんでした(ここが心残り…)。その後、タミヤモータなど用のエンコーダ基板を別途作成し、小型化&エンコーダディスクの内作(3Dプリンタ)を行い、動作させるところまでは完成済みです。あとは、販売用にやるかやらないか…ですね。あ、そうそう、モータ基板もパワーアップして作り直しました。
Arduino UNO Qが出ましたので、できればこれで作り直したいところですね。Q、RaspPI+ArduinoまたはLattePandaのようにCPU(Ubuntuなど)+マイコンの構成が7000円で作れる素晴らしいSBCぽいです。発注済みなので、試したらまたブログに記載しますね(脱線)。
実際の構成など、ご興味ありましたらContactまで御連絡ください。以下はREADME.mdの転載です(手抜き;
RCショベルカー無線
必要機材
- RCショベルカー:Huina1593
- Raspberry pi 5
- Raspberry Pi 5 Model B Rev 1.0
- Linux raspberrypi 6.12.34+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.34-1+rpt1~bookworm (2025-06-26) aarch64 GNU/Linux
- 開発環境用PC
- RealVNC
- Cursor
- Raspberry Pi Imager
Raspberry Piでの環境構築方法(0から環境を作る場合)
基本は添付のMicroSDカードを用いて下さい。新たにSDカードを作る場合の手順は以下の通りです。
- [PC]Raspberry Pi Imagerを用いて以下imgファイルでMicroSDカードのイメージを作成する
Raspberry Pi OS(32bit) 2025-05-13
- [RP]RP5にMicroSDカードを挿入し、電源を投入する
- [RP]起動まで1min程度待ちます
- [PC]無線LANでTANK_AP4に接続します(Pass:5577810057838)
- [PC]RealVNCで新規接続として192.168.50.1を追加します
192.168.50.1、User : tank、pass : 0011
- [PC-RP]VNCが接続されたら、ターミナルを起動します
- [PC-RP]以下コマンドで実行して、全自動で開発環境を構築します(必要最小限のみ)
bash ./work/raspi_configuration/setup_apx.sh
- 完了後以下のコマンドで再起動を実施します
sudo shutdown -r 0
操作法詳細
起動
- [RP]Raspberry pi 5(RP)にMicroSDカードを挿入する
- [RP]RPの電源を投入する
- [RP]起動まで1min程度待つ
- [PC]無線LANでTANK_AP4に接続する(Pass:5577810057838)
- [PC]RealVNCを起動する
- [PC]RealVNCで新規接続として192.168.50.1を追加する(未作成の場合のみ)
192.168.50.1、User : tank、pass : 0011
- [PC]作成したVNCサーバリストから、50.1を選び起動する
- [TANK]バッテリーを接続し、スイッチをONにする
[RP]mqttステータスを受信する
- ターミナル1を起動する
- mosquitto_sub -t tank/stと入力する
- TANKが参加するとtank_st..のようなステータスが流れ始め、バケット軸のみ巻き込み動作を開始します(初期化完了通知用)
- もし45秒以上経過してもメッセージが流れ始めない場合には、RC本体の電源をOFF/ONして再起動を実施する(無線AP CHの問題)
[RP]シーケンスアプリを起動する
- ターミナル2を起動する
- 以下コマンドを入力する(ディレクトリの移動)
cd work/python/30_sequence
- 以下コマンドを入力して仮想環境を起動します
source ./venv_sequence/bin/activate
- Bluetooth(BT)コントローラの電源を入れる(HOMEボタン1秒程度押し)→成功したら振動
- BT接続に失敗したらメニューのBluetoothからコントローラ削除、再度ペアリング実行(HOME+X長押しで起動)
- 以下コマンドを入力します(シーケンスソフトの起動)
python ./sequence.py –sequence-file ./tank_demo.txt
- シーケンスプログラムが起動します
シーケンスプログラムの操作法
- Bluetoothコントローラで操作する場合
- 正常起動してコマンド待ちになることを確認し、2と入力します(BTコントローラモード)
- コントローラの各ボタンを押して、RCを操作してください
- キー割当方法、現在の割当は、別途資料を参照ください
- シーケンス運転の場合
- 正常起動してコマンド待ちになることを確認し、1と入力します
- 起動時に指定したシーケンスリスト(上の例ではtank_demo.txt)の内容に従って、RCが自動運転を開始します
- 自動運転の最初には「エンコーダ初期化スクリプト」を組み込んでください
- シーケンスリストの作成方法、コマンド表記は別途資料を参照ください
エンコーダ位置の初期化(コントローラ操作での初期化)
- R2キーを押し続け、停止するまで待つ(バゲット上昇)
- L2キーを押し続け、停止するまで待つ(アーム上昇)
- Xキーを押し続け、停止するまで待つ(ブーム上昇)
- Y/Aキーで旋回の中心位置に設定する(旋回位置中央に回転させる)
- STARTキーを押して、エンコーダ位置を初期化する
ショベルカーの操作(コントローラ操作)
- [左]上下左右:キャタピラ前後移動、旋回
- [左]L1/L2:アーム上昇/下降
- [右]Y/A:左旋回/右旋回
- [右]X/B:ブーム上昇/加工
- [右]R1/R2:バゲット上昇/加工
- [右]START:エンコーダ位置の初期化 ** 初期化時以外は押さないこと
シーケンスプログラムの停止
- ターミナル2でCtrl+Cを押して、アプリを停止させてください
可動範囲(位置制御Pコマンドでの指定範囲、[ ]内はモータ軸No.)
- バケット[2] >2000~10000
- アーム[3] >2000~13000
- ブーム[0] >2000~15000(実際には22000以上あり)
- 旋回[1] >-14400~14400(±180deg、7200/90deg)
| 軸No. | モータ | 速度範囲 (電流制限) – | 速度範囲 (電流制限) + | 位置範囲 – | 位置範囲 + | コントローラ設定速度 ± | 備考 |
|---|---|---|---|---|---|---|---|
| 2 | バケット上下 ¹ | -150 | 150 | 2000 | 10000 | ±100 | |
| 3 | アーム上下 ¹ | -150 | 150 | 2000 | 13000 | ±110 | |
| 0 | ブーム上下 ¹ | -150 | 150 | 2000 | 15000 | ±100 | +側は22000可能 |
| 1 | 旋回 ¹ | -150 | 150 | -14400 | 14400 | ±80 | 7200/90deg |
| 4 | キャタピラ(L) | -150 | 150 | – | – | 前進-、後退+ | |
| 5 | キャタピラ(R) | -150 | 150 | – | – | 前進-、後退+ |
¹ 位置制御軸は、全て-側動作限界を0位置で初期化してください。