Плавное серво

iliusvla
Offline
Зарегистрирован: 22.01.2012

Добрый день!

Возможно ли заставить двигаться серву плавно? 

Заранее благодарю!

Mastino
Offline
Зарегистрирован: 03.12.2011

c помощью этой ( http://gigapeta.com/dl/2101947ac2469e ) библиотеки можно регулировать скорость поворота серво.

Speed=0: полная скорость
Speed=1: самая медленная скорость
Speed= 255 самая быстрая скорость как 0..

#include <VarSpeedServo.h> 
 
VarSpeedServo myServo;            

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


void loop() 
{

  myServo.slowmove (20, 40);  // положение 40, скорость 20
  delay(5000);
  myServo.slowmove (40, 90);  // положение 90, скорость 40
  delay(5000);
}

P.S. нежелательно использовать две библиотеке одновременно VarSpeedServo.h и Servo.h!

Илья73
Offline
Зарегистрирован: 06.09.2013

Если скетч не компилируется и выдает ошибки. Нужно открыть файл VarSpeedServo.cpp найти и заменить <WProgram.h> на <Arduino.h>

Андрей01
Offline
Зарегистрирован: 04.11.2013

Спасибо-заработало, но по поведению сервы, библиотека немного глючная.

Андрей01
Offline
Зарегистрирован: 04.11.2013
#include <VarSpeedServo.h> 
 
VarSpeedServo myServo;            

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


void loop() 
{

  myServo.slowmove (0, 20);  // положение, скорость
  delay(10000);
myServo.slowmove (160, 50);  // положение, скорость
delay(20000);
myServo.slowmove (180, 10);  // положение, скорость
delay(10000);
}

Вопщем нормальная библиотека, для меня пойдёт, правил фаил в ворлд паб, единственное при старте скетча серва уходит на 90гр и от туда в ноль ползёт у меня. Спасибо!!

vvadim
Offline
Зарегистрирован: 23.05.2012

У  меня работает без проблем.

Андрей01
Offline
Зарегистрирован: 04.11.2013

Если в дальнейшем - по кругу работает то без проблем, всё отрабатывает а при включении мк - дергается со всей дури и потом по программе идёт выполнение скетча, блин может если интересно Вам видео скинуть? Меня так немного не устраивает - у меня фотик на платформе стоит. И такие резкие манёвры ему вредны.

vvadim
Offline
Зарегистрирован: 23.05.2012

Так любая серва при включении совершает паразитное движение. Используйте другой привод - шаговик или dc мотор

Андрей01
Offline
Зарегистрирован: 04.11.2013

Я попробую немного по другому - отключаю питание программно и потом подключение и выполнение программы.

maksim
Offline
Зарегистрирован: 12.02.2012
#include <VarSpeedServo.h> 

VarSpeedServo myServo;            

void setup() 
{ 
  myServo.attach(9);
  myServo.write(0);
}


void loop() 
{
  myServo.slowmove(160, 50);  // положение, скорость
  delay(20000);
  myServo.slowmove(180, 10);  // положение, скорость
  delay(10000);
}

И поставьте подтягивающий резистор к земле наминалом от 1кОм до 50кОм (10кОм оптимально), что бы серва не дергалась при старте МК.

vvadim
Offline
Зарегистрирован: 23.05.2012

maksim пишет:


И поставьте подтягивающий резистор к земле наминалом от 1кОм до 50кОм (10кОм оптимально), что бы серва не дергалась при старте МК.

 

Резистор на управляющий провод?

maksim
Offline
Зарегистрирован: 12.02.2012

Да.

 

vvadim
Offline
Зарегистрирован: 23.05.2012

Попробовал в примере knob - всё равно градусов на 5 - 10 дёргается, зараза.

maksim
Offline
Зарегистрирован: 12.02.2012

Попрбуйте к питанию подтянуть или так попробовать еще можно:

void setup() 
{ 
  myServo.write(0);
  myServo.attach(9);
}

 

vvadim
Offline
Зарегистрирован: 23.05.2012

Всё равно дёргается. Для меня это не критично, но хочется чтобы всё было красивенько. Я и 20 и 43 ком ставил.

Андрей01
Offline
Зарегистрирован: 04.11.2013
void loop()  
{
  servo_n.detach();// отключаем шим серве и ждём
  servo_s.attach(9);
  delay(10000);// ждём 10сек серве нажатия на спуск снято
  servo_s.writeMicroseconds(2000);// отпускаем кнопку на фотике и ждём
   delay(1000);

У меня сейчас вот так сделано, доволен на 100%, но надо скорость поменьше, никаких паразитных дёрганий нет

Андрей01
Offline
Зарегистрирован: 04.11.2013

Это кусок кода от панорамной головки. Но при переключении по времени на другой угол, серва работает на полную мощъ.

Андрей01
Offline
Зарегистрирован: 04.11.2013

Сработало на ура, но есть недостаток- если сама серва после выкл питания находиться в не 0 позиции, то она туда ломанётся со всей дури при подаче питания, а если она находится в 0 позиции то всё в ажуре.

Андрей01
Offline
Зарегистрирован: 04.11.2013

Вот рабочий скеч на пан голову....

#include <VarSpeedServo.h> 
 
VarSpeedServo myServo_s;            
VarSpeedServo myServo_n;
void setup() 
{ 
myServo_n.write (90);
myServo_s.attach (9);
myServo_n.attach (10);
}
void loop() 
{
 myServo_s.attach(9);
  delay(10000);// ждём 10сек серве нажатия на спуск снято
  myServo_s.writeMicroseconds(2000);// отпускаем кнопку на фотике и ждём
   delay(1000);
   myServo_s.writeMicroseconds(2230);// нажимаем на кнопку снято на фотике идёт сьём на фотик ждём
   delay(500);
  myServo_s.detach();// отключаем шим серве и ждём
  
  myServo_n.slowmove (90, 10);  // положение, скорость
delay(3000);
myServo_n.detach();// отключаем шим серве и ждём
delay(10000);

myServo_n.attach(10);
myServo_n.slowmove (12, 10);  // положение, скорость
delay(4000);
myServo_n.detach();// отключаем шим серве и ждём
delay(10000);

myServo_n.attach(10);
myServo_n.slowmove (45, 10);  // положение, скорость
delay(5000);
myServo_n.detach();// отключаем шим серве и ждём
delay(10000);

myServo_n.attach(10);
myServo_n.slowmove (65, 10);  // положение, скорость
delay(5000);
myServo_n.detach();// отключаем шим серве и ждём
delay(10000);

myServo_n.attach(10);
myServo_n.slowmove (85, 10);  // положение, скорость
delay(5000);
myServo_n.detach();// отключаем шим серве и ждём
delay(10000);

myServo_n.attach(10);
myServo_n.slowmove (105, 10);  // положение, скорость
delay(5000);
myServo_n.detach();// отключаем шим серве и ждём
delay(10000);

myServo_n.attach(10);
myServo_n.slowmove (125, 10);  // положение, скорость
delay(5000);
myServo_n.detach();// отключаем шим серве и ждём
delay(10000);

myServo_n.attach(10);
myServo_n.slowmove (150, 10);  // положение, скорость
delay(5000);
myServo_n.detach();// отключаем шим серве и ждём
delay(10000);

myServo_n.attach(10);
myServo_n.slowmove (170, 10);  // положение, скорость
delay(5000);
myServo_n.detach();// отключаем шим серве и ждём
delay(10000);

myServo_n.attach(10);
myServo_n.slowmove (90, 30);  // положение, скорость
delay(5000);
myServo_n.detach();// отключаем шим серве и ждём
delay(1000);
}

 

alpino
Offline
Зарегистрирован: 30.10.2014

А как при момощи этой библиотеки заставить несколько серв двигаться одновременно?

#include <VarSpeedServo.h>

VarSpeedServo Servo1;           
VarSpeedServo Servo2; // прописываю все сервы всего их будет 17
long previousMillis = 0; // нулевая отметка
long interval = 1000;    // интервал для сравнения

void setup()
{
 Servo1.attach (30, 60, 120);
 Servo2.attach (33, 60, 120);
}
void loop()
{
  Servo1.slowmove (60, 40);
   {
     unsigned long currentMillis = millis(); // берем отсечку текущего времени
     if(currentMillis - previousMillis > interval) // сравниваем разницу отсечки и последней нулевой отметки с базовым интервалом
   {
    previousMillis = currentMillis; // обновляем нулевую отметку
  
  Servo2.slowmove (60, 40);
delay(1000); // ожидаем секунду
   }
   }
   Servo1.slowmove (120, 40);
   {
     unsigned long currentMillis = millis(); // берем отсечку текущего времени
     if(currentMillis - previousMillis > interval) // сравниваем разницу отсечки и последней нулевой отметки с базовым интервалом
   {
    previousMillis = currentMillis; // обновляем нулевую отметку
  
  Servo2.slowmove (120, 40);
delay(1000); // ожидаем секунду
   }
   }
}

то есть Arduino движет сервами по очереди. Почитал форумы, понимаю, что как-то с помощью функции  millis() , которой надо заменить delay().  На форумах вводятся переменные Unsigned long, которые при помощи функции millis() фиксируют определеные отсечки времени с момента начала работы, сравнивая которые я получают временные промежутки, а что с полученными значениями дальше делать, чтобы сервы работали одновремено, не пойму.   

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

alpino пишет:

А как при момощи этой библиотеки заставить несколько серв двигаться одновременно?

то есть Arduino движет сервами по очереди. Почитал форумы, понимаю, что как-то с помощью функции  millis() ,

Это Вам надо смотреть "как включить сигнал PWM одновременно на нескольких пинах". Ведь "управление" сервой идет именно в виде PWM определенной скважности. http://arduino.cc/en/Reference/ServoAttach - там всего-то два пина.

alpino
Offline
Зарегистрирован: 30.10.2014

Не уверен, что так.

Http://arduino.ru/Reference/Library/Servo - "Библиотека Servo позволяет одновременно управлять 12-ю сервоприводами на большинстве плат Arduino и 48-ю на Arduino Mega." - у меня Mega

Одновременное двиежение серв при помощи библиотеки servo.h достаточно подробно описан тут:

http://arduino.ru/forum/programmirovanie/dve-servy#comment-25343, но мне не удалось достичь такого плавного движения, как при помощи библиотеки VarSpeedServo.h, но как я понял в VarSpeedServo.h нельзя применить функцию servo.write.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Andrey_Y_Ostanovsky пишет:

Ведь "управление" сервой идет именно в виде PWM определенной скважности.

НЕТ ! 

Серву не интересует скважность. Она любит длительность импульса. Хоть раз в час, но не чаще 20 миллисекунд. И на каждый импульс она дёргается туда куда её направили.

Otto
Offline
Зарегистрирован: 26.06.2016

Mastino пишет:

c помощью этой ( http://gigapeta.com/dl/2101947ac2469e ) библиотеки можно регулировать скорость поворота серво.

Speed=0: полная скорость
Speed=1: самая медленная скорость
Speed= 255 самая быстрая скорость как 0..

#include <VarSpeedServo.h> 
 
VarSpeedServo myServo;            

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


void loop() 
{

  myServo.slowmove (20, 40);  // положение 40, скорость 20
  delay(5000);
  myServo.slowmove (40, 90);  // положение 90, скорость 40
  delay(5000);
}

P.S. нежелательно использовать две библиотеке одновременно VarSpeedServo.h и Servo.h!

Как можно по простому заменить delay() чем нибудь, что бы код программы не останавливался? Может в библиотеке VarSpeedServo.h предусмотрено что нибудт подобное?

P.S. Нужны паузы между паворотами влево-вправо, но без остановки программы.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014
Otto
Offline
Зарегистрирован: 26.06.2016

Спасибо, то, что нужно! Чутка внёс свои изменения и работает как надо :)

Женя7777777
Offline
Зарегистрирован: 22.01.2017

Доброго времени суток.

А как сюда джойстик прописать? Что бы при небольшом отклонении серва крутилась совсем медленно, а при максимальном серва крутилась со средней скоростью.

Mastino
Offline
Зарегистрирован: 03.12.2011

наверное для этого вам понадобится что то похожое на ПИД-алгоритм. То есть вам нужно измерять за какое время и насколько изменился сигнал от джойстика. Исходя из этих данный генерировать и давать сигнал на серву.

Женя7777777
Offline
Зарегистрирован: 22.01.2017
Значения джойстика:
 
Если положение джойстика посредине, значение джойстика - 508. (серва не двигается)
 
Если джойстик откланён максимум в лево, значение джойстика - 1023. (то серва должна поворачивать в лево, 10 градусов в секунду)
 
Если джойстик откланён максимум в право, значение джойстика - 0. (то серва должна поворачивать в право, 10 градусов в секунду)
 
Если джойстик откланён на значение от 510 до 1000, то серва должна поворачивать в лево 1 градус в секунду.
 
Если джойстик откланён на значение от 500 до 10, то серва должна поворачивать в право 1 градус в секунду.
 
Можите привести пример кода?
Mastino
Offline
Зарегистрирован: 03.12.2011
 if(joystick >= 501 && joystick <= 509)
  myServo.slowmove (90, 40);  // положение 90, скорость 20 
 else if(joystick >= 1000)  
  myServo.slowmove (180, 100);  // положение 180, скорость 100 
 else if(joystick >= 510 && joystick <= 999)  
  myServo.slowmove (180, 40);  // положение 180, скорость 40 

 

Женя7777777
Offline
Зарегистрирован: 22.01.2017

Пожалуйста, помогите прописать джойстик, а то выдаёт ошибку. Вот код целиком:

#include <VarSpeedServo.h> 
 
VarSpeedServo myServo;            

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

void loop()
{
  int joystick = analogRead (A2);
if (joystick > = 501 && joystick < = 509)
 myServo.slowmove (90, 40);  // положение 90, скорость 20 
else if(joystick >= 1000)  
 myServo.slowmove (180, 100);  // положение 180, скорость 100 
else if(joystick >= 510 && joystick <= 999)  
 myServo.slowmove (180, 40);  // положение 180, скорость 40 
}

 

Женя7777777
Offline
Зарегистрирован: 22.01.2017

Постепенно разобрался в коде, получилось залить. Но получилось, немного не то. Серво синхронизируется с джойстиком. А нужно чтобы при возврашении джойстика в первоночальное положение, серва не следовала за джойстиком а оставалась на месте.

Женя7777777
Offline
Зарегистрирован: 22.01.2017

Примерно как тут:

https://youtu.be/vwNfLNn8On8?t=7m50s

Mastino
Offline
Зарегистрирован: 03.12.2011

if(joystick >= 501 && joystick <= 509)
myServo.detach();
else if(joystick >= 1000) 
{
myservo.attach(9);
myServo.slowmove (180, 100);  // положение 180, скорость 100
}
else if(joystick >= 510 && joystick <= 999) 
{
myservo.attach(9);
myServo.slowmove (180, 40);  // положение 180, скорость 40
}

 

Женя7777777
Offline
Зарегистрирован: 22.01.2017

Чёт ошибку выдаёт (

Женя7777777
Offline
Зарегистрирован: 22.01.2017
Лог ошибки:
 
Arduino: 1.8.1 (Windows 8.1), Плата:"Arduino Nano, ATmega328"
 
C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries E:\Мои документы\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10801 -build-path E:\TEMP\arduino_build_885803 -warnings=all -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose E:\TEMP\arduino_modified_sketch_622776\AnalogReadSerial.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries E:\Мои документы\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10801 -build-path E:\TEMP\arduino_build_885803 -warnings=all -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose E:\TEMP\arduino_modified_sketch_622776\AnalogReadSerial.ino
Using board 'nano' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Detecting libraries used...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "E:\TEMP\arduino_build_885803\sketch\AnalogReadSerial.ino.cpp" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Program Files (x86)\Arduino\libraries\VarSpeedServo" "E:\TEMP\arduino_build_885803\sketch\AnalogReadSerial.ino.cpp" -o "nul"
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\libraries\VarSpeedServo\VarSpeedServo.cpp
Generating function prototypes...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Program Files (x86)\Arduino\libraries\VarSpeedServo" "E:\TEMP\arduino_build_885803\sketch\AnalogReadSerial.ino.cpp" -o "E:\TEMP\arduino_build_885803\preproc\ctags_target_for_gcc_minus_e.cpp"
"C:\Program Files (x86)\Arduino\tools-builder\ctags\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "E:\TEMP\arduino_build_885803\preproc\ctags_target_for_gcc_minus_e.cpp"
Компиляция скетча...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Program Files (x86)\Arduino\libraries\VarSpeedServo" "E:\TEMP\arduino_build_885803\sketch\AnalogReadSerial.ino.cpp" -o "E:\TEMP\arduino_build_885803\sketch\AnalogReadSerial.ino.cpp.o"
E:\TEMP\arduino_modified_sketch_622776\AnalogReadSerial.ino: In function 'void loop()':
 
AnalogReadSerial:16: error: 'myservo' was not declared in this scope
 
 myservo.attach(9);
 
 ^
 
AnalogReadSerial:21: error: 'myservo' was not declared in this scope
 
 myservo.attach(9);
 
 ^
 
AnalogReadSerial:23: error: expected '}' at end of input
 
 }
 
 ^
 
Используем библиотеку VarSpeedServo в папке: C:\Program Files (x86)\Arduino\libraries\VarSpeedServo (legacy)
exit status 1
'myservo' was not declared in this scope
Mastino
Offline
Зарегистрирован: 03.12.2011

myservo >> myServo

Женя7777777
Offline
Зарегистрирован: 22.01.2017

Если имелось в виду изменить все myservo, на myServo, то я изменил, но ошибка всё равно осталась. Прошу не судить строго, я только недавно приступил к изучению ардуино..

Лог ошибки:

Arduino: 1.8.1 (Windows 8.1), Плата:"Arduino Nano, ATmega328"

 
C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries E:\Мои документы\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10801 -build-path E:\TEMP\arduino_build_885803 -warnings=all -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose E:\TEMP\arduino_modified_sketch_429055\AnalogReadSerial.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries E:\Мои документы\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10801 -build-path E:\TEMP\arduino_build_885803 -warnings=all -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose E:\TEMP\arduino_modified_sketch_429055\AnalogReadSerial.ino
Using board 'nano' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Detecting libraries used...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "E:\TEMP\arduino_build_885803\sketch\AnalogReadSerial.ino.cpp" -o "nul"
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Program Files (x86)\Arduino\libraries\VarSpeedServo" "E:\TEMP\arduino_build_885803\sketch\AnalogReadSerial.ino.cpp" -o "nul"
Using cached library dependencies for file: C:\Program Files (x86)\Arduino\libraries\VarSpeedServo\VarSpeedServo.cpp
Generating function prototypes...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Program Files (x86)\Arduino\libraries\VarSpeedServo" "E:\TEMP\arduino_build_885803\sketch\AnalogReadSerial.ino.cpp" -o "E:\TEMP\arduino_build_885803\preproc\ctags_target_for_gcc_minus_e.cpp"
"C:\Program Files (x86)\Arduino\tools-builder\ctags\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "E:\TEMP\arduino_build_885803\preproc\ctags_target_for_gcc_minus_e.cpp"
Компиляция скетча...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10801 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "-IC:\Program Files (x86)\Arduino\libraries\VarSpeedServo" "E:\TEMP\arduino_build_885803\sketch\AnalogReadSerial.ino.cpp" -o "E:\TEMP\arduino_build_885803\sketch\AnalogReadSerial.ino.cpp.o"
E:\TEMP\arduino_modified_sketch_429055\AnalogReadSerial.ino: In function 'void loop()':
 
AnalogReadSerial:22: error: expected '}' at end of input
 
 }
 
 ^
 
Используем библиотеку VarSpeedServo в папке: C:\Program Files (x86)\Arduino\libraries\VarSpeedServo (legacy)
exit status 1
expected '}' at end of input

 

vvadim
Offline
Зарегистрирован: 23.05.2012

для связки серва-джойстик VarSpeedServo не нужна
достаточно штатной библиотеки

Женя7777777
Offline
Зарегистрирован: 22.01.2017

Я так понял, что VarSpeedServo нужна для того что бы достичь медленного и плавного поворота сервы.

Mastino
Offline
Зарегистрирован: 03.12.2011

попробуй в конец добавить }

