Серва не докручивает до 180 и до нуля

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

 Серва цифровая FS5519M не докручивает до 180 градусов и до нуля.

 Может кто сталкивался?

#include <Servo.h> 

Servo myservo;

void setup() 
{ 
  myservo.attach(9);
} 

void loop() 
{
  myservo.write(1);
  delay(3000);

  myservo.write(90);
  delay(3000);

  myservo.write(179);
  delay(3000);
} 

 

step962
Offline
Зарегистрирован: 23.05.2011

pelmen пишет:

 Серва цифровая FS5519M не докручивает до 180 градусов и до нуля.


А до чего докручивает?
До 179? До 150? До 91 еле-еле?

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

 На вскидку 30-150

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

 Открываем документацию на Servo.attach и читаем какие параметры он принимает. Особое внимание обращаем на второй и третий (опциональные). Скорее всего ваша серва не совпадает с тем что "по дефолту". Или в даташите ищите ее тайминги, либо тупо "подбирайте".

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

 Кстати где-то видел что цифровых можно вообще как-то в режим Serial команд вводить. И настраивать им характеристики. Перепрограмливать их. Можно и с этим "поигратся", но думаю и без этого решится.

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

 Открываем документацию на Servo.attach и читаем какие параметры он принимает. Особое внимание обращаем на второй и третий (опциональные). Скорее всего ваша серва не совпадает с тем что "по дефолту". Или в даташите ищите ее тайминги, либо тупо "подбирайте".

Подскажите плиз, по какой методе подбирать эти цифры. Датащита на серву я не смог найти. 

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

 

pelmen пишет:

 

leshak пишет:

Открываем документацию на Servo.attach и читаем какие параметры он принимает. Особое внимание обращаем на второй и третий (опциональные). Скорее всего ваша серва не совпадает с тем что "по дефолту". Или в даташите ищите ее тайминги, либо тупо "подбирайте".

Подскажите плиз, по какой методе подбирать эти цифры. Датащита на серву я не смог найти.

Элементарно ватсон. Смотрим в документацию какие тайминги используются по дефолту. 544 для 0 градусов и 2400 для 180-ти.

Для начала "воспроизводим их же".

myservo.attach(9,544,2400);
Затем применяем секретную технологию под названием "метод научного тыка".

Раз 2400 у нас не докручивает до 180 - берем, к примеру 2600. Делаем myservo.attach(9,544,2600); Дальше возможны "три варината"
1. "ничего не поменялось" значит дело не в таймингах, а в механических свойствах самой сервы.
2. стала поворачиватся дальше, но все равно "не докручивает". Значит "еще увеличиваем"
3. Докрутилась до 180-ти. Уменьшаем, скажем на 2500. Пока опять не начнет "не докуричивать".

Вот так и "пристреливаемся". Что-бы найти минимальное значение которое будет "докручивать до 180-ти".

Аналогично с 0-лем.
Уменьшаем. Смотрим что вышло. Подбираем, теперь _максимальное_, значение которое будет устанавливать ее в ноль.

Ну и, в процессе этой игры, держим руку на питании самой сервы. Что-бы "не насиловать ее". Предположим что у нее тайминг 2700 для 180-ти градусов. А мы дали 2800. То есть она будет пытатся занять угол больше 180-ти. А ее туда не пустит физический ограничитель. Ну вот что-бы они не бодались лбами, мы и "выключаем" сразу как только убедились что "дошла до упора". Не заставляем ее грется пока мы перезальем скетч с уменьшиными таймингами.

Да и еще. Если для ноля возмем слишком малое. То кроме "уперлось в ограничитель нуля" - может еще быть ситуация "вообще не включается". То есть ниже какого-то порога она будет воспринимать "а вообще управляющего сигнала нет, значит вообще выключаемся".

Ну или как вариант. При подборе. Можно просто по циклу пробовать разные тайминги. Типа стартанули от 2400. И в цикле делаем Serial.print("тайминг который собираемся установить"). Делаем аттача. Деалем поворот в 180 градусов. Делаем небольшую задержку (что-бы было время повернутся).   detach. Чуть увеличили тайминг и опять сначала.

Ну и сидим, при этом, одним глазом смотрит на серву, ловим момент когда она докрутится до 180-ти. А другим в Serial на каком тайминге это произойдет.

 

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

 Вообщем я бы делал как-то так:

 

void setup(){
  
  Serial.begin(9600);
  for(int highPulse=2400; highPulse<=2800; highPulse+=20){ // проходим от 2400 до 2800 с шагом 20
    mServo.attach(SERVO_PIN,544,highPulse);
    Serial.println(highPulse); // вывели в Serial какой тайминг будем использовать
    mServo.write(180);
    delay(1000); // даем секунду что-бы довернулась в позицию
    mServo.detach(); // вырубили серву
    
    delay(2000);// подождали неизвестно чего. подумали, посмотрели на серву, решили хватит или продолжать/
  }
}

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Я бы delay(2000); поменял бы на while(!Serial.available() || Serial.read()!='\n');

Типа "Подождем Ентера"

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

 Вообщем я бы делал как-то так:

 

void setup(){
  
  Serial.begin(9600);
  for(int highPulse=2400; highPulse<=2800; highPulse+=20){ // проходим от 2400 до 2800 с шагом 20
    mServo.attach(SERVO_PIN,544,highPulse);
    Serial.println(highPulse); // вывели в Serial какой тайминг будем использовать
    mServo.write(180);
    delay(1000); // даем секунду что-бы довернулась в позицию
    mServo.detach(); // вырубили серву
    
    delay(2000);// подождали неизвестно чего. подумали, посмотрели на серву, решили хватит или продолжать/
  }
}

 

 

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

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

pelmen пишет:

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

Плата уже подключена к компу (для заивки скетча, смотреть в "Serial monitor"

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

pelmen пишет:

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

http://arduino.ru/Reference/Serial

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

pelmen пишет:

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

http://arduino.ru/Reference/Serial

Нужна помощь в написании программы за зузу. Есть желание?

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>Нужна помощь в написании программы за зузу<< 
Это еще что такое ?

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

nestandart пишет:
>>Нужна помощь в написании программы за зузу<< 
Это еще что такое ?

Это значит есть задача которую нужно решить, которую я решить не могу, хочу поделиться деньгами взамен за помощь.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Что за  задача ? 

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

nestandart пишет:
Что за  задача ? 

не в конфе

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011
heruvim219@mail.ru