fc2ブログ

ESP32-C3-WROOM-02の使用感

ESP32 C3モジュールを使った感想を記します。 2023年9月18日
ページ内の画像や配線図は、クリックすると拡大します。
メカナムホイールカートのリモコン用にC3モジュールを初めて使いましたが、今まで使ったESP32モジュールと
随分使い方が異なります。 Web検索しても情報が少なく、手探りの状態で始めました。

ESP32 C3モジュールのプログラムの書き込みには2通りあります。
従来通りのRXD、TXD端子にUSBシリアル変換アダプターをセットして使うUART書き込み方法と、
USBシリアル変換アダプターが要らず、ファームウエア―に準備された書き込みソフトによる方法です。
下記の自作のDevKitはソフト書き込みの例です。

先ず、モジュールのテスト用にDevKitを作りました。
DIPユニバーサル基板にESP32-C3-WROOM-02モジュールと3.3V電源モジュール、USBソケットモジュールを
取り付けて手配線し、ブレッドボード用にピンヘッダ9ピン2本をDIP6穴間隔に配置しています。
市販のESP32 C3 DevKitは高価な上に幅広で、一般的なブレッドボードに挿入するとジャンパーピンを差す
余裕がなく使い難いですが、手配線で自作すれば間隔を狭く出来て使い勝手が良くなります。

尚、USBソケットモジュールのソケットは、基板表面ランドにハンダ付けしただけなので、少し強い力が加わると
基板から剝がれてしまいます。 この対策としてスズメッキ線を巻き付けてハンダ付け補強しています。
esp32c3_devkit1.jpg

自作のDevKitの配線図
USBソケットモジュールは10個セットで389円、3.3Vレギュレータモジュールは10個セットで293円でした。
(アマゾンの通販で購入)両面基板は手持ちの端材を利用。
注意:USBソケットモジュールの接続先は、RXD、TXDではなく、D-=IO18、D+がIO19です。
尚、USBソケットモジュールのVcc +5V出力を直接ESP32 C3モジュールに接続しないで下さい!
ESP32_C3_DevKit.gif

書き込みテストの準備
事前にArduinoIDEの最新のバージョンをインストールします。レガシー IDE (1.8.X)が現在1.8.19、
新しいバージョン2が現在2.2.1です。 最初、バージョン2が使い難かったが、慣れると良い面があります。
例えば、レガシー IDE ではシリアルモニターが1画面しか使えなかったが、バージョン2では同時に複数の
シリアルモニターが使え、PC1台で送受信のテストが出来てとても便利です。

ArduinoIDEの更新が完了したら、ボードマネージャーからESP32の最新ボードをインストールします。
ESP32を選択すると系統デバイス名が多数表示されますが、上から2番目のESP32C3 Dev Moduleを
選択します。
 注意:間違って従来のESP32 Dev Moduleを選ぶと書き込みエラーが出ます。
ESP32C3 DM1

書き込み時の注意
自作DevKitの配線が出来たら、ブレッドボードに挿入して書き込みテストを行います。
PCからのUSBケーブルを接続し、ボードを選択したらスケッチ例からLEDの点滅(Lチカ)を選び、適当な
I/Oピンを指定して書き込みテストを行いますが、最初の書き込み時にUSBポート番号を選んでも書き込めず
エラーが出て先に選んだポート番号が消えている場合があります。この場合はIO9ピンに接続したWrite SW
を押しながら、ENピンに接続したReset SWを押し、もう一度USBポート番号を選んで書き込むとOKです。
また、USBケーブルを接続してポート番号が表示されない場合にも上記の操作が有効です。

ESP32 C3モジュールのUART書き込み
通信機能が無いマイコンに通信アダプターの代用として使う場合は、他のESP32と同様にRXD、TXD
ポートにUSBシリアル変換モジュールを接続してプログラムの書き込みを行います。

下記画像のビルトインユニットは、基板組み込み用に作った物です。
ユンバーサル基板端材の下面に9ピンのピンヘッダー2列を取り付け、上面にESP32 C3モジュールを
裏向きに両面テープで貼り付け、更にシリアル変換モジュールの接続用にC3モジュール裏面に分割
ピンソケットを貼り付けて夫々をて手配線した簡単な構造です。

左側がUSBシリアル変換モジュールと書き込み用アダプターを連結した物です。このアダプターには
3.3Vのレギュレータを載せてあり、ビルトインユニットに直接プログラムが書き込めます。

その隣が秋月電子のESP32 C3モジュールのパッケージです。C3モジュールには技適マークが未印字
ですが、承認済みの技適認証番号ラベルが同封されていました。

書き込みモードの条件は、、IO8ピンがHIGHレベル(10kΩでプルアップ)及びWrite SWをLOWレベル
(IO9ピンをGND)状態にしてReset SW(ENピンをGNDに落とす)を一度押します。 
また、I2Cインターフェースを使う場合は、SDA=8ピン、SCL=9ピンです。
ArduinoIDEでの使い方は、前述のソフト書き込みと同様です。
esp32c3_uart_model.jpg

配線図
上記ESP32 C3 UART Built-in Modelの配線図です。
尚、通信ダプター代わりに使う場合は、他のI/Oピンを使わないのでユニバーサル基板やピンヘッダー等が
不要です。 C3の裏側にピンソケットを貼り付けて配線すれば使えます。
ESP32C3_uart.gif

使ってみての感想
ESP32 C3モジュールは、他のESP32モジュールと比べた場合、Classic Bluetoothが使えない事や
複雑な制御回路には向かない(先のメカナムホイールカートの制御ではPWM I/O不足で使えない)、
また、他のESP32で完動するWiFi UDPプログラムが書き込めないなどの例がありました。
総評としては、使い方を限定すれば安くて便利なマイコンだと思いますが、他のESP32モジュールの
方が価格が少し高いが、用途が広くてお勧めです。


皆様の参考になれば幸いです。  by Paradise










スポンサーサイト



テーマ : 電子工作
ジャンル : 趣味・実用

メカナムホイールを使ったRCカートの紹介 最終回

はじめに
特異な動きが楽しめるメカナムホイールカートを紹介してきましたが、今回がシリーズの最後です。
操作が簡単な赤外線リモコンの1号車は夏休みに遊びに来た園児の孫にプレゼントしました。
残りの2台を色々と改良したので紹介します。

その後の改良とWiiヌンチャクを使ったコントローラの紹介
*全ての画像や回路図は、クリックすると拡大します。
MWC3_BLE_Model2.jpg

1)その後の改良
① ステッピングモータを使った2号車
Bluetooth Low Energy(以後BLEと表記)環境下でAccelStepperライブラリーを使うとステッピングモータの
速度が上がらない問題が有り、Bluetooth Classic(以後ClassicBTと表記)を使っていました。
今回、この対策としてBLE受信部とステッピングモータのコントロール部を分けて使うことにしました。
元のマイコンM5StampPicoを通信機能が無いRP2040 zero(ラズパイPico同等機能の超小型マイコン)に
置き換えてモータコントロール専用とし、その前段に新しくBLE通信用として安価なESP32 C3モジュール
(310円:秋月電子)を追加しました。 これにより、BLEが快適に使えるようになりました。
BLEを使う理由:送受信のUUIDとDevice名を同一にすれば、複数の受信デバイスに対してコントローラが
共用出来る利点があるからです。SerialBTでは、受信側のMACアドレスを設定する必要があり、コードを
書き換えないとコントローラの使い回しが出来ないからです。

2号車マイコン交換後の回路図
MWC2_ESP32C3_rp2040zero_Circuit.gif

2号車の新しいコントロールボードです。
AccelStepperライブラリーを使って駆動するコントロール部のマイコンを超小型のRP2040 Zeroに交換して
コントローラとのBLE通信用に新しくESP32 C3を設けました。 ESP32 C3は技適済みですが部品面に未印刷。
MWC2_BLE_Model1.jpg

② 3号車のラズパイpico WをESP32Eモジュールに交換
3号機もClassicBTを使っていましたが、2号車と同じヌンチャクコントローラが使えるように回路変更を
行いました。
pico WでもBLEが使えるが、ESP32のプログラムコードがそのまま使えず、止む無く使い慣れたESP32E
モジュールに置き換えました。
また、通常のESP32モジュールに比べ機能が限られたESP32 C3モジュールでは、同時に使えるPWM対応
I/Oが足りずに使えませんでした。

3号車マイコン交換後の回路図
MWC3_ESP32_Circuit.gif

マイコンを交換した3号車のコントロールボード
マイコンをラズパイPicoWからESP32Eモジュールに交換しました。
MWC3_BLE_Model3.jpg

2)Wiiヌンチャクを使ったコントローラの紹介
WiiヌンチャクをESP8266Wroom02を使ってWiFiリモコンに応用してから7年余し経ちましたが、いつも便利な
コントローラとして活躍しています。現在はESP32に交換してWiFi以外にClassicBTやBLEを利用しています。

①Wiiヌンチャクの入手について
メルカリでWiiヌンチャクを検索すると、1台数百円から購入できる中古品が多く出品されています。
このWiiヌンチャクをメカナムホイールカートのコントローラにする方法を紹介します。
尚、Wiiヌンチャクには白タイプ、黒タイプ、赤タイプが存在します。これらの違いはI2Cアドレスが異なります。
出回っている多くが白タイプです。また、純正品以外は色に関係なく中身が白タイプが多いようです。

②Wiiヌンチャクを入手したら先ずテストを行います。
Wiiヌンチャクケーブル内の配線色は純正品の場合は赤=+3.3V、白=GND、緑=SDA、黄色=SCLです。
ESP32のSDA=21pin、SCL=22pinで、ESP32 C3のSDA=8pin、SCL=9pinです。
マイコンに接続が終わったら以下のページからテストプログラムをコピーして下さい。

プログラムコードをブログに直接表示するとページが長くなるので別ページにて表示します
Nunchuck_test_code.htmlを開きます。 (ArduinoIDEにコピぺして使います)。

③Wiiヌンチャクのテスト結果は、シリアルモニターにこのよう表示されます。
x_valとy_valはジョイスティックを動かすと値が変化します。z_valは、Zボタンを押すと1を、Cボタンを
押すと2
を、両方のボタンを同時に押すと3を、その他は0を表示します。
Nun_Test.jpg

④改造の方法
改造方法は幾つもありますが、本体を改造せずに小さな箱に通信機能が有るマイコンと電池を入れ、
ケーブル先端の特殊プラグを市販の4Pコネクターに付け替えて接続する方法が簡単でお勧めです。

⑤7年余し前に作った木製ボックスのWiiヌンチャク用コントローラです。
当時はESP8266をを使い、WiFiにてロボットのコントロールに利用してまいした。その後ブルートゥースが
使えるESP32が出てからは主にBLEを使っています。この作品ではヌンチャクのケーブルを切断せずプラグに
合うソケット部を自作して抜き差しが出来るように加工しています。
Wii_nunchuck_Wooden_Box2.jpg

⑥コントロールボックス回路図
マイコンにESP32 C3を使います。安価なUSBソケットモジュール(1個40円)をマイコンの裏側に両面テープで
貼り付けて配線しています。上記画像参照のこと  *:ESP32 C3はUSBシリアル変換モジュールを使わずに
プログラムを書き込める特徴があります。 また、UARTを使った従来通りの書き込みも可能ですが、ENピンを
10kΩでプルアップ、IO9ピンがIO0ピンに替わる書き込みピンです。また、IO8ピンを10kΩでプルアップする
必要があります。但し、ESP32 C3の通信はWiFiとBLEのみでClassicBTが使えません。
電池に3.7Vのリチウムイオン電池又はLipo電池を使えば、シリコンダイオードの順方向電圧降下を利用して
約3.3Vが得れます。 また、ケーブル内配線の色分けは純正品の場合、図に示した通りです。
ESP32 C3は、初回書き込み時にポート番号を設定しても書き込みエラーが出ることがあります。
その場合はIO9ピンをGNDに落とすと失敗せずに書き込めます。

ESP32C3_Nunchuk_Box.gif

⑦Wiiヌンチャクのユニットを利用したその他のコントローラ2種
1)専用ケースをアクリル板をCNC加工して作った7年前の作品です。
ヌンチャクユニットとリチウムイオン電池を組み込んでいます。当初マイコンにESP8266-Wroom02を
WiFiで使用してたが、途中でブルートゥースが使えるESP32に交換しています。
ジョイスチックの可倒範囲を広げるためと8方向へ確実に収まるようにガイド穴を広げています。
Wii_nunchuck_acrylic_Box.jpg

2)簡単に作れる作品例として試作したプラケースへの組み込み例です。
小物部品を購入した時のプラケースを利用し、ヌンチャクユニットとESP32 C3を組み込みました。
電源には手持ちのLipoバッテリーを使っています。利用したプラケースの大きさは約65x65x20㎜です。
Wii_nunchuck_unit1.jpg

3)コントローラのプログラム
Wiiヌンチャクは、I2C出力なのでマイコンとの接続が4本線で済みます。
出力は、ジョイスティックのJoy_x,Joy_y信号が夫々約30~225(センター127)とZボタン、Cボタン
信号及び今回は使わないがモーションコントローラのAccel_x, Accel_y, Accel_z信号が取り出せます。
ここでは、ジョイスティック中央のx,y信号を極0に補正し、移動した場所の位置から角度を求めます。
求めた角度から外周360度を8等分したエリアを設け、前後左右と斜め方向の各エリアに番号を
付けてnumber変数に代入します。
また、Zボタンをファンクションボタンとして左右の旋回と左右横方向移動を切り替えています。
番号と記号はKeypadを使ったコントローラと共通とし、受信側プログラムコードがそのまま使えます。
また、計算で得た半径(r)を利用してジョイスティックの移動量に応じて案分したA~Fの文字を
speed変数に代入し、number変数と共にsprintf()関数により文字列としてBLE通信により送信します。
尚、ジョイスティックのセンターから半径(r)が、50以下が不感帯で50を過ぎるとモータが可動します。
ジョイスチックの移動範囲を0~255に近付けるには八角形の穴を切削して広げることにより可能です。

プログラムコードをブログに直接表示するとページが長くなるので別ページにて表示します
ヌンチャク・コントローラのプログラムコード

MWC3_ESP32C3_BLE_TX2.htmlを開きます。 (ArduinoIDEにコピぺして使います)。

4)カート側のプログラム
コントローラー側から受信した文字列をsscanf()関数により、number変数とspeed変数を分けて取得します。
number変数の代入文字(1~9、*、#、S)をswitch-case文により選択し、取得した文字に紐づけたモーター
ドライブをコントロールする各関数を実行します。
また、speed変数の代入文字(A~F)をswitch-case文により選択し取得した文字にモータースピードを
PWM制御する値(70~255)を割り付け、ジョイスティックの動きに合わせてモータスピードを変化させます。
但し、速度調整はジョイスティックの移動量が僅かなので慣れないと操作が難しいと思います。

カート側のプログラムコード
MWC3_ESP32_BLE_RX2.htmlを開きます。 (ArduinoIDEにコピぺして使います)。

5)Wiiヌンチャクコントローラの使い方
カートの電源をオンにした直後にWiiヌンチャクコントローラの電源を入れると数秒でコネクトが完了し、
コネクトLEDが点灯します。2号車の場合は、モータードライブ回路のイネーブルもオンとなります。

左右旋回と左右横方向移動の切り替え:デフォルトは左右旋回ですがZボタンを押すと旋回操作中
であっても横方向移動に切り替わり、ボタンを放すと元の左右旋回に戻ります。

Wiiヌンチャクは幸いジョイスティック穴の外周が八角形になっているので、ジョイスチックを倒した時に
前後左右斜め方向の位置に上手く収まります。 また、スチックを放すと不感帯に入り停止します。
ジョイスチックを使うとボタンリモコンでは難しいシームレスな素早い操作が簡単に実現できます。

Wiiヌンチャクの中古品が豊富に出回っている間に1台入手し、リモコン用に改造して置けば
いろんな用途に応用できるのでお勧めです。

最後に短い動画をご覧下さい。
メカナムホイールカートは普通の車では不可能な動きが楽しめます!


おわりに
随分長いページになりましたが、最後までご覧頂きまして有難うございます。
ステッピングモータを使った2号車も少し紹介しましたが、小型のステッピングモータの入手が
難しい事や重過ぎるのでお勧めできません。 安価なTTモータを使た3号車をお勧めします。

ただ走らすだけでは面白くないので気が向けば、自律走行などの付加価値を付けたいと考えますが、
緑内障を患う戦時中生まれの老人には、今までのようなスピードで事が運べず残念です。


皆様の参考になれば幸いです。
<工作好き、マイコン好き、パソコン好きの老人>     by Paradise





テーマ : 電子工作
ジャンル : 趣味・実用

メカナムホイールを使ったRCカートの紹介 その7 pico W(BT編)

動画:子犬のSOPOちゃんとメカナムホイールカート3号機 2023年8月7日追加
新しいリモコン:Wiiヌンチャクに自作のBluetoothアダプターを取り付け、シームレスなコントロールが可能となりました。


3号機のRaspberry pi pico を pico Wに換装してBluetoothを使う
RasPicoW.jpg

1)カート側の変更
マイコンをRaspberry pi picoからRaspberry pi pico Wに差し替えますが、IR受信モジュールを
撤去せずにそのまま残します。その理由は、プログラムを変更すれば使い方を選べるからです。
プログラム
当初、Buretooth LE(BLE)を使ってテストを行ったところ、ステッピングモータをAccelStepperを使って
動かす場合、BLEを使うと極端に動作速度が遅くなる不具合が起きました。
これは、省エネを目的としたBLEの通信プロトコルにより、server/client間で頻繁に行う割り込み処理が、
ステッピングモータの制御に影響を与えるのために使用を諦めました。
ここでは、動作が安定したBuretooth classicのBlutooth Serial通信を使いました。

Raspberry pi pico WでBuretoothを使う場合のArduinoIDEの準備
①ArduinoIDEのボードマネージャからRaspberry pi pico Wに対応した「Raspberry Pi Pico/RP2040」ボードを
インストールします。「ツール」⇒「ボード」⇒ 「ボードマネージャ」を順にクリックし、検索窓に「rp2040」と入力、
表示された中から「Raspberry Pi Pico/RP2040」ボードを選択してインストールします。
rp2040.jpg

②次に「ツール」⇒「ボード」⇒「Raspberry Pi RP2040 Boards(3.3.0)」⇒「Raspberry Pi Pico W」を順に選択します。
picoW.jpg

③次に「ツール」からボード「Raspberry Pi Pico W」を確認し、リスト下側のIP/Bluetooth Stack:"IPv4 Onry"を
クリックし、右側に表示するリストからIPv4 + Bluetooth又は下側のIPv4 + IPv6 + Bluetoothを選択します。
この設定により、WiFiに加えてBluetoothが使えるようになります。
picoW_BT_set.jpg

カート側のソースコードを別ページにて開きます。
ソースコードをArduinoIDEの新規Sketchファイルにコピーペーストして保存し、Raspberry pi pico Wに
前記書き込みの準備を参照して書き込みます。
MWC_PiPicoW_BT_RX.html

上記プログラムは下記回路図を基に作成しています。
MWC_picoW_Circuit.gif



2)Bruetoothリモコンの製作
ESP32モジュールと4x4 Keypadを組み合わせた専用コントローラーを作ります。


