Почему мои двигатели, подключенные к Arduino MEGA, не работают?
Я проверил свой код и загрузил его на плату, и все прошло успешно.
Информация: - Использование платы Arduino Mega 2560 с Adafruit V1 - 3 двигателя постоянного тока 12 вольт - на компьютере HP
Вот мой код:
#include <AFMotor.h>
AF_DCMotor motor(1, MOTOR12_8KHZ);
AF_DCMotor motor2(2, MOTOR12_8KHZ);
AF_DCMotor motor3(2, MOTOR12_1KHZ);
void setup() {
Serial.begin(9600);
Serial.println("Motor Test!");
motor.setSpeed(20); //установить скорость двигателя
motor2.setSpeed(20); //установить скорость двигателя
motor3.setSpeed(25); //установить скорость двигателя
}
void loop() {
Serial.print("tick");
motor.run(FORWARD);
delay(2000);
Serial.print("tock");
motor.run(RELEASE);
delay(5000);
Serial.print("tack"); //начинается первая песня
motor.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor.run(RELEASE);
delay(14000);
Serial.print("tack");
motor.run(BACKWARD);
delay(2000);
Serial.print("tock"); // первая песня заканчивается
motor.run(RELEASE);
delay(13000);
Serial.print("tick");
motor.run(FORWARD);
delay(2000);
Serial.print("tock"); //начинается вторая песня
motor.run(RELEASE);
delay(24000);
Serial.print("tick");
motor.run(FORWARD);
delay(2000);
Serial.print("tock"); //вторая песня заканчивается
motor.run(RELEASE);
delay(17000);
Serial.print("tick");
motor.run(BACKWARD);
delay(2000);
Serial.print("tock"); //начинается третья песня
motor.run(RELEASE);
delay(23000);
Serial.print("tick");
motor.run(BACKWARD);
delay(2000);
Serial.print("tock"); // третья песня заканчивается
motor.run(RELEASE);
delay(21000);
Serial.print("tick");
motor.run(FORWARD);
delay(2000);
Serial.print("tock");
motor.run(RELEASE);
delay(5000);
Serial.print("tick");
motor.run(FORWARD);
delay(3000);
Serial.print("tack"); //начинается четвертая песня
motor.run(RELEASE);
delay(5000);
Serial.print("tack");
motor.run(BACKWARD);
delay(2000);
Serial.print("tock"); //четвертая песня заканчивается
motor.run(RELEASE);
delay(21000);
//машущий мотор
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(5000);
//Машущий мотор
Serial.print("tick"); //начинается первая песня
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(FORWARD);
delay(2000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(FORWARD);
delay(1000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock"); // первая песня заканчивается
motor2.run(RELEASE);
delay(14000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(5000);
Serial.print("tack"); // Начинается вторая песня
motor2.run(BACKWARD);
delay(2000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(FORWARD);
delay(2000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(FORWARD);
delay(2000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock"); //вторая песня заканчивается
motor2.run(RELEASE);
delay(15000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(5000);
Serial.print("tack"); // Начинается третья песня
motor2.run(BACKWARD);
delay(2000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(FORWARD);
delay(2000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(FORWARD);
delay(2000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tock"); // третья песня заканчивается
motor2.run(RELEASE);
delay(14000);
Serial.print("tick"); //начинается четвертая песня
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(FORWARD);
delay(2000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock");
motor2.run(FORWARD);
delay(1000);
Serial.print("tick");
motor2.run(RELEASE);
delay(1000);
Serial.print("tick");
motor2.run(FORWARD);
delay(2000);
Serial.print("tack");
motor2.run(BACKWARD);
delay(2000);
Serial.print("tock"); //четвертая песня заканчивается
motor2.run(RELEASE);
delay(7000);
//танцующий мотор
Serial.print("tock"); //начинается первая песня
motor3.run(RELEASE);
delay(11000);
Serial.print("tick");
motor3.run(FORWARD);
delay(22000);
Serial.print("tock"); // первая песня останавливается // вторая песня начинается
motor3.run(RELEASE);
delay(16000);
Serial.print("tick"); //Вторая песня останавливается
motor3.run(FORWARD);
delay(28000);
Serial.print("tock"); // Начинается третья песня
motor3.run(RELEASE);
delay(15000);
Serial.print("tick"); //Третья песня останавливается
motor3.run(FORWARD);
delay(33000);
Serial.print("tock"); //начинается четвертая песня
motor3.run(RELEASE);
delay(16000);
Serial.print("tick");
motor3.run(FORWARD);
delay(5000);
Serial.print("tock");
motor3.run(RELEASE);
delay(1000);
Serial.print("tick"); //четвертая песня заканчивается
motor3.run(FORWARD);
delay(16000);
Serial.print("tock");
motor3.run(RELEASE);
delay(5000);
}
@Tommy, 👍0
Обсуждение1 ответ
Поскольку вы не предоставили подробностей, я предполагаю следующее:
- Вы питаете MEGA через USB или внешний источник питания 5-12 В
- двигатели питаются от дополнительного внешнего источника питания 12 В с достаточной силой тока.
- Все кабели проверены и исправны
Похоже на эту схему (без блока питания 12 В, подключенного к моторному щиту)
К вашему коду:
Избавьтесь от delay() – они блокируют обработку, и вот что произойдет:
motor.run(FORWARD); // => Вы даете команду через lib delay(2000); // Вы останавливаете обработку, поэтому двигатель не работает
поэтому у вас есть два варианта, для обоих требуется определение переменной timeStamp
- работа с (блокирующими) циклами while
- или создание конечного автомата (подробнее см. здесь, в SO)
Поэтому для простоты я буду использовать первый подход
// Скопируйте эту переменную перед настройкой
unsigned long timeStamp = 0;
// используем полную настройку
void setup(){...}
// Измените ваши функции цикла, как первые три преобразованные строки
void loop(){
timeStamp = millis();
Serial.print("tick");
while(millis()-timeStamp < 2000){
motor.run(FORWARD);
}
timeStamp = millis(); // сбрасывает время на текущее
Serial.print("tock");
while(millis()-timeStamp < 5000){
motor.run(RELEASE);
}
timeStamp = millis(); // сбрасывает время на текущее
Serial.print("tack"); //начинается первая песня
while(millis()-timeStamp < 2000){
motor.run(BACKWARD);
}
// .... И ТАК ДАЛЕЕ .....
}
Имейте в виду, что время блокируется, но для последовательной обработки это нормально.
Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат](https://chat.stackexchange.com/rooms/106646/discussion-on-answer-by-codebreaker007-why-are-my-motors-attached-to-an-arduino) ., @VE7JRO
Дешифровщик, ты более терпелив, чем я., @Duncan C
- Как заставить двигатели постоянного тока работать одновременно?
- Adafruit Motor Shield v1 Нужна помощь. Запуск одновременно трех двигателей постоянного тока?
- Проблемы с запуском моих 12-вольтовых двигателей постоянного тока на моем Mega 2560 Arduino
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Почему Adafruit motor shield не крутит моторы?
- Как управлять 4 двигателями постоянного тока с помощью Arduino?
Надеюсь, вы не пытаетесь управлять двигателями напрямую с выходных контактов..., @Rohan