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モジュールも一応技適マークが付いていた。
ちなみにフラックスのようにみえるのはコンフォーマルコーティングらしい。てっきりリワークされているのかと思ったけど、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からもアクセスできる。