2018年7月28日土曜日

USB Type-C対応のSATA変換基板買ってみた

USB3.0からSATAに変換するアダプタとしてJMicronのJMS567のドングルを使っていたんだけれども、光学ドライブが使えないので試しにVIAのVL716搭載の基板を買ってみた。
Type-A→Type-C変換ケーブルもついてきた
これでeBayで680円ぐらいだった。
何かの2.5インチHDDケース用基板なのかな?基板にはHD2510-1C-V3.0というシルクが入っているぐらいでよくわからない。
商品説明にはUSB3.0と書いてあったけど、VL716なのでUSB3.1まで対応してそう。

早速余ってるSSDを使って速度を測定してみていたところ、結構落ちる
よくみてみると実験に使っていたIntel SSD 320は1Aっぽいので電力不足っぽい?

ということで急遽別給電ケーブルを作成。
このVL716搭載基板はSATAと電源が一体になってしまっているので延長ケーブルをベースに給電ケーブルを作成する。
電源ラインをぶった切ってSATA電源単体の端子とつなぐだけ。今回はSATA電源→FDD用電源変換ケーブルをぶった切って使用した。
あとはこいつに12VのACアダプタからSATA電源に変換するアダプタ(自作)を使用して給電する。このアダプタは内蔵したDC-DCコンバータで12Vから5Vを作っている。

このSATA電源別給電ケーブルを使うことにより5V給電オンリーだったVL716基板でも12Vを使用する3.5インチドライブも使用可能に!

とりあえず動作確認ついでにJMS567と速度比較をしてみた。
Z170内蔵のIntelのUSB3.0コントローラを使用してテスト
VL716のほうはJMS567よりシーケンシャルリードが少し遅いけど、それ以外は軒並み高速っぽい。ちなみにどちらもUASP。

せっかくUSB3.1対応してるんだからと言うことで、ASMediaのUSB3.1ポートに挿してテストしてみた。
ちょっとだけシーケンシャルリードが早くなった気がする?

そして肝心の光学ドライブはJMS567と同様に認識できなかった…
VL716のデータシートにはODDも行けるって書いてあるんだけどなぁ
ASMediaのASM1053とかASM1153はODDファームウェア入れれば対応できるようだし
こいつもファームウェアの問題なのかなぁ
光学ドライブ用に使うならASMediaのASM1153EにODDファームウェア入れるのが手っ取り早そう…



2018年7月1日日曜日

BeagleBone BlueはFPVのカメラとして使えるか?

BeagleBone BlueにとりあえずWebカメラを接続してリアルタイムで映像を送れるのかためしてみた。FPVみたいなことができればいいなと。
WiFi経由で映像を送るとどうしても遅延が気になるので解像度を下げたりしてどの程度遅延が起きるのかも含めて確認してみた。

本当はH264とかで圧縮して遠くに行って帯域が細くなっても通信できればいいかなとか思ったんだけどCPUパワーを食うし遅延も大きくなるかなとか思ったのでまずは簡単なMJPG-Streamerで試してみた。

カメラはLogicoolのC270を使用した。

MJPG-Streamerのインストール。
sudo apt-get install mjpg-streamer

BeagleBone BlueはUSB給電時はUSBポートで電力消費するデバイスが不安定になるので12VのACアダプタも接続しておく。(カメラが再起動を繰り返したりする)
そんでもって
mjpg_streamer -i "input_uvc.so -d /dev/video0 -y  -r 320x240 -f 15" -o "output_http.so -p 8080 -w / usr/share/mjpg-streamer/www"
これでカメラが起動できる。
USBで接続してる場合はPCからhttp://192.168.7.2:8080に接続してStreamをクリックするとリアルタイムの映像が確認できる。

今回は320x240の15FPSで試してみたけど、このぐらいなら結構遅延もなさそう。これ以上になると明らかに遅延している…

とりあえず320x240の15FPSでの遅延を簡易的に測定してみた。
画面にストップウォッチとMJPG-Streamerを横並びに移して、その画面にカメラを向けてスクリーンショットを取る手法で遅延を測った。


この解像度だと遅延は0.17秒ぐらい。思ったよりだいぶ遅延が少ない。PCとの距離が近いからからもしれないけど。CPUの使用率は20%ぐらいだった。

WiFiで手軽にFPVカメラとして使えそう。
モータドライバとかも付いてるしこのボードだけでFPVラジコン作れそうな気がしてきた。

2018年6月23日土曜日

BeagleBone Blueで2Sのバッテリを使ってみた。

