Управление камерной площадкой с сохранением текущей позиции

Нет ответов
Gavrila
Offline
Зарегистрирован: 02.02.2016

Здравствуйте!

Наткнулся в интернете на данное видео https://www.youtube.com/watch?v=Nlvvvr9frJo

Хотелось бы понять ,как было осуществлено сохранение позиции серв когда джойстик возвратился в исходное положение.

Взяв обычный код, для управление джойстиком  двумя сервами :


#include

const int servo1 = 3; // первая серва

const int servo2 = 10; // вторая серва

const int joyH = 3; // выход L/R джойстика Parallax

const int joyV = 4; // выход U/D джойстика Parallax

int servoVal; // переменная для хранения данных с аналогового пина

Servo myservo1; // создаем объект Servo для управления первой сервой

Servo myservo2; // создаем объект Servo для управления второй сервой

void setup() {

// Servo

myservo1.attach(servo1); // подключаем серву

myservo2.attach(servo2); // подключаем серву

// Инициализация серийного протокола связи

Serial.begin(9600);

}

void loop(){

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

outputJoystick();

// считываем значение с джойстика по горизонтали (значение между 0 и 1023)

servoVal = analogRead(joyH);

servoVal = map(servoVal, 0, 1023, 0, 180); // масштабируем полученное значение для использования с серводвигателем (результат возвращается в диапазоне от 0 до 180)

myservo2.write(servoVal); // выводим ротор сервы в положение в соответствии с полученным масштабированным значением

// считываем значение джойстика вдоль вертикальной оси (значение от 0 до 1023)

servoVal = analogRead(joyV);

servoVal = map(servoVal, 0, 1023, 70, 180); //масштабируем полученное значение для использования с сервой (диапазон: от 70 до 180)

myservo1.write(servoVal); // выводим ротор второй сервы в соответствии с полученным масштабированным значением

delay(15); // ждем, пока серва обеспечит заданное положение

}

/**

* отображаем значения джойстика

*/

void outputJoystick(){

Serial.print(analogRead(joyH));

Serial.print ("---");

Serial.print(analogRead(joyV));

Serial.println ("----------------");

}

Задал те положения джойстика, при которых не надо управлять сервами. 

#include <Servo.h> 

Servo myservo1; 
Servo myservo2; 

byte pos1 = 90; 
byte pos2 = 90; 

String inputString = ""; 
boolean stringComplete = false; 

void setup() 
{ 
myservo1.attach(9); 
myservo2.attach(8); 
Serial.begin(9600); 
inputString.reserve(200); 
} 

void loop() 
{ 
if (stringComplete) { 
pos1 = inputString[0]; 
pos2 = inputString[1]; 
myservo1.write(pos1); 
myservo2.write(pos2); 
delay(15); 
inputString = ""; 
stringComplete = false; 
} 
} 

void serialEvent() { 
while (Serial.available()) { 
char inChar = (char)Serial.read(); 
inputString += inChar; 
if (inChar == '\n') { 
stringComplete = true; 
} 
} 
}

Серва начала крутить до упору и не останавливаться.

Далее пришла в голову идея убрать из сервы патенциометр ФИЗИЧЕСКИ, и все получилось, не буду в даваться в технические подробности=). Но возникли другие проблемы, хлипкость конструкции , так как потенциометр являлся валом одной из шестеренок ,а тот вал который поставил я не очень прочно крепиться. (Серва TOWER Pro MGG90).

В интернете нет по данной истории ровным счетом ничего, кроме выше изложенного видео.

Подскажите пожалуйста куда копать, в какую степь, какая логика написания должна быть.

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