Женя7777777
Offline
Зарегистрирован: 22.01.2017

Добавил }, загрузилось. Но серва реагирует только на одно положение джойстика - в лево. При нажатии на джойстике в право, серва не реагирует. То есть счас серва заняла крайнее положение, и не крутится никуда..

Mastino
Offline
Зарегистрирован: 03.12.2011

ну чтобы крутилось и в другую сторону - давайте 10$ или думаете сами как написать :)

NovaCat
Offline
Зарегистрирован: 08.12.2016
Мучаюсь с библиотекой VarSpeedServo.h. Всё хорошо, но вот в начальный момент серва дергается в среднее положение.
 
Как я понял из-за того, что в библиотеке прописано 119 #define DEFAULT_PULSE_WIDTH  1500     // default pulse width when servo is attached
 
А как обойти это дефолтное положение? Мне надо что бы серва при включении не дергалась, а начинала работу с того положения в котором осталась перед выключением. С библиотекой Servo.h так и было.
YURA200
Offline
Зарегистрирован: 25.06.2017

Подскажите как можно регулировать скоростью серво или шагового двигателя потенциометром на ардуино. Везде описано как с помощью потенциометра можно задавать углы, а скорость задаётся постоянной. Например мне надо повернуть вал на 30 гродусав в одну сторону затем обратно и при этом возможность потенциометром изменять скорость этого перемещения

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Серва не предусматривает возможности изменения скорости перемещения.

