Контроллер поворотки на Ардуино
  • RW0LDF
    Сообщения: 21
    Зарегистрирован: Сб мар 03, 2018 1:25 am
    Контактная информация:

    Контроллер поворотки на Ардуино

    RW0LDF » Сб мар 03, 2018 1:54 am

    Написать сей опус меня сподвигло то- что в сети нет описания занконченного изделия, для полного чайника в
    "Ардуино", коим и являюсь. То что нарыл сам и то что прислали друзья- выкладываю здесь. Итак...
    Собирать мы будем КОНТРОЛЛЕР ПОВОРОТНОГО УСТРОЙСТВА НА АРДУИНО.Контроллер заточен для угломестной поворотки, с отображением азимута и элевации 1-антенны, 2- луны, 3- солнца, текущего времени, направления антенны относительно сторон света, WW-локатора. Контроллер поддерживает след.функции:
    -ручное наведение антенны
    -автосопровождение луны
    -автосопровождение солнца
    -калибровка по луне
    -калибровка по солнцу
    -автопарковка
    -принудительный, ручной стоп
    Дисплей- 4-х строчный, 20-ти символьный. передача данных между антенным блоком и блоком инликации и управления по протоколу RS-232.Используемые датчики углов поворота- магнитные энкодеры AS5045 (12-ти битные), что позволяет индицировать угол поворота с точностью до десятой градуса.
    Все комплектующие (кроме кнопок) я заказывал на Алиэкспресс, общая стоимость растаращилась, примерно в 1500 рублей (стоимость контроллера от VK5DJ в два а то и более раз больше). Что нам нужно приобрести:
    1- Arduino Nano 328 https://ru.aliexpress.com/item/Nano-V3- ... 77152.html?
    2- Arduino Mega 2560 (различаются USB разъемом) https://ru.aliexpress.com/store/product ... yId=400103
    3- TTL/RS-232 adapter (две штуки- один для Нано, другой для Мега) https://ru.aliexpress.com/item/RS232-to ... 68742.html
    4- LCD display 20x4 https://ru.aliexpress.com/item/Free-shi ... 4.9.jEz5VD
    5- часы https://ru.aliexpress.com/item/I2C-RTC- ... b896c798b5
    6- блок реле (4 реле на плате) https://ru.aliexpress.com/item/1pcs-lot ... c7a0fb6844
    7- плата с кнопками https://ru.aliexpress.com/item/Integrat ... autifyAB=0
    Замечание по дисплею- брать нужно с I2C адаптером, это нужно для "экономии проводов" и что бы не заморачиваться с адресами (я упустил этот момент и I2C платку покупал отдельно).
    8- магнитные энкодеры https://ru.aliexpress.com/item/2-AS5045 ... autifyAB=0 - в этой ссылке они без магнитов, поэтому нужно у продавца заранее спросить магниты либо найти у другого продавца (ну или купить магниты отдельно) Плату энкодера изготавливаем сами (лайотовского файла у меня нет, к сожалению)
    Продолжение следует...
    Вложения
    Arduino Mega.jpg
    Arduino Nano.jpg
    AS5045.jpg
    LCD.jpg
    LCD_I2C.jpg
    Keyboard.jpg
    LCD.jpg
    блок реле.jpg
    часы.jpg
    плата энкодера.JPG
    Последний раз редактировалось RW0LDF Вс мар 04, 2018 2:40 am, всего редактировалось 5 раз.
  • RW0LDF
    Сообщения: 21
    Зарегистрирован: Сб мар 03, 2018 1:25 am
    Контактная информация:

    Re: Контроллер поворотки на Ардуино

    RW0LDF » Сб мар 03, 2018 3:08 am

    Пока ждем заказы с Али, можно заказать платки энкодеров у Виктора UA9YLU (я заказывал именно у него)его адрес- позывной@mail.ru (админ- не сочти за рекламу!) Ну или "утюжим" сами.
    Платки рассчитаны на установку на дно крышки старого, советского переменного резистора СП-1. Но так как этот метод (приклеивания к крышке) мне не понравился и диаметр ручки мне не подходил, стал думать из чего же сделать корпус под мои условия. Взор упал на резисторы СП3-33. Они имеют пластиковый корпус и платка энкодера влезает как надо!(если что то не будет влезать- корпус можно немного подрезать ножичком) Разобрал резистор, срезав запайки днища. Выдрал потроха с вала переменника. В том месте, где крепилось днище (в местах стоек-запаек) просверлил два отверстия под мелкие саморезы. Платку вырезал под размер копуса резистора с небольшим запасом (около 1-2мм, как бы "внахлёст"), в плате просверлил отвествия под саморезы, прикрутил плату к корпусу, дабы замерить расстояние от корпуса энкодера, до верхней кромки резьбы-крепления бывшего теперь резистора, штангенциркулем. Это нужно для того, что бы знать- длину вала, с учётом крепления магнита и установки стопорных шайб. То место, где крепился "бегунок" резистора срезал, вставил вал в корпус и на кромке резьбы, на валу сделал метку и потом на этом месте, сделал прорезь для установки стопорной шайбы (что бы вал не болтался как отходы жизнедеятельности в проруби). Некоторое замечание- магнит должен висеть над энкодером на расстоянии около 1 мм. Магнит я клеил на эпоксидный клей, зажав вал в тиски. Если магнит ляжет на вал не ровно- можно на край вала, со стороны "завала" подложить бумажку, а потом, после высыхания её подрезать. Ещё замечание по поводу вала- вал ОБЯЗАТЕЛЬНО должен быть из НЕМАГНИТНОГО материала! Когда (чуть не написал- полимеризуется) застынет клей, собираем все в кучу, предварительно припаяв провода и ПОДПИСАВ их (что бы потом не думать- где DATA, где CLOCK, а не наоборот ли припаял???). Покрутили вал, характерного шебуршания о пластик нет? Тогда здорово!Морально готовимся к походу на почту и этому сладостному чувству- вскрытия посылок! ;)
    Вложения
    энкодер1.jpg
    энкодер2.jpg
  • RW0LDF
    Сообщения: 21
    Зарегистрирован: Сб мар 03, 2018 1:25 am
    Контактная информация:

    Re: Контроллер поворотки на Ардуино

    RW0LDF » Вс мар 04, 2018 2:10 am

    ...едем дальше. Допустим- посылочки уже пришли, мы их распечатали, полюбовались платками и что дальше? А дальше самое вкусненькое! Итак:
    Основная масса плат Ардуино комплектуются разъемами USB Micro, достаем такой шнурок (спорим- он есть почти у любого- таким шнурком заряжаем и сливаем фото в компьютер с мобильного телефона) и с его помощью подключаем Ардуинку к компьютеру. Что произошло? Сейчас узнаем- жмем кнопку "ПУСК" в виндоуз, далее- "панель управления" - "система" - "оборудование" (возможны варианты- я сейчас про Windows XP) и что видим? Скорее всего "USB2.0 Serial" помеченый желтым восклицательным знаком. Сие означает, что Винда не определила устройство и нужно скачать драйвер. Одним из наиболее популярных устройств на CH340G является переходник USB-COM TTL модель BTE13-009 от китайского производителя BAITE, который и стоит в Ардуинке. Драйвер берем отсюда: http://www.driverscape.com/download/usb-serial-ch340 Как его правильно установить- тут: http://arduino-project.net/driver-ch340g/
    Итак, драйвер встал ровно, Винда определила Ардуинку как "USB-SERIAL CH340 (COM7(ну или какой там Винда определила под Ардуинку))- отлично! Небольшое отступление, для тех- кто про Ардуино что то слышал, но что это за зверюга- не имеет ни малейшего представления, вот ссылка: http://amperka.ru/page/what-is-arduino это описание этого зверька. Ну-с теперь самое интересненькое- нам нужна программная среда Ардуино. Качаем с сайта разработчика, последнюю версию: https://www.arduino.cc/en/Main/Software Как её установить и настроить- читаем тут: https://all-arduino.ru/arduino-ide/ Там автор советует устанавливать версию 1.6.5, но у меня при прошивке скетчей сыпались ошибки, после установки последней версии, Ардуинки прошились как надо. Раз уж я упомянул про скетч, то для несведущих поясню, скетч- это такая микропрограмма, со своими библиотеками, которая и зашивается в Ардуино.
    Программную среду Arduino IDE мы установили, Ардуинку подключили (внешнее питание подавать не надо!) как советуют умные дядьки- проверили (изменили частоту) мигания светодиода, все работает! Теперь, я бы посоветовал поступить следующим образом: сначала прошить Ардуино Нано, потом Ардуино Мега. Шьем Нанку- файлы лежат тут: https://cloud.mail.ru/public/6arF/jU8sucDgu по названию- понятно что откуда брать. Разархивируем файл, заходим в папку и видим две папки, название одной из них "k3ng_rotator_controller", в неё и ныряем и видим кучу текстовых файлов (которые нам пока без надобности) и один "k3ng_rotator_controller.ino" это и есть скетч, который мы будем загружать в ардуинку. С путями-дорогами понятно, теперь приступим к программированию:
    Запускаем среду программирования Aruino IDE, не забываем в "инструментах" указать модель платы: http://SSMaker.ru/7b20a9e9/ жмем "файл"- "открыть" находим скетч: http://SSMaker.ru/c2bfbe03/ жмем "открыть". Теперь скетч должен загрузиться в отдельное окно.Теперь, в этом окне, в левом, верхнем углу, нажимаем кнопку со стрелочкой и контролируем процесс загрузки (компиляции), в нижнем черном окне. Если все проходит благополучно, то строки программы высвечиваются белым на черном фоне, если проскочит какая то ошибка, то строка будет красной. Проверка и отчет о прошивке высвечивается красным, так что не паникуйте раньше времени! В заключении прошивки, программа сообщит о выполненной операции и будет понятно- есть ли ошибка. Если она есть, то нужно закрыть программу и повторить все действия, о которых я писал начиная с "Запускаем среду программирования..." и т.д. Надеюсь что все прошилось как надо! Для успокоения души- жмем на кнопку с галочкой (левый, верхний угол окна программы). Повторяем все эти действия с Ардуино Мега (какой скетч загружать- надеюсь понятно!). Кстати, не пугайтесь, если после загрузки, светодиод на Ардунках перестанет мигать- так надо! ;) Ну вот вроде и всё про программирование, есть некоторые детали, как то- изменение WW-локатора, но об этом позже...
  • r0lu
    Сообщения: 14
    Зарегистрирован: Вс дек 10, 2017 10:29 am
    Откуда: Уссурийск
    Контактная информация:

    Re: Контроллер поворотки на Ардуино

    r0lu » Пн мар 05, 2018 12:41 pm

    Сергей , интересная статья !
    Посмотрел скетч , да ... , там профи работали ( несколько иностранных радиолюбителей ) - каждый писал тот блок , за который отвечал ... Времени изучить всю программу нет , возникли вот такие вопросы :
    - У Вас получилось запустить этот проект ? Схема подключения полная есть ?
    - Как решился вопрос с удаленным подключением Магнитного Энкодера 5045 ? ( см файл 1 это Программируемый Магнитный Контроллер и файл 2 удаленность проводов подключения ) . Подключение такого Энкодера , согласно Datasheet , возможно по проводам не более 5 см в режиме программирования . Возможно в обычном рабочем режиме эта длинна проводов и больше , но не думаю что значительнее . Меня смутила 12-ти битная адресация к этой мс . Возможно шину подключения преобразуют в I2C , но и там ограничение по дальности есть . В итоге поворотное устройство и его модуль управления на каком расстоянии находятся др от др ? 2 метра ( это при 100КГц Clock I2C протокола даже будет плохо ) . Нужна схема подключения .
    - По функции millis отдельный вопрос . Эта функция имеет свой предел , а в программе ( скетче ) встречается часто . Возможно где-то в программе есть строка , которая всегда опережает значение millis на несколько миллисекунд ( эта проблема была описана в начальных уроках программирования в Ардуино , максимальное ее значение может быть 4294967295 мс, что примерно ровняется 50 суткам) . Иначе программа через 50 суток поведет себя непредсказуемо . ( Опыт непредсказуемости был доказан лично моим сотрудником , когда был залит его огород с помидорами автоматикой собранной на Ардуино с использованием именно этой функции millis . Прошли эти несчастные 50 суток и программа перестала считать миллисекунды , открыла клапан подачи воды , испортила всю посадку ) . Конечно если в течении 50 суток выключить устройство и включить его заново то весь отсчет начнется заново , но ... это не то .

    Спасибо за статью , даже не думал что до такого уровня у нас в Приморском крае Ардуино в радио используют .
    73 !
    Дмитрий
    Вложения
    AS5045.jpg
    1-й
    Подключение AS5045.jpg
    2-й
  • RW0LDF
    Сообщения: 21
    Зарегистрирован: Сб мар 03, 2018 1:25 am
    Контактная информация:

    Re: Контроллер поворотки на Ардуино

    RW0LDF » Ср мар 07, 2018 1:22 pm

    Здравствуйте, Дмитрий
    Мой проект пока на стадии макетирования, на столе, в виде отдельных плат все работает. Схемы подключения ессно- будут, работа немного задавила. В европейской части России ребята сей проект опробовали и видимо не зря на vhfdx.ru есть отдельная ветка по этому поводу. Я же решился написать здесь об этом, только по причине о которой писал выше- с чего начать, незнайкам, к коим себя и отношу. Просто собрал материал (за что ребятам помогавшим- огромное спасибо!)и выложил здесь.
    "Прошли эти несчастные 50 суток и программа перестала считать миллисекунды , открыла клапан подачи воды , испортила всю посадку ) " Мы же не будем держать включенным контроллер такое время, правда?!
    К стати, энкодеры не прошиваются, прошиваются контроллеры, к коим они подключаются!
  • RW0LDF
    Сообщения: 21
    Зарегистрирован: Сб мар 03, 2018 1:25 am
    Контактная информация:

    Re: Контроллер поворотки на Ардуино

    RW0LDF » Чт мар 08, 2018 4:58 am

    Ну теперь аппаратная часть, т.е. соединения.
    Схему рисовать не буду (т.к. не умею)) опишу на словах, думаю разберетесь. Основные подключения в файле "Соединения" https://cloud.mail.ru/home/arduino/%D0% ... D1%8F.docx
    Во первых нам понадобятся блоки питания 9-12 вольт. Для Нанки подойдет с током 300 мА, для Меги 0,5А и выше. Подключаем их к пинам Vin (+ ессно!). На ардуинках есть стабилизаторы напряжения +5v и 3,3v задействуем +5v для подключения плат расширения (TTL\RS232- например). Нанку желательно установить на монтажную плату, к ней же припаять преобразователь (RS232).
    Некоторые не соотвествия названий выводов на плате энкодера:
    Do это на Нанке Data
    Csn это на Нанке Cs
    Clk совпадает с Clock
    +5V для энкодеров берем с внутреннего стабилизатора Нанки (землю то же!)))
    Распиновка Меги здесь: http://arduinolife.in.ua/mcu01/
    Подключение дисплея по I2C осуществляется к пинам SDA и SCL (20-й и 21-й на Меге) про питание- понятно. https://arduinomaster.ru/datchiki-ardui ... ley-ekran/
    Часы мы цепляем на те же пины (параллельно, Мега разберется с прерываниями)
    Ну вот вроде и всё. Про корректировки немного позднее...
    Вложения
    IMG_20180219_183542.jpg
    IMG_20180219_184529.jpg
  • r0lu
    Сообщения: 14
    Зарегистрирован: Вс дек 10, 2017 10:29 am
    Откуда: Уссурийск
    Контактная информация:

    Re: Контроллер поворотки на Ардуино

    r0lu » Чт мар 08, 2018 9:39 am

    Сергей , увидел на форуме УКВистов обсуждения этого проекта .
    Я сам начинающий во всем что касается Ардуино , жаль в 80-е годы у нас такого небыло !!!
    Чтоб не тратить время ссылка вот на первоисточник обсуждения :
    http://forum.vhfdx.ru/povorotnye-ustroy ... otki/1095/
    Надеюсь на все свои вопросы там ответы найти .
    Немного еще по теме :
    Пока разбираюсь с программируемым магнитным энкодером 5045 в этом проекте ( 12-ти битная адресация , для сравнения везде используется 7-ми битная http://www.support17.com/component/cont ... ?task=view или 10-ти битная http://embedded.ifmo.ru/embedded_old/ET ... /13_14.htm ) . Конечно в микросхеме 5045 изначально принудительно можно задать адрес подав на шину адреса нужную комбинацию заняв возможный адрес из библиотеки http://radioprog.ru/post/234 для Ардуино I2C с 7-ми битным вариантом чтоб библиотеку не переписывать под 12-ти битную. Тогда не нужен промежуточный контроллер между ардуино и энкодером . ( если по битам смотреть - "0" на массу , "1" на + питания через подтягивающий резистор - это на плате на предыдущих фото у Вас видно какие ножки на "-" какие на "+" - можно адрес вычислить по этой плате для 5045 ) .
    Про 50 дней и функцию millis сказал специально . Кому нужно - поймут . Всегда , когда вижу строку с этой функцией далее по Скетчу ищу строку с обнулением или опережением задержки , все описано в уроках программирования на Ардуино .

    Ждем еще информации по Вашему проекту !
    Всего хорошего ,
    Дмитрий R0LU
  • RW0LDF
    Сообщения: 21
    Зарегистрирован: Сб мар 03, 2018 1:25 am
    Контактная информация:

    Re: Контроллер поворотки на Ардуино

    RW0LDF » Вс мар 11, 2018 5:52 am

    Изменения в скетче для Меги, "под себя":
    В папке "k3ng_rotator_controller" в файле "rotator_setting" находим строки:

    #define CALL "/RW0LDF" //Чтобы было через дробь K3NG/RW0LDF При загрузке

    Меняем "/RW0LDF" на свой позывной и при загрузке контроллера, на дисплее будет высвечиваться Ваш позывной, через дробь с K3NG. Следующие две строки:

    #define DEFAULT_LATITUDE 44.371705 //Координаты Вашего локатора!!!!!!!!!!!!!!!!!!!!!!!
    #define DEFAULT_LONGITUDE 135.793022
    Здесь вписываем свои координаты для отображения локатора и "привязки" контроллера к Вашему QTH.
    В архиве- описание настроек.
    Вложения
    rotatorhelp_ru.rar
    (81.35 КБ) 47 скачиваний
  • RW0LDF
    Сообщения: 21
    Зарегистрирован: Сб мар 03, 2018 1:25 am
    Контактная информация:

    Re: Контроллер поворотки на Ардуино

    RW0LDF » Пн мар 12, 2018 3:50 am

    RTC- часы реального времени. Установка и запуск.
    RTC- это модуль реального времени, собранный на чипе DS1307. В платах Arduino уже есть встроенный таймер времени Millis,
    однако он работает только при поданном питании на плату. При отключении и дальнейшем включении Arduino отсчет времени Millis
    сбросится до нуля. А DS1307 имеет на борту батарейку, которая даже при отключенной плате Arduino продолжает «питать» модуль,
    позволяя ему измерять время.
    Подключается модуль по шинам SCL SDA VCC GND. Для "запуска" часов, нам нужно поключить ардуинку через USB кабель к компьютеру
    и на последнем, запустить среду Arduino IDE. В правом, верхнем углу окна программы, находим кнопочку с изображением лупы- т.н.
    Монитор порта, жмем на него. Всплывет новое окно монитора. Сверяем скорость монитора и скорость самого порта (ПАНЕЛЬ УПРАВЛЕНИЯ-
    СИСТЕМА- ОБОРУДОВАНИЕ- СОМ ПОРТЫ- СВОЙСТВА). По умолчанию, в мониторе стоит 9600. Около окошечка скорости порта (внизу окна)
    есть еще одно окошечко, в котором выставляем nl&cr. В верхнем, узком окошке набираем команду /o, в ответ, ардуинка отругается,
    чем то вроде: ERROR USAGE... Всё ОК, связь с платой есть, можно вводить дату и время. Пишем команду в формате: /oГОДМЕСЯЦЧИСЛОЧАСЫМИНУТЫ
    например: /o201803121323 ВАЖНО! ВРЕМЯ ВВОДИМ ПО ГРИНВИЧУ! и далее жмем на кнопку "отправить". В ответ, ардуинка, выдаст в нижнем
    окне ответ с текушем временем и датой. Теперь нужно отключить питание (выдернуть USB кабель) и подать питание снова. Часы должны
    показывать текущее время по GMT. Ура!
    Часы мы можем оставить в покое, на недельку. После этого, смотрим куда наши часы улетели- вперед или всё же отстают. Если есть
    расхождение времени, нужно поиграть с коррекцией. Точнее- с числом, находящимся в строке #define INTERNAL_CLOCK_CORRECTION -0.0250
    в файле rotator_settings.h
    Ради интереса, можно дать запрос о работе всей системы (при подключенном USB кабеле и запущенном мониторе порта, программы
    Arduino IDE), дав команду /d. В ответ ардуинка выдаст что то вроде:
    debug: 2.0.2016012301 2018-03-11 16:30:43Z RTC_SYNC 54.9714 82.8450 NO14kx GS-232B NOT_PARKED
    AZ: IDLE Q: - AZ: 239.5 (raw: 239.5) [100+140] AZ Speed Norm: 253 Current: 253 Offset: 0.00
    EL: IDLE Q: - EL: 46.0 EL Speed Norm: 253 Current: 253 Offset: 0.00
    moon: AZ: 49.53 EL: -47.44 TRACKING_INACTIVE sun: AZ: 321.23 EL: -32.46 TRACKING_INACTIVE

    Ту би континьюд...
    Вложения
    IMG_20180312_105644.jpg
    IMG_20180312_105700.jpg
    IMG_20180312_105713.jpg
  • RW0LDF
    Сообщения: 21
    Зарегистрирован: Сб мар 03, 2018 1:25 am
    Контактная информация:

    Re: Контроллер поворотки на Ардуино

    RW0LDF » Вт апр 10, 2018 2:14 pm

    Продолжим. Обнаружился один нюансик, который ввёл меня сначала в состояние ступора- после сборки базового блока, не срабатывала кнопка ССW. Есно, первое желание- переназначить ПИНы. Фигня вопрос! Залез в файл с описанием ПИНов, подкорректировал, перезалил скетч, перебросил провода- НЕ РАБОТАЕТ! Повторил сию операцию неоднократно с другими ПИНами- результат тот же. Тут наступило состояние ярости!! И когда залез в файл rotator setup и взглянул на дисплей до меня дошло- я мог до ишачьей пасхи кувыркаться с переназначением ПИНов, программа не позволила бы включить реле CCW, поскольку в файле rotator setup прописано ограничение по повороту 0 и 360 градусов. А так как нанка с энкодерами не была подключена, на дисплее высвечивался 0 по азимуту, поэтому прога и не давала включить реле CCW. Так что имейте это ввиду и не поддавайтесь эмоциям!))

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей