2017-01-23 11 views
-1

Я пытаюсь сделать автоматическую дверь, которая открывает/закрывает дверь при приеме команд через Bluetooth.Неисправность сервомотора

Все, что я хочу сервопривод сделать это:

  1. остается стабильным на включение питания на Arduino. (В настоящее время он вращается под определенным углом и возвращается на включение Arduino).

  2. Повернитесь от 0 градусов до 90 градусов и остановитесь, получив другую команду, он должен вращаться от 90 градусов до 0 градусов и останавливаться.

Это мой код:

else if (val=='i'){ 
myservo.write(0); 
delay(4000); 
for(pos = 0; pos <= 90; pos += 1){ 
    myservo.write(pos);    
    delay(15);      
} 
} 
    else if (val=='j'){ 
myservo.write(0); 
delay(4000); 
for(pos = 90; pos >= 0; pos -= 1){ 
    myservo.write(pos);    
    delay(15);      
    } 
    } 
+1

Вы должны указать конкретную * модель * используемого вами ** двигателя **, а также указать * минимальный воспроизводимый пример *. Кроме того, вам следует описать, что такое ** ожидаемое поведение ** Arduino * с вашим кодом и что такое * поведение *, которое вы наблюдаете. Как бы то ни было, ваш пост даже не содержит вопроса, и поэтому он неясен. –

+0

дайте больше информации о времени включения питания и этих движениях. и что во имя Бога есть определенный угол. 1 ° или 176 ° или что? как подключается двигатель? – Piglet

+0

Модель: - Tower Pro SG90 Как я могу включить мой ардуино, серводвигатель вращается вперед и назад под определенным углом. Я не знаю точный угол, но это примерно 20 градусов. И когда я нажимаю кнопку открытой двери приложения на своем телефоне, он передает «i» через bluetooth HC-05. В этом состоянии я хочу, чтобы он вращался от 0 градусов до 90 градусов. но то, что он делает, вращается от 0 до 90 с нормальной скоростью, и внезапно он снова достигает 0 градусов и начинает вращаться на 90 градусов с нормальной скоростью, а после 4-5 раз двигатель просто стучит до 0 градусов и начинает шуметь. –

ответ

1
  1. Это характерно для электроники сервоприводов. Подавайте сигнал ШИМ на сервопривод перед включением питания или в течение нескольких миллисекунд. Если вы хотите продолжить использование Arduino, загрузчик ждет несколько секунд, в течение которых сервопривод не имеет сигнала, поэтому добавьте транзистор, чтобы включить питание сервоприводов в качестве последней вещи в вашем стартовом коде. Если вы можете запрограммировать микроконтроллер напрямую и удалить загрузчик Arduino, тогда микроконтроллер должен начать выполнять ваши сервоконтроллеры достаточно быстро, чтобы не было заметного сбоя. В любом случае сервопривод по-прежнему будет переходить к позиции, которую вы указываете при запуске, а не в случайной позиции; вы можете сохранить последнюю командную позицию в EEROM, чтобы прыжок был менее заметным, но при отключении сервопривод будет перемещаться, если он будет механически загружен, поэтому может произойти скачок. Невозможно сказать «оставаться в своем текущем положении» с RC-сервомеханизмом.
  2. Ваши val == 'i', val == 'j' ветви быстро перемещают сервопривод до нуля, прежде чем медленно вращаться от 90 до нуля или от нуля до 90. Помните позицию, в которой вы были, и не двигайтесь до нуля, прежде чем переходить из этой позиции в нужную позицию.

Механически сервопривод, который контролируется серво-библиотекой, вряд ли будет достаточно сильным, чтобы открыть или закрыть обычную дверь; если это дверь в дом куклы или кошачий лоскут, у вас все будет в порядке, но в противном случае вы должны использовать более мощный привод и концевые упоры и некоторый датчик силы, чтобы вы не раздавили людей.