В статье рассмотрена модернизация программного обеспечения открытого проекта поворотного предметного стола для 3D-фото Photopizza. 3D-фото-360— это фотографии предмета со всех сторон, которые пользователь может вращать. Я думаю многие видели такое на страницах продвинутых интернет-магазинов. Использовался открытый проект Photopizza.
Взяв за основу проект полностью изменив программу. По причине:
- использовалась другая элементная база (другая клавиатура, дисплей, драйвер двигателей);
- введен дополнительный функционал для режима снятия 3D-фото-360;
- введен режим калибровки;
- введены дополнительные режимы вращения при использовании платформы в качестве поворотной витрины.
Платформа изготавливалась из ПВХ, т.к. кусками найти нереально, а покупать лист 6 кв.м за 20000 руб это слишком дорого.
Внешний вид поворотной платформы после сборки.


Электрическая схема моего варианта поворотного стола

Функционал. Программы вращения хранятся в памяти EEPROM. Каждая программа имеет следующие настройки
- поворот платформы (угол поворота от начальной
- шаг (в градусах)
- скорость
- направление ( — влево,+ вправо, +-, -+)
- количество повторений поворота — если 0 — бесконечно
- съемка автомат на каждом шаге — yes,no
- пауза после каждого шага — yes,no
- резерв
- длительность паузы — мс
Каждый параметр в памяти EEPROM занимает 2 байта, на программу — 18 байт. 0 и 1 байты EEPROM — общее количество программ.
Была использована следующая клавиатура (используем 9 клавиш) и следующий ИК-пульт (также используем 9 клавиш)

Т.к. в программе 4 режима (просмотра программ, редактирования программ,выполнения программы и режим калибровки) приведу таблицу назначения клавиш в разных режимах.
|
Клавиша клавиатуры |
Клавиша ИК пульта |
Режим просмотра |
Режим редактирования |
Режим выполнения программы |
Режим калибровки |
|---|---|---|---|---|---|
| 4 | R |
Смена режима |
Смена режима |
Смена режима |
|
| 5 | G |
Пред. программа |
Пред. программа |
||
| 6 | B |
След. программа |
След. программа |
||
| 7 | Добавить программу | Сохранить изменения в программе | |||
| 8 |
Пред. параметр |
Пред. параметр |
|||
| 9 |
След. параметр |
След. параметр |
|||
| * | Удалить тек. программу | Не сохранять изменения в программе | |||
| 0 | Запуск калибровки | Декремент текущего параметра | |||
| # | Запуск тек. программы | Инкремент текущего параметра |
Смена режима(просмотр) |
Прерывание калибровки |
Зеркальной камеры в наличие нет, поэтому для съемок использовалась видеокамера Sony HDR-SR10E

Снимок делаем либо программно отправкой IR-кода, с помощью инфракрасного светодиода, либо вручную с помощью с помощью проводного пульта.

На данный момент делаю вручную (код отправки ИК-кода задокументирован). Скетч программы можно скачать по ссылке ниже. Использовались библиотеки IRRemote, Keypad, AccelStepper.
Далее копируем фотографии на комп, обрабатываем в фотошоп или gimp (пока этот этап я пропустил).
Для вставки 3D-360 на сайт использую скрипт 3dreader.ru (ссылка последнее время неактивна). И результат можно посмотреть здесь (отменить блокирование всплывающих окон)

Что необходимо доделать, чтобы был более-менее приемлемый результат (непрофессиональный)
- переход на Bluetooth управление с телефона Android;
- автоматизировать калибровку (добавить датчики Холла);
- покупка простой зеркальной камеры и недорогого оборудования для съемки (прожектора, стойки);
- обработка фото в фотошопе.
Список радиоэлементов
| Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
|---|---|---|---|---|---|---|
| Arduino | Плата Arduino | Arduino Nano 3.0 | 1 | |||
| WH1602 | LCD-дисплей | WH1602 | 1 | |||
| A4988 | Драйвер шагового двигателя | A4988 | 1 | |||
| NEMA17 | Шаговый двигатель | NEMA17 | 1 | |||
| Клавиатура | Клавиатура матричная 4×4 | 1 | ||||
| Пульт ИК | 1 | |||||
| TSOP3128 | ИК — приемник | TSOP3128 | 1 | |||
| R1 | Резистор подстроечный | 10 кОм | 1 | |||
| R2 | Резистор | 100 Ом | 1 | |||
| R3 | Резистор | 1 | ||||
| Конденсатор | 10 мкФ 16В | 2 | ||||
| Конденсатор | 0.1 мкФ | 3 | ||||
| T1 | Транзистор | 1 | ||||
| DIR1 | Инфракрасный светодиод | 1 | ||||