Problem : servo and DC motor with mega 2560

Hi everybody,

I have just bought a ARDUINO MEGA 2560 Inventor Motor Servo Kit to learn how it works. However, the examples are explained (circuits and programming) for arduino uno. I can handle with the leds, but I can not run the DC motor and the servo. Should I modify something to work with 2560?
By the way, I have a toy dc motor and a toy servo (sg90). I am using USB connection for powering arduino and using +5V and GND pins for circuit, i.e. no external supply. When I do make the DC circuit, nothing happens. For the servo motor, when I make the circuit, it starts to rotate until it is 180 deg and stucks!

For example I can not run the tutorial below :frowning:

Sorry, my questions can be silly, but I am a newbie :slight_smile:

Thanks for your helps.

For digital pins 0-13 and analog pins 0-5 the Mega and UNO should be programmed the same. If your experiments are not working as described then either you have gotten the wiring wrong or the "Experimentation Guide" is wrong.

You can hook the DC motor between GND and +5v to make sure it works.

Thanks for the answer. When I plug the DC motor to 5v and GND, it works.
The circuit is given in P3 (dc motor without capasitor). When I make it, it does not spin :frowning:

THe code is;

int motorPin = 9; // define the pin the motor is connected to
// (if you use pin 9,10,11 or 3you can also control speed)

void setup()
{
pinMode(motorPin, OUTPUT);
}

void loop() // run over and over again
{
motorOnThenOff();
//motorOnThenOffWithSpeed();
//motorAcceleration();
}

void motorOnThenOff(){
int onTime = 2500; //the number of milliseconds for the motor to turn on for
int offTime = 1000; //the number of milliseconds for the motor to turn off for

digitalWrite(motorPin, HIGH); // turns the motor On
delay(onTime); // waits for onTime milliseconds
digitalWrite(motorPin, LOW); // turns the motor Off
delay(offTime); // waits for offTime milliseconds
}

void motorOnThenOffWithSpeed(){

int onSpeed = 200; // a number between 0 (stopped) and 255 (full speed)
int onTime = 2500; //the number of milliseconds for the motor to turn on for

int offSpeed = 50; // a number between 0 (stopped) and 255 (full speed)
int offTime = 1000; //the number of milliseconds for the motor to turn off for

analogWrite(motorPin, onSpeed); // turns the motor On
delay(onTime); // waits for onTime milliseconds
analogWrite(motorPin, offSpeed); // turns the motor Off
delay(offTime); // waits for offTime milliseconds
}

void motorAcceleration(){
int delayTime = 50; //milliseconds between each speed step

//Accelerates the motor
for(int i = 0; i < 256; i++){ //goes through each speed from 0 to 255
analogWrite(motorPin, i); //sets the new speed
delay(delayTime); // waits for delayTime milliseconds
}

//Decelerates the motor
for(int i = 255; i >= 0; i--){ //goes through each speed from 255 to 0
analogWrite(motorPin, i); //sets the new speed
delay(delayTime); // waits for delayTime milliseconds
}
}

The servo problem has been solved with MegaServo library. However, DC motor problem still goes on :frowning:

You can't power most motors directly from an output pin (if that is what you are tying to do), these pins can only supply ~40ma at most.

If the transistor is hooked up incorrectly or the diode is backward the circuit won't work.

Try to use the transistor to turn on the LED/resistor combination from the previous experiments. That will let you check the transistor. Then put the diode across the LED/resistor combination to be sure you have the diode the right way. If you ca get the transistor to switch the LED it should also work with the motor.