回路図
基本的には、ESP32のGPIOとキーパッドの入出力8本及びStopMode_SWの結線のみです。
StopModeの切り替えは、操作ボタンを放すと自動的にStop信号が出る自動Stopと操作ボタンを一度押すと
Stopボタンを押すまで同じ動作が続く手動Stopを使い勝手に合わせて切り替えます。
ここでは、電源に軽量なリポバッテリーを使いました。ダイオード1N4007は順方向の電圧降下用に使用。
MWC_keypad_Controller1.gif

使用する4x4キーパッド サイズ 縦:約75ミリ、横:約70ミリ
価格は1個150円前後ですが、同じ商品が超高値(5000円前後)で売られているので注意して下さい。
keypad2.jpg

キーパッドの各ボタン機能割り当て
1:左斜め前方移動2:前方移動3:右斜め前方移動A:スピード1速 PWM値110
4:左旋回 PWM値1105:Stop6:右旋回 PWM値110 B:スピード2速 PWM値127
7:左斜め後方移動8:後方移動9:右斜め後方移動C:スピード3速 PWM値191
*:左横移動0:Stop#:右横移動D:スピード4速 PWM値255

コントローラーの製作例
私はアクリル板をCNC加工して専用のケースを作りましたが、適当な大きさの薄型市販プラケースの表面に
キーパッドを貼り付け(パッドの裏側が粘着テープです)、ケースの中に部品を納めればOKです。
Keypad_controller1.jpg

裏側(部品面)
私は何時ものように安価なESP32モージュールを使いました。細かな配線が苦手な方は、形が大きくなりますが
ESP32DevKitなどを使うと配線が楽です。 また、形が小さいSeeed Studio XIAO ESP32C3を使うと、
リポバッテリーの充電機能があり便利です。

キーパッドのフレキシブルケーブルは折り畳み可能ですが、何度も折り曲げると断線するので注意が必要です。
Keypad_controller3.jpg

コントローラー側ののソースコードを別ページにて開きます。
MWC_ESP32_TX.html

Blutooth Serialを使ったプログラムですが、確実に早く接続する方法として通信相手側のMACアドレスを
指定するの方法が多く使われています。その為にMACアドレスを調べる必要があります

カート側(受信側)のMACアドレスの簡単な調べ方
先ずは、カート側のRaspberry pi pico WにソースコードをコピーしてArduinoIDEから書き込みを済ませ、
電源を投入(又はUSBケーブルを接続する)します。
①Bluetoothが使えるWindows11パソコンの場合
「設定」⇒「Bluetoothとデバイス」⇒「デバイスの追加」⇒「Bruetooth」と順次操作すると
PicoW Serial 28:CD:**:**:51:B6とMACアドレス(私の場合の表示例で一部が**)が表示されます。
②Androidスマホの場合もほぼ同じです。
「設定」⇒「接続済みのデバイス」⇒「新しいデバイスとペア設定」と順次操作すると
PicoW Serial 28:CD:**:**:51:B6とMACアドレスが表示されます。
③iPhoneの場合は、「設定」⇒「Bluetooth」と操作するだけで自動的に
PicoW Serial 28:CD:**:**:51:B6とMACアドレスが表示されました。

ソースコードの変更部分
①5行目
05 String MACadd = "**:**:**:**:**:**"; //**の部分を調べたMACアドレスに書き換えます。
②6行目
06 uint8_t address[6] = {0x**, 0x**, 0x**, 0x**, 0x**, 0x**};
//**の部分を調べたMACアドレスに書き換えます。
MACアドレスの書き換えが終わったら、ソースコードをArduinoIDEの新規Sketchファイルに
コピーペーストして保存します。
ESP32モジュールへの書き込みには、USB/Serial変換ボードと書き込み用スイッチボードが必要です。
USB/Serial変換ボードと書き込み用スイッチボードについては過去記事に画像および回路図を記載してます。
過去記事を参照出来ます。
https://cncparadise.blog.fc2.com/blog-entry-168.html

コントローラーの使い方
カートの電源を入れてからコントローラーの電源を入れると直ぐにカートとコントローラーがペアリングされます。
自動Stopモード
Stopモード・スイッチがOFFの場合、移動操作ボタンを押すと押している間同じ動作を続け、ボタンを
放すとストップします。
手動Stopモード
Stopモード・スイッチがONの場合、移動操作ボタンを押すとStopボタンを押すまで同じ動作を続けます。
使い慣れると手動ストップの方が使い勝手が良くなると思います。
やはり、専用コントローラーは電源ONで直ぐに使えて便利です。



3)スマホアプリを使ってコントロールする方法
少し前のアプリですが、AndroidスマホアプリBlueTooth Serial Controllerが利用できます。
残念ながらiPhone用のアプリが見つかりませんでした。
Screenshot_20230724-090905.png
注意:上記の矢印記号は環境依存文字なので使用するスマホによって表示できないことが有ります。

Bluetooth Serial Controllerの設定手順
①操作画面右上のPREFERENCEをタップすると設定画面が開きます。上から順に説明します。
②CONTROLLERはA-Eの5つの操作画面が選べます。
③BUTTONの設定: NAME:button1から25までの中で使用するボタンに矢印記号を設定します。
ここでは上記画像を参考にbutton1=↖、2↑、3=↗、4=↺、6=↻、7=↙、8=↓、9=↘、と矢印記号を記入します。
尚、5は使わないのでdefのままにします。
文字の大きさは初期画面のBUTTON SIZEを開き、button1-9及びbutton10-25を85dpにしました。
④Speed設定:button10から13には、button10=S1、11=S2、12=S3、13=S4と記入します。
⑤左右横移動ボタンの設定:button18=←とbutton19=→と矢印記号を記入します。
⑥Commandの設定:ここでは、各ボタンが押された時に送出される文字を設定します。
button1-4と6-9はbutton番号と同じ数字を設定します。
button10=A、button11=B、button12=C、button13=D、button18=*、button19=#と記入します。
⑦STOP COMMANDの設定:ボタンを放した時に送出する文字を記入します。
button1-4と6-9及び18,19に右端のチェックボックスにチェックを入れ、大文字のSを設定します。
それ以外のbuttonはdefのままにします。
これでボタンを放した時に停止します。これを忘れると同じ動作を続けるので注意して下さい。
⑧Visibilityの設定:ボタンを表示/非表示用のチェックボックスで、表示するボタンにチェックします。
⑨Repeatableの設定:intervalsは変更せずにVisibilityと同じ設定にします。
⑩OPTIONの設定:LANDSCAPEのラジオボックスを選択します。
以上にて設定が終了です。

アプリの使い方
上記の設定が終了すれば、Raspberry pi pico Wの電源を投入(又はUSBケーブルを挿入)します。
次にスマホの設定:「設定」⇒「接続済みのデバイス」⇒「新しいデバイスとペア設定する」と順次操作すると
picoW Serial+MACアドレスが表示され、ペアリングが完了します。
次に、Bluetooth Serial Controllerアプリを開き、中央上のCONNECTをタップするとPaired Devicesの
リストが表示されるので、PicoW Serialを選択します。
この操作により、スマホからメカナムホイールカートが操作出来ます。



おわりに
Raspberry pi pico WにBluetoothがサポートされたので早速メカナムホイールカートに使ってみました。
コントローラーについては、専用コントローラが幼児にも扱い易い利点があり、スマホアプリには作る手間が
無く設定のみで直ぐに利用できる利点があります。用途に合わせて利用して下さい。

Raspberry pi pico Wの技適対応品が発売された時に買ったままで、余り使い道がなくお蔵入りしてたが
やっと陽の目を見ました。しかし、ESP32系に比べてWiFi UDPが使えない!、BLEやSerialBTにしても
使えない機能が多くあります。 やはり、使い勝手はESP32系に軍配が上がります。



皆様の参考になれば幸いです。
by Paradise



メカナムホイールを使ったRCカートの紹介 その6 3号機のソフトウエアー編

3号機のソフトウエアー編 2023年7月5日

3号機にはRaspberry pi picoを使い、ArduinoIDEにてプログラミングしています。
Raspberry pi picoには無線機能が無いので赤外線リモコン(ダイソーのリモコンライト税込330円)を使います。
赤外線リモコンは、スマホのAPPと違い事前設定が不要、カート側の電源を入れると即使える利点があり、
幼児でも直ぐに操作を覚えて使えます。
MWC-3_Frame6.jpg

準備
①お使いのパソコンにArduinoIDEがインストールされていることが前提です。
インストールが未だの方はこちらのページを参考にインストールして下さい。
②赤外線リモコンを使うためにIRremote ライブラリーをインストールします。最新のバージョンは4.12です。
ArduinoIDEツールバーのスケッチ⇒ライブラリーをインクルード⇒ライブラリーを管理と順番に開きます。
ライブラリーマネージャを表示したら一番上の検索窓にIRremoteと入力、IRremoteが表示されたら右下の
インストールをクリックします。
2023-07-04.png
IRremoteライブラリーについての詳細はGitHubを参照してください。
WiFiやBluetoothが使える技適認証マイコンの出現以前は、IRremoteライブラリーを使って赤外線リモコンを
多用していましたが、久しぶりに使うと随分バージョンが進み使い良くなっていました。

赤外線リモコンの送信コード確認と記録
他の赤外線リモコンを使う場合に送信コードが確認出来るソースコードを記します。
使用するリモコンのボタンを押して全てのコードを記録しておきます。


  1. #include <IRremote.hpp>
  2. void setup()
  3. {
  4.   IrReceiver.begin(pin); //pin=使用するピン番号を記入
  5. }
  6. void loop() {
  7.   if (IrReceiver.decode()) {
  8.     Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // Print "old" raw data
  9.     IrReceiver.printIRResultShort(&Serial); // Print complete received data in one line
  10.     IrReceiver.printIRSendUsage(&Serial); // Print the statement required to send this data
  11.     IrReceiver.resume(); // Enable receiving of the next value
  12.   }
  13. }



ダイソーリモコンライトの送信コードとボタンに割り付けた各機能
上記のプログラムにて確認した送信コード(フルコード)と各ボタンに割り当てた機能表です。
*左右の旋回スピードが速いと、旋回角度の微調整が難しいので旋回時はPWMを低速に設定しています。

Button_code_A.jpg

リモコンの機能と使い方
注意:このリモコンはボタン電池CR2025を使っています。テレビなどのリモコンに比べてパワーが無く、
正しくカート側に向けて送信しないと通信が途切れることがあります。
また、電池の容量が下がると正しく信号を送信出来なくなります。このような場合は、故障と考える前に
新しい電池と交換します。

各ボタンの機能
各ボタンには上の表に記した機能を割り当てています。
①ON/OFFボタン
デフォルトはONです。各移動ボタンを押している間、同じ動作を続け、ボタンを放すとストップします。
OFFボタンを押すとそのボタンを放してもストップボタンを押すまで同じ動作を続けます。
好みに合わせて切り替えて使います。

②速度切り替えボタン
モータ速度切り替えボタンにて4速を選べます。デフォルトはPWM値を中間の127に設定しています。
各PWM値はLOW=110、2nd=127、3rd=191、TOP=255にしていますが、ソフトを書き換える事で
自分好みに出来ます。 尚、低速で動かすとメカナムホイールカートの動きが良く理解できます。

③各移動ボタンと左右旋回ボタンについて
上から3段目より下のボタンが移動ボタンですが、左右旋回ボタンのみPWM値をLOWに固定してます。
その理由は、少しだけ方向を変えたい場合に速度が速いと少しのボタン操作でも回り過ぎてしまうからです。
このボタンを他のボタン同様に速度を切り替える場合は、ソースコードの223行目からの右回り低速旋回及び
234行目からの左回り低速旋回のPWM_TをPWMに変更します

3号機のソースコード
ソースコードは下記の配線図を基に記されています。
MWC-3_RaspberryPiPico_1.gif

同じGPIOを使う場合は、コピペでArduinoIDEに張り付けます。
リモコンのON/OFFボタンにより、Stop信号の自動・手動を切り替えるように工夫しています。
  1. /*
  2. Mecanum Wheel Cart Raspberry pi pico IR Control
  3. IRremote libraryの詳細は下のgithub Arduino-IRremoteを参照して下さい。
  4. https://github.com/Arduino-IRremote/Arduino-IRremote
  5. */
  6. #include <IRremote.hpp>
  7. int IR_RECEIVE_PIN = 14; //ここではGPIO14を使用
  8. int FR_MotorIN1 = 6;
  9. int FR_MotorIN2 = 7;
  10. int RR_MotorIN3 = 8;
  11. int RR_MotorIN4 = 9;
  12. int FL_MotorIN1 = 18;
  13. int FL_MotorIN2 = 19;
  14. int RL_MotorIN3 = 20;
  15. int RL_MotorIN4 = 21;
  16. int Stop_mode_LED = 5;
  17. #define MAX_TIME 150 // max ms between codes
  18. long lastPressTime = 0;
  19. int state = HIGH;
  20. int Stop_state = HIGH;
  21. int PWM = 127; // 起動時のスピードを設定
  22. int PWM_T = 110; // 旋回時のスピードを設定
  23. void setup() {
  24.   Serial.begin(115200);
  25.   IrReceiver.begin(IR_RECEIVE_PIN);
  26.   pinMode(FR_MotorIN1, OUTPUT); analogWrite(FR_MotorIN1, 0);
  27.   pinMode(FR_MotorIN2, OUTPUT); analogWrite(FR_MotorIN2, 0);
  28.   pinMode(RR_MotorIN3, OUTPUT); analogWrite(RR_MotorIN3, 0);
  29.   pinMode(RR_MotorIN4, OUTPUT); analogWrite(RR_MotorIN4, 0);
  30.   pinMode(FL_MotorIN1, OUTPUT); analogWrite(FL_MotorIN1, 0);
  31.   pinMode(FL_MotorIN2, OUTPUT); analogWrite(FL_MotorIN2, 0);
  32.   pinMode(RL_MotorIN3, OUTPUT); analogWrite(RL_MotorIN3, 0);
  33.   pinMode(RL_MotorIN4, OUTPUT); analogWrite(RL_MotorIN4, 0);
  34.   pinMode(Stop_mode_LED, OUTPUT); digitalWrite(Stop_mode_LED, HIGH);
  35. }
  36. void loop() {
  37.   if (IrReceiver.decode()) {
  38.     IrReceiver.resume();
  39.     if (state == HIGH) { // 受信CODEが入るとstateをLOWへ
  40.       state = LOW;
  41.     }
  42.     lastPressTime = millis();
  43.     switch (IrReceiver.decodedIRData.decodedRawData) {
  44.       case 0xFB047F80: // Red Button
  45.         Serial.println("MoveFrontLeft");
  46.         MoveFrontLeft();
  47.         break;
  48.       case 0xFA057F80: // Green Button
  49.         Serial.println("MoveForward");
  50.         MoveForward();
  51.         break;
  52.       case 0xF9067F80: // Dark Blue Button
  53.         Serial.println("MoveFrontRight");
  54.         MoveFrontRight();
  55.         break;
  56.       case 0xF8077F80: // Orange Button
  57.         Serial.println("TurnLeft");
  58.         TurnLeft();
  59.         break;
  60.       case 0xF7087F80: // Light Green Botton
  61.         Serial.println("Stop");
  62.         Stop();
  63.         break;
  64.       case 0xF6097F80: // Dark Blue Button
  65.         Serial.println("TurnRight");
  66.         TurnRight();
  67.         break;
  68.       case 0xF50A7F80: // Yellow Button
  69.         Serial.println("MoveRearLeft");
  70.         MoveRearLeft();
  71.         break;
  72.       case 0xE41B7F80: // Light Blue Button
  73.         Serial.println("MoveBackward");
  74.         MoveBackward();
  75.         break;
  76.       case 0xE01F7F80: // Purple Button
  77.         Serial.println("MoveRearRight");
  78.         MoveRearRight();
  79.         break;
  80.       case 0xF30C7F80: // Silver Botton
  81.         Serial.println("MoveLeft");
  82.         MoveLeft();
  83.         break;
  84.       case 0xF20D7F80: // Blue Button
  85.         Serial.println("Stop");
  86.         Stop();
  87.         break;
  88.       case 0xF10E7F80: // Dark Purple Button
  89.         Serial.println("MoveRight");
  90.         MoveRight();
  91.         break;
  92.       case 0xE11E7F80: // Mode Button Low supeed
  93.         Serial.println("110");
  94.         PWM = 110;
  95.         break;
  96.       case 0xFE017F80: // 4H Button 2nd supeed
  97.         Serial.println("127");
  98.         PWM = 127;
  99.         break;
  100.       case 0xFD027F80: // 8H Button 3rd speed
  101.         Serial.println("191");
  102.         PWM = 191;
  103.         break;
  104.       case 0xFC037F80: // Multi Color Button Top speed
  105.         Serial.println("255");
  106.         PWM = 255;
  107.         break;
  108.       case 0xED127F80: // ON Button ボタンを放すとStop信号が自動的に出る。
  109.         Serial.println("Auto Stop ON");
  110.         digitalWrite(Stop_mode_LED, HIGH);
  111.         Stop_state = HIGH;
  112.         break;
  113.       case 0xE51A7F80: // OFF Button Stopボタンを押すまで停止しない。
  114.         Serial.println("Auto Stop OFF");
  115.         digitalWrite(Stop_mode_LED, LOW);
  116.         Stop_state = LOW;
  117.         break;
  118.       default:
  119.         break;
  120.     }
  121.   }
  122.   if (state == LOW && millis() - lastPressTime > MAX_TIME) { // ボタンが放さ時の処理
  123.     state = HIGH; // ボタンが放されるとstateをHIGHへ
  124.     if (Stop_state == HIGH) { // ONボタンが有効の場合
  125.       Serial.println("Stop");
  126.       Stop(); // Stop信号を出す
  127.     }
  128.   }
  129. }
  130. void MoveForward() { // 前進
  131.   analogWrite(FR_MotorIN1, PWM);
  132.   analogWrite(FR_MotorIN2, 0);
  133.   analogWrite(RR_MotorIN3, PWM);
  134.   analogWrite(RR_MotorIN4, 0);
  135.   analogWrite(FL_MotorIN1, PWM);
  136.   analogWrite(FL_MotorIN2, 0);
  137.   analogWrite(RL_MotorIN3, PWM);
  138.   analogWrite(RL_MotorIN4, 0);
  139. }
  140. void MoveBackward() { // 後進
  141.   analogWrite(FR_MotorIN1, 0);
  142.   analogWrite(FR_MotorIN2, PWM);
  143.   analogWrite(RR_MotorIN3, 0);
  144.   analogWrite(RR_MotorIN4, PWM);
  145.   analogWrite(FL_MotorIN1, 0);
  146.   analogWrite(FL_MotorIN2, PWM);
  147.   analogWrite(RL_MotorIN3, 0);
  148.   analogWrite(RL_MotorIN4, PWM);
  149. }
  150. void MoveLeft() { // 左横へ移動
  151.   analogWrite(FR_MotorIN1, PWM);
  152.   analogWrite(FR_MotorIN2, 0);
  153.   analogWrite(RR_MotorIN3, 0);
  154.   analogWrite(RR_MotorIN4, PWM);
  155.   analogWrite(FL_MotorIN1, 0);
  156.   analogWrite(FL_MotorIN2, PWM);
  157.   analogWrite(RL_MotorIN3, PWM);
  158.   analogWrite(RL_MotorIN4, 0);
  159. }
  160. void MoveRight() { // 右横へ移動
  161.   analogWrite(FR_MotorIN1, 0);
  162.   analogWrite(FR_MotorIN2, PWM);
  163.   analogWrite(RR_MotorIN3, PWM);
  164.   analogWrite(RR_MotorIN4, 0);
  165.   analogWrite(FL_MotorIN1, PWM);
  166.   analogWrite(FL_MotorIN2, 0);
  167.   analogWrite(RL_MotorIN3, 0);
  168.   analogWrite(RL_MotorIN4, PWM);
  169. }
  170. void MoveFrontLeft() { // 左斜め前方へ移動
  171.   analogWrite(FR_MotorIN1, PWM);
  172.   analogWrite(FR_MotorIN2, 0);
  173.   analogWrite(RR_MotorIN3, 0);
  174.   analogWrite(RR_MotorIN4, 0);
  175.   analogWrite(FL_MotorIN1, 0);
  176.   analogWrite(FL_MotorIN2, 0);
  177.   analogWrite(RL_MotorIN3, PWM);
  178.   analogWrite(RL_MotorIN4, 0);
  179. }
  180. void MoveFrontRight() { // 右斜め前方へ移動
  181.   analogWrite(FR_MotorIN1, 0);
  182.   analogWrite(FR_MotorIN2, 0);
  183.   analogWrite(RR_MotorIN3, PWM);
  184.   analogWrite(RR_MotorIN4, 0);
  185.   analogWrite(FL_MotorIN1, PWM);
  186.   analogWrite(FL_MotorIN2, 0);
  187.   analogWrite(RL_MotorIN3, 0);
  188.   analogWrite(RL_MotorIN4, 0);
  189. }
  190. void MoveRearLeft() { // 左斜め後方へ移動
  191.   analogWrite(FR_MotorIN1, 0);
  192.   analogWrite(FR_MotorIN2, 0);
  193.   analogWrite(RR_MotorIN3, 0);
  194.   analogWrite(RR_MotorIN4, PWM);
  195.   analogWrite(FL_MotorIN1, 0);
  196.   analogWrite(FL_MotorIN2, PWM);
  197.   analogWrite(RL_MotorIN3, 0);
  198.   analogWrite(RL_MotorIN4, 0);
  199. }
  200. void MoveRearRight() { // 右斜め後方へ移動
  201.   analogWrite(FR_MotorIN1, 0);
  202.   analogWrite(FR_MotorIN2, PWM);
  203.   analogWrite(RR_MotorIN3, 0);
  204.   analogWrite(RR_MotorIN4, 0);
  205.   analogWrite(FL_MotorIN1, 0);
  206.   analogWrite(FL_MotorIN2, 0);
  207.   analogWrite(RL_MotorIN3, 0);
  208.   analogWrite(RL_MotorIN4, PWM);
  209. }
  210. void TurnRight() { // 右回り低速旋回
  211.   analogWrite(FR_MotorIN1, PWM_T);
  212.   analogWrite(FR_MotorIN2, 0);
  213.   analogWrite(RR_MotorIN3, PWM_T);
  214.   analogWrite(RR_MotorIN4, 0);
  215.   analogWrite(FL_MotorIN1, 0);
  216.   analogWrite(FL_MotorIN2, PWM_T);
  217.   analogWrite(RL_MotorIN3, 0);
  218.   analogWrite(RL_MotorIN4, PWM_T);
  219. }
  220. void TurnLeft() { // 左回り低速旋回
  221.   analogWrite(FR_MotorIN1, 0);
  222.   analogWrite(FR_MotorIN2, PWM_T);
  223.   analogWrite(RR_MotorIN3, 0);
  224.   analogWrite(RR_MotorIN4, PWM_T);
  225.   analogWrite(FL_MotorIN1, PWM_T);
  226.   analogWrite(FL_MotorIN2, 0);
  227.   analogWrite(RL_MotorIN3, PWM_T);
  228.   analogWrite(RL_MotorIN4, 0);
  229. }
  230. void Stop() { // 停止 全てを0に設定
  231.   analogWrite(FR_MotorIN1, 0);
  232.   analogWrite(FR_MotorIN2, 0);
  233.   analogWrite(RR_MotorIN3, 0);
  234.   analogWrite(RR_MotorIN4, 0);
  235.   analogWrite(FL_MotorIN1, 0);
  236.   analogWrite(FL_MotorIN2, 0);
  237.   analogWrite(RL_MotorIN3, 0);
  238.   analogWrite(RL_MotorIN4, 0);
  239. }



