A A A A Автор Тема: Универсальная система управления телескопом на Arduino  (Прочитано 194850 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн IovchАвтор темы

  • *****
  • Сообщений: 1 306
  • Благодарностей: 124
    • Сообщения от Iovch
На форуме уже имеется несколько тем, посвященных системам управления монтировками, собранных на базе компонентов ардуино, в частности:

Простая система управления монтировкой на Arduino
Управление монтировкой на ШД Arduino + grbl
GOTO на Arduino практическая реализация "Импортозамещение"

   В результате изучения этих, и многих других источников, у меня сложилось четкое представление, как простейшим образом, на базе компонентов Ардуино можно решить некоторые вопросы, связанные с управлением телескопом.
   В настоящий момент собран действующий образец управляющего блока на базе Ардуино нано и драйверов А4988 для монтировки на шаговых двигателях с выходом для подключения электрофокусера, с индикацией координат наведения и прочей информации на двухстрочном LCD, с возможностью выполнения команд GOTO задаваемых с ПК, с возможностью подключения проводного устройства управления. Реализовано прямое подключение к плагину «управление телескопом» программы Stellarium. Разработано программное обеспечение для управления экваториальной и альт-азимутальной монтировками, масса тестовых программ. Собранная система управляет монтировкой из комплекта Деагостини «Собери свой телескоп» (аналог Astro-3, на фото), но система подойдет для управления любой монтировкой на шаговых двигателях. Пришло время собрать окончательный вариант изделия уже с беспроводным управлением. В процессе переборки системы, попытаюсь систематизировать и показать в этой теме, от простого к сложному, как простейшим образом, на Ардуино можно реализовать тот или иной функционал. Думаю, материал будет полезным.

Для удобства ориентирования в теме привожу здесь ссылки на основные моменты и программы:

Астротрекер или привод оси прямого восхождения, описание электронной части:
Универсальная система управления телескопом на Arduino
Астротрекер или привод оси прямого восхождения, скетч GOTO1 + драйвер ch341ser.zip:
Универсальная система управления телескопом на Arduino
Привод оси склонений и элемент управления (джойстик), ускорение перемещений, описание:
Универсальная система управления телескопом на Arduino
Привод оси склонений и элемент управления (джойстик), ускорение перемещений, скетч GOTO2:
Универсальная система управления телескопом на Arduino
Система управления экваториальной монтировкой с функциями GOTO, описание и скетч GOTO3:
Универсальная система управления телескопом на Arduino
Прикручиваем управление фокусером к джойстику
Универсальная система управления телескопом на Arduino
Подключаем LCD, описание электронной части:
Универсальная система управления телескопом на Arduino
Подключаем LCD, скетч GOTO4 + драйвер LCD 1602:
Универсальная система управления телескопом на Arduino
Скетч GOTO4 с автоопределением и автоюстировкой джойстика:
Универсальная система управления телескопом на Arduino
Пульт ИК часть 1 (Slave), описание электронной части:
Универсальная система управления телескопом на Arduino
Пульт ИК часть 1 (Slave), скетч GOTO5SLAVE, программа настройки и драйвер пульта ИК:
Универсальная система управления телескопом на Arduino
Пульт ИК часть 2 (Master), описание электронной части и скетч GOTO5MASTER:
Универсальная система управления телескопом на Arduino
Шаговый электрофокусер, описание электронной части:
Универсальная система управления телескопом на Arduino
Шаговый электрофокусер, скетч GOTO6MASTER.zip:
Универсальная система управления телескопом на Arduino
Версии GOTO6MASTER и GOTO6SLAVE для штатного ИК пульта ардуино:
Универсальная система управления телескопом на Arduino
Энергонезависимые часы реального времени:
Универсальная система управления телескопом на Arduino
Скетч для управления альт-азимутальной монтировкой GOTO7MASTER:
Универсальная система управления телескопом на Arduino


Ссылка на яндекс-диск со всеми материалами и стабильными версиями: https://yadi.sk/d/f1jTO1AohCtbz
« Последнее редактирование: 15 Авг 2019 [15:40:58] от Deimos »

Ньютон SW150/750, Рефрактор триплет 100/365_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн Кирилл В.

  • Новичок
  • *
  • Сообщений: 16
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от Кирилл В.
Iovch спасибо, перечитывая в очередной раз тему увидел, что этот файлик уже выкладывался. Прошу извинить за невнимательность.
Буду пробовать на свободные пины серву повесить для управления фокусером. Есть мысль, что было бы славно на пульте иметь колесо с возвратным механизмом (типа как сильно колесо отклонил - так быстро крутится серва. Отпустил - колесо встало обратно и серва замерла).
Под это дело пришлось 3д-принтер собирать, чтоб корпуса выращивать)

