「M5StickC」タグアーカイブ

モーションコントローラ検討3 ー二足歩行ロボットへの道8ー

すき 0
0

前回はAIカメラHuskyLensを用いて画像認識でロボットを遠隔操作する可能性を確かめました。

M5StickC 8Servos Hat でラジコンを堪能

ここではコントローラによる操作に戻ってモーション検討実施いたしました。

 

 

歩行動作

歩行動作をスムーズに実施するためにコントローラをツールクリップに固定しました。

動作

意外と荒く動かしても何となく歩けています。
足底をもっと重たくすればいいような気がしています。

 

 

バッテリ駆動

これまでロボットは5V ACアダプタで給電しておりましたが、バッテリを用いて配線をなくして自由度向上を目指しました。

 
サーボドライバの電源にLiPoバッテリを接続しました。

 

 

 

おわりに

ここでは歩行動作とロボットのバッテリ駆動の検討を実施いたしました。

バッテリ駆動の実現によってどこでもロボットを楽しめるようになったので
更に精進したいと思います。

それでは次の道でお会いしましょう!

HuskyLens で ロボットを遠隔操作  ー二足歩行ロボットへの道7ー

0
0

前回はコントローラで二足歩行ロボットの全身を遠隔操作し、モーションの記録・再生を可能としました。

モーションコントローラ REC & PLAY  ー二足歩行ロボットへの道6ー

 

ここでは、少し寄り道をしてAIカメラ HuskyLensを用いてロボットの遠隔動作を試してみました。

 

 

 

Tag Recognition

HuskyLensのタグ認識機能を使ってロボットの関節角度を導出してみます。

HuskyLensは以下のタグを認識できます。

 

ロボット用コントローラの関節にタグ(8個)を貼り付けてみました。

 

HuskyLensでタグを認識し、座標から関節の角度を導出します。

 

構成

HuskyLensでコントローラのタグを認識し、座標から関節角度を導出します。
導出した角度をArduino UNOを介してコントローラのM5StickCにシリアルで転送します。

参考

動作

腕の2個のタグの座標から角度を導出して、腕を動かしてみました。

 

おわりに

ここでは画像認識でロボットを遠隔する可能性を確かめることができました。

次回は本題に戻って二足歩行ロボットの動作を学びたいと思います。

それでは次の道でお会いしましょう!

次の記事

HuskyLens で ロボットを遠隔操作  ー二足歩行ロボットへの道7ー

モーションコントローラ REC & PLAY  ー二足歩行ロボットへの道6ー

0
0

前回はオリジナルのコントローラを製作してESP-Nowでの同期制御で全身動作を確認しました。

M5StickC 8Servos Hat でラジコンを堪能

 

ここでは動作の記録(REC)、そして再生(PLAY)を目指したいと思います。

 

 
 

REC&PLAY機能

コントローラのM5StickCボタンを使用してREC&PLAY機能を実現します。

UIは上のような感じ。ボタン長押しでRECの開始/停止、普通押しでPLAY。

参考

動作

RECでコントローラの関節の値を記録し、PLAYで記録したデータを転送しています。
RECはだいたい100秒ほどできます(工夫すればもっと長くできるかも)。

 

おまけ:マスタースレーブ

当初、REC&PLAY機能はロボットとコントローラとは別にボタンを持たそうと構想しておりました。

ESP-Nowのマルチスレーブサンプルコードを参考にコントローラからロボットともう一つのM5StickCにデータを送る実験をしました。

しかし、コントローラのM5StickCボタンを使用すればよいと考え直しマルチスレーブ機能の使用はやめました。

 

おわりに

コントローラで全身を遠隔操作し動作のREC&PLAYも可能となりました。

ここからは二足歩行ロボットがなんたるかを存分に体で感じていきたいと思います。
ロボットと私がシンクロしたときに何か違う風景が見えるかもしれません。

それでは次の道でお会いしましょう!

次の記事

HuskyLens で ロボットを遠隔操作  ー二足歩行ロボットへの道7ー

モーションコントローラ検討2 ー二足歩行ロボットへの道5ー

0
0

前回はオリジナルのコントローラを製作してESP-Nowでのロボット上半身同期制御の実現を確認しました。

モーションコントローラ検討 ー二足歩行ロボットへの道4ー

 

今回は下半身も追加して全身制御を目指します。

 

 

コントローラ 下半身 配線

コントローラの下半身関節に配置した可変抵抗の配線をESP32に接続します。
 
 
 
 

問題発生

配線が終わったので、前回同様にESP-Nowで二足歩行ロボットと通信しようと思たのですが。。。

ESP32はWiFi使用しながらACD2ピン(IO2, IO4, IO12~15, IO25~27)が使えないことを忘れておりました。

WiFiを使うとなるとESP32のADC1ピンの4個もしくは6個のピンしか使えないですよね。。

UDP通信

仕方ないのでESP-Nowの使用はあきらめてコントローラをUSBケーブルでPCに接続しシリアルでデータ送信して、
UDPで二足歩行ロボットに送信して動かしてみました。

 

