fc2ブログ

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

現在、大阪南港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) その4(プログラム編)

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

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

安価に作る倒立2輪ロボットの紹介 その5

その5 ソフトウェアについて

今回応用させて頂いた基本ソースは、6年前に倒立2輪ロボットの製作を始めた頃に出会ったサインスマート社の
セルフバランシングロボットです。教材的なキットとして販売されていますが、WiFiモジュールが技適認証外のため
残念ですが国内で使えません。そこで、マイコンをArduinoから技適対応の通信機能を内蔵したESP系に置き換え、
BLYNK APPを使ってスマートフォンからリモコン操作が出来るようにしました。
参考にしたサインスマート社のページ  (現在は新しい機種が販売されています)

モータの取り付け方法を両面テープ止めからネジ止め式に変更しました。
M5StampPico_SBR_Top3.jpg

マイコンにESP32系を使うための変更
M5 Stamp PicoやM5 Stack Atom Liteを使うためには、基本ソースの変更が必要です。
また、リモコンに何を使うかによっても受信部やモータコントロール部が異なりますが、ここではその4で紹介の
BlynkAPPを使った場合に合わせたコードの変更を記します。

1)ライブラリーのインストール
各リンクサイトからライブラリーのzipファイルをダウンロードしてArduinoIDEにインクルードしておきます。
インストール手順:ArduinoIDE⇒スケッチ⇒ライブラリーをインクルード⇒ZIP形式のライブラリーをインストール
①MPU6050-0.4.0.zip
mpu6050ライブラリー ダウンロードサイトへのリンク
②M5Atom-0.0.5.zip
M5Atom ライブラリー ダウンロードサイトへのリンク

2)ソースコードの変更
ソースコードが長いので下記ページを開きながら参照して下さい。
行番号&注釈付きソースコードを別ページに開きます。
主な変更点
①12行目:Blynk APPから取得したauth codeを記入します。
スマートフォンとWiFのペアリング時に56行目のデバイス名「M5Stamp_BLE」が表示されるのでペアリングします。
デバイス名は任意なので好みの名称に変更出来ます。
②70~80行目:ESP32系のPWM出力の設定です。(arduinoのanalogWriteに相当)
ここでは、8ビット0~255のPWM信号を扱います。
注意:使用するマイコン M5 Stamp PicoとM5 Stack Atom liteでは使用GPIO番号が異なります。
③93~102行目:BLYNK_WRITE(V0)の設定
Blynk APPで設定したV0のボタンスイッチ(トグル)です。
走路が滑らかなフローリングの場合やカーペットやマットなどの使用条件により、モータの出力を切り替えています。
④104~167行目:BLYNK_WRITE(V1)の設定
ジョイスティックからのx、y信号の値 0~±255を前後進と左右旋回及び停止信号に変換しています。
使い易くするためにx、y方向共に0~±100の間を不感帯としています。
⑤183~197行目:PIDの調整
ここでは、私が試したkp、ki、kdの値を記していますが、個体差が有るので微調整が必要です。
時間が掛かりますが、一番安定する値を求めて下さい。
⑥199~228行目: MotorControl
ジャイロセンサーの傾斜角度及びPID制御により得たOutput値とBlynkコントローラーから受信して得た
Run_Speed値及びTurn_Speed値の合計値を、左右のモータを動かすモータドライバーへ出力します。
ArudinoIDE用txtファイルを添付しましたコピーして貼り付けます。

3)調整のポイント
①静止せずに前後何れか決まった方向に進む場合は、20行目のAngle_offsetの値を0から少し±に変更すると
僅かに前後に動くがほぼ静止するポイントが有ります。
この調整が面倒な方は、ジャイロセンサーの取り付け方法をシーソー式とし、傾きを僅かに変えることにより静止
ポイントを簡単に見付けることが出来ます。但し調整後に動かないよう固定する構造が必要です。
②前項の⑤に記したPID制御の設定値ですが、kp、ki、kd各々にポテンションメータを置き、A/D変換した値により
調節するのが最良ですが、今回は省略しています。
どうしても必要な方は、スマートフォンのBlynkAPPにスライダーを3個追加してその値を利用する方法も有ります。
但し、一度値を求めたらその後は必要なく、固定値に戻せばよいので興味のある方はお試し下さい。
③前項③に記した走路によるパワーの切り替えですが、これもBlynkAPPにスライダーを2個追加することにより
連続した出力の変更が可能です。興味のある方はお試し下さい。

4)コントローラーとオペレーション
近年幼児期からスマホやゲーム機に親しむ子供が多く、スマホのジョイスティックの操作などお手の物だと思います。
しかし、後期高齢者の私は工作が得意なのにオペレーションが下手で子供達のように上手く操作が出来ません。
このバランシングロボットの欠点は少しスピードを上げると転倒します。これを転倒しないようにジョイスティックを
操作するのが大変難しく、練習が必要と痛感しています。

5)超安定バランシングロボットのお勧め
今回は安価にバランシングロボットを作るのが主題で、初めてのバランシングロボット体験とプログラムの勉強には
適材ですが、もっと安定した高性能のバランシングロボットを希望される方にはjjRobot社のB-Robot Evo2が
お勧めです。キットも販売されていますが、使用するマイコンが技適認証外なので国内で使うことが出来ません。
そこで、技適マークが付いたマイコンを使って作ったのが、昨年に紹介しましたM5 Stack ATOM Lite を使用の
B-Robot Evo2 Paradise Modelです。 このBlogのカテゴリー「倒立振子型ロボット」にてご覧頂けます。

前回参照:現在このバランシングロボットに使えるステッピングモーターが通常1個1500円以上しますが
4個セットで400円で販売されています。残り僅かです!興味のある方にはラストチャンスだと思います。
高速でも転倒し難く、海外では自作したB-Robot Evo2を持ち寄り、専用コースでレース競技も行われています。

次回紹介予定のNew Evo2
New Evo2は、上記の1個約100円のステッピングモータを使った簡易型紹介用モデルです。
ホイールやホイールフランジも市販品なのでCNC加工機が無くても作れるように設計しました。
New_Evo2.jpg

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

続きを読む

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

安価に作る倒立2輪ロボットの紹介 その4

新作の紹介
既製品のホイールを使った分と2台作りました。右側が昨年6月の作品(B-ROBOT Evo2 M5 Stack Atom Lite)です。
B-ROBOTページ参照:https://cncparadise.blog.fc2.com/blog-date-202006.html (抜群の安定性が特徴です)
お知らせ:B-ROBOTに使ったステッピングモーターが4個、400円、残り3セットがFA機器.COMにて販売されています。
新たに作られる方にB-ROBOTがお勧めです。 FA機器.COM:https://fakiki.com/products/detail/58887
M5StampPico_SBR_Top2.jpg

その4 コントローラにBlynk Appを使う
Blynk Appのダウンロード
先ず、スマホがiPhoneの場合はApp Store、Androidの場合はPlayストアからBlynk Appをダウンロードします。
初めてBlynkを使う場合は、Create New AccountからemailとPasswordを入力してアカウント設定します。

プロジェクトの準備
①Create New ProjectをタップしてProject SettingsにてProject Nameを入力します。
②次にChoose DeviceのドロップダウンリストからESP32 Dev Boardを選択します。
③次にConnection TypeのロップダウンリストからBLEを選択します。
④一番下のCreateをタップすると先に入力したプロジェクト名のプロジェクトが開きます。
⑤プロジェクト名の右側のナットマークをタップすると新しいプロジェクトを開きます。
⑥丸+マークをタップするとWidget Box画面が開き、配置する部品が選べます。
⑦下の画像には出てませんが、右端の三角マークをタップするとプロジェクトがビジーとなります。

