2021年5月22日土曜日

STS3215のインターフェースを調べてみた。

 秋月からFEETECHのSTS3215が発売されたということで、どうやって制御できるのか調べてみた。このサーボ360度回るし、シリアル接続で制御できるらしい…
秋月で2200円。このクラスのサーボとしてはお安いかもしれない。

FE-URT-1っていうインターフェースボードも存在しているようで、こいつを購入すれば簡単に動かせるらしい。秋月の説明書PDFファイルには参考回路が載っていてMAX485を自動方向制御する感じ(単純に送信時以外は常時受信にする)みたいな感じの回路が。STSシリーズはTTLって書いてあるのでMAX485の出力でもちゃんと動くのだろう。しかし秋月のマニュアル、AとBが紛らわしい書き方でAとB逆につなぎそうw(ピン番号はあってるんだけど)
自己責任で使用してくれって書いてあるけど…

STS3215の仕様書を見ると参考回路が載っていた。

これによると、3ステートバッファのSN74LVC1G125とSN74LVC1G126のOEをUARTのTXでうまいこと動かして送信時以外は受信できるようになってるっぽい。たしかにLOWとHIGHのスレッシュだけ合っていればRS-485ドライバICでも通信できそうな気もする。
2回路入りのSN74LVC2G241とかTC7WH241FKを使えばMAX485を使った例のようにシンプルにできそう。VCCは一応3.3Vでも5Vでも良さそうだけど、UARTのレベルと合わせないとうまく通信できないかもしれないので注意。例えばVCCが5Vのときは3ステートバッファのHIGHがVCC x 0.7VなのでHIGHが3.5V以上じゃないとだめなので…
Groveとかだと電源が5Vでロジックが3.3Vだったりするのでハマりそう。

なんかおもしろそうなサーボだしちょっと購入してみようかなぁ
ちなみにFEETECHのTTLタイプのサーボのコネクタは2.50mmピッチなMolexのMini-SPOXっぽい。ハウジング側は50-37-5033、端子は08-70-1040あたりかも。互換品もAliexpressで売ってそう。
とりあえずケーブルが付いてきてるようなので基板側のコネクタ、MOLEX 22-03-5035だけあれば良さそうな気もするけど。
何作ろう…

2021年5月17日月曜日

HX711を試してみた。

 友人が最近ArduinoにハマっていてHX711を入手したようなので借りてきた。
Aliexpressで1セット280円ぐらいだったらしい。

とりあえず5kgのを借りてきた。ロードセル用のADコンバータとしてHX711が付属しているタイプ。これがセットで280円は安いな…

HX711の基板はこんな感じ。ピンヘッダも付属していた。右上の方のジャンパ抵抗を変更するとサンプリングレートが10Hzから80Hzに変更できそう感じ。ちなみにこの基板は5V仕様なんだけど、3.3Vで使う場合は左側の20kΩの抵抗(203)を10kぐらいに変更すればいいらしい。
とりあえず付属のピンヘッダはこんな感じにはんだ付けしてみた。
ロードセルの方は端子が付属していないようだったので手持ちのQIコネクタを装着してみた。
なぜかオス端子は付いてるのにロードセル側用の端子が付属していない不思議…
QIコネクタはホーザンのP-706でいい感じにカシメられる。この工具結構汎用性高くて良い気がする。
HX711とはこんな感じに接続。4線式なのでBは使わないっぽい。
Arduino UNOでHX711のライブラリでキッチンスケールサンプルを動かしてみたけどいい感じに取れてそう。
デフォルトでは0gと1000gで補正するようになってるみたい。
ちゃんと重量がわかる補正用のオモリがあるといいのかもしれない。







2021年5月15日土曜日

ESP32-CAMにCH340Kを乗っけて自動書き込みしてみた。

 先日購入したCH340Kだけど、普通に使えそうだったのでESP32-CAMに直接実装してみた。ついでにArduino IDEから書き込みが楽なように自動書き込み回路も組み込んでみた。せっかくDTRとRSTがあるCH340Kを使うんだからオートリセットしないとね!

自動書き込み回路はよくあるトランジスタ2つを使ったタイプにしてみた。トランジスタはSOT-23な適当なやつを使ってみた。MMBT3904あたりだった気が。

