Компактный 5-этажный мини-лифт на Arduino Mega
Компоненты и материалы
| Arduino Mega 2560 | × | 1 |
Необходимые инструменты
- Лобзик
Приложения и сервисы
- Arduino IDE
О проекте
Рабочий 5-этажный лифт высотой 3 фута (~91 см). Вложили много труда.
Быстрые ссылки:
- Код
- Схема подключения (скоро)
Вдохновение
Давно играемся с Arduino и IoT, но большинство проектов — простые. Давно искали что-то «настоящее».
Летом был на летнем лагере Project Ember (Сан-Франциско) — дети проектируют и строят большие деревянные конструкции с электроинструментами. Узнав, что я могу это, захотел соединить физическое строительство с Arduino — вот результат!
Подход
Самое сложное — мотор и определение этажей. Настоящий лифт использует мощный АС-мотор с датчиками на каждом этаже. Мы могли бы использовать малый мотор с датчиками, но это много проводов, проблемы с чувствительностью и выравниванием. Шаговый мотор позиционируется точно, но нужно точно знать текущее положение и расстояние до цели.
К счастью, в нашем проекте «Fancy Calendar» мы уже разобрались со шаговыми моторами и сохранением позиции в энергонезависимой памяти (EEPROM Arduino). Используем тот же подход: никаких датчиков этажей, просто считаем шаги шагового мотора.
Другая сложность — кнопки вызова лифта. Нужен светящийся тактовой переключатель с независимым управлением подсветкой. Нашли подходящие на eBay.
Материалы
- Кнопки с отдельной подсветкой (куплены на eBay, выглядят как на фото):


- Arduino Mega 2560 — выбрали за большее количество GPIO. Покупайте оригинал, совместимые могут быть дешевле.
- Матрица 8×8 LED для стрелок (Amazon)
- Семисегментный индикатор для номеров этажей (SparkFun)
- Шаговый мотор с драйвером для движения кабины (5шт набор Elegoo — используем один, но запас не помешает)
- Прототипирующий щит для Mega 2560 (BangGood) — мы отпаяли верхний разъем, не обязательно.
- Клеммные блоки (10×2) — нужно 4 шт. (frys.com)
- Бобина нити
В строительном маркете (Home Depot и аналоги):
- ДВП и деревянная рейка 3/4″ для шахты и кабины.
- Алюминиевый уголок для крепления мотора.
- Разные винты.
- Шланг в качестве втулки внутри бобины.
- Снаряд (прочная нейлоновая нить для воздушных змеев).
Сборка
Шахта и кабина из ДВП с уголками для усиления углов.
Начали со шахты: 3 детали ДВП 36″×8″ для боков и задней стенки (перед открыта). 4 рейки 3/4″ × 36″ скрепили ДВП в вертикальную шахту. Квадратные детали ДВП сверху и снизу для жесткости.
Кабина: та же технология — стены, потолок, пол из ДВП, рейки. Почти по ширине шахты, но ездит между передними/задними рейками (шире, чем глубока). Крепление для нити — крючок на верху кабины.

Не прикручивайте дно шахты рано! Кабину нужно доставать для тестов. Дно ставьте в конце.
Мотор на вершине шахты. Обычная деревянная бобина от ниток на вал мотора. Вал мотора с плоским скосом, отверстие в бобине круглое. Сверлим и нарезаем резьбу в бобине, винт зажимает плоский скос вала. Отверстие бобины больше вала — в качестве втулки используем кусок резинового шланга подходящего диаметра.


Мотор на алюминиевом уголке, закрепленном на вершине шахты. Для поддержки второй стороны бобины — винт через второй алюминиевый уголок. Вес кабины не сможет сдвинуть бобину с вала мотора — она останется горизонтальной.
Панели кнопок из ДВП. Слева — вертикальная панель вызова: чередующиеся красные (вниз) и зеленые (вверх) кнопки. На верхнем этаже только красная, на нижнем — только зеленая. Панель внутри кабины справа: отверстия для LED-матрицы, семисегментника и 5 кнопок этажей.