部品の配置と設定
最初、Widget Boxの電池マークは無料で使える2000エネルギーが表示されています。
ここでは、ジョイスティック(400)、ボタン(200)、BLE(0)の3つの部品を選びます。残り1400エネルギーです。
下の画像を参考に設定して下さい。トグルスイッチは走路がフローリングやカーペット等の種類により、パワーを
選ぶ為に設けています。 下の画像はタップすると拡大します。

ボタンとジョイスティックを選択BLEを選択部品の配置
Blink_1.pngBlink_2.pngBlink_3.png
 ボタンの設定
 ①ボタン名にPOWERと記入
 ②Select Pinをタップして
 VirtualとV0を選択
 トグルスイッチとして使うので
 MODEをSwitct側に設定
 ON/OFFに状態名を入力
 ジョイスティックの設定
 VirtualとV1に設定
 スイッチをMERGE側に設定
 値を-255~255に設定
Blink_4.pngBlink_4.pngBlink_6.png
プロジェクトに対し、登録したアカウントにAuth Codeが送られて来ます。 そのコードをプログラムに
記述する必要があるので大切に保管します。


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


B-ROBOT Evo2の動画を再掲載します。



次回はソフトウェアについて説明の予定です。
皆さまの参考になれば幸いです。
by Paradise

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

安価に作る倒立2輪ロボットの紹介 その3

その3 部品の製作と組み立て

完成画像 (全ての画像はクリックすると拡大します)
M5StampPico_SBR1B.jpg

主なのパーツ
モータ、コントロール基板、モータドライバー、電池ボックス、ホイールから構成しています。
部品価格参考:M5 Stamp Pico 1個 825円(スイッチサイエンス)、Oリング1A-G65 1本107円(ヨドバシカメラ)
モータFM90 (秋月電子)1個 250円、単4 2個用電池ボックス(秋月電子)1個 50円
GY-521(MPU6050):250~450円(アマゾン)、MX1508:モータドライバー:約200円、(アマゾン)
M5StampPico_SBR6.jpg

ホイールについて
一番ネックになるのがホイールだと思います。 既製品が無いかと探したら、FM90の出力軸に合うスプライン形式
20T/4.8㎜の製品は60㎜が最大でした。 径が小さいと挙動が不安定になると思います。
参考:販売元:スイッチサイエンス(マイクロサーボ(20T/4.8mm)用 60×8mmホイール 2個セット 白、561円)
9月14日追伸:試しに上記ホイールを購入、テストの結果問題なく使えました。
先ずは、私が厚さ5㎜のアクリル板をCNC加工して作ったホイールの概略図を示します。
外周に幅3㎜、深さ2㎜の溝を加工し、タイヤにはOリング 1A-G65 1本107円を引き伸ばしながら嵌め込んでいます。
DXFファイルが必要な方は申し出て下さい。
75mm_Wheel.gif

組立図
厚さ2㎜のアクリル板を使い、モーターや電池ボックスを超強力両面テープを使って貼り合わせます。
私が使ったのは、3M Scotchのスーパー多用途粗面用 幅12㎜、厚み1.1㎜です。
モータドライバーMX1508は、取付穴が無いので前面のアクリル板に両面テープで貼り付けています。
単4タイプの電池ボックにスは、背中合わせのタイプが無いので、2個用を背中合わせに接着しました。
SBR_assembly1.gif

コントロール基板の回路図
ここでは、新しく発売されたM5 Stamp Picoを使いましたが、USBシリアルが実装されたM5 Stack Atom Liteの方が
USBシリアルモジュールが不要なので、新しく購入される方にはお勧めです。(性能的には同等です)。
M5 Stamp Picoとジャイロ基板を47X29㎜にカットしたユニバーサル基板に組み込みました。
尚、単4電池には、必ず1.2V出力のニッケル水素充電池を使います。電圧が高いアルカリ電池は不可です。
M5_Robot1.gif

コントローラについて
動画では3種類のコントロールスタイルを紹介しましたが、夫々に特徴が有ります。専用のコントローラを使うのが
操作性に優れてベストです。 しかし、自作が難しいのでスマホアプリを使った方法が簡単でお勧めです。
BLE専用コントローラーに興味のある方は、以前の記事(第3章)を参考にして下さい。
特にBlynk APPの場合、androidとiPhoneの両方をサポートしているのが特徴です。
次回は、Blynk APPのインストールとWidget Boxからジョイスティックを選び、使い方を説明の予定です。

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




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

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

安価に作る倒立2輪ロボットの紹介 その2

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

リモコンの方法を3種類試しました。スマホアプリのBluetooth2種とオリジナルのBLEコントローラの3種です。
ファームウエアを入れ替えることにより選べます。作るのが大変ですがオリジナルの専用コントローラが使い易いです。



次回は作り方を掲載します。皆さまの参考になれば幸いです。
by Paradise

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

安価に作る倒立2輪ロボット その1

先月発売されたM5 Stamp Picoを使い、手持ちの安価な部品を集めて
倒立2輪ロボットを作りました。


ロボットの操作には、スマホアプリBLYNKのジョイスティックを利用しました。
DCモータを使った倒立2輪ロボットは、ステッピングモータを使った場合に比べて回路が簡単で軽く作れますが、
安定性はステッピングモータには及びません。
M5StampPico_SBR_Top.jpg

主要部品
M5 Stamp Pico:825円、GY-521(MPU6050):250~450円、MX1508:モータードライバー:200円、
FM90型DCモータ:250円2個、単四型電池ボックス2本用リード線タイプ2個、単4型ニッケル水素充電池4個、
その他手持ち部品少々の合計2000円余しです。
アクリル板:2㎜厚、大きさ52X22㎜X2、52X30㎜X1、52X20㎜X1の合計4枚です。
M5StampPico_SBR1B.jpg

部品の組み立て
部品の組み立ては2㎜厚アクリル板の端材を使い、3M社の強力両面テープにて接着しています。
モータのスプラインに会った既製品のホイールが入手出来なかったので、5㎜厚のアクリル板を加工して外周に
3㎜幅のOリングを嵌め込んでします。モータとの接合にサーボモータ用のホーンを使用。 ホイール外径75㎜。
M5StampPico_SBR2.jpg

透明アクリル板を使ったのでモータとの接着が見えています。グレー色が両面テープ
M5StampPico_SBR4B.jpg


次回から作り方とソフトウェアについて掲載予定です。動画も用意します。

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

by Paradise

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

M5 Stamp Pico Mateを使ってみました。 その2

スマホアプリを使い、M5 Stamp PicoでDCモータを動かす。

1)コントロール用スマホアプリについて
今回使ったandroid用無料アプリはBluetooth Serial ControllerでPlayストアにてダウンロードできます。
このシリーズには以前に紹介のお絵描きロボット(OSTR)に使ったWiFi TCP/UDP Controllerと使い方は同じで、
ボタンの配置や機能設定を自由にカスタマイズ出来るのが特徴です。
BT_Controller1.jpg

2)Bluetoothアプリを使ってDCモータを動かすテスト例
ここでは、M5 Stamp PicoにモータードライバーMX1508(一個200円)を介してDCギヤードモータFM90(一個250円)を
アンドロイドスマホのBluetoothアプリを使って動かします。
M5Stamp0.jpg

テスト回路の配線図
M5Stamp_BT_6A.gif

