1. Уважаемый Гость! При написании вопросов в раздел форума [ArduCopter] Вопросы, проблемы и решения обязательно придерживаться шаблона сообщения, оговоренного в правилах раздела! Если сообщение не будет оформлено должным образом, то и ответ на вопрос будет с наименьшим приоритетом. Старайтесь дать максимально полную информацию по вашей проблеме, чтобы можно было более детально рассматривать вопрос!
    Скрыть объявление
  2. Уважаемый Гость! Хотите получать кэшбэк с покупок в online-магазинах? Сервис "Zozi.ru" дает такую возможность!
    Скрыть объявление
  3. Друзья! Для нашего ресурса необходим дополнительный объем пространства в облаке Dropbox. Подробнее.
    Скрыть объявление

RSSI антенна трекер

Тема в разделе "GCS (Ground Control Station), наземная станция", создана пользователем 5yoda5, 5 июн 2016.

Реклама. Купить это место.
  1. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Последнее редактирование: 7 июл 2016
  2. Игорюшка Владимирович

    Игорюшка Владимирович Кандидат наук

    Регистрация:
    8 апр 2015
    Сообщения:
    1.176
    Город:
    г Орёл
    Имя:
    Игорь
    Ну, ты барин, задачи ставишь ... Тут одному не справиться... (Некто Кузнец)
    Знал бы прикуп... Если есть видео сигнал - его можно кака-то измерить : ведь переключается же монитор на синий экран. Стоит какой-нить компаратор в нём, и он скотина точно знает, когда переключать. Если "по совковому" - найти вход этой волшебной схемки. Хотя ... два монитора (да ещё с синим экраном !) в качестве датчиков - эт, пожалуй перебор. :roflmao:
    Надо взрослых мальчиков спрашивать, но : уже точно были преценденты и даже схемка (кажись) в копофоруме.:thumbsup:
    Тогда и код проще - никаких запоминаний "обстановки" (что само по-себе неэффетивно - я специально следом взлечу !!!:rolleyes:)
     
  3. LampGraph

    LampGraph Кандидат наук

    Регистрация:
    16 ноя 2015
    Сообщения:
    1.229
    Город:
    Абакан
    Имя:
    Вячеслав
    С помощью lm1881 можно определить "качество" видеосигнала, но недостаточно для того что бы наводить антенну.
    Если ты следом взлетишь будет не важно на твой или на мой аппарат будет направлена антенна, картинку будем смотреть непредсказуемо. Для этого и существуют переключения каналов и всякие диверсити. Наша задача подразумевает что мы видим картинку в мониторе достаточно хорошо что бы лететь по FPV и лететь далеко (ибо близко направленная антенна не нужна), соответственно все сторонние помехи будут не такими сильными что бы испортить видеосигнал, а значит RSSI от нашего передатчика будет максимальным в окружении. Вот когда он снизится до уровня окружающих излучателей - вот тогда и нужно "запоминание обстановки" что бы повернуться в сторону аппарата и ждать, а не отворачиваться к сотовой вышке.
     
    raefa нравится это.
  4. romT

    romT Студент

    Регистрация:
    5 июн 2016
    Сообщения:
    27
    Город:
    MSK_KLG
    Имя:
    Роман
    Парни привет! я вернулся с отдыха, вижу вы тут серьезно за дело взялись) ближайшее время доберусь до мастерской сфоткаю свое хоз-во.
    и самое главное код(логика и математичка поведения серв на сигнал с приеника RSSI) (есть у кого желание перевести на алгоритмический язык для тех кто не желает разобраться с кодом ардушным?мне если честно то совсем некогда):

    #include <Servo.h>
    int period = 300;
    int v_toleranz = 3;
    int h_toleranz = 2;
    int predel = 85;
    int Vert_centr = 75;
    int Hori_centr = 90;
    int calibrate1 = 0;
    int calibrate2 = 0;

    Servo servoVer;
    Servo servoHor;

    int rssi1 = A0;

    #define SPKR 13

    int rssiTrack = 0;
    int prohod = 0;
    int rssiTrackOld = 0;
    int rssiDiv = 0;
    int i = 0;
    int y = 0;
    char napravlenie;
    char Vert_napravlenie;

    void setup()
    {
    servoVer.attach(10); // attaches the servo on pin
    servoVer.write(Vert_centr);
    servoHor.attach(9); // attaches the servo on pin
    servoHor.write(Hori_centr);
    y = Hori_centr;

    Serial.begin(9600);

    for (i = 0; i < 10; i++)
    {
    calibrate1 = calibrate1 + analogRead(rssi1);
    delay(25);
    }
    calibrate1 = calibrate1 / 10;

    pinMode(SPKR, OUTPUT); //set the speaker (Alarms) as output
    digitalWrite(SPKR, HIGH);
    delay(500);
    digitalWrite(SPKR, LOW);
    delay(2500);
    }

    void loop()
    {

    // Map values to defined range
    rssiTrack = map(analogRead(rssi1), 0, calibrate1, 0, 100);
    if (rssiTrack > 100)
    {
    rssiTrack = 100;
    }

    Serial.println(rssiTrack);
    Serial.println(" ");

    if (rssiTrack <= predel)
    {
    trackHorizontal();
    }
    eject:
    delay(period);
    }

    void trackHorizontal()
    {
    i = Hori_centr;
    do
    {
    rssiTrackOld = rssiTrack;
    rssiTrack = map(analogRead(rssi1), 0, calibrate1, 0, 100);
    if (rssiTrack > 100)
    {
    rssiTrack = 100;
    }

    rssiDiv = (rssiTrack - rssiTrackOld);
    if (rssiDiv <= 0)
    {
    rssiDiv = rssiDiv * -1;
    }

    if (((rssiTrack + rssiTrack) / 2) <= 50)
    {
    digitalWrite(SPKR, HIGH);
    }
    else
    {
    digitalWrite(SPKR, LOW);
    }

    if ( rssiDiv <= h_toleranz )
    {

    if (rssiTrack <= 45)
    {
    servoVer.write(Vert_centr);
    if (i >= Hori_centr)
    {
    i = i - 30;
    napravlenie = 'L';
    }
    else
    {
    i = i + 30;
    napravlenie = 'R';
    }
    }
    else
    {

    trackVertikal();
    }
    }
    else
    {
    if (rssiTrack > rssiTrackOld)
    {
    if (napravlenie == 'L')
    {
    i = i + 10;
    napravlenie = 'L';
    }
    else
    {
    i = i - 10;
    napravlenie = 'R';
    }
    }
    else
    {
    if (napravlenie == 'R')
    {
    i = i + 10;
    napravlenie = 'L';
    }
    else
    {
    i = i - 10;
    napravlenie = 'R';
    }
    }

    }

    servoHor.write(i);

    if (i <= 0 || i >= 180)
    {
    i = Hori_centr;
    servoHor.write(Hori_centr);
    servoVer.write(Vert_centr);
    goto eject;
    }
    delay(period);
    }
    while (rssiTrack <= 98);

    eject:

    return;
    }


    void trackVertikal()
    {
    int loopi;

    loopi = 0;

    do
    {
    rssiTrackOld = rssiTrack;
    rssiTrack = map(analogRead(rssi1), 0, calibrate1, 0, 100);
    if (rssiTrack > 100)
    {
    rssiTrack = 100;
    }
    rssiDiv = (rssiTrack - rssiTrackOld);
    if (rssiDiv <= 0)
    {
    rssiDiv = rssiDiv * -1;
    }

    if ( rssiDiv <= h_toleranz )
    {

    if (rssiTrack <= 45)
    {
    y = Vert_centr;
    servoVer.write(y);
    return;
    }
    else
    {
    }
    }
    else
    {
    if (rssiTrack > rssiTrackOld)
    {
    if (Vert_napravlenie == 'O')
    {
    y = y - 5;
    Vert_napravlenie = 'O';
    }
    else
    {
    y = y + 5;
    Vert_napravlenie = 'U';
    }
    }
    else
    {
    if (Vert_napravlenie == 'U')
    {
    y = y - 5;
    Vert_napravlenie = 'O';
    }
    else
    {
    y = y + 5;
    Vert_napravlenie = 'U';
    }
    }

    }

    servoVer.write(y);

    if (y <= 10 || y >= 100)
    {

    y = Vert_centr;
    goto eject;
    }
    delay(period / 3);

    loopi++;
    }
    while (loopi <= 4);

    eject:

    return;
    }
    [​IMG]
     
    Последнее редактирование модератором: 7 июл 2016
  5. romT

    romT Студент

    Регистрация:
    5 июн 2016
    Сообщения:
    27
    Город:
    MSK_KLG
    Имя:
    Роман
    https://cloud.mail.ru/public/C5zi/Db4SodHgC
    тут схема простейшего диверсити для видеосигнала, испульзуется копеечный cd4066 комутатор, отечественный аналог к561кт3, собирал себе на макетке 20мин. фирменый диверсити от иглов собран по такойже схеме
     
  6. Игорюшка Владимирович

    Игорюшка Владимирович Кандидат наук

    Регистрация:
    8 апр 2015
    Сообщения:
    1.176
    Город:
    г Орёл
    Имя:
    Игорь
    Т.е. он именно из двух видеосигналов " выбирает" ? Или РССАй тоже необходим ?
     
  7. romT

    romT Студент

    Регистрация:
    5 июн 2016
    Сообщения:
    27
    Город:
    MSK_KLG
    Имя:
    Роман
    rssi нужен конечно, по схеме входы
    video1
    rssi1
    gnd
    и
    video2
    rssi2
    gnd
    --- Сообщения объединены, 26 июн 2016 ---
    rssi это просто опорное напряжение для оперционника комутатора которое берется из ПЧ тракта приемника, где легко отделить полезный сигнал от шума, как правило это напряжение от нуля до пяти вольт, может использоваться совместно с ару(автоматическая регулировка усиления).
     
  8. Игорюшка Владимирович

    Игорюшка Владимирович Кандидат наук

    Регистрация:
    8 апр 2015
    Сообщения:
    1.176
    Город:
    г Орёл
    Имя:
    Игорь
  9. romT

    romT Студент

    Регистрация:
    5 июн 2016
    Сообщения:
    27
    Город:
    MSK_KLG
    Имя:
    Роман
    в 305 внутри, производители как правило rssi наружу не выводят, в инете куча картинок 305 приемника куда подпаятть выход rssi, это всего один провод
     
  10. Игорюшка Владимирович

    Игорюшка Владимирович Кандидат наук

    Регистрация:
    8 апр 2015
    Сообщения:
    1.176
    Город:
    г Орёл
    Имя:
    Игорь
  11. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Вот мой "стенд" для настольных тестов (пока только одна ось):
    IMG_20160616_232756.jpg IMG_20160616_234539.jpg IMG_20160617_100129.jpg
    В качестве датчика поставил фоторезистор. В трубочку термоусадки вставил фоторезистор, слегка усадил, прикрепил к качалке сервы. У фоторезистора сходное поведение с показаниями РССИ. "Сырые" данные РССИ всё равно надо буферизировать, выйдет примерно так же как фоторезистор, только чуть более шустро.
    Да данный момент оно по одной оси отрабатывает, но стёмно. Бывают так же ошибки.
    Вообще, управление пока очень плохое, даже не хочется код прикладывать.
    Та не менее, вот пока:
    #include <Servo.h>

    Servo servo;

    int angl_old; //переменная для хранения текущего положения угла сервы
    int angl_new; //переменная для считывания с потенциометра
    int feel=5; //переменная чувствительности чем меньше, тем плавнее ход, но возможно дрожание сервы. Чем выше, тем более "дискретное" поведение.
    //пока константой, потом добавить в инит адаптивность от полного диапазона значений
    int rssi_now; //переменная для текущего уровня РССИ
    int rssi_old; //переменная для предыдущего уровня РССИ

    void setup()
    {
    angl_new=0;
    servo.attach(10); //привязываем серву к порту 10
    servo.write(angl_new); //ставим вал в начало
    delay(1500);
    rssi_now=int(analogRead(0)/5);
    Serial.begin(9600);
    do
    {
    Serial.print(rssi_now);
    Serial.print(",");
    Serial.println(angl_new);

    angl_new=angl_new + 5;
    servo.write(angl_new);
    delay(500); // подождать, пока
    rssi_now=int(analogRead(0)/5);
    if (rssi_old<rssi_now)
    {
    rssi_old=rssi_now;
    angl_old=angl_new;
    }
    } while (angl_new<180);
    Serial.print(rssi_old);
    Serial.print("-");
    Serial.print(angl_old);
    Serial.println("end of init");
    servo.write(angl_old); //ставим серву на угол с наибольшим РССИ
    delay(1000); //дадим время пару секунд серве
    angl_new=angl_old;
    }

    void loop()
    {
    rssi_now=int(analogRead(0)/5); //прочтем текущий уровень РССИ
    Serial.print(rssi_now);
    Serial.print(",");
    Serial.println(angl_new);
    if (rssi_now < (rssi_old - feel)) //если уровень РССИ упал - тогда ищем, где спот
    {
    angl_new=angl_new+5;
    servo.write(angl_new); //ставим серву на новый угол - "пробный шар"
    delay(500); //дадим время полсекунды серве
    if ((int(analogRead(0)/5)) > (rssi_now)) ///если РССИ улучшилось тогда крутим серву дальше
    {
    do
    {
    rssi_now=int(analogRead(0)/5);
    angl_new=angl_new+2;
    Serial.print(rssi_now);
    Serial.println("+");
    servo.write(angl_new);
    delay(100);
    } while ((int(analogRead(0)/5)) > (rssi_now));
    //рсси перестало расти - стоп и шаг назад
    angl_new=angl_new-2;
    servo.write(angl_new);
    delay(100);
    }

    if ((int(analogRead(0)/5)) < (rssi_now)) ///если РССИ ухудшилось тогда крутим серву назад
    {
    do
    {
    rssi_now=int(analogRead(0)/5);
    angl_new=angl_new-2;
    Serial.print(rssi_now);
    Serial.println("-");
    servo.write(angl_new);
    delay(100);
    } while ((int(analogRead(0)/5)) > (rssi_now));
    //рсси перестало расти - стоп и шаг назад (вперед)
    angl_new=angl_new+2;
    servo.write(angl_new);
    delay(100);
    }
    rssi_old=rssi_now;
    // Serial.print(rssi_now);
    // Serial.print(",");
    // Serial.println(angl_new);
    }
    angl_old=angl_new;
    if (rssi_now > (rssi_old + feel)) //если уровень РССИ поднялся, то переприсваеваем
    rssi_old=rssi_now;
    //delay(2000);

    }
    Код тупой, прямой, управление линейное.
    Я обязательно изучу внимательно ваш код. Если я правильно понимаю, схематично пока у меня примерно так как у вас - у вас ведь тоже работает от одного переменника.
    Но хотелось бы взглянуть на ваш настольный стенд. Или вы сразу в размере собираете?

    .....
    Не удержался, загнал ваш код в свой стенд. Направление коррекции определяет гораздо лучше, чем у меня.
    У меня есть две проверки "на вшивость"
    1. Черной линейкой медленно начинаю прикрывать "трубку" - серва должна отреагировать, трубка должна встать за линейку (у вас тут отрабатывает четко, мне понравилось)
    2. Держу серву в руках, трубка смотрит на светильник на потолке. Начинаю наклонять серву - должна отреагировать и "гидировать" мои движения.
    Ваш код у меня отработал неуверенно. Как мне перевенную чувствительности надо скорректировать?
    Пока не нашел, где v_toleranz применяется...
     
    Последнее редактирование: 27 июн 2016
    raefa нравится это.
  12. romT

    romT Студент

    Регистрация:
    5 июн 2016
    Сообщения:
    27
    Город:
    MSK_KLG
    Имя:
    Роман
    на фотке моя наземка, постараюсь выбрать время чтобы откоменнтировать код, там могут быть ньюансы так как когда "творил" может где то и накосорезил. так как изначально код писал под диверсити, было два канала контроля RSSI, один приемник с патча что на сервах и второй обычный клевер (я летаю исключительно на 1040 частоте и все мое антенное хозяйство на эту частоту) у меня еще есть два квадрифиляра точно на 1160мгц, но мне они не очень нравяться, хотя и замечательные антенны в сравнении с клевером.
    --- Сообщения объединены, 27 июн 2016 ---
    PS, наземка снизу на магнитах, просто ставлю на крышу авто там где летаю.
     

    Вложения:

  13. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Крутобл. Получается, проект УЖЕ рабочий, а не находится в разработке.
    Дайте ссылку пожалуйста на ваши сервы.

    И было бы шикарно, если была бы видяха отработки АТ по "ближней цели", которая быстро перемещается.
     
  14. LampGraph

    LampGraph Кандидат наук

    Регистрация:
    16 ноя 2015
    Сообщения:
    1.229
    Город:
    Абакан
    Имя:
    Вячеслав
    Сервы слишком медленные для этого
     
  15. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Вот это и хотелось оценить.
     
  16. Игорюшка Владимирович

    Игорюшка Владимирович Кандидат наук

    Регистрация:
    8 апр 2015
    Сообщения:
    1.176
    Город:
    г Орёл
    Имя:
    Игорь
    На близких расстояниях должен "срабатывать" клевер, спасая положение со связью, но радар может потерять цель вообще и переключиться на соседа... Наприер, если коп ( а тем более самолёт) над головой низко пролетит.
    Только БК движок удержит, наверное ... Но там другая засада - там нужны движки от подвесов и регули к ним соответствеющие...
     
  17. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Всему своё время.
    Чтобы не мучать себе голову с логикой регуля-который-не регуль - достаточно взять простой БК подвес, поставить мощные движки и подключить данную систему к входу РУ на контроллере подвеса.
    Но это потом. Пока же - всему своё время.

    .......
    Кстати, по алгоритму. Мне тут подумалось, что параметр "чувствительность" можно вытащить на переменник. Или поставить цифроиндикатор и кнопочками задавать. А значение писать в ЕЕПРОМ.
     
  18. Игорюшка Владимирович

    Игорюшка Владимирович Кандидат наук

    Регистрация:
    8 апр 2015
    Сообщения:
    1.176
    Город:
    г Орёл
    Имя:
    Игорь
    Там ... герАксель ... НЕ отключается ! :roflmao: - я своей телегой чють шкаф не завалил !!! (из серии опробовано на себе).
     
    5yoda5 нравится это.
  19. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    А, ну да, гироаксель.... не канает...
    Значит, надо будет посмотреть коды у того же БруГи (Алексмоса вряд ли исходники найдем), и посмотреть - как именно идет управление ключами. Выдрать эти куски и встроить в виде подпрограмм в данный код. Но плату подвеса (как аппаратную часть) - всё равно можно использовать.

    но
     
  20. Игорюшка Владимирович

    Игорюшка Владимирович Кандидат наук

    Регистрация:
    8 апр 2015
    Сообщения:
    1.176
    Город:
    г Орёл
    Имя:
    Игорь
    попробую http://www.parkflyer.ru/ru/product/990747/#position=250127 - и схема и коды (но... кодЕр я ещё тот :)).
     
  21. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
Реклама. Купить это место.