Единственное, что можно сделать - двигать ее самому маленькими шажками с нужной средней скоростью.

YURA200
Offline
Зарегистрирован: 25.06.2017

Нет это не подходит Нужно чтобы скорость менялась потециометром и вращение на определённые углы было автоматическое Я смотрел шаговые двигатели там тоже я не нашёл ничего подобного Также скорость можно только назначить программно один раз и менять тоже в программе Но потенциометром негде не видел. Возможно подскажете Или это реализовать можно только с двигателем постоянного тока Но здесь проблема во вращениях на определённые углы, не желатетельно устанавливать дополнительные датчики перемещения

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Подходит это Вам или не подходит, но другого способа нет.

Если не подходит, выберите себе другую задачу.

У шагового двигателя, к слову, вообще нет скорости как таковой, а есть только темп шагов, который, кстати, можно произвольно менять на свое усмотрение, в том числе делать плавные ускорения и замедления. Но все равно он вращается прерывисто. То же самое можно сделать и с сервой, если ее скорость перемещения нужно замедлить.

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

YURA200
Offline
Зарегистрирован: 25.06.2017

Так всеже возможно потенциометром менять темп шагов в шаговом двигателе и обеспечить затем автоматический ход вала двигателя на определённые углы. Меня в принципе устроит такое движение вала. Вы не подскажете как это  можно реализовать или посоветуйте где такие идеи можно посмотреть

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