3)プログラミング
M5 Stamp Pico Mateには、出荷時にファームウェアUIFLOWがインストールされていて、UIFlowグラフィカルプログラミング
の他、Arduino、MicroPython、ESP32-IDFにてプログラミングが可能です。
ここでは、Arduino IDEを使ってDCモータを動かす簡単な例を記します。

モータを動かす他にPico本体に搭載のRGBカラーLEDの色が操作毎に変化するようにしています。
プログラムをコピーしてArduino IDEに張り付けます。マイコンボードへの書き込み設定は、ボードをESP32 Pico Kit又は
M5 Stack Atomを選びますが、Pico系は書き込み速度が速いとエラーが出る場合が有ります。
その場合はUpload Speedを下げて書き込みます。

#include "M5Atom.h"
//M5Stamp_Pico用が未だリリースされてないので同じPico系のM5Atomライブラリーを用いています。
#include "BluetoothSerial.h"
BluetoothSerial M5Stamp_BT;

int rxValue;
int M_IN1 = 26;
int M_IN2 = 18;
int M_IN3 = 19;
int M_IN4 = 25;
//extern const unsigned char AtomImageData[375 + 2];
uint8_t DisBuff[2 + 5 * 5 * 3]; //RGB collar LED

void setup() {
Serial.begin(115200);
M5.begin(true, false, true);
delay(10);
setBuff(0xff, 0x00, 0x00); //初期赤色
M5.dis.displaybuff(DisBuff);
M5Stamp_BT.begin("M5Stamp_BT"); //名称変更可能
Serial.println("Bluetooth Control");
pinMode(M_IN1, OUTPUT); digitalWrite(M_IN1, LOW);
pinMode(M_IN2, OUTPUT); digitalWrite(M_IN2, LOW);
pinMode(M_IN3, OUTPUT); digitalWrite(M_IN3, LOW);
pinMode(M_IN4, OUTPUT); digitalWrite(M_IN4, LOW);
}

void Forward() { //前進
digitalWrite(M_IN1, HIGH);
digitalWrite(M_IN2, LOW);
digitalWrite(M_IN3, LOW);
digitalWrite(M_IN4, HIGH);
}

void Backward() { //後進
digitalWrite(M_IN1, LOW);
digitalWrite(M_IN2, HIGH);
digitalWrite(M_IN3, HIGH);
digitalWrite(M_IN4, LOW);
}

void Turnleft() { //左旋回
digitalWrite(M_IN1, HIGH);
digitalWrite(M_IN2, LOW);
digitalWrite(M_IN3, HIGH);
digitalWrite(M_IN4, LOW);
}

void Turnright() { //右旋回
digitalWrite(M_IN1, LOW);
digitalWrite(M_IN2, HIGH);
digitalWrite(M_IN3, LOW);
digitalWrite(M_IN4, HIGH);

}

void Stop() { //停止
digitalWrite(M_IN1, LOW);
digitalWrite(M_IN2, LOW);
digitalWrite(M_IN3, LOW);
digitalWrite(M_IN4, LOW);
}

void setBuff(uint8_t Rdata, uint8_t Gdata, uint8_t Bdata) //RGB collar LED
{
DisBuff[0] = 0x05;
DisBuff[1] = 0x05;
for (int i = 0; i < 25; i++)
{
DisBuff[2 + i * 3 + 0] = Rdata;
DisBuff[2 + i * 3 + 1] = Gdata;
DisBuff[2 + i * 3 + 2] = Bdata;
}
}

void loop() {
if (M5Stamp_BT.available()) {
rxValue = M5Stamp_BT.read();
//Serial.print("Received:"); Serial.println(rxValue);
switch (rxValue) {
case 'F': //Forward
Forward();
setBuff(0x40, 0x40, 0x40); //白色
break;
case 'B': //Backward
Backward();
setBuff(0x40, 0x00, 0x00); //赤色
break;
case 'L': //Turnleft
Turnleft();
setBuff(0x00, 0x00, 0x40); //青色
break;
case 'R': //Turnleft
Turnright();
setBuff(0x40, 0x00, 0x40); //紫色
break;
case 'S': //Stop
Stop();
setBuff(0x00, 0x40, 0x00); //緑色
break;
default:
break;
}
M5.dis.displaybuff(DisBuff);
}
delay(20);
M5.update();
}



動画をご覧下さい。




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

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

M5 Stamp Pico Mateを使ってみました。 その1

スマホのBlueTooth APPにてDCモータを動かしてみました。

使用したDCモータは外観がSG90型サーボモータと同じですが、中身は単なる減速機付きモータです。
従って動かすにはDCモータ・コントローラーが必要です。(ここでは、MX1508を使用)

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


USBシリアル変換モジュールについて
M5 Stamp Pico Mateには、ソースファイルの書き込みに必要なUSBシリアル変換部が無いので、市販のUSBシリアル
変換モジュールを接続して使います。
下の参考画像は以前から使っているUSBシリアル変換モジュールに手動書き込み操作用のタクトスイッチを追加して
M5 Stamp PicoのGPIOの配置に合わせ、本体横に差し込む簡単な書き込み用アダプターを作りました。
トランジスター回路を追加して手動操作が不要なアダプターも使っていますが、配線が簡単なSW式をお勧めします。
M5Stamp3.jpg

アダプターの配線図
ユニバーサル基板端材の両端に基板ソケットとプラグを取り付け、書き込みSWとリセットSW用のタクトスイッチ
及びM5 Stamp Picoの電源用3.3Vの3端子レギュレータユニットを配置しました。
書き込み方法は、WriteSWを押しながらResetSWを押すと書き込みモード(Download mode)となります。
書き込みが終わったらResetSWを押すと通常モードに戻ります。
注意:市販のUSBシリアル変換モジュールの多くには、GPIOの入出力電圧レベルを5Vと3.3Vに切り替えるSWが
付いていますが、SWを切り替えると出力端子のVcc電圧も変わるタイプが有ります。しかし、M5を動かすだけの
電流容量が無い機種も有るの注意が必要です。 その場合は、別途M5本体の5VとGND端子間に+5Vを加えます。
M5Stamp_USB_Serial_1.gif



次回は、プログラムとスマホのBlueTooth APPの使い方を予定しています。
皆さまの参考になれば幸いです。
by Paradise

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

M5 Stamp Pico Mateが届く!

先週12日に発売の新製品 M5 Stamp Pico Mateが届きました。

M5 Stamp PicoはピンヘッダとGrove互換コネクタ、プラスティックカバーとシールにLレンチが付属したKitが
標準品です。 スイッチサイエンスにて価格は825円で購入しました。

M5Stamp PicoはEspressif ESP32-PICO-D4 Wi-Fiチップを搭載した切手サイズの小さな開発プラットフォームで、
UIFlowを使ったグラフィカルプログラミング、Arduino、MicroPython、ESP32-IDFでの開発が可能です。

機能的には以前から販売しているM5 Stack ATOM LiteからUSBシリアル変換部を省いた程度で、GPIOが12個
利用できますが、ソースの書き込みにはUSBシリアル変換モジュールが別途必要です。

私的には、WiFi又はBluetoothを利用したロボットへの組み込みが主なので、付属品無しの基板単体での販売
(500円程度)を望みます。

詳細はスイッチサイエンスのHPをご覧下さい。
M5Stamp1.jpg



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


良かったらclickして下さい!
にほんブログ村 ハンドメイドブログへ
良かったらclickしてください!

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

ラズピコ作品コンテストの副賞が届く

東京オリンピック開催中はテレビ観戦が忙しく、工作を休んでいました。

昨日、先に入賞したPaspberry pi Pico作品コンテストの副賞に頂戴したラズピコがオランダ経由で届きました。
さて、このラズピコを何に利用しようかと嬉しい思案中です。
pico_contest1.jpg

