чтобы серво оставался в текущем положении, когда я вызывают `attach()`

Фермер
Offline
Зарегистрирован: 22.01.2020

У меня есть серво *SG90*.

Когда я вызываю `attach()` он перемещается в положение по умолчанию (93) или куда его поставлю перед этим с помощью `write()`.

Я бы хотел, чтобы серво оставался в текущем положении, когда я вызывают `attach()` в `setup()`.

Как бы этого добиться?

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Ну - это сложно! Но если Вы представите программу и схему подключения это станет малость попроще.

zhekaus
Offline
Зарегистрирован: 17.04.2018

Фермер пишет:

 

Как бы этого добиться?

 

 

Я так понимаю, Вы используете библиотеку Servo. Боюсь, что с помощью этой библиотеки вы не сможете добиться желаемого эффекта. При вызове метода attach(), серво перейдет в среднее положение. Ну или, как Вы сказали, в то положение, которые задали перед этим. Но, к сожалению, вы не знаете где на самом деле стоит серво, пока не будет вызван attach или write.

 

leks
Offline
Зарегистрирован: 22.10.2017

Фермер пишет:

У меня есть серво *SG90*.

Когда я вызываю `attach()` он перемещается в положение по умолчанию (93) или куда его поставлю перед этим с помощью `write()`.

Я бы хотел, чтобы серво оставался в текущем положении, когда я вызывают `attach()` в `setup()`.

Как бы этого добиться?

 

Для этого надо подпаяться к центральному выводу потенциометра внутри сервы и вывести провод на А0 Ардуины.

Фермер
Offline
Зарегистрирован: 22.01.2020

leks пишет:

Для этого надо подпаяться к центральному выводу потенциометра внутри сервы и вывести провод на А0 Ардуины.

Вы предлагаете разобрать серво? :-O

А при чем здесь A0? :/

Объясните, пожалуйста, подробней

 

leks
Offline
Зарегистрирован: 22.10.2017

Фермер пишет:

 

Объясните, пожалуйста, подробней

 

В сервоприводе качалка и вал потенциометра жестко связаны. Напряжение снимаемое с потенциометра на А0 (например) даст Ардуино "знание" где качалка сейчас, а потом Ардуина выставит качалку на известный ей угол, т.е. оставит качалку на месте исходном. Как раз балуюсь этой затеей, могу скинуть схемку, фотки, скетч для имитатора механического таймера на SG90. 

Фермер
Offline
Зарегистрирован: 22.01.2020

leks, любопытно! Прямо хакерство какое-то. )) Так у Вас получилось или пока только пробуете? )

А то ведь эти серво - просто беда какая-то. Жужжания, лаги вские победил резиками и кондёрами. А вот стартовый скачок - никак, перерыл кучу форумов... 

leks
Offline
Зарегистрирован: 22.10.2017

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

leks
Offline
Зарегистрирован: 22.10.2017
#include <Servo.h>

Servo myservo;

int posS = 0;//переменная для значений угла поворота сервопривода
int posR = 0;//переменная для вычисленных значений угла по обратной связи
void setup() {
  myservo.attach(8);
  Serial.begin(9600);
  /////////////////////
  for (posS = 0; posS <= 180; posS += 5) {
    myservo.write(posS);
    delay(1000);
    // posR=analogRead(A0);//исходная строка для получения формулы
    posR = (analogRead(A0) - 75) / 3; //опытная формула 
    Serial.print("УГЛЫ  "); Serial.print(posS);
    Serial.print("  "); Serial.println(posR);
  }
  ////////////////////
}
void loop() {
}

Вот тестовый скетч.

 

leks
Offline
Зарегистрирован: 22.10.2017

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

Фермер
Offline
Зарегистрирован: 22.01.2020

Круто, буду втыкать! Разберу один...

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Фермер пишет:

Круто, буду втыкать! Разберу один...

Если начальное положение не важно, а нужно что бы просто не дергалось при включении, то можно обойтись и без разбирания. Просто вызывайте attach() не в начале, а когда уже потребуется повернуть серву на нужный угол.

Фермер
Offline
Зарегистрирован: 22.01.2020

asam пишет:

Фермер пишет:

Круто, буду втыкать! Разберу один...

Если начальное положение не важно, а нужно что бы просто не дергалось при включении, то можно обойтись и без разбирания. Просто вызывайте attach() не в начале, а когда уже потребуется повернуть серву на нужный угол.

В смысле? Он же все равно метнется туда из текущего положения на максимальной скорости. Не вижу разницы.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Но метнётся он в нужный момент.

Фермер
Offline
Зарегистрирован: 22.01.2020

sadman41 пишет:

Но метнётся он в нужный момент.

Это понятно. attach/detach можно делать когда нужно.

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

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Про "конкретно и плавно" ничего написано не было.

Фермер
Offline
Зарегистрирован: 22.01.2020

Ну, я ведь тоже не спрашивал, как сделать чтобы серво метался в нужном направлении «в нужный момент», верно? ;-)

С этим мне все понятно.

Мне нужно то, что я спросил - чтобы серво оставался в текущем положении, когда вызывается attach.

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

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

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

Фермер
Offline
Зарегистрирован: 22.01.2020

Пришла другая идея. Ловить процесс обесточивания, выкрадывать несколько микросекунд на запись последнего положения в ПЗУ, которое применять при следующему запуске непосредственно перед .attach.

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Фермер пишет:

Пришла другая идея. Ловить процесс обесточивания, выкрадывать несколько микросекунд на запись последнего положения в ПЗУ, которое применять при следующему запуске непосредственно перед .attach.

 

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Кроме FRAM и EERAM еще можно.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

sadman41 пишет:

Кроме FRAM и EERAM еще можно.

В малых размерах FRAM, вроде, заметно дешевле будет.

Фермер
Offline
Зарегистрирован: 22.01.2020

А чем EEPROM на самой ардуине не подойдет?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Сложней контроль.

Фермер
Offline
Зарегистрирован: 22.01.2020

sadman41 пишет:

Сложней контроль.

Контроль чего?... 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Того, чего собрались ловить - падения напряжения.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Фермер пишет:

А чем EEPROM на самой ардуине не подойдет?

EEPROM имеет хоть и большое, но ограниченное количество циклов перезаписи. Поэтому решение - ловить пропадание питания и писать в этот момент, вполне разумное, но относительно сложно реализуемое. 

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