歩行動作にも挑戦しましたが、UDPですと高速送信できないのでなかなか厳しいです。

 

ESP-Now

どうしてもESP-Nowを使用して高速通信がしたいのでコントローラにADCモジュールの使用を検討しました。

以下のI2Cでデータ取得できる4入力のACDモジュールを使ってみました。
ちょうどAmazonで3個セットが販売されていました。

 

ADCモジュールの使用により多くのIOピンは必要なくなったので、マイコンにはM5StickCを採用し4ピンコネクタでモジュールと接続しました。

 

 

ADCモジュール3つはADDRピンの接続をそれぞれ変えて (GND, SDA, VDD)、I2Cアドレスを変えて使用しました (0x48, 0x4A, 0x49)。

M5StickCを採用したことで内蔵バッテリが使えるのでコントローラが完全無線になりました。

動作

ADCモジュール(ADS1115)のライブラリとして以下を使用しました。
 https://github.com/adafruit/Adafruit_ADS1X15

ESP-Nowでコントローラから二足歩行ロボットに角度データを送信します。

 

UDPの時より早い通信が実現でき制御もスムーズになりました。

 

歩行動作

スムーズな通信が可能になったため歩行動作もなんとかできました。

起き上がり

腕を1cmほど伸ばしています。

 

おわりに

ここではオリジナルのコントローラを製作してESP-Nowでの同期制御で全身動作を確認できました。

次回は動作の記録や調整、そして再生を目指したいと思います。

それでは次の道でお会いしましょう!

次の記事

HuskyLens で ロボットを遠隔操作  ー二足歩行ロボットへの道7ー

モーションコントローラ検討 ー二足歩行ロボットへの道4ー

0
0

前回は二足歩行ロボットをMIDIコントローラで制御して楽しみました。

各種モーションを堪能 ー二足歩行ロボットへの道2ー

ここでは更にモーション制御方法を検討しましたので報告いたします。

 

 

DAWソフトで制御

MIDIコントローラで歩行などの複雑な動作を実現するのは難しいと考え、
DAWソフトでの制御を思い立ちました。

DAWで動作シーケンスをかいて、再生で動作させるのです。

 

構成は以下の通りです。
loopMIDIで仮想MIDIポートをたてて、ほぼ前回のMIDIコントローラと同じ構成で制御しています。
DAWはReason11を使用しました。

 

しかし、やはりDAWを用いても歩行モーションを実現するには知識が必要で
それができれば そもそも歩行動作をあらかじめ書き込んで実行すれいいじゃないかという結論に至ってしまいました。

 

オリジナルコントローラ作製

次にオリジナルのコントローラ製作を思い立ちました。
二足歩行ロボットと同じ形のコントローラにしてモーション同期制御を目指します。

コントローラには二足歩行ロボットのサーボモータの数と同様に12個の可変抵抗を使用し、位置も同じように配置しました。
可変抵抗の値をESP32で読み取って通信します。

筐体は3Dプリンタで出力しました。
とりあえず上半身だけ結線してみました。

 

動作

これまでの通信方式を継承して、コントローラからはUSBケーブルで各可変抵抗の値をPCにシリアル送信して、
UDPで二足歩行ロボットに送信して動かしています。

UDPですとあまり高速にデータ送信すると二足歩行ロボット側のM5StackCが動作停止してしまい
高速な同期動作は実現できませんでした。

 

ESP-Now

コントローラ (ESP32) と ロボット (M5StackC) を直接通信させるべくESP-Nowを試してみました。

ESP-Nowによる通信は以前 確認済みです。

M5StickC 8Servos Hat でラジコンを堪能

動作

ESP-Nowで無線で直接通信しました。

 

UDPと比較して高速でデータ送信できるので非常にサクサク同期動作が実現できました。
しかもESP同士の直接通信なので環境に依存しないのも魅力です。

 

おわりに

ここではオリジナルのコントローラを製作してESP-Nowでの同期制御の実現を確認できました。

まだ上半身のみですので次回は全身で動作させてみたいと思います。

それでは次の道でお会いしましょう!

次の記事

モーションコントローラ検討2 ー二足歩行ロボットへの道5ー

MIDIコントローラでモーション制御 ー二足歩行ロボットへの道3ー

0
0

前回は書籍を参考に各種モーションを楽しみました。

各種モーションを堪能 ー二足歩行ロボットへの道2ー

各モーションは凄くよくできていたのですが、調整が必要であったことと
二足歩行ロボットをより理解するために、ここではMIDIコントローラでサーボモータをひとつひとつ制御できるようにしました。

 

 

MIDIコントローラ

以下のようにMIDIコントローラで各サーボをグリグリ動かせるようにしました。

構成

構成は以下の通りです。

 

MIDIコントローラにはnanoKONTROL2 を使用しました。

 

MIDIコントローラからのMIDI信号をMIDI-シリアルソフトHairless で変換します。

 

変換した信号をCom0comを用いてCOMポートとして出力します。

 

Node-REDでシリアルをうけてMIDIのch、ベロシティをUDPでブロードキャストします。

 

UDP信号をロボット(M5StickC Plus)で受信してサーボを動かします。

 

動作

各サーボの角度をM5StickC Plusのディスプレイに表示するようにしました。

 

片足立ちに挑戦

 

おわりに

ここではMIDIコントローラで各サーボを制御できるようにして、自由に動かせるようにしました。

ポーズはとれるようになったので、次はモーションに挑戦したいと考えております。

それでは次の道でお会いしましょう!

次の記事

モーションコントローラ検討 ー二足歩行ロボットへの道4ー

各種モーションを堪能 ー二足歩行ロボットへの道2ー

0
0

前回は書籍を参考に二足歩行ロボットを製作いたしました。

ここでは各種モーションを試しましたので報告させていただきます。

 

 

歩行

書籍の歩行モーション(mr5-7)を試しました。

非常にスムーズに歩くので驚きました!

ロボットのボディはPCB基板で制作されることが想定され厚さ1.6mmとなっているのですが、
3Dプリントで厚さ1.6mmですと、横すねパーツが強度弱いので3mm厚さに修正しました。

 

いい感じ♪

 

BLE遠隔操作

スマホアプリBlynk を用いてBLEで操作を操作できるようにしました。
制御にM5StickC Plusを用いておりますので無線通信は容易に可能です。

動作は書籍で紹介されている前進、後退、左右旋回、左右横歩きを追加しました。

各種モーション(特に旋回)は調整が必要そうですが、遠隔での操作が可能となしました。

 

Blynk接続で開眼するようにしました。実に可愛いですね。

 

起き上がり

書籍の著者様のサイトに起き上がり用のコードが載っていましたので試してみました。

サイトの指示に従い以下修正加えました。

  • 左右のHip (ロール) サーボホーンを前側にひと歯ずらし、
    オフセットで直立するように調整
     
  • 手先を延長

     

 

頭が重くうまく立てません。。。
コチラも調整が必要のようです。

 

おわりに

ここでは書籍で詳細されている各種動作を試しました。

実機に合わせて調整が必要のようなので次の道では、より二足歩行ロボットの理解を深め
モーション調整に加えて、更にはオリジナルの動作を製作できるよう学習進めます。

それでは次の道でお会いしましょう!

次の記事

モーションコントローラ検討 ー二足歩行ロボットへの道4ー

二足歩行ロボットへの道 爆誕 ー二足歩行ロボットへの道1ー

0
0

前々から二足歩行ロボットを作りたいと思っていたのですが、
何から手をつけてよいか分からず
低価格で販売されたロボットを買うチャンスも逃し
途方に暮れていました。。

現状の私のスキルは…

をひとつ作るのが精いっぱいの状況です。

 

 

予算1万円でつくる二足歩行ロボット

そんな中、非常に良い本を手に入れました。

こちらには12個のマイクロサーボを用いて、いちからロボットを製作する方法が記載されています。

制御マイコンや部品を実装するPCB基板を設計・製作するところから始り、ロボットのボディもPCB基板で構築するというストロングスタイルぶりです。

非常に興味深い内容なのですが、あまりにもストロングなので書籍購入から何もせずに1年も経ってしまいました。。。

 

もっと手軽に

二足歩行ロボットの学習の第一歩をきるために、PCB設計から始めるのは私にとってあまりにも腰が重いので
もっと簡単な方法を模索しました。

コントローラ、ドライバ

コントローラにはM5StickC Plusを採用することにしました。

M5StickC Plusには無線機能とディスプレイ (135x 240ピクセル)とIMUセンサも内蔵されていますので非常に便利です。

 
12個のサーボを制御するためにI2C信号でサーボを16個まで制御できる モータドライバ PCA9685 を搭載した以下のモジュールを用いました。

モータドライバのArduinoライブラリは秋月のサイトで入手しました。
 
 

 
サーボは以下の低価格のものを12個使用しました。

ボディ

ここではPCB基板ではなく3Dプリンタで出力しました。

書籍のサンプルコードダウンロードでFusion360用のモデルデータも入手することができ、
同じサイズのものを出力することができました。

 
↓3Dプリンタで出力した様子

 

組み立て

書籍に従って組み立ててみました。

いい感じ♪

 

ディスプレイに顔を表示してちょっと腕を動かしてみました。

ロボットくんの完成です!!

M5StickC Plusのディスプレイへのビットマップ画像表示には
以下のバイナリデータ生成ウェブページを使用しました。
 http://javl.github.io/image2cpp/

ドローモードはM5StickC のディスプレイに従って以下のように設定しました。

 

おわりに

ついに二足歩行ロボットが手に入りました。

二足歩行ロボットへの道 爆誕です!

次からは書籍に従ってモーションプログラミングの学習に入ります!!

それでは次の道でお会いしましょう。

次の記事

各種モーションを堪能 ー二足歩行ロボットへの道2ー