後発のRaspberry pi pico W には、WiFiとBluetoothがサポートされています。
赤外線通信は光が届かない物陰に入ると通信が途切れます。その点、WiFiやBluetoothに利点があります。
3号機のRaspberry pi picoを Raspberry pi pico W に置き換え、4x4 Keypadを使ったBluetooth送信機又は
スマホのBluetooth APPとペアリングするプログラムが完成しています。次回に紹介したいと思います。

皆様の参考になれば幸いです。
by Paradise

続きを読む

メカナムホイールを使ったRCカートの紹介 その5 3号機の製作

メカナムホイールカートを1号機に続きステッピングモータを使った2台目を作りましたが、使用する
39ミリタイプの小型ステッピングモータの入手が難しく、TTモータに比べて重いなどの理由により、
高性能ではあるが一般向きしないので割愛し、TTモータを使った3号機を紹介します。

3号機の製作
MWC-3_Frame6.jpg

制御基板の製作
回路図
Raspberry pi picoとダイソーのリモコンライト・イルミネーション タイプ330円を組み合わせた赤外線リモコンを
使ってメカナムホイールカートを操作します。
このリモコンライトのLEDボックスに入ってる赤外線受光素子とリモコン部を利用します。
前回3号機について少し記しましたが、その後マイコンをArduino NanoからRaspberry pi picoに変更しました。
その理由は、NanoなどのATMega328系ではPWM出力が6個しかなく、MX1508モータドライバをPWM制御
するにはモータ4個に対して8個のPWM出力が必要だからです。(pi picoは全てのGPIO(26個)でPWMが可能)
回路図では、解り易いように使用する端子のみを表示。注意:端子表示の順番が実物と異なります。
MWC-3_RaspberryPiPico_1.gif

制御基板の実物画像
ご覧の通り、Raspberry pi picoはデカいですね!、同等の機能があり小さいサイズのRP2040ボードが
各社から販売されています。(私はコンテストの賞品に貰った在庫があるので使用しました)
新規に購入するならスイッチサイエンスで販売されているWaveshare RP2040-Zero 715円が小さくてお勧めです。
MWC-3_ControlBoard.jpg

参考画像 Waveshare RP2040-Zero/Raspberry pi pico:21x 52mm

Waveshare_RP2040-Zero.jpg

リモコンに応用したダイソーのリモコンライト
税込み330円で買える小さな赤外線リモコンなので数メートルしか届きませんが、手軽にリモコン操作が出来ます。
リモコン本体のCR2025ボタン電池の容量が下がると、受信側では正常に受信できなくなるので注意します。
試していませんが、単4アルカリ乾電池2本用電池ボックスを外付けすれば長持ちすると思います。
Daiso_LED1.jpg

ボディフレーム (画像をクリックすると拡大します)
下図は厚さ3ミリのアクリル板を使いましたが、3ミリのシナベニヤでも同様に作れます。
フレームは前後に2分割して中央でねじれる構造により、走行面に起伏が有っても4輪が接地する構造です。
MWC3_3mmPanel.gif

連結部パネル
連結部のパネルは荷重がかかるので、厚さ5ミリのアクリル板を使いましたが同等のシナベニヤでOKです。
ここでは手持ちのミニチュアベアリング624ZZ(外径13、内径4、厚み5(㎜)を使いました。
ベアリングを前後から挟む蓋のサイズは、3ミリパネル図の右上に記載しています。
MWC3_5mmPanel.gif

組み立て
上図を基に完成したボディフレームです。
前後パネルとサイドパネルの間に電池ボックスや制御基板を載せる中央パネルを組み合わせて
接着剤で固定すると頑丈な躯体が出来上がります。
MWC-3_Frame1.jpg

前後フレーム連結部の拡大写真
ベアリングを中心の回転しますが、片側に約10度傾けた所にビスをねじ込みストッパーににしています。
ネジの頭同士が当たって止まる簡単な仕組みです。 注意:ストッパーが無いと配線が切れます。
MWC-3_Frame7.jpg

TTモータ取り付けの準備
TTモータにリード線を取り付けますが、モータ端子にノイズ止めのパスコンを忘れずに取り付けます。
0.1μF(104)積層セラミックコンデンサーを使っています。モータ取り付けネジはM3ビス長さ25㎜を用意します。
TTモータのギア側後部にラグが付いていますが、邪魔になるのでニッパー等で切除しています。
MWC-3_Frame2.jpg

TTモータ取り付け
モータのリード線を中央パネルの切り込みから連結パネルの配線穴を通して制御基板側に出します。
モータ取り付けビスを内側にてナットで固定します。
MWC-3_Frame3.jpg

電池ボックスと制御基板の取り付け
電源スイッチは手持ちのスライド式を使いましたが、使い易い部品を選びます。
中央パネルとトップパネルの上下間隔が15㎜なので、制御基板には背の高い部品が使えないので注意。
MWC-3_Frame4.jpg

メカナムホイールの取り付け
メカナムホイールには、TTモータへの取り付けアダプターシャフトとM2.6㎜L20㎜ビスが付属してます。
しかし、モータシャフトに軸方向の遊びがあり、フレームに3㎜厚以上の素材を使うとホイールとフレームが接触します。
その対策としてアダプターシャフトを延長するためのスペーサー外径6、内径3、長さ5(㎜)を挿入します。
そしてビスを長さ25㎜に交換して取り付けるとホイールとフレームの間隔が約5㎜広がり、接触問題が解決します。
MWC-3_Frame5.jpg

出来上がった3号機:夏休みの工作に如何ですか?
MWC-3_Frame6.jpg

次回はソフトウエアー編を掲載予定です。
by Paradise


テーマ : 電子工作
ジャンル : 趣味・実用

メカナムホイールを使ったRCカートの紹介 その4 製作改良編

ソフトウエアー編の予定でしたが、カートの構造改良編を先に掲載します。
2023年6月20日掲載

メカナムホイールカート3兄弟
MWC_3brothers.jpg

カートの構造改良編
実際に作られた方でないと解らない事ですが、ボディフレームに4個の駆動モータを
固定した場合、斜め方向や、横方向に移動する時に僅数ミリの段差が有ると何れかの
ホイールが浮いて空転するために正常な動作が出来ません。
この事象を改善するには自動車のようなサスペンションを設けるのが一般的ですが、
私は前後のボディフレームを分割、接合部を中心に回転して前後の車軸がねじれる方法を
考案して解決しました。 この構造は絶えず4輪が接地するので効果が大きいです。

下の画像を参照して下さい。
No.2(2号機)ステッピングモータを使ったモデルで、後軸が可動します。
中央の支点を中心にして左右に約10度回転します。
回転機構にはミニチュアベアリングを使い、遊びが無く滑らかに動くように工夫しています。
MWC-2_2_1.jpg

横から見た写真です。メカナムホイールの下に厚さ10ミリの木片を置いた状態です。
MWC-2_2_2.jpg

No.3(3号機)TTモータとダイソーの赤外線リモコンをコントローラーに応用したモデルです。
夏休みの工作の手本として作りました。マイコンに安価なArduino nano(何年も前に400円で購入)と
ダイソーのリモコンライト(300円)を使いました。リモコンと本体受信部の赤外線受光素子を利用。
ボディフレームに透明アクリル板を使いましたが、加工がしやすいシナベニヤ板でもOKです。
2号機同様に回転機構にミニチュアベアリングを使い、回転角度を約10度にてストッパーを設置。
MHC-3_1.jpg

横から見た写真です。ボディフレームはTTモータが入る大きさで、前後に2分割した格好です。
ボディフレームの上部の片方に単3型充電池4本ボックスを、もう片方に制御基板を設置しています。
MHC-3_2.jpg

上記の可動ボディフレームに改良の結果、少々起伏のある床面でも
安定して動作するようになりました。


今回は可動ボディフレームについてのみですが、次回から2号機、3号機の詳細を掲載します。
また、動画の掲載を予定しています。

by Paradise

メカナムホイールを使ったRCカートの紹介 その3 製作編

メカナムホイールを使ったRCカートの製作編
手術した右目の調子が良くなったので続編を編集しました。 2023年6月5日

1)主要部品

①フレームの材料
私は、在庫(アクリル屋.COMの端材箱詰め品)の透明アクリル板3㎜厚を使用しました。
フレームの中が見えませんが、3㎜厚のシナベニヤでも作れます。

②TTモーター 1:48、4個使用
アマゾンにて購入。8個1199円(1個約150円)。
TT_Motor.jpg

③ESP32 WROOM-32E モジュール
秋月電子通商にて購入。現在1個480円、私が購入時1個360円でした。
ESP32E.jpg

④モータードライバー基板、2個使用
アマゾンにて購入。6個799円(1個約133円)。
MX1508_2.jpg

⑤単3電池4本用電池ボックスのリード線タイプ
秋月電子通商にて購入。1個80円
Battery_Box.jpg

⑥メカナムホイール60ミリ
アマゾンにて購入。価格が変動していますが、私が購入時4個セットが約2400円でした。
mecanum1.jpg

2)フレームの製作 平面図概要
これは、アクリル板をCNC加工して作った参考例です。貴方の都合に合わせて材料を選んで加工して下さい。
画像をクリックすると大きく表示できます。

①フレーム枠パネルの寸法図
MWC1_Panel2.gif

②フレーム上下及び中パネルの寸法図
MWC1_Panel1.gif

③組み立てについての注意点
1、フレームのねじれに注意
フレーム枠前後左右のパネルに中パネル(電池ボックスと制御基板取り付け用)を挿んで、
接着剤で固定しますが、組み立ては平らな場所でねじれがないように行います
ねじれが有るとホイールの接地面が不均等となり、浮き上がりにより正常に動作しません。

2、TTモーターの取り付けについて
TTモーターの取り付け面は平らではなく、突起が2箇所あります。
ズレ防止用の丸い突起とモーター固定バンド部の2箇所が、取り付けネジの面より出ています。
図面にはその部分の穴開け位置を記しています。 この加工をせずに無理やり取り付けると故障の
原因となる
ので注意して下さい。 TTモーターの現物を確認しながら作業をします。
また、サイドパネルの厚みが3㎜より大きい場合、メカナムホイールとパネルの隙間が少なくなるので
注意が必要です。


3、メカナムホイールの取り付けについて
メカナムホイールには、TTモーターに取り付け用専用のアダプターが付属してます。
メカナムホイールは左右が異なります。取り付けは完成写真を参考に、上から見て45度の黒いタイヤが
前後輪共に外側へ開く様に取り付けます。

また、前項でも述べましたがモーター取り付けネジとメカナムホイールが接触しないか注意してください。

3)コントロール基板の製作

①コントロール基板の回路図
この回路図では、ESP32モジュールを単体で使用しています。
細かい配線が苦手な方は、形が大きくなりますが、ESP32 DevKitを使うと良いでしょう。
電池は1.5V電池ではなく、1.2Vの充電式ニッケル水素電池を使を使いました。
MWC_Circuit1.gif

②コントロール基板の参考画像
上記の回路図を基にユニバーサル基板へ組み込んだコントロール基板です。
ESP32モジュールとモータードライバーMX1508はユニバーサル基板に両面テープにて貼り付けて使用。
尚、何時ものようにESP32モジュールを配線がしやすいように裏向きに張り付けています。
MWC_Board1.jpg

完成したメカナムホイールRCカート
MWC_top1.jpg

もう一度、独特な動きをするメカナムホイールRCカートの動画をご覧下さい。



次回は、メカナムホイールRCカートを動かすソフトウエアー編を掲載します。
by Paradise




メカナムホイールを使ったRCカートの紹介 その2 動画が完成

先日、右目の硝子体手術を受けたので更新が遅くなってます。 2023年5月24日掲載

通常の4輪車と異なるメカナムホイール車特有の動きをご覧下さい。
Wiiヌンチャクのジョイスティックを応用した自作BLEコントローラ用とAndroidスマホのフリーアプリ
Bluetooth Serial Controller用の2種類のプログラムで動かしています。
撮影とRCコントローラの操作を一人で行うの難しいですね!。



術後の調子を見ながら、ハード編、ソフト編を順次掲載の予定です。
by Paradise



メカナムホイールを使ったRCカートの紹介 その1

メカナムホイールを使ったRCカートの紹介 2023年5月8日
特殊なホイール(メカナムホイール Mecanum Wheel)を使うとハンドルがなくても前後左右、斜め方向や
クローラー車と同様に超信地旋回が出来ます。
メカナムホイールの小回りが利く利点を生かし、実際に工場などで資材運搬車として利用されています。

独特な動きを再現するために、メカナムホイールを使ったRCカートを作ってみました。

本体上部
メカナムホイールは市販の60㎜を使用、電池は単3充電池を4本、マイコンはESP32Eモジュールを使用
モータードライバーは安価なMX1508を2組使用。操作はブルーツースにてスマホアプリで行います。
MWC1_01.jpg

本体裏側
フレームは中の様子が見える3㎜透明アクリル板をCNC加工して使用、モーターは安価なTTモータを
4個使用しました。サイズは長さ約18センチ、幅が約14センチ、高さが約6.5センチです。
MWC1_02.jpg

本日完成したところなので、詳細は次回からハードウエア編、ソフトウエアー編を順次掲載の予定です。

by Paradise

TinyGS 地上局の開設から5か月間の体験記 (TinyGS 最終回)

TinyGS 地上局を開設して5か月間の体験を記します。

シンプルなLoRa衛星の受信設備
1000円余しで作れるLoRa受信機と3ミリ径の真鍮丸棒で作った400Mz帯1/4λGPアンテナを使い、
500Km上空を地球一周約96分の高速で周回する超小型人工衛星からのテレメトリー信号を受信
することが出来ます。(ドップラー効果による周波数偏移をもろともせずよく受信できると感銘!)
最初は、既製品のLoRa受信機を購入して使っていましたが、国内の地上局(私を含めて6局)に
比べて1日の受信数が少なく、各種アンテナやLNA(Low Noise Amplifier)を追加するなど試行錯誤
しましたが、自作したシンプルな構成が一番感度が良く、現在では国内地上局のトップクラスの
受信数を連日更新しています。

LoRa受信機の構成
高価なOLED表示器を備えたマイコンボードよりも、ESP32マイコンモジュールとLoRaトランシーバー
Ra-02モジュールを手配線したシンプルな構成の方が、安価で受信感度が良かった事が特筆できます。
構成はESP32モジュールとLoRaトランシーバーRa-02モジュールのみです。(但し受信専用)
回路図 128X64OLED取り付けは任意です。
この回路図通りに配線をすると、TinyGSの初期設定時のBoard configのBorard typeをにカスタム設定
ではなく「433MHz Heltec WiFi LoRa 32 V2」として設定出来ます。

ESP32E_LoRa_RX.gif

製作例
ユニバーサル基板の端材裏表にESP32とRa-02を両面テープで貼り付けて配線した作例です。
ESP32側には電源供給に必要なAタイプUSBソケットと5Vを3.3Vに変換する3端子レギュレータモジュールを
取り付けています。RA-02モジュール側には、ESP32のプログラム書き込み用のソケットを設けています。
ESP32E.jpg

アンテナについて
当初はアンテナによる受信感度の違いを調べるために、参考文献を探してダイポールアンテナ、ヘリカルアンテナ
、ループアンテナ等を作りましたが、結局のところ現在使用中の1/4λGPアンテナが一番成績が良い結果と
なりました。これからTinyGS 地上局を始める方には1/4λGPアンテナの自作をお勧めします。
アンテナと受信機を同軸ケーブルで繋ぎますが、RG58等の低損失ケーブルを使い出来るだけ短い距離に
収めます。出来ればアンテナ直下が理想的ですが、長くても数メートル以内に収まるようにします。
他にテストしたアンテナについては、過去記事を参考にして下さい。

