habrahabr

Arduino управляет промышленным грузовым лифтом

  • воскресенье, 4 мая 2014 г. в 03:10:36
http://habrahabr.ru/post/221663/

Дисклеймер: Если вы разбираетесь в электронике, то некоторые технические решения, описанные в этой статье повергнут вас в шок и ужас, а также вызовут непреодолимое желание оторвать автору руки. Я предупредил.
Немного о том как устроены грузовые подъемники и небольшая история создания системы управления для шестиэтажного грузового лифта на базе платы Arduino совместимого контроллера Seeeduino (ATmega 328).image
Довольно много картинок и букв!

Я подрабатываю электриком в небольшой фирме, которая занимается производством и монтажом грузовых подъемников. На эту работу активно принимают студентов, обучающихся по близкому профилю и они охотно соглашаются. В плане творчества такая работа просто рай — никто не лезет в электрические дела и есть полная свобода действий как в выборе электромонтажных материалов (лишь бы не сильно дорого), так и в способах реализации готового продукта (лишь бы работало). Так как основная масса заказов сводится к простейшим подъемникам с двумя остановками, то такую работу не назовешь сложной, и даже студент без опыта быстро втягивается.
В общем, благодатная нива для экспериментов!

Как правило, вся электрика собирается по уже готовым схемам, которые построены на примитивной логике с применением реле. Основными элементами в типичном решении являются два магнитных пускателя (ПВ и ПН на рисунке), которые осуществляют запуск электрической тали (двигатель с редуктором и барабаном, на который намотан трос), концевые выключатели этажей (К1 и К2), кнопки управления пуском (КН) и концевые выключатели цепи безопасности (КД), которые блокируют запуск лифта (например, если открыты двери шахты).
image

Вся логика работы грузового лифта сводится к тому, что пока нажаты все концевые выключатели в цепи безопасности (на рисунке она начинается от L1 и до концевых выключателей К1 и2), соблюдена фазировка, двигатель не перегрелся и не нажата кнопка Стоп, на кнопки управления подъемником подается напряжение. В случае нажатия одной из кнопок, запускается соответствующий магнитный пускатель, который срабатывая, по сути образует триггер, который разомкнется, как только лифт доедет до этажного концевого выключателя.
Вся канитель начинается после того, как количество этажей, на которые должен приезжать грузовой лифт становится больше двух. Например, для трехэтажного подъемника схема пополнится одним промежуточным реле, которое будет перекоммутировать схему для обеспечения остановки на среднем этаже. Для четырехэтажного подъемника таких реле понадобится уже два, для пятиэтажного — три и так далее. И если предыдущий рисунок Вы раскусили как орешек, то представляю Вашему вниманию схему управления девятиэтажным грузовым подъемником:image
В наше время такая сложность схемы управления — это смертный грех. Разумеется, первое что предложит сделать разумный инженер — использовать программируемый логический контроллер (ПЛК). Правда стоимость комплектующих в таком случае возрастет. Но почему бы не применить здесь дешевую Arduino? Порыскав в сети, я нашел несколько интересных проектов с макетами пассажирских лифтов из всем знакомого LEGO и решил, что уж с грузовым лифтом эта платка точно должна справиться. Как раз к случаю, поступил заказ на шестиэтажный подъемник.

Кроме того, у меня уже довольно давно лежала без дела плата Seeeduino (ATmega 328), и китайский LCD дисплей. Если уж ваять контроллер — то с дисплеем! И первым делом я подсчитал количество портов на плате, которые можно использовать. А их на Seeeduino — 14 дискретных и 6 аналоговых (которые разумеется работают и как дискретные). Идея была проста: повесить каждую кнопку и концевой этажный выключатель на свой порт, а магнитные пускатели включать с помощью 5VDC/220VAC реле. Цепь безопасности также должна иметь свой порт. Итого, для шестиэтажного грузового лифта необходимо 13 дискретных входов и два выхода для реле. Но куда же подключить дисплей? На помощь приходит сдвиговый регистр PCF8574, который позволит управлять им всего по двум проводам (про это есть пост). Таким образом, используя макетную плату, 13 подтягивающих резисторов и две лампочки, имитирующие реле «пуска вверх» и реле «пуска вниз», я написал управляющую программу (там цикл на цикле и циклом погоняет мне даже стыдно ее показывать). Дисплей к сожалению у меня без поддержки кириллицы, поэтому выводит лишь сообщения типа «Lift on a Floor» и «Security Circuit Broken!».
image

