
Driving a Motor — SIK Circuit 12
Spin a DC motor at variable speeds using a transistor as a switch. Learn about transistors, flyback diodes, PWM motor control, and serial input for speed control.
Hướng dẫn
Parts & Introduction
Parts & Introduction
DC motors draw too much current for an Arduino pin to drive directly. A transistor acts as an electronic switch — a small signal from the Arduino controls a larger current flowing through the motor. The flyback diode protects against voltage spikes when the motor turns off.
Parts Needed
- 1x Arduino Uno + USB cable
- 1x Breadboard
- 1x DC Motor
- 1x NPN Transistor (P2N2222A)
- 1x Diode (1N4148)
- 1x 330Ω Resistor
- 6x Jumper Wires
Hardware Hookup
Hardware Hookup
Wiring Instructions
Transistor pinout (flat side facing you, pins down): Collector, Base, Emitter (left to right).
- Place the transistor in the breadboard.
- Connect Base (middle pin) through a 330Ω resistor to Arduino Digital Pin 9.
- Connect Emitter (right pin) to GND.
- Connect Collector (left pin) to the motor's black wire.
- Connect the motor's red wire to 5V.
- Flyback Diode: Connect the banded end (cathode) to 5V, the other end (anode) to the motor's black wire.
Arduino Code
Arduino Code
Open the Arduino IDE and upload the following sketch to your Arduino board.
/*
SparkFun Inventor's Kit
Example sketch 12 — SPINNING A MOTOR
Use a transistor to spin a motor at different speeds.
Hardware connections:
Transistor BASE through 330 ohm resistor to digital pin 9
Transistor EMITTER to GND
Transistor COLLECTOR to motor black wire
Motor red wire to 5V
Flyback diode: band (cathode) to 5V, anode to motor black wire
This code is completely free for any use.
*/
const int motorPin = 9;
void setup()
{
pinMode(motorPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
serialSpeed();
//motorOnThenOff();
//motorOnThenOffWithSpeed();
//motorAcceleration();
}
void serialSpeed()
{
int speed;
Serial.println("Type a speed (0-255) into the box above,");
Serial.println("then click [send] or press [return]");
Serial.println();
while(true)
{
while (Serial.available() > 0)
{
speed = Serial.parseInt();
speed = constrain(speed, 0, 255);
Serial.print("Setting speed to ");
Serial.println(speed);
analogWrite(motorPin, speed);
}
}
}
void motorOnThenOff()
{
int onTime = 3000;
int offTime = 3000;
digitalWrite(motorPin, HIGH);
delay(onTime);
digitalWrite(motorPin, LOW);
delay(offTime);
}
void motorOnThenOffWithSpeed()
{
int Speed1 = 200;
int Time1 = 3000;
int Speed2 = 50;
int Time2 = 3000;
analogWrite(motorPin, Speed1);
delay(Time1);
analogWrite(motorPin, Speed2);
delay(Time2);
}
void motorAcceleration()
{
int speed;
int delayTime = 20;
for(speed = 0; speed <= 255; speed++)
{
analogWrite(motorPin, speed);
delay(delayTime);
}
for(speed = 255; speed >= 0; speed--)
{
analogWrite(motorPin, speed);
delay(delayTime);
}
}Test & Experiment
Test & Experiment
What You Should See
The default serialSpeed() function lets you type speed values (0-255) into the Serial Monitor to control motor speed in real time.
Troubleshooting
- Motor not spinning: If you sourced your own transistor, double-check the pinout — many NPN transistors have reversed pin orders compared to the P2N2222A.
- Motor won't start at low values: Below ~50, the motor doesn't have enough torque to overcome friction. This is normal.
- Connection issues: Try unplugging and re-plugging the USB cable.
Experiments to Try
- Uncomment
motorAcceleration()to see smooth speed ramping. - Add a potentiometer to control speed with a knob instead of serial input.
- Add a button for on/off control.
Vật liệu
- •SparkFun Inventor's Kit - V3.2 - 1 kitNOK 999.20
- •Arduino Uno R3 - 1 pieceTạm thời
- •Breadboard - 1 pieceTạm thời
- •DC Motor - 1 pieceTạm thời
- •NPN Transistor (P2N2222A) - 1 pieceTạm thời
- •Diode (1N4148) - 1 pieceTạm thời
- •330 Ohm Resistor - 1 pieceNOK 24.00
- •Jumper Wires - 6 piecessNOK 39.20
Công cụ yêu cầu
- Computer with Arduino IDE
CC0 Phạm vi công cộng
Bản thiết kế này được phát hành theo CC0. Bạn tự do sao chép, sửa đổi, phân phối và sử dụng cho bất kỳ mục đích nào mà không cần xin phép.
Hỗ trợ nhà sáng tạo bằng cách mua sản phẩm qua bản thiết kế, nơi họ nhận Hoa hồng nhà sáng tạo do nhà bán hàng đặt, hoặc tạo phiên bản mới và kết nối trong bản thiết kế riêng để chia sẻ doanh thu.