По сути у Вас три различных вопроса:

1. Считывание данных с потенциометра.

2. Управление двигателем (я так понял, с типом Вы еще не определились).

3. Функция, преобразующая показания потенциометра в управляюще воздействие на двигатель.

По первым двум вопросам Вам нужен практикум по Ардуино, по третьему - математика + программирование. Ну и все это связать между собой - тоже программирование.

 

Проект можно реализовать на любом типе двигателей: сервопривод, шаговый, постоянного тока, но для последнего понадибится еще энкодер, а для шагового, вероятно, концевик (если есть необходимость не просто поворачиывть на определенный угол от текущего, а существует некоторое нулевое значение угла).

YURA200
Offline
Зарегистрирован: 25.06.2017

Я знаю как подключать потенциометр и знаю что это другое устройство.Тип двигателя не имеет значения лишь бы выполнялись условия менялась скорость вращения двигателя или шаг шагового двигателя потенциометром плавность хода не имеет значения и были повороты на определённый угол Я смотрел пример скетч приводимый здесь но  к сожалению серво работает в этом примере не так Смотрел другие варианты, но нигде примеров мне нужных не нашёл Поэтому и решил обратится сюда может мне посоветуют где найти примеры таких скетчев .Или их не существует и надо эту программу создавать Двигатель постоянного тока хочу применить в последнюю очередь так как с ним могут возникнуть проблемы с углами поворота тут с ними сложней хотя у меня пример как реализовать на нём мой проект есть