ちなみにESP32-CAMに搭載されていたESP-32SはESP-WROOM-32に交換し、技適対応済み。

WiFi WebCam
ESP32-CAM、IO0はちゃんとピンとして出てるのにRSTがスイッチしか無い。それならピンヘッダいらないかも。ということで外してある。ケースに入れるとき邪魔だし。とりあえずIO0のところにトランジスタを一つ。
ESP32-CAM
そんでもってESP32-WROOM-32が乗ってる側にはてんこ盛り。リセットスイッチの直下にトランジスタを配置し、CH340KはPSRAMの上に乗っけてみた。厚みはESP32-WROOM-32と同じぐらいの厚みになるのでケースにも入れやすい。RSTのコンデンサはもうすでに実装されていたので、取り付けたのはトランジスタ2つと抵抗10k2つとCH340Kのみ。
DTRとRTSは自動書き込み回路に、TXはU0R、RXはU0Tに直結。使わないピンはCTSだけかな。

前回のテストでもIOのレベルはVCCと同じになるっぽかったので、CH340Kは3.3V駆動にしてある。VCCとV3を直結してESP32-CAMの3.3Vに接続した。
ホントはパスコンつけるべきだったんだけど忘れていた…
動いたので良し…
このパッケージ、ピン数が少ないのでこんな感じで手ハンダするのに便利~

ESP32-CAM
前に作ってもらったケースにそのまま収まった。

とりあえずArduino IDEで書き込み確認してみた。
Arduino IDEのBaudrate選択を一番早いのにしてもちゃんとオートリセットで書き込めるー
これは便利だ。ちなみにCH340K自体は2Mbpsまで対応らしい。
ケースに入れてしまうとOTAでしかファームウェア更新できないし、たまにシリアルコンソールで見たい時があったのでこれでだいぶ便利になった。特にESP32-CAMは書き込みボタンが無いのでIO0をGNDに落とすの面倒だったし。
これならファーム書き換えたあとにそのままリセットもできる!そして小型!

ESP32-CAM自体が送料込みで4.48ドルだったのでESP32-WROOM-32を載せた時点でESP32のほうが高い…
ESP32-WROOM-32Dだと330円だからまだいいかも。ちなみにESP32-WROOM-32Eは16MBにそそられるんだけど、PSRAMにつながっているピンが出ていないためPSRAMが使えなくなるので、秋月でまだ売ってるDに交換するのが一番安いかも。トランジスタとCH340Kを購入しても1000円付近で作れちゃう。

マルチクライアント対応のファームがなかなか調子良いけど、デフォルトのサンプルのような便利さがないので、Webでそこそこ設定できるように改良中。更新もあったようなのでベースを最新のものに差し替えてみたり。
やっぱりDevBoardみたいにUSB一本で書き込みもリセットもしてくれるのは楽だなぁ

Arduino IDEから書き込みしやすくなったので、安定性向上とこの質素なUIをどうにかしたいね。とりあえずwebserverのタスクのスタックサイズを1.5倍ぐらいにしてたらすごく安定したけど…

そういえばAitendoからESP-32Sが載ってない代わりにESP32-WROOM-32が付属してくるESP32-CAM-Kっていうキットが出てた。これならヒートガンで剥がすのが難しい人でも技適対応のESP32-CAMが作れるね。モジュールのはんだ付けは必要だけど。

2021年5月9日日曜日

CH340Kを試してみた。

CH340シリーズは最初の頃はあんまり安定性が良くないという噂を聞いていてあんまり使ってなかったんだけど、コピー品が悪さをしていたようで試しにCH340Eを使ってる限りでは問題がなかった。
データシート見てるとCH340KはCH340Eのアクセスランプの代わりにDTRが出ている…ということはESP32の自動書き込みに使えるぞ…
ということで探していたんだけどAliexpressとかでも10個以上とかでしか売ってないしそもそもあんまり売っていないのでとりあえず秋月の商品リクエスト入力フォームに入力しておいた。

そしたらついに秋月でCH340Kのお取り扱いが始まっていたので、ポチってみた。
ついでにピッチ変換基板もおすすめされていたしやすかったのでポチポチ。
CH340K
CH340EとCH340Kはピン数同じだから同じパッケージだと思っていたけど違うのね。あんまり良く読んでいなかった。まぁCH340Gとかに比べればだいぶ小さいけど。
しかしDTRつけたあたりESP32の自動書き込み狙ってない?だってDSRはついてないんだよね。
というわけで早速ピッチ変換基板上でお試し。
V3という端子がついているけれども、FTDIみたいに3.3Vを出力するための端子ではないみたい。