BeagleBone Blueにはバッテリ入力端子がついていて2Sのリチウムイオンバッテリを使用することができる。今回は18650タイプのリチウムイオンバッテリを2セル使ってバランス端子付きのバッテリを作って試してみた。

というわけで7.4Whって書いてあった18650のセルが余っていたのでバランス端子だけがついたBealgeBone Blue専用バッテリを作ってみた。投げ売りのノパソ用バッテリをタブを残した状態で分解したやつなのでタブにはんだ付けで組み立ててダイソーの物干し竿カバーと言う名のでかい熱収縮チューブでパックにした。コネクタは3極のXHコネクタでケーブルはAWG20を使用した。赤と黒で7.4Vバッテリなんだけど、バランス端子なので中間から白いケーブルを出してある。
BeagleBone Blue
BeagleBone Blueにはバランス端子から給電も充電もする仕様なのでこの端子だけついてるバッテリでも大丈夫。18650の2Sな電池パックを買ってきて改造するのもいいかも。

このボード、ACアダプタを繋げば充電できるのも便利。バッテリが無くなったらACアダプタ繋げばいいし、ACアダプタ抜けばバッテリ動作に切り替わる。ノートPCみたいな感じ。
ラズパイ用とかだと結構高級な追加ボードになってしまうからなぁ
ちなみに回路図を見た限りではデフォルトでは1A充電に設定されているようなので今回の2000mAhのバッテリだと充電に2時間ぐらいかかりそう。充電IC的には抵抗を変更することによって2Aまで設定できそう。

バッテリ残量LEDも付いてるんだけど、これはGPIOで実装されているようなのでアプリケーションを動かす必要があるっぽい。バッテリを指して起動すると75%のところが一瞬光るので自動で動いてるもんだと思っていた…

アプリケーションはBeagleBone BlueをWiFiなどでインターネットに繋いだ状態で
sudo apt-get update
sudo apt-get install librobotcontrol
でインストールできる。インストールが完了すると自動でLEDが有効になる。
バッテリ電圧を確認したいときは
sudo /usr/bin/rc_battery_monitor
で確認できる。確認したあとにこのアプリケーションを終了するとLEDが消えてしまうので
sudo systemctl restart rc_battery_monitor.service
で再度LEDだけを表示させることができた。

このLEDはGPIOで制御しているので自作のアプリケーションから制御したりもできそう。バッテリ駆動がデフォルトでついてるSBCなにげに便利。

2018年6月17日日曜日

BeagleBone Blueを買ってみた。

BeagleBone Blueが少し気になったので買ってみた。
BeagleBone
Linuxが動くSBCなのにロボット開発用なので入出力が少し豪華。エンコーダ入力とかモータドライバも内蔵されているっぽい。CPUはAM3358でクロックは1Ghz、メモリはDDR3の512MBを積んでいるっぽい。
BeagleBone Blue
ラズパイとかでもGPIOがついているんだけど、エンコーダ入力とかは外付けのマイコンを使わないとやりにくかったりするし、BeagleBone Blueならこれ一つで完結できるとか。
ArduPilotもサポートしているようでOSが動くながらもドローンに搭載されたりしているらしい。
BeagleBone Blue
ボード上のIOはラズパイのピンヘッダと違ってJSTのSHコネクタが採用されていて、各ペリフェラルごとにコネクタが分かれている。専用オプションとかならとても使いやすそうだけど汎用のセンサ類を繋ぐ場合は変換ケーブルを作らなければいけなさそう。
エンコーダ付きのモータを4つ動かせるようにエンコーダ入力とDCモータドライバ出力が4セットあるのがすごい…。バッテリも2Sのバランス入力対応で充電もできちゃうらしい。
インターフェースもUART、I2C、SPI、CAN-BUSなど結構盛りだくさん。9軸IMUも付いてるし。モータとバッテリさえ用意すればなにか作れそうな勢い。WiFiモジュールも一応技適マーク(201-135370)が付いていたのでRev.A2の基板であれば技適も問題なさそう。
ちなみにフラックスのようにみえるのはコンフォーマルコーティングらしい。てっきりリワークされているのかと思ったけど、DCモータとかLiPoバッテリ回路部分はショートしないようにコーティングされてるみたい。
BBBlue
OSもセットアップ済みらしいので、microUSBでPCに接続すると内蔵のeMMCからOSが起動して、USBデバイスとして認識された。CDC ECMというデバイスのドライバがインストールされなかったけど、USBのネットワークデバイスとして認識するのでputtyとかから192.168.7.2にアクセスしてログオンできる。USBシリアルポートとしても認識するのでTeraTermとかを使ってそちらからアクセスすることもできる。

