DCモーターを回す

さて久しぶりにArdiono。
LチカやLCDも良いのだが、もっとアクションが欲しい。
ということで、モーターを回してみることにした。
幸い購入したキットにはDCモーターが付いていたので、これを回してみよう。
DCモーターなんて、1.5Vもあれば回るので、デジタル出力のピンに直付けで(デジタル出力とGNDの間にサンドイッチ)で回るだろ。
逆電流を抑止するダイオードさえ挟めば、大丈夫。
うんしょ、うんしょ・・・あれ、回らない。


モーターは結構電力を食う。
こちらの一番小さいモーターを見ても分かるとおり、なんと0.5Aも食う。
Arduinoのピンは5V/40mAほどしか流せないので、とても回らない。
幸いキットにNPNトランジスターS8050(の恐らく互換品)があったので、これでスイッチング回路を組むことにした。

回路図で書くとこんな感じになる。

ArduinoのPIN3がHになるとベース電流が22mAほど流れ、EC間電流がほぼ最大まで流れるはずだ。
ArduinoのPIN3はPWM出力になっているので、PWMで回転数を調整することができる。
モーターと並列に入っているダイオードは、モーターが停止する際に流れる逆電流からトランジスターを保護するものだ。
スケッチは以下の通り。


#define DC_MOTOR_PIN 3
#define MOTOR_DUTY 128
void setup() {
// put your setup code here, to run once:
pinMode(DC_MOTOR_PIN, OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
analogWrite(DC_MOTOR_PIN, MOTOR_DUTY);
}

【永久保証付き】Arduino Uno

【永久保証付き】Arduino Uno

DCモーターの回転数をボリュームで調整

さて、モーターもただ回すだけでは面白くないので、回転数を調整できるようにする。
VRに5Vを加え、出てきた値を読み出して、それでモーターの回転数を調整する。

スケッチは以下の通り。


#define DC_MOTOR_PIN 3
#define VR_PIN 0
void setup() {
// put your setup code here, to run once:
pinMode(DC_MOTOR_PIN, OUTPUT);
}

int outputVR;

void loop() {
// put your main code here, to run repeatedly:
outputVR = analogRead(VR_PIN);
analogWrite(DC_MOTOR_PIN, outputVR / 4);
}

Analog INのADで読み出される値は10bit(最大1023)なので、analogWriteの8bit(最大255)に入るように4で割っている。

【永久保証付き】Arduino Uno

【永久保証付き】Arduino Uno