Радиоуправление на Ардуино.
- Войдите на сайт для отправки комментариев
Всем добрый день! Решил сделать радиоуправление (для машинки) на Arduino Pro Mini (Mega168). Принцип такой: передатчик (Pro Mini Mega168) передает 1 байт в котором первые 4 бита - напрвление движения и управление поворотами. В подробности не буду вдаваться - прикреплю скетчи передатчика и приемника - там все расписано. Схема управления в машинке простая:
2 аккумулятора 18650 - от них понижалка LM2596 на 5 вольт - все это питает Ардуинку + серву(повороты) + H-мост моторчика. От LM2596 идет еще понижалка 1117 на 3.3 вольта для питания радиомодуля nrf24l01+.
Схема работает отлично без каких-либо проблем. НО! Надо сделать радиоуправляемой другую машинку. И тут пришлось "изголяться". Машинка типа "Баги", внутреннего пространства почти нет, по этому пришлось вместо 2-х аккумуляторов 18650 ставить один аккумулятор cga103450 (плоский и меньше чем 18650) + повышалку MT3608 на 5 вольт для работы схемы. Еще дно изменение: вместо радиомодуля nrf24l01+ поставил китайскую копию SE8R01. Схема (щелкните для увеличения):
Фото схемы внутри машинки (ногами не пинайте, это пока тестовая сборка) :
На первом фото виднеется слева повышалка, потом идет серва, ардуина и радиомодуль. На втором фото в отсеке для батареек расположился H-мост и аккумулятор.
Суть проблемы в чем: при включении (если есть связь с передатчиком) ардуина в машинке мигает светодиодом (пин 13) в качестве индикатора что связь с передатчиком (управлением) есть и принимаются данные - это нормальный рабочий режим. При управлении Вправо-Влево управление идет без проблем, сервопривод поворачивает колеса, но если нажать Вперед или Назад то начинается что-то непонятное: ардуина в машинке перестает моргать светодиодом (он гаснет) и секунду-две никак не отвечает на управление, ни на Повороты ни Вперед-Назад. Через секунду - две ардуина развисает. Если при этом ничего на пульте не нажато то машинка может проехать сантиметров 10-15, остановиться, и опять моргать светодиодом и реагировать на повороты. Если же во время "развисания" ардуины передается команда Вперед-Назад то машинка 1 раз дернется и опять зависнет на 1-2 секунды.
Если отключить моторчик от H-моста то подобных зависаний нет, но если вместо моторчика поставить хоть какую-то нагрузку (светодиод) то история опять повторяется. Получается что вся беда в H-мосте (когда к нему хоть что-то подключено). Но почему - не понятно. Платку моста снял с машинки. Платка раньше работала без проблем. В чем может быть причина? Из-за чего такой глюк может быть?
Ссылка на архив со скетчами: http://forex4uplus.ru/SE8R01.rar
Мотор когда стартует, ток жрёт как конь, раз в 5 от номинала, а если с нагрузкой - как в машинке, то вообще труба. Диагноз -питание 5В у вас проседает, ардуино и перезапускается. Вариантов решения несколько
- раздельные повышайки на мотор и на ардуино
- изолировать ардуино по 5В, т.е. поставить диод и электролит потолще, если питание просядет то конденасатор поддержит ардуино на 1-3 секунды.
-повышайку помощнее, и конденсаторы потолще <до> и <после>
Попробую разделить питание через диод. Но прикол в том что "зависание" происходит даже если вместо мотора стоит обычный диод, который потребляет всего 15 мА и никакой просадки напряжения не вызывает. Вечером попробую. Может разделение питания на что-то повлияет.
мотор питается от повышающего преобразователя?
SE8R01 нормально работает? я так и не смог запустить почему то. у меня правда черные
Попробовал соединить все устройства и запитать от одного хорошего источника - сбоев небыло вообще. Значит вся беда в повышалке - она не справляется с нагрузкой. Заменить ее нечем :( В общем, решений проблемы несколько:
1) поставить отдельную повышалку для мотора (мне этот вариант не подходти)
2) сделать развязку по питанию для мотора и електроники. Мне этот вариант подходит более всего, но Как ее сделать? Пробовал питать ардуину через L-C фильтр, но толку почти нет.
3) заменить/переделать повышалку, так как она не справляется с такими нагрузками... Опять же: как повысить ПКД повышалки?
или так
Тоже неплохой вариант. К сожалению 2 батареи мне просто некуда вставить, а про диод паралельно матору я забыл!!! Попробую, может будет какой-то эффект!
В общем... после 1000 и 1 теста... выявил причину проблем - аккумулятор.
Если вместо cga103450 поставить банку 18650 - все "глюки" исчезают. Почему система не дружит с cga103450 - не понятно. Даже если полностью зарядить результат тот же. В то же время если поставить 18650 (даже если она на половину разряжена) то проблем не возникает. От cga103450 при попытке езды вперед-назад (включение мотора) ардуина перезагружается. Если использовать 18650 то ардуина не сбрасывается. Тестировал cga103450 - подключал мотор напрямую - батарея нормально может отдавать 1.5 Ампера...
В общем я в ступоре. Почему это происходит - не понятно. Никто не знает что это за "прикол" такой, и можно его победить?
Посмотрите осциллографом питание в момент включения мотора.
Увы, осциллографа нет. Только тестер.
Почесал я репу, плюнул, и решил разобрать один аккумулятор. Вот что было внутри:
Что это? Контроллер (защита)? Предохранитель? Эта штука все и портила, не спасали никакие диоды - конденсаторы - LC-фильтры. Подключил аккумулятор напрямую, и все заработало как часы! А столько вечеров потратил что бы найти проблему!
А огнетушитель дома есть? Тогда выкидывай защиту.
Можно попробовать отделить ардуину от Н моста оптронами, нужно проверить какой ток в портах ардуины на Н мост в момент исполнения команд.
Что это? Контроллер (защита)? Предохранитель? Эта штука все и портила, не спасали никакие диоды - конденсаторы - LC-фильтры. Подключил аккумулятор напрямую, и все заработало как часы! А столько вечеров потратил что бы найти проблему!
Это защита. Выкинуть ее, вместо нее купить защиту расчитанную на бОльшие токи. Ардуиной контролировать ее питание и при падении меньше 2.8 отрубать выключать моторы. Либо использовать модуль на tp4056 у которого есть выход на нагрузку.
Всем привет вопрос по радиоуправлению.
Начал писать скетч и все работает на релле . Но вот хочу управлять шимом по радиоканалу монитор порта показывает изменения значения при повороте потенциометра и analogWrite(3,val); работает . Но вот ка это все передать в радиоканал а потом еще и принять ??? Опыта совсем мало поэтому не судите строго.
радиомодули аналоговые?
радиомодули аналоговые?
полезнее будет спросить полное описание, и если есть, ссылку... ИМХО
Модули HC 12 . Работают так . получил 1 передал 1.
http://arduinolab.pw/index.php/2016/07/02/radiomoduli-na-433mgc-hc-11hc-...
а в чем тогда проблема))) радиомодуль все за тебя делает. просто отправляй и принимай
Модули HC 12 . Работают так . получил 1 передал 1.
в скетче из поста 15 прокоментируйте каждую строку т.е. что за что отвечает и что делает. Особенно строку 18.
а в чем тогда проблема))) радиомодуль все за тебя делает. просто отправляй и принимай
так mag155 вообще не понимает, что делать - учится...
Я действителтно только учусь . 18 строке выводим згначение val в радиоканал (если я конечно не заблуждаюсь) но приемник принимает только от 1 до 10 . А не от 1 до 255 вчем проблема не пойму?
Это приемник и он совсем кривой. Не судите уж студента .
https://www.youtube.com/watch?v=Z6Z9y6v6vsc
ну вот тебе тогда видео от ребенка)
Как кнопку подключить мне понятно . Не понятно как шимом управлять?
так отправляй свой шим и принимай его. смысл одинаковый. как раз в 8 бит умещается
if(radio.available()) {
analogWrite(3, radio.read());
}
Так работает кнопка. Подкоректируйте под шим ?
Не получается считать val приемником ???
не понял
Передаю
Передатчик значение val передатчика через ком порт видно что нормально работает.
ну и хорошо. я давал кусок для приемника
Ловлю приемником
и значение val показывает на от 0 до 255 а просто скачут цыфры от 0 до 10 .
3 строка по ходу не нужна
там еще преобразовывать же надо
Не работает в ком порту ноли и изридка пробегают цыфры.
????
в примере нет radio.available(). Может там это не предусмотрено, врядли конечно. Попробуй удалить. А вообще гугли общение ардуин по uart
Я так понимаю нужно преобразовть значение и вывести в analogWrite?
для начала в терминал шли, но вообще да
jeka_tm, в посте 19 ссылка, там пример TX and RX , у ТС осложнение - у него еще есть кнопки... это означает, что ему нужно разбить char, и первые 2 бита (или больше) использовать для маски (2 кнопки + ШИМ). и вообще поменять char на byte...
Сейчас ТС даже посылками обменяться не может.
Я бы и рад помочь, но тут проще самому код написать, чем объяснить.
mag155, вы можете забыть про кнопки и написать код для ШИМ который будет работать, и вылажить его в эту тему (оба скетча)?
Сейчас пытаюсь
Кнопки я видно пропустил. Тогда целую строку надо отправлять. А ведь даже двоичное число нужно нужно собирать из цифр, плюс всякие разделители использовать наверно если еще и кнопки. Хотя наверно безразмерный массив, парсим, для кнопок забиты конкретные символы, и по ним можно ориентироваться, без разделителей, например NP15 будет соответствовать нажаты обе кнопки и шим 15.
заполняем массив. проверяем состав, определяем буквы, буквы в кнопки, после них остальное собираем в число
Кнопки я видно пропустил. Тогда целую строку надо отправлять. А ведь даже двоичное число нужно нужно собирать из цифр, плюс всякие разделители использовать наверно если еще и кнопки. Хотя наверно безразмерный массив, парсим, для кнопок забиты конкретные символы, и по ним можно ориентироваться, без разделителей, например NP15 будет соответствовать нажаты обе кнопки и шим 15.
о том и речь, есть вариант побайтно отправлять. Если первые 2 бита 01 - кн1, 10 - кн2, 11 - шим. и 6 бит данных - кнопкам много, а ШИМу может нехватить.
передатчик с приемником проблема ?
mag155 - вы передатчиком отправляете значение функцией print. Отправляется, например, строка "144". А потом в приемнике читаете функцией read() только первый символ - то есть "1". Отправляйте не строки, а байты - функцией write(). читайте не символы - а тоже байты!
Это как минимум четвертая или пятая ветка, где вы спрашиваете об одном и том же. Ровно точно так же вы тупили по теме отправки данных по Сериал. Сколько можно-то? Вы студент? В каком вузе держат таких тупиц? На платном отделении, что ль, за папины денежки?
Значение с val почему то не считывается в приемнике ???