この1/4λGPアンテナは中心周波数を420MHzに設定して400MHz~440MHzの帯域で使用しています。
アンテナの設計に使用させて頂いた1/4GPアンテナの計算ページ「M0UKD」が参考になります。
1/4GPアンテナの計算ページを開く

下記の1/4λGPアンテナは、中心周波数を420MHzとして計算の結果、垂直エレメントが169.6㎜、
ラジアルが4本で水平から45度下側に折り曲げた長さが190.0㎜です。
エレメントの素材が3㎜の真鍮丸棒を使い、設計寸法より少し長めに切断。完成後のSWR調節時に
寸法を切り詰めてSWR値を下げています。
NewGP_antenna.jpg

SWRの調整にはアンテナネットワー クアナライザNanoVNA 50KHz-1.5GHz 2.8インチを使用しました。
SWR測定周波数の範囲が設定できて、測定範囲内のSWR値をグラフ表示できるのが特徴です。
昔のSWR計と違ってとても手軽で便利、アンテナの自作には必携です。(Amazon約7K円)
NanoVNA.jpg

アンテナの設置場所(ロケーション)
ロケーションは受信機やアンテナよりも一番大きな要素と思います。その理由は北極圏に近い
グリーンランドの飛行場に設置された地上局が1日の受信数がけた違いに多い事です。

多くの低軌道人工衛星は北極と南極を通過する極軌道衛星なので、南北に開けた場所に設置する
のが得策です。一番良いのが近くに高い建物や障害物が少ない開けた場所が良いのですが、中々
都会では難しいですね。
対象が人工衛星なのでアンテナの高さは低くても大丈夫、私のアンテナは3m程です。
私の立地は、南北に自宅と隣家の間に建てた金属製ガレージの窓面格子に固定しています。

ParadiseGS1
私の地上局 ParadiseGS1が過去一か月にコンファームしたテレメトリー受信数のグラフです。
(3月4日に上記受信機に交換) TinyGSについては過去記事を参考にして下さい。
今回にてTinyGS関連記事を終了します。
ParadiseGS1_TelmetryPackets.jpg



以上ですが、TinyGS地上局に興味のある方の参考になれば幸いです。
by Paradise

TinyGS 基地局 ParadiseGS1のアンテナを更新

ParadiseGS1のアンテナを更新 2023.2.12
新しく打ち上げられたLoRa衛星には、400MHz付近の区分帯使用が増えてきました。
これに合わせてアンテナの中心周波数を420MHzに設計し直し、エレメントの真鍮パイプを2㎜径から
4㎜径に変更。折り曲げ部分は3㎜径の真鍮丸棒を90度に折り曲げて、4㎜径エレメントに差し込んで
半田付けしています。真鍮パイプに白い塗料で錆止めを施しました。
NewQFH2.jpg


QFHアンテナの参考資料
尚、このQFHアンテナはジョン・コペンズ ON6JC/LW3HAZ氏のホームページを参考に作りました。
ここをクリックするとHPが開きます。
内容は主に気象衛星NOAAの137MHz帯ですが、他のバンドにも応用が可能です。
メニューのCalculaterを開くと中心周波数、エレメントの太さ、曲げ角度、縦横比などを入力すれば
Elementの長さなど必要項目が表示されます。


皆様の参考になれば幸いです。

LoRa衛星地上局を追加

LoRa衛星受信の地上局を追加して3局体制としました。

ガレージ窓の面格子に取り付けた3本の受信専用アンテナ
各アンテナの間隔が80センチと近く互いの干渉や、自宅と隣家の狭間に立つ立地条件による受信パターの
乱れも気になりるところです。 それでも、2000Km以上彼方のLoRa衛星からの電波が受信出来ています。
GS_Antennas_A.jpg

LoRa受信機
今回は、高価な専用LoRaボードではなく、以前に数百円で購入した安価なESP32 Devkit V1に
これも数百円で購入したLoRa受信モジュールRa-02を手配線にて組み立てました。合計約1000円

画像の説明
左側が30pinタイプのESP32 Devkit V1で邪魔になるピンヘッダを取り外しています。
右側がDevkit V1の裏側に433MHzのRa-02 LoRaモジュールを両面テープで貼り付けて手配線しています。
SSD1306 128x64 OLEDは必需品ではないのでI2C接続用ソケットを両面テープで取り付け、
ファームウエアのインストール時に動作確認用として使い、通常は外しています。
esp32_LoRa.jpg

配線図
ESP32 Devkit V1とLoRaモジュールの配線例を記します。電源はUSB電源アダプターから給電します。
*この配線図通りに組み立てると、Heltec WiFi LoRa 32 V2とピンコンパチブルなのでボード設定時に
テンプレートをHeltec WiFi LoRa 32 V2として使えます。OLEDの取り付けは任意です。
LoRa_Ra-02.gif

Eggbeater II アンテナについて (Eggbeaterとは卵泡立て器のことです)
今回使用したアンテナはアメリカのアマチュア無線局 K5OE Jerry さんが開発された低地球軌道 (LEO) 衛星用
アンテナを参考にParadise流にアレンジして作りました。
参考ペ記事:Jerryのページへリンク
Jerry, K5OE: Home Brew Amateur Antennas
Eggbeater II Omni LEO Antennas


完成したEggbeater II アンテナ
アンテナのフレームパイプには、QFHアンテナ製作で余った13㎜ HIVP塩ビパイプを使い、エレメントには2㎜径
真鍮丸棒と3㎜径真鍮パイプを、リフレクターには3㎜径真鍮丸棒を使いました。

このアンテナは、90度位相給電の右回り円偏波です。マッチングセクションにはRG62 インピーダンス92Ω
の同軸ケーブルをフェーズラインに使いますが、特殊ケーブルの為入手が難しいのが難点です。
幸い秋葉原のオヤイデ電気の通販にて切り売り購入出来ました。
私はマッチング部に塩ビ板を8角形にCNC加工して作りました。 これは、円形だとエレメントを通す穴を垂直に
正確な穴を開けるのが難しく、底面が平らになる8角形を選びましたが、4角形でも同じです。
また、フレームの塩ビパイプが細いのでフェーズラインを外回りにしています。新たに作られる方は40㎜以上の
太いパイプを使うとフェーズラインをパイプ内に収納出来るので良いでしょう。

未だ、使い始めて数日ですが3種類のアンテナによる受信状況の比較が楽しみです。
EB01B.jpg


以上、興味のある方の参考になれば幸いです。
by Paradise de ex JH3VSR

LoRa衛星受信アンテナと受信dataの比較

Happy New Year
本年もよろしくお願いします。 2023年 元旦

QFHアンテナを自作し、12月30日より地上局を2局体制としました。

新しく製作したQFHアンテナです。低軌道衛星通信用(円偏波無指向性アンテナ)
QFH_antenna.gif

以前から使用のGPアンテナ
433Mhz_GP_Antenna1.gif

アンテナの違いによる受信衛星数を単純に比較してみました。

今朝のexJH3VSR地上局の受信データです。(画像は何れもクリックすると拡大します)。
棒グラフはテレメトリー信号をエラーなしで受信した衛星の数です。
右側のMAPは地上局を中心に受信した衛星の位置で、丸印がエラーなし受信、茶色丸印はCRCエラー受信です。
棒グラフの欠落部分は、地上局exJH3VSR_2がGPアンテナを使用中のためです。
exJH3VSR_data.gif

こちらは休止中のexJH3VSR_2地上局の受信データです。
上記のexJH3VSR地上局同様にCRCエラーが多いですね!、どのMAPを見ても判りますが南北に
我が家と隣家が建っていて西側が開ける立地が読み取れます。
exJH3VSR_2_data.gif

こちらが比較対象のParadiseGS1地上局の受信データです。
未だ2日間のデータなので余り参考になりませんが、バンド幅が狭いQFHアンテナの特性により、送信周波数が極端に
低い(401MHz帯)FossaSat-2Eシリーズの衛星が受信出来ていません。この点はGPアンテナに軍配ありです。
この問題を解決するには、広帯域のディスコーンアンテナが良いかも知れません。
尚、QFHアンテナでは、バンド内の衛星にはCRCエラーが少なく、確率よく受信出来る傾向にあります。
ParadiseGS1_data.gif

次のリンクTinygs.comにアクセスすると誰でもLoRa衛星の受信状況が見れます。
地上局名を入力すれば、その局の受信状況が見れます。



今後も受信方法を研究しながらLoRa衛星の受信を楽しみたいと思います。
以上、興味のある方の参考になれば幸いです。

by Paradise de ex JH3VSR

LoRa衛星のテレメトリー信号受信 その2

その2 LoRa衛星のテレメトリー信号受信用ボードを交換
2022年12月4日午後より運用開始
先に使ったHeltec WiFi LoRa32 V2を同じHeltecのWireless stickに置き換えて受信感度のテストを実施中。

下の画像がHeltecのWireless stickで、0.49インチOLEDディスプレイを備えた433MHz帯のLoRaボードです。
但し、OLEDが小さ過ぎて老人の私にはルーペが無いと読み取れません。もし、これから始められる方で
購入をお考えの方は、OLEDは必需品では無いのでOLEDを省いた<Wireless stick Liteをお勧めします。
またOLEDが必要な場合は、安価に購入可能な0.96インチ 128x64 I2C接続のOLEDが外付け出来ます。
Heltec_Wireless_stick2.gif

1)Wireless stickを使った場合の設定方法
先ずは、TinyGSのホームページ下段のGitHabに入り、どのような事をするのかREADME.mdを塾続します。
尚、付属のアンテナでは感度が悪く受信が困難です。次回予定のグランドプレーンアンテナの自作を
参考に作られるのが賢明です。(1000円以下で出来ます)
①Install
Linux、Windows、Mac に使えるワンクリック アップローダーを利用します。
次の手順ページを開き、使用するOSに合ったアップローダーをリリースページからダウンロードします。
私はWindows派なのでTinyGS_Uploader_WINDOWS.exeを選びました。

②インストールの実行
PCとボードをUSBケーブルで接続してダウンロードしたUploaderを実行しますが、セキュリティソフトが
ウイルスソフトと認識して強制的にダウンロードファイルを削除したので、一時的にセキュリティソフトを
停止して実行しました。
また実行前に、Configure the board「ボードを構成する」パラメータに必要な項目を準備しておきます。

③ボードを構成する (ほぼコピペ)
ボードの初回起動時に、My TinyGS という名前の AP が生成されます。WiFiネットワークに接続すると、
ステーションの基本的なパラメーターを構成するための Web パネルが表示されます。
私の場合は、Web ブラウザーの url にIPアドレス192.168.4.1を入力してWeb パネル表示させました。
詳しい説明は下段のリンク「ボード構成の詳細」を参照して下さい。
TinyGS_dashboard.gif

④設定パラメータ
GROUNDSTATION NAME:地上局の名称 解り易い適当な名前付けます。
GROUNDSTATION PASSWORD:適当なパスワードを設定します。
SSID と PASSWORD:ホーム WiFi ルーターのSSID と PASSWORを記入します。
タイムゾーン:プルダウンメニューからアジア東京を選択します。
LATITUDE および LONGITUDE:設置場所の緯度経度をGoogleMap等で調べておきます。
MQTT_SERVER および MQTT_PORT:初期設定のまま
MQTT_USER および MQTT_PASS:この情報を得るにはTelegramをインストールする必要があります。
Telegramのインストールが嫌な場合は全てを残念するしかないようです。
BOARD TYPE:最初私はハードウエアをHeltec WiFi LoRa 32 V2に設定していました。
次にテストしたボードがHeltecのWireless stickですが実物を比較した結果、ピンアサインが全て同じなので
Heltec WiFi LoRa 32 V2を選びましたが、問題なく動作しています。
OLED の明るさ:デフォルトのまま使っています。
Enable TX:通常一般地上局は受信のみなので必ずオフに設定します。
自動同調:デフォルトのままオンに設定しています。
サードパーティへのテレメトリ:デフォルトのままオンに設定しています。
テスト モード:オフに設定しています。
自動ファームウェア更新:デフォルトのままオンに設定しています。
ボード テンプレート:BOARD TYPEで設定済みなので空白まま使用。
モデムの起動:デフォルトのまま使っています。
高度なパラメーター:デフォルトのまま空白で使用。

2)テレグラム(←クリックすると開きます)のインストール
TinyGSの設定や操作には、テレグラムをインストールを行う必要があります。
見出しのテレグラムをクリックするとテレグラムのTinyGSコミュニティに参加するページが開きます。
ヘッダーライン右端のアイコンからテレグラムをダウンロードします。
設定にはIDとパスワード及び携帯電話番号が必要ですが固定電話は使えません。
テレグラムの設定が終わるとTelegram、MQTT Bot、TinyGS Personal Bot、TinyGS Communityの項目が
出来ます。

先の設定項目のMQTT Userナンバー及びPassの取得は、TinyGS Personal Botにアクセスして
メッセージ欄に/mqttコマンドを入力すると取得できます。

3)ローカル データ アクセス
また設定完了後は、ボードとPCを接続しなくてもローカル Web サイトから、Ground Station のデータと構成に
アクセスできます。/weblogimコマンドを入力すれば、Webアドレスが送られてくるのでアクセスすると
ヘッダーラインにSIGN OUTのアイコンが付いた設定ページが開きます。
次にEDIT STATIONにてTinyGS Consoleに画像や説明文章を追加したり、アンテナのバンド幅を表示
(スライダーがシビアで使いずらい)等の編集が出来ます。編集後は保存してSIGN OUTで終了します。
TinyGS_WebEdit1.gif

尚、現在利用可能なコマンドは次のとおりです。
/mqtt - MQTT アカウントを作成または編集します
/stations - ステーションのステータスを表示します
/delete - データベースから 1 つのステーションを削除します。
/weblogin - Web のログイン リンクを生成します。

二つ目の地上局を構成した機会に備忘録を兼ねて掲載しました。
未だ誤りや不足箇所があると思います。順次訂正しながら加筆したいと思います。


皆さまの参考になれば幸いです。
by Paradise exJH3VSR


決勝トーナメント進出おめでとうございます

サッカー ワールドカップ カタール大会 決勝T進出おめでとうございます

2017年の作品ですが、手回しウエーブ人形を再掲載して応援致します。
Wave1.jpg

動画をご覧下さい。


by Paradise

LoRa衛星のテレメトリーを受信一週間の結果

LoRa衛星のテレメトリーを受信開始から一週間が経ちました。

下のグラフは完全にテレメトリーパケット信号をコンファーム出来た数を表しています。
最初の3日間はダイポールアンテナを使用中、4日目にグランドプレーンアンテナに変更した結果
アンテナの違いによる受信衛星数が大幅に増えたことが判ります。
Packets_22Nov29.gif

下のマップの黄色い丸印が、コンファームされた時の衛星位置で、地上局(私)からの距離が1881km、
仰角が8.37°、方位が288.08°と記録されています。
また、赤茶色の丸印は、受信出来たがノイズ等でCRCエラーが出た場合の衛星位置です。
尚、この衛星のLoRa出力信号が500ミリワットと微小ですが、スペクトラム拡散通信の利点が生かされ、
1時間程で作った簡単なGPアンテナにも拘らず、この長距離を受信出来たことに感激しています。
Map_22Nov29.gif



皆さまの参考になれば幸いです。
by Paradise exJH3VSR


アンテナの違いが鮮明

昨日、DPアンテナからGPアンテナに交換した結果
GPアンテナの特性である放射角度の低さにより、衛星を捉える仰角が低くなりました。
その結果、衛星までの距離が1679Kmと伸び、仰角11.87°となりました。
反面、何時も同時に受信してた国内の地上局ではなく、中国や台湾の地上局と同時に
受信出来るようになり、受信回数も増えました。

簡単な八木アンテナを作り、自動追尾させればもっと多くの衛星から受信出来るのだが!
それには追尾装置を作らねば! と80近い爺さんの夢が広がります。

下は今朝受信した衛星Norbyのデータです。(受信時間はJSTです)。
Norby_221125.gif



皆さまの参考になれば幸いです。
by Paradise exJH3VSR



アンテナを交換しました。

Lor衛星受信用アンテナを交換

今朝まで使っていた70Cmバンド用120°DPアンテナです。大きく見えますが、エレメントの一辺が165㎜、太さ2㎜です。
50数年前にアマチュア無線を始めた頃、よく自作したアンテナの工作を思い出し久しく楽しんでいます。
LoRa_DP_Antenna.jpg

今朝から注文してたエレメント用の2㎜径真鍮丸棒が届いたので、1/4λのグランドプレーンアンテナを作りました。
手持ちの金メッキ仕様RCAコネクタを利用し、165㎜長ラジエータ1本と184㎜長ラジアル4本を半田付けして
簡単に作り上げました。DPアンテナとの比較は明日の朝になれば判るので楽しみです。
未だテスト中なのでアンテナ下のビニール袋の中にLoRa受信用アダプターを入れてます。
DPとGPアンテナの性能を比較して結果の良い方を使いますが、それまではビニール袋で代用です。
LoRa_GP_Antenna.jpg

RXデバイスの収納をビニール袋から、ダイソーの容器に変更しました。
12月6日追記:受信アンテナの直ぐ近くに受信機を置くのが伝送ロスが少なく感度の低下を防ぐ良い方法です。
容器の下から出ている線は、デバイスに電源を供給するためのUSBケーブルで5V電源アダプターに接続してます。
20000Kmもの彼方から届く微弱な人工衛星の電波を受信し、PCに衛星の状態を表示するなんて、ロマンですね!
433Mhz_antenna201.jpg




皆さまの参考になれば幸いです。
by Paradise exJH3VSR

今朝は2つの衛星を受信出来てました。

今朝は、FossaSat-2E12とNorbyがエラーなしで受信出来てました。
下は、FossaSat-2E12の受信データです。
20221123_FossaSat-2E12.gif



皆さまの参考になれば幸いです。
by Paradise

人工衛星からの電波を受信してみました。

TinyGSに参加と人工衛星のテレメトリーを受信
現在、国内には私を含めて地上局が4局登録されています。ヨーロッパが多いですね!
人工衛星に興味のある方は、TinyGSを検索すればホームページが見れます。
TinyGS_001.gif

LoRa受信機
LoRa:スペクトラム拡散通信を利用した超小型の人工衛星のテレメトリーを受信するには、マイコンと受信機を
組み合わせた製品を購入するのが、一番の近道です。(参考画像はHeltec LoRa 32 V2です)。
Heltec_lora32_V2.gif

アンテナ
昨日、11月21日の午後に簡易的な120°V型ダイポールアンテナを自作してガレージの屋根に設置
LoRa_433Antenna.jpg

受信結果
今朝、受信履歴を確認すると超小型衛星FossaSat-2E1のテレメトリーが受信されていました。
通信距離は737kmでした。
尚、exJH3VSRは50年余し前から使っていた私のアマチュア無線コールサインですが、今は閉局中です。
地上局の受信データは、TinyGSのホームページにて自由に閲覧出来ます。
TinyGS_001_A.gif

おわりに
テスト用のアンテナは地上高が低く、利得が少ないDP(ダイポール)なので多くの衛星を受信できません。
もう少し高さを上げ、無指向性のGP(グランドプレーン)アンテナを自作して設置予定です。

