ここではArduinoでモーターを正転,逆転する方法を書いていく.
最初にそもそもモーターの回転方向を変える原理について簡単にまとめる.
モーターの回転方向を変える原理(Hブリッジ)
モーターの回転方向はモーターに入ってくる電流の方向によって決まってくる.したがって,原始的な手法を考えるとモーターの回転を変えたいときにつなぎなおせばよい.このようなことをマイコンなどによって指令を出すことによって行うことができるのがHブリッジ回路である.Hブリッジ回路についての説明はこちらのサイトがわかりやすいかなと思うので参考にしてもらえればと思います.
DCモーターをArduinoUnoで動かしてみる(その2)
また,この回路において大切な役割を果たすのがトランジスタである.
トランジスタにはPNP型とNPN型があり,その原理については以下のサイトに詳しく書いてあったので参考にしてください.
【トランジスタとは?】『特徴』や『動作原理』などを分かりやすく説明します!
デバイスの準備
arduinoで実際に行うためにトランジスタを実際に用意して行うこともできるが,今回はすでに生産終了予定であるが良くモーターのコントロールで電子工作で使われることが多い(?)東芝のモータードライバであるTA7291Pを用いることにする.こちらの仕様についてはこれらのサイトを参考にしてください.
TA7291データシート
より詳しい内容はこちらを参考にするとよくわかる.また,こちらではデータシートの内容をより分かりやすく書かれている.自分でデータシートを読めるようになることが大切だとは思うのでその練習問題の答え合わせとして用いるといいかと思います.
TA7291P情報系でもわかるモータードライバーの使い方
Arduinoの書き方の作法
Arduinoは基本的にはC言語のような書き方をする.簡単な作法についてまとめておく.最初に変数などを宣言ずるときはとりあえず「const int」の形で書いとけばいいと思います.「#define」で宣言するものもあるがどちらがいいのかはっきりさせておきたい人は,ぜひ調べてみてください.私はまだ調べ切れていないのでここについては引用は特にしません.すいません.arduinoの記法やその他作法のようなものについては阪大の先生(石川先生や南先生)が動画で解説されている(正確にはメカトロの講義の中で使用されているようです.)今回のものはそちらをかなり参考にさせていただきました.この場をかりまして感謝申し上げます.
//最初に変数や使用するPinを宣言する.
const int Pin = pin_number;
int value;//変数
//Pinなどの設定をここで行う
void setup() {
pinMode(Pin, OUTPUT); //pinが出力として使うことをここで設定する.
}
//ここから回路内でループされる内容を記述する
void loop() {
digitalWrite(Pin, LOW);//例えばデジタル信号でPinで0を出力させる.
}
実際のプログラム
今回利用したプログラムでは基本的にはメカトロ実習⑤ DCモータで紹介されているものを参考にプログラムは作成した.PWM出力については可変抵抗を用いてアナログ値を変化させ,それを読み取ることで値によって回転の方向を変えれるようにした.また,実際に値がどのようになっているのかシリアルポートで確認できるようにした.
const int PWMA = 3; //PWM
const int Pin1 = 4; // Arduino_Pin1を4番ピンに割り当てます。
const int Pin2 = 5; // Arduino_Pin2を5番ピンに割り当てます。
const int STIC = A0;
int speed_cmd;
void setup() {
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(PWMA, OUTPUT);
Serial.begin(9600); //パソコンとのシリアル通信を宣言します。通信レートは9600bpsで設定します。
}
void loop() {
speed_cmd = analogRead(STIC)-512;
Serial.println(speed_cmd); //読み取った値をシリアルポート(=パソコン)に送信
if (speed_cmd > 0){
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(PWMA, map(speed_cmd, 0, 511, 0, 255)); //map(変換したい数値,現在の範囲の下限,上限,返還後の下限,上限)
}else{
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(PWMA, map(-speed_cmd, 0, 511, 0, 255));
}
}
参考文献
DCモーターをArduinoUnoで動かしてみる(その2)
【トランジスタとは?】『特徴』や『動作原理』などを分かりやすく説明します!
TA7291データシート
TA7291P情報系でもわかるモータードライバーの使い方
メカトロ実習⑤ DCモータ
Arduino Unoのアナログ入力ポートで光センサーを読み取る