Bluetooth модуль HC-05 и 3 Servo мотора
- Войдите на сайт для отправки комментариев
Чт, 24/07/2014 - 18:07
Всем доброго времени суток! Возникла проблемка. Есть проект, в котором используются 3 серво двигателя, два из которых подключены к моторшилду с отдельным питанием, а третий к самой Ардуино, и питается от неё же. Также в схеме присутствует bluetooth датчик РС-05. Почему то после подключения по bluetooth к ардуино серво двигатели начинают трястись и достаточно заметно, а при отключен дрожь исчезает. Сам HC-05 запитан от пятивольтового пина ардуино. При использовании инфракрасного передатчика такой проблемы не наблюдается. В чём может быть проблема?
Может вы модуль неправильно подключили и двигатели тупо ржут над Вами?
Нет. Bluetooth сигналы принимает и схема работает, но серво приводы трясутся как сумасшедшие. Причём повторюсь трястись они начинают только после подключения по bluetooth.
Идею про нехватку питания не предлагать?
Cкорее всего библиотека "сериал" (для связи с BT) как-то дергает ноги на которых сидят сервы, либо мешает таймерам (которые используются для ШИМ).
Cкорее всего библиотека "сериал" (для связи с BT) как-то дергает ноги на которых сидят сервы, либо мешает таймерам (которые используются для ШИМ).
Кстати да. А какой у вас Serial? Аппаратный или програмный? Если програмный, то выискивайте какие таймеры используют обе библиотеки, нет ли "пересечений".
Но и "питание", "помехи".... тоже конечно всегда не лишне проверить.
Используемая библиотека SoftwareSerial. Сервы Futaba S3003. Питание на моторшилд подаётся с лабораторного блока питания 5 вольт(4 ампера). Но проблема не в питании точно, ибо с ИК передатчиком эта связка работает.
Это в Servo.h:
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define _useTimer5
#define _useTimer1
#define _useTimer3
#define _useTimer4
В SoftwareSerial.h -- таймеры вообще нигде не заданы. Или я не там смотрю?
Ну вообщем-то можно загуглить "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 библиотеку. И та и другая имеют альтернативы, и... смутно помню что кто-то из альтернатив именно для этого и создавался.
Аналогичная проблема и у меня была. Решается библиотекой PWMServo.
http://arduiniana.org/libraries/pwmservo/
Здравствуйте!
Я решил эту проблему с использованием библиотек AltSoftSerial и ServoTimer2.
https://github.com/vrxfile/track_robot
В ServoTimer2.h надо закомментировать строку typedef uint8_t boolean;, если компилятор будет выдавать ошибку.
https://github.com/nabontra/ServoTimer2
https://github.com/PaulStoffregen/AltSoftSerial