20年ほど前、超楕円軌道のAO13アマチュア無線衛星を自作の自動追尾装置を使って追いかけてた頃を
思い出しながら遊べています。



皆さまの参考になれば幸いです。
by Paradise

皆既月食

今宵の皆既月食
月に隠れる寸前の天王星が写ってました。
moon1.jpg
撮影機材:コーワスコープ32倍+オリンパスEM-1 MKⅡ+25㎜ F1.8レンズ
(デジスコ撮影)
手押しシャッターのため少しブレ出ました。
2022年11月8日 by Paradise

テオ・ヤンセン展大阪 開催中

現在、大阪南港ATCにてテオ・ヤンセン展が開催中です。(9月25日まで)
開催を機会に、これまでに制作したテオヤンセンメカニズム応用作品を紹介します。

2014年の作品1 : ウインドビースト
特長:サボニウス型風車を利用したウインドビーストで風向きに関係なく前進します。
windbeest1B.jpg

2014年の作品2 : ラジコンビースト
タミヤ模型のギヤモータを左右に設け、無線リモコンにて自由自在に動かせます。
RWB02.jpg

2014年の作品3 : ソーラービースト
ソーラービースト:タミヤ模型のソーラーパネルを利用して太陽光で動きます。
SolarBeest1.jpg

2014年の作品4 : 12足アクリルビースト
アクリル板をCNC加工して製作:紐で引くだけで滑らかに動くのが特徴です。
TJ3_1.jpg
動画をご覧下さい。


2014年の作品5 : 超音波センサー自律歩行ビースト
超音波センサーにより、障害物を感知して自律歩行しますが、赤外線リモコンで手動操作もOKです。
TJ4_1.jpg

2014年の作品6 : ウインドビースト2
作品4にサボニウス型風車を取り付け、ウインドビーストに改造した作品です。
WindBeest2.jpg

2016年の作品1 : 超音波自律歩行ビースト2
この作品は、超音波センサーによる自律歩行と自作WiFiリモコンで手動操作が出来ます。
TJ5-01.jpg

2016年の作品2 : 赤外線センサー自律歩行ビースト
アクリル板をCNC加工して製作、スケールを約1/2にした小型モデルで、赤外線センサーにて自律歩行と
WiiヌンチャクをWiFiに改造したリモコンで手動操作が出来ます。
TJ8_02.jpg

2019年の作品1 : 自律歩行ビースト
2016年作品1のWiFiリモコンとコントロール回路をWiFiからBluetooth BLEに改造した作品です。
BLE_TJ5.jpg

2020年の作品 : BLE RCビースト
2020年にシリーズで掲載した作品です。動力にロータリーサーボモータを使った作品で、リモコンにBLEを使い
コントロール回路にESP32とM5Stack ATOM Liteの2種類を以下のページにて紹介しています。
参照ページ:Theo Jansen Mechanism series No.9 その1~7
TJ9_ESP32_BLE_1.jpg


サイドメニューのカテゴリーにてテオヤンセンメカニズムを選択すると過去の記事を
ご覧頂けます。 皆さまの参考になれば幸いです。
尚、酷暑のため夏休み中ですが、涼しくなったら工作を再会します。
by CNC Paradise

テーマ : 工作の作品
ジャンル : 写真

手回し発電機で動く歩行ロボット

夏休みに遊びに来る4歳の孫におもちゃを作りました。

この作品を作る切っ掛けは、先日7月9日(土)に毎日放送テレビで放映された「三度の飯よりアレが好き」
姫路市の上橋智恵さんが出演され、電子工作や3Dプリンターを使った作品が沢山紹介されました。
作品の冒頭に紹介されたのが、TTモータを使った発電機と二足歩行ロボットでした。
5~6年前に買ったTTモータが使わずに残っているのを思い出し、月末に孫がやって来るので手持ち部品を集め
早速、CNC加工の設計から始めて3日間で作り上げました。 ヒントを頂いた上橋さんに感謝いたします。

先ずは動画をご覧下さい


TT-Robot1.jpg

設計・組み立て図 何れの画像もクリックすると拡大します。
このロボットは、2組のTTモータの片方を発電機として使い、ロボット側のモータを回転させる仕組みです。
尚、使用したTTモータには減速比が1:48の標準品を使いました。
モータの取り付けにはM3ビス、その他の部品取り付けには2X8㎜のタップタイトを使いました。
可動部は、アクリル板に3.2㎜の穴を開け、外径3㎜のアルミチューブを3.2㎜の長さに切断してタップタイトにて
M2平ワッシャー介して固定しています。
発電機側は、厚さ10㎜のヒノキ板を加工したグリップにTTモータをネジ止めしただけですが、ロボット側と連結する
平行線が抜けないように、インシュレータで固定するための2㎜径穴を2つ開けています。
TT_Motor_Robot _kumitatezu

厚さ5㎜アクリル板の切削パーツ図
CNC加工用のDXFファイルを用意しましたが、DXFファイルをブログに添付出来ないのが残念です。
コの字型部品が左右の足です。
四角い部品がスライド部のスペーサーで、左右のネジ穴の大きさが異なります。
丸い3個の部品が発電機のハンドルボスとロボット側のクランクホイールで、同じサイズです。
何れも外径22㎜で、中心から15㎜の位置に1.7㎜径の貫通穴を対角に設けています。
発電機のハンドルのボス側は、モータ軸が入る穴を2.5㎜のポケット加工を行い、中心穴は2㎜でモータ軸に
タップタイトを使って固定して抜け止めをしています。
ハンドルの先端側には、2.5㎜下穴にM3タップを切り、直径10㎜の丸棒を長さ13㎜に切断し、中央に3㎜の穴を
貫通してツマミを作り、M3X20㎜のボールトナットで軽く動くように固定しています。
t5_Parts.gif

厚さ3㎜アクリル板の切削パーツ図
2本の長い部品がロボットの脚で長さが76㎜、幅が10㎜です。
上部に3.2㎜幅、長さ約20㎜のスライド穴を設けています。クランクへの取り付け穴は下から25㎜の位置です。
上側の部品は、スライド部のアームで幅が22㎜、高さが33㎜で、t5スペーサーを介してモータのネジ穴へ35㎜長の
M3皿ネジを使って固定しますが、アームの片方には皿穴加工が必要です。また、反対側のアームとスペーサーに
2.5㎜径下穴にM3タップを切っています。 注意:鍋頭ネジやナットは脚部運動の邪魔になるので使えません。
t3_Parts.gif

参考画像1  のっぺらぼうの顔に黒いビニールテープを貼り付けてパンダ風に手直ししました。
TT_Robot4.jpg

参考画像2
TT_Robot3.jpg

RGB LEDの配線図
発電機のハンドルを右回転すると前進し、左回転するとバックします。発電機とロボットのモータは互いの電極を
1m程の赤黒平行線で直結しています。
下の配線図のA/Bとモータの電極を配線しますが、前進時にくまさんの目が緑色に点灯し、後退時に赤色に
点灯するようにしています。
発電機の回転方向により、極性が反転するので電圧降下の少ないショットキーバリアダイオードを使い、
LEDの発光が暗くなるのを防いでます。
5㎜径RGB LEDは、5年ほど前に50個入りを格安で買った物で型番が不明ですが、カソードコモンです。
ここでは、電流制限用の抵抗を省略しています。各部品の配線はくまさんの目の裏側で行いました。
LED_circuit.gif


追記:発電ロボットを調べたら、タミヤ模型から同じような製品が販売されていました。

皆さまの参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

初めてのRC模型飛行機の続編

RC模型飛行機製作の要点
BLE_Plane1.jpg

機体の素材について
超軽量なデプロンシートやEPPシートを入手することが、軽量な機体を作る秘訣のようです。
私が入手した製品は、「住化 発泡PPシート スミセラー」 厚さが3㎜のA3サイズですが、思ったよりも
発泡密度が高くて重い製品でした。
仕方なく主翼を軽量なプラダンに置き換え、胴体をトラス構造にして軽量化を図り、胴体の上下に3㎜径の
木の丸棒を接着補強して何とか飛ばせました。

主な機材
46㎜プロペラ付きコアレスモータ:モータの直径約7㎜、長さ約16㎜(amazon 1セット 990円)
マイコン:ESP-WROOM-32Dモジュール(秋月電子通商1個 330円)
モータドライバーFET:NchMOSFET 30V 3.5A SSM3K329R (秋月電子通商 10個入 110円)
タクトスイッチ、スライドスイッチ、ソケット類等:手持ち品使用
Lipoバッテリー:モータ用3.7V500mAX1、マイコン用150mAX1

モータ・コントロール回路図
マイコンESP32モジュールは、主翼下側胴体に金属キャップが入る穴を開けて嵌め込んでいます。
モータドライバー用FET(米粒大)を0.8㎜薄型ユニバーサル基板の切れ端に組み込みました。
マイコンの電源は、Lipoバッテリーの出力をシリコンダイオードの順方向電圧降下を応用して簡易的な
手法により約3.3Vを得ています。
完成後もUSBシリアル変換モジュールを接続すれば、プログラムの変更が出来るようにしています。
BLE_ Plane

モーターのバランスについて
購入したコアレスモータは、精度が悪くて製品に大きなバラツキがありました。
双発の飛行機は、左右モータの出力が同じでなければ、左右どちらかへ旋回します。
左右モータに差がある場合は、出力の低い方に合わせて高い方のモータの出力をPWM制御にて下げます。
この作業は実際に、飛行機の重心点を紐で吊り下げ、左右にバランスが取れるポイントを探します。
しかし、差が余りに大き過ぎる場合は使えないので複数購入して出力が釣り合った製品を選ぶ必要があります。

RC用BLEコントローラ
送信機にWiiヌンチャクのジョイスティック部とESP32を組み合わせてBLE(Bluetooth Low Energy)通信を行う
コントローラです。以前に何度か紹介しましたが再掲載します。しかし、通信距離が短い短所があります。
尚、Wiiヌンチャクの中古品がメルカリに数百円程度で出品されていたのを利用しました。
BLE_Controller2N1.jpg

ESP32 BLEコントローラの回路図
注意:Wiiヌンチャクには、純正品そっくりの中国製が多く出回っていて配線の色に違いがあります。
また、純正のWiiヌンチャクには白タイプと黒タイプがあり、これらはsendアドレスが異なります。
また、純正以外は製品の色に関係なく、sendアドレスが異なる場合があり外見では判別できません。
BLE_Controller2.gif

ESP32_BLE_Controller.html
上記リンクにてESP32 BLEコントローラのプログラムコードが参照出来ます。
白タイプヌンチャクを基にしたプログラムですが、53行目:void nunchuck_init () 内の55.56目の注釈に
黒タイプのアドレスを記したので参考にして下さい。

ジョイスティックの操作と飛行機の動き
Wiiヌンチャクのジョイスティックは、I2C通信を介してESP32へ.X/Y共に0~255の値を出力しますが、ハード的な
制約により実際には40~210付近を出力し、中間点も128付近で数%の個体差があり、各々実測に合わせて
プログラムを変更する必要があります。

Y方向(前後)の操作=推進力を調節
マニュプレータから指を放した中間点がPWM出力の1/2出力となり、うっかり指が離れても出力が0に落ちること
が有りません。上昇させるにはフルパワーまで出力し、着陸や高度を下げる場合はゆっくりと0に戻します。

X方向(左右)の操作=左右旋回を調節
マニュプレータを左側へ傾けると角度応じて左側のモーターが減速して左へ旋回、右に傾けると角度に応じて
右側のモータが減速して右へ旋回する仕組みです。 尚、左右(X軸)の中間点には±10程の不感帯を設け、
その範囲内では直進に影響を与えずにフラツキを防止しています。

ESP32_BLE_plane.html
上記リンクにてESP32 BLEコントローラを使った場合の飛行機側のプログラムコードが参照出来ます。
補足:wiiヌンチャクのX/Y出力には個体差が有あります。ソースコード110~113行目のprint文を有効にして
実測値を調べます。 ここに使ったコントローラでは、x_valの実測値が、min=22,max=207,center=123
y_valの実測値が、min=31,max=212,center=131なのでこの値に合わせてプログラムしています。
その他、各項目には注釈を付けていますので参考にして下さい。

おわりに
80歳近い爺さんが、初めてのRC飛行機に挑戦して何とか飛ばせて感動しています。
一人で飛行機の操縦と撮影が同時に出来なく、動画をご覧頂けないのが残念です。
これからも、作ることの喜びを求めていろんな工作に挑戦したいと思います。
皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

一休みにpython

梅雨時の天候で模型飛行機のテストを一休み。

時間つぶしにpythonプログラミングの勉強にとWebを検索してたら、日経XTECHに3Dゲームを作る特集を
見付けました。 初心者にも出来るように必要なアプリのダウンロード方法から詳しく紹介されてます。
興味のある方はご覧下さい。 (全文を読むには無料会員登録が必要です)。
日経XTECH python 特集記事を開きます。

私がこの特集記事を基に作成した3D迷路ゲームです。
エディターを使ってプログラムを一行ずつ書くので勉強になります。
3d_maze_GAME.jpg

皆様の参考になれば幸いです。
by Paradise

初めてのRC模型飛行機

初めてラジコン式模型飛行機を作りました。

主翼の長さ約40センチ、胴体長さ約30センチ、ラジコンにはESP32を使ったBLE(Bluetooth Low Energy)
を送受信に使いました。 直線距離で半径30mくらいは安定した通信が出来そうです。
この飛行機は、主翼の左右にプロペラを配置し、左右モータの回転数を変化させて旋回する仕組みです。
そのために、旋回用に垂直尾翼のラダーを操作するサーボモータを必要としません。
BLE_Plane1.jpg

素材に発泡PPシートを使いましたが、購入した製品の発泡率が低くて重かったので主翼をプラダンに変更と胴体の
軽量化により何とか総重量が60gに収めまたのですが、滑走用の車輪を追加したら5g増えてしまった。
天井から紐で吊り下げてテストの結果、飛び上がる事を確認したので、次はお天気の良い日に広場でテスト飛行を
行う予定です。しかし、一人では同時に操縦と動画撮影が出来ないのが悩みです。
BLE_Plane2.jpg

バッテリーには3.7VのLipo 500mAhを1個の予定でしたが、購入してから3年余し使ったので容量が低下していて
マイコン電源と共用するとESP32の電圧低下により、ダウンするので仕方なく別電源として150mAhを追加しました。
モータはアマゾンで購入した46㎜プロペラ付きのコアレスモータを一組使いました。
しかし、コアレスモータの出力にはバラツキが多く、左右モータに出力差が少ない製品を選ぶ事が肝要です。
余り出力差が大きいとPWM制御で吸収できなく、片方に偏り旋回するのでコントロールが難しくなります。
BLE_Plane3.jpg

ESP32 BLEコントローラー
以前から何度か紹介のWiiヌンチャクから取り出したジョイスティック部を使った専用コントローラを今回も使いました。
このコントローラーの代わりとしてスマホにBlynk Appを使っても同様にコントロール出来ます。詳細は次回より!
BLE_Controller2N1.jpg

次回から作り方の詳細を記す予定です。

皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

迷路探索ロボット (Maze path search robot) その5(プログラム編)

MSR_02.jpg

参考プログラムについて
迷路ロボットをweb検索すると多くの製作例や解説がヒットします。 私が参考にさせて頂いた記事は
MJRoBot(Marcelo Rovai)さんが6年前に発表されたMaze Solver Robotです。
プログラムを公開して頂いたMarcelo Rovaiさんに感謝申し上げます。
このロボットの動作やプログラムが詳しく解説されているので是非ご覧下さい。

上記のリンクを開き記事を最後まで読まれた後、興味のある方はページの最後の方でプログラムが
ダウンロード出来るので実行して下さい。
zipファイルを解凍すると次の2種類のArduinoプログラムコードが見れますが、どちらも基本機能は同じです。
①smart_MJRoBot_Maze_Solve_Left_Hand_Algorithm
②smart_MJRoBot_Maze_Solve_Phase_2_with__Optimization

私は②のsmart_MJRoBot_Maze_Solve_Phase_2_with__Optimizationを参考にました。
ファイルを開くと次のように6個のファンクションに機能がまとめられているのが解ります。
①smart_MJRoBot_Maze_Solve_Phase_2_with__Optimization:メインプログラム
②generalFunctions:サーボモータとBluetoothのコントロール関係(不使用)
③mazeFunctions:迷路探索記録関係
④motorFuntions:モータ関係
⑤sensorFuntions:センサー関係
⑥robotDefines.h:ヘッダファイル 関数設定関係(メインプログラムに統合)

私はハードウエアの違いに合わせ、プログラムを変更して使わせて頂きました。
ハード的な相違点
モータ : ロータリー式RCサーボモータ ⇒ 1回転200ステップのステッピングモータ
モータ制御 : サーボモータの制御  ⇒ ステッピングモータの制御
(ステッピングモータの制御が正確なのでPID制御を不使用)
フォトセンサー : センサーユニット7個使用 ⇒ センサーモジュール5個を使用した基板を手組。
LO、RO(左右外側センサー:コースの停止ラインや各分岐の状況を読み取る)
LI、RI(左右内側センサー:ストレート走行時のラインに対する左右へのブレを読み取る)
CT(中央センサー:常時ラインを監視、他のセンサー情報と組み合わせてアクションを実行する)
(フォトセンサーのアナログ出力をAIではなくDIに入力し、デジタル入力のスレッショルド(しきい値)により、
コース面の白色とテープの黒色を 識別する方法を使いました)
Bluetooth : Arduino Nano + HC-06Bluetoothモジュール ⇒  Bluetoothを不使用

迷路探索ロボットのプログラム
注意:ハードウエアの仕様が変わるとプログラムを修正しないと使えません。
(長文になるので各ファンクションをクリックすると別ページにてプログラムコードが開きます)。
1)main_Function
ヘッダーファイルを使わずに統合しました。
注意:メインプログラムのディレクトリー下に各ファンクションのプログラムを置きます。

主な設定箇所
①ライブラリーのダウンロードとインストール
1. #include "BasicStepperDriver.h"
2. #include "SyncDriver.h"
ここでは、BasicStepperDriver.h及びSyncDriver.hを使ってスッテプモータを制御します。
ます、ステップモータドライバーのライブラリーを次のリンク内のアイコンCode▼からZipファイルをダウンロードし、
Arduino IDEのスケッチから⇒ライブラリーのインクルード⇒Zip形式のライブラリーをインストールします。
GitHubからライブラリーをダウンロード

②ハードウエア―の定義
12. #define MOTOR_STEPS 200 // 1回転のステップ数を設定
13. #define L_Motor_RPM 40 // 左モータの1分間の回転数を設定:走行速が決定します。
14. #define R_Motor_RPM 40 // 右モータの1分間の回転数を設定:走行速が決定します。
15. #define MICROSTEPS 16 // モータドライバーA4988のマイクロステップ数の設定
16. #define ENB_Pin 19 // ESB32のGPIO19をイネーブルに設定(以下GPIOのピン番号設定は任意)
17. #define L_Motor_DIR 26 // ESB32のGPIO26を左モータドライバーA4988のDIRに設定
18. #define L_Motor_STEP 33 // ESB32のGPIO33を左モータドライバーA4988のSTEPに設定
19. #define R_Motor_DIR 32 // ESB32のGPIO32を右モータドライバーA4988のDIRに設定
20. #define R_Motor_STEP 25 // ESB32のGPIO25を右モータドライバーA4988のSTEPに設定