Установлено 4 клеммных блока. Два на панели вызова, два рядом с панелью внутри кабины.
Проводка
Проводов много — использовали прототипирующий щит Mega. Частично потому что он был, но главное — при большом количестве проводов стандартные контакты Arduino ненадежны. На щите можно припаять провода напрямую и избежать отсоединений. Также удобно разместить резисторы для семисегментника.

Не хотели жестко соединять панели — если ошибка, исправлять сложно. У каждого провода съемный конец. Клеммные блоки между панелями и Arduino, для матрицы и семисегментника — разъемы quick-disconnect.

Для кнопок сделали собственные жгуты: обжимные вилки идеально садятся на контакты кнопок. У каждой кнопки два «земли» (кнопка и подсветка отдельно) — если вести все на Arduino, будет куча проводов. Поэтому заземление соединили в цепочку (daisy-chain) с помощью жгута. Сигнальные провода (кнопка и подсветка) идут отдельно в клеммные блоки.


Клеммные блоки дали еще одно преимущество: на щит припаяли одножильные провода, а к кнопкам — многожильные (для обжимных вилок). Клеммники — место перехода без пайки.
Программирование
Много версий кода, здесь текущая. Сложнейшая часть — логика маршрута кабины. Если кабина на 2 этаже, внутри хотят на 3, снаружи вызывают вниз с 4 и вверх с 1 — куда ехать первым?
Вторая сложность: стандартная библиотека шагового мотора блокирует loop() во время движения. Но нажатие кнопки в пути должно обрабатываться. Поэтому нельзя ехать до цели за один вызов — нужно двигаться небольшими шагами, проверяя кнопки (и возможные изменения цели) по пути.
Скачайте скетч Arduino.
Для загрузки:
- Скачайте библиотеки: LEDControlMS, SevenSeg.
- Выберите плату (см. картинку).
- Выберите порт: на Mac —
/dev/cu.usbmodem1411, на Windows —COM2. - Загрузите код.

Если загрузилось — поздравляем! Переходите к тестам. Если нет — проверьте проводку. Если и это не помогло — пишите через контакты сверху.
- Скачайте Arduino IDE: arduino.cc
- Откройте код.
- Установка библиотек — по туториалу.
- Лифт пройдет самотестирование: кнопки вызова загорятся по очереди, потом кнопки внутри, семисегментник пробежит цифры, матрица покажет стрелки вверх/вниз. В конце на семисегментнике — последний известный этаж кабины.
Тестирование и калибровка
Шаговый мотор должен точно знать позиции этажей — нужно пройти калибровку один раз. Позиции сохраняются в EEPROM (сохраняются при отключении питания).
Калибровка:
- Зажмите верхнюю и нижнюю кнопки на правой панели. Матрица покажет «C» (calibrate).
- Этими кнопками вручную подведите кабину к этажу, показанному на семисегментнике. Нажмите среднюю кнопку.
- Повторите для всех 5 этажей. Матрица погаснет — калибровка завершена.
Дальнейшие планы
- Пересобрать конструкцию из лазерно-вырезанных деталей. Ручной лобзик дает кривые резы — это часть причины «проблемы с трением». Одновременно улучшим крепление мотора и возьмем более быстрый мотор.
- Электронно: просили добавить звонок/бузер при открывании дверей, как в настоящих лифтах. Сделаем.
Предложения и мысли — в комментариях!
История версий
Ссылка на Google Drive обновляется автоматически.
Версия 2: Исправлен баг, когда вызов лифта с текущего этажа вызывал зависание ПО, требовало нажатия Reset.
Код
Библиотека Arduino LED Matrix
https://github.com/shaai/Arduino_LED_matrix_sketch
Библиотека SevenSeg
https://github.com/sigvaldm/SevenSeg
Arduino Sketch
Производственный процесс
- Simplesse®: белковый заменитель жира, трансформирующий низкокалорийные продукты
- Arduino Mini Boss Battle Game — ретро-игра в стиле босса
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Оптимизированные решения питания для проектов на Arduino
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
- Пошаговое руководство: сборка умного четырёхногого робота на Arduino