Набор проекта Arduino Due: TFT, GPS, RTC, датчики, Bluetooth и джойстик — полный список компонентов
Компоненты и материалы
| Arduino Due | × | 1 | с https://www.arduino.cc |
| TFT 3.2" 400x240 SD Touch Module с Shield для Arduino Due | × | 1 | Использовал от Elechouse |
| RTC DS3231 | × | 1 | Часы реального времени с Ebay |
| GPS uBlox Neo 6M | × | 1 | GPS-модуль с Ebay |
| PS2 джойстик для Arduino | × | 1 | Снова с Ebay |
| Датчик температуры DHT22 | × | 1 | Датчик температуры и влажности |
| Bluetooth-модуль HC-05 | × | 1 | Bluetooth HC-05 с Ebay |
| DRV8825 | × | 2 | Драйверы шаговых двигателей |
| Двигатели NEMA 17 SY42STH47-1684B | × | 2 | 44 N·cm крутящий момент |
| PCB (печатная плата) | × | 1 | Прототипная электронная плата |
| Ремни и шкивы | × | 2 | 2 шкива 40 зубьев, 2 шкива 10 зубьев и ремни для вашей телескопической монтировки |
| Резистор 1 кОм | × | 10 | |
| Конденсатор 100 мкФ | × | 1 | |
| Электронные компоненты | × | 1 | Провода + Переключатели (x3) + Разъемы (2x5pin для RA & DEC, 12 VDC и USB для программирования) |
О проекте





