Прежде чем спросить про Сервомашинку / Servo, посмотри тут.

ich
Offline
Зарегистрирован: 10.06.2012

Сервомашинка

Сервомашинка (далее серво) в моделестроении играет роль двигателя который может позиционировать свой вал на заданный ему градус.
Существуют сервы, которые могут позиционироваться от 0° до 180°, так же существуют сервы которые принимают позицию вала до 360°.

Подробней о серво тут.

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

Как подключить серву к Ардуине.

Серво

Рулим сервой на заданный угол:

Сначала мы рассмотрим позиционирование сервы на простом примере, который очень хорошо показывает принцип работы сервы.

#define SERVO_MIN_PULSE 544   // Минимальный импульс   = 0°
#define SERVO_MAX_PULSE 2300  // Максимальный импульс  = 180°
#define SERVO_REFRESH 30      // Количество импульсов для установки позиции


// Функция для позиционирования
void writeToServo(uint8_t pin, uint8_t pos){
        // Отправляем определенное количество импульсов
	for(int i=0; i<SERVO_REFRESH; i++){
	    digitalWrite(pin, HIGH);
	    delayMicroseconds(map(pos,0,180,SERVO_MIN_PULSE,SERVO_MAX_PULSE)); // Выжидаем длину импульса
	    digitalWrite(pin, LOW);
	    delay(20);
	 }
}

uint8_t servo = 12; // Пин к которому подключена серва
uint8_t pos = 0;    // Позиция сервы в градусах

void setup(){
  pinMode(servo, OUTPUT);
}

void loop(){
  // Устанавливаем серву "servo" на позицию "pos"
  writeToServo(servo, pos);
  // Увеличивать позицию на 10° через каждый шаг
  // После того как позиция превысит 180° установить её на 0°
  if((pos+=10)>180) pos=0;
  
  delay(1000);
}

 У выше указоного примера есть один минус: после того как серва установилась на заданный угол, она не удерживает свою позицию и её вал может быть легко перемещён рукой. Для удержания позиции можно воспользоваться следующим трюком.

void loop(){
  // Устанавливаем серву "servo" на позицию 90° и удерживаем.
  writeToServo(servo, 90);  
}

 Так как loop() это бесконечный цикл, серва будит постоянно принимать заданную позицию, в данном случае 90°. Но это всё ведёт к полной блокировки дальнейших действий в программе. Все остальные команды будут в этом случае не доступны.

Чтобы избежать этой блокировки, можно воспользоваться прерываниями или написать логику похожую на "Мигаем светодиодом без delay()"

 Этим мы здесь заниматься не будим, так как для этого уже существует библеотека Servo.h

Воспользуемся этой библиотекой для изменения верхнего примера.

#include <Servo.h> // Подключаем библиотеку

Servo motor;  // Создоём инстанцию нашей сервомашинки
uint8_t servo = 12; // Пин к которому подключена серва
uint8_t pos = 0;    // Позиция сервы в градусах

void setup(){
  motor.attach(servo); // Указываем на каком пине сидит серва
}

void loop(){
  // Устанавливаем серву "servo" на позицию "pos"
  motor.write(pos);
  // Увеличивать позицию на 10° через каждый шаг
  // После того как позиция превысит 180° установить её на 0°
  if((pos+=10)>180) pos=0;
  
  delay(1000);
}

 Теперь мы можим просто написать вот такой скетч

#include <Servo.h> // Подключаем библиотеку

Servo motor;  // Создоём инстанцию нашей сервомашинки
uint8_t servo = 12; // Пин к которому подключена серва

void setup(){
  motor.attach(servo); // Указываем на каком пине сидит серва
  motor.write(90); // Устанавливаем серву "servo" на позицию 90°
}

void loop(){}

И всё, теперь нашу серву просто так не сдвинешь не свернув ей "шею". ;-)

Крутим сервой как мотором не остонавливаясь:

Зачем всё это надо? Да всё просто, если серву немножко "подкавырять", можно получить довольно не плохой моторчик с редуктором, который довольно сильный для своих гоборитов и может вращаться в обе стороны.

Для начало воспользуемся вот этим туториумом: How to hack the "servo" out of "servomotor" и сделаем из нашей сервы простой моторчик с редуктаром.

Ну вот и всё, наша серва крутится как нам и хотелось. Осталось только написать для этого скетч.

А скетч довольно простой:

#include <Servo.h> // Подключаем библиотеку

Servo motor;  // Создоём инстанцию нашей сервомашинки
uint8_t servo = 12; // Пин к которому подключена серва

void setup(){
  motor.attach(servo); // Указываем на каком пине сидит серва
  
  motor.write(0);   // Крутим мотор вперёд
  delay(2000);      // Ждём 2 секунды
  motor.write(180); // Крутим мотор назад
  delay(2000);      // Ждём 2 секунды
  
  motor.detach();   // Отключаем мотор
}

void loop(){}

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

Уже довно известно:

########### Аппаратные вопросы

- Серва не докручивает до 180 и до нуля
- Серва гудит.
- Сервопривод или редуктор?
- Дребезг при работе сервомашинки
- Какой аккумулятор использовать для питания сервомашинок и ардуино?
- Тест сервы испортил ее)

########### Программирование

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

ich
Offline
Зарегистрирован: 10.06.2012

Предлагаю для наиболие активных тем как например Servo, создать такие заголовки.
Они должны будут избавить форум от дубликатов и упростить поиск по форуму.
Конечно в таких топиках нужно запретить обсуждение, держать их просто как содержание или краткре описане.
Если модераторам это предложение не по душе, прошу удалить топик полностью.

Alexander
Offline
Зарегистрирован: 25.04.2010

 Очень даже нравится. Отличный пост. Если будет несколько таких топиков можно создать раздел навроде FAQ и туда их переносить и закреплять

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

Предлагаю автору дополнить пост сервой постоянного вращения и пришпилить тему в "аппаратные вопросы" 

ich
Offline
Зарегистрирован: 10.06.2012

AlexFisher пишет:

Предлагаю автору дополнить пост сервой постоянного вращения ... 

А как же "Крутим сервой как мотором не остонавливаясь:" ? Или Вы что-то другое имели в виду?

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

Да... что-то я невнимательно прочитал пост :( Собственно, я имел в вилу не переделанную серву, а "настоящую". Может там особенности какие есть :) Я пока не знаю. Заказал себе такую из китая - через месяц придет, попробую. Может у меня будет что дополнить по этому поводу. 

Zizilk
Offline
Зарегистрирован: 30.05.2013

Ять это хреновое серво или ошибок в программе или сборке?

http://www.youtube.com/watch?v=GVqiONLR0Dk

программа

#include <Servo.h>
const int buttonleft = 2;
const int buttoncenter = 3;
const int buttonright = 5;
const int servoPin =  11; 

Servo myservo;
int curangle=-1;
 
void setup() {
  pinMode(buttonleft, INPUT);
  pinMode(buttoncenter, INPUT);
  pinMode(buttonright, INPUT);
  myservo.attach(servoPin);
}
 
void loop(){
  if ((digitalRead(buttonleft) == HIGH)&&(curangle!=135)) {   
    myservo.write(135); curangle=135;
  }
  if ((digitalRead(buttoncenter) == HIGH)&&(curangle!=90)) {   
    myservo.write(90); curangle=90;
  }
  if ((digitalRead(buttonright) == HIGH)&&(curangle!=45)) {   
    myservo.write(45); curangle=45;
  }
}

 

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

Zizilk пишет:

Ять это хреновое серво или ошибок в программе или сборке?

А вы сами можете на этом видео разглять "сборку"? 

Ладно, предположим что у вас кнопки подключены от пина, к земле.

Тогда вам, вместо pinMode(...,INPUT) , нужно просто сделать  digitalWrite(...,HIGH);