とりあえず認識するかどうかの確認はVCCを5VにつないでV3ピンとGNDに0.1uFをつないだだけ。
デバイスマネージャーだとUSB Serialとしてドライバが入っていない表示になっている。
USB Serialを右クリックして"ドライバの更新"→"ドライバを自動的に検索(S)"。
その次に"Windows Updateに更新されたデバイスドライバーを探索する"をクリック。

するとWindows Updateに飛ばされるのでそこでオプションの更新プログラムを開く。
ドライバー更新プログラムってところをクリックすると一覧にドライバが出てくるのでwch.cnにチェックを入れてインストールしてみる。
そんでもって抜き差しや再起動するとちゃんとCH340Kとして認識していた。
ドライバのEXEを中華サイトからダウンロードしてこなくてもインストールできるのは精神衛上良いな…

早速cooltermでテスト。
とりあえずループバックテストもオッケーだし、cooltermだと右下のRTSとDTRの緑のボタンをクリックするとRTSとDTRの状態を変化させることができる。active lowなのでオフのときにピンから電圧が出るはず。
ためしにオフにしてピンの電圧を測ったら4.5Vぐらいだったので(VCCが5V切ってるからかな)やはり出力レベルはVCCに依存?ESP32とかの3.3V系マイコンで使う場合は素直に外付けレギュレータ使ってCH340K自体も3.3V駆動にしておいたほうがいいかも。

とりあえずこんな状態でもテストできたのでデジトラまで搭載したESP32書き込み器作ってESP32-CAMに搭載したいなぁ

2021年5月1日土曜日

Logicool C270のレンズは交換できるのか?

 この前C270でライブカメラのテストしたときに画角が気になったので分解してレンズが交換できるのか確認してみた。前にRaspberry Pi Cameraでレンズを変更した時みたいにM12のレンズが取り付けたい。これならレンズをガラスのに交換できるし、広角なレンズに変更もできるし。

色変更できたりするように爪だけで止まってるカバーを外すとネジが3つ見えるのでそれを外すとカバーが外れる。
基板のネジ2つを外すと基板が浮くので裏側を確認できる。コネクタを抜いてもグラウンドが繋がっているので基板は外しにくいかな。裏側にあるネジ2つを外すとレンズマウントが外れる。
イメージセンサのピン数少なっ

レンズマウントは前回同様樹脂製のSマウントを使用できそう。しかしやっぱりそのままではSマウントが取り付けできない。純正のレンズのマウントが14mm角でねじ取り付けピッチが16.5mmぐらい。
Sマウントが17mm角でピッチが20mm。なのでネジ穴のピッチがあったとしてもLED点灯回路に少し当たる。
樹脂製なのでそこは少し削ればいいとしてもネジの部分どうしよう。前回レンズの比較をしてみたときに1.8mmのレンズだとピントが合わせられないという問題もあったのでそれも一緒に解決して置きたい。小さいタイプのレンズマウントを買うのも手だけど。

あとはカバーのところにうまくSマウントが飛び出るように加工しないと行けなさそう。

2021年4月30日金曜日

WS2812BなLEDリングを買ってみた

 たまたまAliexpressを見ていたらフルカラーシリアルLEDが12個乗ったLEDリングが1.25ドルで売っていたのでついポチってしまった。

端子などの付属品も一切ついてなかった。しかし安いぞ…
搭載チップはWS2812Bらしい。

CJMCU-2812B-12
ちゃんとLED一つ一つにセラコンがついていた。NeoPixel Ringに似てるけど一回り大きい。
内径35mm、外形50mmだった。
CJMCU-2812B-12
裏面には2.54ピッチでパットが出ているのみ。CJMCU-2812B-12っぽい?

とりあえずこのままだと動作確認もしにくいのでコネクタを付けてみた。
ちょうど手持ちのXHコネクタがピッチぴったりである。
コネクタのピンを曲げてこんな感じにハンダしてみた。

