2019年4月29日月曜日

2.5インチ用のSATA→USB変換アダプタを3.5インチドライブでも使う

SATA→USB変換は結局何種類か持っているんだけど友人が3.5インチでも使えて安いやつがほしかったみたいなので、安い2.5インチ用のやつを改造してみた。

結局2.5インチドライブしか使えないというのは、2.5インチのSSDやHDDは5V電源のみで動くのに対して、3.5インチドライブは12Vが必要なのでUSBから直結するタイプは12Vが供給できずに使えないというわけ。
というわけで電源を分離して、12Vと5VをACアダプタから供給するケーブルを作ったりしてたわけなんだけど、SATAの電源一体のメス端子をオスに変更してしまえばいいのではないかと言うことでやってみた。

ベースの変換アダプタとしてはASMedia ASM1153E搭載のアダプタを選択。ファームウェアを変更することにより光学ドライブでも使えるし、デフォルトではTRIMもUASPも対応しているファームが書いてあるし。値段もAliexpressで3.7ドルぐらいととてもお安い。
自分も光学ドライブ用に購入したときに分解して中身確認してたので安心。
早速分解してみると基板は前回購入したものと同じでADPU3ST-A32という刻印が合ったけど、バージョンがVER006になってた。前回のはVER004だった。

違いはSATA電源のところがスルーホールになっているだけかな?こっちのほうが強度が高そう。
といっても改造するのには剥がすのが大変…

SATAのオス端子はポチっても良かったんだけど、できるだけ安く済ませるために壊れたHDDから取り外した。
HDDによってハンダ面の向きが反対だったりするけど、TOSHIBAのHDDは同じ向きだったのでこいつを分解してカット。

SATA電源の部分はいらないのでカットしてSATAの部分だけハンダした。

ケースもいい感じにカットして完成。
これでSATAケーブルが刺さるようになるので2.5インチでも3.5インチでも電源さえ用意すれば問題なく使える。光学ドライブを使うときはファームを書き換えればいいし。

2019年4月21日日曜日

ArduinoでINA226を使ってみた。

前にラズパイにDACとACS712を接続して電流測定しようとして5Vラインのノイズとかでうまく測れなかった事があったんだけど、Aliexpressを見ていたらI2Cの電流センシングモジュールを発見したので試しにポチってみた。
TIのINA226っていうICを使ったモジュールらしい。3.3V駆動もできるらしいのでこれならレベル変換もいらないので便利そう。
INA226はシャント抵抗を使って電流を測定するモジュール。ハイサイドもローサイドも行けるらしい。電圧測定もできて入力電圧は最大36Vまで。これがI2Cで取得できるのは手軽でいいかも。
今回のモジュールには電流測定用抵抗として0.1Ω(R100)が乗っていた。INA226はシャント電圧±81.92mVまで測定できるらしいので、0.1Ωだと±0.8192Aまで測定できる。シャント抵抗としては結構でかいのが乗ってる…
0.01Ωに交換すれば、±8.192Aまで測定できるということで、シャント抵抗は怪しいし交換必要かな。
WCMCU-226
I2Cのスレーブアドレスは裏面にジャンパがあるので変更できる。

しかしこのモジュール、電源電圧も測定できるのはいいけど結構ピン配置が恐ろしい事になってるな。マイコン用出力のとなりに36Vとか入れたくないような…
あとはGNDはせめて2つつけてほしかった。
シャント抵抗からICのIN+ IN-につながるまでにスルーホール2回経由してるのも気になる…
WCMCU-226
ということで改造してみた。
電流検出用抵抗は電流測定用のシャント抵抗に交換してみた。今回は0.001Ω(R001)と0.002Ω(R002)を用意して見た。桁間違えたのは秘密。(本当は0.01Ωか0.02Ωが欲しかった…)2Wの抵抗を使ったので0.002Ωの場合は31.6Aまで流せる?
そんでもってICのIN+とIN-とシャント抵抗をジャンパワイヤーで直結。ワイヤーはなんとなくだけど一応同じ長さになるようにしておいた。(パターンカットしてないからあんまり意味ないかも)あとはIN+とIN-にノイズ取り用として0.1uFを入れてみた。(データシートには0.1uF~1uF)ってなってる。ピン直下に入れたかったけどピッチ的に1005でも難しかったのでパットの上に…

2019年4月20日土曜日

LT-DT306BKでSDRやってみた

