今回は、ArduinoとESP8266でモーターのPWM制御方法が「違う」という点についてです。
結論:ESP8266の最大出力電流12mAで、なぜかトランジスターを用いたPWM制御ができない。
対処方法は、『ESP8266からArduinoにシリアル通信→Arduinoからトランジスターを介してPWM制御』。
Arduinoの場合、LEDなど最大出力電流を超えない低電流の部品の場合、PWMに対応しているピンに接続してプログラムを書けば、ちゃんと制御できます。
また、PWM対応ピンは以下の通りです。
モーターなど、最大出力電流を超える高電流を必要とする部品の場合、トランジスターのスイッチング回路を利用したやり方があり、Arduinoの時はこれで上手くいきました。
しかし、調べてもESP8266でトランジスター(スイッチング回路)を使ったPWM制御をやっている人は見つかりませんでした…
それよりも、制御基板やモータードライバーを利用している人が多いようです。
※制御基板でのやり方はココ、モータードライバーはココが参考になるかも?
※広く使われてきたモータードライバー(TA7291P東芝製)は生産終了予定で、現在秋月電子通商では取り扱っていません。
代用品として「TA7288P」が使えるそうです。(こちらのページで紹介されていました。)
※広く使われてきたモータードライバー(TA7291P東芝製)は生産終了予定で、現在秋月電子通商では取り扱っていません。
代用品として「TA7288P」が使えるそうです。(こちらのページで紹介されていました。)
なら自分で試してみようと思いましたが、何度やってもArduinoの時のように上手くいかないので、別の方法を考えてみました。
一度Arduinoに何かキーワードをシリアル送信して、キーワードで動作を振り分けるのはどうか。
つまり、モーターPWM制御はArduino側に任せる、という意味です。
今回コンパクトにするためにArduino側はATmega168Pを使用しています。
ちなみにTXが送信、RXが受信です。
ESP8266とATmega168PでTXピンをRXピンに、RXピンをTXピンに接続するのは、ESP8266送信→ATmega受信、ATmega送信→ESP8266受信という双方向通信をするためです。
ATmega168Pはシリアル送信に使用するピン[RX、TX]があって使いやすい!!