Как подключить к Arduino эхолот Humminbird?

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Bif+, 12 фев 2019.

  1. Bif+

    Bif+ Гик

    Скетч второй платы:
    Код (C++):
    //с TX Pin1 на первую Arduino Uno плату на Pin7 (на плату компаса и акселя(датчик HW579)
    // от модуля GPS NEO 6M V2 с TX на Pin2 платы 2, т.е платы GPS
    #include <EasyTransfer.h>
    #include <SoftwareSerial.h>
    #include "TinyGPS++.h"
    #include <avr/interrupt.h>
    #include <avr/power.h>
    #include <avr/sleep.h>
    #include <avr/io.h>

    TinyGPSPlus gps;
    SoftwareSerial g(2, 3);

    EasyTransfer tx;

    struct SEND_DATA_STRUCTURE{
      float latitude;
      float longitude;
    };

    SEND_DATA_STRUCTURE loc;

    void setup() {

      Serial.begin(38400);
      g.begin(9600);
      tx.begin(details(loc), &Serial);
    }

    void loop() {
      while (g.available() > 0) {
        gps.encode(g.read());
      }
      if (millis() > 5000 && gps.charsProcessed() < 10)
      {
        digitalWrite(13, HIGH);
      }
      else {
        digitalWrite(13, LOW);
      }
      if (gps.location.isValid()){
        loc.latitude = gps.location.lat();
        loc.longitude = gps.location.lng();

        digitalWrite(13, HIGH);
        if (gps.location.age() < 2000) {
          //if (!tx.sendData()){
          //
          //}
          tx.sendData();

        }
      }
      delay(50);
      digitalWrite(13, LOW);

    }
     
     
  2. burd-ig

    burd-ig Нерд

    Здравствуйте.
    Изучаю два модуля Neo 6 и Neo 8. Оба выдают неточное определение долготы. У меня возможно похожий проект намечается, но все зависит от точности GPS модулей. Но, речь здесь не об этом...
    Я посмотрел ваши проекты с судомоделью и последние два ваших поста - это решение использовать две платы микроконтроллеров, по мотивам этих проектов. Где-то встречал видео, где без библиотеки TinyPlus парсят данные с Neo. Да и на форумах об этом же говорят. С эхолота, я так понимаю, вы это сделали.
     
  3. Bif+

    Bif+ Гик

    Добрый вечер burd-ig!
    Если пользоваться для записи gps координат, затем и чтения одним и тем же модулем, то точность получается довольно приличной. Я использую этот код для записи на SD карту.
    Код (C++):
    //пишем на sd карту
    /*             UNO       Mega2560
    ** MOSI — pin 11           51
    ** MISO — pin 12           50
    ** CLK(SCK) — pin 13       52
    ** CS(SS) — pin 4(10)      53
    *  На платах Arduino Mega и Mega2560 некоторые выводы не поддерживают прерывания,
    возникающие при изменении уровня сигнала. Поэтому, на данных платах в качестве
    вывода RX могут использоваться только следующие выводы: 10, 11, 12, 13, 14, 15, 50,
    51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
    */

    #include <SD.h>
    #define chipSelect 4
    File myFile;

    #include <SoftwareSerial.h>
    #include "TinyGPS++.h"

    TinyGPSPlus gps;
    SoftwareSerial gpsSerial(10, 8); //подключен модуль (RX, TX)
            //на mega 2560 для Rx только пины с10 по 13 и A8-A15                
    bool newdata = false;
    unsigned long start;
    long lat, lng;

    void setup()
    {
      gpsSerial.begin(9600);
      Serial.begin(9600);
      Serial.println("Waiting data of GPS...");

      pinMode(53, OUTPUT);//ss (53) для Mega 2560, а CS подключаем к пин 53 или 4
    // pinMode(4, OUTPUT);//на Mega можно заком. или оставить, но
    // CS от SD подключ к 4 или 53(не зависимо-заком или нет)
      SD.begin(chipSelect);
    }

    void loop()
    {
      if (millis() - start > 1000)                      //установка задержки в одну секунду
      { // между обновлением данных
        newdata = readgps();
        if (newdata)
        {
          start = millis();

          String lat  = "Unknown          ";
          String lng  = "location         ";
          if (gps.location.isValid())
          {
            lat =  String(gps.location.lat(), 6);      
            lng =  String(gps.location.lng(), 6);      
          }

          //------------
          File dataFile = SD.open("log.txt", FILE_WRITE); // Открываем файл для записи логов
          if (dataFile)                                   // Если удалось открыть файл
          { dataFile.print(String(gps.location.lat(), 6));// Записываем строку логов в файл
            dataFile.print("    ");
            dataFile.println(String(gps.location.lng(), 6));
            dataFile.close();                             // Закрываем файл
          }
          else {                                         // Если не удалось открыть файл
            Serial.println("Can't open file");             // Выводим сообщение об ошибке
            delay(100);
            //-------------------

          }
          //Serial.print("Lat: ");
          Serial.print(lat);
          Serial.print("     ");
          //Serial.print(" Lng: ");
          Serial.println(lng);

        }
      }
    }//loop закончен

    // проверка наличия данных

    bool readgps()
    {
      while (gpsSerial.available())
      {
        int b = gpsSerial.read();
        //в библиотеке TinyGPS имеется ошибка: не обрабатываются данные с \r и \n
        if ('\r' != b)
        {
          if (gps.encode(b))
            return true;
        }
      }
      return false;
    }
    Проблема в том, что записывает на карту в форме символов, а не чисел. Поэтому ввожу в код первой платы вручную, а хотелось бы читать автоматом. Выше я писал о своих "хотелках". Я это всё равно сделаю, но единомышленников не было раньше, да и знаний программирования у меня мало. Я с Arduino познакомился год назад. Вопрос: а что Вы вообще-то строите, в смысле - что за проект и для чего?
     
    Последнее редактирование: 1 апр 2020
  4. Bif+

    Bif+ Гик

    С чем Вы сравниваете? Если взять два промышленных навигатора и поставить одну и ту же точку на обеих приборчиках, находясь в одном месте, то координаты на каждом будут разные! В то же время, если Вы отойдете на приличное расстояние от этой точки, а затем пойдете к точке по навигаторам, то они оба приведут Вас на данную точку с высокой точностью. А если попытаетесь поменяться координатами в навигаторах - разбег будет очень большой. Проверено на практике!
     
  5. burd-ig

    burd-ig Нерд

    У меня почему-то долгота плавает в районе 40 метров, причем широта в это время с точностью до 1-2 метров. Вот ломаю голову, по какой причине так одна координата плавает.
    Все думаю прошивку как-то поменять в u-centr, что-то с параметрами не так... Но не помогает.
     
    Последнее редактирование: 1 апр 2020
  6. Bif+

    Bif+ Гик

    Это от не достаточного кол-ва пойманных спутников. Может плохая чувствительность приемника. Я использую выносную активную антенну.Если долго не загружается альманах (холодный старт), я подключаю параллельно антенну-квадрат 46х46мм с загнутой одной стороной по диагонали, хорошо работает. Ссылку могу скинуть позже - сейчас нет под руками. Ещё такое бывает, когда данные широты 6 знаков после точки, а долгота принимается с 5 знаками после точки. Если обе координаты принимаются с 5-ю знаками после точки, то разброс может быть 100м и более!
    Все выложенные мной коды 100% рабочие. Можете собирать железо. Возникнут вопросы - помогу, чем могу.
     
  7. Bif+

    Bif+ Гик

  8. Bif+

    Bif+ Гик

  9. Bif+

    Bif+ Гик

    Зачем Вам u-centr? только посмотреть как работает NMEO? Вы же не будете таскать с собой ноубук, не привяжете его к модельки. Собираете сразу на ардуино с нужным скетчем и смотрите все в мониторе порта и будет у Вас счастье!
     
  10. burd-ig

    burd-ig Нерд

    А как это проверить?
    Есть еще вопрос. Посмотрел на своем эхолоте Garmin Echomap на разъем NMEA 2000. 5контактов. С какого брали сигнал на контроллер. Нашел схему RS. Хотя интересно обойтись без эхолота, этими датчиками Neo.
    И уж сразу спрошу. Как обойти библиотеку TinyGPSPlus? Пока задача вывести два параметра широту и долготу и определить направление к данной точке в градусах, возможно, что бы потом связать с показаниями компаса.
    А про рыбалку - я больше на прикол за рыбой, ну и спиннинг с лодки, а с берега самое любимое занятие :)
     
  11. burd-ig

    burd-ig Нерд

    Нашел перевод поддержки Garmin:

    "Руководство по подключению NMEA 0183
    При подключении к сети NMEA 0183 используйте приведенные ниже рекомендации.

    Кабель передачи (Tx) (+) должен быть подключен к кабелю приема (Rx) (+).
    Tx (-) должен быть подключен к Rx (-) 1.
    Rx (+) должен быть подключен к Tx (+).
    Rx (-) должен быть подключен к Tx (-) 2.

    1Если у передающего устройства есть кабель Tx (-), но на приемном устройстве нет соответствующего кабеля Rx (-), оставьте кабель Tx (-) отсоединенным. В этом случае плохо подключенные кабели могут повредить передающее устройство.

    2 Если приемное устройство имеет Rx (-), но передающее устройство не имеет Tx (-), подключите Rx (-) к земле.

    Как правило, провода заземления (обычно обозначаемые: общее заземление или заземление NMEA) от сети NMEA 0183 должны быть заземлены. Пожалуйста, обратитесь к инструкции по эксплуатации, чтобы тщательно проверить маркировку кабелей и их назначение.

    Пример подключения VHF 110 с echoMap Plus 44cv"

    Я так понял, по аналогии с микрофонными кабелями, сигнал по NMEA 0183 идет балансный, помехозащищенный.
    В моем случае, вроде как синий кабель идет на вход MAX232.
     
  12. Bif+

    Bif+ Гик

    Протоколы 0183 и 2000 разные. Garmin Echomap тоже большое разнообразие. Конкретная марка Вашего? Если есть встроенный GPS, то нужна только антенна. Если нет кабеля, тоже не такая уж большая проблема. У меня кабеля для выхода NMEA тоже нет. Я взял одножильный медный повод 0.8мм, залудил его, припаял к многожильному и всё. Минус общий и один провод с колодки Тх. Надо аккуратно методом тыка проверить диаметр входа под штырёк на колодке.
    Не понятно. Если у Вас будет Arduino, библиотека нужна, если Arduino нет, то и библиотека не нужна.
     
  13. Bif+

    Bif+ Гик

    Нет, не балансный. Цепь: Rx-GND; Tx-GND. На большие расстояния передаются с помощью RS422, RS485. Там потенциалы до 15 вольт.
     
    Последнее редактирование: 2 апр 2020
  14. burd-ig

    burd-ig Нерд

    1. У меня EchoMap Plus 73sv
    2. Вы же данные своего эхолота забирали без TinyGPSPlus? Это же можно сделать с Neo.
    3. Нашел я это видео:

     
    Последнее редактирование: 2 апр 2020
  15. Bif+

    Bif+ Гик

    По моему у Вас какая-то каша, или я чего-то не понимаю.
    Имеет встроенный GPS модуль! Зачем Вам U-blok?! Зачем Вам NEO?! На видео U-blok - это NEO 6M.
    У Вас очень мощный картплоттер! Нужна инструкция по эксплуатации на русском и всё. Если Вы решили сделать автопилот, то нужно всего лишь найти ногу на разъеме от эхолота Тх или провод от этой ноги в кабеле. RS232 там уже должен быть встроен, инвертора сигнала не нужно, антенна там тоже есть. Что ВЫ хотите от своего картплоттера?
     
    Последнее редактирование: 2 апр 2020
  16. burd-ig

    burd-ig Нерд

    Я же написал, что не хочу к эхолоту привязывать свой автопилот. Но, попробовать с ним то же хотелось бы.
    Возможно ударение в предложении не туда поставили.
    Вы же данные своего эхолота забирали без TinyGPSPlus? То же самое можно сделать с Neo. Возможно будет меньше грузиться контроллер. Вы хотите в своей системе два, я хочу пока один.
     
  17. Bif+

    Bif+ Гик

    На моем эхолоте нет GPS, поэтому использую его только как автопилот по глубине, а на компасе и эхолот мне не нужен. Для получения координат с NMEO 6m нужна ардуинка или какой-то другой микроконтроллер, а к ардуинке обязательно какую-нибудь библиотеку TinyGPSPlus, TinyGPS, TinyGPS-13. Я другого способа не знаю.
    В автопилоте самое главное не код и не ардуино, а качественный оконечный каскад управления - мотор-редуктор, актуатор, конечно управляемые электроникой и хорошая герметизация от влаги.
     
    Последнее редактирование: 2 апр 2020
  18. burd-ig

    burd-ig Нерд

    Я бы, все таки, добавил надежность электроники, ведь речь идет о безопасности человека на воде.
    Вот потому у меня это вялотекущий процесс в плане создания скетча. Больше сбор информации и пока попытка умелого получения исходных данных. Форма реализации постоянно меняется.
     
  19. Bif+

    Bif+ Гик

    На самодельной электронике автопилота только идиот может ходить по воде на высокой скорости, когда резкий поворот вышедшей из строя электроники может привести к оверкилю или налететь на что-то. Поэтому мой автопилот для рыбалки, в крайнем случае 10 км/час. Для троллинга достаточно 3,8 - 4,2 км/час, автопилот для докатки - маломощного движка.
     
  20. burd-ig

    burd-ig Нерд

    Теперь ближе к теме форума.
    На моей макетной плате стоит или Neo 6 или Neo 8 (меняю периодически), Arduino Nano, дисплей 64х128.
    Тесты провожу на аккумуляторах, что бы не грешить на нестабильность питания, хотя и оно подведено теперь через выпрямитель, от которого запитаны платки.
    Я пока не понимаю одного. При первом включении, как правило, на экране появляются точные координаты. Потом долгота начинает гулять в районе 40 метров, периодически возвращаясь к правильному значению и опять может "уйти в сторону".
    Спасибо за еще один вариант антенны в мою коллекцию, попробовал, как вы советовали, но не помогло.
    По логике - одна координата (широта), это заявленные +- 2 метра, значит gps модулю хватает собственной антенны.
    Долгота нестабильна в обоих модулях и в Neo 6 и в Neo 8 и ведет себя одинаково, как-будто и не менял модуль.
    Все подключено к одной единственной Ардуинке. Значит искать нужно в ней?
    Не получилось запустить скетч из видео, что я выкладывал выше. Это попытка в корне поменять захват данных.
    Думаю, где-то программный глюк...
     
    Последнее редактирование: 2 апр 2020