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

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

Оффлайн Луноход-1

  • **
  • Сообщений: 87
  • Благодарностей: 5
  • Директор Северо-Восточной Яблоновской обсерватории
    • Сообщения от Луноход-1
Кстати, может кому пригодится - покупал для фокусера МАКа шкив с дыркой на 12мм (здесь хатататпеэс://ru ./ссылка запрещена правилами форума//item/3D-printer-pulley-GT2-60teeth-bore-5mm-6-35mm-8mm-10mm-12mm-2GT-60-teeth-timing/32802382455.html)
С электрофокусером пока что отложил на потом, и тут оказалось, что шкив идеально встает на ручку тонких движений! В итоге я получаю и электропривод, и сохраняю ручной. Для меня это важно ввиду особенностей хранения, я могу расположить мотор или ручку движений только на одной стороне монтировки, поэтому фактически лишался ручки при установке мотора.
Труба ВОМЗ Т16х48 в тисках Зубр "Мастер - 3D", окуляр MEADE UWA 18/82

Оффлайн ASheff

  • *****
  • Сообщений: 10 512
  • Благодарностей: 248
  • Артем
    • Сообщения от ASheff
здесь хатататпеэс

да можно и не коверкать ссылки, вроде не ругаются :)
- Meade Maxvision 80/480 APO
- SW HEQ5Pro belt-mod
- Canon EOS 550Da, ASI 178MC, Datyson T7M
- MC Helios 44M-6, MC Юпитер-37А,Canon 70-200/4

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

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

Оффлайн newil86

  • Новичок
  • *
  • Сообщений: 22
  • Благодарностей: 2
  • Мне нравится этот форум!
    • Сообщения от newil86
В последнем рабочем варианте логика работы со стеллариумом вынесена в Мегу и транслируется в контроллер монтировки по СОМ порту на шилде. А контроллер монтировки "затачивается" для работы непосредственно с ПК через Аском по USB для обеспечения гидирования.
Добрый вечер! Если не секрет, скажите пожалуйста, как вы сделали проброс значений джойстика на "шилд" с "Меги"? Я в долгих поисках набрел на библиотеку https://github.com/scogswell/ArduinoSerialCommand
Джойстик подсоединил к Меге. Код считывания вынес опять же в Мегу. Передаю команду в шилд со значением джойстика (0, 16 ,64 и так далее). И вот тут затык - получается после того как я сую переменную в reaction - бесконечный цикл. Начинается вращение в одну сторону. Я понимаю почему - так как цикл do while. Но вот как переделать пока не могу понять (Чтобы в while () как то считывать снова значение, переданное через Serial.)

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

  • *****
  • Сообщений: 1 306
  • Благодарностей: 124
    • Сообщения от Iovch
Как ни странно у меня этот же момент недоделан на Меге, т.к. изменил скетч шилда под управление из аскома (см. выше). Там уже рулит функция p() - которая реагирует на р- последовательности NexStar протокола, передаваемые по USB и COM портам. В Меге же опрос джойстика совмещен с формированием этих последовательностей примерно так.
(кликните для показа/скрытия)
На шилд передаются значения Byte PJ[2][8], которые управляют монтировкой уже. Забавные рожицы прописались в спойлер: верхние две заменяют : ), остальные  8 )
« Последнее редактирование: 26 Окт 2017 [08:20:18] от Deimos »
Ньютон SW150/750, Рефрактор триплет 100/365_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн newil86

  • Новичок
  • *
  • Сообщений: 22
  • Благодарностей: 2
  • Мне нравится этот форум!
    • Сообщения от newil86
В Меге же опрос джойстика совмещен с формированием этих последовательностей примерно так.
Спасибо! "Будем посмотреть" =)

Оффлайн xd

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

У природы нет плохой погоды, у неё просто на нас аллергия.

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

Оффлайн Луноход-1

  • **
  • Сообщений: 87
  • Благодарностей: 5
  • Директор Северо-Восточной Яблоновской обсерватории
    • Сообщения от Луноход-1
Точно! Про червей в монтировке-то я совершенно забыл. Ну не рыбак я ))) Спасибо, сегодня ночью буду проверять заново посчитанные коэффициенты.
Теперь стало совершенно очевидным расхождение в скорости движения трубы по разным осям - количество зубов-то разное!
Труба ВОМЗ Т16х48 в тисках Зубр "Мастер - 3D", окуляр MEADE UWA 18/82

Оффлайн newil86

  • Новичок
  • *
  • Сообщений: 22
  • Благодарностей: 2
  • Мне нравится этот форум!
    • Сообщения от newil86
Iovch, не покидает мысль все же сделать общение между шилдом и мегой. Поковырял скетчи на предмет как передается управление с ИК пульта. Итого - в меге опрашиваю джойстик (он подключен к ней) методом AskJOY, далее Wire.write(iLastValue); передаю значение на шину i2c в Wire.onRequest(ReqEvent); В мониторе порта вижу верные значения.

На шилде - AskSlaveI2C
Wire.requestFrom(10,1); // Считать 1 байт с адреса 10
  if (Wire.available())   // slave may send less than requested
  {
    iRetValue = Wire.read(); // Полученный байт
  }

Но вот незадача - все время приходит 0. Смотрел в мониторе порта, выводя в него значение. Какие то цифры удалось увидеть только когда в методе  if (Wire.available()) заменил на while + получаю более 1 байта и складываю их в массив. Не понимаю почему у Вас работает чтение только первого байта а у меня нет...




PS - Разобрался сам) Потому что передавал сам больше 1го байта)))
« Последнее редактирование: 27 Окт 2017 [21:56:02] от newil86 »

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

  • *****
  • Сообщений: 1 306
  • Благодарностей: 124
    • Сообщения от Iovch
Подправил ошибки в приведенном выше сообщении Универсальная система управления телескопом на Arduino AskJOY() должна так выглядеть:

unsigned long AskJOY()
{
 unsigned long iRetValue=0;
 int iA1, iA2, iA3, iDX, iDY, iN;
 if (bJOY)
  {
  iA3 = analogRead(SW_JOY_SENCE);
  if(iA3<500) iRetValue=65536;
  else
   {
   iA1 = analogRead(X_JOY_SENCE);
   iA2 = analogRead(Y_JOY_SENCE);
 
   iDX=(iMJX<512)?(iMJX/10):((1023-iMJX)/10);
   iN=iA1/iDX-1;
   
   if((iN>=1) &&(iN<= 9))      {PJ[0][0]=2; PJ[0][1]=16; PJ[0][2]=36; PJ[0][3]=10-iN; PJ[0][4]=0; PJ[0][5]=0; PJ[0][6]=0; PJ[0][7]=1;} // X+
   if((iN==10)&&(PJ[0][7]==1)) {PJ[0][0]=2; PJ[0][1]=16; PJ[0][2]=36; PJ[0][3]=0;     PJ[0][4]=0; PJ[0][5]=0; PJ[0][6]=0; PJ[0][7]=0;} // Stop X
   if((iN>=11)&&(iN<=19))      {PJ[0][0]=2; PJ[0][1]=16; PJ[0][2]=37; PJ[0][3]=iN-10; PJ[0][4]=0; PJ[0][5]=0; PJ[0][6]=0; PJ[0][7]=2;} // X-
   if((iN==10)&&(PJ[0][7]==2)) {PJ[0][0]=2; PJ[0][1]=16; PJ[0][2]=37; PJ[0][3]=0;     PJ[0][4]=0; PJ[0][5]=0; PJ[0][6]=0; PJ[0][7]=0;} // Stop X

   iDY=(iMJY<512)?(iMJY/10):((1023-iMJY)/10);
   iN=iA2/iDY-1;
   
   if((iN>=1) &&(iN<= 9))      {PJ[1][0]=2; PJ[1][1]=17; PJ[1][2]=36; PJ[1][3]=10-iN; PJ[1][4]=0; PJ[1][5]=0; PJ[1][6]=0; PJ[1][7]=1;} // Y+
   if((iN==10)&&(PJ[1][7]==1)) {PJ[1][0]=2; PJ[1][1]=17; PJ[1][2]=36; PJ[1][3]=0;     PJ[1][4]=0; PJ[1][5]=0; PJ[1][6]=0; PJ[1][7]=0;} // Stop Y
   if((iN>=11)&&(iN<=19))      {PJ[1][0]=2; PJ[1][1]=17; PJ[1][2]=37; PJ[1][3]=iN-10; PJ[1][4]=0; PJ[1][5]=0; PJ[1][6]=0; PJ[1][7]=2;} // Y-
   if((iN==10)&&(PJ[1][7]==2)) {PJ[1][0]=2; PJ[1][1]=17; PJ[1][2]=37; PJ[1][3]=0;     PJ[1][4]=0; PJ[1][5]=0; PJ[1][6]=0; PJ[1][7]=0;} // Stop Y
   
   iRetValue=PJ[0][2];
   iRetValue=(iRetValue<<8)+PJ[0][3]; //Здесь генерируем абстрактное значение
   iRetValue=(iRetValue<<8)+PJ[1][2]; //соответствующее определенным положениям
   iRetValue=(iRetValue<<8)+PJ[1][3]; //джойстика
   }
  }
 return iRetValue;
}

Предварительно должна быть сделана автокалибровка джойстика bJOY=InitJOY() :

