qczek lrs – 433mhz 1w (30dbm) lora rc link with telemetry - новая народная?
Подскажите как настроить собрал Лору прошивка 1.91 но таранис ругается на низкий уровень сигнала. Хотя вывел уровень на а канал и в нем все ок. Как настроить телеметрию чтоб не ругался таранис
метра хватит
Боюсь в таком случае квадрокоптера не хватит)).
Что касается 1.2 и gps уберите круговую поляризацию с видеоантенны, поставьте v антенну например ну и не вплотную к модулю gps.
10 см от модуля был диполь. Максимум можно 15 см развести. Но думаю это не поможет. Может фильтр нужен?
Первый полет вдаль на 10 км, рсси был выбран по пункту 3 в конфигураторе. Пакет лост, всю дорогу 99% и на минимальной мощности передатчика на 8.5 км был фс. Рсси с 99 прыгнул на секунду на 0. Информативности от такого рсси никакой. Сейчас рсси выставил по 2 пункту, snr. Теперь до 2 км показывает все время 30-32. Дальше пока не летал. Чую тоже информативности от такого рсси 0. 30-32 это как, хорошо или не очень?
Недавно обсуждали, что для корректного отображения rssi пакет лост и snr должны обрабатываться вместе, может разработчик как нибудь это исправит.
rssi на SNR ставить. Но как я понял там не очень корректно все. Так что это не только у вас такое.
А не проще Oled дисплей напрямую подключить к i2c контроллера и получить тоже самое. Inav это умеет.
А не проще Oled дисплей напрямую подключить к i2c контроллера и получить тоже самое. Inav это умеет.
Я про наземную станцию, на аппарате то зачем дисплей…
А не проще Oled дисплей напрямую подключить к i2c контроллера и получить тоже самое. Inav это умеет.
и что он там выводит?
INAV supports displays to provide information to you about your aircraft and iNav state.
When the aircraft is armed, an “Armed” message is displayed. When it is disarmed, a summary page is displayed. Page cycling has been removed and no other information is currently available
я б сделал себе отдельный телеметрийный экран с удовольствием
Ну так то на телефоне вся телеметрия по идее, это я так, дисплей некуда девать. Но в 168ю мегу не лезет парсер протокола, надо 328ю…
и что он там выводит?
Количество спутников, широту, долготу, напряжение, ток, количество использованных милиампер, может еще что-то- не помню уже.
А не проще Oled дисплей напрямую подключить к i2c контроллера и получить тоже самое. Inav это умеет.
Где? На ретрансляторе?
Есть идея воткнуть ардуинку буфером между mavlink tx модуля и блютус с дисплеем, парсить протокол, типа резервный вариант инфы. Отображать ток последнее достоверное, может даже в епром писать… Что думаете?
Тоже давно думаю об этом. Координаты последние, напряжение там… и т.д… Как у Кросфайр 😃)
Но в 168ю мегу не лезет парсер протокола, надо 328ю…
Что за библиотека? Тоже хочу в ретранслятор встроить OLED
Начал с этого: locarbftw.com/understanding-the-arduino-mavlink-li…
Без посылки запроса ток
Продолжу уже после сборки квадрика, буду сразу стараться на 433 его посадить. Мегу эту хотел заюзать для тбекона грин, теперь в раздумьях, что важнее)
Новая пока дойдет…
Тоже хочу в ретранслятор встроить OLED
Предлагаю объеденится. Что есть:
- библиотека для олед работает, буковки есть
- библиотека для парсинга мавлинк компилится, в основах вроде разобрался. Пока нет возможности подключить к контроллеру, но скоро
Итак, qczek восстанавливает эти msg_id (сообщения) мавлинка с inav: HEARTBEAT, ATTITUDE, POSITION_INT, SYS_STATUS, RC_CHANNELS_RAW
Вот полный список оных: groups.google.com/forum/#!topic/mavlink/1zgHUM67E-…
В библиотеке на каждый пакет заведен свой файлик h в /common, например из примера выше это mavlink_msg_gps_raw_int.h, там можно посмотреть структуру, ну и процедуру, которая парсит данные и сливает в эту структуру, например mavlink_msg_gps_raw_int_decode.
Однако, с этим мы уже пролетаем - этот пакет qczek не передает. Передает видимо MAVLINK_MSG_ID_GLOBAL_POSITION_INT 33, что описан в mavlink_msg_global_position_int.h
Уже из этого пакета мы получаем
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
int32_t lat; ///< Latitude, expressed as * 1E7
int32_t lon; ///< Longitude, expressed as * 1E7
int32_t alt; ///< Altitude in meters, expressed as * 1000 (millimeters), above MSL
int32_t relative_alt; ///< Altitude above ground in meters, expressed as * 1000 (millimeters)
int16_t vx; ///< Ground X Speed (Latitude), expressed as m/s * 100
int16_t vy; ///< Ground Y Speed (Longitude), expressed as m/s * 100
int16_t vz; ///< Ground Z Speed (Altitude), expressed as m/s * 100
uint16_t hdg; ///< Compass heading in degrees * 100, 0.0…359.99 degrees. If unknown, set to: 65535
Теперь полезен будет MAVLINK_MSG_ID_SYS_STATUS 1
uint32_t onboard_control_sensors_present; ///< Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
uint32_t onboard_control_sensors_enabled; ///< Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
uint32_t onboard_control_sensors_health; ///< Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
uint16_t load; ///< Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
uint16_t voltage_battery; ///< Battery voltage, in millivolts (1 = 1 millivolt)
int16_t current_battery; ///< Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current
uint16_t drop_rate_comm; ///< Communication drops in percent, (0%: 0, 100%: 10’000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
uint16_t errors_comm; ///< Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
uint16_t errors_count1; ///< Autopilot-specific errors
uint16_t errors_count2; ///< Autopilot-specific errors
uint16_t errors_count3; ///< Autopilot-specific errors
uint16_t errors_count4; ///< Autopilot-specific errors
int8_t battery_remaining; ///< Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery
отсюда мы вытащим батарейку.
Проблема: нет готового значения количества спутников… судя по описанию того, что сейчас пропускает qczek
А скорости размазаны по xyz и в м/сек, надо видимо подумать, какую брать… видимо по x, то есть
packet.vx*3.6
итого пока получается что то такое
#include <Wire.h>
#include “SSD1306Ascii.h”
#include “SSD1306AsciiWire.h”
#include <mavlink.h>#define I2C_ADDRESS 0x3C
#define RST_PIN -1
SSD1306AsciiWire oled;mavlink_message_t msg;
mavlink_status_t status;
//__mavlink_sys_status_t
int8_t battery_remaining;
uint8_t voltage_battery;
int16_t current_battery;
//__mavlink_global_position_int_t
int32_t lat,lon,alt,relative_alt;
int16_t vx, vy, vz;
uint16_t hdg;//------------------------------------------------------------------------------
void setup() {
Wire.begin();
Wire.setClock(400000L);
oled.begin(&Adafruit128x32, I2C_ADDRESS);
oled.clear();
oled.setFont(font8x8);
oled.set2X();
oled.println(“WAIT FOR”);
oled.println(“MAVLINK”);
oled.set1X();
//
Serial.begin(57600);
}
//------------------------------------------------------------------------------
void loop() {
while(Serial.available()) {
uint8_t c= Serial.read();
Serial.write©;
if(mavlink_parse_char(MAVLINK_COMM_0, c, &msg, &status)) {
switch(msg.msgid) {
case MAVLINK_MSG_ID_GLOBAL_POSITION_INT: {
mavlink_global_position_int_t packet;
mavlink_msg_global_position_int_decode(&msg, &packet);
if(packet.hdg == 65535) packet.hdg = 0;
lat = packet.lat;
lon = packet.lon;
alt = packet.alt;
relative_alt = packet.relative_alt;
vx = packet.vx;
vy = packet.vz;
vy = packet.vz;
hdg = packet.hdg;
}
case MAVLINK_MSG_ID_SYS_STATUS: {
__mavlink_sys_status_t packet;
mavlink_msg_sys_status_decode(&msg, &packet);
battery_remaining = packet.battery_remaining;
voltage_battery = packet.voltage_battery;
current_battery = packet.current_battery;
}
break;
}//switch
oled.clear();
oled.setFont(font5x7);
oled.println((String)“GPS:”+lat+(String)" “+lon);
oled.println((String)“SPEED:”+vx*3.6+(String)” ALT:“+relative_alt);
oled.println((String)“HDG:”+hdg+(String)” V:“+voltage_battery/100+(String)” R: “+battery_remaining+(String)”%");
oled.println((String)“BAT: 6.8v 76% ||||_”);
}//if
}//while
}
Едрит, оно парсит протокол! Надпись wait for mavlink из скетча исчезает ток при успешном парсинге хоть одного сообщения
Ну и надо это по хорошему на таймер перевесить, наверное, чтоб затыков с пересылкой в тх не было. Либо вообще тх не юзать, rx ардуины и бт модуля вместе скрутить да и все.
Там 16,4 мм получается . Середина 433.450 мгц примерно
Вы миллиметры с сантиметрами не попутали?
ну да 16,4 см, при условии, что частоты по умолчанию не трогать.
Судя по чейнжлогам старых версий, поддерживается больше messages от mavlink, чем написано. Думаю, я как подсоберу в кучу всё, посмотрю что приходит через qczek телеметрию.
ну да 16,4 см, при условии, что частоты по умолчанию не трогать.
Я на 1мгц все пока задрал
Ну и надо это по хорошему на таймер перевесить, наверное, чтоб затыков с пересылкой в тх не было.
TX вообще не использовать. Телеметрия же однонаправленная. К тому же если использовать s.bus, то TX занят.
Главное принимать координаты и писать их в EEPROM. В случае краша будут последние координаты. Информацию писать при включении пока не будет получен первый пакет.
Да, логика хорошая. Я ещё мечтаю прикрутить компас, вычислять азимут между домашними координатами и uav, и сервой поворачивать антенну)
В eeprom тоже много писать вредно, правильнее будет это делать при отключении питания, пока конденсатор питает плату отдельно, через диод. Пока питание есть - он показывает полученные последние координаты. При отключении батареи пишет в епром их, при включении показывает
Можно вообще сделать меню и настраивать ретранслятор без ПК 😃))
Можно вообще сделать меню и настраивать ретранслятор без ПК 😃))
Давайте браться) в 328 меге места валом, 40% пока занято)