by Paradise

東京オリンピック 日本ガンバレ! 全参加国ガンバレ!

4年前に作った作品ですが応援してます。 オーレ!
サッカーチーム ガンバレ!



体操チームガンバレ!


by Paradise

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

MicroPythonで簡単なプログラミング

前回の続きですが、Thonny IDEを使って簡単なプログラムを作ります。
8個のLEDを並べて順番に点滅させます。(下は4個に1個点灯させた画像です、詳細は下の動画にて)
8pLED_B.jpg

用意する部品
ブレッドボード、両面ユニバーサル基板の端材、3㎜径LED8個、抵抗*1kΩ8本、ピンヘッダー10pin、配線材少々

配線図と組み立てについて
ブレッドボードに直接部品を組み付けても良いが、ジャンパー線が多くて見栄えが悪いのでユニバーサル基板の
端材にピンヘッダーを取り付けてブレッドボードに差し込むようにしました。私は片面基板の小さな端材しか手持ちが
無く、ごちゃごちゃした基板になりましたが、両面基板を使い余裕が有るように組み立てるのがベターです。
3㎜径LEDはユニバーサル基板の穴一つ置きに取り付けます。*LEDによって輝度が異なり、電流制限用抵抗の
値を決めます。私が使ったLEDには2.2kΩを使いました。
8LED_Cirduit2.gif

プログラム
今回は難しい配列を使わずに基本的な方法でLEDを1つずつ順番に点灯させるプログラムです。
末尾に添付の動画では、8個に1個点灯の他、5個に1個と4個に1個を夫々折り返す動作を加えています。
基本プログラム
----------------------------------------------------------------------------------------
import machine
import utime

led1 = machine.Pin(0, machine.Pin.OUT) # GPIO_0を出力としてled1を接続します。以下、同様
led2 = machine.Pin(1, machine.Pin.OUT) # 書式はled2 = Pin(1, Pin.OUT)でもOK
led3 = machine.Pin(2, machine.Pin.OUT)
led4 = machine.Pin(3, machine.Pin.OUT)
led5 = machine.Pin(4, machine.Pin.OUT)
led6 = machine.Pin(5, machine.Pin.OUT)
led7 = machine.Pin(6, machine.Pin.OUT)
led8 = machine.Pin(7, machine.Pin.OUT)

while True:
led1.value(1) # led1の値valueが1=点灯、0=消灯、書式はled1.on( )でもOK
led2.value(0) # 書式はled2.off( )でもOK
led3.value(0)
led4.value(0)
led5.value(0)
led6.value(0)
led7.value(0)
led8.value(0)
utime.sleep(0.1) # 0.1秒休止
led1.value(0)
led2.value(1) # 一つずつ点灯箇所をずらして行きます。
led3.value(0)
led4.value(0)
led5.value(0)
led6.value(0)
led7.value(0)
led8.value(0)
utime.sleep(0.1)
led1.value(0)
led2.value(0)
led3.value(1) # 一つずつ点灯箇所をずらして行きます。
led4.value(0)
led5.value(0)
led6.value(0)
led7.value(0)
led8.value(0)
utime.sleep(0.1)
led1.value(0)
led2.value(0)
led3.value(0)
led4.value(1) # 一つずつ点灯箇所をずらして行きます。
led5.value(0)
led6.value(0)
led7.value(0)
led8.value(0)
utime.sleep(0.1)
led1.value(0)
led2.value(0)
led3.value(0)
led4.value(0)
led5.value(1) # 一つずつ点灯箇所をずらして行きます。
led6.value(0)
led7.value(0)
led8.value(0)
utime.sleep(0.1)
led1.value(0)
led2.value(0)
led3.value(0)
led4.value(0)
led5.value(0)
led6.value(1) # 一つずつ点灯箇所をずらして行きます。
led7.value(0)
led8.value(0)
utime.sleep(0.1)
led1.value(0)
led2.value(0)
led3.value(0)
led4.value(0)
led5.value(0)
led6.value(0)
led7.value(1) # 一つずつ点灯箇所をずらして行きます。
led8.value(0)
utime.sleep(0.1)
led1.value(0)
led2.value(0)
led3.value(0)
led4.value(0)
led5.value(0)
led6.value(0)
led7.value(0)
led8.value(1) # 一つずつ点灯箇所をずらして行きます。
utime.sleep(0.1)
# 最初に戻り、同じ動作を繰り返します。

----------------------------------------------------------------------------------------
動画をご覧ください。



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

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

Thonny IDEを使ってラズピコをプログラミング

まえがき
私のような爺さんやウインドウズに慣れた世代の方がラズピコにMicroPythonをインストールする場合、
全てコマンドラインから設定を行うにはハードルが高いですよね!
WindowsPCにGUIを使ったThonny IDEのインストールとラズピコにMicroPythonのファームウェアを
インストールする方法及び簡単なプログラムの記述例を記します。
(GUIとは、Graphical User Interface(グラフィカル・ユーザ・インターフェース)のことです)。
Raspberry pi Picoをここでは、以後ラズピコと表記します。

1)WindowsPCにPythonをインストール
Thonny IDEをインストールするにはPythonを先にインストールします。
Python公式ダウンロードサイトのURLを開きます。
上記URLにアクセスするとPython3.9.6ダウンロード画面が開きます。
直接Python3.9.6をダウンロードしても良いが、使用するPC環境に合わせたファームウェアが選べます。
Python_top.jpg

先ずメニューバーのダウンロードからリストのウインドウズを開きます。
Python_top1a.jpg

するとWindows用のPythonリリースのページが表示されます。
ここで、Windowsインストーラのダウンロードを選びますが、PCの環境に合った方を選択します。(私は64bitを選択 )

Python_top2.jpg

インストーラの実行
ダウンロードしたインストーラを実行するとPython Setupが開きます。
インストール場所を変更する場合は、Coustomizeを選びますが、通常はinstall Nawを選択します。
一番下側のAdd Python 3.9 to PATHにチェックを入れておきます。
Python1.jpg

2)Thonny IDEのダウンロード
Thonny IDEのダウンロードサイトを開きます。
上記リンクをクリックすると下の画面が開きます。
ここで、Windowsを選択すると実行型ファイルがダウンロードされます。
ThonnyIDE_Top.jpg

ダウンロードしたインストーラを実行すると次の画面が表示されます。NEXTを選択して続けます。
Thonny1.jpg

途中にインストール場所の選択画面等有りますが、下の画面にてInstallを選択します。
Thonny5.jpg

終了画面でFinishをクリックしてインストールが完了です。
Thonny7.jpg

インストール終了後、最初にThonny IDEを立ち上げると言語の選択が出るので日本語を選びます。
Thonny8.jpg

3)ラズピコ用MicroPythonファームウェアのダウンロードとインストール
MicroPythonファームウェアのダウンロードサイトを開きます。
ダウンロードページの最新バージョンを選択します。
MicroPython1.jpg

ラズピコとPCの接続
ラズピコとPCをUSBケーブルにて接続しますが、ラズピコのブートボタンを押しながら差し込みます。
PCのタスクバーからPCを開くと画像のようにRPI-RP2がドライブとして認識されています。
次にダウンロードを開くと、先にダウンロードしたMicroPythonファームウェアのファイルが見えます。
このファイルをドラッグ&ドロップ にてRPI-RP2にコピーするとファームウェアのインストールが完了します。
すると、ファームウェアのインストールにより、PCからRPI-RP2が見えなくなります。
UF2_file.jpg