Пока пытаюсь разобраться, как управлять моторами с помощью 4 кнопок + переключение скоростей.
Очень надеюсь на совет, если трудности возникнут)
« Последнее редактирование: 15 Июн 2017 [16:09:02] от Кирилл В. »
Новичок.
sw150750eq3-2

Оффлайн IovchАвтор темы

  • *****
  • Сообщений: 1 306
  • Благодарностей: 124
    • Сообщения от Iovch
...Под это дело пришлось 3д-принтер собирать, чтоб корпуса выращивать)
Ну это сильно! Фото прикрепил конструкции из сгоревшего блока питания от светодиодных лент.
Ньютон SW150/750, Рефрактор триплет 100/365_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн Кирилл В.

  • Новичок
  • *
  • Сообщений: 16
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от Кирилл В.
Ну это сильно!
Красоту хочу навести, хотя по деньгам можно было бы готовый апгрейд для ку5 взять)
Спасибо за фото коробочки, в свою очередь компаную иначе:
Креплю мотор RA, в его же короб cnc.shield+nano. Из этого короба четыре шнура: на светодиодную подсветку ног монтировки (запинаюсь все время), 7pin на пульт, питание 12в, и 8pin в короб мотора DEC, из которого тонкий трехжильный на сервопривод фокусера)
Все не просто, из готовых корпусов получалось не очень, вот и приходится)
В общем вариация на тему eq5synscan)

В проекте выглядит крайне опрятно)
Ну и пульт будет копией одного "рога" от джойстика для игровых приставок типа PS3.
Новичок.
sw150750eq3-2

Оффлайн Oleg1601

  • *****
  • Сообщений: 997
  • Благодарностей: 34
    • Сообщения от Oleg1601
Есть мысль, что было бы славно на пульте иметь колесо с возвратным механизмом (типа как сильно колесо отклонил - так быстро крутится серва. Отпустил - колесо встало обратно и серва замерла).
Именно так джойстик и работает. В схеме/ в теме это всё есть - читайте.
Телескоп: Рефрактор ахромат 102/1000 (SAM), рефлектор ньютона DS DTF 130/1000 (MOD), монтировка DS-EQ3/AT-5 (MOD)

Оффлайн Кирилл В.

  • Новичок
  • *
  • Сообщений: 16
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от Кирилл В.
Именно так джойстик и работает. В схеме/ в теме это всё есть - читайте.
Подразумевался потенциометр-крутилка)
В продаже за приемлимые деньги "потенциометрический датчик положения с возвратной пружиной" не встречал, а мне приперло именно колесо, как на фокусеры ставятся)
А тему да, снова и снова, пусть урывками, читаю) Очень много полезного)
Новичок.
sw150750eq3-2

Оффлайн Oleg1601

  • *****
  • Сообщений: 997
  • Благодарностей: 34
    • Сообщения от Oleg1601
В продаже за приемлимые деньги "потенциометрический датчик положения с возвратной пружиной" не встречал, а мне приперло именно колесо, как на фокусеры ставятся)
Не нужно усложнять, пользуйтесь проверенными и опробованными на практике решениями. Кроме того, даже если и купите такой датчик, кто под него вам напишет программу? Если сможете сами, тогда вопросов нет.
Телескоп: Рефрактор ахромат 102/1000 (SAM), рефлектор ньютона DS DTF 130/1000 (MOD), монтировка DS-EQ3/AT-5 (MOD)

Оффлайн IovchАвтор темы

  • *****
  • Сообщений: 1 306
  • Благодарностей: 124
    • Сообщения от Iovch
Кстати про усложнения. В результате всевозможных усложнений, схема контроллера монтировки выглядит теперь так. И скорее всего это окончательный вариант. Программно не весь заложенный здесь функционал реализован. В частности, контакты A6 A7 разъема фокусера и датчика температуры не опрашиваются пока. А вот управление затвором фотоаппарата работает. Пришлось несколько расширить NexStar протокол командой FXXXX, где ХХХХ - время экспозиции в секундах, если 0, то выдается импульс 200 мс в расчете, что выдержка определяется фотоаппаратом. Панорамка из автоматически отснятых 35 кадров (около 160 град) ниже.
Ньютон SW150/750, Рефрактор триплет 100/365_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн vladimir-sto

  • Новичок
  • *
  • Сообщений: 33
  • Благодарностей: 0
    • Сообщения от vladimir-sto
Добрый день.
Пришёл заказанный экран. При подключении LCD экрана он светится и всё. Так как раньше прошивал без него, решил прошить с ним.
Но не получается. Валятся предепреждения:
 
