Размышлизмы на тему кораблика BAIT BOAT с GPS
Исправляю своё заблуждение про компас. такИ отдельно идёт, со своей частотой.
Немного не так. Протокол i2c можно использовать и для gps. Но для этого надо сконфигурировать его должным образом. У компаса и GPS будут разные адреса по протоколу I2C.
Лучше возьмите себе какое-то готовое решение. А пока, чтобы быстрее застопорится попробуйте одновременно принимать сигнал от GPS и от других устройств. Вы работали с прерываниями?
Протокол i2c можно использовать и для gps. … У компаса и GPS будут разные адреса по протоколу I2C.
То есть пара SDA-SCL при подключении выдаст и GPS данные, и компас ? Гут, это на потом оставлю.
По прерываниям - ИМХО пока не нужны. Весь цикл программы должен быть небольшой, должно и так шустро работать.
Да, Евгений, вродь на форуме принято на ТЫ ?
А готовое решение в виде АПМ плюс ноут с собой плюс полноценная аппа управления плюс радиомодемы для обратной связи… Для рыбалки перебор.
Вечерние эксперименты.
- Для начала (и видимо для полной совместимости с неУблох чипами) остался на НМЕА протоколе.
- Подключение по УАРТу на 3-4 ноги Ардуины.
- Поставил библиотеку TinyGPS++.
Поюзал экзамплыПоигрался с примерами. Работает (при замене скорости с 4800 на 9600). Дальность до Лондона показывает, а вот с азимутами вопросы возникли. Крутил на подоконнике приёмник ЖПС, курсы не меняются.
Вопрос - это компас не работает или надо при запуске “покрутить-покачать” ЖПС ?
И вообще, прочел инструкцию к U-center, настроек миллион, а вот какой командой получить данные чипа и памяти - не нашел.
Главное, где-то читал, не помню.
Вечерние эксперименты.
- Для начала (и видимо для полной совместимости с неУблох чипами) остался на НМЕА протоколе.
- Подключение по УАРТу на 3-4 ноги Ардуины.
- Поставил библиотеку TinyGPS++.
Поюзал экзамплыПоигрался с примерами. Работает (при замене скорости с 4800 на 9600). Дальность до Лондона показывает, а вот с азимутами вопросы возникли. Крутил на подоконнике приёмник ЖПС, курсы не меняются.
Вопрос - это компас не работает или надо при запуске “покрутить-покачать” ЖПС ?
И вообще, прочел инструкцию к U-center, настроек миллион, а вот какой командой получить данные чипа и памяти - не нашел.
Главное, где-то читал, не помню.
Вы сами написали что подключили только gps, который может показать только азимут при движении. Если подключите компас, у вас он заработает. Библиотек для компаса в интернете полно (rjvgfc HMC5883L).
Когда я говорил про готовое решение, я говорил не про АПМ
пара SDA-SCL при подключении выдаст и GPS данные, и компас
Именно, и это весьма хорошая альтернатива UART тк на эту шину можно использовать сразу несколько устройств, а если занял единственный UART то какой интерфейс планируется использовать для связи с “базой”?
- Для начала (и видимо для полной совместимости с неУблох чипами) остался на НМЕА протоколе.
Самый прямой путь - использовать существующие отлаженные стандарты и системы, иначе следует начинать работу с производства полупроводников под собственные нужды… закончите через пару веков, если повезет ))
Крутил на подоконнике приёмник ЖПС, курсы не меняются. Вопрос - это компас не работает или надо при запуске “покрутить-покачать” ЖПС ?
они и не должны изменяться, вы же не меняете место нахождения. Вот компас бы вам показал изменение направления(платы относительно горизонта, вернее магнитного поля), но читали то вы GPS, а он определяет лишь координаты в пространстве, которые не меняются как не крути…
Именно, и это весьма хорошая альтернатива UART тк на эту шину можно использовать сразу несколько устройств, а если занял единственный UART то какой интерфейс планируется использовать для связи с “базой”?
- Выдаёт ли NEO M8N данные GPS в интерфейс I2C ? (Насколько я понял по подключениям к АПМ и ПИКСу - нет, втыкают оба интерфейса, и UART, и I2C, и по каждому получают своё.)
- NEO M8N (как и другие модули) отлично работает по софт-УАРТу, проверил.
- Для связи с базой будет задействован SPI протокол - Nrf24 модуль.
Если подключите компас, у вас он заработает. Библиотек для компаса в интернете полно (rjvgfc HMC5883L)
Конечно, уже почитал. Основной трабл -
- Настройка сначала с БольшимБратом для вычисления “искажений”
- В процессе эксплуатации требует еще “датчиков наклона - гироскоп”, иначе врёт как Троцкий.
Самый прямой путь - использовать существующие отлаженные стандарты и системы
Я не собирался изобретать свой протокол )))
Просто по УАРТу может бегать “медленный символьный” NMEA, а может и “быстрый числовой” UBX. Но второй - только с УБлоксами, соответственно чипы от других китайцев не подойдут.
Вот компас бы вам показал изменение направления(платы относительно горизонта, вернее магнитного поля), но читали то вы GPS, а он определяет лишь координаты в пространстве, которые не меняются как не крути…
Да, это я понимаю. Экранчик к Ардуинке уже заказал, чтоб с ноутом по полю не бегать )))
Именно, и это весьма хорошая альтернатива UART тк на эту шину можно использовать сразу несколько устройств, а если занял единственный UART то какой интерфейс планируется использовать для связи с “базой”?
- Выдаёт ли NEO M8N данные GPS в интерфейс I2C ? (Насколько я понял по подключениям к АПМ и ПИКСу - нет, втыкают оба интерфейса, и UART, и I2C, и по каждому получают своё.)
- NEO M8N (как и другие модули) отлично работает по софт-УАРТу, проверил.
- Для связи с базой будет задействован SPI протокол - Nrf24 модуль.
Если подключите компас, у вас он заработает. Библиотек для компаса в интернете полно (rjvgfc HMC5883L)
Конечно, уже почитал. Основной трабл -
- Настройка сначала с БольшимБратом для вычисления “искажений”
- В процессе эксплуатации требует еще “датчиков наклона - гироскоп”, иначе врёт как Троцкий.
Самый прямой путь - использовать существующие отлаженные стандарты и системы
Я не собирался изобретать свой протокол )))
Просто по УАРТу может бегать “медленный символьный” NMEA, а может и “быстрый числовой” UBX. Но второй - только с УБлоксами, соответственно чипы от других китайцев не подойдут.
Вот компас бы вам показал изменение направления(платы относительно горизонта, вернее магнитного поля), но читали то вы GPS, а он определяет лишь координаты в пространстве, которые не меняются как не крути…
Да, это я понимаю. Экранчик к Ардуинке уже заказал, чтоб с ноутом по полю не бегать )))
Да, Евгений, вродь на форуме принято на ТЫ ?
Ы?
Ы?
Цитировать по строчно не буду. Ты, Вы - это культура общения.
По поводу азимута, есть расчетный до какой-то точки, он не меняется от поворота и есть вычисленный азимут маршрута, для этого надо движение как я и писал.
Все можно забрать по АйТуСи, но это немного сложнее и надо переконфигурировать GPs в юблокс центре. По поводу датчика наклона, не обезательно или вы соберетесь переворачивать лодку? По магнитометру идет множество шума, фильтруйте его.
Для экспериментов решил включить пару УНОк и пробовать работу.
Из трёх ЮСБ в ноуте жив один - мелкий сильный …
Нашел в старье хаб юсб. Активный. Но БП дохлый… Собираем питание и заодно стенд.
Скачет 4,9-5,0 тестер говорит 5,08 вольта.
Питание 12 ->5 через плату AOC 334.
Да, сразу предусмотрел выход 5 вольт на еще какого-нить потребителя.
ПыСы. чтение темы “GPS-приемники для квадрокоптеров” на этом форуме вставляет )))
Поковырялся на выходных с ЖПС, Ардуино и НРФ модулями.
Тест НРФ радиоэфира работает, спутники вижу, пробую передачу - всё виснет. Добавил замедления в переключение прием-передача. Не оно. Потом перевел модуль с МАХ на ЛОУ мощность - работает чуть дольше.
Похоже на просадку по питанию.
И да, в тестовом примере библиотеки ТиниЖПСплюс пара параметров непонятны.
Course Speed Card Distance Course Card Chars Sentences Checksum Fail
Судя по выводу - Card это примерное направление вида Зюйд-Зюйд-Вест
а Checksum Fail - обычно ноль, но иногда начинает арифметически расти.
Поковырялся на выходных с ЖПС, Ардуино и НРФ модулями.
Тест НРФ радиоэфира работает, спутники вижу, пробую передачу - всё виснет. Добавил замедления в переключение прием-передача. Не оно. Потом перевел модуль с МАХ на ЛОУ мощность - работает чуть дольше.
Похоже на просадку по питанию.
И да, в тестовом примере библиотеки ТиниЖПСплюс пара параметров непонятны.
Course Speed Card Distance Course Card Chars Sentences Checksum Fail
Судя по выводу - Card это примерное направление вида Зюйд-Зюйд-Вест
а Checksum Fail - обычно ноль, но иногда начинает арифметически расти.
Думаю питание не причем. Как я понимаю все по отдельности работает, но вместе уже не работает? Если да, то вы уперлись в основные возможности. Дальше уже надо будет изучать не пособие по Ардуино, а по программированию контролеров атмел.
Евгений, проблем с СофтУарт и НРФ до сегодня не зафиксировано.
Так что либо питание, либо софт.
По параметрам Card и Checksum Fail сть мысли - что это ?
Евгений, проблем с СофтУарт и НРФ до сегодня не зафиксировано.
Так что либо питание, либо софт.
По параметрам Card и Checksum Fail сть мысли - что это ?
Конечно софт.
Card - Незнаю
Checksum Fail - думаю ошибка контрольной суммы. Когда считывается строка в конце есть контрольная сумма которая равна сумме всех символов. Если чек сумма не сходится, значит скорее всего пропущен какой-то символ. На АПМ используя файл конфигурации увеличивают скорость передачи сообщений и убирают не нужную информацию. Возможно в АПМ используют именно МЕГУ а не УНО и за наличия 3 серийных портов?
На АПМ используя файл конфигурации увеличивают скорость передачи сообщений и убирают не нужную информацию.
Ну как бы в АПМ и Назях чип ЖПС переводят в двоичный протокол (Ублокс специфический). Скорость растет до 5, а то и 10 герц. Мне это не актуально, да и совместимость с другими чипами терять неохота.
Checksum Fail - про перевод догадался. Вопрос был - как его либа Тини вычисляет и отчего он возникает.
Ну а софт- победим. Прикупил пару ДиСи даунов на 3,3 вольта до 1А.
Воткнём - посмотрим.
Тупить по софту пока нечему 😁
Ну как бы в АПМ и Назях чип ЖПС переводят в двоичный протокол (Ублокс специфический). Скорость растет до 5, а то и 10 герц. Мне это не актуально, да и совместимость с другими чипами терять неохота.
Checksum Fail - про перевод догадался. Вопрос был - как его либа Тини вычисляет и отчего он возникает.
Ну а софт- победим. Прикупил пару ДиСи даунов на 3,3 вольта до 1А.
Воткнём - посмотрим.
Тупить по софту пока нечему 😁
От чего он возникает я написал. Про питание, какой там ампер, вы о чем? все в миллиамперах
В моём понимании алгоритм рыбалки следующий:
1.Приехали с друзьями на водоём(жёны дома)
2.Закинули снасти
3.Пока рыба думает насчёт клевать—не клевать,разводим костёр
4.Пошёл клёв
5.Ловим рыбы ровно столько,сколько надо для ухи
6.Убираем снасти…идём к костру
7.Счастливые и весёлые возвращаемся к любимым(купив по дороге цветы)
Некропостинг и иже с ними. Повторение - мать его учения. Спустя пять лет возникло желание продолжить. Похоже, с переходом на новую элементную базу вида ESP8266. Ну и привлечением “стороннего программера”. Правда, аттачиться тхт файл не хочет. Как спрятать текст под спойлер ?
Рвёт структуру, зараза…
Передатчик:
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); }