Ну и почитать тему Работа с кнопками. В помощь новичку.

Zizilk
Offline
Зарегистрирован: 30.05.2013

ну у меня там резисторы не на 10КОм а на 5.6... ( У меня резисторов дофига но без подписей а каждый по маркировка проверять долго). Может быть что недостаточно для хай и лоу понижают?

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

Zizilk пишет:

ну у меня там резисторы не на 10КОм а на 5.6... ( У меня резисторов дофига но без подписей а каждый по маркировка проверять долго). Может быть что недостаточно для хай и лоу понижают?

Так что, может мне приехать к вам и посмотреть какие у вас резисторы? Или все-таки освоите чтение маркировки?  Если "читать никак не хочется", то можно и тупо взять тестером померять. Пусть он скажет что у вас за резисторы.

Ну или плюнуть на резисторы и использовать внутрений подтягивающий (я уже подсказал как его включить). Только не забыть, что в этом случае нажатая кнопка это LOW, а не HIGH

Достаточно/недостаточно - это вам к телепатам нужно. Что куда подключили - неведомо, схемы - нет. Так что никто кроме вас - не скажет. Натыкайте, что-ли, Serial.print-ы, и выводите в лог куда вы там пытаетесь крутить серву. Если увидите что "команды правильные идут", а серва крутится не туда - тогда уже можно на серву грешить. Но пока, из той скудной инфы что вы дали - это похоже на безобразия с кнопками. А значит - вначале либо устранить безобразия, либо убедится что их нет.  А значит - читать тему про кнопки. Возможно серву пока отложить в сторону временно. Вначале досконально совоить чтение кнопок, а уж потом братся за исполнительные механизмы.

P.S. И "про кнопки" - лучше в теме про кнопки спрашивать. Пусть эта тема останется "сервовской". Хотя, думаю, если внимательно прочитаете кнопочную тему - вопросы сами отпадут.

Zizilk
Offline
Зарегистрирован: 30.05.2013

ну на данный момент я копировал схему подключения вот отсюда

http://arduino.ru/tutorials/button

Только с тем отличием что пока среди тех что были в пачке которую купил на 10кОм я не нашёл пока (там большая пачка самых разных, поэтому я как раз по маркировки и проверяю) поэтому ставлю на 5.6кОМ (самое близкое к нужном из того что перебрал).

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

Два резистора 5.6K включенных последовательно, дадут 11.2K

Натыкайте 

Serial.println(curangle);

Внутри ваших If-вов. И смотрите в сериал-монитор. 

Совпадает нажатие кнопок, с цифрами в логе, или в логе появляются "левые"?

Ну и, обычные тестовые скетчи, из библиотеки сервы крутили? Если хотете проверить серву, так возмите скетч который ничего не имеет кроме сервы.

ДА хотя-бы из стартового поста возмите скетч "Воспользуемся этой библиотекой для изменения верхнего примера...." - нормально крутит?

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

ich пишет:

Существуют сервы, которые могут позиционироваться от 0° до 180°, так же существуют сервы которые принимают позицию вала до 360°.

Добавлю для самых любознательных что сервы бывают еще и многооборотными, например из часто встречающихся это 4 или 6 оборотов. оборудованы вместо рычажка катушкой для веревочки-фала применяются обычно на парусных моделях но могут и не только там))

mal333
Offline
Зарегистрирован: 23.04.2014

Здравствуйте, уважаемые! А есть ли особенности подключения серв к Due? Сервы на 5V, а контроллер на 3.3. Как подключать?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

mal333 пишет:

Здравствуйте, уважаемые! А есть ли особенности подключения серв к Due? Сервы на 5V, а контроллер на 3.3. Как подключать?


Тоесть а к другим ардуино вы сеовы прям напрямую к пинам подключали?

mal333
Offline
Зарегистрирован: 23.04.2014