メカナムホイールでLEGOラジコンカー製作

0
0

DFRobot様よりメカナムホイールをいただきましたので、ラジコンカーを製作してみました。

 

 

思想

非常によいメカナムホイールが手に入ったので、これをどう利用しようかとウキウキで考えました。

長男くんはずっとLEGOが大好きで毎日いろいろ製作しています。

長男くん のレゴ作品集

 

そこで、折角ですのでLEGOで色々カスタマイズできるラジコンにしようと思います。

 

構成

メカナムホイールはレゴを接続できる360°回転サーボで回すことにしました。

サーボとしても低価格で非常に良い買い物をしました♪

 

ホイールとサーボの接続のために3Dプリンタで治具を製作しました。

 
 
サーボの制御にはM5StickCとM5StickC 8Servos Hatを用いました。

 
M5StickCとM5StickC 8Servos Hatによるビークル制御は以前試しているので慣れたものです。

M5StickC 8Servos Hat でラジコンを堪能

 

車体

車体はLEGOで構築しました。

 

Blynk設定

ここではスマホアプリのblynkでBLE通信で車体を動かします。

 

新規プロジェクトを作成します。ハードウェアはESP32 Dev Boardを選択。Conection TypeにはBLEを指定します。
AUTH TOKENはArduinoコード生成時に使用します (アカウント登録したメールに送信されます)。

 

ウィジェットとしてBLEウィジェットとNumeric InputウィジェットとJoystickウェジットを配置します。

 

Numeric InputウェジットはV1を使用します。
メカナムホイールの回転速度を決定します (0~90)。

 

JoystickウェジットはバーチャルピンV0を使用します。

ジョイスティックの設定はx軸とy軸の出力をMERGEしてヴァーチャルピンV0に出力させ、それぞれ値は-100~100としました。

AUTO RETURNはONにしてジョイスティックはタップ移動後離すと自動的に中央に戻します。
ROTATE ON TILTはOFFにてスマホの回転に依存せずのx, y軸を固定とします。

 

メカナムホイール動作

Arduinoコード

ジョイスティックのx, y値をM5StickCで受けて角度に変換してディスプレイ表示しています。
角度のディスプレイ表示は以下のM5StickCのサンプルコードTFT_Pie_Chartを利用しました。

8Servos Hatのサンプルコードを元に制御しております。 

 

 

動作

 

おわりに

憧れのメカナムホイールを用いてレゴカーができました!

あとは長男くんに自由にカスタマイズしていただきましょう。

スターウォーズの日

0
0

5月4日はスターウォーズの日です。

フォースと共にあらんことを(May the Force be with you)
May the Force -> MAY 4th -> 5/4とのことです。オシャレですね。

私もこのハイセンスのご相伴に預かるべくスターウォーズ由来の作品を制作してみました。

 

 

R2-D2

ミニR2-D2を制作しましたw。

 

仕組み

ミニR2-D2の仕組みをご紹介

ボディー

以下のサイトのペーパークラフトを使用しました。
めっちゃすごいですよこのサイト。

凄いクオリティ!製作にはめっちゃ時間かかりました。5、6時間。。。w

機構

移動の機構には360度連続回転サーボを使用しました。制御はM5StickCで実施します。

M5StickCの4ピンコネクタにピン加工してサーボを接続しています。

 

 

部品

  • M5StickC

     

  • 360度連続回転 マイクロサーボ

制御

制御はスマホから音声信号を再生しM5StickCのマイクで受信して実施しています。
Chirpというサービスを使用しています。

音声による信号通信 Chirp -M5StickC編-

しかしこのChirp 2020年2月に買収されてしまったようです。

Chirpのコード使用する際の登録や開発者キーの取得はもうできないようです。。
スマホアプリもなくなってます。

以前作成したコードとダウンロードしたスマホアプリは問題なく動いたので
今回使用させていただきました。

音声信号がR2-D2のようで可愛いです♪

しかし買収は残念ですね 😥 。。。

スマホアプリから”前”、”後ろ”、”右”、”左”とChirp音声信号を送信してM5StickCのマイクで受信してサーボモータを動かしています。

M5StickC 8Servos Hat でラジコンを堪能

0
0

8個のサーボモータを制御できるM5StickC用拡張ボードを購入しました。

非常に低価格のうえ使いやすかったです。
ここではM5StickC 8Servos Hatを使用してラジコンを作りましたのでご報告します。

 

 

M5StickC 8Servos Hat

M5StickCに以下のサンプルコードを書き込んですぐに使用できます。
 https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Hat/8servos-hat/Arduino/8SERVO

“M5StickCからI2Cを用いて、STM32F030F4マイコンを経由して各サーボを制御することができます。サーボを複数同時に動作させるため、16340バッテリーを取り付けられるようになっています。”
とのことでサーボを動かすコマンドは簡単ですし複数接続しても電流能力などを気にすることもありません。

製作準備

ラジコンはジョイスティックでグリグリコントロールできるものを目指しました。