③ホイールの計測値を設定
注意:ホイールの直径と左右ホイールの間隔(トレッド)を正確に測定して設定します。
ここが正確でないと移動距離や旋回角度が狂ってしまいます。

26. float wheel_dia = 68.9; // ホイール(車輪)の直径を記します。
27. float wheel_base = 74.0; // 左右ホイールの間隔(トレッド:タイヤの中心点間の距離)を記します。
28. int steps_rev = 3200; // ステップモータ1回転のスッテプ数×マイクロスッテプ数(200X16)

④ラインセンサーの設定 // 各GPIOのピン番号設定は任意です。
35. const int lineFollowSensor0 = 18; // LO(左外側センサー)
36. const int lineFollowSensor1 = 5; // LI(左内側センサー)
37. const int lineFollowSensor2 = 17; // CT(中央センサー)
38. const int lineFollowSensor3 = 16; // RI(右内側センサー)
39. const int lineFollowSensor4 = 4; // RO(右外側センサー)

46. const int ledPin = 27; // LEDインジケーター
47. const int buttonPin = 23; // スタートボタン

2)maze_Function
オリジナルに準拠していますが、実演を見た家族にゴールした後に手で戻すの?との指摘に発奮!
通常ゴール後にスタートポイントへ手で戻しますが、自動で戻るプログラムを90行目からの
mazeEnd()関数に追加しています。
しかし、ゴールからスタートポイントへ左手の法則に従って戻るルートは、その後にスタートする最短ルートの
逆回りを走行します。結果、正解を先に示すことになり、手で戻した方が良かったのか?と悩むところです。

maze_FunctionのmazeSlove()関数では、sensor_Functionから得たmode信号により、分岐点の状況を
把握してモータを制御すると共に分岐点の状況をR・L・B・Sの4種類の分岐データとして記録し、
RLBSの法則に従って最短経路を計算しながらゴールまで走行します。

32行目からのcase RIGHT_TURN:と56行目からのcase LEFT_TURN:では、T字路の入り口で平行ラインに
対して車体が少し斜めに侵入すると左右に迷う現象が出ました。この対策として一度ストップして更に
5㎜前進させてもう一度センサーを読み取り、確認するようにプログラムを変えています。

131行目からのsimplifyPath()が短絡経路を計算する関数です。
注意:217行目からのvoid mazeTurn (char dir);にも設定箇所があります。
ここでは、スタートポイントから最短絡ルートを走行する場合、各分岐点に達するとR・L・B・Sのターン信号が
出され、目的のゴールまで最短ルートを案内します。 ターン信号は1行目のmazeSolve(void);で設定した
Turnright();、Turnleft();、Forward();、Straight();の値に準じます。
詳細は、Maze Solver Robotのチュートリアルをご覧下さい。

3)motor_Function
BasicStepperDriver及びSyncDriverを使ったステッピングモータコントロールに置き換えています。
main_Functionで定義したホイールの直径とホイールベースに基づいて移動距離や旋回角度が計算されます。
ステッピングモータの制御
前進のForward();は移動距離をミリメートル単位設定します。0で停止、例えば30㎜前進;の場合は
Forward(30)と記します。この値はホイールの中心線からフォトセンサーまでの距離にほぼ等しく
センサー基板の取り付け位置により異なります。
左右旋回のTurnright();、Turnright();は角度を記します。直角の場合は90を、Uターンは180と記します。
しかし、スピードが速いとストップを掛けた位置よりも慣性により進むので補正が必要です。
注意:各設定は実際にコースを走らせ、カットアンドトライで調整を行います。

4)sensor_Function
フォトセンサーの読み取り値を各コマンドに変換。(不要な部分を省略しています)
(LFS[]は行が長くなるのでlineFollowSensor[]を略しました)
2. LFS[0] = digitalRead(lineFollowSensor0); // Left out side sensor
3. LFS[1] = digitalRead(lineFollowSensor1); // Left in side sensor
4. LFS[2] = digitalRead(lineFollowSensor2); // Center sensor
5. LFS[3] = digitalRead(lineFollowSensor3); // Right in side sensor
6. LFS[4] = digitalRead(lineFollowSensor4); // Right out side sensor
ここで読み込んだセンサーの状態を、次のif文ににより5種類のコマンドに変換します。
①CONT_LINE:全てのセンサーが1=黒の場合
②RIGHT_TURN:右外側のセンサーが1=黒の場合
③LEFT_TURN:左外側のセンサーが1=黒の場合
④NO_LINE:全てのセンサーが0=白の場合
⑤FOLLOWING_LINE:中央センサー及び左右何れかの内側のセンサーが1=黒の場合
尚、main_Functionの4行目から10行目にこれらの文字列を数値comndに変換を定義しています。
4. # define STOPPED         0
5. # define FOLLOWING_LINE      1
6. # define NO_LINE        2
7. # define CONT_LINE       3
8. # define POS_LINE        4
9. # define RIGHT_TURN     5
10. # define LEFT_TURN      6

走行速度について
その1でも述べましたが、このロボットは2020年8月に高精度お絵描きロボットとして製作したものを
少し改造して使っています。
自走しながら文字や図形を描くため、モータを1分間に7回転とゆっくりとした速度で動かせていました。
ここでは、迷路探索に適した速度として1分間に40回転に設定していますが、60回転位いまで可能です。
しかし、ステッピングモータが重いのでスピードを上げ過ぎると慣性が増し、細いOリングのタイヤでは、
ブレーキを掛けてもスリップして停止位置よりも余分に進むので設定が難しくなる弱点が有ります。
また、同様に90度旋回やUターンの180度旋回時も角度をオーバーし、その分の微設定が必要となります。
添付のプログラムコードを見れば、その辺りの設定差が解ると思います。
競技に使う場合は、タイヤにOリングを使わず、グリップが優れたタイヤを使うなどの対策が必要です。

おわりに
迷路ロボットはハードルの高い工作ですが、その分面白味が多いと思います。
説明不足が多々あると思いますが、迷路ロボットに興味のある方の参考になれば幸いです。
市販部品を多く使った3号車も完成してますが、プログラムの基本は同じなので説明を省略しました。
最後までご覧頂きまして有難うございました。

最後にもう一度動画をご覧下さい。


皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

迷路探索ロボット (Maze path search robot) その4

プログラムについての予定でしたが、その前に3号機を作りました。
先に紹介の2号機には、自作のホイールやESP32マイコンの直付けなど工作に難易点があります。
各画像はクリックすると拡大し、鮮明に観れます。

超小型のマイコンXiao 2040を使用
3号機には市販のホイールや新しい超小型マイコンSeeed Stadio製のXiao 2040を使い、汎用性を重視しました。
しかし、何時も利用の秋葉原の通販サイトで購入したXiao 2040はAruduino環境でのデジタルIOが機能せず、
予想外に時間を費やしました。
Maze_2040_1.jpg

動作確認のためにRspberry pi Picoを仮付け
販売店には交換を依頼してますが、時間が掛かりそうなので同じ2040系マイコンを搭載したRspberry pi Pico
仮付けして動作の確認を行いました。
追記;5月3日に交換品と差し替えて完動を確認し、Rspberry pi Picoを撤去しました。
Maze_2040_2.jpg

完成後はこんな感じになります。
3号機の部品は、昨年10月に紹介の倒立2輪ロボットESP32 Evo2タイプロボットを作る その2
を改造して利用しました。電池はデジカメ用リチウムイオン電池を流用しています。
カメラ用電池以外の主要部品は全て秋月電子通商の通販で購入できます。
Maze_2040_3.jpg


次回はプログラムについて掲載予定です。

皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

迷路探索ロボット (Maze path search robot) その3

MSR_03.jpg

動画が出来ましたのでご覧下さい。2つのコースを収録しました。
日本語の字幕を付けました。

次回はプログラムについて掲載予定です。

皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

迷路探索ロボット (Maze path search robot) その2

迷路探索ロボットの紹介

迷路解決ロボットを検索すると多くのロボットには、DCギアモータやロータリーサーボモータを使った
作品などが多数紹介されいます。興味のある方は参考にして下さい。
今回の作品は、前回も少し触れましたが約2年前に作ったお絵描きロボットを改造して再利用しました。

主な構成部品
モータ:39㎜タイプのステッピングピングモータ
モータドライバー:A4988
マイコン:ESP32 Wroom32 (今回は無線通信を使わないのでArduino nanoなどでも可)
フォトリフレクタ:LBR-127HLD(秋月電子1個50円)
車体とホイール:アクリル板にて自作(ここでは正確さが求められます)

画像① 
ステッピングモータは、幅60㎜、長さ100㎜、厚さ2㎜のアクリル板の前方に取り付けています。
赤外線センサーにはLBR-127HLDを5個ユニバーサル基板に組み込み、モータの前側に取り付けています。
ホイールですが、左右の直径にバラツキが有ってはダメなのでアクリル板で自作しました。
ソフト編で説明予定ですが、BasicStepperDriverを使う関係により、ホイールの直径とトレッド(左右の間隔)が
正確でないと進む距離や回転角度が狂ってしまうからで、ホイールにブレが有ってもNGです。
組立時、車体の中心線に対して左右ホイールの位置が対称、及びIRセンサー基板の中央センサーの位置を
一致させることが大事です。
MSR_03.jpg

画像② 
制御基板は、お絵描きロボットの基板を流用ですが、モータの横から上側に取り付け方法を変更しました。
電池はデジタル一眼カメラ用の予備を使用。アクリル板をCNC加工して電池ホルダーを作りモータの
後ろ側に載せました。
MSR_04.jpg

画像③
裏側から見るとIRセンサー基板とボールキャスターが見えるだけです。
センサー基板は、ユニバーサル基板にセンサーモジュールをホール3個分を開けて等間隔に配置しています。
また、7ピンのL型ピンヘッダを取り付け、コネクターを介して制御基板と繋げています。(配線方法は回路図参照)
ボールキャスターにはタミヤ模型のNo.144を使いました。
MSR_05.jpg

回路図
電源に手持ちのデジタルカメラ用リチウムイオン電池を使いましたが、入手し易いニッケル水素充電池でも可能です。
ここでは、7.4VをMT3608昇圧型DC-DCコンバータを使い、12Vに昇圧してA4988モータドライバーへの印加及び
ROHM社製三端子型DC-DCコンバータBP5293-33にてESP32マイコン用の3.3Vを得ています。
今回は、WiFiやBluetoothの無線通信を使わないが、ESP32が載った使いまわしの基板をそのまま使用しました。
新たに作る場合は、Arduino nano等を使うと良いでしょう。
MSR_Circuit.gif

ステッピングモータを使った場合の長所と短所
長所:キビキビと動きが速く正確です。
短所:①モータが高価、②重い



動画を準備中
迷路探索の様子は文章で説明するよりも動画を見て頂くのがよく解ります。
現在、動画の準備をしていますので今しばらくお待ちください。

皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

迷路探索ロボット (Maze path search robot) その1

迷路探索ロボットの概要
先に作ったライントレースカーを発展させ、迷路を走らせて最短経路を探索するロボットを作りました。
1台目はライントレースカーのフォトセンサーアレーを3個から5個に変更しただけですが、少し安定性に
欠けるので2台目を作りました。OSTRお絵描きロボットの過去記事を参照
OSTR_No3_12.jpg

2台目には2020年8月に製作したステッピングモータを使った高精度の「OSTRお絵描きロボット」を
改造して作りました。
MSR_02.jpg

迷路コース
先のライントレースカーと同様にスチロールパネルに電工用ビニールテープを貼り付けて迷路を作りました。

ロボットの動作
左下のStartポイントから出発して「左手の法則」に従って分岐点を辿り、右上のFinishポイントまで自走します。
通過した分岐点を記録して最短経路を自動計算します。
コース中のテープが途切れた場所ではUターンし、コースには余分な部分が無く全てのテープ上を辿ります。

次にロボットをStartポイントに戻して再スタートすると、今度は記録されたデータにより最短経路を通って
Finishポイントへ自走します。 
今はStartポイントまで手で戻していますが、Finishした後に自動で戻り再スタートするように改良の予定です。
MSR_01.jpg



次回からロボットの説明・動画・プログラムについて順次掲載予定です。


皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

ライントレースカー ソフト編 その2

Micro Pythonを使ったプログラミング
マイコンにRaspberry pi Picoを使い、Micro Python言語を使う場合の作成例です。
Thonnyのインストール方法は、過去記事「Thonny IDEを使ってラズピコをプログラミング」を参考にして下さい。

Thonny.jpg

注意点
①18行目からのIN1.duty_u16(256*75)のPWM値は0~65535を入力しますが、桁数が多いのでArduinoの
8ビットPWM値に合わせ、直感的に解り易くするために16ビットを半分に分けて256*xxxと記しています。
②42行目からの valueL = round(sensorL.read_u16()/256)IRセンサー読取り値をround関数でまとめ、更に
256で割り、見かけ上のしきい値をArduinoの場合と同様にしました。


  1. from machine import ADC, Pin ,PWM
  2. import utime
  3.  
  4. sensorL = machine.ADC(26) # Left GPIO 26
  5. sensorC = machine.ADC(27) # Center GPIO 27
  6. sensorR = machine.ADC(28) # right GPIO 28
  7. IN1 = PWM(Pin(6)) # GPIO 6
  8. IN1.freq(1000)
  9. IN2 = PWM(Pin(7)) # GPIO 7
  10. IN2.freq(1000)
  11. IN3 = PWM(Pin(8)) # GPIO 8
  12. IN3.freq(1000)
  13. IN4 = PWM(Pin(9)) # GPIO 9
  14. IN4.freq(1000)
  15. def forward(): # 前進
  16.     IN1.duty_u16(256*75)
  17.     IN2.duty_u16(0)
  18.     IN3.duty_u16(0)
  19.     IN4.duty_u16(256*75)
  20. def turnleft(): # 左旋回
  21.     IN1.duty_u16(0)
  22.     IN2.duty_u16(256*60)
  23.     IN3.duty_u16(0)
  24.     IN4.duty_u16(256*110)
  25. def turnright(): # 右旋回
  26.     IN1.duty_u16(256*110)
  27.     IN2.duty_u16(0)
  28.     IN3.duty_u16(256*60)
  29.     IN4.duty_u16(0)
  30. def stop(): # 停止
  31.     IN1.duty_u16(0)
  32.     IN2.duty_u16(0)
  33.     IN3.duty_u16(0)
  34.     IN4.duty_u16(0)
  35.     
  36. while True:
  37.     valueL = round(sensorL.read_u16()/256) # 左IRセンサー
  38.     valueC = round(sensorC.read_u16()/256) # 中央IRセンサー
  39.     valueR = round(sensorR.read_u16()/256) # 右IRセンサー
  40.     utime.sleep(0.05)
  41.     #print("L",valueL)
  42.     #print("C",valueC)
  43.     #print("R",valueR)
  44.     
  45.     if valueL <= 100: # しきい値 100以下は白(16ビットでは25600)
  46.         sensL = 0 # 白
  47.     else:
  48.         sensL = 1 # 黒
  49.     #print("L",sensL)
  50.     
  51.     if valueC <= 100: # しきい値 10以下は白0(16ビットでは25600)
  52.         sensC = 0 # 白
  53.     else:
  54.         sensC = 1 # 黒
  55.     #print("C",sensC)
  56.     
  57.     if valueR <= 100: # しきい値 100以下は白(16ビットでは25600)
  58.         sensR = 0 # 白
  59.     else:
  60.         sensR = 1 # 黒
  61.     #print("R",sensR)
  62.     
  63.     if sensL==0 and sensC==1 and sensR==0: # 前進
  64.         forward()
  65.     if sensL==1 and sensC==1 and sensR==1: # 前進
  66.         forward()
  67.     elif sensL==1 and sensC==1 and sensR==0: # 左旋回
  68.         turnleft()
  69.     elif sensL==0 and sensC==1 and sensR==1: # 右旋回
  70.         turnright()
  71.     elif sensL==0 and sensC==0 and sensR==0: # 停止
  72.         stop()



皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

ライントレースカー ソフト編 その1

Raspberry pi PicoをArduino IDEを使ってプログラミング
マイコンにRaspberry pi PicoとArduino Pro Microを使った2車体を作りましたが、どちらもArduino IDEを使って
プログラミングしました。何れの車体にも赤外線距離センサーを付けましたが、通常ライントレースカーは
2台同時に走らせることが無いのでその部分は省略しています。 前回までの製作編と併せてご覧下さい。
ArduinoIDE.jpg

Raspberry pi Picoのプログラミング例
Raspberry pi PicoをArduino IDEで使うには、ボードマネージャにRaspberry pi RP2040 Boards又は
Arduino Mbed OS RP2040 Boardsが、インストールされている必要があります。
Arduino Pro Microを使う場合はIOピン番号と名称が変わるだけで基本は同じです。

注意点
①21行目からのPWM信号は0~255の数値を入力しますが、大き過ぎるとスピードが出過ぎてカーブを
曲がり切れません。使用するギアモーターに合わせてカットアンドトライで決めます。
②54行目からはラインセンサーの読み取り値からコースの下地の白色とラインの黒色を識別する部分です。
しきい値は、使用するセンサーの種類、回路定数、取り付け方法、対物距離などによって出力値が変わるので
カットアンドトライで決めます。



  1. #define IN1 6 // GPIO 6
  2. #define IN2 7 // GPI0 7
  3. #define IN3 8 // GPIO 8
  4. #define IN4 9 // GPIO 9
  5. int Left_val;
  6. int Center_val;
  7. int Right_val;
  8. int L_SENS;
  9. int C_SENS;
  10. int R_SENS;
  11. void setup() {
  12.   Serial.begin(115200);
  13.   pinMode(IN1, OUTPUT); analogWrite(IN1 , 0);
  14.   pinMode(IN2, OUTPUT); analogWrite(IN2 , 0);
  15.   pinMode(IN3, OUTPUT); analogWrite(IN3 , 0);
  16.   pinMode(IN4, OUTPUT); analogWrite(IN4 , 0);
  17. }
  18. void Forward() { //前進
  19.   analogWrite(IN1, 75); // PWM 0〜255
  20.   analogWrite(IN2, 0); // PWM 0
  21.   analogWrite(IN3, 0); // PWM 0
  22.   analogWrite(IN4, 75); // PWM 0〜255
  23. }
  24. void Turnleft() { //左旋回
  25.   analogWrite(IN1, 0); // PWM 0
  26.   analogWrite(IN2, 60); // PWM 0〜255
  27.   analogWrite(IN3, 0); // PWM 0
  28.   analogWrite(IN4, 110); // PWM 0〜255
  29. }
  30. void Turnright() { //右旋回
  31.   analogWrite(IN1, 110); // PWM 0〜255
  32.   analogWrite(IN2, 0); // PWM 0
  33.   analogWrite(IN3, 60); // PWM 0〜255
  34.   analogWrite(IN4, 0); // PWM 0
  35. }
  36. void Stop() { //停止
  37.   analogWrite(IN1, 0); // PWM 0
  38.   analogWrite(IN2, 0); // PWM 0
  39.   analogWrite(IN3, 0); // PWM 0
  40.   analogWrite(IN4, 0); // PWM 0
  41. }
  42. void loop() {
  43.   Left_val = analogRead(26); // 左センサーの出力値 0〜255
  44.   Center_val = analogRead(27); // 中央センサーの出力値 0〜255
  45.   Right_val = analogRead(28); // 右センサーの出力値 0〜255
  46.   if (Left_val <= 100) { // しきい値 100以下は白
  47.     L_SENS = 0; // 白色
  48.   }
  49.   else {
  50.     L_SENS = 1; // 黒色
  51.   }
  52.   if (Center_val <= 100) { // しきい値 100以下は白
  53.     C_SENS = 0; // 白色
  54.   }
  55.   else {
  56.     C_SENS = 1; // 黒色
  57.   }
  58.   if (Right_val <= 100) { // しきい値 100以下は白
  59.     R_SENS = 0; // 白色
  60.   }
  61.   else {
  62.     R_SENS = 1; // 黒色
  63.   }
  64.   if (L_SENS == 0 && C_SENS == 1 && R_SENS == 0) { // Forwar 前進
  65.     Forward();
  66.   }
  67.   else if (L_SENS == 1 && C_SENS == 1 && R_SENS == 1) { // Forward 前進
  68.     Forward();
  69.   }
  70.   else if (L_SENS == 1 && C_SENS == 1 && R_SENS == 0) { // Turnleft 左旋回
  71.     Turnleft();
  72.   }
  73.   else if (L_SENS == 0 && C_SENS == 1 && R_SENS == 1) { // Turnright 右旋回
  74.     Turnright();
  75.   }
  76.   else if (L_SENS == 0 && C_SENS == 0 && R_SENS == 0) { // Stop 停止
  77.     Stop();
  78.   }
  79.   /*Serial.print(" L = ");
  80.     Serial.print(L_SENS);
  81.     Serial.print(" C = ");
  82.     Serial.print(C_SENS);
  83.     Serial.print(" R = ");
  84.     Serial.println(R_SENS);*/
  85. }



