Arduino Robot 2WD помогите собрать с нуля
- Войдите на сайт для отправки комментариев
Втр, 01/03/2016 - 22:15
И так всем привет я новичек в этом деле помогите чем сможете.
Купил данный набор теперь не знаю как правильно собрать данную модель
Проси инструкцию у продавца
Вот тебе схема сборки платформы
Всю механику я собрал, платы накинул осталось подключить провода и запустить
Всю механику я собрал, платы накинул осталось подключить провода и запустить
Кто или что мешает?
Не знаю как правильно подключить провода и какой Скетч закачать на плату ардуино.
tes66,
я уверен в том, что Вы купили эту игрушку именно с целью собрать самостоятельно. Если бы это было не в кайф - купили бы готовую машинку и не парились бы, так же? Так и собирайте, ничего там сложного нет.
На платах (модулях) написаны их названия (их даже на катринке видно). По этим названиям гуглите и находите схемы включения - Вы же не думаете, что Вы первый, кто это собирает. Схем навалом - не найти невозможно.
Там же можете найти и скетчи, но это неинтересно. Весь смысл робота в том, чтобы его самому запрограммировать. Но, если не умеете, скетчи для каждого из Ваших модулей Вы легко найдёте (опять же названия модулей на них написаны). Пробуйте и не сдавайтесь и всё получится.
Недавно с детьми такой собирал. Там перемычек нехватает. Придётся заказывать или делать. Ссылка на скетч под такой же комплект - http://mysku.ru/blog/aliexpress/19132.html Компилировал под Arduino IDE 1.0.5
Сейчас буду разбиратся.
Кнопку я не подключал, забыл :-(, работает и без неё.
Кнопку я не подключал, забыл :-(, работает и без неё.
Я единственное не понял как определить в коде ПИНы подключения моторов через Arduino Sensor Shield V5.0
А они просто Ардуино перетащены, т.е. Сенсор шилд - просто разъёмы для датчиков, Жки иб.д. Можно обойтись и без неё. всё равно только Серво нормально подключается ( своим разъёмом), а всё остальное отдельными проводками.
Правильно ли написан код для моторов ???
как правильно указать в коде подключение по моим параметрам в схеме на плате ?
Нашел еще пару ошибок которые совершил при сборке платы, теперь поменял код на этот серво привод работает с сонаром отлично Но МОТОРЫ не едут в чем причина Помогите
При проверке выдает ошибку warning: case label value exceeds maximum value for type [enabled by default]
При проверке выдает ошибку warning: case label value exceeds maximum value for type [enabled by default]
А полностью сообщение привести религия не позволяет? Там номер строки был, а так мне приглось искать где это у Вас. Оно мне надо?
В одинарных кавычках пишется символ. Одиночный символ, а не три символа, как у Вас. Эта ошибка разбросана по всей программе, во могих местах.
В строке 149 с имеет тип char (т.е. как раз "одиночный символ"), а Вы рытаетесь сравнивать её со странноватой конструкцией 'stp'.
А питание на драйвер двигателей подвели? По фото видно что отсутствует.
Спасибо за ответ все поправил
Ну и остальной код естественно тоже подправил теперь не на что не ругается.
Подключение питания от платы Arduino Shield 5.0 к плате драйвера двигателей
Правильно ли я подключил питание ???
Может лучше от батарей на прямую ?
По сути индикатор питания 5v на плате драйвера горит, сигналы подаются, но они сами двигатели пищат и не более того.
Имелось в виду от батарей на драйвер двигателей. Когда собирал свой, добавил к отсеку на 4 батарейки ещё один на 2 шт. Итого 9в. Помнится мне что стабилизатор 7805 для нормальной работы требует не менее 7,5в. (в корпусе ТО-220, в смд может меньше - лень было искать и смотреть даташит)
Попробуйте поднять напряжение питания, или посмотреть строки 133-141, там как раз ограничение параметров выхода на движки
Ура заработало !!! Сейчас взял подпаял еще 2 провода от батарей и подключил их напрямую к драйверу двигателей и вуаля движки закрутились !
Добавлю скеч едет он на нем корявенько конечно даже не знаю как его заставить ехать более точно
При этом скече он постоянно сканирует сонаром и еле едет, подозрение падает на сильную чуствительность самого сонара который не дает нормально ехать роботу
Подскажите что не так я написал в коде ?
https://github.com/tes66/Arduino-Uno/blob/master/robot_2wd_servo_sonar.ino
Посмотрел скетч, мелкие замечания:
1. Управление драйвером моторов: первым делом ВЫКЛЮЧАЕМ не нужный пин, делаем задержку в 2мкс. и только потом включаем тот, куда хотим вращать моторы. Этот порядок позволяет исключить сквозные токи через драйвер и улучшить время жизни батареек. Заодно драйвер будет меньше греться.
2. Строки 140,141: почему установка идет в 0, а не в MINPWM..?
3. MAXPWM в районе 150 это 150/255 от реальной максимальной скорости моторов. Поиграйтесь с этим параметром.
4. Аналогично со значениями минимальной скорости. Моторы "заводятся" начиная с некоторого значения ШИМ и это далеко не 0. В среднем для хорошего мотора и редуктора с небольшими потерями это 10-20%, то есть в единицах 8-и битного ШИМ это примерно "от 50", да и сильно зависит от "материала трассы". У вас скорость выставляется в 127 .. это запросто может оказаться "ни о чем". Сделайте простой тестовый скетч: установка обоих моторов в некий ШИМ и проезд ровно 1 сек. и замерьте с какого значения ШИМ ваша конкретная тележка начинает движение хоть с какой-то скоростью, и сколько на каком значении ШИМ она проезжает за 1 сек. Такие "пробные" скетчи проще всего загонять в setup при пустом loop - однократное исполнение - гарантировано. У нас такой блок прошит прямо в setup() и просто комментарится, когда не нужен. При разной состоянии батареек - могут быть очень разные значения констант минимальной и максимальной скорости.
5. Ваш rotate() делает не "поворот", а "разворот на месте" за счет вращения колес в разные стороны. Попробуйте поворот на одном колесе или радийсные повороты за счет разной скорости колес в ОДНУ сторону... откроете для себя много интересного.
6. При обнаружении препятствия ваша тележка делает попытку крутить моторы "взад" 0.2сек .. при ваших параметрах, она реально должна успеть не только встать колом, но ещё и дернуться назад .. последующий разгон до небольшой скорости .. вот и вся причина. Время торможения - сильно зависит от материала трассы и текущей скорости движения. И такие АБС методы полезны на скользких трассах и реальных скоростях движения от 30см/сек при общем весе тележки в 500-600гр. По крайней мере по нашему опыту. В общем, это место - исключительно экспериментально.
Спасибо за исчерпывающий ответ, буду старатся исправить свой код.
Здравствуйте, tes66, внимательно следил за Вашими мытарствами, ожидая своих....вот и пришло время, посему прошу - опубликуйте ссылку на готовый скетч, пожалуйста...
Пост №24 - практически готовый скетч. На самом деле он у каждого свой, там нет ничего сложного или сверххитрого. Пробуйте самостоятельно по очереди: управление мотором, прием данных с датчиков, постепенно соединяя все в одно целое .. получите массу удовольствия, чем залить чужое и с удивлением создавать очередные посты тут "почему оно не работает".
Здравствуйте Arhat109-2, дело в том, что с этим скетчем я знаком задолго до открытия данной темы в форуме. Мои дети (я в селе веду кружок на разные технические темы) собрали ардуино - машинку как данная, только 4 wd, и где то с октября именно с данным скетчем экспериментировали, я особенно не вникал, т.к. в основном работаем с NXT. Но решили попробовать заявить ее на краевую олимпиаду по робототехнике в номинации Лабиринт http://robot.uni-altai.ru/meropriyatiya/olimpiady/ochnye-olimpiady/vi-olimpiada/zadaniya-lego-mindstorms/zadanie-2 и тут появились проблемы с использованием данного скетча, т.к. другие из сети не годились, а самим написать еще пока невозможно. Это замечательно, что Вы откликнулись, и, думаю, что сможете нам как то помочь, может быть, у Вас уже есть готовая программа. Мы не ставим своей целью где то победить, просто хотели показать возможности ардуино и немного ее порекламировать, т.к. в радиусе 300 км этим в школах практически никто не занимается. Если у Вас есть возможность нам помочь, то сообщаю дополнительно о узлах конструкции: тележка 4 wd, драйвер моторов L298N HEX (красная плата), ультразвуковой датчик HC-SR04, arduino UNO, хотелось бы продемонстрировать плавное движение (мне дети в ютубе показывали) тележки в лабиринте или просто прохождение лабиринта. Спасибо, что выслушали меня... /Владимир/
А вас разве берут с Ардуино на лего соревнования? Нас - нет, несмотря на то, что наш проект "Ардуино как лего" - сама плата и все датчики оформлены в лего-стандарте и позволяют использовать обычные лего детали для сборки конструкций. Тут есть проект с фотками, периодически обновляюсь. Да, и для 4wd надо 2 драйвера .. или у вас вариант 2/4wd (2 мотора на 4 колеса по одному на сторону)?
В ваш комплект крайне желательно добавить серводвигатель (пойдет и SG90) и посадить на него датчик расстояний. Из нашей лабиринтовой тележки остались только куски к моей библиотеке arhat.h .. осилите? :) Могу выложить код, который автономно и аппаратно крутит серву с датчиком и замеряет расстояния в массив, делая усреднения по 5 замеров. Можете поиграться, оно сильно облегчает работу с датчиком и расстояниями.
Код, да и библиотека заточена под Мегу, но может компилироваться и под УНО с соответствующими ограничениями (по аппаратной части: у Уны только 1 16-и битный таймер = только 2 аппаратных серводвигателя).
спасибо за ответ. Вот выдержка из положения наших соревнований:
Могу предложить такую раскладку пинов:
5,6 - ШИМ каналы 0-го таймера под сигналы EN ваших драйверов моторов для управления их скоростью. Занимаем один из входов компараторов и внешний счетный вход таймера 1, что в дальнейшем помешает подключить датчик цвета типа TSC3200 в режиме подсчета частоты, но зато можно будет использовать ICP1 для подсчета длины периода, что даже в среднем ускорит работу с ним. Использовать ШИМ от 2-го таймера, имхо хуже в перспективе, поскольку там сидит SPI интерфейс, а он может пригодиться, например для чтения с SD-карты, тех же программ или сохранения чего-либо "на лету" (дамп состояний для посметрной диагностики) .. так, "на будущее", раз у вас кружок;
9 - под управление серводвигателем радара. Он по сути один и остается, если резервировать 10..13 ноги под SPI. Для аппаратного управления серводвигателями удобнее пользовать 16-битный таймер, но можно приспособить и 2-й таймер тоже, с потерей точности. У меня под сервы использованы 16-битные, поэтому оставим 9 ногу;
Если резервировать остальное из таких же соображений совместимости датчиков и моторов, то под управляющие сигналы скорее всего придется отдать аналоговые входы 0..3. Остальное как-то жалко..
Ну и под радар можно использовать 4 и 7 пин, к примеру. Тут важно посмотреть какие датчики вы планируете далее использовать и в каком комплекте с моторами тележки для построения наиболее разнообразного количетсва вариантов .. кружок всеж-таки.
Вернусь, выложу скетч, точнее то что нашел от него с распиновкой под этот вариант.
Извиняюсь, с кодом будет задержка до выходных .. не добраться. :)
хорошо, не беспокойтесь
Вырезал из своего кода блок взаимодействия конечных автоматов для узв. датчика и серводвигателя и поменял номера пинов для раскладки выше. Ловите:
Комментарии не подправил .. остались от моего варианта с 4 моторами и энкодерами.
Здравствуйте, после ознакомления с Вашим кодом получил бесконечную зависть к автору и осознание своей полной "безграмотности"...Вы молодец...я много видел кодов для такой машинки, но этот...(почти как в фильме "Классик") и если он еще у нас заработает...
с сервой и радаром, как с описанием, так и с подключением более-менее понятно
Пожалуйста, если можно, объясните строки с моторами (маршевые моторы - 6 строк) - мне не совсем понятно как связаны ардуино UNO с драйвером моторов:
драйвер ардуино UNO
ENA-----------? пин
IN1-
IN2-
IN3-
IN4-
ENB-
Пины моторов прописаны в строках с 6 по 15:
IN1 = m0f (motor0, forward) = 14 пин, он же Analog0 UNO
IN2 = m0b (motor0, back) = 15 пин, он же Analog1 UNO
ENA = m0s (motor0, speed) = 5 пин, он же PWM5
IN3 = m1f = 16 пин (Analog2), IN4 = m1b = 17 пин, он же Analog3, ENB = m1s = 6 пин, он же PWM6
В самом скетче нет управления моторами, только взаимодействие между серводвигателем и узв. датчиком в виде конечных автоматов:
В setup() серводвигатель запускается в крайнее левое положение (#321..324) и выставляется ему макс. пауза для "доезда".
По завершению движения сервы его автомат (#352) вызовет servoEnd(), которая отключает себя и разрешает КА датчика начать замер (#150).
Логика автомата датчика ( обрабатывается отдельно, в #354 каждый вызов loop) тупо проставит запуск отправки импульса для начала замера (функция startTrig4, #270), который излучает импульс и настраивает прерывание на подсчет длительности отклика. Само измерение производится в процедуре обработки прерывания и тут не видно (pcint.h, pcint.c библиотеки, там же есть подсчет энкодеров таким же способом, тут не используются). По завершению замера из прерывания будет изменен статус автомата датчика, что и будет обнаружено в его логике работы dohcsr04() строки #263..#288. В случае ошибки замера - производится перезапуск датчика через смену состояния автомата. В случае удачного замера - вызывается saveDistance() в #274, которая ведет учет замеров, занимается их усреднением и складывает результат в текущую ячейку массива расстояний по направлениям allDistances[] и переводит текущее направление, смотря куда вертится серводвигатель #251,252.
По завершению замеров в текущем направлении, усреднении результата и складыванию его в текущую ячейку массива расстояний, датчик запускает серводвигатель на поворот #254 и остается в режиме ожидания. Автомат серводвигателя (#352) вызовет srvSonic_next(), которая пытается установить новое направление для серводвигателя через вызов srvServo_move(). Последняя есть не что иное, как проверка выхода за допустимые значения и собственно установка значения PWM на ноге сервы. Функция srcSonic_next() в общем-то тупо переключает направления и указывает что следующим шагом автомата серводвигателя надо вызвать srv_end() - "серва доехала", которая останавливает серву и запускает замеры .. и так по кругу. :)
Чтобы далее управлять моторами можно в loop дописать код, анализирующий расстояния и соответственно принимающий решения какой мотор куда включать и куда смотреть далее. Если не вмешиваться в работу пары серва-датчик, то они так и будут замерять расстояния, вращяясь туда-сюда обратно.
Наш код я отсюда повырезал, ибо он во-первых, писан ребенком по большей части, а во вторых жутко искалечен последними переделками и недоработками и, разбираться что в нем верно а что не так - я не стал. У меня он даже не компилировался. Что-то там последний раз он недоделал похоже. Ну и в третьих, он содержал в себе достаточно много ерунды в виде "таблицы Брадиса" на заданные основные углы пересчетов направлений при пересчете в декартовы координаты "на лету" и поиску какой угол лабиринта мы сейчас объезжаем .. в общем: не полезно и не интересно ни разу и точно не поможет, а только больше запутает.