Привет всем продвинутым!!!! Помогите. Вот залил скетч, а сервопривод просто крутится и все! В чем причина? #include <Servo.h>
Servo myservo; // создаем объект для контроля сервы
// максимальное количество таких объектов – 8
int pos = 0; // переменная для хранения позиции сервы
void loop()
{
for(pos = 0; pos < 180; pos += 1) // от 0 до 180 градусов
{ // с шагом в 1 градус
myservo.write(pos); // устанавливаем положение
delay(15); // ждем 15 мс пока серва займет новое положение
}
// и обратно
for(pos = 180; pos>=1; pos-=1) // от 180 до 0 градусов
{
myservo.write(pos);
delay(15);
}
}
Как минимум в том, что это не сервопривод. По крайней мере не стандартный. Обычная серва - физически не может крутится. У нее ограничители механические стоят.
Так что начинайте с выяснения что вас за сервопривод. Тогда, глядишь и на форуме ответ найдется.
Спасибо за ответ. У меня задача: нажал кнопку-провернулась на какой-то угол и установилась, нажал на другую кнопку повернулась на угол в другую сторону, и нужна возможность менять скорость поворота.
>нажал кнопку-провернулась на какой-то угол и установилась
Любая стандартная серва. Но как правило они поворачиваются только 0-180. И вы говорите не "на какой угол повернутся", а "какую позицию занять". То есть вам еще нужно запоминать "куда вы в последний раз ей командовали". То есть если она стоит на 20, а вам нужно повернуть на 10 градусов вправо, то вы должны дать команду "стань на 30-ть".
>и нужна возможность менять скорость поворота.
А вот тут наоборот. В отличие от "непрерывного вращения" напрямую скоростью вращения сервы управлять не возможно. Она всегда старается как можно быстрее занять указанную позицию. Скорость можно задавать либо снижая питание самой сервы, либо "эмулируя программно". Выдавая команду не целиком, а "малыми порциями". То есть, напримимер, вам нужно повернуть из 10 в 60. Значит вы делает не servo.write(60) сразу, а servo.write(15);delay(..) ;servo.write(20); delay(..);servo.write(25);delay().....servo.write(60)
Подриете delay и шаг таким образом - что-бы "дерганность" была не сильно заметна. Поищите на форуме, я уже давал тут код для этого.
>А какая серва мне нужна, но с такой же мощьностью
Ну не знаю. я лазить по магазинам сравнивать характеристики серв - не буду. Можете сами посмотреть. Может кто и подскажет если у него уже есть на примете серва "точно такая как вам нужно" (но я в этом сомневаюсь).
Нет шаговый двигатель не подойдет, я с ними работаю. Значит остановить серву я не смогу. Я подсоединял переменный резистор и крутил его, серва как то не четко останавливалась и дергалась.
помогите пожалуйста, как можно переделать этот скетч чтобы сервер не возвращался в предыдущее положение а плавно поворачивался с 0 до 180 и с 180 до 0
http://robocraft.ru/templates/skin/new/images/code.gif) rgb(248, 248, 248);">
// Sweep// by BARRAGAN <http://barraganstudio.com> #include <Servo.h> Servo myservo;// создаём объект для контроля сервы // максимальное количество таких объектов - 8int pos =0;// переменная для хранения позиции сервы void setup(){
myservo.attach(9);// серва подключена к 9-му пину}void loop(){for(pos =0; pos <180; pos +=1)// от 0 до 180 градусов{// с шагом в 1 градус myservo.write(pos);// delay(15);// ждём 15ms пока серва займёт новое положение}for(pos =180; pos>=1; pos-=1)// от 180 до 0 градусов{
myservo.write(pos);
delay(15);}}
20!
Привет всем продвинутым!!!! Помогите. Вот залил скетч, а сервопривод просто крутится и все! В чем причина? #include <Servo.h>
Servo myservo; // создаем объект для контроля сервы
// максимальное количество таких объектов – 8
int pos = 0; // переменная для хранения позиции сервы
void setup()
{
myservo.attach(9); // серва подключена к девятому пину
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // от 0 до 180 градусов
{ // с шагом в 1 градус
myservo.write(pos); // устанавливаем положение
delay(15); // ждем 15 мс пока серва займет новое положение
}
// и обратно
for(pos = 180; pos>=1; pos-=1) // от 180 до 0 градусов
{
myservo.write(pos);
delay(15);
}
}
> В чем причина?
Как минимум в том, что это не сервопривод. По крайней мере не стандартный. Обычная серва - физически не может крутится. У нее ограничители механические стоят.
Так что начинайте с выяснения что вас за сервопривод. Тогда, глядишь и на форуме ответ найдется.
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Вот он sm-s4315r. Причем, если подключаю к аналоговому выводу вообще нет движений!
Это привод непрерывного вращения.
На форуме уже не раз поднимался этот вопрос. Хотя в документации это четко описанно
http://arduino.ru/Reference/Library/Servo/write
Вообщем если у вас была задача командовать серве что-то типа"займи положение 45 градусов и держи его" - вы купили не ту серву :(
Этому аппарату можно сказать только "крутись вправо, влево, быстрее медленее. стой! ать. два."
Спасибо за ответ. У меня задача: нажал кнопку-провернулась на какой-то угол и установилась, нажал на другую кнопку повернулась на угол в другую сторону, и нужна возможность менять скорость поворота.
А какая серва мне нужна, но с такой же мощьностью?
>нажал кнопку-провернулась на какой-то угол и установилась
Любая стандартная серва. Но как правило они поворачиваются только 0-180. И вы говорите не "на какой угол повернутся", а "какую позицию занять". То есть вам еще нужно запоминать "куда вы в последний раз ей командовали". То есть если она стоит на 20, а вам нужно повернуть на 10 градусов вправо, то вы должны дать команду "стань на 30-ть".
>и нужна возможность менять скорость поворота.
А вот тут наоборот. В отличие от "непрерывного вращения" напрямую скоростью вращения сервы управлять не возможно. Она всегда старается как можно быстрее занять указанную позицию. Скорость можно задавать либо снижая питание самой сервы, либо "эмулируя программно". Выдавая команду не целиком, а "малыми порциями". То есть, напримимер, вам нужно повернуть из 10 в 60. Значит вы делает не servo.write(60) сразу, а servo.write(15);delay(..) ;servo.write(20); delay(..);servo.write(25);delay().....servo.write(60)
Подриете delay и шаг таким образом - что-бы "дерганность" была не сильно заметна. Поищите на форуме, я уже давал тут код для этого.
>А какая серва мне нужна, но с такой же мощьностью
Ну не знаю. я лазить по магазинам сравнивать характеристики серв - не буду. Можете сами посмотреть. Может кто и подскажет если у него уже есть на примете серва "точно такая как вам нужно" (но я в этом сомневаюсь).
Посмотрите еще на шаговые двигатели. Возможно они больше подойдут для ваших задач.
Нет шаговый двигатель не подойдет, я с ними работаю. Значит остановить серву я не смогу. Я подсоединял переменный резистор и крутил его, серва как то не четко останавливалась и дергалась.
Сбоку на корпусе есть потенциометр. Как он работает?
я только начинающий и хочу спроосить , можно ли 1 сервопривод настроить под множество движений
я только начинающий и хочу спроосить , можно ли 1 сервопривод настроить под множество движений
Я не начинающий, но понять что такое "настроить под множество движений" - не могу.
я только начинающий и хочу спроосить , можно ли 1 сервопривод настроить под множество движений
Напиши что именно ты имел в виду может подскажу что знаю тут нельзя так нужно знать хотя-бы основы как спросить и объяснять как можно подробнее
... серва как то не четко останавливалась и дергалась.....
Если надо чтобы серва долго стояла и не дёргалась дайте ей http://arduino.ru/Reference/Library/Servo/detach
помогите пожалуйста, как можно переделать этот скетч чтобы сервер не возвращался в предыдущее положение а плавно поворачивался с 0 до 180 и с 180 до 0