boolean InitJOY(void)
{
 int i;
 iMJX = 0;
 iMJY = 0;
 LCDSTR1="JOY calibrating";
 delay(50);
 for (i=1; i<=100; i++) {iMJX += analogRead(X_JOY_SENCE); delay(5);}
 iMJX = iMJX/i;
 LCDSTR2="MX=";
 LCDSTR2+=String(iMJX);
 LCDSTR2+=" ";
 delay(50);
 for (i=1; i<=100; i++) {iMJY += analogRead(Y_JOY_SENCE); delay(5);}
 iMJY = iMJY/i;
 LCDSTR2+="MY=";
 LCDSTR2+=String(iMJY);
 if((iMJX>=256)&&(iMJX<=768)&&(iMJY>=256)&&(iMJY<=768)) return true; else return false;
}

Почему-то не могу в вышеуказанном сообщении подправить, зафиксировано уже.
« Последнее редактирование: 28 Окт 2017 [20:36:40] от Iovch »
Ньютон SW150/750, Рефрактор триплет 100/365_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Онлайн Fatalik

  • Модератор
  • *****
  • Сообщений: 9 927
  • Благодарностей: 2012
  • Алексей
    • Instagram: fatalerror83
    • DeepSkyHosting: id8
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Fatalik
возобновил свои попытки изобразить моторизацию на ардуино =) (использовал гото3_3)
шилд версии3 и ардуино мега. :) корпус конечно эпичный. Это временный :)
« Последнее редактирование: 05 Ноя 2017 [00:01:56] от Fatalik »

Онлайн Fatalik

  • Модератор
  • *****
  • Сообщений: 9 927
  • Благодарностей: 2012
  • Алексей
    • Instagram: fatalerror83
    • DeepSkyHosting: id8
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Fatalik
Одна ось такая тугая что шаговик не может ее провернуть :)
Надо вникать в настройки черячной на еку3 :) займусь сегодня :)

Онлайн Fatalik

  • Модератор
  • *****
  • Сообщений: 9 927
  • Благодарностей: 2012
  • Алексей
    • Instagram: fatalerror83
    • DeepSkyHosting: id8
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Fatalik
Никак не могу к стеллариуму подключить гото3

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

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

Онлайн Fatalik

  • Модератор
  • *****
  • Сообщений: 9 927
  • Благодарностей: 2012
  • Алексей
    • Instagram: fatalerror83
    • DeepSkyHosting: id8
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Fatalik
Порт правильный. Настройки как написано. Стеллариуму два раза переставлял :)

(Блин до этого .. наверное с год назад же подключалось все.. а сейчас нет)

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

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

Онлайн Fatalik

  • Модератор
  • *****
  • Сообщений: 9 927
  • Благодарностей: 2012
  • Алексей
    • Instagram: fatalerror83
    • DeepSkyHosting: id8
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Fatalik
сейчас постарее найду стелариум =) попробую (тоже подозревал)

и обнаружил странную фигню очень сильно греет драйвера.. да и сам шаговик подогревает довольно быстро три минуты "ведения" причем вхолостую на столе мотор и радиатор драйвера очень горячий.. резюк на половинку.питание ампер и полтора пробовал.. если не найти решение так использовать нельзя.. и самое странное что вчера позавчера..такого небыло..

Оффлайн gravicapa (Алексей)

  • *****
  • Сообщений: 3 316
  • Благодарностей: 132
    • Сообщения от gravicapa (Алексей)
    • Ремонт и самоделки
какой рабочий ток двигателя? драйвера 8825?
Монтировка: EQ Gravicapa and Co.
Труба: Vixen VMC110 full mod; ньютон 114/500; Veber 200/800 (сфера)
Объективы: Prinz Galaxy 135/3,5 Helios-44-2, ЛОМО РФ3
Гид: 60/230 (F/3,8)+CAM10 (meade dsi)
Камера: Canon 450Da Cooled, SBIG ST-2000XM
https://www.flickr.com/photos/182147135@N06/

Онлайн Fatalik

  • Модератор
  • *****
  • Сообщений: 9 927
  • Благодарностей: 2012
  • Алексей
    • Instagram: fatalerror83
    • DeepSkyHosting: id8
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от Fatalik
на нем 22в написано.. обычный нема 17..
да вчера позавчера гонял их по всякому грело чуть чуть.. а тут вхолостую и резюк меньше выкрутил.. а греет сильно

со стеллариумом 15.2 тоже не работает... что то не то у меня =)

« Последнее редактирование: 07 Ноя 2017 [20:21:25] от Fatalik »

Оффлайн nolv

  • *****
  • Сообщений: 2 642
  • Благодарностей: 194
    • Сообщения от nolv
на нем 22в написано.. обычный нема 17..
да вчера позавчера гонял их по всякому грело чуть чуть.. а тут вхолостую и резюк меньше выкрутил.. а греет сильно

nema17 - это типоразмер. Рабочий ток может быть и 0,2А и 2,5А