Размышлизмы на тему кораблика BAIT BOAT с GPS

MickNich
Probelzaelo:

Именно, и это весьма хорошая альтернатива UART тк на эту шину можно использовать сразу несколько устройств, а если занял единственный UART то какой интерфейс планируется использовать для связи с “базой”?

  1. Выдаёт ли NEO M8N данные GPS в интерфейс I2C ? (Насколько я понял по подключениям к АПМ и ПИКСу - нет, втыкают оба интерфейса, и UART, и I2C, и по каждому получают своё.)
  2. NEO M8N (как и другие модули) отлично работает по софт-УАРТу, проверил.
  3. Для связи с базой будет задействован SPI протокол - Nrf24 модуль.
yus12:

Если подключите компас, у вас он заработает. Библиотек для компаса в интернете полно (rjvgfc HMC5883L)

Конечно, уже почитал. Основной трабл -

  1. Настройка сначала с БольшимБратом для вычисления “искажений”
  2. В процессе эксплуатации требует еще “датчиков наклона - гироскоп”, иначе врёт как Троцкий.
Probelzaelo:

Самый прямой путь - использовать существующие отлаженные стандарты и системы

Я не собирался изобретать свой протокол )))
Просто по УАРТу может бегать “медленный символьный” NMEA, а может и “быстрый числовой” UBX. Но второй - только с УБлоксами, соответственно чипы от других китайцев не подойдут.

Probelzaelo:

Вот компас бы вам показал изменение направления(платы относительно горизонта, вернее магнитного поля), но читали то вы GPS, а он определяет лишь координаты в пространстве, которые не меняются как не крути…

Да, это я понимаю. Экранчик к Ардуинке уже заказал, чтоб с ноутом по полю не бегать )))

Probelzaelo:

Именно, и это весьма хорошая альтернатива UART тк на эту шину можно использовать сразу несколько устройств, а если занял единственный UART то какой интерфейс планируется использовать для связи с “базой”?

  1. Выдаёт ли NEO M8N данные GPS в интерфейс I2C ? (Насколько я понял по подключениям к АПМ и ПИКСу - нет, втыкают оба интерфейса, и UART, и I2C, и по каждому получают своё.)
  2. NEO M8N (как и другие модули) отлично работает по софт-УАРТу, проверил.
  3. Для связи с базой будет задействован SPI протокол - Nrf24 модуль.
yus12:

Если подключите компас, у вас он заработает. Библиотек для компаса в интернете полно (rjvgfc HMC5883L)

Конечно, уже почитал. Основной трабл -

  1. Настройка сначала с БольшимБратом для вычисления “искажений”
  2. В процессе эксплуатации требует еще “датчиков наклона - гироскоп”, иначе врёт как Троцкий.
Probelzaelo:

Самый прямой путь - использовать существующие отлаженные стандарты и системы

Я не собирался изобретать свой протокол )))
Просто по УАРТу может бегать “медленный символьный” NMEA, а может и “быстрый числовой” UBX. Но второй - только с УБлоксами, соответственно чипы от других китайцев не подойдут.

Probelzaelo:

Вот компас бы вам показал изменение направления(платы относительно горизонта, вернее магнитного поля), но читали то вы GPS, а он определяет лишь координаты в пространстве, которые не меняются как не крути…

Да, это я понимаю. Экранчик к Ардуинке уже заказал, чтоб с ноутом по полю не бегать )))

MickNich:

Да, Евгений, вродь на форуме принято на ТЫ ?

Ы?

yus12
MickNich:

Ы?

Цитировать по строчно не буду. Ты, Вы - это культура общения.
По поводу азимута, есть расчетный до какой-то точки, он не меняется от поворота и есть вычисленный азимут маршрута, для этого надо движение как я и писал.
Все можно забрать по АйТуСи, но это немного сложнее и надо переконфигурировать GPs в юблокс центре. По поводу датчика наклона, не обезательно или вы соберетесь переворачивать лодку? По магнитометру идет множество шума, фильтруйте его.

MickNich

Для экспериментов решил включить пару УНОк и пробовать работу.
Из трёх ЮСБ в ноуте жив один - мелкий сильный …
Нашел в старье хаб юсб. Активный. Но БП дохлый… Собираем питание и заодно стенд.
Скачет 4,9-5,0 тестер говорит 5,08 вольта.
Питание 12 ->5 через плату AOC 334.
Да, сразу предусмотрел выход 5 вольт на еще какого-нить потребителя.