uname -aをしたらLinux beaglebone 4.4.59-ti-r96だった。こちらの記事を参考にWifiに接続してapt-getでアップデートしておいた。
デフォルトの状態だとラズパイと違って色々アプリケーションが入っていないので(lsusbとかkillallもつかえない…)apt-getで色々入れていかないと。

電源ボタンとか複数のLEDがついていてわかりやすいし結構使いやすいかも。電源ボタンで終了できるのは地味に便利。

Wifiルータに繋いで動かすときにもIPがわからなくなったりするのでとりあえずmDNSをインストールしておいた。
sudo apt-get install avahi-daemon libnss-mdns
これで再起動すればbeaglebone.localで接続できるようになる。

あとはサーボ用の5Vを有効にするにはGPIO80を出力モードに変更してHIGHにする必要があるっぽい。
sudo echo 80 >  /sys/class/gpio/export
sudo echo "out" > /sys/class/gpio/gpio80/direction
sudo echo 1 > /sys/class/gpio/gpio80/value
ACアダプタか、2Sのバッテリからしか給電できないけど、これでDCコンバータが有効になる。ついでにGPS端子とPower Out端子から出ている5VもUSB給電時は出力されない。
詳しくは回路図が公開されているのでそちらを見るとわかるかも。(UARTがどこに繋がってるかも書いてあるし。)

2018年6月2日土曜日

LS-CHLでSMBv2を使う

数ヶ月前にLS-CHLのHDD交換を依頼してきた友人からLinkStationに繋がらなくなったとの報告が。調べてみるとつながらないのはSambaだけで、MacとかだとSambaにも接続できる…
どうやらWindows 10がSMB1.0をデフォルトで無効にしたっぽくてSMB1.0しか対応してないこの世代のLinkStationに繋がらなくなった模様。
例の脆弱性によってSMB1.0を無効にするのが推奨されたりしてるし、これで繋がらなくなってる人結構いるかも?

調べてみると海外のフォーラムでSMB2.0を有効にする方法を公開してる人が居たので参考にして改造してみた。
ちなみに今回使用したLinkStationはLS-CHLv2でファームウェアが現時点での最新のv1.74です。行指定でパッチ当ててるのでそれ以外ではうまく動かない可能性あり。うまく動かないどころかファイルが壊れる可能性があるので注意。

とりあえずファームウェアを解凍して何行目に追記すればよいかを確認した。
公式ファームウェアアップデータの中のhddrootfs.imgは例によって拡張子をzipにしてネットに上がっているパスワードで解凍できる。さらに解凍したファイルをWinRARで覗くとLinkStationのシステム内部と同じようなファイル構成になってるはず。

このバージョンのファームウェアでは/etc/init.d/smb.shを確認した限り58行目に先程のフォーラムで公開してくれているコマンドを挿入すれば良さそうなのでacp_commander.jarを使って書き込んでみた。

本来はTelnetとかSSHを有効化した後にsmb.shファイルを書き換えるのだけれども、今回はTelnetやSSHは不要で単純にSMBv2を有効にしたいだけだったので、acp_commander.jarでsedコマンドで行指定で挿入してみた。なのでファームバージョンが異なる場合は使え無いはず。

acp_commander.jarを動かすためにJavaをインストールしておく。
ファイアーウォールは無効にしておく。
LS-CHLv2のIPを"192.168.11.2"、adminパスワードは"password"とするので、この手順でやってみたい方は自分の環境に読み替えてください。