4)Thonny IDEの設定
ラズピコとPCを接続した状態でThonny IDEを起動し、メニューバーからツール、Optionsと開きます。
Thonny9.jpg

オプションを設定
次にメニューバーのインタラプタを開き、リストの中から(Raspberry pi Pico)を選びます。
Thonny10.jpg

ラズピコのCOMポートを指定しておきます。ここでは、COM5になっていますがセットにより異なります。
Thonny12.jpg

5)Thonny IDEを使ってラズピコのオンボードLEDを点滅させてみます。
Thonny IDEの画面左側にファイルを表示するには、メニューバーの表示からリストのファイルにチェックします。
9行ほどの小さなプログラムコードなので練習として手入力で記述しますが、大文字小文字に注意します。
記述が終えたら、メニューバー下の赤いSTOPアイコンを押した後、左側の緑色矢印アイコンを押すとラズピコの
オンボードLEDが1秒間隔で点滅します。ここでエラーが有れば下のShellにエラーの内容が表示されます。
このプログラムは最初の一歩ですが、アイデア次第で複雑なプログラムも可能です。
Thonny11.jpg

あとがき
メインPCには以前からMicroPythonを導入済みですが、記事の作成に当たり新たに予備のノートパソコンへ
インストールを行い、間違いがないか確認しながら進めました。
ラズピコにArduinoIDEの豊富なlibraryを使ってプログラミング出来ますが、MicroPythonも面白そうなので
爺さんのボケ防止と思い少しずつ勉強しています。 未だMicroPythonを始めて間が無く間違いが有れば
ご指摘・ご指導下さい。 ラズピコにMicroPythonを導入する方の切っ掛けになれば幸いです。
尚、ここまで出来たらラズピコに限らず、ESP32や他のMicroPythonが使えるマイコンが夫々のファームウェアを
インストールすることにより、同様に使うことが出来ます。


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

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

海外のコンテストにマーブルロボットが入賞!

PCB(プリント基板)メーカー主催のRaspberry pi Picoコンテストに入賞しました。
コンテスト結果掲載ホームページへのリンク

PCB_Contest.jpg

入賞作品は先月掲載のRaspberry pi Picoを使ったマーブルロボットです。
作品の動画をもう一度ご覧下さい。



皆さまの応援を感謝いたします。
by Paradise

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

ラズピコにWiiヌンチャクとOLEDを付けてみました。

Raspberry pi picoにWiiヌンチャクを繋ぎ、Micro Pythonで動かしてみました。

Micro Pythonの勉強にと色々繋いで遊んでいます。
Wiiヌンチャクにはシロヌンチャクとクロヌンチャクの2種類が有り、これらはデータ読み書きのアドレスが異なります。
中には、クロヌンチャクでもシロヌンチャクと同じアドレスの物があり、パソコンに繋いでみないと外観では判りません。
Wiiヌンチャクの中古品がメルカリに安く出品されていて幾つか購入したが、真のクロヌンチャクに上手く当たりません。

何年も前からArduinoやESPマイコンにヌンチャクを使ってますが、ラズピコのメモリーとシロヌンチャクのアドレスが
何処かで干渉するのか挙動がおかしく、試行錯誤してるのですが未だ解決に至っていません。
Pico_Nunchuck1.jpg

配線図
仮にLEDを取り付けて出力の状態が見れます。応用次第で面白い使い方が出来ると思います。
OLEDにジョイスティックの値とZとCのボタン情報も表示しました。
プログラムを少し変更すればサーボモータのコントロールが簡単に出来ます。
これまではライブラリーなしでヌンチャクを使っていますが、今回のMicro Pythonにはドイツのkfrickeさんが、
GitHubに公開されているnunchuck.pyが使い易かったので利用させて頂きました。 参考にして下さい。
URL:https://github.com/kfricke/micropython-nunchuck/blob/master/nunchuck.py
Nunchuck_pico.gif

動画をご覧下さい。



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

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

Raspberry pi Pico ゲームの紹介

自作ゲームではありませんが、面白いゲームに出会えたので紹介します。
ケンケンさんがホームページに公開されたRaspberry pi Picoによる液晶ゲームの紹介です。
URL:http://www.ze.em-net.ne.jp/~kenken/picogames/index.html
興味のある方は、上記のURLを参照して下さい。プログラムはC++で作成されていますが、
直ぐに使える実行型ファイル及びソースファイルも公開されています。

ゲームの種類は5種類で画像の箱入り娘の他、昔懐かしいパックマン、テトリス、インベーダーゲーム、
ペグソリテアが公開されています。
Raspi _pico_Game1

私もホームページを始めた頃にVBで作った箱入り娘のゲームを公開してたことが有り、懐かしくゲームを
楽しみました。


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

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

ラズパイPicoに2.4インチTFTモニターを繋ぐ

AdafruitのILI9341libraryを使い、スケッチ例からgraphicstestを試しました。

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


SPI接続の配線図を示します。
正しくボードが選択され、必要なライブラリがインストールされていれば、下記の接続にて問題なく動作します。
Pico_ILI9341_circuit.gif

ラズパイPicoでTFTモニターを使うための準備(ArduinoIDEの設定)
ArduinoIDEがインストールされていることを前提に進めます。 尚、現在ArduinoIDEはVer.1.8.15が最新です。
1)ボードマネージャにRaspberry pi Picoをインストール
①ArduinoIDEを開き、「ツール」「ボード”・・・”」「ボードマネージャ」と順にクリックします。
②ボードマネージャが開いたら検索窓に”pico”と入力すると下図のように表示します。
 表示された中のArduinoI Mbed OS RP2040 Boardsをインストールします。
boardmanager_pico.jpg

2)Adafruitライブラリのインストール
Adafruit GFX libralyのインストール: ArduinoIDEを開き、「スケッチ」「ライブラリをインクルード」
「ライブラリーを管理」と順にクリックすると下図のようなライブラリマネージャが開きます。
ここで、検索窓にAdafruit GFX libralyと入力し、表示された中から目的のライブラリをインストールします。
library_manager_gfx.gif

Adafruit ILI9341のインストール:次に、同じ画面でAdafruit ILI9341を検索してAdafruit ILI9341をインストールします。
library_manager_9341.gif

3)AdafruitのILI9341のサンプルプログラム"graphicstestを試す。
AruduinoIDEから「ファイル」「スケッチ例」と順にクリックしてリストからAdafruit ILI9341フォルダーを開き、
その中からgraphicstestを選択すると下図のようなスケッチが開きます。
ILI9341_GraphicsTest.gif

ラズパイPicoを使うためにスケッチを少し変更します。
上画像の赤線で記した部分を変更します。(行番号が少し違うかも知れません)
①22,23行目の前に//を挿入します。
②26行目 Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);の前に//を挿入します。
③27行目にAdafruit_ILI9341 tft = Adafruit_ILI9341(13, 15, 11, 10, 14, 12);を追加します。(GPIO12の結線は不要)
補足:GPIOピンの設定はこの例に限らず、他のピン配置でも可能です。
()内の番号がラズパイPicoの使用するGPIO番号となり、下行の(TFT_CS~TFT_MISO)に相当します。
29行目//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
以上にて変更が完了です。後は、コンパイルして書き込むだけですが、大事な注意ポイントがあります。 それは、
最初にスケッチを書き込む時は必ず、マイコンボードのブートスイッチを押しながらUSBケーブルを差し込むことです。
一度この操作をすると次回からは他のAruduinoボードと同様に書き込みが出来ます。 また、シリアルポート番号が
例、COM8(Rspberry Pi Pico)などと表示されます。