Если с количеством портов все прошло гладко, то первой большой проблемой оказалось совмещение логических уровней. Дело в том, что электромонтажные изделия, применяемые у нас рассчитаны на 220VAC*. То есть при нажатии на кнопку или концевой выключатель на провод приходит самая настоящая фаза, тогда как Arduino использует логику 5VDC. Так как в электронике я отнюдь не профи, я обратился за помощью на радиофорум, и используя подсказки сгородил такую схему, основанную на оптроне:
image
Она прекрасно работала со светодиодом, и я руководствуясь принципом Кейва Джонсона («мы просто бросаем наукой в стенку и смотрим, что прилипнет») решил сразу напаять ее на плату.image
И, разумеется, это был провал. Arduino не только не видела логической единицы на порту, но и оптроны часто весело горели вместе с резисторами. А тем временем заказчик уже ждал свой лифт. И ничего не оставалось кроме как признать поражение и сделать схему как и раньше, на реле. Ну на реле так на реле, решил я, выбросил оптроны и взял тринадцать промежуточных реле для использования в качестве гальванической развязки. Каждому реле соответствует своя кнопка и этажный концевой выключатель.
image
После такого оригинального решения проблемы логических уровней, я перешел к задаче включения магнитных пускателей. Стоит упомянуть, что реле 5VDC/220VAC к портам Arduino подключаются не напрямую, а по схеме с транзистором и диодиком. Впрочем, можно просто купить готовый блок.
Тем не менее, в вопросе управления такой нагрузкой, как магнитные пускатели на 220В, меня поджидала вторая и самая большая проблема — наводки. Так как я запихнул Arduino, дисплей и оба реле довольно плотно в один корпус, при включении магнитного пускателя дисплей начинал показывать кракозябры вместо букв, а контроллер мог и вовсе зависнуть. Времени оставалось все меньше, и я решил сделать импровизированное экранирование из кухонной фольги.

Как бы нелепо все не выглядело, но это помогло. Я искал в сети какие-либо решения, но нашел лишь предложения использовать ферритовые колечки или опять оптроны, с которыми я уже не подружился.
Вся конструкция в сборе:

Далее следует выезд на объект для установки электрооборудования. Это фабрика по производству пластиковой тары. Вот этим красавцем, грузоподъемностью в три тонны будет управлять контроллер:

Монтаж электрики занятие довольно утомительное — приходиться целый день лазать по шахте, протягивая провода, а потом, порой вися в неудобном положении, соединять их в клеммных колодках в распределительных коробках. Но это не самая страшная проблема, которая ждет Вас, если вы надумали сделать свой контроллер. Самая страшная как я уже говорил — наводки. Оказалось что наводки от магнитного пускателя, работающего в холостую и наводки от пускателя, замыкающего или (что самое страшное) размыкающего питание восьми-киловаттного двигателя это совсем не одно и тоже (Кто бы мог подумать!). Какие бы экраны я ни городил, искры на контактной группе пускателя сводили их действие к нулю. И хотя работа контроллера не нарушалась, дисплей выдавал чепуху вместо информационных сообщений. После долгих мытарств, в итоге, я отгородил магнитные пускатели от контроллера подключенной к нейтрали стальной пластиной (заземления к сожалению на момент установки еще не было), а проблему дисплея решил программно с использованием функции delay();. Как только программа выполняла пуск двигателя или его остановку, включался секундный delay(); после которого выводилось сообщение на дисплей.

Разумеется, я не мог полностью доверить контроллеру вопрос аварийной или экстренной остановки лифта. Как только пропадает питание в цепи безопасности, реле размыкает питание на пускателях, и подает сигнал на порт arduino. И даже если контроллер по какой либо причине зависнет, подъемник все равно будет остановлен. Кроме того, схема предусматривает удаленную перезагрузку системы с любого этажа, с помощью нажатия кнопки «Стоп» более двух секунд.

Видео работы, за качество заранее извиняюсь.
По цене получилось вполне недорого: Реле — 80 р/шт*13шт=1040р, дисплей+Arduino=1000р, блок питания, корпус, клеммники и резисторы = 1000р.
Итого контроллер обошелся где-то в 3000р, тогда как самый бюджетный ПЛК, который справится с такой задачей выйдет не менее 7000р.
По надежности — время покажет. Сгоревшие ПЛК я уже видел, так что не факт что Arduino будет хуже. По этому параметру релейная схема все равно вне конкуренции. Использование контроллера позволило сократить количество проводов, а значит облегчить работу по их обжимке и маркировке, а также упростить монтаж.

Подводя итоги, хотелось бы пожелать развития платформы Arduino в сторону интеграции с силовыми цепями (ну например появления готовых блоков оптической развязки) в будущем. Я знаю, что многие считают Arduino лишь детской игрушкой. Однако прогресс не стоит на месте и все идет к тому, что мало-мальски знакомый с электроникой человек сможет собирать сложнейшие устройства, не оборачиваясь на всякие проблемы вроде «какой резистор выбрать чтобы не сгорел оптрон», и освобождать больше времени для технического творчества.
Спасибо за внимание!

PS:
*Да, я прекрасно понимаю, что 220В не самый лучший выбор для цепей управления. Дело в том, что в фирме еще до моего прихода исторически так сложилось (видимо лень было заморачиваться с преобразователями), ну а еще у поставщиков порой трудновато достать кнопки и пускатели на нужное напряжение. Чтобы Вас успокоить, скажу что многие заказчики подключают грузовые лифты через УЗО, чего я всем и советую.

UPD:
Господа, лифт грузовой, и людям на нем ездить запрещено. Об этом ясно написано на каждой двери на каждом этаже. Двери шахты на время работы заблокированы электрозамками, полностью независимыми от контроллера.
На все аварийные ситуации уже есть свой ответ. Например на случай обрыва троса — механический ловитель резкого томожения (его кстати изобрел сам Оттис), в случае перегрузки либо заклинивания кабины — тепловое реле и ограничители перегрузки, также работающие независимо от контроллера.
Короче говоря, контроллер лишь занимается логикой пуска лифта на этажи, а система безопасности осталась абсолютно без изменений.

UPD2:
Вот текст программы (программист я такой же как и электронщик)