次回はMicro Pythonを使ったプログラミング例を紹介します。

皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

ライントレースカー パート3

車幅を狭く組み替えました。
コースが狭く対向時にホイール同士が接触するので車幅を約20㎜狭く組み替えました。
この改良により、ヘアピンカーブなどの対向時に接触することなく走行できるようになりました。

左側がリサイズ後の2号車(幅75㎜)、右側がリサイズ前の1号車(幅95㎜)です。
resizing1.jpg

左側が2号車(幅75㎜)、右側がリサイズ後の1号車(幅77㎜)です。
resizing2.jpg

動画をご覧下さい。


次回はソフトウエアーについて記す予定です。


皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

ライントレースカー パート2

ライントレースカーの改良と、もう1台追加して同じコースを走らせる。
LTC-Part2_top.jpg

先ずは動画をご覧下さい。


1)改良ポイント
前回の記事と併せてご覧下さい。
主な変更点は、単4充電池を2本増やして4.8VとしてモータードライバーMX1508をPWM制御に変更しました。
これにより、旋回時の左右ホイールへのパワー配分を細かく調整が出来、S字やクランクカーブを滑らかな走行が
可能となり、スピードを上げてもオーバーランや脱線することが無くなりました。

2)2台同時に走らせるために
1台用のコースに2台走らせようと思い、衝突防止に赤外線距離センサーを付けました。
1号車の方は、マイコンがRaspberry Pi Picoを使ってるため、アナログ入力3系統をラインセンサーで使用済みなので、
I2C入力を備えたシャープ製赤外線距離センサーGP2Y0E03を使いました。
センサーがフロント中央に1個なので上手く作動するか不安だったが、結果はOKでした。

3)2号車の製作
この機体も倒立振子ロボットの2号機に少し手を加えただけですが、マイコンに手持ちの古いArduino pro Microを
使いました。pro MicroはUSB入力が付いたArduinoの中では一番小型なので、小さく組みたい場合に有効です。
Raspberry Pi Picoを使った1号車と比べ、上面のみに全ての部品が実装出来ました。
2号機の赤外線距離センサーには、数年前に買ったままでお蔵入りしていた同じシャープ製のGP2Y0A21YKを
使いました。
このセンサーはアナログ出力専用なので、Pro Microのアナログ入力4箇所の内、ラインセンサーに使った残りの
1箇所が丁度使えます。

4)2号車の回路図
基本的には、マイコンをRaspberry Pi PicoをArduino pro Microに置き換えただけです。
配線数が少なく簡単に組み上がると思います。
Arduino_pro_Micro_LTC.gif

次回はソフトウエアーについて記す予定です。


皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

初歩的なライントレースカーを作りました。

簡単なライントレースカー
昨年紹介しました安価に作る倒立2輪ロボット その1~5」に少し手を加えてライントレースカーに模様替えしました。

先ずは動画をご覧下さい。


回路図
部品店すっが少なく簡単な回路です。使用部品も通販で買えるものばかりです。
Raspberry Pi PicoにはADC入力が3ヶ所用意されているので、左右と中央のフォトセンサーに丁度使えます。
補足:Raspberry Pi PicoのADCはMicro Pythonでは16ビット1 から 65535の分解能を得れます。ArduinoIDEで
Raspberry Pi Picoを使うためにArduino Mbed OS RP2040 Boardsをインストールした場合は、分解能が
仕様書の12ビットではなく、他のArduinoボードと同様に10ビット1~1023が出力されます。
LineTraceCar1.gif

心臓部にRaspberry Pi Picoを使う
ロボットコンテストの副賞に貰ったRaspberry Pi Picoをそろそろ何かに使わないとと思い立ち、通信機能が不要な
ライントレースカーに使うことにしました。
Raspberry Pi Picoの取り付けには、コネクターを使わずに基板を躯体にビス止めして、GPIO端子に直接配線を
行っています。USBソケットへのケーブルプラグの差し込みは、ホイールの隙間から行えます。
プログラムはArduino IDEを使って簡単にまとめましたが、Micro Pythonでも可能です。
bottom.jpg

ラインを読むセンサーにポピュラーなTCRT5000を使用
このセンサーは2017年7月に掲載のInverted Balancing Robot(倒立振子型ロボット)その9」で倒立ロボットの
ライントレース化に使ったセンサー基板がジャンクボックスに残ってたのを流用しました。
新たに購入される方は、オペアンプを内蔵してしきい値をVRで調整できる基板が安価に販売されています。
これを利用すると、アナログ入力(ADC)ではなくデジタル入力で使えますが、基板が3枚必要です。
後部の受けは、電池ボックスにダイソーのワイヤーハンガーを貼り付けただけの簡単な方法です。

ギアモーターとモータードライバー
モーターやモータードライバーユニットは倒立振子ロボットに組み込んだものを躯体ごと流用。
倒立振子ロボットの縦型配置を横に寝かせただけです。
top.jpg

電源について
電池ボックスを単4型電池4個用から2個用に取り換えて2.4Vで使うことにしました。
その理由は、4.8Vだとギアモーターの回転が速すぎてヘアピンカーブが曲がり切れません。
通常回転数を下げる方法としてPWM(パルス幅変調)を使いますが、Raspberry Pi Picoの入力電圧が2.1Vからに
対応していることと、電池を減らせば軽くなるメリットが有り電圧を下げる方法を用いました。
back.jpg

ライントレースのコースについて
私は10㎜厚、900×600㎜の発泡スチロールパネルに幅19㎜の電工用黒色ビニールテープを貼り付けて
コースを作りました。冬場はビニールテープが伸びにくくてカーブを描くのが難しいですが、ドライヤーで
温めながら行うと上手く行えます。
course.jpg


皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

Ottis Robot 製作の要点

Ottis Robot 最終回
Ottis Robotを作ってみたいと考えておられる方へアドバイスを記します。

Ottis Robotは、メキシコの大学生エドゥアルドさんがinstructablesに製作記事を発表された二足歩行ロボットです。

このロボットはハードウエアを作る楽しみの他、ハード完成後にソフトウエアを工夫することにより、オリジナルな
動作をプログラムする楽しみが大きく、プログラミングの勉強にもなり、とても有意義な製作記事です。
Ottis_Top.jpg

1)製作記事のURL:instructables circuits
上記URLを開くとチュートリアルが開きます。
3Dプリンターをお持ちの方は、データが添付されているのでボディ・パーツが問題なく作れると思います。
(私は3Dプリンターが無いのでアクリル板をCNC加工して作りました)。

2)部品について
①チュートリアルのリストに記されたマイコンやTFTディスプレイをそのまま使う場合は、添付された回路図の通りに
配線を行います。但し、Arduino NANOにHC-05 bluethooth moduleを使うようになっていますが、HC-05は技適を
取得しておらず、国内ではそのまま使えません。使う場合は総務省へ申請が必要となりますが、テスト代行費用や
書類作成の労力を考えると、私のように技適認証された安価なマイコンESP32を使うのがベターです。
②サーボモータSG90は少し高価てもTowerPro等の純正品をお勧めします。私のように安価なサーボモータを
使うとバックラッシュが大きくてバランスが悪くなる原因となります。

3)注意点
①特に注意が必要なのは、ロボットの左右が人の左右とは逆で、ロボットに対面しての左右となっています。
私はいちいち読み替えるのが面倒なうえ、間違いの元となるのでプログラムを全て書き直しました。
②脚部の関節長について:3Dプリンターのデータを基に作られる方は問題外ですが、それ以外の方法で自作
される方は、脚部の長さが違うと動きが変わるので、厳密には添付のソフトウエアがそのまま使えません。
後述角度計算ソフトOttis1.0のA-B及びB-C間の長さを実際の寸法に合わせる必要があります。(変更可能)

4)プログラミングに必要な計算ソフトOttis1.0について
エドゥアルドさんが作成された計算ソフトOttis1.0は、ロボットの動きを制御するサーボモータの角度を計算するのに
とても重宝しました。 ここも左右が逆なので注意!
私は、このソフトを利用してロボットにダンスや屈伸運動(ラジオ体操もどき)をさせています。(末尾の動画を参照)
注意:チュートリアルの計算ソフトへのリンクが開きません。正しくは、こちらのURLから開きます。

5)TFTディスプレイのグラフィック表示について
チュートリアル添付のArduino UNOがTFTディスプレイのプログラムです。
TFTディスプレイは縦240ドット、横320ドットなので、240X320の方眼紙を使い描画の座標位置を決めます。
私は顔の輪郭を丸くした12種類をデザインしました。
描画には、円や線、三角形、四角形、角丸四角形などの輪郭及び塗りつぶし等の記述書式が有ります。
*全画面塗りつぶし:色の指定=(色) 書式 = tft.fillScreen(BLACK);
*線の描画:座標と色の指定=( 始点 x1,y1、 終点 x2,y2、色)
線の書式=tft.drawLine(x1, y1, x2, y2, WHITE);
*四角形の描画:座標と色の指定= (始点 x1,y1、サイズ sx,sy 、色)
四角形の輪郭書式=tft.drawRect(x1, y1, sx, sy, BLUE);
四角形の塗りつぶし書式= tft.fillRect(x1, y1, sx, sy, RED);
*角丸四角形の描画
 座標と色の指定= (始点 x1,y1、サイズ sx,sy、角丸の半径 r ( rを0にすると角丸が無くなる)、色)
角丸四角形の輪郭書式=tft.drawRoundRect(x1, y1, sx, sy, r, CYAN);
角丸四角形の塗りつぶし書式=tft.fillRoundRect(x1, y1, sx, sy, r, GREEN);
*円の描画:座標と色の指定= (中心点 x1,y1、半径(radius)、色)
円の輪郭書式=tft.drawCircle(x, y, radius, WHITE);
円の塗りつぶし書式=tft.fillCircle(x1, y1, radius, WHITE);
*三角形の描画:座標と色の指定= ( 座標1 x1,y1 、座標2 x2,y2 、座標3 x3,y3、色)
三角形の輪郭書式 = tft.drawTriangle(x1, y1, x2, y2, x3, y3, MAGENTA);
三角形の塗りつぶし書式= tft.fillTriangle(x1, y1, x2, y2, x3, y3, YELLOW);
中間色を指定する場合は、0x00000~0xFFFFFのu16 Codeで表示できます。
また、文字を表示する事も出来ますが、何れも詳細はAdafruit_ILI9341ライブラリーをご覧下さい。

6)ビープ音源について
CuteBuzzerSoundsライブラリーを使って圧電スピーカからメロディを出力します。
次の19個のメロディーが用意されています。
S_CONNECTIONS_DISCONNECTIONS_BUTTON_PUSHED
S_MODE1S_MODE2S_MODE3
S_SURPRISES_OHOOHS_OHOOH2
S_CUDDLY S_SLEEPINGS_HAPPY
S_SUPER_HAPPYS_HAPPY_SHORTS_SAD
S_CONFUSEDS_FART1S_FART3
S_JUMP

7)コントロールAPPについて
チュートリアルに記されたスマートフォン用アプリを使うよりも、私が使っているBluetooth Serial Controllerが
汎用性が高くて使い易いのでお勧めです。但し、Android専用でiPhone用が無いのが残念です。

8)工作の楽しみ方について
工作についての私の考えは、マニュアル通りに作るのではなく、手持ちの部品や材料を活かして出来るだけ
独創性を出すことが信条です。 今回の作品も素材やマイコン、ディスプレイ、回路などが異なります。
例えば同じ素材を使うプラモデルであっても長けた人は、塗装や装飾などで独創性を出して見事な作品を
作り上げます。このことは全ての工作に通じると信じています。

9)おわりに
一寸愚痴な話になりますが、instructablesの最後に「この作品を作られた方は共有して下さい」と投稿案内が
有ります。これまでにも何回か参考にして作った作品を投稿してますが、今回初めて何の連絡もなく削除されて
しまいました。 作者は自分の製作記事を参考に多くの方が作られ、それが完動すれば嬉しいと思うのですが?
製作手段が違っても出来上がりが同じなのに、何が問題なのか?理由を知ろうと再投稿するもアカウントが
ブロックされて受け付けず、運営会社に連絡しても返事が無く、他に連絡方法が無くて少しガッカリしています。

最後に動画をもう一度ご覧下さい。



皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

Ottis Robotの動画が出来ました。

動画が出来ましたのでご覧下さい。

1個100円程の安価なサーボモータを使った結果、ギアーの遊び(バックラッシュ)が大きくて
立ている時にハンチングが起こり、体が揺れてしまうのが難点です。



皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

Happy new year

本年もよろしくお願いします。
2022_Happy.jpg

by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

Ottis Robotの制御回路を変更しました。

制御回路を作り替えたOttis Robot
Ottis_04.jpg

Ottis Robotの概要

原作者エドゥアルドさんの場合
ボディー:3Dプリンターによる製作
2.4インチTFT液晶ディスプレイ:Arduino用シールドタイプとArduinoUNO
サーボモータの制御:ArduinoNANO+HC-05 bluethooth module+Servo driver PCA9685
コントロール・アプリ:MIT APP

Paradiseモデル (使用部品の多くは先に製作のスネークロボット1号機を分解した物を使用)
製作の構想時には、ESP32モジュール1個でディスプレイ制御とServo driver PCA9685を動かす予定でしたが、
テストの結果、ESP32のWiFi又はBluetoothを作動させるとTFTディスプレイの画面が乱れる事が判り、ディスプレイ用と
サーボモータの制御用を分ける事にしました。
ボディー:アクリル板をCNC加工よる製作
2.4インチTFT液晶ディスプレイ:SPI接続の汎用タイプとESP32U(電波を出さないのでアンテナ外付けタイプを使用)
Ottis_TFT.jpg

TFTディスプレイの配線図
OttisRobot_TFT.gif

サーボモータの制御(改良前):M5 Stamp Pico+Servo driver PCA9685
背面にServo driver PCA9685を取り付けるとサーボモータのコネクター端子が出っ張って不細工なので
PCA9685を止めてESP32モジュールにて直接サーボモータを制御することにしました。
Ottis_Before.jpg

サーボモータの制御(改良後):ESP32による直接ドライブ方式としました。
制御基板から下向きにサーボモータのコネクタ端子をを取り付けて奥行きを短くしました。
Ottis_After.jpg

ESP32モジュールを使ったサーボモータの制御回路
UART SWと表示したスイッチは、サーボモータコントロール部からTFT制御部へ映像切り替え信号を一歩通行にて
送るためですが、USBシリアルから書き込み時にバッティングするので、書き込み時と通常時の切り替え用です。
電源は制御用に3.7V500mAのリポバッテリーを2個直列接続にて7.4Vを使用。7.4Vを使う理由は、3.3V1Aを得る
ROHM社のDC/DCコンバータ(BP5293)の入力電圧下限が7Vだからです。
サーボモータ用電源には単四充電池1.2Vを4個直列接続にて使用しています。両方の電源を1個のSWでON/OFF
させる方法としてGNDコモンにてスイッチしました。
OttisRobot_Servo.gif

背面が随分スッキリと纏まりました。
Ottis_Refreshing.jpg

コントロール・アプリ
フリーAPPのBluetooth Serial Controllerがこの用途にピッタリなので今回も利用させてもらいました。
使い方は、過去記事M5 Stamp Pico Mateを使ってみました。 その2をご覧下さい。
Ottis_BSC.png

作ってみての感想
エドゥアルドさんの原作と外観は似ていますが、中身が全く別物になりました。
サーボモータ制御部を変更したので、歩行データを最初から作り直す羽目になりましたが、その分ソフトウェアの
勉強になりました。
単にまねるだけではなく、ひと工夫することによりオリジナル性が出て工作の楽しみが増えて行きます。
やっぱり、工作は楽しいですね!
年内に動画をご覧頂けるように、今は、歩くだけでなくダンスを覚えさせたり、体操をさせるプログラムが
進行中です。また、ディスプレイに表示の顔も作成中で、バリエーションが増えます。


皆様の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

Ottis 2足歩行ロボットが歩き始めました。

インストラクタブルのロボットコンテストに準優勝のOttisロボット
大学生が作った2足歩行ロボットが面白そうなので手持ちの部品を集めて作りました。

Ottisロボット製作記事を参照 作者はメキシコシティの大学生エドゥアルドさんです。

私は3Dプリンターが無いのでアクリル板をCNC加工して作りました。
また、マイコンをArduinoからESP32に変更、TFTディスプレイも手持ち品を使うなど大きく変更しています。

完成画像
公開されたソフトウェアはごく基本的なもので、出来上がったロボットに合わせてカスタマイズする必要があります。
顔のグラフィックス表示もオリジナルに変更予定です。
Ottis_02.jpg

後ろ姿
マイコンやコントロールボードとサーボモータを繋ぐ配線が露です。
Ottis_03.jpg

次回から回路図や組み立てについての詳細と動画を順次紹介します。
Ottis_01.jpg

by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

Ottis 2足歩行ロボットを作り始めました。

インストラクタブルのロボットコンテストに準優勝のOttisロボット
大学生が作った2足歩行ロボットが面白そうなので手持ちの部品で製作を始めています。

Ottisロボット製作記事を参照 作者はメキシコシティの大学生エドゥアルドさんです。
(上記ページには3Dプリンターのデータやソースファイルが公開されています)

私は3Dプリンターが無いのでアクリル板をCNC加工して作ります。
また、マイコンをArduinoからESP32に変更、TFTディスプレイも手持ち品を使うなど大きく変更しています。
完成までにしばらく時間が掛かりますが、上手く出来上がりましたら掲載の予定です。

完成イメージ (画像はインストラクタブルより引用)
F0A5CO6KVWRJSLL2.png

by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

今宵の月食

18時10分撮影
211119_皆既月食

撮影日時:2021.11.19 18:10
撮影機材:OM-D E-M1 MarkⅡ、ED300mm F4 IS PRO + MC14

パックマンをイメージしたマーブルマシンを作りました。

透明アクリル板をCNC加工して作りました。
2021年11月12日
ボールを運ぶ通路とパックマン取り付けパネルとマーブルポンプを一体構造としました。
動画をご覧下さい。