あとがき
1年ほど前、このTFTモニターを買った時にESP32を使ってAdafruit_ILI9341の"graphicstest"をテスト済みでした。
今回、ラズパイPico入手を機会に、お蔵入りしていたモニターを動かすことにしました。
最初にMicro Pythonの勉強にと別のサンプルプログラムを試しましたが、描画が今一だったのでArduinoIDEを
使って"graphicstest"を試すことにしました。
しかし、SPI接続のGPIOがMicro Pythonの場合と異なり、後期高齢者には難解で数日間試行錯誤しましたが、
無事に描画が速くて綺麗な映像が観れて幸いでした。


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

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

ラズパイ Pico に気圧センサーを付けてみました。

ラズパイ Picoに気圧、温度、湿度が測れるBME280を取り付けて、OLED(ssd1306)に計測値を
表示させてみました。

動画をご覧下さい。



次回は、ラズパイPicoに2.4インチTFTモニターを繋ぐを掲載予定です。

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


良かったらclickして下さい!
にほんブログ村 ハンドメイドブログへ
良かったらclickしてください!

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

マーブルロボットのコントロールボードをRaspberry pi Picoに置換

Raspberry pi Picoをマーブルロボットに使ってみました。

コントロールボードの置き換え
Raspberry pi PicoをArduinoIDEにてプログラミング。
先に掲載のSTM32を使ったマーブルロボットと併せてご覧下さい。
MarbleRobot_Control_board.jpg

マーブルロボットに置き換えたコントロールボード
MarbleRobot_pico1.jpg

コントロール部の拡大画像
マイコンの大きさが、ほぼ同じだったので同じユニバーサル基板に組み込みました。
MarbleRobot_pico2.jpg

コントロール部の回路図
Picoには、自由に使えるADC入力がGP28、GP27、GP26の3チャンネルです。丁度マーブルロボットにマッチします。
注意:PicoのADCは16bit 0~65535の分解能ですが、他のArduinoボードと同様に10bit 0~1023を出力します。
このため、先に掲載のSTM32使用マーブルロボットのADCが12bitなのでソースコードを少し書き換える必要があります。
MarbleRobot pico Circuit

Raspberry pi PicoをArduinoIDEで使う準備
現在、ArduinoIDEはの最新バージョンが1.8.15です。古いバージョンをお使いの方は更新をお勧めします。
ここでは、Windows10を使った説明をしますが、ArduinoIDEがインストールされていることを前提とします。
ArduinoIDEにRaspberry pi Picoボードのインストール。
①通常「ファイル」「環境設定」と順に開き、追加のボードマネージャのURLを追加しますが、追加しなくてもOKでした。
②「ツール」「ボード」「ボードマネージャ」と順に開き、検索窓にpicoと入力して検索。
検索された中からArduino Mbed OS RP2040 Boardsを選択してインストールします。
注意:他にRaspberry pi Pico/RP2040等が検索されますが、上記のボードを選びます。
その理由は、I2CのWireライブラリーを変更せずに使えたのがArduino Mbed OS RP2040 Boardsだからです。
補足:I2Cが使えず、半日余し試行錯誤して解かった結果です。(SDA=GP6、SCL=GP7に接続すると使えます)。
以上の作業により、Raspberry pi PicoがArduinoIDEにてプログラミングが可能となります。
boardmanager.jpg

参考資料:Raspberry pi Pico マーブルロボットのソースコード
先のSTM32 マーブルロボットの記事と併せてご覧下さい。
マニピュレータ設定用:MarbleRobot_Manipulator_pico.txt
Raspberry pi Pico マーブルロボット用:MarbleRobot_pico.txt

動画をご覧下さい。



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


良かったらclickして下さい!
にほんブログ村 ハンドメイドブログへ
良かったらclickしてください!

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

1個550円のRaspberry pi Picoを使ってみました。

動画を追加しました。2021.06.02

ArduinoIDEを使ってサーボモータを動かし、OLED(ssd1306)にサーボ角度を表示します。


MicroPythonの勉強にとRaspberry pi Picoを購入しましたが!。
2021.06.01
不良品に当たる。
Picoが届いたので早速ボードにマイクロUSBケーブルを繋ぐが変な臭いがして電源ICが熱くなってきた!
間もなく電源IC(RT6150B)横の小さなリアクタンス(L1)が過電流により、破断して3.3Vが出なくなった。
(RT6150B:入力電圧1.8V~5.5Vの昇圧型スイッチング電源ICで入力電圧範囲が広く電池駆動が可能です)。
このまま、返品交換すれば良いのですが早く使いたいし、手続きが面倒なので自分で修理することにしました。
Raspberry pi pico_Power

電源回路
下が電源回路です。ICの不具合で発熱してL1に負荷が掛かり、ヒューズ代わりに破壊してしまったようです。
そこで、基板からL1の残骸を綺麗に取り除き、細いリード線で2ターンコイルを作って半田付けすると3.3Vが
出ました。しかし、RT6150Bが発熱するので回路に手を加えず、電源ICの動作を止める3V3_EN端子をGNDに
接続して動作を停止しました。今後この基板をブレッドボード専用として使うので手持ちの3.3V出力の3端子
レギュレータを外付けして供給することにしました。(IN=VBAS端子、OUT=3V3(OUT)端子、GND=GND端子)
これにより、この基板が正常に動作してMicroPythonやArduinoIDEを使ったテストが出来ました。
尚、追加購入した2枚には、電源ICに発熱等の問題がなく正常に動作しています。
Power_circuit.gif

Raspberry pi picoの端子表
データーシートより抜粋
Pico PinOUT

電源ユニットを外付けしたブレッドボード
下の画像ではテスト用に設けた2ターンループが撤去せずに残っています。また、3V3_ENとGND間のジャンパー線が
見えます。(画像は全てクリックすると拡大します)。3端子レギュレータユニットはアマゾンで10個500円ほどで購入。
皆さんは、ピンヘッダーを基板に半田付けする前にマイクロUSBケーブルを接続して電源ICに発熱が無いか確認され、
発熱が有る場合は不良品です。自分で修理せずに購入店に交換を申し込んで下さい。
bread_Board.jpg

初めてのMicroPythonとArduinoIDEのサポート
ライブラリーを使わずにMicroPythonを使ってサーボモータを複数同時に動かすことが出来ましたが、Arduinoに
慣れた後期高齢者の頑固頭にはハードルが高く、もっと勉強をしなければと思います。
このテスト中にArduinoIDEがRaspberry pi Picoをサポートされていることを知り、早速Servo.hを使ってテストした結果、
問題なく動作することが確認出来ました。先に掲載のMarble Robotのコントロール部をSTM32からPicoに置き換えて
動かしています。(但し、全てのArduino libraryがPicoに対応した訳ではなく、今後のバージョンアップが楽しみです)
以上、Raspberry pi picoを購入から5日間の出来事でした。


次回は、PicoのArduinoIDEプログラミングとPico on Marble Robotを掲載します。
皆さまの参考になれば幸いです。

by Paradise


良かったらclickして下さい!
にほんブログ村 ハンドメイドブログへ
良かったらclickしてください!

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

Marble Robot (マーブルロボット)その5 最終回

マーブルロボット その5 ソフトウェア編 2
2021年5月28日


マニピュレータを使ってアームロボットを動かすモーションデータを作ります。

