Управление сервоприводами джойстиком через радиомодуль RF-5V
- Войдите на сайт для отправки комментариев
Втр, 20/02/2018 - 18:52
Доброго времени суток. Простая задачка, которая вызывает у меня трудность. Управлять сервоприводами с помощью джойстика научился, а именно прикреплю ниже скетч, написанный мною. Но управлять им через радиомодуль RF-5V у меня никак не получается, потратил кучу времени и всё в пустую. Помогите написать программку для передатчика и приемника. То есть необходимо этот скетч, который я написал, внести в передатчик и что бы приемник принимал данные, и собственно, что бы сервоприводы двигались в нужном направлении. Собранные схемы во вложениях.
#include <Servo.h> Servo Artur1; Servo Artur2; int z = 95; int q = 95; void setup() { pinMode(A4,INPUT); pinMode(A5,INPUT); Artur1.attach(9); Artur2.attach(10); Artur1.write(z); Artur2.write(q); delay(500); } void loop() { int x = analogRead(A5); int y = analogRead(A4); if (x>900) z=z+1; if (x<200) z=z-1; if (z>180) z=180; if (z<10) z=10; if (y>900) q=q+1; if (y<200) q=q-1; if (q>180) q=180; if (q<10) q=10; Artur1.write(z); Artur2.write(q); delay(15); }
Напишите вашу эл. почту или же id ВК, WhatsApp, свяжусь с вами
Да я и здесь вполне читаю.
Хорошо, 1 вопрос, я подключаю библиотеку RCSwitch, далее я не знаю какими командами осуществлять передачу(в программировании я слаб), а как объединить в массив их темболее. Далее, 2 вопрос, удалив эти строки, что Вы написали, скетч становится не рабочим. Если не сложно, Вы не могли бы конкретно написать что на что менять, как для приемника, так и для передатчика, потому что я не понял даже как вставить отправку по радио.
Я не знаю библиотеки RCSwitch, но наверняка в ней есть примеры.
Для этой пары приёмник/передатчик, что у Вас я использовал библиотеку VirtualWire. Она отлично работает. И примеры как отправлять / получать там тоже есть.
Что значит "код становится не рабочим"? Не крутит серву? Так он и не должен. Его дело переменные по радио передать - крутить серву должен код приёмника.
Объединить в массив, ну не знаю, ну поставьте вместо строк 6 и 7 что-нибудь типа
Польуйтесь z и q как раньше, а по радио отправляйте packet.
Сейчас попробую что нибудь сделать, чуть попозже отпишусь.
Библиотека VirtualWire почему то не хочет взаимодействовать с сервоприводами, поэтому везде на форумах пишут использовать RCSwitch.
Виноват, опечатка. В строке 3 моего предыдущего сообщения надо packet[1]
Вот что получилось, при проверке пишет expected primary-expression before '=' token в 25 строчке.
В чём беда? Не пойму, что его не устроило в знаке "="?
Сравните Ваши строки 5 и 6 с моими из сообщения №5 (с учётом поправки - опечатки).
Вас ничего не смущает? Разницы не видите?
";" убрал, больше не ругается, теперь к приемнику перехожу
давайте.
В приёмнике сначала ничего не крутите. Просто примите два числа и выдайте их в монитор порта - потсмтрите наормально ли доходят.
Стоп, а это что за фигня в строке 26?
Давайте ка ссылку на библиотеку, чтобы мы одну версию смотрели.
http://robotclass.ru/tag/%D1%80%D0%B0%D0%B4%D0%B8%D0%BE-433-%D0%BC%D0%B3...
и
http://homes-smart.ru/index.php/oborudovanie/bez-provodov-433-315mgts/al...
Встрял на loop'e, не знаю, что писать туда, что бы принять массив?
Сначала надо с посылкой разобраться. Так, как Вы посылаете - неверно. Дайте посмотреть бибилотеку, подождите.
Здесь другой принцип передачи, потому и данные сделаем по другому.
В передатчике
1. Вместо строк 4-6 ставим
2. Везде, где мы использовали q и z заменяем их на packet.q и packet.z соответсвенно
3. Строку 26 заменяем на
4. в функции setup в любом месте вставьте
Сделайте, убедитесь, что компилируется и выложите свежий код, чтобы я видел.
Тогда займёмся приёмником.
Имена переменных регистрочувствительные, а у Вас в одном месте lVal, а в другом lval. Сделайте одинаково.
Изменил, всё откомпилировало, что дальше делаем?
Всё, приёмник делайте. Всё как по Вашей ссылке
Ну, там в сетапе Serial.being не забудьте.
Скомпилируйте. оставьте работать. Запустите передатчик, пусть передаст. Скажите, что получается в мониторе порта у приёмника.
По идее должно быть 1593859840, но могу ошибиться. В любом случае скажите мне что там получается.
Остальная часть приёмника как по Вашей ссылке!
Вот код из приемника, но на экране порта ничего не отображается
Остальная часть приёмника как по Вашей ссылке!
Ну, как там?
Кстати, может разумнее в пятой строке поставить
Serial
.print(value, HEX);
Тогда результат в сериале по идее должен быть 5F005F00
Ну. строки 4-6 не нужны.
Что значит ничего не отображается. Передатчик запускали?
Он будет печатать только тогда, когда получит что-то от передатчика.
Да, кстати, пока в передатчике можно закомментировать строки 24-33, чтобы под ногами не путались. Добъёмся, что 95 передалось, тогда раскомментируем.
Вот так получается)
Ну, расскажите подробно. Передатчик работает? На другой ардуине?
Если работает, выложите актуальные коды приёмника и передатчика.
В общем, сейчас я ухожу, завтра продолжим.
Пока сделайте. что я просил - дайте актуальные коды.
Потом отложите эти скетчи в сторону, возьмите два примера из библиотеки (пример приёма и передачи) и заставьте его передать хоть что нибудь. Чтобы Ваш передатчик передал, а приёмник принял. Возможно Вы подключили что-то не так, разберитесь и заставьте хоть один пример работать. После этого вернитесь к нашим скетчам и, если будете знать что, поправьте.
В любом случае, завтра я надеюсь увидеть актуальные скетчи и отчёт. чего удалось добиться.
Это передатчик
Это приемник
На экране монитора ничего не отображается, шаманил, но ничего не получилось, схема собрана вроде правильно, ничего не отходит. Завтра попробую затестить просто работоспособность радиомодулей. До этого проверял на светодиоде, работало. Тогда завтра выходите на связь и попробуем что нибудь нашаманить.
Если что, пишите на электронку 1997apendics@gmail.com
Сделал всё так, как Вы написали, безуспешно, в мониторе порта по прежнему ничего
Уже часа 2 тестирую просто работоспособность радиомодулей, никак не могу добиться передачи данных, почему то ничего не выводит мне на экран, кроме сетапа. МОжет стоить купить новые модули, а эти стоит заменить?
Как я Вам говорил, я впервые вижу эту библиотеку, потому не могу сказать ничего о ней толком. Давайте сделаем так, я сегодня попозже (когда до СВХ доберусь) возьму такую же как у Вас пару приёмник / передатчик (их есть у меня) и попробую сам с этой библиотекой. Если получится, я выложу Вам скетчи и точную инструкцию по соединению. Если же не получится, я посмотрю почему не работает VirtualWire с сервой. Если там дело в таймере (как мне кажется) то у меня есть версия VirtualWire для этого радиомодуля на другом таймере - возьмём её. А уж тогда (если вдруг одни и те же скетчи у меня заработают, а у Вас нет), тогда будем думать об исправности аппаратуры. Пока рано.
Пока же, давайте уточним.
На Ваших фото я вижу передатчик, он такой же как у меня. Приёмник, видимоЮ тоже. Вот такая пара у Вас?
И библиотека Servo у Вас стандартная? Из поставки IDE? Какая версия IDE?
В общем, ответьте на мои вопросы, а я как только доберусб до СВХ, всё попробую и отпишусь.
Да, один в один. А я сегодня съезжу и куплю новые детали. Где то пишут, что их питают 3.3В, а где то 5В. Я всегда питал 5В, как думаете, можно было спалить ее 5 В?
Опа! Так может он потому у Вас и не передаёт. Хотя у меня от 5 недалеко, но передавал.
Питать их надо:
приёмник - от 5В (у него на спине написано название в котором 5V фигурирует)
передатчик - от 12В. В принципе от пяти работает (если на 10 см.), но чем больше. тем выше "дальнобойность")
На второй вопрос не забудьте ответить.
Всегда 5 питал и приёмник и передатчик, а расстояние между ними 5-20 см. Мне этого будет достаточно.
Servo.h. Версия ардуино IDE последняя, отошёл от компьютера и пока не могу сказать точно цифры
Как подойдёте - скажите.
Теперь новости для Вас.
Я добрался до своего СВХ.
Начал с того, что проверил свои приёмник и передатчик при помощи очень маленьких скетчей на VirtualWire. Запустил такую конфигураци. Передатчик работает сам по себе и раз в секунду шлёт в эфир слово Hello. Приёмник постоянно слушает эфир и печатает в монитор порта всё, что "услышал". Всё работает отлично, слово Hello раз в секунду в монитор порта печатется. И приёмник и передатчик питаются от 5В. На приёмнике имеется небольшая антенна, её хорошо видно на снимке (когда-то впаял туда ножку от резистора, которая была отрезана при впайке резистора на плату, я храю такие ножки в коробочке - ценная вещь :)))) И приёмник и передатчик подлючены ко вторым пинам своих ардуин (это тоже видно на снимке)
Теперь я покурю и начну эксперименты с Вашей библиотекой.
Вы же пока попробуйте мои скетчи, чтобы убедиться. что Ваши приёмник и передатчик живы. Все соединения, которые я сделал на снимке видны, проверьте свои.
Снимок - https://drive.google.com/open?id=1AirQPCqhIh8Nuyi5arZrmUOVIg802O0j
Скетч передатчика
Скетч приёмника
Проверяйте, у меня работает. Я же начинаю Вашу библиотеку мучать.
Имейте в виду, что Servo.h рулит сервой, сидя на прерывании таймера. И RCSwitch тоже висит на прерывании. Так что, потенциально, они могут сталкиваться лбами. Посылки на слейва, думаю, надо повторять раз несколько.
Так, есть хорошие новости.
Похоже, я вчера просто недостаточно внимательно смотрел на Ваш код и не заметил, что Вы написали
RCSwitch mySwitch = RCSwitch();
разумеется, так нельзя (скажем, "не стоит"), надо
RCSwitch mySwitch;
Теперь смотрите. Точно на той аппаратной конфигурации, что на моём снике, я к ней не прикасался) и с той самой библиотекой RCSwitch, ссылку на которую Вы мне вчера дали, у меня хорошо работают вот такие скетчи
Передатчик
Приёмник
На стороне приёмника запущен монитор порта, вот что он выдаёт
Т.е. всё отлично. Каждую секунду мы принимаем сигнал. И сигнал правильный. Некоторое нарастающее отставание по времени объясняется просто - мы же делаем паузу на секунду, а собственно время выполнения команд и даёт это нарастание.
-------------
Теперь Ваша задача,
1. запустить и убедиться, что модули живы и всё классно работает.
2. Не меняя пока скетч приёмника, вставить в скетч передатчика Ваши дела с джойстиком (просто всё, что надо скопируйте из своего вчерашнего скетча) и убедиться что при работе с джойстиком в мониторе порта приёмника печатаются правильные числа.
Только после того, как Вы убедитесь, что числа передаются и принимаются правильно, можно пробовать вставлять в скетч приёмника работу с сервой.
Жду отчёта о Ваших успехах. При отчёт обязательно вставьте актальные скетчи приёмника и передатчика.
------------------
Коллега в посте #37 всё правильно говорит, но пока не парьтесь, мы до этого ещё доберёмся. Если библиотека подерётся с сервой, предлагаю перейти на VirtualWire - её я знаю и быстро ей мозги вправлю. . Что же касается посылки несколько раз, это особенно важно т.к. Вы хотите держать передатчик на голодном пайке (5В вместо 12), потому потери данных будут даже чаще, чем обычно.
Имейте в виду, что Servo.h рулит сервой, сидя на прерывании
Да, я в курсе, но ТС мне говорил, что где-то читал, что серва дерётся с VirtualWire, а RCSwitch вроде как не дерётся. Посмотрим. Но это даже не важно, у меня есть "самогонные" версии VirtualWire на любой таймер, так что разрулим. Ну, а про потерю данных - это да. Плавали, знаем :))) Я вообще много использую эту радиопару. Соит "рупь за ведро", а для моих нужд служит отлично.
Еду пока что за новым радиомодулем, как приеду, начну шаманить, отпишусь сразу
Валяйтё, но, возможно, с модкем поторопились. Хотя, лишним не будет. Я их покупаю десятками :)
Вставил ваши скетчи, вот что получилось на приемной стороне. Это уже новые приемопередатчики, точно такие же, главное рабочие, теперь вопрос, как избавиться от такой абра-кадабры?
Не знаю, как вы беретесь за задачи с коммуникациями, если даже скорость в Serial Monitor поменять не можете. Диктант будете писать под управлением Евгения или на шею ему сразу сядете?
Картинка неполная, но сильно подозреваю, что в правом нижнем углу указана скорость 9600, а в моих скетчах везде 115200.
Сделайте одинаково. Неважно где менять, но одинаково чтобы было.
sadman41, нет, это нормальный парень. Скетч писал сам. И когда я ошибся в регистре букв в идентификаторе, ошибку компиляции исправил сам. Т.е. здесь можно работать.
Вставил всё, как Вы написали, всё работает, если джойстик вверх, то прибавляет значение z на 1, если вниз, то вычитает 1, аналогично и другие две стороны(право и лево) вычитает и прибавляет 1.
Идём дальше, теперь надо заставить сервоприводы двигаться, с чего начнём?
Значит передатчик с джойстиком у Вас уже есть. так. Оставляйте его в покое, берите скетч приёмника и ...
Посмотрите на Ваш старый скетч (из самого первого сообщения темы. В нём строки 3-4, 10-11, 20-29 отвечали за джойстик, а всё остальное за серву. так?
Теперь Вам джойстик не нужен, вместо джойстика у Вас есть приёмник. Смотрим скетч приёмника из поста #38. Там к строке №20 у Вас уже получены packet.z и packet.q (они по радио получены, а раньше Вы их с джойтиска получали, но какая разница? Важно, что числа есть).
Поэтому из самого начального скетча выбрасываем строки 3-4, 10-11, 20-29, а то, что осталось аккуратно переносим в правильные места скетча приёмника из поста 39.
Т.е. то что глобально, так и переносим глобально. То что там было в сетап, и сюда переносим в сетап. А то, что там вертело серву, ставим в то место, где числа уже получены и также вертим.
Если Всё аккуратно вставите, он должен начать вертеть серву по командам с передатчика.
Давайте, пробуйте. Надесюь, у Вас получится. Отчитаетесь. Только не исчезайте, там надо ещё будет до ума довести.
Посмотрите на Ваш старый скетч (из самого первого сообщения темы. В нём строки 3-4, 10-11, 20-29 отвечали за джойстик, а всё остальное за серву. так?
Поэтому из самого начального скетча выбрасываем строки 3-4, 10-11, 20-29, а то, что осталось аккуратно переносим в правильные места скетча приёмника из поста 39.
Это сделал, только не убирал 3-4 строку, иначе как ввести переменную, кроме как Servo Artur1 ??
Вот конечный скетч
Значит проблема такая, изначально 2 серва просто двигаются по кругу без какого либо алгоритма. Открываю монитор порта, они останавливаются на одном месте и гудят, сдвинуть их рукой не получается, встаёт на это же место, то есть на начальное. Тут возникает новая проблема, в мониторе порта ничего не отображается, кроме "Fun begins!", после, я очень близко кручу друг у друга передатчик и приемник приходит 3-4 сообщения:
не убирал 3-4 строку
Это правильно, это я с прямым углом перепутал
Далее, ничего больше не приходит. Тут я подумал, что модули опять сломались, вернул всё к исходным скетчам, сообщения передавались в нормальном режиме, как и должны. Сделал заного, история та же. В чем проблема, может со скетчем что то не так. Передатчик я не трогал, менял только приемник.
Получается, что так, потому что даже в монитор порта Сообщения не приходят