Archive for 8月 2019
Operate M5 Whell (moio) with RCWControll
M5 Whell ( moio ) を RCWController アプリ で操作しました。 2019.08.26
RCWController アプリは ゲームパッドのインターフェイス を持ち、
iPhone や iPad で 操作する事ができます。
M5 Wheel ( moio ) | RCWController |
RCWController の機能:UDP通信でWi-Fi機器と接続でき、ジョイスティク や ボタン
_ などを タップすることで、操作に対応するデータが送信されます。
RCWController ダウンロード:App Store RCWController。micutil氏に感謝致します。
robo8080氏のブログに RCWController アプリを使用した記事、
「ESP32-DevKitCに、RCWControllerを接続してみた。」があります。
その github に ESP32とRCWControllerを接続するテストプログラム
「ESP32_RCWController_Test」があり 設定、操作、データの仕様が書かれています。
上記からダウンロードして RCWController.h を入手します。robo8080氏に感謝致します。
以上から RCWController.h を使用し、M5 Whell ( moio ) のスケッチを作成しました。
仕様:今回のスケッチは Right Joystick 操作のみです。
_ 必要に応じて 他の操作を追加します。
_ 追加機能は Loop内の x , y に 操作の値を入れます。
.
データフォーマット表: Operation と buffer[ 0 to 9 ]
_ 縦軸は Operation、横軸は 0 – 9 で buffer[ 0 to 9 ] の配列です。
_ 例:Right Joystick の UP / DN は 配列5の値が UP は 255 , DN は 1 です。
_ 例:Right Joystick の Right/Left は 配列4の値が Right は 255 , Left で 1 です。
Operation \ buffer | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
……………………………. | ……… | ……… | ……… | ……… | ……… | ……… | ……… | ……… | ……… | ……… |
R JOY CENTER |
128 | 128 | 9 | |||||||
R JOY UP |
255 | 9 | ||||||||
R JOY DN |
1 | 9 | ||||||||
R JOY R |
255 |
9 | ||||||||
R JOY L |
1 | 9 | ||||||||
R PUSH SW Y |
16 | 1 | ||||||||
R PUSH SW A |
32 | 1 | ||||||||
R PUSH SW B |
64 | 1 | ||||||||
R PUSH SW X |
1 | 1 | ||||||||
R1 |
8 | 1 | ||||||||
R2 |
16 | 1 | ||||||||
L1 |
2 | 1 | ||||||||
L2 |
4 | 1 | ||||||||
SELECT |
12 | 1 | ||||||||
START |
3 | 1 | ||||||||
L JOY CENTER |
128 | 128 | 18 | |||||||
L JOY UP |
255 | 18 | ||||||||
L JOY DN |
1 | 18 | ||||||||
L JOY R |
255 | 18 | ||||||||
L JOY L |
1 | 18 | ||||||||
L TOGGLE UP |
1 |
1 | ||||||||
L TOGGLE DN |
2 | 1 | ||||||||
L TOGGLE R |
4 | 1 | ||||||||
L TOGGLE L |
8 | 1 | ||||||||
R ACCEL CENTER |
128 | 128 | 1 | 97 | ||||||
R ACCEL UP |
1 | 1 | 97 | |||||||
R ACCEL DN |
255 | 255 | 97 | |||||||
R ACCEL R |
255 | 255 | 97 | |||||||
R ACCEL L |
1 | 1 | 97 | |||||||
L ACCEL CENTER |
128 | 128 | 1 | 65 | ||||||
L ACCEL UP |
1 | 1 | 65 | |||||||
L ACCEL DN |
255 | 255 | 65 | |||||||
L ACCEL R |
255 | 255 | 65 | |||||||
L ACCEL L |
1 | 1 | 65 | |||||||
……………………………. | ……… | ……… | ……… | ……… | ……… | ……… | ……… | ……… | ……… | ……… |
Operation \ buffer | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
.
作成:
_ RCWController と Blynk 、Servo のスケッチを合体しました。
_ iOS RCWController アプリからの値は データフォーマット表に示す 1 〜 255 です。
_ M5の Blynk servo ルーチンでは この値を 255 〜 -255 で使用します。
_ これにより void loop内で map命令にて 以下の様に変換しています。
_ 例:x = map(buffer[4], 1, 255, 255, -255); // R JOYSTICK X
_ 後に Blynk servo ルーチンは 見やすくする為に while文から if文に変更しました。
接続方法:
_ 1. iPad の WiFi設定 は ESP32-RCWC を選択します。 Password は esp32pass です。
_ 2. RCWController アプリを動かし 中央の ON ボタンで WiFi接続します。
_ もしくは接続時に IP が表示されます。
_ 3. 右下側の ANALOG ( pink ) を選択し Joystick にします。
_ 4. Joystick で操作が出来ます。( ACCEL にも反応します)
.
参考:
M5 Wheel Module ( moio ):
Make M5Stack Servo Module:
robo8080のブログ:ESP32-DevKitCに、RCWControllerを接続してみた。:
ESP32_RCWController_Test:
.
感想:
身近な iPhone や iPad で操作出来ると簡単です。
Blynk:前回記事の Blynk は ネット接続が必要で 不便です。
RCWController の 接続は iPad と M5 moio 間で接続する時に便利です。
PS4 等の専用コントローラーで操作出来るとさらに便利になります。
コントローラー以外に、自動操縦の機能が出来ると良いかと思っています。
BeetleC:操作性の良く無い BeetleC のコントローラーに使用出来ます。
.
スケッチの構成:
_
スケッチ:M5 moio RCWControll :
_ ORG : : 2019.08.26 : macsbug
_ rev.1 : battery, motor : 2019.09.01 : macsbug
_ rev.2 : UDP, Operability of x : 2019.09.05 : macsbug
仕様:Right Joystick のみのスケッチです。
.
// M5Stack moio + RWCController JoyStick: org 2019.08.26 : macsbug // rev.1 : battery, motor : 2019.09.01 : macsbug // rev.2 : UDP, Operability of x : 2019.09.05 : macsbug // https://macsbug.wordpress.com/2019/08/26/operate-m5-whell-mono-with-rcwcontroll/ // RCWController Test Program for ESP-WROOM-32 2017/4/3 by robo8080 // https://github.com/robo8080/ESP32_RCWController_Test // https://macsbug.wordpress.com/2019/08/21/m5-wheel-module-moio/ // https://homemadegarbage.com/esp32_minirobot01 // https://mvdlande.wordpress.com/2019/06/02/drv8833-motor-driver-module/ // DRV8833 + M5Stack + DC MOTOR // INx :GPIO: OUTx : MOTOR :CH : // IN1 : 5 : OUT1 : LEFT - : 2 : Motor position reversed // IN2 : 17 : OUT2 : LEFT + : 1 : Motor position reversed // IN3 : 13 : OUT3 : RIGHT + : 3 : // IN4 : 0 : OUT4 : RIGHT - : 4 : // DRV8833 H-BRIDGE // IN1 = PWM, IN2 = 0 : Foword PWM, fast decay // IN1 = 1 , IN2 = PWM : Foword PWM, slow decay // IN1 = 0 , IN2 = PWM : Reverse PWM, fast decay // IN1 = PWM, IN2 = 1 : Reverse PWM, slow decay // Controll/buffer: 0 1 2 3 4 5 6 7 8 9 // ---------------: --- --- --- --- --- --- --- --- --- --- // R JOY CENTER : 128 128 9 // R JOY UP : 255 9 // R JOY DN : 1 9 // R JOY R : 255 9 // R JOY L : 1 9 // R PUSH SW Y : 16 1 // R PUSH SW A : 32 1 // R PUSH SW B : 64 1 // R PUSH SW X : 1 1 // R1 : 8 1 // R2 : 16 1 // L1 : 2 1 // L2 : 4 1 // SELECT : 12 1 // START : 3 1 // L JOY CENTER : 128 128 18 // L JOY UP : 255 18 // L JOY DN : 1 18 // L JOY R : 255 18 // L JOY L : 1 18 // L TOGGLE UP : 1 1 // L TOGGLE DN : 2 1 // L TOGGLE R : 4 1 // L TOGGLE L : 8 1 // R ACCEL CENTER : 0 0 128 128 128 128 128 128 1 97 // R ACCEL UP : 0 0 128 128 128 1 128 1 128 97 // R ACCEL DN : 0 0 128 128 128 255 128 255 128 97 // R ACCEL R : 0 0 128 128 255 128 255 128 128 97 // R ACCEL L : 0 0 128 128 1 128 1 128 128 97 // L ACCEL CENTER : 0 0 128 128 128 128 128 128 1 65 // L ACCEL UP : 0 0 128 1 128 128 128 255 128 65 // L ACCEL DN : 0 0 128 255 128 255 128 255 128 65 // L ACCEL R : 0 0 255 128 128 128 255 128 128 65 // L ACCEL L : 0 0 1 128 128 128 1 128 128 65 // ---------------: --- --- --- --- --- --- --- --- --- --- // Controll/buffer: 0 1 2 3 4 5 6 7 8 9 #include <M5Stack.h> #include <WiFi.h> #include <WiFiUdp.h> #include "RCWController.h" const char ssid[] = "ESP32-RCWC"; const char pass[] = "esp32pass"; WiFiUDP udp; unsigned int localPort = 10000; const int PACKET_SIZE = 256; char packetBuffer[PACKET_SIZE]; long S, L, R, c1, c2, c3, c4, x = 0, y = 0; char buff[32]; // UDP buffer int8_t getBatteryLevel(){ Wire.beginTransmission(0x75); Wire.write(0x78); if (Wire.endTransmission(false) == 0 && Wire.requestFrom(0x75, 1)) { switch (Wire.read() & 0xF0) { case 0xE0: return 25; case 0xC0: return 50; case 0x80: return 75; case 0x00: return 100; default: return 0; } } return -1; } void battery_level(){ M5.Lcd.setCursor(0, 200); M5.Lcd.print("Battery Level: "); M5.Lcd.print(getBatteryLevel()); M5.Lcd.print("%"); M5.Lcd.setCursor(0, 220); if (getBatteryLevel() == -1){M5.Lcd.print(" or Not USB IP5306");} } void motor() { S = sqrt( x * x + y * y ); if ( S > 255 ){ S = 255;} M5.Lcd.clear(BLACK); M5.Lcd.setCursor(5, 25);M5.Lcd.print("speed: ");M5.Lcd.print(S); M5.Lcd.setCursor(5, 65);M5.Lcd.print("x: ");M5.Lcd.print(x); M5.Lcd.setCursor(5,105);M5.Lcd.print("y: ");M5.Lcd.print(y); R = 0 ; if (x >= 0){ R = abs(x);} L = 0 ; if (x < 0){ L = abs(x);} c1 = c3 = 1 ; if ( y >= 0 ){ c1 = S - R; c3 = S - L;} c2 = c4 = 1 ; if ( y < 0 ){ c2 = S - R; c4 = S - L;} ledcWrite(1, c1); // ch1, Phase, 5, IN1, RIGHT MOTOR- ledcWrite(2, c2); // ch2, PWM , 17, IN2, RIGHT MOTOR+ ledcWrite(3, c3); // ch3, Phase, 13, IN3, LEFT MOTOR+ ledcWrite(4, c4); // ch4, PWM , 0, IN4, LEFT MOTOR- } void setup() { M5.begin(); M5.Lcd.fillScreen(TFT_BLACK); M5.Lcd.setTextColor(GREEN); M5.Lcd.setTextSize(2); ledcSetup(1,5000,8);ledcSetup(2,5000,8); // channel,freq,resolution_bits ledcSetup(3,5000,8);ledcSetup(4,5000,8); // channel,freq,resolution_bits ledcAttachPin(17, 1); // GPIO17 , ch1, IN2, OUT2, LEFT MOTOR+ ledcAttachPin( 5, 2); // GPIO 5 , ch2, IN1, OUT1, LEFT MOTOR- ledcAttachPin(13, 3); // GPIO13 , ch3, IN3, OUT3, RIGHT MOTOR+ ledcAttachPin( 0, 4); // GPIO 0 , ch4, IN4, OUT4, RIGHT MOTOR- ledcWrite(1,0);ledcWrite(2,0);ledcWrite(3,0);ledcWrite(4,0);// STOP battery_level();delay(3000); WiFi.softAP(ssid, pass); IPAddress myIP = WiFi.softAPIP(); M5.Lcd.setCursor(5, 15);M5.Lcd.print("AP IP address: ");M5.Lcd.println(myIP); M5.Lcd.setCursor(5, 35);M5.Lcd.print("Starting UDP"); udp.begin(localPort); M5.Lcd.setCursor(5, 55);M5.Lcd.print("Local port: ");M5.Lcd.println(localPort); M5.Lcd.setCursor(5, 75);M5.Lcd.print("wifi ssid = ESP32-RCWC"); M5.Lcd.setCursor(5, 95);M5.Lcd.print("password = esp32pass"); M5.Lcd.setCursor(5,115);M5.Lcd.print("Operate RCWController");delay(5000); M5.Lcd.fillScreen(BLUE);delay(1000);M5.Lcd.fillScreen(TFT_BLACK); M5.Lcd.setTextSize(3); M5.Lcd.setCursor(5,25);M5.Lcd.print("START"); } void loop() { int rx = udp.parsePacket(); // UDP packet size if (rx) { // UDP recive int len = udp.read(buff,rx); // recive lengs if (len > 0){ // recive action buff[len] = '\0'; // Termination clear x = map(buff[4],1,255,100,-100); // R JOYSTICK X: 50 to -50 y = map(buff[5],1,255,-255,255); // R JOYSTICK Y:-255 to 255 if ( abs(y) < 100 ){ x = x * 2;} // Operability of x motor(); // move motor } } battery_level(); // battery check }
moio , M5Stack , M5 Wheel Module , RCWController , wifi , UDP ,
M5 Wheel Module ( moio )
M5 Wheel Module を製作しました。 ORG:2019.08.21 rev1:2019.12.17
全体の名称は moio と言います。
moio | moio |
.
M5 Wheel Module の Metal Gear Type:費用 1500円。
M5 Whell Module ( Metal gear ) | M5 Whell Module ( Metal gear ) |
.
M5 Wheel Module の Plastic Gear Type:費用 760円。
M5 Whell Module ( Plastic gear ) | M5 Whell Module ( Plastic gear ) |
.
M5Stackを除く 2400mA Battery + Servo + Metal Gear Type:費用 2500円。
M5Stackを除く 2400mA Battery + Servo + Plastic Gear Type:費用 1800円。
M5Stack + 2400mA Battery (640円) | Servo Module DRV8833 (330円) |
M5 Wheel Module (Metal Gear) (1500円) | M5 Wheel Module (Plastic Gear)(760円) |
.
構成とサイズ:
.
準備:
1. M5Stack:
2. M5STACK Strongest 2400 mAh Battery Module:633円。
3. Make M5Stack Servo Module:329円。
4. M5 Wheel Module: Metal Gear Type:1492円。
5. M5 Wheel Module:Plastic Gear Type: 752円。
.
費用詳細:
全体 ( moio )
_ 以前の記事にある 2400 mAh Battery Module と Servo Module を組み合わせます。
No | Nomen | Purchase | Price |
1 | M5Stack | – | – |
2 | 2400mA Battery Module | 2400 mAh Battery Module | 633円 |
3 | Servo Module | M5Stack Servo Module | 329円 |
4 | Wheel Module:Metal Gear | 以下の部品表に記載 | 1492円 |
4 | Wheel Module:Plastic Gear | 以下の部品表に記載 | 752円 |
= | ==================== | ================ | ====== |
1 | 費用総計: Metal Gear | – | 2454円 |
2 | 費用総計:Plastic Gear | – | 1714円 |
.
部品表:
⭕ M5 Wheel Module:Metal Gear Type:Gear は金属製です。
_ 価格は円レートにより変化します。
No | Nomen | Purchase | Price |
1 | 3V DC Micro U-Typ Gear Box . Motor N20 5-4000RPM . Voltage:3V, Speed:200RPM . |
ebay:xyfs-us Store . 輸送期間:7-11日。 . 557円 x 2個(pcs) |
1114円 |
1 | 3V DC Micro U-Typ Gear Box . Motor N20 5-4000RPM . Voltage:3V, Speed:200RPM . |
Aliexpress:miniyard Store . 輸送期間:16day, 9day . 469円 x 2個(pcs) . .追記:2019.08.22:$4.41 |
938円 |
1 | 3V DC Gear Motors . GA1024-N20 . Voltage:3V, Speed:200RPM . |
Aliexpress:ModuleLive Store . 輸送期間:– . 469円 x 2個(pcs) .追記:2019.11.15:$3.32 |
722円 |
2 | Oring 16mm : . Thickness: 1.9mm . Outside Dia: 16mm |
ebay:mnsmoresell . 輸送期間:25日 |
12円 |
3 | Screw:8ea . M2 5mm ナベTapping Screw |
西川電子部品株式会社 | 12円 |
4 | pcb:0.3mm厚ユニバーサル基板 | 秋月電子通商:Cタイプ | 120円 |
5 | ピンヘッダー 1×6 (6P) | 秋月電子通商:6P | 20円 |
6 | シングルピンソケット(低メス)14p | 秋月電子通商:低メス14P | 50円 |
7 | CASE | 3D Printer 自作:材料費 | 340円 |
8 | |||
= | ==================== | ================ | ====== |
費用総計 ( Total cost ) | Motor : xyfs-us Store | 1668円 | |
費用総計 ( Total cost ) | Motor : miniyard Store | 1492円 | |
費用総計 ( Total cost ) | Motor : ModuleLive Store | 1276円 |
メモ:Motor の No-load speed(RPM) は 50 から 1000 までの種類があります。
_ 50 や 100 は 進む速度が遅いです。150 か 200, 300 が良いかと思います。
_ (計算:150=11cm/s, 200=16cm/s, 300=21cm/s)
_ 最初は 150 を使用しましたが その後は 200 又は 300 を使用しています。
_ 200 は 適度に速く操作しやすくなる。⭕
_ 300 は 速度は速く傾く程でなく 機敏な動作をします。
_ 追記:2019.08.22 Aliexpress の miniyard Store をリストに追加。
_ 追記:2019.11.15 Aliexpress の ModuleLive Store をリストに追加。
メモ:O-Ring は 千石電商で ゴムベルト15mm (163円)が販売されています。
.
⭕ M5 Wheel Module:Plastic Gear Type:赤いケースの中にPlastic Gear内臓。
No | Nomen | Purchase | Price |
1 | Micro 412 Coreless . Gear Motor DC 3V . |
ebay:supersinostore . 輸送期間:13日. 93円 x 2個(pcs) |
186円 |
2 | Oring 16mm : . Thickness: 1.9mm . Outside Dia: 16mm |
ebay:mnsmoresell . 輸送期間:25日 |
12円 |
3 | Screw:4ea . M2 5mm ナベTapping Screw |
西川電子部品株式会社 | 12円 |
4 | pcb:0.3mm厚ユニバーサル基板 | 秋月電子通商:Cタイプ | 120円 |
5 | ピンヘッダー 1×6 (6P) | 秋月電子通商:6P | 20円 |
6 | シングルピンソケット(低メス)14p | 秋月電子通商:低メス14P | 50円 |
7 | CASE | 3D Printer 自作:材料費 | 352円 |
8 | |||
= | ==================== | ================ | ====== |
費用総計 | 752円 |
.
仕様:全重量とタイヤ直径、ギヤー比から速度を計算する。
1. Metal Gear:速度は 1秒間11cm。
_ 全体の重さ:125g :Rorted Torque=63g (2綸の片側)。
_ :補助 2400mA Battery 追加 = 170g
_ タイヤ直径:18mm
_ トルク表から計算:販売店 xyfs-us Store に記載あり。
_ 1. Voltage:3VDC 。( 他に 6V, 12V がある )
_ 2. Speed:150RPM ( 他に 200RPM, 300RPM がある)
_ 3. トルク:3V:NO LOAD SPEED=150, Rorted Torque=63g (2綸の片側)
_ 4. LOAD SPEED:120rpm
_ 5. Roted Torque:100g.cm:Rorted Torque=63g に対し 100g/cm で動く。
_ 計算値:18×3.14=56mm。120/56=2rpm/sec。56×2=112mm/sec
_ 結果:11cm/sec
_ メモ:
_ NO LOAD SPEED=150 の場合は 11cm/sec:少し遅い。
_ NO LOAD SPEED=200 の場合は 16cm/sec:適度な速度。
_ NO LOAD SPEED=300 の場合は 21cm/sec:少し速い。
_
2. Plastic Gear:
_ 1. Voltage:DC3V-3.7V。
_ 2. Speed:300RPM
_ 全体の重さ 125g でも動きます。
.
諸元:
1. Metal Gear:全体の価格の半分を占め、高めになります。
_ 騒音は モーター音 ぐらいで静かです。
_ 価格は高めですが 騒音や複数の稼働環境を考慮すると Metal Gear が良い。
2. Plastic Gear:価格は低価格です。Gearの音が大きいです。
_ 低価格で気楽ですし、少しだけ試すのに良いかと思います。
.
製作:3D Printer で製作しました。白色の6つが Printer の出力です。
.
_ CAD図面:
Metal Gear | Plastic Gear |
.
_ 配線:Make M5Stack Servo Module を参照ください。
_ 注意: Motor回転方向:Motor の + – は Motorにより回転方向が異なります。
_ 回転方向が異なる場合は + – の配線を逆にします。
M5Stack | 3V3 | GND | GPIO 5 | GPIO 17 | GPIO 13 | GPIO 0 |
DRV8833 | VCC | GND | IN1 | IN2 | IN3 | IN4 |
DRV8833 | ULT | GND | OUT1 | OUT2 | OUT3 | OUT4 |
DC Motor | – | – | L Motor – | L Motor + | R Motor + | R Motor – |
.
_ 組み立て完成:Metal Gear Type + Motor
.
_ Motor + Servo Module 組立。+ M5Stack + 2400mA 組立後の裏側。
_ 車輪を含めた高さは 43mmです。
_ 車輪は2個で球体の支えは1個の3本足です。
_ 転倒防止の為に補助の球体の支えがあり 位置は 1mm 低く通常は設置されていません。
.
_ Servo専用 2400mA Battery Module :
_ 画像左 の 2400mA専用バッテリー追加により 長時間動作が可能になります。
_ 高さは 11mm 追加。全体は 45 + 11 = 56mm の高さになります。
_ M5Stackの幅(54mm)より高く見えると デザイン的に綺麗で無くなります。
Added 2400mA Battery ( H=56mm ) | moio STANDARD ( H = 45mm ) |
.
メモ:
_ 車輪:直径 16mm、幅 2.6mm、半円の溝を設け 16mm O-Ringを填めます。
_ 構造的に横からの力に弱い点が考えられます。
_ 強度が足りない場合は 再設計する必要があります。
_ 強度:全体の強度は通常の玩具と比べるとかなり弱いと思われます。
_ 価格:ケースの材料費は 340円 (SCL)。
_ 調査:DMM.makeの価格は高く 作る意味が無い為、使用しません。
_ M5サイズで凸凹のかみ合わせ形状に捕らわれずに製作すれば低価格が可能。
_ 接続:M5Stack Proto Board は横にコネクターを出す物が多く見た目が綺麗でない。
_ 綺麗さを出す為に コネクター接続は 内部で縦に接続するデザインです。
ABS版(左) と スケルトン版(右):
.
スケッチ作成:
1. BLYNKで操作する。以下を参照に GPIO を設定するとJoystickで操作が可能です。
_ blynkkk/blynk-library:Blynk Library
_ App Store:Blynk – IoT for Arduino, ESP32:iOSアプリ
_ 参考:ホームメイドガービッジ:ESP32 と BLYNK と円形ロボットシャーシーキットと
_ 上記スケッチを参照し M5 Wheel Module ( moio ) 版を作成。
_ リストは この記事の最下位に記載します。
_ 参考:お父ちゃん:M5Stick-Car:I made Blynk-controlled mini Car using M5Stick-C.
_
_ ⭕追記:2019.08.27
_ Operate M5 Whell (moio) with RCWControll:RCWController アプリ操作方法。
_ iPhone (iPad) と M5 moio 間で直接 WiFi 接続するので便利です。
_
.
以下、他の方法を示します。
2. JoaoLopesF氏の ESP32MotorControl Library を使用する。
_ 例:MotorControl.motorForward(0, speed); にて制御出来ます。
3. M5StckCのBeetleCを使用する。m5stack/M5-ProductExampleCodes
4. iOSアプリの RCWController を使用する。
_ robo8080/ESP32_RCWController_Test
.
参考:
_ JoaoLopesF/ESP32MotorControl:ライブラリー
_ jkb-git/ESP32Servo:ライブラリー
_ blynkkk/blynk-library:Blynk ライブラリー
_ App Store:Blynk – IoT for Arduino, ESP32:iOSアプリ
_ ホームメイドガービッジ:ESP32 と BLYNK と円形ロボットシャーシーキットと:
_ BeetleC (W/O M5StickC) $11.95:
_ M5StickC+BeetleC M5StickC+BeetleC+M5StickVで自動運転する :
_ m5stack/M5-ProductExampleCodes:BeetleC:UDP通信による WEBコントロール。
_ iOSアプリの:RCWController:
_ robo8080/ESP32_RCWController_Test:RVWControllerの使用例。
_ ホームメイドガービッジ:M5StickC で倒立振子 PID制御編 ー倒立振子への道 3:
_ ごじ:ESP-WROOM-02で動かす小型 (50x50x50mm) のラジコンカー:
_
.
補足:2019.12.17 追記。
Thingiverse と M5 Wheel Module ( moio ) CAD data:
_ 結論:Thingiverse のデーターは 寸法が間違っています。
_ 私のブログの記事「M5 Wheel Module ( moio )」を見て Bas kasteel氏が
_ CAD図面を起こし Thingiverse に「M5Stack module MOIO by macsbug 」
_ として ケースの CAD データーを断り無く、検証もせず公開しています。
_ そこで、解像度の高いプリンターと 通常のプリンターで出力を検証しました。
_ 例として Motor が入りません。他の2つのデーターもサイズが間違っています。
_ つまり Thingiverse にあるのは 偽物のデーターです。
_ 検証を実施してから公開してください。
_
.
感想:
M5サイズの車輪製作:
_ M5Stack 発売時より M5サイズの車輪を望んでいました。
_ 多くの車は 車輪が大きく本体より外にあり、動作範囲も大きく綺麗でないです。
_ 製作する内に 何故か 限りなく SONYの「toio」に近づいてきました。
_ 比べれば比べる程 天と地の差を ひしひしと感じます。今回の製作物は
_ おもちゃにもならないレベルです。
_ センサー等を駆使すると多機能な物ができますが 今回は基本の駆動部分のみです。
_ 拡張性:センサー等を PROTO Module で Stack する予定です。
_ スケッチ:制御用アプリは重要で 今回は Blynk を試しました。Blynk は 目の前の
_ 物をネット経由で操作する為、好みではありません。他に 距離センサー や
_ 光センサー、accelerator 等を駆使し 操作性の良い スケッチが必要です。
_ Motor:No load Speed(RMP) は 50,100,150,200 を試しました。
_ 結果、50,100 は速度が遅く 使い道に難があります。当初 150 を試し
_ 使用できていますが 200 の方が速度対応が広く 200 を追加発注しました。
_ 250以上は試していませんが 速度が速くなると本体が傾くか 全体を高く
_ すると、倒れる事が起きるかと思います。動画は 200 を使用しています。
_ 調査の為に 300 を Order中です。
_ Gear:Gear 未使用の作品や製品を見かけますが Gear が無いと 速度が速く
_ Controll しにくい事や トルク不足になるかと判断しています。
メモ:追記:2019.08.24
_ CAD データーと出力について:
_ 1. ブログの WordPress は 圧縮データーを投稿出来ない為に 残念ながら
_ CAD データー を公開する事ができません。GitHubは使用方法が解りません。
_ 2. データーは プロ用の3D Printer (300万クラス)を使用した CADデーターです。
_ 通常のプリンターは 精度(X,Y軸)が低く正しく出力しません。
_ 理由は 凸部分(幅が狭い)を出力する事ができないからです。
_ M5Stackは 射出成型でX,Y軸が 0.6mm幅(凸部)で 材質も強く
_ 通常のプリンターでは 出力出来ない精度と強度になっています。
_ この条件をクリヤーする為に 他の工作では Expansion方式を記載しています。
_ 3. Wheel Module のような M5Stack の後部の場合は 凸部の工夫により低精度
_ でも可能です。低精度用の図面は 作成しておらず 低精度に合わせた現物合わせ
_ も 0.2mm 単位で必要になります。
_ 4. 都内や M5Stack 等の集まりで出力品をお渡しする事は可能です。
.
_ toio と moio の比較:toioの機能と超小型サイズは見事です。
SONY toio:技術と努力の集大成から学ぶ物が多いです。
_ ロボットや玩具の中で1番の製品で、他に toio にまさる製品はありません。
_ 参考:toio 分解図:
_ 現物や分解画像から想像すると、見れば見る程 検討に検討を重ねた内容に驚きます。
_ 外観や素材の安全性があり 投げても壊れない設計。
_ 車輪は縦横の力に強い材料と構造になっている。不思議な素材で出来ています。
_ Motor は今回使用している Motor より小さく強力(速度が速い)。
_ このサイズのMotorは素人では秋葉原やebay、Aliespress では手に入らない。特注品?
_ Gear は プラスチック製で騒音は殆ど無く SONYらしい高精度な設計。これは凄い!
_ ケース事態のネジ止めはない。
_ 車輪は2つで 支えは 1つ。4輪だと浮く場所ができるからだろう。
_ 2つ目の支えは 転倒を防ぐことが出来る様です。高速の時に必要。
_ 支えはスイッチにもなっている。ここまでアイデアが入っている。
_ シートの微細な画像を読む為に、画像を認識出来るセンサーが下に搭載されている。
_ この画像認識出来るセンサーは 素人には手に入らない。
_ シートのアイデアは素晴らしい。シートから情報を得る事ができる。
_ シートでプログラムも出来る高度な内容。このアイデアは他にも使用できる。
_ 速度は 30cm/sec 位かと思われます。
_ 小さい為に小回りが出来て 遊べる範囲が広いです。
_ 小さなバッテリーが内蔵され 2時間以上持つと公表されています。凄い省エネ技術。
_ このサイズに入る程 各部のチューニングが素晴らしい。
_ ハードとソフトの作り込みが凄いです。
_ 圧倒され 他に、私には解らない事も含まれていると思います。
_ APIが公開され M5StackやESP32で操作する事が可能です。
_ 今回のWheelの製作が面倒な場合は toio を購入された方が良いです。
_ 長年の開発期間と内容から 価格は理解出来ますが 遊ぶには高い。
_ 低価格で 車輪部分だけの販売があれば良いなと思っています。
追記:2019.12.03
続編:M5 Wheel ( moio ) part 2:2019.12.03:
_ 作りやすい Easy PROTO Module で M5 Wheel ( moio ) を製作。
.
スケッチ:M5Stack moio + BLINK : 2019.08.21 macsbug
// M5Stack moio + BLINK : 2019.08.21 macsbug // https://macsbug.wordpress.com/2019/08/21/m5-wheel-module-moio/ // https://homemadegarbage.com/esp32_minirobot01 // https://mvdlande.wordpress.com/2019/06/02/drv8833-motor-driver-module/ // DRV8833 + M5Stack + DC MOTOR // INx :GPIO: OUTx : MOTOR :CH : // IN1 : 5 : OUT1 : RIGHT - : 1 : // IN2 : 17 : OUT2 : RIGHT + : 2 : // IN3 : 13 : OUT3 : LEFT + : 3 : // IN4 : 0 : OUT4 : LEFT - : 4 : // DRV8833 H-BRIDGE // IN1 = PWM, IN2 = 0 : Foword PWM, fast decay // IN1 = 1 , IN2 = PWM : Foword PWM, slow decay // IN1 = 0 , IN2 = PWM : Reverse PWM, fast decay // IN1 = PWM, IN2 = 1 : Reverse PWM, slow decay #include <M5Stack.h> #define BLYNK_PRINT Serial #include <WiFi.h> #include <WiFiClient.h> #include <BlynkSimpleEsp32.h> char auth[] = "frss_BKbeyBIIehKeBK2hAEp78NCB-Ym"; // BLINK char ssid[] = "your ssid"; char pass[] = "your password"; long S, L, R; BLYNK_WRITE(V0) { // V0 ( Joystick ) long x = param[0].asInt(); long y = param[1].asInt(); M5.Lcd.fillScreen(TFT_BLACK); M5.Lcd.setCursor(5,25);M5.Lcd.print("x: ");M5.Lcd.print(x); M5.Lcd.setCursor(5,65);M5.Lcd.print("y: ");M5.Lcd.print(y); S = sqrt( x * x + y * y ); if( S > 255 ){ S = 255;} M5.Lcd.setCursor(5,105);M5.Lcd.print("speed: "); M5.Lcd.print(S);M5.Lcd.print(" "); if( y >= 0 ){ M5.Lcd.println("FOWARD"); // FOWARD if( x >= 0 ){ L = 0; R = abs(x/2); }else{ L = abs(x/2); R = 0; } ledcWrite(1, S - R); // ch1, PWM , 5, IN1, RIGHT MOTOR- ledcWrite(2, 1); // ch2, Phase, 17, IN2, RIGHT MOTOR+ ledcWrite(3, S - L); // ch3, PWM , 13, IN3, LEFT MOTOR+ ledcWrite(4, 1); // ch4, Phase, 0, IN4, LEFT MOTOR- }else{ M5.Lcd.println("BACK"); // BACK if( x >= 0 ){ L = 0; R = abs(x/2); }else{ L = abs(x/2); R = 0; } ledcWrite(1, 1 ); // ch1, Phase, 5, IN1, RIGHT MOTOR- ledcWrite(2, S - R); // ch2, PWM , 17, IN2, RIGHT MOTOR+ ledcWrite(3, 1 ); // ch3, Phase, 13, IN3, LEFT MOTOR+ ledcWrite(4, S - L); // ch4, PWM , 0, IN4, LEFT MOTOR- } } void setup(){ M5.begin(); M5.Lcd.fillScreen(TFT_BLACK); M5.Lcd.setTextColor(TFT_WHITE); M5.Lcd.setTextSize(3); ledcSetup(1, 5000, 8); // channel, freq, resolution_bits ledcSetup(2, 5000, 8); ledcSetup(3, 5000, 8); ledcSetup(4, 5000, 8); //GPIO,Ch, INx, OUTx, MOTOR ledcAttachPin( 5, 1); // 5 , 1, IN1, OUT1, RIGHT MOTOR- ledcAttachPin(17, 2); // 17 , 2, IN2, OUT2, RIGHT MOTOR+ ledcAttachPin(13, 3); // 13 , 3, IN3, OUT3, LEFT MOTOR+ ledcAttachPin( 0, 4); // 0 , 4, IN4, OUT4, LEFT MOTOR- M5.Lcd.setCursor(1,25);M5.Lcd.print("SSID=" + String(ssid)); Blynk.begin(auth, ssid, pass); delay(3000); } void loop(){ Blynk.run(); }
M5Stack , M5 Wheel Module , moio , DRV8833 , Wheel , SONY , toio , Blynk , BeetleC ,
Make M5Stack Servo Module
M5Stack Servo Module を製作しました。 2019.08.10
Servo Module は DC Motor 又は Stepper Motor を ドライブします。
Driver tip は DRV8833 (90円) を使用し 費用は 400円です。
調査チップは 左上から L9110, DRV8833, MX1508, DRV8835 の4種類です。
.
Drive IC と Module 表:
Name | price | Size mm | Store | Transport | Operation |
L9110 | 83円 | 29×23 | yang-sell584 | 22 day | X |
DRV8833 | 90円 | 19×16 | shoptongs | 15 day | ⭕ |
MX1508 | 267円 | 25×21 | sweetsale07 | 16 day | ◯ |
DRV8835 | 300円 | 15×10 | 秋月電子通商 | – | ◯ |
L297 | 80円 | 25×21 | picturesqre- | – | |
L298N | 40円 | 25×21 | Glintdeer | – | |
DRV8833 | 59円 | 19×16 | SAMIORE | – |
_ 評価:価格, 輸送期間, サイズ, 工作容易, 動作 調査の結果 DRV8833 を採用。
_ 仕様:Output Current=1.5A, Power Supply Voltage Range=2.7 to 10.8V
_ L9110:基板に組む為のコネクターの取り外しが手間と動作が不安定で非採用。
_ DRV8833:ebay の shoptongs Store は 2個180円と安く、輸送期間は15日で短い。
_ 小型の為、複数個の搭載が可能。その後(2019.11.21)高くなる。
_ DRV8833国内価格:スイッチサイエンスは 733円で8倍の高価格。購入は非採用。
_ MX1508 は L298N と同等品の様です。低価格重視の為に非採用。
_ DRV8835:超小型で組み込み便利。優秀な基板です。低価格重視の為に非採用。
_ 入力電源と出力電源は別系統の設計になっています。
_ 追記:2019.08.27:L297, L298N , DRV8833 調査中
_ 追記:2020.04.08:MX1508, 1個27円($0.24)。
.
部品準備:
No | Nomen | Purchase | Price |
1 | DRV8833 2 Ch DC Motor Driver |
ebay;shoptongs | 90円 |
1 | DRV8833 2 Ch DC Motor Driver |
Aliexpress; _ Shenzhen BaoXin E _ 2024.01.02 |
247円 |
2 | ピンヘッダー ( male, H=7.7mm ) |
秋月電子通商: | 90円 |
3 | ピンヘッダー 1×6 (6P) | 秋月電子通商:ピンヘッダ | 20円 |
4 | M5Stack PROTO Board | tomorrow氏設計製作 基板 | 100円 |
5 | M2 5mm ナベTapping Screw(4ea) | 西川電子部品株式会社 | 6円 |
6 | ケース:H=8.3mm |
自作:材料費 FDM Low cost PROTO module of M5STACK Part 2 |
14円 |
7 | ショットキーバリアダイオード . RSX101VAM-30, 30V1A |
秋月電子通商: RSX101VAM-30 |
9円 |
= | ==================== | ================ | ====== |
費用総計 (2019.08.10) | DRV8833:shoptongs | 329円 | |
費用総計 (2019.11.21) | DRV8833:Hong Kong.. | 293円 |
追記:DRV8833 最安値:2019.11.21
_ 1個 54円:10pcs $4.81, 533円。Hong Kong feng tai co., LTD
_ 1個 65円: 1pcs $0.60。cuiisw module Store
.
配線:
_ M5Stack 配線例:配線は 10本です。
_ DRV8833 の 入力(GPIO)電源はVCC、出力 (Motor)電源は ULT(VM) です。
_ 電源は 共に M-BUS の 3.3Vを使用します。
_ ULT – VCC間のショットキーバリアダイオードは VCC から ULT へ供給します。
_ 補足:補助バッテリ未接続時に ULT へ電源を供給します。
_ 外部もしくは補助バッテリーを使用する時は ULT(VM) へ接続します。
_ DRV8833 の IN 1,2,3,4 に M5Stack の GPIO を接続します。
_ DRV8833 の OUT 1,2,3,4 に DC Motor を接続します。
_ メモ : IN, OUT は基板上の名前、IC の名前は AIN, BIN, AOUT,BOUT です。
_ メモ:MOTORの回転方向:+, – 表示と回転方向は MOTORにより異なります。
M5Stack | 3V3 | GND | GPIO 5 | GPIO 17 | GPIO 13 | GPIO 0 |
DRV8833 | VCC | GND | IN1 | IN2 | IN3 | IN4 |
DRV8833 | ULT | GND | OUT1 | OUT2 | OUT3 | OUT4 |
DC Motor | – | – | L Motor – | L Motor + | R Motor + | R Motor – |
.
_ 各端子と動作表: 1つの Motor の動作を示します。
INx | IN1 | IN2 | DRV8833 Input |
GPIO | 5 | 7 | M5Stack M-BUS |
Motor | RIGHT – | RIGHT + | DC Motor |
1 | PWM | 0 | Foward fast |
2 | 1 | PWM | Foward slow |
3 | 0 | PWM | Reverse fast |
4 | PWM | 1 | Reverse slow |
.
_ スケッチの基本:
ledc Channel | 1 | 2 | 3 | 4 |
M-BUS GPIO | 5 | 17 | 13 | 0 |
DRV8833 IN | 1 | 2 | 3 | 4 |
DRV8833 OUT | 1 | 2 | 3 | 4 |
Motor | Right – | Right + | Left + | Left – |
ledWrite ( ch , PWM or Phase ); ledWrite ( 1 , PWM); // PWM : Foward slow ledWrite ( 1 , 1 ); // Phase : Foward slow
_ 基板レイアウトと回路図、配線。
.
_ DRV8833 Module Schematic
.
Servo Module Layout:
.
_ Solder side wiring
メモ:
_ Motorの電源は M5Stack USB 又は 2400mA Battery の 3.3v を使用します。
_ Motorの電源は 外部バッテリーを使用する事も可能です。
_ 配線面の右上のコネクターは 外部バッテリー接続時の予備のコネクターです。
_ 綺麗なデザインにする為に 接続コネクターは横から出さず 縦に接続します。
.
資料:
L9110:L9110 Datasheet
DRV8833:DRV8833 Dual H-Bridge Motor Driver
MX1508:Using the MX1508 Brushed DC Motor Driver , pdf
DRV8835:DRV8835 Dual Low-Voltage H-Bridge IC
H-BRIDGE:どの Module (tip) も H-BRIDGE 接続 ( Motor の正逆転) が可能です。
_ H-Bridge DC Motor Applications
Adafruit DRV8833 DC/Stepper Motor Driver Breakout Board:
My Tech notes:DRV8833 motor driver module:回路動作と回路図。
Pololu:DRV8833 Dual Motor Driver Carrier:基板と動作の詳細。
HACKADAY.IO:Low level DC motor driver:H-bridge circuit の説明。
コーヒーとチョコレート:ESP32でローバーの基板を作ったお話:ESP32+DRV8833
_ 追記:2020.04.08:MX1508 の情報。
_ MX1508 vs L9110S vs TB6612 vs L293 Motordriver board
_ Arduino のモーター制御を TA7291P から MX1508 に変更
_ github : MX1508
_ MX1508 SPEC
.
感想:
今回の記事は DC Motor を低価格で動作させる為の Servo Drive です。
格安で動作する Servo Module を調査 及び 動作試験を実施しました。
Module を使用するとCR部品も装備されている為、便利です。
結果、DRV8833 は 格安で輸送期間も短くリーズナブルです。
次回は DC Motor Module の製作記事を予定です。
M5Stack , Servo , H-bridge , DRV8833, DRV8835 , MAX1508 , L9110 , L298N ,