スタート位置とホール位置の設定
①スタート位置
ここでは、スタート位置をスロープ台と決めています。
先ず、マニピュレータを使ってアームロボットのHandアームがスロープ台の円形ビー玉受け中央の上側
10から15㎜に移動します。(この位置がビー玉を放す位置にもなります)。
この位置を動かさずにシリアルモニターの表示からscv0からscv3の値を記録します。
私の例では、scv0 = 180, scv1 = 133, scv2 = 38, scv3=116 です。

②ホール位置
次に3ヶ所のホール位置へアームロボット移動し、実際にHand(手)を操作してビー玉が掴めることを確認します。
上手くビー玉が掴めることを確認したら。この位置を記録します。この作業を3ヶ所のホール毎に行います
私の例ではホール1の位置が、scv0 = 145, scv1 = 174, scv2 = 104, scv3=92 です。

③データの作成
スタート位置とビー玉を放す位置は必ず同じ位置にします。
前回のマニピュレータ用ソフトに少し手を加えれば、アームロボットの動きをシミュレートして得たシリアルデータを
コピーして使えますが、マニピュレータの動かし方や速度によってデータ量が多くなることや、慣れないと動きが
ぎこちない等の短所があります。 そこで短いデータコードなので手作りとしました
ここではスタート位置と各ホール間の片道を36行に分割して往復72行のデータを配列にしました。
また、データを1行実行後にdeley(timeset)を50mS挿入して適当な速度で比較的滑らかに動くようにしています。
注意点:スタート位置と各ホール間を単に案分すると最短距離となるが、スロープ台の下にあるホール1の場合
スロープ台と衝突するのでアームを左側へ迂回させています。
また、左側に位置するホール2、ホール3もスロープ台の手前でArm1、Arm2を上げて接触を避けています。

私のマーブルロボットのソースファイルを参考に添付しました。
Marble_Robot_Saucefile.txt
但し、私のマーブルロボット以外では各部の寸法が異なるので、データがそのままでは使えません

// 参考資料:ホール1のデータ作成を参考にして下さい。
1 #include "Servo.h"// サーボライブラリー
2 #define HOLE_MAX 3 // ホールの数
3 #define STEP_MAX 72 // データの数
4
5 Servo servo_0; // hand
6 Servo servo_1; // arm1
7 Servo servo_2; // arm2
8 Servo servo_3; // pan
9
10 int timeset = 50; // deley time
11 int motion_table[HOLE_MAX][STEP_MAX][4] = { // 配列の生成
12 { // Hole 1 motion data ホール1のモーションデータ
13 { 180, 133, 38, 116 }, // スタート位置
14 { 180, 133, 40, 110 },
15 { 180, 134, 42, 100 },
16 { 180, 134, 44, 90 },
17 { 180, 136, 46, 80 },
18 { 180, 138, 48, 75 },
19 { 180, 140, 50, 75 },
20 { 180, 141, 52, 75 },
21 { 180, 142, 54, 74 },
22 { 180, 143, 56, 74 },
23 { 180, 144, 58, 74 },
24 { 180, 145, 60, 74 },
25 { 180, 146, 62, 74 },
26 { 180, 147, 64, 74 },
27 { 180, 148, 68, 74 },
28 { 180, 149, 70, 74 },
29 { 180, 150, 72, 74 },
30 { 180, 151, 74, 74 },
31 { 180, 152, 76, 74 },
32 { 180, 153, 78, 74 },
33 { 180, 154, 80, 74 },
34 { 180, 155, 82, 74 },
35 { 180, 156, 84, 74 },
36 { 180, 157, 86, 76 },
37 { 180, 159, 88, 78 },
38 { 180, 160, 90, 80 },
39 { 180, 162, 92, 82 },
40 { 180, 164, 94, 84 },
41 { 180, 166, 96, 86 },
42 { 180, 168, 98, 88 },
43 { 180, 170, 100, 90 },
44 { 180, 171, 102, 90 },
45 { 180, 172, 104, 92 },
46 { 180, 173, 104, 92 },
47 { 145, 174, 104, 92 }, // handを閉じる
48 { 145, 172, 104, 92 },
49 { 145, 171, 104, 92 },
50 { 145, 170, 104, 90 },
51 { 145, 170, 102, 90 },
52 { 145, 168, 100, 90 },
53 { 145, 166, 98, 88 },
54 { 145, 164, 96, 86 },
55 { 145, 162, 94, 84 },
56 { 145, 161, 94, 82 },
57 { 145, 160, 92, 80 },
58 { 145, 159, 90, 78 },
59 { 145, 158, 88, 76 },
60 { 145, 157, 86, 74 },
61 { 145, 156, 84, 74 },
62 { 145, 155, 82, 74 },
63 { 145, 154, 80, 74 },
64 { 145, 153, 78, 74 },
65 { 145, 152, 76, 74 },
66 { 145, 151, 74, 74 },
67 { 145, 150, 72, 74 },
68 { 145, 149, 70, 74 },
69 { 145, 148, 68, 74 },
70 { 145, 147, 66, 74 },
71 { 145, 146, 64, 74 },
72 { 145, 145, 62, 74 },
73 { 145, 144, 60, 74 },
74 { 145, 143, 58, 74 },
75 { 145, 142, 56, 74 },
76 { 145, 142, 54, 75 },
77 { 145, 141, 52, 75 },
78 { 145, 140, 50, 75 },
79 { 145, 138, 48, 80 },
80 { 145, 136, 46, 90 },
81 { 145, 134, 44, 100 },
82 { 145, 134, 42, 110 },
83 { 180, 133, 40, 116 }, // スタートポイントに戻るとHandを開いてビー玉を放す。
84 { 180, 133, 38, 116 },
85 },

86 { // Hole 2 motion data ホール2のモーションデータ
87 { 180, 133, 38, 116 }, // スタート位置
88 { 180, 133, 40, 110 },
89 { 180, 134, 42, 100 },
// 中省略
121 { 145, 159, 108, 47 }, // ホール2に到着Handを閉じてビー玉を掴む。
// 中省略
156 { 145, 134, 42, 110 },
157 { 180, 133, 40, 116 }, // スタート位置に戻戻るとHandを開いてビー玉を放す。
158 { 180, 133, 38, 116 },
159 },

160 { // Hole 3 motion data ホール3のモーションデータ
161 { 180, 133, 38, 116 }, // スタートポイント
162 { 180, 133, 40, 110 },
163 { 180, 132, 42, 100},
// 中省略
195 { 145, 112, 130, 29 }, // ホール3に到着Handを閉じてビー玉を掴む。
// 中省略
230 { 145, 132, 42, 110 },
231 { 180, 133, 40, 116 }, // スタート位置に戻戻るとHandを開いてビー玉を放す。
232 { 180, 133, 38, 116 }
233 }
234 };
235
236 void setup() {
237 Serial.begin(115200);
238 pinMode(PB0, INPUT); // Hole Sensor1
239 pinMode(PB1, INPUT); // Hole Sensor2
240 pinMode(PA4, INPUT); // Hole Sensor3
241 servo_0.attach(PB9, 500, 2500); // hand *pinMode(PWMピン、最小パルス幅、最大パルス幅)
242 servo_1.attach(PB8, 500, 2500); // arm1 上記のパルス幅を変更して個体差が補正できます。
243 servo_2.attach(PB7, 500, 2500); // arm2 *ここでは、同じ値を使用しています。
244 servo_3.attach(PB6, 500, 2500); // pan  *詳しくは、Servo.hライブラリーを検索して下さい。
245 // initial write value スタート位置を初期値設定
246 servo_0.write(180), servo_1.write(133), servo_2.write(38), servo_3.write(116);
247 }
248
249 void loop() {
250 if (digitalRead(PB0) == LOW) { // Hole 1 ホール1のセンサーがONの場合
251 Motion_dat(1);
252 }
253 if (digitalRead(PB1) == LOW) { // Hole 2 ホール2のセンサーがONの場合
254 Motion_dat(2);
255 }
256 if (digitalRead(PA4) == LOW) { // Hole 3 ホール3のセンサーがONの場合
257 Motion_dat(3);
258 }
259 }
260
261 void Motion_dat(int hole) { // 配列データによりサーボモータ動かします。
262 for (int step = 0; step < STEP_MAX; step++){
263 servo_0.write(motion_table[hole-1][step][0]); // hand
264 servo_1.write(motion_table[hole-1][step][1]); // arm1
265 servo_2.write(motion_table[hole-1][step][2]); // arm2
266 servo_3.write(motion_table[hole-1][step][3]); // pan
267 delay(timeset);
268 }
269 }



