なごるふ

UnityとかArduinoとか気になったことを

ATTiny85とBLEモジュールでモータードライバを制御する

前回の記事でATTiny85の周波数を校正したことで、アプリから受信した値をBLEモジュールのAE-TYBLE16とのシリアル通信によって正しく取得できるようになりました。

今回はその受信した値を使って、モータードライバのTC78H653FTGを制御し、実際にDCモーターを動かしてみようと思います。

開発環境

  • Mac Book (10.13.6)
  • Arduino IDE (1.8.13)

機材一覧

その他 ブレッドボード、ジャンパワイヤ、電池ボックスなど

テストコード

ATTiny85は0PINと1PINからPWM制御ができるようです。

入力された文字列を数値か判定して、数値の場合は入力値で速度制御を、文字列の場合には停止をするようにしてみました。

モータードライバのTC78H653FTGはデューティ比が25%以上でないといけませんが、今回は弾くような制御を入れていないので、64未満の数値は0以外は使わないようにします。

/*
 * ATtiny85 PIN
 * 5/A0  U  VCC
 * 3/A3  |  2/A1
 * 4/A2  |  1/PWM
 * GND   |  0/PWM
 */

#include <SoftwareSerial.h>
SoftwareSerial bleSerial(3, 4); // RX, TX

#define ENABLE 2 // モータードライバON 兼ラージモード.
#define FRONT 1 // 正転.
#define BACK  0 // 逆転.

void setup()
{
  bleSerial.begin(9600);
  
  pinMode(FRONT, OUTPUT);
  pinMode(BACK, OUTPUT);
  pinMode(ENABLE, OUTPUT);
  
  digitalWrite(ENABLE, HIGH);
  digitalWrite(BACK, LOW);
  analogWrite(FRONT, 0);

  // 周波数調整(個体差あるので要調整)
  OSCCAL = 155; // Default 159
}

String str = "";

// 数値判定
bool isNumber(const char* ascii)
{
  int i;
  for (i=0; i<strlen(ascii); i++)
  {
    if(!isdigit(ascii[i]))
    {
      return false;
    }
  }

  return true;
}

void loop()
{
  while(bleSerial.available())
  {
      char inChar = bleSerial.read();
      if (inChar == '\n' || inChar == '\r')
      {
        if(0 < str.length())
        {
          if(isNumber(str.c_str()))
          {
            // 数値 0-255の範囲に丸め込み.
            int power = atoi(str.c_str());
            power = min(max(power, 0), 255);

            analogWrite(FRONT, power);
          }
          else
          {
             analogWrite(FRONT, 0);
          }
          
          str = "";
        }
        break;
      }

      str += inChar;
  }
}

回路作成

モータードライバのTC78H653FTGは、今回も4Aまで対応のLARGEモードを使うので、電源を2本接続するようにしています。

f:id:nagomi0132:20220118181422p:plain f:id:nagomi0132:20220118231728j:plain

動作テスト

BLEモジュールの接続は太陽誘電のアプリを使っています。 youtu.be

さいごに

無事にATTiny85のPWM制御でDCモーターを動かすことができました。

次は3.3V昇圧コンバータを使って、乾電池だけ駆動するように修正してみたいと思います。