とりえずArduinoでのNeoPixelライブラリで動作確認してみた。RGBのLEDを抵抗で色調調節するよりは全灯でもきれいに光るなぁ。
配線も簡単で便利だ。




2021年4月17日土曜日

MJPG-Streamerの代替としてµStreamerを試してみた。

 前にMJPG-StreamerでWiFiなFPVカメラにすると遅延がどのぐらい出るのかを試してみたんだけど、そのときは解像度320x240の15FPSで行けそうなぐらいだった。
µStreamerを使うとカメラのハードウェアエンコード機能を使えたりするらしいので、この機能でどのぐらい低遅延になるのかを試してみた。

µStreamerはラズパイに最適化されていてラズパイカメラでもMJPG-Streamerより性能が出るらしいんだけど今回は前回試したときと同じBeagleBone BlueとUVC対応Webカメラで試してみた。

まずはBBBlueのOSのアップデート。だいぶ放置していたので今回はeMMCのOSをまるごとアップデートすることに。OSはこちらからダウンロードした。
今回はeMMCのOSをまるごと入れ替えたかったので、consoleフォルダの中のbone-eMMC-flasherから始まるイメージファイルを使用した。ダウンロード後に解凍するとimgファイルができるのでラズパイ用の書込ツールでimgファイルを適当なSDカードに書き込んだ。

あとはBeagleBone Blueに差し込んでSDボタンを押しながら電源を入れるだけ。LEDが5分ぐらい流れたあとに全点灯して少しするとLEDが消えるので、LEDが全部消えたら(ACアダプタ使用時は緑色だけついた状態)電源を抜いてmicroSDカードを抜いて完成。

電源を入れるとeMMCから新しいOSが起動する。

次に本題のμStreamerをビルドする。MJPG-Streamerのようにapt-getだけでは入れられなかったのでGithubの手順通りにビルドした。手順と一緒にMJPG-streamerとの比較が乗ってるので置き換えを狙っていそうな感じ?確かにMJPG-streamerはラズパイではよく使用例があるんだけどあんまり更新されてなさそうだし…

まずは必要なパッケージをインストール

sudo apt-get update
sudo apt-get install build-essential libevent-dev libjpeg-dev libbsd-dev make usbutils

ustreamer本体をダウンロードしてビルド

git clone --depth=1 https://github.com/pikvm/ustreamer
cd ustreamer
make

ビルドに2分ぐらいかかった。

Webカメラを繋げて起動してみる。BeagleBone BlueにACアダプタ接続するの忘れずに(ACアダプタかバッテリがないとUSBポートの電圧が不安定でカメラがうまく起動できない)
今回は前回と同じくC270を使用した。これも一応MJPEGのハードウェアエンコード対応しているらしい。

./ustreamer -m MJPEG -c HW -f 15 -s 0.0.0.0 -p 8080

これでUSBとBeagleBoneをPCに繋いでる場合はhttp://192.168.7.2:8080にアクセスするとµStreamerのページが表示されるはず。
/streamをクリックすると映像が見れる。

デフォルトの640x480でも結構レスポンスが良さそうなので前回同様測定してみた。

解像度640x480の15FPSでも0.25秒だった。ちなみに1280x720でも0.23秒だったのでハードウェアエンコードが効いている感じがある。さらにはFPSを30に上げてみても0.25秒だったので、ハードウェアエンコードができる設定であれば帯域が十分にあれば変わらなそう。(25FPSとかに設定してもC270の設定にないのでFPS30に自動で変更されている)
ちなみにCPU使用率は720Pの30FPS設定でも10%ぐらいだった。

H264のハードウェアエンコード対応のカメラだったら帯域を食わなくていいのかなぁ
でもお高い…
ちなみにSJ4000をUSBカメラモードで使うと遅延が0.31秒ぐらいの遅延だったのでカメラによっても遅延が変わるっぽい。

やっぱりFPVとかやるなら広角レンズのほうが良さそう。C270にワイドレンズつけてもそこまで広がらないからなんかいいのないかなぁ。

μStreamerの方はビルドが面倒かもしれないけどすぐビルドが終わるし、使い勝手もMJPG-streamerとあまり変わらないので置き換えアプリケーションとしてはいいかもしれない。ラズパイに最適化されているらしいので今度はラズパイカメラでh.264での遅延を試してみようかな。