皆様の参考になれば幸いです。
by Paradise

テーマ : 工作の作品
ジャンル : 写真

手動ポンプ式マーブルマシーン

電子工作が続いたのでシンプルなマーブルマシーンを作ってみました。

LOOP_MM.jpg

異なるマーブルマシンを複数組み合わせた作品は以前にし紹介しましたが、
今回は単一機能のシンプルマシーンです。


ボールに6㎜径のベアリング玉を使ったオリジナルのロータリーポンプは、小さいハンドルを回してボールを押し上げる方式です。
頂上からはループ状のスロープを下り、ポンプの入り口に戻って来るシンプルな構造です。
ループの直径が90㎜で6回転半なのでスロープの長さが約1m80Cmとなります。

動画をご覧下さい。


これまでの掲載したマーブルマシーンの動画を併せてご覧下さい。
2014年4月の作品
最初に作った複合型、5種類のマシーンを組み合わせた木製の作品です。


2016年10月の作品
アクリル板と針金のレールに4種類のマシーンを組み合わせた作品です。


2016年11月の作品
クリスマスツリーをイメージしたスパイラルループタイプの作品です。


2021年4月の作品
アームロボットがビー玉を運ぶオリジナルタイプの作品です。


皆様の参考になれば幸いです。
by Paradise

テーマ : 工作の作品
ジャンル : 写真

ESP32 Evo2タイプロボットを作る その3

お知らせ!
10月22日現在、ここに使ったステッピングモータと同じ品が、メルカリで2個(税・送料込み)1100円で出ています。
先ずは動画をご覧下さい。


その3 ソフトウエアーについて
このESP32 Evo2 TypeにはがGitHubに公開されたB-ROBOT_EVO2_ESP32を利用させて頂きました。
ghmartin77さんに感謝いたします。

ダウンロードについて
①次のURLからZIPファイルをダウンロードします。
GitHubのESP32_EVO2_ESP32を開く
②開いたページの緑表示のCODEをクリックし、ダイヤログのDownloadZIPを実行します。
③ダウンロードしたZIPファイルを適当なディレクトリーに解凍します。
④解凍したファイルの上から2番目のディレクトリーBRobotEvo2ESP32を開きます。
⑤開いたディレクトリー1番上のINOファイルBRobotEvo2ESP32.inoはダミーで注釈のみです。
英文の注釈通り意図的に空にしている故、配慮が必要です。
作者の意図を尊重し、あえてファイル名を記しませんが、ソースファイルがどれか直ぐに解ると思います。

ライブラリーの修正
先に解凍したBRobotEvo2ESP32ファイル内のdefinesをテキストエディタ等で開き、ハードウェアが使用する
ピン番号に書き換える必要があります。
前回に記した回路図の所でも少し述べましたが、この回路の通り配線をした場合は図内で記したピン番号に
変更します。その他は使用するハードウェアに合わせます。
変更箇所は11から19行目です。
11 #define PIN_ENABLE_MOTORS 12 ⇒ 32
12
13 #define PIN_SERVO 17 ⇒ 16
14
15 #define PIN_MOTOR1_DIR 27 ⇒ 27
16 #define PIN_MOTOR1_STEP 14 ⇒ 26
17
18 #define PIN_MOTOR2_DIR 25 ⇒ 33
19 #define PIN_MOTOR2_STEP 26 ⇒ 25
変更が終われば保存して終了します。

ライブラリーの追加
先に解凍したBRobotEvo2ESP32ファイルからライブラリー以外の2個を除き、Arduinoがインストールされた
ディレクトリーへ移動し、その下層のlibraryディレクトリーへBRobotEvo2ESP32を直接貼り付ければOKです。
注意
Arduinoのlibraryディレクトリー内に他のMPU6050ライブラリーが存在する場合、追加したMPU6050と競合して
コンパイルエラーが出ます。この場合は、先に入ってたMPU6050ライブラリーを別のディレクトリーへ退避させると
解決します。

使用充電池について
今回使用した格安ステッピングモータはコイルの抵抗値が約5Ωと低いため、電流を流し過ぎるとモータや
ドライバーICの発熱が起き、無駄な電流消費を招きます。
使用したモータドライバーA4988の仕様書では、モータ電圧 min 8.0Vとありますが、今回使用したモータでは
電圧を上げ過ぎると発熱を起こすため、あえて7.4Vのリチウムイオン充電池を使用していますが、
7V以上の電圧が有れば正常に動作します。(6年前の初期B-ROBOTから同じ方法を使用して確認すみです)
但し、容量が多い電池の使用と早めの充電が必要で古い電池はNGです。

モータードライバーの電流調整
モータードライバー基板に付いたVR(ポテンションメータ)を回してステッピングモータに流れる電流を調整します。
①電源回路へ直列に電流計を接続します。
②片方のステッピングモータのコネクターを外します。
③ロボットを水平に寝かせて電源スイッチを投入します。
④暫くするとサーボモータに取り付けたアームが数回小刻みに動いたら手で持ち上げ、
角度を水平から少し起こすとモーターが回転を始めます。
⑤この無負荷で回転する時の電流値を約200mA前後(マイコン等回路全ての消費電流)となるように
VRを回して調整し、ロボットを水平に戻したり起こしたりしながら行います。(電流値には個体差あり)
片方が終われば、反対側のモータも同じ値に調整すれば完了です。

コントロールソフトについて
Evo2ロボットのコントロールには、jjrobots社のB-Robot用スマートフォンアプリが利用可能です。
iPhoneとAndroidの両方がサポートされて、夫々のAPPストアにてダウンロード出来ます。
APPの使用は営利を伴わなければOKだと思いますが自己責任で行って下さい。


以上、ESP32 Evo2タイプロボットを作られる方の参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

ESP32 Evo2タイプロボットを作る その2

先ずは動画をご覧下さい。


その2 本体の組み立て
この作品は再現性を重点に出来るだけ市販部品を使って組み立てました。

主なパーツを揃える
39㎜ステッピングモータ ×2 (シャフトが長いので13㎜に切断しています)
A4988ステッピングモータ・ドライバーモジュール ×2 (Amazon 5個 849円)
アルミ電解コンデンサー 35V100㎌ ×2  (秋月電子1個 15円)
GY-521 ジャイロセンサー ×1 (Amazon 価格色々、最安 5個 999円)
SG90 マイクロサーボモータ ×1 (秋月電子1個 440円)
ユニバーサル基板 片面ガラスCタイプ72X47.5㎜ ×1  (秋月電子 1枚 60円)
基板スペーサー丸型30㎜ ×4 (秋月電子 丸型両メネジ RFB 3-30 1個 50円)
ホイール マイクロサーボ用60㎜ ×2 (秋月電子1個 160円)
ホイールハブ 5㎜モーターシャフト用ハブ X2 (秋月電子2個入540円)
電池ボックス A123用 ×2  (秋月電子1個 40円)
ROHM スイッチング式3端子レギュレータユニット BP5293-50 ×1  (秋月電子1個 260円)
3.3V 800mA 3端子レギュレータユニット  ×1 (Amazon 10個 560円)
アクリル板 t2、t3、t5 少々
その他にピン・ソケット、配線材、ビス、超強力両面テープ等少々


Evo2_SBR2_1.jpg

上部アクリル板の寸法図
材料はアクリル板に限らずベニヤ板でもOKです。
Acrylic_Board.gif

アクリル板に部品の取り付け
予め上部のアクリル板に電池ボックスとサーボモータを両面テープにて貼り付けておきます。
Evo2_SBR2_4B.jpg

モータに補強版の取り付け
左右モータをアクリル板を補強材にして超強力両面テープにて貼り合わせます。
モータ後部には5㎜厚のアクリル板13X13㎜を2枚用意して、モータシャフトを避けて画像のように張り合わせます。
次に底板に厚さ2㎜のアクリル板50x30㎜を両面テープにて接着します。
Evo2_SBR2_5_1.jpg

基板固定用アクリル板の取り付け
最後に基板取り付け用アクリル板を両面テープにて接着しますが、モータのリード線を通し位置を正確に決めます。
この作業で左右のモータが動かなく固定されます。
Evo2_SBR2_5_2.jpg

コントロール基板の取り付け
コントロール基板の取り付けには厚さ3㎜のスペーサーを使いますが、円でなくても正方形にM3の穴を開けた物を
4個用意します。
次にアクリル板の下側からM3x10㎜のビスを通し、スペーサーを介して基板を載せ、長さ30㎜の金属スペーサーにて
画像のようにコントロール基板を固定します。
Evo2_SBR2_6.jpg

電源部の取り付け
先に組み立てた電源部を金属スペーサーに載せてM3x6㎜のビスで固定します。
画像では、転倒時に電池が飛び出さないようにマジックテープで止めるようにしています。
Evo2_SBR2_7.jpg

後部の様子
ここまで出来たらモータのリード線を基板に接続出来ますが、リード線の順番は左から、赤、青、黒、緑を接続します。
Evo2_SBR2_8.jpg

ホイールの準備
今回使ったホイールは1個160円(秋月電子)にて購入の直径60㎜のマイクロサーボ用です。また、シャフトへの
取り付けには同じく秋月電子で購入のアルミ製ホイールハブ(5㎜モーターシャフト用ハブ(2個入540円))です。
少し高価ですが自分で加工出来ない方には便利です。画像左側のホイールに白く光るのがハブです。
このホイールには2個の取付穴と対角にもう2個下穴が開いていてM3のピンバイスで直ぐに貫通出来ます。
尚、私はホイールのサーボモータ取り付け穴をM5ドリルで貫通して使用しています。
最初にも記しましたが、モーターシャフトが20㎜と長いので金鋸で切断して13㎜長にしています。
Evo2_SBR2_9.jpg

完成画像1
Evo2_SBR2_11.jpg

完成画像2
Evo2_SBR2_12.jpg


次回はソフトウェアについての要点を掲載予定です。

皆さまの参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

ESP32 Evo2タイプロボットを作る その1

その1 コントロール基板を作る
今回の製作モデルには、先に紹介しましたステッピングモータの使用を前提ですが、他のモータでも
昇圧回路の追加等で対応できます。

Pylon slalomを練習中
Pylon _slalom

手組基板例
前回作ったESP32 Original Unitを使いユニバーサル基板に電源回路、モータードライバー、ジャイロセンサーを
手配線しました。
Evo2_SBR2_3.jpg

回路図
この配線パターンで組み立てた場合は、definesライブラリー内のピン番号の設定を図内リストを参考に変更します。
5Vの3端子レギュレータにはROHM社のDC/DC型モジュールを使っています。電源電圧を上げた場合でも発熱が
無く安心して使えます。3.3Vの方は800mAのコンデンサー実装型(Amazonにて購入)の安価なモジュールです。
Evo2_No2_Circuit.gif

基板裏側から見た配線図
手組配線される方は参考にして下さい。電源関係の配線が交差する所は片方を表側へ迂回させています。
信号線は0.32㎜径のラッピングワイヤーを使っています。
Bottom_Pattern.gif

基板裏側の見本
上の配線図とほぼ同じに仕上がっていますが、細かい部分ではアレンジしています。
使用したユニバーサル基板は、秋月電子の片面ガラスCタイプ72X47.5㎜を、片側をカットして幅61㎜にて使用。
Evo2_SBR2_4.jpg

CNC切削用プリントパターン例 (実物サイズは55X55㎜)
片面基板なので3ヶ所ジャンパー線が必要です。上側ENABLEは表ジャンパー、I2CのSCL,SDAは裏ジャンパーです。
参考にして下さい。
ESP32_Evo2_PCB_B.gif


次回は全体の組み立てについて掲載します。

皆さまの参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

ESP32モジュールを使った汎用ユニットを作る

ESP32 Evo2タイプロボットを作る前に!
ESP32は単体のモージュールの他、Dev Kitが種々販売されていますが、Dev Kit類はサイズが大きくて
組み込み用としては不向きです。
小さいタイプとしてM5シリーズのM5 Stack Atom LiteやM5 Stamp pico Mateなど有りますが、
使用できるGPIOが少ない割に結構高価です。そこで、これらに準じたユニットを作る方法を紹介します。

オリジナルユニットと既存品の比較
上面:左端が今回作ったESP32を載せたユニットで、大きさはほぼAtom Liteと同じです。
利用可能なGPIOは、オリジナルが13個、Atom Liteが8個、Pico Mateが9個です。(書き込み関係含まず)
ESP32_Unit_1.jpg

下面:オリジナルの基板下面にはピンヘッダ8x2とプログラム書き込み用のUSBシリアル端子を設けています。
画像下側のピンソケットは秋月電子にて購入の低メスタイプで高さを低くするのに有効です。
ESP32_Unit_2.jpg

ESP32Dのピンマップ
ESP32D_Map.jpg

オリジナルユニットの配線図と組み立て方
両側の端子のみ表示、下部の端子は不使用のため省略しています。(画像をクリックで拡大します)
3.3V電源線とGND線には0.5㎜径の錫メッキ線を使用、信号線は全て0.32㎜径のワイヤーラッピング用を使っています。
ESP32Dは秋月電子で1個330円で購入。新しいタイプのESP32Eは360円です。
ESP32_Unit_Pattern2.gif

部品の準備
基板:秋月電子の片面ガラス・薄型ユニバーサル基板Cタイプ(72X48mm)メッキ仕上げ(日本製)60円を
8×9穴を残して周囲を切断します。この基板は厚さが薄いので両面にカッターを入れると綺麗に折れます。

ピンヘッダ:これも秋月電子にて購入のピンヘッダ 1X40(40P、35円)から8ピンを2本をニッパー等で切断します。
完成高さを低くするためにピンヘッダの足を6.1㎜から3㎜短くしますが、先端を切断すると後の仕上げが大変なので
ラジオペンチを使いハンダ側へ3㎜押し込むと、ハンダ側が3㎜伸びるのでその分をニッパーで切断、高さを揃えます。

ピンソケット:これも秋月電子にて購入の分割ロングピンソケット 1X42 (42P、80円)の6ピン分を切断しますが、
切断箇所両面にカッターで切り込みを入れて折り曲げると綺麗に切断出来ます。

組立作業 注意:組立には順番が有ります。
ピンヘッダの取り付け
カットしたユニバーサル基板のハンダ面を上にして8ピンのピンヘッダをハンダ付けしますが、ブレッドボードに
ピンヘッダを差し込み、ピンが傾かないように行えば正確に仕上がります。(ピンヘッダには1~16の番号を表示)

USBシリアル用ソケットの取り付け
次に下面の画像(クリックで拡大します)を参考にして裏側に6ピンソケットを瞬間接着にて固定します。
電源の配線
3.3VとGND2か所は0.5㎜の錫メッキ線を使い尖端にループを作り、ピンヘッダにハンダ付けした後、少し長めに
切断しておきます。
USBシリアルソケットへの配線
次にGND、3.3V電源線とTXD、RXD、EN、IO0の信号線をUSBシリアルソケットへ配線しますが、配線図右側を
参考に行います。各配線を表側へ引き出す穴はピンヘッダの一つ内側です。
ENのプルアップ抵抗10KΩ1/6Wのリード線を15番ピンと14番ピン横の穴に通して表側に引き出しておきます。
抵抗の3.3V側とEN側をUSBシリアルソケットの3.3V及びENに接続します。
TXD、RXDはクロス接続するのでUSBシリアルソケット側から配線を始め、2番ピン、3番ピン横の穴から表側に
配線を少し長めに引きだしておきます。
IO0(書き込み=Download mode)ラインは、直ぐ横の穴がUSBシリアルソケットにより塞がれているので6番ピン横の
穴から表側に引き出しておきます。
ESP32の取り付け方法
ESP32の金属面に幅10㎜、厚さ1.1㎜の強力両面テープを貼り、裏返しにして接着しますが、両面テープの厚みが
薄いと基板との間隔が狭く、後の配線作業が難しいので2枚重ねるか薄板の下駄をはかせると良いでしょう。
ESP32への配線とハンダ付けについて
表側に引き出した各リード線をESP32の端子にハンダ付けしますが、少し長めに出してあるので寸法を合わせて切断、
先端の被覆を剥がしGPIO端子の角に沿って芯線を折り曲げてハンダ付けします。しかし、先端が細いICチップ用の
コテ先でないと隣の端子とブリッジするので細心の注意が必要です。
ピンヘッダとESP32各GPIO端子の接続
配線図左側(表面)を参考にピンヘッダ2番から14番と各GPIOをハンダ付けしますが、リード線の被覆を剥がし芯線の
先端にループを作り、ピンヘッダにはめ込んでハンダ付けします。
ピンヘッダとGPIO端子の距離が近くて難しいと思いますが慎重に作業を行います。また、芯線をGPIO端子角で折り
曲げてハンダ付けすると接触面が増えて剥がれ難く仕上がります。

プログラム書き込み用アダプターについて
USBシリアルソケットのピン配置をM5 Stamp Pico Mateに準拠しました。アダプターの回路は下図と共通です。
M5Stamp_USB_Serial_1.gif

細かな作業ですが、1つ作っておけば使いまわしが出来るので便利だと思います。


次回はESP32 Evo2タイプロボットの作り方を掲載予定です。
皆さまの参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

ESP32 Evo2タイプ倒立振子型ロボットの製作

格安ステッピングモータ入手を機に3台追加して4兄弟になりました。

先ずは動画をご覧下さい


2号機の外観
2号機はアクリル板を補強材に両面テープにてモーターを連結、四角いアクリル板を基板スペーサーを使い
上下2段に配置、コントロール部と電池ボックスを取り付け、上側アクリル板にサーボモータを接着した
簡単な構造にしました。ホイールとハブは市販品を使い自作出来ない方にも製作が可能な作り方としました。
コントロール部のプリント基板は昨年1号機を作った時の予備品(M5 Stack Atom Lite用)を使用。
電池は3.7V123Aタイプのリチウムイオン充電池を2個使用、今回使ったステッピングモーターの仕様が
不明ですが、電圧を上げ過ぎないよう注意が必要です。私は昇圧をせずに電池の電圧をそのまま使用しました。
詳細は次回に掲載します。
ESP32_Evo2_No2a.jpg

3号機の外観
こちらは、側板に厚さ3㎜、上下の仕切り版には厚さ5㎜のアクリル板を使用し、M2タップタイトで連結しました。
充電池は16340型3.7Vを2個使用。123Aタイプよりも少し長いが、123A用電池ボックスに辛うじて入ります。
1号機、2号機にはM5 Stack Atom Liteを使いましたが、昨年は700円程だったのが今は倍ほどに値上がり!
今回から、330円で買えるESP32Dチップを手組配線しました。ホイールは1号機と同じ65㎜径を使用。
ESP32_Evo2_No3.jpg

4号機の外観
昨日出来上がったばかりです。3号機と殆ど変わりませんが、電池にCANON IOS7Dに使っていた予備の
カメラ用電池7.2V 1800mAを使いました。ホイール75㎜径は文字描きロボットに使った予備品を使用。
ESP32_Evo2_No4.jpg

次回は2号機から順に工作についての要点を掲載予定です。

皆さまの参考になれば幸いです。
by Paradise

テーマ : 電子工作
ジャンル : 趣味・実用

プロフィール

CNC_Paradise

Author:CNC_Paradise
木工・彫刻・機械工作・電子工作が
大好きで自作のCNCを使って工作を
楽しんでます。

最新記事
最新コメント
月別アーカイブ
カテゴリ
何でも工作室
検索フォーム
RSSリンクの表示
リンク
QRコード
QR