Controlling a Motor an NPN Transistor on the Arduino 101




This is the tenth module in the series of lessons about applications of the Arduino 101, and will focus on the use of DC motors. DC motors are very common in the realm of mobile robotics. Most robots that require some sort of motion, usually for actuating wheels use DC motors since they are relatively cheap and easy to code. This project focus on making the simplest circuit to control a DC motor without a motor driver shield or H-bridge IC, but simply with an NPN transistor

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Tools and Materials

  • Arduino 101 or Arduino Uno
  • Breadboard
  • NPN Transistor
  • 100Ω Resistor
  • DC motor
  • 1N4148 Diode
  • Jumper Wires

Step 2: Circuitry

Connecting the Arduinopower to the breadboard

  • Connect the 3.3V pin from the Arduino to the red power rail of the breadboard using a red jumper wire.
  • Connect the ground pin from the Arduino to the black power rail of the breadboard using a black jumper wire.
  • Connect the 5V pin from the Arduino to an unconnected hole in the breadboard with an orange jumper wire. This will be used to power the DC motor.

Wiring the transistor

  • Connect the middle pin to a 100Ω resistor and insures to pin 9 on the Arduino.
  • Connect one of the other pins to the ground rail on the breadboard with a black jumper wire.
  • The remaining pin of the transistor will be connected to the motor ground with a brown jumper wire.

Wiring the the motor.

  • Connect one of the motor wires to the 5V pin you connected with the orange jumper wire previously. Note that when connecting the motors, the order of the wire connection does not matter, it simple means that the motor will turn the opposite direction.
  • Connect the other motor wire to the outer leg of the transistor not connected to the ground power rail using a brown jumper wire.
  • Connect the diode between the two motor wires with the negative pin marked by a black line on the diode connected to the 5V pin with the orange wire.

Step 3: Code

// constant pin for the transistor connected to the motor
const int motorPin = 9;

void setup() { //set motorPin as OUTPUT pinMode(motorPin, OUTPUT); }

void loop() { // milliseconds to turn the motor on int onTime = 3000; // milliseconds to turn the motor off int offTime = 3000;

// turn the motor on (full speed) digitalWrite(motorPin, HIGH); // delay for onTime milliseconds delay(onTime); // turn the motor off digitalWrite(motorPin, LOW); // delay for offTime milliseconds delay(offTime); }

Step 4: Demo

The DC motor will spin in one direction and stop for 3 seconds, then spin again in full speed. You can also change the speed by using analogWrite (motorPin, motorSpeed);

Makerspace Contest 2017

Participated in the
Makerspace Contest 2017

Be the First to Share


    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    3 Discussions


    2 years ago

    A traditional schematic representation would also be advisable to help visualize theory of operation, fritzing images are a different type of symbolic representation that may be misinterpreted, and a textural accompaniment too is subject to conjecture; a schematic will always be the governing document.

    i.e. ...Connect one of the other pins (of the transistor) to the ground rail on the breadboard with a black jumper wire.

    Which pin? It's important to know else component damage or circuit malfunction may occur.

    1 reply

    Reply 2 years ago

    Thanks! I'll keep that in mind. The next ones I'll post will have schematics.