DC motor with transistor driver in Arduino - Time & Space Complexity
We want to understand how the time the program takes changes as we control a DC motor using a transistor driver in Arduino code.
Specifically, we ask: how does the program's running time grow when we change the input size or control steps?
Analyze the time complexity of the following code snippet.
int motorPin = 9;
void setup() {
pinMode(motorPin, OUTPUT);
}
void loop() {
analogWrite(motorPin, 255); // turn motor on full speed
delay(1000); // run for 1 second
analogWrite(motorPin, 0); // turn motor off
delay(1000); // wait for 1 second
}
This code turns a DC motor on and off repeatedly using a transistor driver connected to pin 9.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The
loop()function runs repeatedly forever. - How many times: It repeats endlessly, turning the motor on and off each cycle.
Here, the program runs the same steps over and over, regardless of input size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Same fixed steps repeated 10 times |
| 100 | Same fixed steps repeated 100 times |
| 1000 | Same fixed steps repeated 1000 times |
Pattern observation: The time per cycle stays the same; total time grows linearly with how many cycles run.
Time Complexity: O(1)
This means each cycle of turning the motor on and off takes a fixed amount of time, no matter what.
[X] Wrong: "The time to run the motor depends on the input size or speed value."
[OK] Correct: The code runs fixed delay times and fixed commands each cycle, so time per cycle does not change with input size.
Understanding how loops and delays affect program timing helps you explain how embedded systems control hardware efficiently.
"What if we replaced the fixed delay with a loop that runs n times? How would the time complexity change?"
Practice
Solution
Step 1: Understand transistor function
A transistor acts like a switch or amplifier in circuits.Step 2: Apply to motor control
In Arduino motor control, the transistor switches the motor on/off safely without damaging the board.Final Answer:
To act as a switch that controls the motor safely -> Option AQuick Check:
Transistor = switch for motor control [OK]
- Confusing transistor with motor speed controller
- Thinking transistor powers the Arduino
- Assuming transistor measures anything
Solution
Step 1: Set pin as output for controlling transistor
To control a transistor, the Arduino pin must be OUTPUT.Step 2: Write HIGH to turn motor on
digitalWrite(9, HIGH) sends voltage to transistor base to switch motor on.Final Answer:
pinMode(9, OUTPUT); digitalWrite(9, HIGH); -> Option DQuick Check:
Output pin + HIGH = motor ON [OK]
- Setting pin as INPUT when controlling transistor
- Using digitalRead instead of digitalWrite
- Not setting pinMode before writing
int motorPin = 9;
void setup() {
pinMode(motorPin, OUTPUT);
}
void loop() {
analogWrite(motorPin, 128);
delay(2000);
analogWrite(motorPin, 0);
delay(2000);
}Solution
Step 1: Understand analogWrite value
analogWrite with 128 sets PWM to about 50% duty cycle, so motor runs at half speed.Step 2: Analyze timing in loop
Motor runs at half speed for 2 seconds, then analogWrite(0) stops motor for 2 seconds, repeating.Final Answer:
Motor runs at half speed for 2 seconds, then stops for 2 seconds repeatedly -> Option AQuick Check:
analogWrite(128) = half speed [OK]
- Thinking analogWrite(128) is full speed
- Confusing analogWrite with digitalWrite
- Ignoring delay timing effects
int motorPin = 9;
void setup() {
pinMode(motorPin, INPUT);
}
void loop() {
digitalWrite(motorPin, HIGH);
}Solution
Step 1: Check pinMode for transistor control
Pin controlling transistor must be OUTPUT, not INPUT.Step 2: Identify conflict with digitalWrite
digitalWrite on an INPUT pin causes undefined behavior or no effect.Final Answer:
Pin is set as INPUT but digitalWrite is used -> Option BQuick Check:
OUTPUT needed for digitalWrite [OK]
- Using INPUT mode with digitalWrite
- Confusing digitalWrite with digitalRead
- Ignoring pinMode setup
Solution
Step 1: Understand motor voltage spikes
When motor stops suddenly, it can create voltage spikes that damage components.Step 2: Identify protection method
A diode placed across motor terminals (flyback diode) safely redirects spikes, protecting transistor and Arduino.Final Answer:
A diode connected across the motor terminals -> Option CQuick Check:
Flyback diode protects circuit from spikes [OK]
- Skipping diode and risking transistor damage
- Using resistor instead of diode for spike protection
- Confusing capacitor or LED as spike protection
Ready to prove it?
Pass the test and this pattern moves unknown