ハードオフでワンセグチューナーLT-DT306BKを見つけたのでSDRをやってみようということで買ってみた。このチューナーはRealtekのRTL2832Uで動いていて、WinUSBドライバを入れればSDRチューナーとして使えるらしい。

まずはドライバのインストール。Zadigを使ってインストールする。
Zadigを起動したらRTL2832Uを選択して、ドライバはWinUSBを選んでドライバをインストールする。

アンテナの方はロッドアンテナが付属しているんだけど端子がMCX端子なので変換ケーブルがあればいろんなアンテナに接続できそう。

SDRソフトウェアはとりあえずSDRシャープを使ってみた。
とりあえずのアンテナでもFMが受信できることが確認できた。USBのFMチューナーとしても普通に使えそう。
アンテナとか色々弄る前にLT-DT306BKはアンテナ入力端子に保護用のダイオードが入っていないらしいのでBAV99をコネクタ部の未実装パターンに実装しておくと良いらしい。

2019年4月13日土曜日

ESP32にアナログスティックで入力してみた。

ESP32でモータとかサーボを動かして見るときにシリアルコンソールからのコマンドだとたるいのでアナログスティックを繋いでみた。
Arduino用のジョイスティックのブレークアウト基板とか、ジョイスティックシールドもいいけど、今回はハードオフで見つけたジャンクのWiiヌンチャクを使ってみた。

ヌンチャクはWiiリモコンの拡張コントローラなんだけど、Wiiリモコンとの通信はI2Cを使っているっぽい。電源電圧も3.3VらしいのでESP32と直結できそう。
ESP32のADCはちょっと使いにくそうだったので(直線性が悪いとか)、I2Cのようにデジタルで入力できるのはありがたい。それにGPIOを2本しか消費しないし。
wii nunchuck
とりあえずハードオフで200円で売られていたヌンチャクを購入してみた。スティックが少しべとついてる。
ジョイスティックがベタベタしているのはパーツクリーナーとかで拭いた後にシリコンスプレーを塗ってゴシゴシすると結構サラサラできれいになったりする。

そういえばヌンチャク、コピー品があるっぽいので注意かもしれない。見分けられそうなポイントはネジと端子のロゴかも。純正はネジがY字ネジ。コピー品はプラスネジだった。あとはコネクタ部にNintendoのロゴが入っていなかったり。
純正品はi2cのクロック400kHzでも動作するけどどうやらコピー品は100kHzでしか動作しなかったりするらしい。I2Cバスを他のデバイスと共有するときとかも考えると純正がいいかも。

ESP32との接続は変換用コネクタも売られていたりするし、延長ケーブルをカットして使ってもいいかもしれない。
今回はコネクタにジャンパワイヤーがそのまま刺さるところがあったので、とりあえずそこにブレッドボード用のジャンパワイヤーをそのままさして使ってみた。すごくいい感じの隙間だ…。
Wii nunchuck pin assign
コネクタは6極(うち1つはピンなしなので実質5極)なんだけどI2Cで実際必要なのは外側の4Pinで、上の画像だとオレンジが3.3V、緑がGND、黄色がSCL、青がSDAに刺さっている状態。
そんでもってヌンチャク自体はI2Cなんだけど、通信内容は暗号化されているようで、復号化も自動でやってくれるライブラリがあったのでライブラリを使わせてもらった。
Nintendo Extension Controller Library
このライブラリを使えば簡単にヌンチャクを使うことができる。

ESP32でデフォルト以外のピンをI2Cで使う場合はI2Cの初期化をnchuk.begin();の前にすれば良い。
例えばSDAを21、SCKを25にする場合はWire.begin(21,25);をnchuk.begin();の前の行に挿入するだけ。

ためしにNunchuk_DebugPrint.inoに上記の変更を加えてシリアルコンソールで見てみるとちゃんとアナログデータが取れている。
そんでもってこのヌンチャクコントローラ、3軸加速度センサーがついているのでそのデータも見れたりする。アナログスティックとデジタルボタン2つと加速度センサー3軸がお手軽に取れてしまう。

I2Cなので複数のヌンチャクを使いたい場合はLTC4316とかを使ってアドレスを変更してやれば使えそうな気がする。もしくはTCA9548Aでバスを切り替えるか…。ESP32の場合はI2Cバスが2つ付いてるから別なピンにつなげちゃってもいいかもしれないけど。

