Bluetooth модуль HC-05 и 3 Servo мотора

HorstMentor
Offline
Зарегистрирован: 03.04.2014

Всем доброго времени суток! Возникла проблемка. Есть проект, в котором используются 3 серво двигателя, два из которых подключены к моторшилду с отдельным питанием,  а третий к самой Ардуино, и питается от неё же. Также в схеме присутствует bluetooth датчик РС-05. Почему то после подключения  по bluetooth к ардуино серво двигатели начинают трястись и достаточно заметно, а при отключен дрожь исчезает. Сам HC-05 запитан от пятивольтового пина ардуино. При использовании инфракрасного передатчика такой проблемы не наблюдается. В чём может быть проблема?

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Может вы модуль неправильно подключили и двигатели тупо ржут над Вами?

HorstMentor
Offline
Зарегистрирован: 03.04.2014

Нет. Bluetooth сигналы принимает и схема работает, но серво приводы трясутся как сумасшедшие. Причём повторюсь трястись они начинают только после подключения по bluetooth.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Идею про нехватку питания не предлагать?

toly
Offline
Зарегистрирован: 17.05.2014

Cкорее всего библиотека "сериал" (для связи с BT) как-то дергает ноги на которых сидят сервы, либо мешает таймерам (которые используются для ШИМ).

leshak
Offline
Зарегистрирован: 29.09.2011

toly пишет:

Cкорее всего библиотека "сериал" (для связи с BT) как-то дергает ноги на которых сидят сервы, либо мешает таймерам (которые используются для ШИМ).

Кстати да. А какой у вас Serial? Аппаратный или програмный?  Если програмный, то выискивайте какие таймеры используют обе библиотеки, нет ли "пересечений".

Но и "питание", "помехи".... тоже конечно всегда не лишне проверить. 

HorstMentor
Offline
Зарегистрирован: 03.04.2014

Используемая библиотека SoftwareSerial. Сервы Futaba S3003. Питание на моторшилд подаётся с лабораторного блока питания 5 вольт(4 ампера). Но проблема не в питании точно, ибо с ИК передатчиком эта связка работает.

HorstMentor
Offline
Зарегистрирован: 03.04.2014

Это в Servo.h:

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define _useTimer5
#define _useTimer1
#define _useTimer3
#define _useTimer4

 

В SoftwareSerial.h -- таймеры вообще нигде не заданы. Или я не там смотрю?

leshak
Offline
Зарегистрирован: 29.09.2011

Ну вообщем-то можно загуглить "arduino servo software serial conflict"

Довольно быстро попадаем в обсуждениях на кто-то типа "The servo library uses the arduino's Timer 1. The software serial library disables interrupts during transmit or receive operations which then prevent the timer interruts for the servo library triggering."

Если верить этому, то простейшим выходом (по крайней мере 100% убедится что пробелема именно в конфликте библиотек) - отказаться от SoftwareSerial и попробовать хардварный.
Если проблема уйдет, то или так и оставить (если возможно), либо искать... другую SoftwareSerial или другой Servo библиотеку. И та и другая имеют альтернативы, и... смутно помню что кто-то из альтернатив именно для этого и создавался.

Russk1j
Offline
Зарегистрирован: 03.05.2012

Аналогичная проблема и у меня была. Решается библиотекой PWMServo. 
http://arduiniana.org/libraries/pwmservo/

vrxfile
Offline
Зарегистрирован: 01.02.2017

Здравствуйте!

Я решил эту проблему с использованием библиотек AltSoftSerial и ServoTimer2.

https://github.com/vrxfile/track_robot

В ServoTimer2.h надо закомментировать строку typedef uint8_t boolean;, если компилятор будет выдавать ошибку.

https://github.com/nabontra/ServoTimer2

https://github.com/PaulStoffregen/AltSoftSerial