Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/43: Рейтинг темы: голосов - 43, средняя оценка - 4.51
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72

Скетч для управления телескопом

24.04.2015, 18:03. Показов 8140. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Для имеющегося телескопа хочу собрать систему управления по двум осям монтировки. Для этого приобрел Ардуино-УНО R3, два драйвера на a3967, джойстик и пару шаговых моторов.
Хочу сделать следующее - при помощи джойстика будут осуществляться повороты трубы телескопа (вверх/вниз, вправо/влево), для наведения. При этом, на каждую ось монтировки будет установлено по одному мотору, вращающемуся в обе стороны. Нажатие на кнопку джойстика - режим "стоп" для обоих моторов. Нажатие еще на одну дополнительную кнопку включает один двигатель с заданной скоростью для ведения за объектом наблюдения.
Проблема в том, что я никогда не занимался программированием. Очень нужна Ваша помощь в написании скетча для моего проекта.

Ниже, примерная схема подключения узлов.


Жду Ваших советов!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2015, 18:03
Ответы с готовыми решениями:

Скетч для ардуино
Помогите соединить два скетча в один: 1) #define pirPin 9 // Объявляем переменную для датчика движения и указываем пин int SoundPin =...

скетч для wemos d1 mini для выключения компа
Добрый день. Помогите пожалуйста написать скетч для wemos d1 mini. Требуется: 1. чтоб подключалась к wifi и висела на нем, без...

Нужен скетч для светодиода
Создал схему сигнализации и как сигнализатор подключил светодиод, проблема в том что не знаю как прописать в командной строке так чтобы...

19
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
24.04.2015, 19:42
Сюда грузите следующим постом, нет ни малейшего желания ходить по ссылке.

Что именно за джойстик? Если USB, забудьте, ардунья - не хост, а подчиненное устройство. Для работы с таким джойстиком требуется совместимый хост-контроллер.
0
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72
24.04.2015, 20:27  [ТС]
Вот всё.
0
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72
24.04.2015, 20:43  [ТС]
Предыдущие сообщения были отредактированы модераторами, потому повторяюсь.
Схема подключения и комплектующие.
Миниатюры
Скетч для управления телескопом   Скетч для управления телескопом  
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
24.04.2015, 20:49
Укажите модели всех плат и железа.

1- работа с ADC есть в стандартных скетчах в комплекте со средой Arduino IDE.
2- работа с PWM есть в стандартных скетчах в комплекте со средой Arduino IDE.
3- в закрепленной теме данной ветки видеоуроки, литература и примеры на русском.

Предыдущие сообщения были отредактированы модераторами, потому повторяюсь.
для ознакомления https://www.cyberforum.ru/announcement.php?a=3
0
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72
24.04.2015, 21:02  [ТС]
Arduino UNO R3 ATmega328P ch340
драйвер: EasyDriver Shield stepping Stepper Motor Driver V44 A3967 For Arduino
джойстик: 5Pin JoyStick Breakout Module Shield PS2 Joystick Game Controller AL

Могу скинуть ссылки на еБей, где их заказывал.

Пробовал уже кучу разных скетчей, особенно понравились примеры с сайта http://www.schmalzhaus.com/Eas... mples.html . В 5-ом примере, там, говорится как раз про управление телескопом, но мне надо джойстик вместо кнопок, и не нужен переменный резистор. Кроме этого, с этого же джойстика надо управлять вторым двигателем.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
24.04.2015, 21:27
...плату с джойстиком снимаете с платы контроллера и подключаете питание и аналоговые линии X-Y-Z непосредственно на аналоговые входы Ардуино. Скетчи работы с ADC есть в комплекте, повторяю еще раз.

Пример чтения оси X допустим:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define xxx 1 
 
void setup() {
  pinMode(xxx, INPUT);
  Serial.begin(9600);
}
 