sketch\GOTO4.h: In function 'void LCDCOR(int)':

sketch\GOTO4.h:239:63: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

   if(pKey!=0 && !bAlignment) LCDPrintSTR (" Correction ", 2, 1);

                                                               ^

sketch\GOTO4.h:242:53: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

    case   1: if(iStDX!=0) LCDPrintSTR ("  > ", 2, 13); else LCDPrintSTR ("N/S Position ERR", 2, 1); break;

ну и так далее.
В итоге "произошла ошибка при загрузке скетча"
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
...

Пробовал на разных компах с разными версиями Arduino IDE 1.6.2 и 1.8.3
Почему ей не нравится тип переменной?


Оффлайн IovchАвтор темы

  • *****
  • Сообщений: 1 306
  • Благодарностей: 124
    • Сообщения от Iovch
Попробуйте как вариант там где ошибка возникает, вместо функции LCDPrintSTR () использовать LCDPrintString () с теми же аргументами. Функции идентичны, только входные параметры по разному воспринимают.
Ньютон SW150/750, Рефрактор триплет 100/365_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн xd

  • *****
  • Сообщений: 17 982
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
Скорее всего неправильно определена функция LCDPrintSTR: вместо аргумента const char* написано char*, что не нравится компилятору.
Если есть возможность её подправить - лучше так и сделать. Если она взята из какого-то публичного репозитория, то сделайте pull request или автору напишите.
Если совсем никак, а хочется избавиться от варнингов, сделайте вот так:
Код
    case   1: if(iStDX!=0) LCDPrintSTR ("  > ", 2, 13); else LCDPrintSTR ("N/S Position ERR", 2, 1); break;
замените на
    case   1:
        if(iStDX!=0)
        {
             char buf[] = " > ";
             LCDPrintSTR (buf, 2, 13);
         }
        else
        {
              char buf[] = "N/S Position ERR";
              LCDPrintSTR (buf, 2, 1);
         }
        break;

и во всех случаях аналогично: сделайте переменную buf типа char[] с длиной, вычисляемой из инициализатора, её передайте в функцию печати, и всё это заключите в фигурные скобки, чтобы ограничить время жизни переменной buf.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн vladimir-sto

  • Новичок
  • *
  • Сообщений: 33
  • Благодарностей: 0
    • Сообщения от vladimir-sto
Спасибо,переименование помогло, предупреждений нет, но в конце загрузки скетча:
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
...
Что-то с ардуинкой не так, наверное под замену.

Оффлайн xd

  • *****
  • Сообщений: 17 982
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
Может быть не та модель в меню выбрана?
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн vladimir-sto

  • Новичок
  • *
  • Сообщений: 33
  • Благодарностей: 0
    • Сообщения от vladimir-sto
Точно, вчера сидел с Uno, а тут Nano.
Все загрузил, движки не подключены, забыл провода на работе.
На экране без подключённых движков, должно что-то отображаться? Просто синим горит и всё.

Оффлайн IovchАвтор темы

  • *****
  • Сообщений: 1 306
  • Благодарностей: 124
    • Сообщения от Iovch
Без движков все должно отображаться. Но надо подобрать регулятором на LCD правильную яркость/контраст, а главное LiquidCrystal_I2C lcd(0x27,16,2); - здесь правильный адрес порта должен быть (0x27), но он может и другим быть.
« Последнее редактирование: 17 Июн 2017 [10:18:10] от Iovch »
Ньютон SW150/750, Рефрактор триплет 100/365_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн vladimir-sto

  • Новичок
  • *
  • Сообщений: 33
  • Благодарностей: 0
    • Сообщения от vladimir-sto
Не показывает дисплей символы хоть тресни. При загрузке скетчей из библиотеки LiquidCrystal то же самое. Модуль I2C припаивал сам, может коротыш, хотя проверял в микроскоп.  Плохой контакт на экран, пошевелил, вроде прямоугольники горят нужные, текста пока нет.
« Последнее редактирование: 17 Июн 2017 [21:56:27] от vladimir-sto »

Оффлайн IovchАвтор темы

  • *****
  • Сообщений: 1 306
  • Благодарностей: 124
    • Сообщения от Iovch
А правильную ли библиотеку подключаете? В случае использования I2C интерфейса и библиотека должна быть не LiquidCrystal, а LiquidCrystal_I2C1602V1.
Ньютон SW150/750, Рефрактор триплет 100/365_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн Кирилл В.

  • Новичок
  • *
  • Сообщений: 16
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от Кирилл В.
Если сможете сами, тогда вопросов нет.
Сам, на пару с видеоуроками)
Кстати про усложнения.
Выключатель моторов для возможности руками привода крутить?
Новичок.
sw150750eq3-2

