Официальный сайт компании Arduino по адресу arduino.cc
Управление камерной площадкой с сохранением текущей позиции
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здравствуйте!
Наткнулся в интернете на данное видео 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).
В интернете нет по данной истории ровным счетом ничего, кроме выше изложенного видео.
Подскажите пожалуйста куда копать, в какую степь, какая логика написания должна быть.
Возможно ли исключить как то программно получение информации с сервы о ее место положение, что б не удалять потенциометр физически.