Описание
Первый в мире автономный Arduino-базированный телескопический Goto-контроллер.
Все доступные открытые системы управления телескопами либо используют Raspberry Pi, который потребляет много энергии, либо используют Arduino как расширение для компьютера, смартфона или планшета. rDUINOScope — первый автономный Arduino-устройство, позволяющее любителям астрономии наслаждаться ночным небом.
Исходная идея — создать дешевую и простую в сборке альтернативу коммерчески доступным GOTO-продуктам вроде SkyWatcher, Orion, Vixen и других. Таким образом, аппаратная архитектура построена на плате Arduino DUE и дешевых датчиках, доступных на рынке. Инструкции по сборке и руководство пользователя созданы на сайте проекта. В сердце системы — плата Arduino DUE, загруженная программным обеспечением, которое постоянно развивается для добавления функционала.
rDUINOScope с Stellarium:
Детали
rDUINOScope — это открытая, основанная на Arduino Due система управления телескопом (GOTO). Проектируемая как автономная система, rDUINOScope не нуждается в ПК, планшете или телефоне, а также в интернет-соединении для работы и предоставления потрясающих видов!
По сути, в ней есть база данных с ЛУЧШИМИ 250 небесных объектами (каталоги Мессье и Hidden Treasures) и 200 звездами, она рассчитывает их положение на небе и наводит телескоп. Реализованные процедуры выравнивания позволяют получить опыт «всегда в окуляре» при наведении на выбранные объекты, и как только объект в окуляре, система продолжает его отслеживание.
Однако, если вы хотите воспользоваться преимуществами своих электронных устройств, rDUINOScope использует Bluetooth-коммуникацию (беспроводная настройка) для подключения ко всем электронным устройствам и приема команд на основе протокола связи MEADE LX200.
Система работает со шаговыми двигателями всех типов и может быть установлена как на DIY-монтировки, так и на коммерчески доступные продукты вроде SkyWatcher, MEADE, Orion, Vixen и др.
Функциональность:
Что внутри rDUINO SCOPE?
rDUINOScope Github
Инструкции по сборке
Шаг 1 — Подготовка
Прежде чем начать, важно понять, как работает программное обеспечение, чтобы иметь возможность вносить изменения и настраивать его под себя. В конце концов, это одна из самых значительных сил этого проекта!
Для понимания этой части вам нужно скачать код из файлов проекта, вместе с файлами «libraries»... или просто скачать весь пакет с: https://rduinoscope.co.nf/downloads.php. Все указанные номера строк относятся к коду версии V2.1. Boiana EQ.
Вы должны знать, как работает код Arduino. Обычно программа Arduino имеет 2 секции — SETUP() и LOOP(); SETUP() выполняется в начале программы и в основном инициализирует систему; LOOP() — это постоянная функция цикла, которая срабатывает много раз в секунду. Чтобы убедиться, что у нас есть экраны, сенсорный ввод и т.д., и экран не мерцает из-за LOOP(), нам нужно придумать механизм, чтобы Arduino знал, что от него ожидает пользователь. Таким образом, в секции LOOP() вы увидите очень небольшую часть кода, которая только говорит «Consider Touch.. или Consider Time...» и т.д. Остальная активность происходит внутри этих функций, что позволяет нам менять поток программы так, чтобы экраны не обновлялись много раз в секунду.
Вычисления: Я использовал информацию из интернета о том, как рассчитывать положение небесных объектов. Большинство информации я собрал по следующей ссылке: https://www.stargazing.net/kepler/altaz.html — описывает необходимые формулы и подход к расчету часового угла (HA), зная местоположение, текущее время и прямое восхождение (RA) и склонение (DEC) небесного объекта.
Создав код для расчета HA /строка 678: void calculateLST_HA() /, я использовал эту страницу для проверки: https://www.jgiesen.de/astro/astroJS/siderealClock/, а на более поздней стадии, когда добавил БД с объектами Мессье, использовал Stellarium (https://www.stellarium.org/) для тех же проверок.
Главная проблема, которую я обнаружил, была не в самих формулах, а в том, как Arduino обрабатывает типы переменных и, в частности, точность вычислений.
Теперь, когда у нас есть HA и DEC, рассчитанные для данного объекта, мы хотим заставить монтировку навести телескоп, и для этого нам нужно как-то знать, насколько именно должны повернуться моторы. Чтобы добиться успеха, мне нужно знать отношение червяка к шестерне — то есть, сколько оборотов должен сделать червяк, чтобы шестерня сделала 360°. У меня Vixen Super Polaris, и быстрый поиск в интернете كشف, что она использует 144-зубчатую шестерню для валов RA и DEC. Я создал простой Excel-файл (*.XLS - https://rduinoscope.co.nf/downloads/Gears_Stepper_Calculation.xlsx) для расчета того, насколько должны поворачиваться моторы после расчета HA и DEC, и как часто «пускать» моторы для компенсации вращения Земли.
Gears_Stepper_Calculation.xlsx
Та же математическая модель, использованная в XLS, также реализована в коде, поэтому вам нужно просто подставить значения для вашей монтировки в начале кода (строки 34-37).
// ЗДЕСЬ ИДЕТ ИНФОРМАЦИЯ О МОНТИРОВКЕ, ШЕСТЕРНЯХ И ПРИВОДЕ
// ... используется для расчета соотношения HourAngle к микрошагам
// ОБНОВИТЕ ЭТУ ЧАСТЬ СООТВЕТСТВЕННО ВАШЕЙ НАСТРОЙКЕ
// ---------------------------------------------
// NB: RA и DEC используют одно и то же отношение шестерни (144 зуба в моем случае)!
//----------------------------------------------
int WORM = 144;
int REDUCTOR = 4; // редукция 1:4
int DRIVE_STP = 200; // привод шагового двигателя имеет 200 шагов на оборот
int MICROSteps = 16; // буду использовать режим 1/16 микрошага для сидериальной скорости - также определяет НИЗШАЮ скорость.
Теперь, когда мы рассчитали соотношения, код будет знать, насколько поворачивать моторы, чтобы навести телескоп на соответствующие координаты, и какая тактовая частота нужна, чтобы монтировка могла отслеживать объект. Функции, заботящиеся об этом, начинаются на строке 906 и строке 917:
void Sidereal_rate(){ }
void cosiderSlewTo(){ }
Соображения: Знаете, это не готовый потребительский продукт. Он позволяет вам настроить его под свои нужды и поэтому очень гибок, но с гибкостью приходят некоторые недостатки. Я включил этот раздел «Соображения», чтобы убедиться, что они не выпадут из вашего списка дел.
- Монтаж моторов — простая задача, но влияет на то, как должны работать ваши расчеты. В моем сценарии Vixen Super Polaris имеют свои оригинальные шестерни на правой стороне червячного вала. Я однако обнаружил, что эти валы слишком коротки, чтобы заменить шестерни на шкивы, и поэтому перенес шкивы на противоположную сторону вала (левую). Это привело к тому, что мотор должен вращаться назад, чтобы увеличить положение телескопа, и поэтому мне пришлось пересмотреть исходный код. Вы определенно должны пересмотреть направления вращения ваших моторов, иначе вы получите неверный подсчет шагов, а значит, неверное положение. Посмотрите строку 1028, где я командую мотору STP_BACK, но на строке 1031 увеличиваю счетчик += ... (Все номера строк относятся к коду версии V2.1. Boiana EQ).
if (SLEW_RA_microsteps > RA_microSteps){
digitalWrite(RA_DIR,STP_BACK);
digitalWrite(RA_STP,HIGH);
digitalWrite(RA_STP,LOW);
RA_microSteps += RA_mode_steps;
}else{
digitalWrite(RA_DIR,STP_FWD);
digitalWrite(RA_STP,HIGH);
digitalWrite(RA_STP,LOW);
RA_microSteps -= RA_mode_steps;
}
ДЕЙСТВИЕ: Пересмотрите следующие части кода: void consider_Manual_Move(int xP, int yP), void cosiderSlewTo() и void Sidereal_rate().
- Северное VS. Южное полушария: Код также инвертирует движение ВПЕРЕД в зависимости от полушария, в котором вы находитесь. Это сделано в части кода, где я обрабатываю сенсорный ввод. Возможно, вам придется пересмотреть этот раздел кода.
- Шестерни на осях DEC и RA: Мой код работает при предположении, что обе оси DEC и RA используют 144-зубчатую шестерню. Это так для Vixen Super Polaris. Если у вас другая настройка, возможно, придется пересмотреть некоторые части кода. Если возникнут проблемы с идентификацией этих частей, напишите мне — постараюсь помочь!
Планирование действий: Теперь мы достигли точки, где нужно спланировать действия для фактической сборки rDUINO Scope GoTo системы. Приблизительная оценка — вы сможете завершить систему за 2-3 дня, если у вас есть всё необходимое (железо, инструменты и материалы). Мне потребовалось около 4-5 месяцев, учитывая, что я мог работать только ночью (не каждую), и мне пришлось сделать много исследований. Сборка всего вместе заняла примерно:
- 1 день — сборка щит-платы и оживление системы
- 1 день — упаковка всего в коробку
- 1 день — фиксация моторов и шкивов на монтировке
Шаг 2 — Материалы
Теперь, когда мы знаем, как в принципе работает программа, нужно спланировать закупки и получить необходимые материалы.
Спецификация материалов (BOM): Большинство материалов я покупал у китайских поставщиков в интернете. Некоторые решил купить локально, в основном потому, что они считались хорошими к наличию, и я хотел избежать задержек: GPS, Bluetooth и джойстик. Это обошлось примерно в 190 USD, что действительно мало по сравнению с тем, как дорого стоит купить такую систему у производителей. Список материалов с ценами и местами покупки на сайте проекта: https://rduinoscope.co.nf/rDUINO_step2.html, но список также доступен на этом сайте в разделе «КОМПОНЕНТЫ».
Если вы найдете их дешевле или быстрее — настоятельно рекомендую сделать это.
Дополнительно, в зависимости от вашего дизайна, могут понадобиться: 40-пиновый кабель с разъемами для TFT, пластиковые болты для крепления джойстика, USB-кабель для обеспечения программируемости Arduino Due внутри коробки, вентилятор и другие.
Если у вас этого нет дома (как у меня), вам также нужно купить паяльные материалы, припой, кусачки, цифровой мультиметр и прочее.
Необходимое ПО: Важная часть сборки rDUINOScope — загрузка и установка Arduino IDE и всего связанного ПО (драйверы, определения плат, библиотеки). Следуйте списку ниже для установки на ваш компьютер:
- Перейдите на сайт Arduino и скачайте IDE: https://www.arduino.cc/en/Main/Software. Установите ПО — после установки оно также установит драйверы, чтобы ваш компьютер распознал Arduino при подключении.
- Запустите Arduino IDE и перейдите: Tools -> Board -> Boards Manager, скачайте и установите определение платы Arduino Due «Arduino SAM Boards (32-bit ARM Cortex-M3)».
- Скачайте пакет библиотек, который я использовал как часть программы, и скопируйте-вставьте их в папку «libraries» вашей установки Arduino IDE. (ПРИМЕЧАНИЕ: «libraries» — это папка на вашем компьютере, но это также папка внутри ПОЛНОГО ПАКЕТА, доступного на сайте проекта: https://rduinoscope.co.nf/downloads.php, так что вам нужно скачать пакет, переименовать расширение в .ZIP, открыть его и скопировать содержимое папки «_libraries» из ZIP в папку «libraries» на вашем компьютере.)
- Перезапустите IDE и откройте основной файл программы — «_02_Boiana_EQ.ino». Вы заметите, что откроются еще 4 файла в отдельных вкладках. Это вспомогательные файлы, отвечающие за разные части ПО.
Теперь вы должны иметь возможность скомпилировать код и загрузить его в Arduino Due после подключения Arduino к компьютеру.
Примечание: Если вы не знаете, как работает Arduino IDE и что нужно сделать для программирования Arduino, обратитесь к сайту и урокам: https://www.arduino.cc/en/Tutorial/HomePage
Шаг 3 — Сборка
Для более детальных инструкций посетите сайт проекта: https://rduinoscope.co.nf/rDUINO_step3.html
Теперь время создать щит-плату (Shield board). Это плата с распиновкой, которую вы ставите поверх Arduino DUE. Некоторые компоненты должны быть на этой плате, а некоторые лучше разместить на корпусе. Мой расклад такой:
- Щит-плата содержит: оба драйвера DRV8825, часы RTC3231, Bluetooth-модуль HC-05, пьезо-динамик, разъем для 12В и распиновку для остальных компонентов;
- На корпусе монтируются: GPS-модуль NEO 6M — RX, чтобы антенна всегда смотрела в небо, датчик температуры DHT22, вынесенный наружу через отверстие, PS2 джойстик, TFT-экран и все переключатели (вкл/выкл и день/ночь). Также просверлены отверстия для разъемов приводов моторов, разъема 12В и USB-порта, идущего к Native-порту Arduino DUE для обновлений ПО без открытия коробки.
Как подключить компоненты к ARDUINO DUE:
Компонент .... Аппаратный пин .... Пин Arduino
GPS
- GPS NEO 6M .... RX .... 16
- GPS NEO 6M .... TX .... 17
RTC
- RTC DS3231 .... SDA .... A4
- RTC DS3231 .... SCL .... A5
Bluetooth
- BT HC-05 .... TXD .... 14
- BT HC-05 .... RXD .... 15
DHT
- DHT22 .... out .... 3
Динамик
- Piezo Speaker .... 2
PS2
- PS2 джойстик .... VRx .... A1
- PS2 джойстик .... VRy .... A0
Деклинация DRV8825
- DEC DRV8825 .... STEP .... 6
- DEC DRV8825 .... DIR .... 7
- DEC DRV8825 .... M0 .... 10
- DEC DRV8825 .... M1 .... 9
- DEC DRV8825 .... M2 .... 8
- DEC DRV8825 .... RESET / SLEEP
Прямое восхождение DRV8825
- RA DRV8825 .... STEP .... 4
- RA DRV8825 .... DIR .... 5
- RA DRV8825 .... M0 .... 11
- RA DRV8825 .... M1 .... 13
- RA DRV8825 .... M2 .... 12
- RA DRV8825 .... RESET / SLEEP
TFT-экран
- использовать с TFT Shield .... пины (22-53) + SPI
- Day/Night Mode Switch .... A3
Правильно... Теперь мы готовы собрать щит-плату. Возьмите прототипирующую PCB и оцените, как ее разрезать, чтобы она держала все компоненты, имела место для проводки и имела распиновку, припаянную так, чтобы её можно было поставить поверх Arduino. Обратите внимание, что вам нужно припаять все пины, используемые Arduino, и соединить их либо с компонентами на щит-плате, либо с разъемом на этой щит-плате, чтобы компоненты, установленные на корпусе, также могли быть подключены.
Ниже фото процесса:



Когда это было сделано, я подключил плату и протестировал щит! Он не работал! :( Я проверил проводку и выяснил, что создал мост между 2 соединениями и мне пришлось это исправить. Обратите внимание, что с этого момента я начал проверять каждую пайку на проблемы, так как мне действительно повезло не сжечь Arduino или что-то еще неправильной проводкой. NB: Убедитесь, что вы проверили все соединения! Следуйте следующей схеме проводки для DRV8825 и приводов моторов, так как это важно.

Убедитесь, что вы используете подходящий блок питания (12В, 1.6А) и подключаете драйверы моторов ПЕРЕД включением питания! NB: Никогда не подключайте драйверы моторов, когда DRV8825 под нагрузкой — это может сжечь драйверы!
Теперь, когда все компоненты припаяны на месте, я также предлагаю подключить драйверы моторов, загрузить программу в Arduino и протестировать всю установку. Она должна работать без сбоев в этот момент.
Теперь вы должны иметь возможность поиграть с программой и познакомиться с пользовательским интерфейсом. Для помощи с интерфейсом я создал страницу USER'S GUIDE на сайте проекта: https://rduinoscope.co.nf/guide.html
Ваша установка должна выглядеть примерно так:


Шаг 4 — Упаковка в корпус
Когда щит-плата готова, возьмите коробку и начните размещать все оставшиеся компоненты и планировать, где нужно сверлить отверстия и какой формы и размера. Лучший способ вырезать отверстия — маленький канцелярский нож (по крайней мере для меня). Неважно, круглое или квадратное отверстие. Легко вырезать маленьким острым ножом.
Единственное исключение — экран, где действительно нужно длинное, ровное и квадратное отверстие. Я попросил помощи, и мой отец сделал это на своих станках.
Когда вы довольны раскладкой и считаете ее выполнимой, начните вырезать отверстия. Это долгий процесс и создает немного беспорядка, но не должен занять больше 2-3 часов. Иногда я использовал дрели, когда нужно было сделать круглые отверстия, например: разъем 12В, разъемы моторов RA и DEC.

Подготовьте клеевой пистолет и начните клеить компоненты в коробку, как показано ниже:




Теперь всё подключено и уложено в коробку, кроме компонентов на передней панели. Я решил поставить туда TFT-экран, PS2 джойстик и переключатель Day/Night. Когда я подошел к TFT-экрану, я создал простое ленточное кабельное соединение с male и female разъемами и подключил его к экрану. Однако это не сработало! Причина в том, что пины зеркалировались, и TFT-экран перестал работать. Таким образом, я решил решить проблему с помощью некоторых сложных преобразований 2D в 3D и разобраться с разъемами, которые у меня были с ленточным кабелем.
Коротко о длинном: Это не ракетостроение, но дало мне немало хлопот, пока я не нашел решение. Некрасивое решение, но оно работало и работает уже год. Ниже вы можете увидеть, что я имею в виду.
По сути, то, что вы видите здесь:



- Ленточное кабель
- 40-пиновые female разъемы
- Пины для пайки на вырезанную PCB для формирования массива (2 x 20 пинов)
Это сработало как часы и позволило мне закончить коробку!






Шаг 5 — Немецкая экваториальная монтировка
Насколько бы я ни хотел поделиться с вами, как подключить приводы моторов к вашей монтировке, я не могу. Правда в том, что каждый производитель создает свой дизайн, и нет решения, которое работало бы для всех.
Я использую Vixen Super Polaris 80-х годов, и нижеприведенный метод работает для него. Напоминаю, что решения, принятые вами в ШАГЕ 1, где вам нужно было изменить значения в коде, теперь повлияют на нашу работу. Ниже вы можете увидеть мою настройку шкивов и ремней.
Я купил 2 комплекта для своей настройки. Я просто не был уверен, как это сработает, и поэтому купил комплект с редукцией 1:4 и комплект с редукцией 1:3. Размер ремня также должен быть разным, потому что редукция влияет на расстояние между шкивами. Признаю, что с хорошим планированием и дизайном можно решить заранее, как действовать, и сэкономить деньги, но я спешил. Мне нужно было заставить это работать!

После того как шкивы, ремни и монтировка оказались передо мной, я решил, что лучший подход для меня — использовать редукцию 1:4, потому что всё идеально вписывалось на монтировке, и начал работать над корпусом мотора. Через полдня у меня получилось это:
Я протестировал всю установку и должен был внести изменения в ПО (обновить значения переменных до 4 на строке 35), чтобы они отражали мое окончательное проектное решение. Протестировал снова — всё работало как часы.


Мне пришлось подождать хорошую звездную ночь, чтобы 제대로 протестировать, но пока ждал, я понял, что что-то не так!
У меня был лучший GOTO-контроллер телескопа, куда лучше, чем я мог бы купить за свой хобби-бюджет, но он не выглядел правильно. Нужны были финальные штрихи, то, что позже заставило меня гордиться моим rDUINOScope!

Наконец, мой rDUINOScope Vixen SP выглядит так, как я чувствую, что он должен выглядеть — как Ferrari!



Файлы
- _READ_ME.txt: Описание финального релиза v.2.1 Boiana EQ с некоторыми FAQ.
- _02_Boiana_EQ.ino: Основной Arduino-файл
- graphic_screens.ino: ГРАФИЧЕСКИЕ ЭКРАНЫ — связан с основным файлом
- touch_inputs.ino: СЕНСОРНЫЕ ВВОДЫ — связан с основным файлом
- BT.ino: BLUETOOTH КОММУНИКАЦИЯ — связан с основным файлом
- regular_updates.ino: ОБНОВЛЕНИЕ ВРЕМЕНИ — связан с основным файлом
Код
Фрагмент кода #1 (Plain text)
// ЗДЕСЬ ИДЕТ ИНФОРМАЦИЯ О МОНТИРОВКЕ, ШЕСТЕРНЯХ И ПРИВОДЕ
// ... используется для расчета соотношения HourAngle к микрошагам
// ОБНОВИТЕ ЭТУ ЧАСТЬ СООТВЕТСТВЕННО ВАШЕЙ НАСТРОЙКЕ
// ---------------------------------------------
// NB: RA и DEC используют одно и то же отношение шестерни (144 зуба в моем случае)!
//----------------------------------------------
int WORM = 144;
int REDUCTOR = 4; // редукция 1:4
int DRIVE_STP = 200; // привод шагового двигателя имеет 200 шагов на оборот
int MICROSteps = 16; // буду использовать режим 1/16 микрошага для сидериальной скорости - также определяет НИЗШАЮ скорость.
Фрагмент кода #3 (C/C++)
if (SLEW_RA_microsteps > RA_microSteps){
digitalWrite(RA_DIR,STP_BACK);
digitalWrite(RA_STP,HIGH);
digitalWrite(RA_STP,LOW);
RA_microSteps += RA_mode_steps;
}else{
digitalWrite(RA_DIR,STP_FWD);
digitalWrite(RA_STP,HIGH);
digitalWrite(RA_STP,LOW);
RA_microSteps -= RA_mode_steps;
}
GitHub
https://github.com/dEskoG/rDUINOScope
Схемы
Как подключить шаговые моторы и DRV8825 и соединить их с Arduino DUE

Как подключить все датчики и соединить с Arduino DUE

Производственный процесс
- Высокоскоростная фотография капель воды на Arduino Nano — DIY-триггер для вспышки
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- JX Wave Generator — Генератор сигналов на Arduino с DDS AD9833 и OLED-дисплеем
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Оптимизированные решения питания для проектов на Arduino
- Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
- Подключение Arduino Mega к GPS-модулю NEO‑6M: пошаговое руководство