Оффлайн IovchАвтор темы

  • *****
  • Сообщений: 1 306
  • Благодарностей: 124
    • Сообщения от Iovch
Выключатель моторов для возможности руками привода крутить?
И для этого в том числе. Во многих случаях оказалось полезным снимать напряжение с двигателей, а т.к. система мобильная, получается хороший способ экономить энергию аккумуляторов, не отключая систему. Переключатель в положении "Alarm" переводит контроллер монтировки в режим трекера экваториальной установки со звездной скоростью, полностью автономный аварийный режим работы.
Ньютон SW150/750, Рефрактор триплет 100/365_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн voiserg

  • *****
  • Сообщений: 615
  • Благодарностей: 7
  • GhostBuster
    • Сообщения от voiserg
Здравствуйте.
Осваиваю азимутал и проект Игоря кажется самым подходящим из всего что встречал.
Есть проблема:
драйвер А4988 в микрошаговых режимах не равномерно крутит мотор (даже в холостую, без нагрузки) - часть шагов делает, а часть пропускает. Например, при микрошаге 1/8 делает 5 шагов и пропускает 3 (хотя осциллографом видна работа ШИМ и на пропущенных шагах). Пробовал два разных биполярных мотора, с разными шагами на оборот - работают одинаково, с пропусками.
В шаговом режиме крутит нормально.
Похоже, это связано с toff в режиме Mixed Decay, но подстройка штатным резистором на плате драйвера не помогает.
Кто-то  с этим сталкивался ? 

Еще, кто-нибудь пробовал шагать драйвером с Ардуино Уно (Нано) командой tone() - выдача меандра определенной частоты ?
По-моему, это гораздо удобнее для ведения по RA или по азимуту, чем пошаговый контроль, обычно реализуемый в проектах (и у Игоря тоже), позволяет высвободить ресурсы для других задач.
В этом тоже столкнулся с проблемой. В мануалах написано, что команда tone() выдает сигнал с частотой, задаваемой целым числом, в герцах. У меня же получается какая-то неразбериха:
при задании 0 выдается меандр с периодом 32 мс (частота 31.2 Гц)
1 - 16 мс (62.5 Гц)
2 - 8 мс (125 Гц)
4 - 20 мс (50 Гц)
...
100 - 18 мс (55.5 Гц)
...
5000 - 0.2 мс (5000 Гц)
...
6400 - 0.16 мс (6250 Гц)
Период и частоты определял приблизительно по ЭЛТ осциллографу.
Видно, что большие числа примерно соответствуют частотам (порядка килогерц), а на малых частотах соответствия нет.
« Последнее редактирование: 05 Сен 2017 [12:07:39] от voiserg »
SW 130/650, МТО 11 СА, Юпитер 36, Юп 21, Canon 350, QHY5, Монти EQ-3,  EQ-1, ArduinoDrive
Водяной рефрактор "Бутылка",
Наблюдение кинетической аберрации света звезд

Оффлайн xd

  • *****
  • Сообщений: 17 982
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
В мануале же написано, что для UNO диапазон значений от 31 до 65535: https://www.arduino.cc/en/Reference/Tone

А вот кусочек кода библиотеки, где манипуляция частотой идёт для настройки таймера:
    // Set the pinMode as OUTPUT
    pinMode(_pin, OUTPUT);
   
    // if we are using an 8 bit timer, scan through prescalars to find the best fit
    if (_timer == 0 || _timer == 2)
    {
      ocr = F_CPU / frequency / 2 - 1;
      prescalarbits = 0b001;  // ck/1: same for both timers
      if (ocr > 255)
      {
        ocr = F_CPU / frequency / 2 / 8 - 1;
        prescalarbits = 0b010;  // ck/8: same for both timers

        if (_timer == 2 && ocr > 255)
        {
          ocr = F_CPU / frequency / 2 / 32 - 1;
          prescalarbits = 0b011;
        }

        if (ocr > 255)
        {
          ocr = F_CPU / frequency / 2 / 64 - 1;
          prescalarbits = _timer == 0 ? 0b011 : 0b100;

          if (_timer == 2 && ocr > 255)
          {
            ocr = F_CPU / frequency / 2 / 128 - 1;
            prescalarbits = 0b101;
          }

          if (ocr > 255)
          {
            ocr = F_CPU / frequency / 2 / 256 - 1;
            prescalarbits = _timer == 0 ? 0b100 : 0b110;
            if (ocr > 255)
            {
              // can't do any better than /1024
              ocr = F_CPU / frequency / 2 / 1024 - 1;
              prescalarbits = _timer == 0 ? 0b101 : 0b111;
            }
          }
        }
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/