まずはスマホアプリBlynkジョイスティックウィジェットとM5StickCをBLEで連携しました。

ジョイスティックのx, y値をM5StickCで受けて角度に変換してディスプレイ表示しています。
角度のディスプレイ表示は以下のM5StickCのサンプルコードTFT_Pie_Chartを利用しました。

M5StickCを8Servos Hatに載せ、サーボを接続しジョイスティックの角度で動かしたのが以下です。

実に簡単に機構が完成しました。
 

ラジコンカー “カニ”

製作した機体について記載します。
タイヤとして2個のボールキャスタと2個の360度回転サーボを使用しました。
360度回転サーボを180度サーボで回転させて四方八方への移動を実現させます。

機体フレームやサーボ固定具は3Dプリンタで製作しました。

なんかカニっぽい

ジョイスティックのx, y値をBLEでM5StickCに送ってサーボの角度と360度回転サーボの前転/後転を制御します。

本当はサーボの回転軸直下に360度回転サーボのタイヤが来るように配置すれば
方向転換時の機体のブレも小さいのでしょうが
コンパクトで簡単な構造にしました。

部品

  • M5StickC 8Servos Hat

  • M5StickC

     
  • サーボモータ

     
  • 360度連続回転マイクロサーボ Feetech FS90R

     
  • ボールキャスタ

Wii ヌンチャク

ちょっと物理コントローラで”カニ”を動かしたくなったので、
家にあったWiiヌンチャクを無線化してみました。

まずはヌンチャクをM5Stack ATOM Liteに接続しました。

 
ヌンチャクとM5Stack ATOM Lite間はI2Cで通信します。接続は以下の通り。

ESP-NOW

M5Stack ATOM Liteで受け取ったWiiヌンチャクの値を機体をコントロールするM5StickCに無線通信するためにESP-NOWというプロトコルを使用しました。

ESP間でWiFi網を使用した独自通信方式のようでArduino IDE用サンプルコードも用意されております。

早速サンプルコードを元にM5Stack ATOM Lite (Master) – M5StickC (Slave)間通信を試してみました。

ジョイスティックのx, y値をI2CでM5Stack ATOM Liteに送り、更にESP-NOWでM5StickCに無線送信してディスプレイに表示しています。

ESP-NOWによって非常に簡単にESP間の無線通信が実現できました!

Arduinoコード

Wiiヌンチャクで機体”カニ”を制御するためのコードです。

M5Stack ATOM Lite (Master)

ヌンチャクのジョイスティックのx, y値をI2Cで受け取り、ESP-NOWで送信します。

ヌンチャク-M5Stack ATOM間の通信コートは以下を参考にいたしました。
 ESP32 BLE Nunchuck Controller Sketch

M5StickC (Slave)

ESP-NOWでジョイスティックの値を受け取り、角度を算出してサーボとタイヤを制御します。

8Servos Hatはサンプルコードを元に制御しております。 

参考

動作

Wiiコントローラで新規の機体”カニ”を制御することができました。

機体にはまだ四つサーボを追加できますので改善や応用を考えたいと思います。

 

いい日カニ玉

UnitV で金魚ステータス判別テスト ーエッジAI活用への道 15ー

0
0

金魚水槽監視システムがだいぶ形になってきまして、いよいよ本題のエッジAIの活用です。

ここではUnitVで金魚を認識してその座標から金魚のステータスを判別できるかの検証です。
金魚は寝るとプカ~っと水中で浮いているので、就寝中は座標が変化しないはずです。

それでは実験スターティン
 

 

構成

UnitVとM5StickCを4ピンケーブルで接続して、UnitVで金魚を認識して 座標をUARTでM5StickCに送ります。

M5StickCは受け取った金魚座標をWiFiでUDPブロードキャストします。

 

オリジナル金魚モデルで画像認識

金魚の認識モデルは以前に作ったお手製のものを使用します。

オリジナル金魚認識モデルの生成 ーエッジAI活用への道 3ー

ファームウェアは M5StickV_Firmware_1022_beta.kfpkg を使用し、 Kflash_GUIで書き込みました。

金魚モデル(kmodelファイル)はアドレス0x600000に書き込みました。

UnitVコード(MaixPy IDE)

コードはYolo-digit-detector/micropython_code/racoon_detector.py を参考にして作成し、MaixPy IDEで書き込みました。

金魚を認識して その中心座標(x, y)をUART送信します。
画角は224×224。

 

M5StickCコード(Arduino IDE)

UnitVからの金魚座標をM5StickCで受けてUDPで送信しました。

 

実験の様子

UnitVで水槽を監視して金魚ちゃんの位置を認識します。

 
水槽の横にUnitVを配置してデータをとってみました。

座標プロット

M5StickCからUDP送信される座標(x:横、y:縦)をPCで受けてプロットいたしました。

以下、縦軸が$\sqrt{x^2+y^2}$ 横軸が時刻のグラフです。

  • 2/11 14:50~2/12 7:40

     
  • 2/12 22:48~2/13 9:36