ПыСы. чтение темы “GPS-приемники для квадрокоптеров” на этом форуме вставляет )))

MickNich

Поковырялся на выходных с ЖПС, Ардуино и НРФ модулями.
Тест НРФ радиоэфира работает, спутники вижу, пробую передачу - всё виснет. Добавил замедления в переключение прием-передача. Не оно. Потом перевел модуль с МАХ на ЛОУ мощность - работает чуть дольше.
Похоже на просадку по питанию.
И да, в тестовом примере библиотеки ТиниЖПСплюс пара параметров непонятны.
Course Speed Card Distance Course Card Chars Sentences Checksum Fail
Судя по выводу - Card это примерное направление вида Зюйд-Зюйд-Вест
а Checksum Fail - обычно ноль, но иногда начинает арифметически расти.

yus12
MickNich:

Поковырялся на выходных с ЖПС, Ардуино и НРФ модулями.
Тест НРФ радиоэфира работает, спутники вижу, пробую передачу - всё виснет. Добавил замедления в переключение прием-передача. Не оно. Потом перевел модуль с МАХ на ЛОУ мощность - работает чуть дольше.
Похоже на просадку по питанию.
И да, в тестовом примере библиотеки ТиниЖПСплюс пара параметров непонятны.
Course Speed Card Distance Course Card Chars Sentences Checksum Fail
Судя по выводу - Card это примерное направление вида Зюйд-Зюйд-Вест
а Checksum Fail - обычно ноль, но иногда начинает арифметически расти.

Думаю питание не причем. Как я понимаю все по отдельности работает, но вместе уже не работает? Если да, то вы уперлись в основные возможности. Дальше уже надо будет изучать не пособие по Ардуино, а по программированию контролеров атмел.

MickNich

Евгений, проблем с СофтУарт и НРФ до сегодня не зафиксировано.
Так что либо питание, либо софт.
По параметрам Card и Checksum Fail сть мысли - что это ?

yus12
MickNich:

Евгений, проблем с СофтУарт и НРФ до сегодня не зафиксировано.
Так что либо питание, либо софт.
По параметрам Card и Checksum Fail сть мысли - что это ?

Конечно софт.
Card - Незнаю
Checksum Fail - думаю ошибка контрольной суммы. Когда считывается строка в конце есть контрольная сумма которая равна сумме всех символов. Если чек сумма не сходится, значит скорее всего пропущен какой-то символ. На АПМ используя файл конфигурации увеличивают скорость передачи сообщений и убирают не нужную информацию. Возможно в АПМ используют именно МЕГУ а не УНО и за наличия 3 серийных портов?

MickNich
yus12:

На АПМ используя файл конфигурации увеличивают скорость передачи сообщений и убирают не нужную информацию.

Ну как бы в АПМ и Назях чип ЖПС переводят в двоичный протокол (Ублокс специфический). Скорость растет до 5, а то и 10 герц. Мне это не актуально, да и совместимость с другими чипами терять неохота.
Checksum Fail - про перевод догадался. Вопрос был - как его либа Тини вычисляет и отчего он возникает.
Ну а софт- победим. Прикупил пару ДиСи даунов на 3,3 вольта до 1А.
Воткнём - посмотрим.
Тупить по софту пока нечему 😁

yus12
MickNich:

Ну как бы в АПМ и Назях чип ЖПС переводят в двоичный протокол (Ублокс специфический). Скорость растет до 5, а то и 10 герц. Мне это не актуально, да и совместимость с другими чипами терять неохота.
Checksum Fail - про перевод догадался. Вопрос был - как его либа Тини вычисляет и отчего он возникает.
Ну а софт- победим. Прикупил пару ДиСи даунов на 3,3 вольта до 1А.
Воткнём - посмотрим.
Тупить по софту пока нечему 😁

От чего он возникает я написал. Про питание, какой там ампер, вы о чем? все в миллиамперах

RUD

В моём понимании алгоритм рыбалки следующий:
1.Приехали с друзьями на водоём(жёны дома)
2.Закинули снасти
3.Пока рыба думает насчёт клевать—не клевать,разводим костёр
4.Пошёл клёв
5.Ловим рыбы ровно столько,сколько надо для ухи
6.Убираем снасти…идём к костру
7.Счастливые и весёлые возвращаемся к любимым(купив по дороге цветы)

