Управление моторами Arduino UNO
- Войдите на сайт для отправки комментариев
Ср, 20/01/2016 - 10:20
Доброго всем дня. Ардуиной занимаюсь недавно и дошёл до того, чтобы запрограммировать своего первого робота. Робот шагающий с двумя простыми моторами. Скетч взял из урока по ардуине, немного переделал его (недоделал пока). Но столкнулся с такой проблемой. Для движения вперёд-назад нужно, чтобы моторы работали одновременно. Покурив форум, я узнал, что ардуино не поддерживает многозадачность. И для того, чтобы создать "непрерывность" движения, нужно последовательно подавать сигналы на оба мотора с коротким промежутком, при этом не используя delay. Вот как мне это сделать? Или всё таки можно как-то одновременно моторы запускать? Вот скетч, который я пилю. Он рабочий, но недоделаный. Пока только один мотор старт-стоп. // 16718055 и 16726215 - коды кнопок 2 и 5 #include <IRremote.h> int motor_1 = 4; // определяем порт для 1-го мотроа int motor_2 = 5; // определяем порт для 2-го мотора int RECV_PIN = 11; // назначаем 11-ый вывод для подключения фотоприемника IRrecv irrecv(RECV_PIN); decode_results results; void setup() { pinMode(motor_1, OUTPUT); //определяем выводы на моторы как "выходы" pinMode(motor_2, OUTPUT); //определяем выводы на моторы как "выходы" Serial.begin(9600); // устанавливает скорость обмена данными с компьютером irrecv.enableIRIn(); // функция начала приема } void loop() { if (irrecv.decode(&results)) { // если сигнал принят Serial.println(results.value); // выводим его на экран компьютера if (results.value == 16718055) // если принятый код равен одному из запомненных нами { digitalWrite(motor_1,HIGH); // то включаем первый мотор } if (results.value == 16726215) // если принятый код равен второму из запомненных нами { digitalWrite(motor_1,LOW); // то выключаем первый мотор } irrecv.resume(); // ждем прием следующего сигнала } }
Что мешает включать оба мотора?
digitalWrite(motor_1,HIGH);
digitalWrite(motor_2,HIGH);
Пробывал, не работает.
Пробывал, не работает.
Как подключены моторы? Схему подключения в студию. Только полную.
Моторы подключены через драйвер моторов 800мА на основе двух чипов L9110S, который идёт в комплекте Артуино старт, драйвер запитан отдельно от 3В, через пины VCC и GND, управляющие пины заведены на ардуину пины 4 и 5. Ну и датчик света к 11 пину на ардуине и VCC 5В и GND на ардуине
при проблемах я упрощаю схему для проверкие её работоспособности, запитайте моторы и проверьте их, может дохлый один
следующий вариант
может нога чудит... и я не очень понял про VCC, у Вас 2 источника питания? +3 на моторы и +5 на ардуну, про GND(соединены же?) думаю не стоит спрашивать, т.к. один вроде как работает, а вот разница питания меня смущает, может драйверу не понравилось +5 с МК?
Для одного мотора ваш драйвер должен получить два сигнала
Впрочем один можно посадить на + или - , но тогда не будет реверса.
Второй вход драйвера куда-то подключили?
Или это уже сделано на вашей плате?
https://brainy-bits.com/tutorials/l9110s/
Тут понятнее и проще нарисовано:
https://www.circuitlab.com/circuit/k5289t/conexion-de-prueba-l9110/
Поиграйтесь кнопочками ( пинцетом)
Кстати, если ваш "моторчик" действительно трёхвольтовый, такие обычно большой ток употребляют....
Моторы подключены через драйвер моторов 800мА на основе двух чипов L9110S, который идёт в комплекте Артуино старт, драйвер запитан отдельно от 3В, через пины VCC и GND, управляющие пины заведены на ардуину пины 4 и 5. Ну и датчик света к 11 пину на ардуине и VCC 5В и GND на ардуине
Знаете в чём проблема всех новичков? Они не умеют читать.
Вот Вам ясно написали "схему в студию, причём полную". Вместо того, чтобы выложить схему, Вы написали что-то из чего многое осталось непонятным. И пошли вопросы: один источник или два? а может всё от ардуины? а соединены ли вместе Gnd? Видите, сколько вопросов? А всё потому, что Вы поленились выкладывать схему, как Вас попросили.
Я вот, не собираюсь угадывать сколько у Вас источников и соединены ли Gnd. Мне это не нужно. Вам, судя по лени выложить схему - тоже не особо нужно. Ну, и нафига тогда?
Если Вам нужна помощь, так не мешайте людям Вам её оказать.
Не получается выложить схему. Ардуино на данный момент запитано через USB. К ардуине подключён датчик света (пин 11) и питание к нему (5в и GND) тоже к ардуине. Оба мотора подключены к драйверу мотора и драйвер запитан от пары батареек ААА отдельно от ардуины. Драйвер мотора связан с ардуиной только сигнальными кабелями к пинам 4 и 5. Позже будут ещё 2 сигнальных кабеля от драйвера к ардуине (например пины 6 и 7). В мойм скетче после void loop описан сценарий для первого мотора на 4-м пине старт-стоп, он рабочий. Мне нужно, чтобы в идеале на 4 и 5 пине было одновременно HIGH или LOW, когда приходит код с ик-пульта. Не могу понять почему схема не выкладывается, на сервер кинул, ссылка сформировалась, жму ОК, нет эффекта, жму ОТМЕНА то же самое. Приходится перезаходить.
Судя из описания gnd не соединены. Начните с этого )
Драйвер мотора связан с ардуиной только сигнальными кабелями к пинам 4 и 5. Позже будут ещё 2 сигнальных кабеля от драйвера к ардуине (например пины 6 и 7).
Опять, впрочем как обычно, никто про "землю" даже и не вспоминает.....
Гы-гы на общей "земле" всё зажило как надо. Большое всем спасибо, пойду дальше скетч допиливать.
Вот, что у меня получилось. Робот управляется с ИК-пульта кнопками 2, 8 вперёд-назад, 4,6 влево-вправо, 5 стоп. Спасибо всем за помощь.