これでラジコンとか作りたいなと思っていたんだけど、WiFiでUDP通信使えばレスポンスも問題ないかな?ESP32を2セット用意してもプロポ買うより断然お安く作れそうだし。テレメトリも行けそうだし。

2019年3月2日土曜日

ダイソーのLAN延長アダプタをギガビット対応にしてみる

ダイソーのLAN延長アダプタを簡易PoEにしたりクロス変換アダプタにしたりしていて本来の使い方をしてなかったのだけれども、いざLANケーブルを延長してみたら本当に100Mbpsでしかつながらなかったので改造。

クロス変換アダプタ作ったときみたいにヨリ線にすれば治るんじゃないかなーと…

結構前からずっとパッケージ変わってない気がする。
ダイソーにしては珍しいロングセラー製品?
横から覗くと8本つながっているけど100BASE-TX対応との表記。

裏面にもカテゴリー5対応と書いてある。カテゴリ6さしてもカテゴリ5の速度って書いてあるので一応100Mbpsでしかつながらないのでちゃんと仕様通りである。

とりあえず分解。ポキっとおるようにすると簡単に外れる。

コネクタを外す。写真の外れたコネクタの方向で言うと上の方に引っ張ると簡単に外れる。

ピンコンタクトを真っ直ぐにすると抜けてくるのでとりあえず全部抜く。

LANのピン配を見てそれぞれヨリ線にして戻す!3番と6番が離れてるけど、それ以外は隣同士って感じかな。
あとはヨリ線があんまりよじれないように戻すだけ。
ケースの都合上180度ぐらいはしかたないな…


Intel NICのケーブル診断でもケーブルの品質が優になっている。
これでつないでみたら一応ギガビットで接続できてるみたい。
まさかヨリ線にするだけでこんなに効果がでるとは…
ツイストペアにする線をミスると大変なことになりそうw


2019年2月23日土曜日

Raspberry PiでBluetoothファイル転送してみる

Raspberry Pi 3BにはBluetoothがついているんだけども、標準状態でペアリングしてもあんまりできることがなかった…
設定次第でいろんなプロファイルが使えるようになるみたいだけど今回はBluetoothでファイルを送受信してみることに。
まぁ同じネットワークに繋がっていてWinSCPとか使えばファイル転送はもっと楽なんだけど、スタンドアロンでGUIで使用しているときとかに地味に便利なので。
ということで今回はGUIで起動しているラズパイとWindows 10のPCとのファイル転送という想定で設定してみた。

とりあえずBluemanをインストール。
sudo apt-get install blueman
そしてラズパイを再起動するとLXPanelのBluetoothアイコンの隣にもう一つアイコンができる。

LXPanelのBluetoothアイコンよりメニューが増えてる!
ということでまずはBluemanのBluetoothアイコンをクリックして、Make Discoverableを選択してラズパイがPCから認識できるようにする。


そしたらWindows側から発見できるようになるのでペアリングする。
ちなみに60秒以内にやらないと見つけられなくなってしまうのでそのときはまたMake Discoverableを押すと良い。

Pin番号を確認されるのでWindows側は接続ボタンを、ラズパイ側はConfirmボタンを押す。

まずはラズパイからファイルを送信してみる。

Windows側はBluetoothアイコンを右クリック→ファイルの受信

これでWindows側はファイル受信待ちになった。

あとはまたラズパイのBluemanのメニューから今度はSend Files to Deviceを選択。
ファイル選択画面になるので送信するファイルを選ぶ。

ファイルを選ぶと送信先を選ぶ画面になるので先程ペアリングしたPCを選択してOKを押す。

すると自動でファイル転送が始まる。

逆にラズパイ側でファイルを受信する場合は何も準備はいらないので、Windows側でBluetoothアイコン右クリック→ファイルの送信でファイルを選択して送信するだけ。
ラズパイ側で自動で受信してくれる。

受信フォルダを変更したい場合はBluemanのアイコンをクリック→Local Servicesを開いてTransferタブで設定を変更できる。

Bluemanが高性能過ぎてLXPanelのBluetoothアイコンはもう使わなくて良さそうなので消しても良いかも。Bluetoothアイコン2つもいらないしね…

2019年1月19日土曜日

ESP-WROOM-32でCAN BUSを使ってみる