void loop() {
  int chx = analogRead(xxx);    
  Serial.print(chx, DEC);
 
  
  delay(100); 
}
Ферштеен? Ознакомтесь с закрепленной темой и примерами, у вас не будет подобных вопросов.
0
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72
24.04.2015, 23:09  [ТС]
"Скетчи работы с ADC есть в комплекте"
Не нашел я их (((( Ткните носом пожалуйста.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
25.04.2015, 08:07

0
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72
28.04.2015, 11:40  [ТС]
Снова здравствуйте. На этот раз я не с пустыми руками.

Нашел интересную статью http://pacpac.ru/for....php?f=23&t=233 - управление панорамной головкой.

Практически все подходит под мои требования.

Вот, чуть изменил скетч - теперь скорость регулируется от угла наклона джойстика. Переменный резистор мне нужен.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
 #include <AccelStepper.h>
 
 #define MOTOR1_DIR_PIN 8
 #define MOTOR2_DIR_PIN 11
 
 #define MOTOR1_STEP_PIN 9
 #define MOTOR2_STEP_PIN 10
 
 #define MOTOR1_LS_PIN 6
 #define MOTOR2_LS_PIN 7
 
 #define MOTOR1_SPR 200 // Кол-во шагов на 1 оборот вала двигателя
 #define MOTOR2_SPR 200
 
 #define MOTOR1_MAX_SPEED 50000.0
 #define MOTOR2_MAX_SPEED 50000.0
 
 #define MOTOR1_INIT_SPEED -200.0
 #define MOTOR2_INIT_SPEED 800.0
 
 #define MOTOR1_JOY_IN 0 // Ось Y джойстика
 #define MOTOR2_JOY_IN 1 // Ось X джойстика
 #define SPEED_KNOB_IN 2 // Задатчик скорости - переменный резистор 4,7К
 
 AccelStepper stpMotor1(AccelStepper::DRIVER, MOTOR1_STEP_PIN, MOTOR1_DIR_PIN);
 AccelStepper stpMotor2(AccelStepper::DRIVER, MOTOR2_STEP_PIN, MOTOR2_DIR_PIN);
 
 int nMotor1SP, nMotor2SP; // Задание направления от джойстика
 int nSpeedSP; // Задание скорости от задачика
 int nMotor1MV, nMotor2MV; // Задание скорости после ограничителя
 
 void setup() {
 phInit();
 }
 
 void loop() {
 phGetCommand();
 phMotorRun();
 }
 
 void phInit()
 {
 pinMode(MOTOR1_DIR_PIN, OUTPUT);
 pinMode(MOTOR2_DIR_PIN, OUTPUT);
 pinMode(MOTOR1_STEP_PIN, OUTPUT);
 pinMode(MOTOR2_STEP_PIN, OUTPUT);
 
 pinMode(MOTOR1_LS_PIN, INPUT_PULLUP);
 pinMode(MOTOR2_LS_PIN, INPUT_PULLUP);
 
 nMotor1MV = 0;
 nMotor2MV = 0;
 stpMotor1.setMaxSpeed(MOTOR1_MAX_SPEED);
 stpMotor2.setMaxSpeed(MOTOR2_MAX_SPEED);
 stpMotor1.setAcceleration(10.0);
 stpMotor2.setAcceleration(10.0);
 stpMotor1.setSpeed(0);
 stpMotor2.setSpeed(0);
 
 stpMotor1.setSpeed(MOTOR1_INIT_SPEED);
 while (digitalRead(MOTOR1_LS_PIN) != 0) {
 stpMotor1.runSpeed();
 }
 
 stpMotor1.setCurrentPosition(0);
 stpMotor1.setSpeed(-MOTOR1_INIT_SPEED);
 while (abs(stpMotor1.currentPosition()) < 400) {
 stpMotor1.runSpeed();
 }
 stpMotor1.setCurrentPosition(0);
 stpMotor1.setSpeed(0);
 
 stpMotor2.setSpeed(MOTOR2_INIT_SPEED);
 while (digitalRead(MOTOR2_LS_PIN) != 0) {
 stpMotor2.runSpeed();
 }
 
 stpMotor2.setCurrentPosition(0);
 stpMotor2.setSpeed(-MOTOR2_INIT_SPEED);
 while (abs(stpMotor2.currentPosition()) < 2400) {
 stpMotor2.runSpeed();
 }
 stpMotor2.setCurrentPosition(0);
 stpMotor2.setSpeed(0);
 
 return;
 }
 
 void phGetCommand()
 {
 nMotor1SP = analogRead(MOTOR1_JOY_IN) - 512; // Ось Y джойстика
 nMotor2SP = analogRead(MOTOR2_JOY_IN) - 512; // Ось X джойстика
 nSpeedSP = 1023 - analogRead(SPEED_KNOB_IN);
 
 if (nMotor1SP > 100) {
 nMotor1MV = nSpeedSP;
 } else if (nMotor1SP < -100) {
 nMotor1MV = -nSpeedSP;
 } else {
 nMotor1MV = 0;
 }
 
 nMotor1MV = nMotor1MV / 5;
 
 if (nMotor2SP > 100) {
 nMotor2MV = nSpeedSP;
 } else if (nMotor2SP < -100) {
 nMotor2MV = -nSpeedSP;
 } else {
 nMotor2MV = 0;
 }
 
 nMotor2MV = nMotor2MV * -1;
 }
 
 void phMotorRun()
 {
 stpMotor1.setSpeed(nMotor1SP); // Задаем скорость по оси Y
 stpMotor2.setSpeed(nMotor2SP); // Задаем скорость по оси X
 
 stpMotor1.runSpeed(); // Выполняем движение с заданной скоростью
 stpMotor2.runSpeed();
 }
Залил для тестирования, выложенный мной выше скетч - управление джойстиком не включается, пока не сработают концевики установленные на 6 и 7 контактах (схема управления Панорамной головкой). Затем моторы, скорость и направление вращения, управляются джойстиком как положено.
Но, в процессе тестирования, было замечено, что двигатели незаметно (медленно) вращаются - 1-ый против часовой стрелки (за 1,5 минуты - четверть оборота), 2-ой по часовой (четверть оборота - за 5минут).
Что может быть? Что то в скетче, или из-за джойстика (утечки)?

Теперь, что осталось доработать. В скетче осталось введены концевые выключатели на контактах 6 и 7 Ардуино. Мне они не нужны - как их убрать из скетча (а то, пока они не сработают, не включается управление джойстиком)?
Кроме этого, как в такой скетч внести старт/стоп одного двигателя, с помощью дополнительной кнопки, в одну сторону с одной скоростью (+светодиод индикации этого режима) ?

Схема подключения - ниже.
Миниатюры
Скетч для управления телескопом  
0
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72
28.04.2015, 11:41  [ТС]
Да, чуть не забыл, для управления ШД в программе используется библиотека AccelStepper - http://www.open.com.au/mikem/a... index.html
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
28.04.2015, 13:07
1- вы сами в скетче при инициализации устанавливаете в крайнее нулевое положение stpMotor1.setCurrentPosition(0)
2- легко проверить, выведите в Serial значения из джойстика и смотрите не меняется ли.
0
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72
28.04.2015, 13:36  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
1- вы сами в скетче при инициализации устанавливаете в крайнее нулевое положение stpMotor1.setCurrentPosition(0)
На что это влияет? Как надо?
Цитата Сообщение от raxp Посмотреть сообщение
2- легко проверить, выведите в Serial значения из джойстика и смотрите не меняется ли.
Как это делается?
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
28.04.2015, 15:47
- а кто разработчик алгоритма поведения? Если хотите, чтобы при включении не устанавливал в ноль, не ставьте.
- Serial.Print().
0
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72
28.04.2015, 17:27  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
- а кто разработчик алгоритма поведения? Если хотите, чтобы при включении не устанавливал в ноль, не ставьте.
- Serial.Print().
Блин... что ни ответ, то тупик
Могли бы Вы, если не сложно, просто внести нужные изменения в мой скетч?

У меня на настоящий момент следующие вопросы:
1. Как убрать из скетча концевые выключатели (а то, пока они последовательно не сработают, не включается управление джойстиком)?
2. Как устранить медленное вращение двигателей в режиме Стоп?
3. Как в скетч внести старт/стоп одного двигателя, с помощью дополнительной кнопки, в одну сторону с одной скоростью (+светодиод индикации этого режима) ?
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
28.04.2015, 18:19
...у меня нет времени заниматься правками чужих поделий.

По вопросам:
1- в скетче считываются 6-7 пины, но на схеме они в воздухе. И вы в упор проигнорировали замечание по первоначальным установкам позиции. Срабатывание концевиков тут совсем ни причем, пусть они хоть миллион раз сработают, они в воздухе.
2- что является признаком стопа?
3- сконфигурировать один из входов на вход, подтянуть к земле или плюсу и повесить кнопку на плюс или землю, далее digitalRead().
0
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72
28.04.2015, 21:45  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
...у меня нет времени заниматься правками чужих поделий.
По вопросам:
1- в скетче считываются 6-7 пины, но на схеме они в воздухе. И вы в упор проигнорировали замечание по первоначальным установкам позиции. Срабатывание концевиков тут совсем ни причем, пусть они хоть миллион раз сработают, они в воздухе.
2- что является признаком стопа?
3- сконфигурировать один из входов на вход, подтянуть к земле или плюсу и повесить кнопку на плюс или землю, далее digitalRead().
Отвечаю:
1. Да, из схемы я их удалил (мне они не нужны - они для установки в определенное/первоначальное положение), но, как я уже писал, управление джойстиком не запустилось, пока я принудительно (на коленке) не замкнул эти пины на землю. Я же и спрашиваю, как сделать-удалить из скетча запрос этих пинов.
2. Полная остановка обоих моторов.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
28.04.2015, 22:22
1- очевидно удалить из скетча их описание переменных и условие со считыванием по digitalRead().
2- вопрос тот же - что есть полная остановка моторов? Откуда брать признак, что они остановились?

Если вы новичек и не умеете работать с периферией, то есть закрепленная тема с видеокурсами, литературой и примерами. Программистом для этого быть необязательно, это читают и гитаристы и биологи.
0
2 / 2 / 1
Регистрация: 13.11.2013
Сообщений: 72
30.04.2015, 20:22  [ТС]
Вопрос со скетчен полностью решен!
Благо есть есть умные и безкорыстные люди (на другом сайте), которые любезно помогли быстро (в течении одного дня) и качественно разрешить вопрос.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
30.04.2015, 20:39
Не нужно кросспостить одну и ту же чушь по форумам. Ваше высказывание воспринимается как полное нежелание приложить минимальные собственные усилия и мозги, свесив ножки сверху и игнорируя уроки для новичков.

Бескорыстные пишется через "c", а денег с вас никто в теме не требовал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2015, 20:39
Помогаю со студенческими работами здесь

Ищу скетч для ардуино LaserGRBL
В общем собрал из кучи принтеров, сканеров и алюминиевого окна такое безобразие: Что-то тыркался с ардуино, ну просто чтоб оси...

Скетч для ардуино: разделить на младший и старший бит
Здравствуйте, помогите со скетчем, нужно разделить на младший и старший бит int microsec = 0; int stepp = 1; void setup() { ...

Можно ли изучить структуру окрестностей черной дыры с помощью радиоинтерферометра с космическим телескопом «Радиоастрон»
Доброго времени суток! как решить данную задачу? В центре галактики находится массивная черная дыра радиусом около 10 млн километров....

Элементы управления для выбора из нескольких альтернатив. Создание элементов управления в программном коде
Здравствуйте! помогите!!! нужно:1. реализовать построитель предложений по типу «Студент получает знания». 2. GroupBox –...

Элементы управления, созданные в одном потоке, не могут быть родительскими для элемента управления в другом потоке
Привет :) Есть задача - нужно динамически добавлять компоненты. Все работает хорошо. Но если добавлять через цикл то начинает зависать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru