How this came about:
I recently was working on an instructable about charlieplexing with an arduino. And I was wondering if the same principle would work with motors to some extent. So I came up with the idea that if you used a motor instead of an led you could have 2-way control of it & if you used 2 PWM (Pulse Width Modulation) ports you could have 2-way variable speed control for a motor with no external hardware!! So I decided to post my findings. Have fun! If you have any questions Please ask them.
Note: This is not the safest way to control a motor. Each I/O pin can only handle 40 mA of current. I would recommend using a H-Bridge as pointed out by: Bongmaster & Frollard.
I am not responsible for any thing bad that happens to you or to your arduino!
Step 1: The stuff you need:
- Small DC motor
- Wire for motor
- Computer with Arduino IDE installed
- A-B USB cord
Step 2: Connecting the motor
- Connect one wire from the motor to pin 5 on you arduino
- Connect the other wire from your motor to pin 6 on your arduino
The hardware setup for this is pretty simple.
Step 3: Coding the Arduino
1) Download the source code from below
2) Open the file in the Arduino IDE
3) Press the "Upload to I/O Board" button
4) Once the program is uploaded it will start running
I tried to add a good amount of comments to the code, but if you have any questions, please ask them.
Step 4: How this works & more Ideas
When you make one pin HIGH & another LOW, the pin that is HIGH has a positive voltage & the pin that is LOW works like a ground(-).
Note: The rotation direction maybe different than below.
|Pin 5:||Pin 6:||Rotates:|
|PWM: 127||LOW||CCW 1/2 Speed|
CCW = Counter Clockwise
CW = Clockwise
Add a second motor. Sorry I don't have any code for this, But there is a schematic posted below.