Не подключал еще, но управляющий PWM сигнал на соответствующий вход сервы, думаю, подать не проблема, они одного вольтажа. Не силовую же часть сервы сажать на контроллер.

n00b
Offline
Зарегистрирован: 14.02.2014

А в первом посте темы не напрямую подключено?

Одна пятивольтовая серва вполне себе нормально крутится.

А то если вы не разделяете вышеуказанного мнения по подключению - чего ж раньше-то молчали?

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Puhlyaviy пишет:
mal333 пишет:

Здравствуйте, уважаемые! А есть ли особенности подключения серв к Due? Сервы на 5V, а контроллер на 3.3. Как подключать?

Тоесть а к другим ардуино вы сеовы прям напрямую к пинам подключали?

я подключал, легко! Особо просто к Duemilanove 2009 главное чтоб БП справился ))

собственно не вижу пролемы запитать серву от +5 и дать ШИМ 3.3в с обзей землей. Должно работать.

 

mal333
Offline
Зарегистрирован: 23.04.2014

Во! Т.е. ШИМ на 3.3В достаточно для сервы? Этого ответа я и добивался :)

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

mal333 пишет:

Во! Т.е. ШИМ на 3.3В достаточно для сервы? Этого ответа я и добивался :)

ШИМ это чередование логических уровне HIGH и LOW.

У 3.3 вольтого устроства LOW - совпадают. Это 0v. Тут проблем нет.

В принципе, TTL устройства (работающие с 5-ти вольтовой логикой) имеют право считать уровнем HIGH, все что выше 2v. И обязанны считать HIGH все что выше 2.7v
То есть, если ардуина вам дала на вход череду сигналов 0V-3.3v-0V-3.3V, то серва по идее должна их точно так же распознвать как LOW-HIGH-LOW-HIGH как и в случае пяти-вольтовой ардуины. Так как 3.3v больше минимальных 2v и желательных 2.7v
Но... это то что должно быть "по стандарту", а вот как конкретная серва будет понимать 3.3v - тут только пробовать. В самом худшем случае... она "просто не услышит ШИМ". Но, думаю, 95% вероятность что все будет нормально и заработает без дополнительных согласований.
Самое главное - нигде в обратную сторону "не хомутнуть". Не вкатить +5v на входы трех-вольтовой ардуины.

Ну и саму серву, питать конечно лучше отдельно. 3.3V для питания ей может уже и не хватить.

Makoshin
Makoshin аватар
Offline
Зарегистрирован: 05.03.2015

Про серву постоянного вращения надо знать наперво одно - она существует. И продавцы в магазинах не всегда знают, что продаваемая ими серва - постоянного вращения. Можно попасть на 600р и вечер попыток заставить ее занять нужный угол))

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

куплено 2 одинаковые сервы, но при одном и том же коде одна из них вращается в обратную сторону, т.е. пишу

  servoLeft.write(30); 
  servoRight.write(30); 

а одна из них крутится на 30 градусов по часовой стрелке, другая - на 30 градусов против часовой.

Шо делать?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

если все правильно собрано, в смысле изначальное положение одинаковое, значит резистор неправильно в одном впаяли. перепаять 2 провода и должно решиться

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

