Поворотный стол с фоторезисторами на Arduino

В статье приведена пошаговая инструкция по разработке вращающегося стола на Arduino с реализацией обратной связи по положению с помощью фоторезисторов.

Проект будет интересен как новичкам в Arduino так и людям с опытом. Уверены, что начинающие Ардуинщики откроют для себя что-то новое и при этом разработают реальную конструкцию вращающегося стола. В проекте использованы комплектующие от Adafruit, но вы смело можете заменить их на аналоги от других (в том числе и Китайских) производителей.

Список необходимых компонентов

  1. Плата Arduino Uno R3 (с микропроцессором Atmega328)
  2. Блок питания 5 В для Arduino Uno R3
  3. Что-то в качестве вращающейся платформы (в данном случае используется напечатанная на 3D принтере деталь)
  4. Много проводов (по правде говоря, их никогда не бывает много ;) )
  5. Шаговый двигатель NEMA-17, 200 шагов, 12 вольт 350мА или его аналог
  6. Adafruit Motor Shield для Arduino v. 2.3 (или китайский аналог).
  7. Источник питания на 12 вольт для мотор-шилда (так как питания Arduino будет недостаточно).
  8. Бредборд.
  9. Датчики освещения - фоторезисторы.

Перед тем как вы начали: в проекте используется мотор-шилд. В зависимости от поставщика, его иногда надо распаять. Детальная инструкция по распайке мотор-шилда v.1 для Arduino.

Оборудование для подключения вращающегося стола на Arduino

Ниже приведены ссылки на STL файлы, которые вы можете использовать (и изменять при желании) в проекте, если у вас есть доступ к 3D принтеру.

Подключаем источник питания

После сборки мотор-шилда, устанавливаем его на Arduino и подключаем к нему источник питания. Волноваться за Arduino не стоит, так как у него отдельное питание 5 В от USB или от блока питания.

  1. Подготовьте два коннектора - два провода с зачищенными концами. Мы их используем для подключения адаптера к мотор-шилду.
  2. Подключите провода к соответствующим слотам (позитивный к позитивному, отрицательный к отрицательному) и затяните винты на клемах мотор-шилда и адаптера как это показано на изображении ниже.
Мотор-шилд для Arduino Разьем для источника питания Подключенный к мотор-шилду разъем для внешнего источника питания

Все. Можете подключать питание к адаптеру и (если вы ничего не перепутали!), мотор-шилд готов к работе.

Подключаем шаговый двигатель

На этом этапе мотор-шилд уже подключен к Arduino Uno, снимать его не надо, а вот питание можете пока что отключить.

Аккуратно, не перепутав контакты, подключите шаговый двигатель к соответствующим клемам на шилде, чтобы протестить его работу.

Для теста вам надо скачать библиотеку library for the stepper motor. Импортируйте библиотеку в Arduino и включите ее в код в директиве include.

Внимание: не используйте встроенную библиотеку под названием "Stepper" из раздела Examples. Эта библиотека подходит для шилдов версии 1.0. Для запуска шагового двигателя воспользуйтесь именно скачанной по ссылке выше библиотекой.

Подключенный к мотор-шилду NEMA17 Поворотный стол, подключенный к NEMA17

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

Тестируем датчики освещения

Следующий шаг - проверка датчиков освещенности. В данном примере для подключения используются цифровые выходы Arduino. Но вы можете поэкспериментировать и использовать аналоговые контакты. Код для цифровых выходов приведен по ссылке.

Предупреждение: вам надо отключить мотор-шилд от Arduino Uno. При его установке все аналоговые и цифровые контакты на плате заняты. Для получения доступа к этим свободным пинам вам надо припаять дополнительные разъемы к мотор-шилду. После распайки, снимать мотор-шилд для подключения датчиков освещенности не придется.

