Panther-tank

Lembios
Offline
Зарегистрирован: 14.10.2020

Добрый день. Подарил сыну гусеничную машинку на arduino uno. Собрали, научились заливать скетчи. Ультрозвуковые датчики, как голову, поварачивает сервомашинка, которая в один момент сломалась. Заказал аналогичные, но вот незадача, если при управлении через блютуз со смартфона вручную поворачивать этой сервой (на смартфоне ползунок) то вправо до 0 градусов поворачивает без проблем, а влево, если сразу указать 180 градусов, не реагирует. Отрабатывает поворот если указывать 176 градусов максимум. Соответственно в режиме автоматического определения препятствий крутит головой от прямо (99 гр) до право (0гр), влево не поворачивает.

Вопрос, как ограничить пределы работы сервы от 5 до 175 градусов, чтобы не до конца поворачивала, но поворачивала. Спасибо за помощь.

Morroc
Offline
Зарегистрирован: 24.10.2016

Ну так научились же скетчи заливать - пора учиться их менять. Ей же ардуина крутит ?

Lembios
Offline
Зарегистрирован: 14.10.2020

Моих навыков найти место, где задать углы сервы в скетчах не хватило.

Вот здесь скетч и библиотеки https://github.com/keywish/keywish-panther-tank/tree/Panther-tank-V5.0/Lesson/PantherTank_AllFunction

Сам код скетча https://github.com/keywish/keywish-panther-tank/blob/Panther-tank-V5.0/Lesson/PantherTank_AllFunction/PantherTank_AllFunction.ino

Подскажите плз куда капнуть

 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

У Вас, как всегда, два варианта:

1. Учиться, начиная с мигания светодиодом.

2. Заказать работу за деньги в разделе "Ищу исполнителя".

Собственно, во всех разделах кроме "Ищу исполнителя", "Проекты" и "Отвлеченные темы" принято помогать только тем, кто хочет научиться. 

Существует, конечно, вероятность получить от кого-то код на халяву, но на форуме это осуждается.

kalapanga
Offline
Зарегистрирован: 23.10.2016

 Lembios, Есть же множество красивых, интересных радиоуправляемых игрушек, которыми можно просто сразу  играть без всякого программирования. Зачем покупать машинки на ардуинах, если не изучать программирование? Я только бегло глянул скетч. Он вполне понятно, читабельно написан. Имена переменных, функций осмысленные. Никаких проблем, чтобы найти где именно запрограммирована реакция танка на команды с блютуз и конкретно на команды поворота сервы. Ничего "подозрительного" я там не увидел, должно крутиться! (Но повторюсь, глядел не сильно вникая.) Велика вероятность, что Вы что-то не так собрали/подключили, проверяйте!

Lembios
Offline
Зарегистрирован: 14.10.2020

У меня есть подозрение, что я, возможно, не ту сервомашинку купил. Купил самые дешёвые, рассчитанные на движение в 180 градусов. Видел на али, рассчитанные на 360, может в них проблема?
Разбираться в коде учусь, но ткните носом где именно можно ограничить углы поворота.

Lembios
Offline
Зарегистрирован: 14.10.2020

Пересобрал сломанную серву из шестиренок новой. Поворот головы стал работать корректно. Значит проблема именно в моделях сервоприводов. Продолжаем развивать с сыном тему и собираем руку-манипулятор. Сервы на руке ведут себя также, как и голова, при выславлении 180гр, не крутит, 177 - крутит норм. Я понимаю, что покупка других серво на 360гр может и решат эти проблемы, но вопрос остаётся открытым, как ограничить углы работы сервоприводов, чтобы и обычные 180 гр работали корректно в пределах своей работоспособности.

Не кидайте плз тапками.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Lembios пишет:
...при выславлении 180гр, не крутит, 177 - крутит норм...

Строго говоря, у серв нет ни 177, ни 180, а есть только длительность управляющего импульса. А пересчет из указываемого Вами угла в требуемую серве ширину импульса осуществляет библиотека. 

Так вот, в библиотеке надо настраивать константы под конкретную серву.

Bruzzer
Offline
Зарегистрирован: 17.03.2020

Lembios пишет:
но вопрос остаётся открытым, как ограничить углы работы сервоприводов, чтобы и обычные 180 гр работали корректно в пределах своей работоспособности. Не кидайте плз тапками.

 

      case E_SERVER_DEGREE:
        mTank.SetServoDegree(mProtocol->GetServoDegreeNum(), mProtocol->GetServoDegree());

 

 

 

Могу ошибаться (отказ от ответственности).

Первый параметр в SetServoDegree - номер контакта подключения сервы. Второй параметр - угол на который надо повернуть. Анализируйте при получении по блютус второй параметр, и ограничте его значение для тех серв, где это надо.

wadim
Offline
Зарегистрирован: 19.03.2021

Если проблема еще актуальна.Было тоже самое, поменял в параметрах 1000000 на 1050000 и поворот на 180 градусов заработал

void Emakefun_Servo::setServoPulse(double pulse) {
  double pulselength;
  pulselength = 1050000;   // 1,000,000 us per second
  pulselength /= 50;   // 50 Hz