5 years later
MickNich

Некропостинг и иже с ними. Повторение - мать его учения. Спустя пять лет возникло желание продолжить. Похоже, с переходом на новую элементную базу вида ESP8266. Ну и привлечением “стороннего программера”. Правда, аттачиться тхт файл не хочет. Как спрятать текст под спойлер ?

MickNich

Рвёт структуру, зараза…

передатчик

Передатчик:

c++ Copy code #include <ESP8266WiFi.h> #include <espnow.h> #include <TinyGPS++.h>

#define CHANNEL 1 #define GPS_TX D5 #define GPS_RX D6 #define BAIT_PIN D7

struct DataPacket { int throttle; int steering; boolean button1; boolean button2; double latitude; double longitude; };

DataPacket data;

TinyGPSPlus gps; HardwareSerial gpsSerial(1);

void setup() { Serial.begin(115200); pinMode(BAIT_PIN, OUTPUT); digitalWrite(BAIT_PIN, LOW);

gpsSerial.begin(9600, SERIAL_8N1, GPS_TX, GPS_RX);

WiFi.mode(WIFI_STA); if (esp_now_init() != 0) { Serial.println(“ESP-NOW initialization failed”); return; } esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER); esp_now_add_peer(slaveMac, ESP_NOW_ROLE_SLAVE, CHANNEL, NULL, 0); }

void loop() { data.throttle = map(analogRead(A0), 0, 1023, 0, 255); data.steering = map(analogRead(A1), 0, 1023, 0, 255); data.button1 = digitalRead(2); data.button2 = digitalRead(3);

while (gpsSerial.available()) { gps.encode(gpsSerial.read()); } if (gps.location.isValid()) { data.latitude = gps.location.lat(); data.longitude = gps.location.lng(); }

esp_now_send(slaveMac, (uint8_t *)&data, sizeof(data));

if (shouldDispenseBait()) { dispenseBait(); } }

boolean shouldDispenseBait() { // Your logic for when to dispense bait goes here return false; }

void dispenseBait() { digitalWrite(BAIT_PIN, HIGH); delay(1000); digitalWrite(BAIT_PIN, LOW); }

приемник

Приемник:

c++ Copy code #include <ESP8266WiFi.h> #include <espnow.h> #include <TinyGPS++.h> #include <Servo.h>

#define CHANNEL 1 #define THROTTLE_PIN 5 #define STEERING_PIN 4 #define BUTTON1_PIN 14 #define BUTTON2_PIN 12 #define SERVO_PIN 13

struct DataPacket { float lat; float lon; int throttle; int steering; boolean button1; boolean button2; boolean auto_feed; };

DataPacket data;

WiFiClient client; TinyGPSPlus gps; Servo servo;

void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); if (esp_now_init() != 0) { Serial.println(“ESP-NOW initialization failed”); return; } esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); esp_now_register_recv_cb([](uint8_t *mac, uint8_t *data, uint8_t len) { memcpy(&data, data, sizeof(DataPacket)); Serial.print(“Received data: Lat=”); Serial.print(data.lat, 6); Serial.print(“, Lon=”); Serial.print(data.lon, 6); Serial.print(“, Throttle=”); Serial.print(data.throttle); Serial.print(“, Steering=”); Serial.print(data.steering); Serial.print(“, Button1=”); Serial.print(data.button1); Serial.print(“, Button2=”); Serial.print(data.button2); Serial.print(“, Auto Feed=”); Serial.println(data.auto_feed); analogWrite(THROTTLE_PIN, data.throttle); servo.write(data.auto_feed ? 180 : 0); }); esp_now_add_peer(masterMac, ESP_NOW_ROLE_CONTROLLER, CHANNEL, NULL, 0); pinMode(THROTTLE_PIN, OUTPUT); pinMode(STEERING_PIN, OUTPUT); pinMode(BUTTON1_PIN, INPUT_PULLUP); pinMode(BUTTON2_PIN, INPUT_PULLUP); servo.attach(SERVO_PIN); }

void loop() { while (client.available()) { gps.encode(client.read()); } if (gps.location.isValid()) { data.lat = gps.location.lat(); data.lon = gps.location.lng(); } data.button1 = digitalRead(BUTTON1_PIN) == LOW; data.button2 = digitalRead(BUTTON2_PIN) == LOW; esp_now_send(masterMac, &data, sizeof(data)); delay(10); }