Помогите! Пульт ДУ для самолета (Летающее крыло)

Wiring, Processing, библиотеки

Помогите! Пульт ДУ для самолета (Летающее крыло)

Сообщение KaravayMax » 06 ноя 2015, 12:08

Всем день добрый. Мучался около недели, потом психанул и все удалил. Но детали куплены и все равно муляет меня. Пожалуйста помогите. Использую Ардуину Нано, 2 сервы и джойстик. По поводу передачи сигнала по радиосигналу я разобрался. Но вот написать скетч чтоб при оттягивании влево-вправо джойстика у меня сервы двигались в разные стороны, а при вверх-вниз в одну сторону, ну никак не получается... Прилагаю фоты как это должно быть. Помогите....
Изображение
Изображение
Изображение
Изображение
KaravayMax
 
Сообщения: 6
Зарегистрирован: 06 ноя 2015, 12:00
programming: Arduino

Re: Помогите! Пульт ДУ для самолета (Летающее крыло)

Сообщение admin » 09 ноя 2015, 12:05

и в чём сложность?

Код: Выделить всё
if(joystick_up) {
    make_servos_up();
}
if(joystick_down) {
    make_servos_down();
}

и т.п. :)
Аватара пользователя
admin
Администратор
 
Сообщения: 315
Зарегистрирован: 05 май 2011, 14:57
Откуда: Калининград

Re: Помогите! Пульт ДУ для самолета (Летающее крыло)

Сообщение KaravayMax » 10 ноя 2015, 09:58

Если есть возможность, напишите код пожалуйста, чтоб я его разобрал и понял... Потому что не понимаю как это сделать, когда 2 сервы завязаны на двух потенциометрах, и чтоб выполняли разные повороты в зависимости движения джойстика.
KaravayMax
 
Сообщения: 6
Зарегистрирован: 06 ноя 2015, 12:00
programming: Arduino

Re: Помогите! Пульт ДУ для самолета (Летающее крыло)

Сообщение admin » 10 ноя 2015, 11:54

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

Код: Выделить всё
pot_x_val = analogRead(pot_x_pin);    // считываем значение с потенциометра

if(pot_x_val > 512) { // если джойстик смещён вправо
  // переводим в градусы смещения сервомашинки: от 0 до 90 градусов относительно среднего положения
  val = map(pot_val - 512, 0, 512, 0, 90);
  // смещение серв в разные стороны
  servo1.write(90 + val);
  servo2.write(90 - val);
}


Практическое программирование Arduino/CraftDuino - Аналоговый ввод – потенциометр
Программирование Arduino - библиотека Servo
Аватара пользователя
admin
Администратор
 
Сообщения: 315
Зарегистрирован: 05 май 2011, 14:57
Откуда: Калининград

Re: Помогите! Пульт ДУ для самолета (Летающее крыло)

Сообщение KaravayMax » 10 ноя 2015, 12:02

Спасибочки.... Попробую на этой основе все сделать.... )))))))))))))))))))
KaravayMax
 
Сообщения: 6
Зарегистрирован: 06 ноя 2015, 12:00
programming: Arduino

Re: Помогите! Пульт ДУ для самолета (Летающее крыло)

Сообщение KaravayMax » 10 ноя 2015, 18:53

Не понимаю. Что не так... ((((
Почему они в одну сторону крутятся... :( :( :(
Код: Выделить всё
#include <Servo.h>

Servo servo1;  // create servo object to control a servo
Servo servo2;

int pot_x_pin = 0;  // analog pin used to connect the potentiometer
int pot_x_val;    // variable to read the value from the analog pin
int val;
int val1;
int pot_val;

void setup()
{
  Serial.begin (9600);
  servo1.attach(7);  // attaches the servo on pin 9 to the servo object
  servo2.attach(5);
}

void loop()
{
 pot_x_val = analogRead(pot_x_pin);    // считываем значение с потенциометра

if(pot_x_val < 516) { // если джойстик смещён вправо
  // переводим в градусы смещения сервомашинки: от 0 до 90 градусов относительно среднего положения
  val = map(pot_x_val - 512, 0, 516, 0, 90);
  // смещение серв в разные стороны
  servo1.write(90 + val);
  servo2.write(90 - val);
}
if(pot_x_val > 518) { // если джойстик смещён вправо
  // переводим в градусы смещения сервомашинки: от 0 до 90 градусов относительно среднего положения
  val1 = map(pot_x_val - 512, 0, 518, 0, 90);
  // смещение серв в разные стороны
  servo1.write(90 - val1);
  servo2.write(90 + val1);
}

}
KaravayMax
 
Сообщения: 6
Зарегистрирован: 06 ноя 2015, 12:00
programming: Arduino

Re: Помогите! Пульт ДУ для самолета (Летающее крыло)

Сообщение KaravayMax » 10 ноя 2015, 22:39

ПОЛУЧИЛОСЬ :dan_ser: :dan_ser: :dan_ser:

Если есть советы как упростить.... Милости просим, приму всё во внимание.... Админчик, спасибо....

Либо есть совет как смягчить поворот серво, потому что немного жестковато поворачивает, пожалуйста, известите... )))

Код: Выделить всё
#include <Servo.h>

Servo myservo;

Servo servo1;
Servo servo2;

int pot_x_pin = 0;
int pot_y_pin = 1;
int pot_x_val;   
int pot_y_val; 
int val;

void setup()
{
  Serial.begin (9600);
  servo1.attach(5);
  servo2.attach(7);
}

void loop()
{
pot_x_val = analogRead(pot_x_pin);    // считываем значение с потенциометра
pot_y_val = analogRead(pot_y_pin);

/*
Serial.print ("X=");
Serial.println (pot_x_val);
Serial.print ("Y=");
Serial.println (pot_y_val);
delay (800);
*/

//-------------------------------------------------------------------------------------------------------

if(pot_x_val > 518)// если джойстик смещён вправо
  {
    // переводим в градусы смещения сервомашинки: от 0 до 90 градусов относительно среднего положения
    val = map(pot_x_val - 518, 0, 506, 0, 90);
    // смещение серв в разные стороны
    servo1.write(90 + val);
    servo2.write(90 - val);
  }

if(pot_x_val < 515)// если джойстик смещён вправо
  {
    // переводим в градусы смещения сервомашинки: от 0 до 90 градусов относительно среднего положения
    val = map(pot_x_val, 513, 1024, 0, 90);
    // смещение серв в разные стороны
    servo1.write(90 + val);
    servo2.write(90 - val);
  }

//-------------------------------------------------------------------------------------------------------------
 
if(pot_y_val > 488)// если джойстик смещён вправо
  {
    // переводим в градусы смещения сервомашинки: от 0 до 90 градусов относительно среднего положения
    val = map(pot_y_val - 488, 0, 536, 0, 90);
    // смещение серв в разные стороны
    servo1.write(90 + val);
    servo2.write(90 + val);
  }

    if(pot_y_val < 484)// если джойстик смещён вправо
  {
    // переводим в градусы смещения сервомашинки: от 0 до 90 градусов относительно среднего положения
    val = map(pot_y_val, 486, 1024, 0, 90);
    // смещение серв в разные стороны
    servo1.write(90 + val);
    servo2.write(90 + val);
  }

}
KaravayMax
 
Сообщения: 6
Зарегистрирован: 06 ноя 2015, 12:00
programming: Arduino


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

© 2009-2017 |  О проекте  |  Политика Конфиденциальности  |