вскрывать и перепаивать лень, сделаю для одной из них макрос на вычитание из 180 ;)

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013
на 6 и 9 пине сидят коллекторные моторы (через драйвер), на 10 и 11 пине - сервы.
Библиотека для серв стандартная, вызывается через #include <Servo.h>
Так вот при таком раскладе 9 пин перестает выдавать ШИМ-сигнал и работает как цифровой, т.е. либо 0, либо 1 на выходе и мотор гонит на полную.
Если закомментировать строчку servoLeft.attach(10), отвечающую за серву на 10 пине, то ШИМ на 9 пине снова работает.
При этом ШИМ на пине 6 работает всегда корректно, даже если строки servoLeft.attach(10)  и servoRight.attach(11) активны.
Другие пины использовать не выйдет, они заняты и плата уже разведена :( 
Arhat109-2
Offline
Зарегистрирован: 24.09.2015

9 и 10 пины - это один таймер2. Вполне возможно, что разные библиотеки настраивают его по-разному. Не хочется, а придется перебрасывать что-то и куда-то. Увы.

std
Offline
Зарегистрирован: 05.01.2012

Зачем советуют при рывках серво ставить на жёлтый провод конденсатор 1 мкФ? Он же растянет фронты, не? Или может для сервы надо и не PWM вовсе а гладкий аналоговый сигнал нужного уровня от 0 до Vcc? Было бы зашибись.

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

std пишет:

Зачем советуют при рывках серво ставить на жёлтый провод конденсатор 1 мкФ? Он же растянет фронты, не?

сгладит хотя, думается что  1 мкФ многовато, но скорее всего рывки сервы происходят из-за неровного ШИМа, с перебоями.

std пишет:
Или может для сервы надо и не PWM вовсе а гладкий аналоговый сигнал нужного уровня от 0 до Vcc? Было бы зашибись.

Вот тут облом, ей таки нужОн PWM. но при определенном почесывании репы возможно сделать попытку адаптировать и под аналоговый сигнал. Но самый верный вариант  сделать преобразователь аналог-ШИМ тогда управляться будет любая серва. как вариант раскурочить сервотестер, подать аналоговое напряжение вместо   среднего отвода потенциометра иии - "ну чем я не ниндзя?!"

agent_CIA
Offline
Зарегистрирован: 24.05.2016

 Две ардуино UNO и ProMini.

3 сервопривода постоянного вращения и 8 с фикс. углом поворота.

UNO - принимает сигнал с 3 потенциометров, отдает ШИМ на серво пост. вращения + 3 кнопки переключения режимов работы программы.

ProMini - принимает сигнал с 4 потенциометров, отдает ШИМ на серво с фикс. углом поворота + вывод информации на LCD.

Связь между платами по UART (на 01 и 02 пинах).

Подскажите как правильно все это запитать.. от одного источника питания

maxvalin
Offline
Зарегистрирован: 22.02.2016

ищу тему о контроллерах ESC, но как - то не нашел разжованной до конца. Столкнулся вот с проблемой: заваял 2560 для управлением котлом, написал меню и управлением ШД а также датчиками и.т.д, задачи турбины позложил на безколекторный двигатель. Вот сейчас все лежит на столе (двиг и AE-45A ESC) но я понял что вот взять какую то переменную и оперировать с ней чтоб турбина моя вращалась с разными скоростями наверное не получится(((  Затык начинается из того что подключение противоречит питанию. Мне не надо чтоб с ESC было еще 5вольт, как тогда его подключить? Убрать красный? или черный? Белый подаст сигнал на него но в купе же навеное должен с "чем то" подать... как то так.

 Да и сам скетч, как крутить двиг , имея переменную какю-то для изменения оборотов?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да просто все. нужна либа для сервы и управляется как сервой, чем больше значение тем быстрее будет крутится. + подашь будет стоять. 180 максимум оборотов. чтобы не использовать с esc 5В просто не подключай красный. белый и черный обязательно

maxvalin
Offline
Зарегистрирован: 22.02.2016

Вот то то же!! только черный! А где же это было написанно?)))

подключился вот так . Но скетч теперь пилю с просторов, пока что без успехов((

с примеров ничего не получается( пикает по казному и все

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да все просто. практически все сигналы подаются относительно земли, черный это земля

ты сервой когда нибудь управлял?

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

#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
 
void setup(){ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
  myservo.write(0);
  delay(1500);
  myservo.write(180);
  delay(1500);
  myservo.write(30);
} 
 
void loop(){ 
} 

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

ну сервой проще конечно, а тут еще надо настроить драйвер, хотя вроде можно и без настройки

maxvalin
Offline
Зарегистрирован: 22.02.2016

ноль(((

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

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

п.с по рампсу я 4 пин использую но разницы думаю нету. он реагирует пиликаньем на прошивки 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

у тебя то есть не ардуина? честно сказать не хочу даже разбираться можно ли этой платой как ардуиной пользоваться

я управлял так с калибровкой: 0 пик-пик 180 пик-пик 20-30 пиииииик и мотор заводился. вот сколько он пикает по времени надо и записать в код. хотя вроде как достаточно без калибровки. 0 пик-пик и 30 например подаем он заводится

maxvalin
Offline
Зарегистрирован: 22.02.2016

Ардуино мега конечно! только сверху шилд с 3д принтера, но не суть, он рабочий шил этот. Пиликанье уже достало чесслово((

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

пипец..

[code]
#include <Servo.h>

Servo esc;
int incomingByte = 0;

void setup() {
  Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
  esc.attach(4);
  esc.write(0);
  calibrate();
}

void loop() {

  // send data only when you receive data:
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.parseInt();
  }
  Serial.print("Motor-Value: ");
  Serial.println(incomingByte, DEC);
  esc.write(incomingByte);
  delay(15);
}

void calibrate() {
  esc.write(2000);
  delay(3000);
  esc.write(700);
  delay(2000);
  esc.write(0);
}


[/code]

 

maxvalin
Offline
Зарегистрирован: 22.02.2016

глаза на лоб...

в общим накопал то что регулятор надо еще программировать.

Он ходит между пунктами программ(судя по даташиту и пиликанью)

А вот что дальше с этим делать, КАК ЗАСТАВИТЬ тупо принимать частоту на входе и крутить движек?!!

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ты меня не понимаешь. тебе бы помогла бы такая штука

 

maxvalin
Offline
Зарегистрирован: 22.02.2016
[code]
#include <Servo.h>
Servo moy; 
int value = 0;
int val = 0;






void setup() {
  Serial.begin(9600);
  moy.attach(4);
  delay(1);
  moy.write(10);
  delay (5000);

}

void loop() {
  
   
    if(Serial.read() ==  '1')
    {
      value =3000;
      
      }
      delay (500);
    if(Serial.read() ==  '2')
      {
        value =500;
        }
        delay (500);
       
    
   moy.write(value);
   Serial.println(value);
   
}
[/code]

Помогла бы конечно, но нет ее под рукой!

пробовал настроить этим скетчем , типо двигаю регулятором минимум и максимум (на пиндосском форуме что-то подобное)

когда он пропиликивает пункты меню. Ничего не дает! хрень полная!!!Делал это после калибровки min и max / Убил день, попортил глаза напроч!!! 

НИКТО толком не помог(( А ты говоришь что я еще чтото не понимаю?!

Мож я просто уже зациклился и мне пристрелится хочется ибо времени нет сидеть, и так молился на телефон чтоб он сц..ка не звонил в течении дня, чтоб опять на работу не выдернули!

 

Мля..ть элементарное, по пунктам, как настроить регулятор 

ESC AE-*

 для работы с ардуино! НЕТ! 

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

не истери, все норм, просто ты не имеешь опыта, вот и нет веры

завтра пиши разберемся. но если истерика продолжится не гони если что

maxvalin
Offline
Зарегистрирован: 22.02.2016

Нарыл полупереведенную инструкцию к нему вроди как, мыслю переменным резистором запрограммировать, нужно только помоч разобраться, сколько ему надо чтоб он понял "газ на максимум", нейтраль и "газ на минимум"  

не понял как сюда пдф пихать(  

https://www.dropbox.com/s/powqmx9jppshdd3/plush_rus.pdf?dl=0

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

есть же пример knob к библиотеке серво. играйся пока не поймешь

/* 
 Controlling a servo position using a potentiometer (variable resistor) 
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> 

 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://arduino.cc/en/Tutorial/Knob
*/

#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
 
int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin 
 
void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
} 
 
void loop() 
{ 
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                  // sets the servo position according to the scaled value 
  delay(15);                           // waits for the servo to get there 
} 

 

maxvalin
Offline
Зарегистрирован: 22.02.2016

запустил, позже опишусь.

maxvalin
Offline
Зарегистрирован: 22.02.2016

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

[code]
#include <Servo.h>//Using servo library to control ESC
Servo esc; //Creating a servo class with name as esc
void setup()
{
esc.attach(A4); //Specify the esc signal pin,Here as D8
esc.writeMicroseconds(1000); //initialize the signal to 1000
Serial.begin(9600);
}
void loop()
{
int val; //Creating a variable val
val= analogRead(A9); //Read input from analog pin a0 and store in val
val= map(val, 0, 1023,1000,2000); //mapping val to minimum and maximum(Change if needed) 
esc.writeMicroseconds(val); //using val as the signal to esc
}
[/code]

 

maxvalin
Offline
Зарегистрирован: 22.02.2016

интересно на сколько медленно можно закрутить безколлекторный двигатель? иначе как вращатель напечатаной турбины он не годится(((

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

турбину разрывает?

maxvalin
Offline
Зарегистрирован: 22.02.2016

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

3д принтер далеко не совершенство, сейчас ищу альтернативный чертеж вентилятора по типу "улитка", он на много эффективней при меньших оборотах. Вот вопросик и вылез, как заставить безколлектроник крутится медленей (800-2000) примерно.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

бк моторы имеют параметры kv. бери с более низким

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

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

maxvalin пишет:

ноль(((

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

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

п.с по рампсу я 4 пин использую но разницы думаю нету. он реагирует пиликаньем на прошивки 

Если у тебя готовый спидконтроллер (ESC) то программировать ни чего не надо. включаешь к нему двигатель, подаешь на контроллер питание. Управляющий провод (средний), на него подаешь шим прямо от выхода ардуины, относительно земли(черный). и все.. используешь библиотеку Servo и программируешь ШИМ. 

Значение управляющего сигнала, как и для сервы от 700 до 2400 мс 1510=среднее положение, на случай если твой контроллер понимает реверс.

maxvalin пишет:

 Вот вопросик и вылез, как заставить безколлектроник крутится медленей (800-2000) примерно.

Как уже правильно писали, у БК моторов есть КВ(KV) Это число оборотов на вольт, например если питаешь мотор с КВ=1000 от 12Вольт, то он сможет разогнаться до 12000 оборотов.  Но стартуют эти моторы не с нуля, в контроллерах обычно зашит параметр минимума с которого можно стартовать, при этом он игнорирует управляющий запрос(ШИМ) если требуются более низкие обороты он просто не вращается, но когда потребность достигнет заданного минимума, резко стартует на этих оборотах(так написаны микропрограммы в ESC).

Для случаев если БК мотор требуется использовать в качестве сервопривода, регулятор делают отдельно и софт к нему конфигурят заливают из собственных соображений.

И кстати, моторы с низким KV имеют значительно меньшие токи потребления, но значительно более высокие крутящие моменты.

 

maxvalin
Offline
Зарегистрирован: 22.02.2016

Probelzaelo пишет:

И кстати, моторы с низким KV имеют значительно меньшие токи потребления, но значительно более высокие крутящие моменты.

то то мне и надо)) 

вот только придется теперь перезаказывать, двиг. Мой оказывается на 2700Kv. Как для самолета, по идее надо искать автомобильный...

По подключению и настройке теперь уже понятно, опыт приходит со временем)

auditordik
auditordik аватар
Offline
Зарегистрирован: 19.11.2016

Прога для управлением двумя сервами актуальна . Ребята ставят зеркала с сервой (настройка с торпеды)  на старые машины , а что с ними делать ? В сервисе дорого , купить управление . А самому поставить пару джойстиков , и пару дешёвых ардуинок по 50 рублей , джойстика с Китая по 25 . Итого 100 рублей сам блок получиться . Скетчей в инете не мерено . Ну и руки приложить немного . Серва рулит )