Доброго времени суток!
Где то года полтора назад решился попробовать работать через спутники. Собрал двухдиапазонную антенну 144-430 4х6 элементов, поработал, понравилось.
Одно плохо - антенна установлена фиксировано и имеет возможность крутить по азимуту вручную (закреплена на балконе)
в секторе 300-40 градусов, а теперь и того меньше - кондиционер поставили, внешний блок мешает.
Естественно и связей со странами не богато.
Решил соорудить поворотное устройство. Порылся в сети, наткнулся на проект индийских радиолюбителей,
Vinod E S (VU3ESV) , Jayaprakash L V (VU2JLH) (
http://100nf.blogspot.com.ee/2016....or.html) предложили реализовать
контроллер управления и отображение азимута на базе Ардуино Мега 2650. Сейчас эта страница уже недоступна.
Составил список необходимых деталей, не стал заморачиваться с аналогами и искать их в Ташкенте (оно ещё и дороже будет),
заказал почти всё на Алиэкспресс.
Пока ждал посылок (уж больно долго, от месяца до двух, а TFT 3,2 так и не приехал, пришлось заново заказывать комплектно со второй Мегой),
так вот - пока ждал, нарисовал платки блока реле и удлинителя шины I2C.
Приобрел комплектующие, собрал макет, залил скетч "Arduino based Antenna Rotator Controller - Latest Code" - результат нулевой.
Долго ковырялся (программер ещё тот!), лазал в сети пока на наткнулся на Ваш сайт.
Скопировал текст программы, прошил и... ЗАРАБОТАЛО!!!
Единственное НО, при проверке скетча в Ардуино ИДЕ выскакивала ошибка:
In function 'void ResetInputBuffer()':
NEW_Rotator:516:16: error: incompatible types in assignment of 'char' to 'char [3]'
KeyEntries = '\0';
После того как я её за//ил , ошибка пропала. Скетч прописался и индикатор ожил. Вводятся параметры с клавиатуры, отрабатываются команды
на включение привода, отображается направление...И опять НО - азимут показывается случайный, нет информации с акселерометра.
Его я проверил отдельно, он работает, правда не калибровал. А под прогой контроллера - молчит. В порту ни чего не видно.
Исходя из сказанного выше встал вопрос:
Как побороть // KeyEntries = '\0'; и заставить читать акселерометр GY-271? (адрес акселерометра я заменил на отсканированный I2C сканером).
KeyEntries = '\0' одолел на следующий день после возникновения вопроса который встал
. Поневоле, ковыряясь в коде программы и поиске
инфы по теме программирования на С++ (ардуиновский язык похож, ну о-о-очень!) приобретаешь какие то знания. Так вот они (ковыряния) и помогли
поставить между "KeyEntries" и "= '\0'" скобочки с i " [ i ] " !!! Всего то!!! Ну, как говорится: "Век живи, век учись". Правда я не понял почему в скопированном
из статьи авторов тексте прошивки пропал этот фрагмент. Ну да ладно, проехали!
Свой вопрос "Как побороть..." я в личном обращении адресовал Сергею ES1ACS. На что он посоветовал использовать магнетометр HMC5883L на плате изображенной
на схеме соединений узлов контроллера. И прислал ссылку
https://www.youtube.com/watch?v=twirOS1tPvU .
У меня вот такая плата:
Она собрана на чипе DB5883L, а он оказался ваще-е-е капризный.
Буду заказывать
https://ru.aliexpress.com/item/32912371637.html?spm=a2g0o.productlist.0.0.9e0f566fzX6lHh&algo_pvid=e1520f7d-e53c-4b35-a5c0-cfc051346049&algo_expid=e1520f7d-e53c-4b35-a5c0-cfc051346049-0&btsid=6f43fc24-7f7f-480b-89bf-b9d67ee1b21f&ws_ab_test=searchweb0_0,searchweb201602_7,searchweb201603_55Ну, а по поводу привода: есть два, один из бортовой механизации самолета (я в него уже многооборотный резистор вмонтировал с парой шестерен). Там стоит
двигатель постоянного тока с двумя обмотками "по часовой" и "против часовой" с общим " - ". Блок реле упрощается.
И второй:
Ну, пока будет приезжать магнетометр, буду собирать платки.
О полученном результате сообщу дополнительно.
P.S.
По информации, почерпнутой из Веб, для более надежного отображения азимута стоит использовать связку HMC5883L + MPU6050 (акселерометр).
Правда придется править программу, тут уж сам точно не справлюсь. Хотя...