モーターPWM制御

 お知らせ
 今回「ArduinoUNO」ではなく「Arduino」と表記しているのは、ATmega系やATtiny系も同じような結果になるためです。
はじめ「モーターPWM制御はArduino側に任せる」と言っていますが、最終的にはコンパクトにするためにATmega168Pを使用しています。

今回は、ArduinoとESP8266でモーターのPWM制御方法が「違う」という点についてです。

 
結論:ESP8266の最大出力電流12mAで、なぜかトランジスターを用いたPWM制御ができない。
対処方法は、『ESP8266からArduinoにシリアル通信→Arduinoからトランジスターを介してPWM制御』。
 
 
Arduinoの場合、LEDなど最大出力電流を超えない低電流の部品の場合、PWMに対応しているピンに接続してプログラムを書けば、ちゃんと制御できます。
 
また、PWM他言うピンは以下の通りです。
 Arduino ESP8266 
 3・5・6・9・10・11
ココにピンアサイン図があります
12・13・15 
ココにピンアサイン図があります

モーターなど、最大出力電流を超える高電流を必要とする部品の場合、トランジスターのスイッチング回路を利用したやり方があり、Arduinoの時はこれで上手くいきました。

しかし、調べてもESP8266でトランジスター(スイッチング回路)を使ったPWM制御をやっている人は見つかりませんでした…
それよりも、制御基板モータードライバーを利用している人が多いようです。
制御基板でのやり方はココモータードライバーはココが参考になるかも?
 
なら自分で試してみようと思いましたが、何度やってもArduinoの時のように上手くいかないので、別の方法を考えてみました。
 
一度Arduinoに何かキーワードをシリアル送信して、キーワードで動作を振り分けるのはどうか。
つまり、モーターPWM制御はArduino側に任せる、という意味です。
 
今回コンパクトにするためにArduino側はATmega168Pを使用しています。
(★ATmega168Pはシリアル送信に使用するピン[RX、TX]があって使いやすい★)
 
ちなみにTXが送信、RXが受信です。
ESP8266とATmega168PでTXピンをRXピンに、RXピンをTXピンに接続するのは、ESP8266送信→ATmega受信、ATmega送信→ESP8266受信という双方向通信をするためです。