コマンドプロンプトを起動して、cdでacp_commander.jarがあるところに移動
java -jar acp_commander.jar -t 192.168.11.2 -ip 192.168.11.2 -pw password -s
でうまくLinkStationにつながれば
/root>
となるのでここに
sed -i "58i/bin/sed -i '3i\\    max protocol = SMB2\\' /etc/samba/smb.conf" /etc/init.d/smb.sh
と貼り付けてエンター(一行
OK (ACP_STATE_OK)
となれば完了

あとはLinkStationを再起動すればSMB2.0に対応してるはず。
共通ファームのLS-XHLとかLS-VLとかでも行けるかも?
これで最新のWindows 10からもアクセスできる。

2018年5月13日日曜日

USBcount50をPythonで使ってみた

秋月で売っているUSBcount50というUSB接続の周波数カウンタがあるんだけど、対応OSは32bitオンリーだしWindows 10はおろかVistaまでの対応らしいのでどうにか使いたいということで知り合いから相談を受けた。
ということで一応借りてきた。


Elan Digital Systems Ltd'sってところから出てるデバイスらしいんだけどディスコン?になってるし、サイトもWebアーカイブに残ってるだけだし…
0.1Hzから50MHzまで測れる周波数カウンタらしい。USBポートはオスがそのまま出ていてUSB延長ケーブルが付属している。赤色LEDがBNC入力端子の下についてて、あとは4chまでスタックして使用できるらしいのでそれ用のポートがついてる。

というわけで早速秋月のページからソフトウェア類が入ったzipをダウンロードすると、ソフトウェアのソースコードとかレジスタの説明が入っていた。Communications Protocolを見てみるとどうやらソフトウェアとデバイス間の通信はUARTでやってる?これならPythonとかでも使えるかも。

USBcount50の中身的には(分解していないのでソフトウェアからの推測だけど)、周波数カウンタの機能自体はFPGA、PCとの通信用にSilicon LabsのCP210xシリーズのUSB UART変換ICを使っていて、FPGAとは921600bpsで通信しているっぽい。こんなに高速にUARTで通信している割には通信プロトコル自体には誤り検出とか実装されていないように思うんだけど、結構安定して通信できているのかな。
USBとBNC端子はアイソレーションされてるようなのでUARTかUSBのラインにアイソレーションICが入ってるのかな?

デバイスとの通信部分はDLLになっていて、DLLをVB6.0のGUIソフトウェアから呼び出してるみたいな構成。どうやらCP210xに直接アクセスしてシリアルナンバーとかバージョンを読み出すところはCP210x用のDLLを使っているようなのでそのせいでPCで仮想COMポートとして認識していてもソフトウェアからアクセスできなくなってそう…

ためしにCooltermからUSBcount50の仮想COMポートにプロトコルの仕様書通りにコマンドを送ってみるとちゃんと帰ってくるようなので、純正ツールを使わなくてもCOMポートにアクセスさえすれば使えそう。どうやらCP210xとの通信はバージョンチェックとかデバイスがつながっているかどうかの確認しかしてなさそうだし。

というわけでDLLの必要そうな部分と、GUIツールからDLLを扱ってる一部をPythonに移植してみた。USBcount50では使ってない関数もあるかも。(同じ外見のデバイスで何種類かシリーズものがあるらしい)
これでOSやバージョンを問わず使うことができそう。XPのマシン用意するのも大変だろうし。
GUI部分はとりあえずは保留でライブラリとして使えるような形で作ってみた。Pythonよく理解できてないのでなんか変な所あるかも…

とりあえずラズパイ上ではうまく動いた。これ、純正ソフトだと周波数と時間しか表示できなさそうだけど、パルス出力のセンサー類をつないでセンサーの出力に応じた計算までさせたいのであればPythonは結構便利な選択肢だったかもしれない。
多分古いデバイスだし、使う人いないだろうけど一応公開しておく…

USBcount50.py

DLLの中身で必要そうな部分をそのまま移植した感じなので不要な関数もあるかも。
そしてテストで測定結果を取得したときに使っていない関数はほぼ未確認。
スタック用のポートもレジスタいじると操作できそうなので汎用デジタルIOとして使えそうな気がする。

そういえばUSB Host ShieldでもCP210xが扱えるらしいけど921600bpsとかで通信できるのかなぁ?もし通信できるならマイコンとかでも扱えちゃうかも?

追記:リンクが切れていたので再アップのついでにVIDとPIDで自動でデバイスを認識するように変更した。

2018年5月7日月曜日

ハイブリッド型の中華イヤホンTRN V20を買ってみた。

Aliexpressを巡回しているとリケーブルできるイヤホンが結構お安いこと…
ということでちょっと調べてみるとBA+DDのハイブリッド型のイヤホンで2000円を切るのにもかかわらずレビューもそこそこ良かったTRNのV20ってのをポチってみた。
マイク付きとマイク無しがあったけど、とりあえずマイク無しで16.63ドルだった。


箱もなかなかいい感じ。
中国から来た割にはあんまり潰れていなかった。


色はグレーにしてみた。
他に黒と赤があった。
マットな感じの質感。結構安っぽさは感じるかも?
まぁ実際安いし…


ケーブルはこれまた高そうな感じ。

ケーブルは2pinで反対にも刺さるのでそれは気をつけないといけないかも。
音質もなかなか良い。2000円とは思えないかも。
2000円以内でこのぐらいのイヤホンが買えるとは中華すごいなぁ