以下の内容はhttps://relativelayout.hatenablog.com/entry/2018/11/04/233846より取得しました。


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

今度は動いたよ!

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

前回まであらすじ

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

relativelayout.hatenablog.com

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

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

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

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

akizukidenshi.com

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

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

View this post on Instagram

やっぱりI2C楽だわ… ミス少ないし結線も楽だわ…

A post shared by pokio (@pokiiiiio) on

いやー、結線も楽だし、ちゃんと動くし、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);
}

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

View this post on Instagram

嫁氏、京急のカプセルプラレールで、横浜駅×2を引き当てた。ヤルジャン!

A post shared by pokio (@pokiiiiio) on

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

参考文献




以上の内容はhttps://relativelayout.hatenablog.com/entry/2018/11/04/233846より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14