2016-07-16 3 views
0

Я только начал изучать Arduino. Я подумал о том, чтобы поработать с Роботом, на котором я хочу получить некоторую автономию. Я застрял, пытаясь понять управление двигателем для двигателя постоянного тока. Я попытался найти ресурсы, но не могу найти тот, который адекватно объясняет мою проблему. Я не могу понять (будучи подражателем compi), как или что я делаю неправильно, написав код для двигателя.Освещение контроллера контроллера Arduino Uno

Мой код только для запуска двигателей для теста:

// MotorA 
int dir1PinA = 7; 
int dir2PinA = 5; 
int speedPinA = 6; 

//motor B 

int dir1PinB = 4; 
int dir2PinB = 2; 
int speedPinB = 3; 


void setup() { 
    //Serial.begin(9600); 
    pinMode (dir1PinA, OUTPUT); 
    pinMode (dir2PinA, OUTPUT); 
    pinMode (speedPinA,OUTPUT); 
    pinMode (dir1PinB, OUTPUT); 
    pinMode (dir2PinB, OUTPUT); 
    pinMode(speedPinB, OUTPUT); 

    // put your setup code here, to run once: 

} 

void loop() { 
    analogWrite(speedPinA, 500); 
    analogWrite(speedPinB, 500); 
    digitalWrite (dir1PinA, LOW); 
    digitalWrite (dir2PinA, HIGH); 
    digitalWrite (dir1PinB,HIGH); 
    digitalWrite (dir2PinB, LOW); 

    // put your main code here, to run repeatedly: 

} 

Я просто пытаюсь запустить двигатель при определенной скорости без толку. Я нашел образец кода, который использует тот же метод для управления двигателем, но имеет только дополнительный цикл и переменнуюspeed.

Тест код, который работает в:

//Motor A 
int dir1PinA = 7; 
int dir2PinA = 5; 
int speedPinA = 6; 

//motor B 
int dir1PinB = 4; 
int dir2PinB = 2; 
int speedPinB = 3; 

unsigned long time; 
int speed; 
int dir; 

void setup() 
{ 
pinMode (dir1PinA, OUTPUT); 
pinMode (dir2PinA, OUTPUT); 
pinMode (speedPinA, OUTPUT); 
pinMode (dir1PinB, OUTPUT); 
pinMode (dir2PinB, OUTPUT); 
pinMode (speedPinB, OUTPUT); 
time = millis(); 
speed = 0; 
dir = 1; 
} 

void loop() 
{ 
analogWrite (speedPinA, speed); 
analogWrite (speedPinB, 555 - speed); 

// set direction 
if (1 == dir) 
{ 
digitalWrite (dir1PinA , LOW); 
digitalWrite (dir2PinA, HIGH); 
digitalWrite (dir1PinB, HIGH); 
digitalWrite (dir2PinB, LOW); 
} 
else 
{ 
digitalWrite (dir1PinA, HIGH); 
digitalWrite (dir2PinA, LOW); 
digitalWrite (dir1PinB, LOW); 
digitalWrite (dir2PinB, HIGH); 
} 

if (millis() - time> 5000) 
{ 
time = millis(); 
speed += 20; 
if (speed> 555) {speed = 0;} 

if (1 == dir) 
{dir = 0;} 
else 
{dir = 1;} 
} 
} 

Теперь я понимаю, что есть петли и дополнительные переменные, но теоретически они не должны быть обязаны просто запустить двигатель при определенной скорости. Мой вопрос в том, что Что мне не хватает в верхнем эскизе, который находится во втором, но абсолютно критичен для работы двигателя?

Я хочу извиниться заранее, если это момент noob, но я пробовал и не могу найти логический LOL.

+1

Это не C++ код. Почему у него есть тег C++? Теги здесь имеют конкретное значение, и нецелесообразно просто добавлять их, потому что у них знакомые имена или вы думаете, что они могут привлечь внимание. И то, что отсутствует, четко указано в комментариях в первом коде. Обратите внимание, в частности, на тот, который многократно упоминает *. –

ответ

0

В «рабочем» Arduino код ( C++, да это составитель C++ компилятор) один из ваших обоих двигателей (B) начинается сразу же, а другой 5 секунд после сброса (или даже позже)? И сразу же началось изменение направления двигателя через 5 секунд?

Else, попробуйте небольшие модификации рабочего образца, к вашему упрощению, чтобы получить больше понимания.
E.g. сначала удалите параметр «dir» и «else»

0

Хорошо, сначала я отлажу ваш код, я сделаю некоторые предположения о вашем оборудовании, так как вы не опубликовали никаких фотографий или схем, в конце концов я обеспечу работу решение.

Ваш код:

Итак, мое первое предположение, что двигатель имеет 3 булавки, потому что вы переключая два между высоким и низким, по-видимому, чтобы обратным током, а затем один, чтобы установить скорость.

Как я уже догадываюсь, для того, чтобы получить двигатель, вы должны перевернуть направление движения. Установка этих контактов высокой и низкой фактически не приведет к обратному течению. Кроме того, у Arduino действительно нет достаточного выходного тока для управления двигателем постоянного тока. Вероятно, вы можете медленно запустить его. Если вы хотите сделать больше, вам понадобится внешний источник питания.

Привод электродвигатель постоянного тока в одном направлении:

Это, вероятно, самый простой сделать. Вам просто нужен транзистор, диод и резистор.Here is a tutorial

Drive до четырех двигателей постоянного тока в обоих направлениях

Если вы хотите водить двигатель постоянного тока в двух направлениях, то вам нужно изменить направление тока идет. Сначала это кажется сложным, пока вы не поймете, что они уже создали что-то для вас, чтобы сделать это точно. Это называется Motor Control. Это просто щит с несколькими H-мостами. Они довольно дешевы.

Мне нравится AdaFruit's. У меня есть пара, и я создал робота с ним не так давно.

Tutorial on how to use the Adafruit MotorShield