Для наглядности - для подключения 4-х датчиков освещенности к контактам 2, 3, 6 и 7 - использовались проводники разных цветов. В качестве источника питания можно использовать контакты 5 V и 3.3 V на Arduino. В библиотеке, код которой приведен по ссылке, каждый датчик освещенности связан с углом поворота: 0, 90, 180, 270 (0 равен 360). Таким образом, в зависимости от времени, которое понадобится электрическому сигналу, чтобы достичь Arduino, можно симулировать угол поворота платформы. Чтобы увидеть результат, просто накройте рукой один из фоторезисторов.

Фоторезисторы на макетной плате Фоторезисторы и контакты Arduino

Для проверки датчиков освещенности вам надо:

  1. Подать питание (в нашем случае - это контакты 3.3v и 5v на Arduino Uno R3).
  2. Подключить питание к рельсе монтажной платы.
  3. Установить датчики освещенности. При подключении фоторезисторов каждому надо выделить собственный канал, поэтому один установлен ножкой на следующей рельсе, а второй - через одну рельсу.
  4. Подключить провода к цифровым или аналоговым пинам на Arduino. С них вы будете снимать показания. Убедитесь, что вы сменили в коде номера контактов, которые вы подключили. Если вы используете аналоговые контакты, измените методы digitalRead() и digitalWrite на analogRead() и analogWrite() соответсвенно). Возможно, вам также надо будет подстроить метод RCTime().
  5. Загрузить скетч на ваш Arduino Uno R3, откройте серийный монитор и можете отслеживать результат тестирования.

Синхронизируем шаговый двигатель и фоторезисторы

Пришло время совместить данные с фоторезистора с вращением шагового двигателя. На фото вы можете увидеть, что рельсы контактов не припаяны к мотор-шилду, но при этом сигнал с фоторзесторов все равно достаточно сильный и обратная связь работает. Соответствующий скетч.

Подключенные к Arduino и поворотному столу фоторезисторы Фоторезисторы, поворотный стол и Arduino

Пошаговое разъяснение кода для Arduino:

  1. Текущий угол сохраняется в переменной в качестве предыдущего угла.
  2. Получаем угол датчика освещения, который отсылает сигнал дольше всего.
  3. Проверяем, равен или больше нуля текущий угол. Если условие выполняется, заменяем значение текущего угла на предыдущее и больше ничего не делаем.
  4. Получаем разницу между новым и предыдущим углом.
  5. Сравниваем разницу. Допустимые значения: -270, -180, -90, 0, 90, 180, 270:
    • Движение вперед 90: 90, -270 (от 270 до 0);
    • Движение назад 90: -90, 270 (от 0 до 270);
    • Движение вперед 180: 180;
    • Движение назад 180: -180;
  6. Поворот в положение, определенное с помощью датчика освещенности (эти значения рассчитаны на двигатели с 200 шагами на один оборот. То есть, на один шаг приходится 1.8 градуса):
    • Движение вперед 90: (50 x 1.8) = 90, FORWARD (clockwise);
    • Движение назад 90: (50 x 1.8) = 90, BACKWARD (counter-clockwise);
    • Движение вперед 90: (100 x 1.8) = 180, FORWARD (clockwise);
    • Движение назад 90: (100 x 1.8) = 180, BACKWARD (counter-clockwise);

Закомментированные строчки кода - это пример различных шагов, которые вы можете использовать в проекте. Они остались от предыдущего кода, приведенного в статье.

На видео ниже представлен результат синхронизации работы фоторезисторов и шагового двигателя:

Собственный дизайн конструкции поворотного стола

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

Если у вас есть доступ к 3D принтеру, то можете напечатать детали, предложенные в начале статьи или воспользоваться этими stl файлами. Если у вас есть доступ к лазерному резаку - можно собрать конструкцию из акрила/фанеры. Использованный в проекте двигатель Nema 17 отлично потянет и алюминиевый столик.

Любые вопросы и уточнения приветствуются в комментариях ниже.