グラフより1時~5時の間で明らかに移動量が減っており就寝していることが見て取れます。

意外とガッツリ休んでるんですねww
なんだか可愛い 😀 

おわりに

AIカメラで金魚を認識し、その座標から移動量の推移を監視して金魚の就寝が判別できそうだという結論に至りました。

次はこの移動量から就寝を検知して自動動画撮影を目指したいと思います。

ではまた!
 

参考

次の記事

金魚水槽のフィルターをブクブクから外掛けフィルターへグレードアップ

金魚水槽監視システム製作開始 ーエッジAI活用への道 14ー

0
0

さてこれまではAIカメラ UnitVを吟味してまいりましたが、
いよいよ金魚水槽監視システムの製作に取り掛かりたい思います。
 

現行のシステム

これまで はMaixduinoを用いて金魚水槽のLED照明の制御、水温/pHの測定を実施しておりました。


 

LCDに水温/pHを表示し、UDP送信してログ管理したりしておりましたが、
UDP受信やカメラ撮影映像のストリーミングができないままでおりました。

またセンサの接続にマイコンを挿入したり冗長な構成でもございました。

 

新規システム

新たなシステムでは以下のような構成としました。

  • UnitVで金魚を認識
  • ESP32:LED、温度/pHセンサ制御。UnitVからのシリアル受信。
        Webサーバとしてブラウザ表示。
  • ESP32-CAM:動画ストリーミング

UnitVで金魚認識と動画撮影を実施しようと思いましたが、速度でないので断念しました。

部品

  • AIカメラ UnitV
  • ESP-32S

  • ESP32-CAM

  • 防水温度センサ DS18B20
  • pHセンサ PH-4502C
  • フルカラーLED Neopixel (WS2812B ) 48セル

ESP32-CAM

以下を観て速攻Amazonで購入しました。安すぎる!

Arduino IDEでの設定は以下の通りです。書き込みにはUSBシリアルコンバータが必要です。

技適未取得機器を用いた実験等の特例の届出

私が購入(2020/1/18)したESP32-CAMには技適マークはついておりませんでした。

ですので、2019年11月20日よりスタートし、技適マークがなくても申請すれば180日間使用できると話題の
“技適未取得機器を用いた実験等の特例の届出”を提出してみました。

以下のサイトより届出書を作成し、最寄りの総合通信局へ郵送しました。
金曜日に郵送して、翌週の月曜日にメールにて承認されました。簡単ですね。
 https://www.tele.soumu.go.jp/j/sys/others/exp-sp/index.htm
 

あとはサンプルコードを書き込んで、ESP32-CAMのIPにアクセスするだけです。
画像サイズやホワイトバランスなど詳細設定がブラウザから実施できます。すごい!

 

現状の動作

まだUnitVによる金魚認識は導入しておりませんが、現状のシステム動作をご覧ください。

ブラウザ画面

ESP32-CAMのストリーミング画像を表示し、
水槽のLEDの輝度調整や水温/pHを表示します。

 

 

当然スマホからも閲覧・操作可能です。

今後課題

  • 水温/pHの値のブラウザ定期更新表示
  • UnitVによる金魚の位置座標の取得及びステータスジャッジ(就寝中とか)
  • ESP32-CAMの調整画面のマージ
  • データログ取得・管理

参考

LED スライダ制御

ESP32アナログ入力

ESP32 IP固定

Fritzingパーツ

次の記事

金魚水槽のフィルターをブクブクから外掛けフィルターへグレードアップ

UnitV と M5StickC で動画ストリーミングを堪能 ーエッジAI活用への道 13ー

0
0

前回はUnitVで撮影した画像をシリアルでM5StickC に転送してLCD表示いたしました。
今回はM5StickCをWebサーバにしてUnitV撮影映像をストリーミングいたしました。

 

構成

例のごとくUnitVとM5StickCをUnitVに付属された4ピンコネクタケーブルでつなぐだけです。

UnitVで撮影した映像をjpeg圧縮してM5StickCにUART転送して、
M5StickCでWiFi配信いたします。

 

参考

今回はnnnさん(@nnn112358)のツイートや記事をおおいに参考にさせていただきました。
有用な情報を公開していただき本当に感謝しかありません。

UnitVコード(MaixPy IDE)

UnitVで撮影jpeg画像(320×240)を10バイトの開始データと共にUART送信します。

JPEGの圧縮率は50%にしました。
転送ボーレートは1152000にしました。

M5StickCコード(Arduino IDE)

 ESP32のWebサーバのサンプルコードHelloServer.ino とnnnさんのサーバコードを参考にコーディングしました。

起動後、以下にアクセスで静止画と動画をweb表示します。
 http://[M5StickCのIP]/pic:静止画表示
 http://[M5StickCのIP]/stream:動画表示 

 

動作

念願のUnitVによる撮影映像をストリーミング配信することができました!

おわりに

さて、だいぶ回り道しましたがUnitVとの距離はかなり縮まったと思います。
次回からはやっとハイテク金魚水槽システムの実現に向けて検討を開始したいと思います。

それではまた

次の記事

金魚水槽監視システム製作開始 ーエッジAI活用への道 14ー

UnitV で画像シリアル転送の味見 ーエッジAI活用への道 12ー

0
0

前回よりUnitV を使用したハイテク金魚水槽システムの実現に方向転換しているこの道。
今回はUnitV で撮影した画像をシリアルでM5StickC に転送して表示してみます。

 

構成

UnitVとM5StickCをUnitVに付属された4ピンコネクタケーブルでつなぐだけです。

 

動作

早速動作をご覧ください。

撮影画像(64×160)をUARTでM5StickCに送って表示しています。FPS 3ってところでしょうか。。

あとなんか色がおかしいです。おそらく転送や受信でおかしいことをしているのでしょう。。。俺のことだし

ではコード(間違い探し)をご覧ください。

UnitVコード(MaixPy IDE)

UnitVで撮影画像(64×160)をUART送信します。demo_uart.py とdemo_camera.pyを参考にコーディングしました。

転送ボーレートは921600にしました。

参考

M5StickCコード(Arduino IDE)

 64ピクセル × 160ピクセル × 2バイトの撮影画像を受信してLCDに表示します。

参考

 

おわりに

送受信コードのどこかに問題があるために色がおかしいですが、撮影画像のビットマップUART転送は現実的ではないことを実感として得ることができました。

次回は圧縮してWiFi転送なぞを試してみたいです。

ではまた

追記

色修正 (2020/1/17)

M5StickCのLCD表示の際に色がおかしかった原因がわかりました。

M5StickCコードの23行目で2バイトの色データ生成しているのですが、
ビットシフトの時に16ビットにキャストし忘れてました。。

 

無事に色が正常に表示されるようになりました。

色修正2 (2020/1/18)

ご指摘がありました。ありがとうございます!

その通りでした。単純に()するだけで改善しました。

 

ビットシフトより足し算の方が演算の優先順位が高い!

勉強になりました。

ボーレート変更 (2020/1/18)

転送ボーレートを921600 → 1152000 (1M)にしてみました。

少し早くなったかな。

あとUnitVの撮影画像をサイズ変更して出力すると左上に偏ります。。 sensor.set_framesize や sensor.set_windowing が中央でクロップしてくれないんです。。

なんだかなぁ 🙄 
 

参考

copy() (2020/1/18)

これでカメラ中央の絵を取り扱えるようになったが、VGA取り込んでいるので当然遅い。。。

次の記事

UnitV と M5StickC で動画ストリーミングを堪能 ーエッジAI活用への道 13ー

UnitV をゲットしました! ーエッジAI活用への道 11ー

0
0

素晴らしい金魚水槽システムを目指して歩んできたこの道。
これまではSipeed Maixduino での構築を目指しておりました。

MaixduinoはK210に加えてESP32が搭載されており無敵のマイコンだと思うのですが、Pythonでのマイコン操作になれていないためどうしてもUDPでのデータ受信や映像のストリーミングができず頓挫しておりました。

そんなおりに大変良い製品の発売がM5Stack社より発表されました。

 
K210とカメラのみというシンプルなユニットのUnitVです。
画像認識はこいつに任せて、あとの機能は外部に搭載してハイテク金魚水槽システムの実現を目指すことにします。

 

UnitVの購入

初めてAliExpressでお買いモノしました。

12/6に購入して1/14に到着しました。いやー待った。お待たせし過ぎたかもしれません。
 

 

初期設定

以下を参考に各種設定しました。
 UnitV Quick Start

ファームウェアは M5StickV_Firmware_1022_beta.kfpkgKflash_GUIで書き込みました。

プログラミングは MaixPy IDE で実施するのですがバージョンはv0.2.4じゃないとうまくいかないようです。

オリジナル金魚モデルで画像認識

早速、依然作ったオリジナル金魚モデルで画像認識を試してみました。
結論から申しますと全く問題なくUnitVでも動作いたしました。

オリジナル金魚認識モデルの生成 ーエッジAI活用への道 3ー

 

Maixduinoの時と同様に、作った金魚認識モデル(kmodelファイル)を書き込みます。

 

コードはYolo-digit-detector/micropython_code/racoon_detector.py を使用します。MaixPy IDEで書き込みました。

また画面方向調整のためコードに以下の挿入・変更施しました。

動作

Maixduinoと同じように動きました。
LCDはないのでMaixPy IDEの画面で動作確認しました。

 

UnitVにはNeopixelが搭載されておりますので夜間撮影時の照明となるか試してみました。

 

照明として使えそうですが、ちょっと金魚がビックリしてますねw
 

シリアル通信

今後UnitVを外部端末と接続して色々するための準備として、まずはUARTでのデータ送信を試してみました。

UnitVに付属されてきた4ピンケーブルでM5StickCに接続して通信してみました。

動作

