Androidのメモとか

ポキオの日記です。今日も遅延してない。

京急の鉄道模型をESP8266で動かそうと思った話②

今度は動いたよ!

ポキオ 京急 鉄道模型 Arduino ESP8266 DRV8830

前回まであらすじ

マイコンボードで鉄道模型を走らせるべく、いろいろ試していました。

relativelayout.hatenablog.com

マイコンボードのピンからの出力でも走るかな?と思ったんですが、これを見た方からいろいろなアドバイスやお叱り・マサカリを頂き、今回の第2話で再度チャレンジという流れです。

やっぱりモータードライバー

結論から言うと、DRV8830というモータードライバーを使いました。

ポキオ 京急 鉄道模型 Arduino ESP8266 DRV8830

akizukidenshi.com

秋月で230円。お手頃な価格の一方で、このモータードライバーはマイコンボードとI2C接続できるので、モータードライバーへ与える電圧の生成やanalogWrite()といった関数がもともと用意されていないような某ボードでも簡単に扱えるものとなっています。

とりあえず逝っとけダイヤ的なアレ

いやー、結線も楽だし、ちゃんと動くし、I2C楽だわぁ・・・。ヘタレなので、これで十分でございます。一方で、スペックシートにかかれている通りに、バイト列を送信しなければいけないので、それだけはちゃんと実装する必要があります。

実装例

だんだん速くなって、急に止まって、逆方向にだんだん速くなって、また急に止まるような動作確認用のコードです。

#include <Wire.h>
#define SDA 13
#define SCL 12
#define ADDR 0x60

void setup() {
  Wire.begin(SDA, SCL);
}

void loop() {
  writeData(0x00, 0x00, 0x00);
  delay(1000);

  for (int i = 0x06; i < 0x3F; i++) {
    writeData(0x00, i, 0x01);
    delay(1000);
  }

  writeData(0x00, 0x00, 0x00);
  delay(1000);

  for (int i = 0x06; i < 0x3F; i++) {
    writeData(0x00, i, 0x02);
    delay(1000);
  }
}

void writeData(byte reg, byte vset, byte data) {
  int vdata = vset << 2 | data;
  Wire.beginTransmission(ADDR);
  Wire.write(reg);
  Wire.write(vdata);
  Wire.endTransmission(true);
}

これも、当たり前と言えば当たり前なんですが、ちょっと電圧をかけたぐらいでは鉄道模型は走らず、ある程度電圧をかけないと動いてくれません。例えば低速走行をやりたいときは、実際の挙動を見つつ、適切な電圧を見つけてあげる必要がありそうです。

ちなみに、嫁氏が京急のカプセルプラレールで横浜駅を引き当ててきたので、今後使わせていただきます・・・(笑)

参考文献

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。