ESP-WROOM-32にはSJA1000互換のCANコントローラーが内蔵されているのでCANトランシーバーだけ用意すればCAN BUSが使えるっぽい。
ArduinoでCANって言うとMCP2515っていうCANコントローラーのライブラリがとても情報量が多くて使いやすいんだけど、MCP2515とSJA1000の両方に対応しているライブラリがあったのでそちらを使ってみた。

使用させてもらったライブラリはこちら。
どうやらESP32で使うとSJA1000、Atmega328pなどのArduinoだとMCP2515を使えるようになっているライブラリっぽい。サンプルも入っているので助かった。
関数がほぼ同じなのでESP32以外に移植するときもかんたんに移植できそう。

あとはCANトランシーバーが必要なんだけど、ESP-WROOM-32は3.3V駆動なので3.3V駆動のSN65HVD232Dを用意した。本当はスタンバイ端子とかあったほうがいいらしいんだけど面倒なので…
このICはD(1番ピン)をGPIO5、R(4番ピン)をGPIO4につないであとは電源をESP32と共通の3.3VにつなぐだけでOK。

Raspberry PiにMCP2515つないでCANのデータを見れるようにしたかったんだけどまたMCP2515が届いてないので本当にCAN BUSでデータ送受信できてるかの検証がいまだできず…
とりあえずInnovate LC-2をAEMnetにつなげそうなサンプルプログラムを書いてみた。ただしデータの送信頻度はMTS依存だし足りないデータがあるからだめかも?


#include <CAN.h>

#define LED_BUILTIN 2

int Lambda[4];
int Func[4];
byte CanData[8]={0x00,0x00,0x00,0x00,0x0C,0x0C,0x82,0x02};
boolean isSend = true;

void setup() {
  Serial.begin(115200);
  Serial2.begin(19200, SERIAL_8N1, 16, 17);//RX 16, TX 17
  pinMode(LED_BUILTIN,OUTPUT);

  CAN.setPins(4, 5);
  CAN.begin(500E3);
}

void loop() {
  serialEvent2();
  if (!isSend){
    if(Func[0] == 0){
      int lambda = ((Lambda[0]+500)*10);//Lambda x10000
      CanData[0] = highByte(lambda);
      CanData[1] = lowByte(lambda);
      can_send();
    }
  }
}

void serialEvent2() {
  while (Serial2.available() > 0) {
    byte mtshead[2];
    Serial2.readBytes(mtshead,1);
    if((mtshead[0] & 0xA2) == 0xA2){
      //debug
      mtshead[1] = mtshead[0];
      Serial2.readBytes(mtshead,1);
      if((mtshead[1] & 0x80) == 0x80){
        digitalWrite(LED_BUILTIN, HIGH);
        int stream_len = int(((mtshead[1] & 0x01) << 7) | (mtshead[0] & 0x7F));
        int sense_cnt = 0;
        for (int i=1; i <= stream_len; ++i){
          byte mtsdata[2];
          Serial2.readBytes(mtsdata,2);
          if((mtsdata[0] & 0x42) == 0x42){
            isSend = false;
            Lambda[sense_cnt] = int(((mtsdata[0] & 0x01) << 7) | (mtsdata[1] & 0x7F));
            Func[sense_cnt] = int((mtsdata[0] & 0x34) >> 2);
            sense_cnt++;
            Serial.println(Func[sense_cnt]);
          }
        }
        return;
      }else{
        return;
      }
    }else{
      return;
    }
  }
}

void can_send(){
  CAN.beginExtendedPacket(384);
  for (int i=0; i <= 7; i++){
    CAN.write(CanData[i]);
  }
  CAN.endPacket();
  isSend = true;
  digitalWrite(LED_BUILTIN, LOW);
}

今回は送信だけのテストプログラムだけど、ライブラリでは受信もできるのでソフト次第でELM327を使わずにOBD2でECUと通信できるかも。
オープンソースのELM327互換デバイスとかもあるみたいだし、ここらへん移植できたらBluetoothとかWiFi接続のアダプタが作れちゃったり。

MCP2515のボードいつ届くのかなぁ
安いのでArduino用買ってしまったから5V品っぽいんだけど、Raspberry Piで使うためにCANトランシーバー張り替えるかパターンカットでCANトランシーバーにだけ5V入れるかか…
3.3V対応のCANトランシーバもう少し買っておくんだった…
続きはテスト環境が届いてからかな

ちなみにESP32にCANトランシーバをつけずにこのライブラリを使用するとフリーズするというか無限ループに入ってしまうみたい。タイムアウトとか設定できるといいんだけども…