UnitVのボタンA, Bを押すとLEDの色が変わり、UARTでデータをM5StickCに送信します。
データを受けたM5StickCはデータに応じて画面が変わります。

UnitVコード(MaixPy IDE)

UnitVでUART送信します。demo_uart.py を参考にコーディングしました。
ボタンA, Bを押すとLEDの色を変えて それぞれ文字A, Bを送信します。

M5StickCコード(Arduino IDE)

UnitVからの文字を受けてLCDの背景色を変えて、文字を表示します。

 

参考

おわりに

エッジAI活用への道はこのたび方向転換しUnitVの導入の検討を開始しました。

さてうまくいくのでしょうか?道は続きます。

ではまた

次の記事

UnitV で画像シリアル転送の味見 ーエッジAI活用への道 12ー

M5StickCは創造の触媒である

0
0

M5Stack Advent Calendar 2019| 13日目

言わずと知れたM5StickCを購入させていただき、多くの刺激とクリエイティビティーをこの製品から得ることができました。

ここではM5StickCを用いて作ったものを紹介させていただきます。

 

 

M5StickC

先日M5StickCの回路図が公開されましたので少しのぞいてみましょう。

  • コアにESP32-PICOが搭載されWiFiやBLEの無線通信が可能です。
  • M5stackのトレードマーク カワイイ液晶ディスプレイも搭載。
  • RTC(リアルタイムクロック):時刻を記録・記憶が可能です。
  • 慣性センサ:6軸のモーションセンサが搭載されています。
    ここではMPU6886が記載されていますが、私の所有するM5StickCの慣性センサはSH200Qでございます。
  • 赤色LED、赤外線LED搭載
  • マイクも内蔵されています。

小さいですが非常に高機能です。創造力をものすごく掻き立てられます。

ラジコンカー

WiFiでスマホと通信して制御できるラジコンミニカーを製作しました。Blynkアプリを使用しております。

モータドライバをI2C制御させて車輪を制御しています。小さくてカワイイ!

https://homemadegarbage.com/en/m5stickc-ar

応用

これの応用でスマート電池も作ってみました♪

M5StickC でスマートな電池を作製 M5Stick-Cell

倒立振子

トラ技でカルマン・フィルタを学びM5StickCで倒立振子を実現させました。
内蔵の慣性センサで存分に堪能させていただきました。

 

M5StickC以外の部品はモータドライバとモータと電池のみです。
 

ESP32のBLEでスマホと通信してPID制御の定数設定や前後進や旋回を制御できるようにしました。

 

M5StickC で倒立振子 PID制御編 ー倒立振子への道 3ー

音声制御

内蔵のマイクで音声通信も楽しみました。

Chirp 

Chirpという音声による信号通信ソリューションのESP32用のサンプルコードを改造して音声によるデータ通信を実現しました。

Chirpのスマホアプリから音声データ(カラーコード)を送信し、LEDとディスプレイの色を変えています。実に愉快な音で可愛いです♪

音声による信号通信 Chirp -M5StickC編-

超音波通信

超音波による通信も試してみました。

 

楽曲に超音波信号を仕込むことで簡単に同期制御が可能です。

 

スピーカがあれば通信ができるので、短いセッティング時間でライブ照明演出が可能になるのではないでしょうか。

M5StickC で超音波通信を堪能

腕時計

カワイイM5StickCですので身につけたくなるのは自然なこと。
加速度センサの値を元に時刻を表示するユニークな腕時計をこしらえました。

 

ESP32のディープスリープ機能で表示のない場合に省エネする機能を盛り込みました。バッテリ低下によりシャットダウンしても内蔵RTCにより時刻はきちんと保持されておりました。

M5stickC で腕時計 ~ G-showC ~

おわりに

M5StickCにたくさん詰まった機能を利用して、いろんなものを作りました。そして作り続けるでしょう。

まだ赤外線LEDは使用したことはございませんし可能性はまだまだ秘めており、非常に楽しみです。

創造をM5StickCと共に

M5stickC で腕時計 ~ G-showC ~

0
0

M5stickCで腕時計を作製いたしました。

RTCと加速度センサを組み合わせたM5stickCならではの時計ですのでご報告させてください。

 

 

概要

加速度センサを利用して、x軸の角度がhour、y軸の角度がminuteに一致したときのみ表示します。

まさに重力(Gravity )が時(Clock)を示す G-showC (ジーショック)なのです。

ちなみに私のM5StickCの慣性センサはSH200Qです。

動作

以下のように腕をうまいこと傾けることによって、時刻を知ることができます。

オプション

  • 省エネのため20秒間  時間または分が表示されない場合、ディスプレイはオフになり、ディープスリープモードに入ります。
    ボタンAを押して、スリープをキャンセルします。
     
  • 角度の校正機能として、ボタンBを押すと、加速度センサーのオフセットが再計算されその時点の姿勢が0°となります。

 

Arduinoコード

Arduino用のM5StickCライブラリは初期バージョンの0.1.0を使用しておりますのでご了承ください。

慣性センサはSH200Qです。