最後までご覧頂きましてありがとうございます。
次回からRspberry pi Picoを掲載予定です。
皆さまの参考になれば幸いです。

by Paradise


良かったらclickして下さい!
にほんブログ村 ハンドメイドブログへ
良かったらclickしてください!

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

Marble Robot (マーブルロボット)その4 ソフトウェア編1

マーブルロボット その4 ソフトウェア編 1
2021年5月22日
MarbleRobot_02.jpg

マーブルロボットとマニピュレータが完成したら
アームロボットとマニピュレータをケーブルで接続してキャリブレーションを行いますが、アームロボットの
アーム取り付け位置をサーボモータの機械的中間点にセットしておきます。しかし、中には90度のテスト信号を
入力しても機械的中間点と大きくズレていて0度又は180度まで回らない不良品があるので注意して下さい。

1)サーボモータのキャリブレーション
マニピュレータを使ってアームロボットのサーボモータを設定しますが、前回に説明のマイコンSTM32へ
ブートローダが書き込まれ、ArduinoIDEが使える状態であることを前提とします

先ず、次のテキストファイルを開きコピーしてArduinoIDEに張り付けてSTM32へ書き込みます。
MarbleRobotManipulator_1.txt
setupにArm1、Arm2、Panのサーボモータ初期角度を90度に設定してあるので、マニピュレータを接続前には
90度のテスト信号として使えます。

サーボモータSG90(MG90)の可動範囲は約180度、マニピュレータに使ったポテンションメータ(VR:
可変抵抗器)は約300度回ります。(サーボモータとマニピュレータの角度を合わせるにはアームロボットと
マニピュレータを同じ向きに並べて作業すると調整がし易いです)。
注意点:マニピュレータVRの取り付け方向やVR端子の電源極性の向きにより、左右又は上下に動かした時に
値の増減する方向が変わります。 また、アームロボットのサーボモータ取り付け方向によっても、左右又は
上下が逆の動きをします
このような場合は、ハード的に変更しても良いが、後述のmap関数の書き方で対応出来ます。

では、サーボモータのPan(水平方向)の設定を例に説明します。
①サーボモータを機械的中間点にセットします。
②マニピュレータの水平方向も同様にVRの中間点に止めます。
③この状態でマイコンをONにしてArduinoIDEのシリアルモニターを開きます。
④するとシリアルモニターに各ポテンションメータの値(STM32のADCが12bitなので分解能が0~4095)を
val0~val3
に、サーボモータへの指示角度(0~180)をscv0~scv3にリアルタイムに表示します。
シリアルモニター表示例
Manipulator_value.gif

⑤この時にマニピュレータが中間点ならばval3が2048付近の値を示すと思います。
⑥次にマニピュレータを左右に回動かしてサーボモータの角度が0度と180度となる位置の値を記録します。
記録した値をmap関数に記入します。下に私の例(2900~220)を示します。
、scv3 = map(val3, 2900, 220, 0, 180);
val3の値2900~220を0~180に変換してscv3 としてサーボモータの角度値を出力しますが、サーボモータが
逆に動く場合は、0, 180を180,0と書き換えます
また、2900~220の範囲外を次のif文により、0又は180に収めています。
if (scv3 >= 180) {
scv3 = 180;
} else if (scv3 <= 0) {
scv3 = 0;
}

同じ要領にてArm1とArm2の設定を行います。
但し、Hand Val0についてはポテンションメータではなくスイッチのONーOFFの状態をデジタルリードで
読み取り、開閉に対応した値をvol0へ出力します。
ここでは、予めVR(ポテンションメータ)を使ってHandの開け閉めを試した値を使っています。
if (digitalRead(PA0) == HIGH) {
val0 = 3300;
} else {
val0 = 4000;
}

この設定が完了するとマニピュレータの動きとサーボモータの動きが同期します。
但し、私の設定値がそのまま使えません。各々のセットに合わせた設定が必要です。


//アームロボットキャリブレーション用ソースコード
#include "Servo.h"

Servo servo_0; // hand
Servo servo_1; // arm1
Servo servo_2; // arm2
Servo servo_3; // pan

int val0, val1, val2, val3; // Manipulator Potension meter value
int scv0, scv1, scv2, scv3; // Servo control value

void setup() {
Serial.begin(115200);
servo_0.attach(PB9, 500, 2500); // hand *pinMode(PWMピン、最小パルス幅、最大パルス幅)
servo_1.attach(PB8, 500, 2500); // arm1 上記のパルス幅を変更して個体差が補正できます。
servo_2.attach(PB7, 500, 2500); // arm2 *ここでは、同じ値を使用しています。
servo_3.attach(PB6, 500, 2500); // pan  *詳しくは、Servo.hライブラリーを参照して下さい。
servo_1.write(90); // Arm1 Servo
servo_2.write(90); // Arm2 Servo
servo_3.write(90); // Pan Servo
}

void loop() {
val1 = analogRead(PA1);
val2 = analogRead(PA2);
val3 = analogRead(PA3);

if (digitalRead(PA0) == HIGH) {
val0 = 3300;
} else {
val0 = 4000;
}

Serial.print("val0 = "), Serial.print(val0);
Serial.print(", val1 = "), Serial.print(val1);
Serial.print(", val2 = "), Serial.print(val2);
Serial.print(", val3 = "), Serial.println(val3);

scv0 = map(val0, 400, 4000, 0, 180); // hand Manipulator
scv1 = map(val1, 400, 3200, 0, 180); // Arm1 Manipulator
if (scv1 >= 180) {
scv1 = 180;
} else if (scv1 <= 0.0) {
scv1 = 0.0;
}
scv2 = map(val2, 2800, 500, 0, 180); // Arm2 Manipulator
if (scv2 >= 180) {
scv2 = 180;
} else if (scv2 <= 0) {
scv2 = 0;
}
scv3 = map(val3, 2900, 220, 0, 180); // pan Manipulator
if (scv3 >= 180) {
scv3 = 180;
} else if (scv3 <= 0) {
scv3 = 0;
}
servo_0.write(scv0); // Hand Servo
servo_1.write(scv1); // Arm1 Servo
servo_2.write(scv2); // Arm2 Servo
servo_3.write(scv3); // Pan Servo

Serial.print("scv0 = "), Serial.print(scv0);
Serial.print(", scv1 = "), Serial.print(scv1);
Serial.print(", scv2 = "), Serial.print(scv2);
Serial.print(", scv3 = "), Serial.println(scv3);
}



最後にもう一度動画をご覧下さい。
アームロボットがビー玉を忙しく運び、スムーズに循環する様子をお楽しみください。


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


良かったらclickして下さい!
にほんブログ村 ハンドメイドブログへ
良かったらclickしてください!

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

プロフィール

CNC_Paradise

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

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