Совсем недавно познакомился с архитектурой Arduino. Простота технологии настолько понравилась, что сразу же захотелось сделать что-нибудь своими руками. И первым своим проектом решил создать автоматические раздвижные ворота на дистанционном управлении!
Обо всем по порядку, но для начала немного информации для непосвященных об Arduino:
Arduino - это готовая платформа (микроконтроллер), позволяющая легко и быстро создавать различные электронные устройства. Arduino позволяет компьютеру выйти за рамки виртуального мира в физический и взаимодействовать с ним. Устройства на базе Arduino могут получать информацию об окружающей среде посредством различных датчиков, а также могут управлять различными исполнительными устройствами.
По сути Arduino представляет собой миникомпьютер, в который через USB-шнур из обычного компьютера записывается программный код, написанный на языке C++. В дальнейшем наш программный код в автономном режиме управляет контактами ардуино, к которым подключаются различные устройства (датчики, реле, моторчики, светодиоды и т.д.)
Существует много разновидностей платформ Arduino, различающихся мощностью и функционалом. Вот например, две наиболее часто используемые из них:
Arduino изначально придуман итальянцами, но как и все в этом мире - успешно освоен китайцами.
Заказать можно с Алиэкспресс, стоимость плат варьируется от 2 до 10 долларов за единицу (против 30-100 оригинала). Качество и работоспособность абсолютно идентичные (надпись Made in Italy естественно присутствует). Там же можно заказать кучу датчиков и прочих необходимых прибамбасов. Для начинающих рекомендую приобрести стартовые пакеты: готовый набор с платформой ардуино и большим количеством необходимых устройств (от светодиодов и резисторов до ЖК-дисплеев). Стоит такой набор порядка 25 баксов.
Ну а теперь вернемся к нашему проекту
Для сборки нам понадобятся:
1. Старый советский асинхронный реверсивный двигатель:
2. Старый советский редуктор (непонятно от чего):
3. Старые советские концевые выключатели (от тельфера)
4. Корпус от аптечки автомобильной универсальной
5. Собственно сама платформа ардуино. В данном случае самая простая - UNO
6. Беспроводные дистанционные пульты управления с приемником, работающие на радиочастоте 315 Мгц
7. Электронный реле-переключатель
8. Магнитный пускатель (сразу сфоткать забыл, поэтому выкладываю постскриптум с уже подключенными проводами)
9. Старые советские конденсаторы
10. Ручной пульт управления
11. Блок питания на 9 вольт (у всех такой есть;))
12. Фара от отечественного автопрома
13. Два светодиода и два резистора на 220 Ом
14. Шмоток проводов
15. Ну и наконец сами ворота, куда мы будем все это монтировать
Приступаем к изготовлению.
Для начала проводим механическую работу с болгаркой, дрелью, молотком, электросваркой, и с помощью небольших усилий соединяем двигатель с генератором на жесткой опоре, собранной из металлических уголков. Приводной механизм строим на базе шкивов и ремня. Вот что в итоге получилось:
Теперь переходим к электронике:
Силовую часть нашей системы монтируем в корпус от аптечки:
Как видите из рисунка, здесь я разместил магнитный пускатель, который нужен для того, чтобы менять направление вращения реверсивного двигателя
Методом тыка установлено, что для запуска этого двигателя необходимо и достаточно ровно два параллельно спаянных конденсатора, поэтому третий я выкинул
Сюда же я разместил тот самый 9 вольтовый блок питания, предварительно удалив из него лишние части корпуса. 9 вольт нужно для питания платформы ардуино
Таким образом, в аптечке я разместил все габаритные и высоковольтные механизмы. Все что работает от 220 вольт
Получился отличный герметичный бокс (почти герметичный)
Все микросхемы я разместил в автомобильную фару. Ну во первых потому-что они малогабаритные, во-вторых очень чувствительны к влаге (а фара просто идеальный образец герметичности), и наконец, в-третьих они все работают от малого тока 5-9 вольт, поэтому такие устройства нужно держать отдельно от высоковольтных
(это кстати тоже выяснилось в процессе работы. Сначала я все разместил в одной аптечке, но во время первого же испытания оказалось, что вся система работает нестабильно. Причиной было то, что конденсаторы накапливают большой ток, который создает вокруг себя намагниченное поле, напряженностью более 5 вольт. В результате все контакты ардуино самовольно улавливали этот ток и наперебой включались сами по себе. Поэтому было принято решение вынести все микросхемы подальше от аптечки в отдельный бокс.)
В итоге вот что получилось:
На дне размещен микроконтроллер Ардуино. Это мозг всей системы. В него будет записан управляющий программный код
Сверху размещена микросхема-приемник от дистанционных пультов. Она улавливает кодированный радиосигнал от пультов и посылает импульс в микроконтроллер Ардуино сигнализируя о нажатии той или иной кнопки на пульте
Снизу размещена плата с двумя реле-переключателями, которые нужны для того, чтобы подавать высокое напряжение 220 вольт на магнитные пускатели для последующего запуска двигателя в ту или иную сторону
Светодиоды запаял прямо в крышку фары, соединив через резисторы (чтобы не сгорели. Напряжение 5 вольт для них слишком много). Светодиоды я добавил для визуальной индикации. Ярко желтый светодиод я сделал мигающим (мигание осуществляется программным кодом) для того чтобы из далека (конкретно из окна дома) можно было убедиться в нормальной исправности\работоспособности системы. Красный светодиод загорается во время нажатия кнопки на пульте дистанционного управления. Он как бы информирует о том, что сигнал с пульта получен нормально, и если ворота не открываются, то значит дело не в отсутствии радиосигнала
Этот бокс вышел еще лучше силового:
Теперь когда все физические элементы собраны переходим к программированию микроконтроллера
На сайте Arduino скачиваем и устанавливаем в компьютер специальную программу, предназначенную для создания программного кода и его последующей записи в микроконтроллер. Вот как она выглядит:
Пишем программный код. В моем случае он таков:
-
#define DIGITAL_IN1 8
-
#define DIGITAL_IN2 9
-
#define DIGITAL_IN3 10
-
#define DIGITAL_IN4 11
-
#define OUT_PIN1 12
-
#define OUT_PIN2 13
-
#define WORK_INDICATOR 6
-
// +++++++++++++++++++++++ИНДИКАТОР НОРМАЛЬНОЙ РАБОТЫ++++++++++++++++++++++++++++++++++++++
-
const int ledPin = 7; // номер выхода, подключенного к светодиоду
-
// Variables will change:
-
int ledState = LOW; // этой переменной устанавливаем состояние светодиода
-
long previousMillis = 0; // храним время последнего переключения светодиода
-
long interval = 1000; // интервал между включение/выключением светодиода (1 секунда)
-
// +++++++++++++++++++++++ИНДИКАТОР НОРМАЛЬНОЙ РАБОТЫ++++++++++++++++++++++++++++++++++++++
-
void setup () {
-
// Настраиваем пины
-
pinMode (DIGITAL_IN1, INPUT);
-
pinMode (DIGITAL_IN2, INPUT);
-
pinMode (DIGITAL_IN3, INPUT);
-
pinMode (DIGITAL_IN4, INPUT);
-
pinMode (OUT_PIN1, OUTPUT);
-
pinMode (OUT_PIN2, OUTPUT);
-
pinMode (WORK_INDICATOR, OUTPUT);
-
// +++++++++++++++++++++++ИНДИКАТОР НОРМАЛЬНОЙ РАБОТЫ++++++++++++++++++++++++++++++++++++++
-
// задаем режим выхода для порта, подключенного к светодиоду
-
pinMode(ledPin, OUTPUT);
-
// +++++++++++++++++++++++ИНДИКАТОР НОРМАЛЬНОЙ РАБОТЫ++++++++++++++++++++++++++++++++++++++
-
}
-
void loop() {
-
int InputSignal_1 = digitalRead(DIGITAL_IN1);
-
int InputSignal_2 = digitalRead(DIGITAL_IN2);
-
int InputSignal_3 = digitalRead(DIGITAL_IN3);
-
int InputSignal_4 = digitalRead(DIGITAL_IN4);
-
digitalWrite(OUT_PIN1, HIGH);
-
digitalWrite(OUT_PIN2, HIGH);
-
// Временное вращение. Кнопки A,B,C,D
-
if (InputSignal_1 == HIGH) {
-
digitalWrite(OUT_PIN2, LOW);
-
digitalWrite(WORK_INDICATOR, HIGH); // активируем красный индикатор
-
delay(400);
-
digitalWrite(OUT_PIN2, HIGH);
-
digitalWrite(WORK_INDICATOR, LOW); // гасим красный индикатор
-
}
-
if (InputSignal_3 == HIGH) {
-
digitalWrite(OUT_PIN1, LOW);
-
digitalWrite(WORK_INDICATOR, HIGH);
-
delay(400);
-
digitalWrite(OUT_PIN1, HIGH);
-
digitalWrite(WORK_INDICATOR, LOW);
-
}
-
if (InputSignal_2 == HIGH) {
-
digitalWrite(OUT_PIN2, LOW);
-
digitalWrite(WORK_INDICATOR, HIGH);
-
delay(400);
-
digitalWrite(OUT_PIN2, HIGH);
-
digitalWrite(WORK_INDICATOR, LOW);
-
}
-
if (InputSignal_4 == HIGH) {
-
digitalWrite(OUT_PIN1, LOW);
-
digitalWrite(WORK_INDICATOR, HIGH);
-
delay(400);
-
digitalWrite(OUT_PIN1, HIGH);
-
digitalWrite(WORK_INDICATOR, LOW);
-
}
-
// +++++++++++++++++++++++ИНДИКАТОР НОРМАЛЬНОЙ РАБОТЫ++++++++++++++++++++++++++++++++++++++
-
// здесь код, который будет работать постоянно
-
// и который не должен останавливаться на время между переключениями светодиода
-
unsigned long currentMillis = millis();
-
//проверяем не прошел ли нужный интервал, если прошел то
-
if(currentMillis - previousMillis > interval) {
-
// сохраняем время последнего переключения
-
previousMillis = currentMillis;
-
// если светодиод не горит, то зажигаем, и наоборот
-
if (ledState == LOW)
-
ledState = HIGH;
-
else
-
ledState = LOW;
-
// устанавливаем состояния выхода, чтобы включить или выключить светодиод
-
digitalWrite(ledPin, ledState);
-
}
-
// +++++++++++++++++++++++ИНДИКАТОР НОРМАЛЬНОЙ РАБОТЫ++++++++++++++++++++++++++++++++++++++
-
//Finish
-
}
Заливаем код в наш микроконтроллер. Теперь ардуино автономно будет улавливать сигналы с пульта дистанционного управления и посылать нужные команды на реле и светодиоды. Реле в свою очередь будут включать магнитные пускатели, которые будут управлять двигателем
Теперь осталось самое малое и приятное: установить все это на ворота и проверить результат.
Вот что получилось в итоге:
Скорость вышла медленной. Но это легко устраняется путем замены диаметра одного из шкивов (в большую или меньшую сторону, смотря какой шкив менять)
Итак подобьем бабки подведем итоги, тенге:
Наименование |
Количество |
Цена |
Сумма |
1.Реверсивный двигатель |
1 |
3 000 |
3 000 |
2.Редуктор |
1 |
2 000 |
2 000 |
3.Концевые выключатели |
2 |
200 |
400 |
4.Аптечка универсальная |
1 |
0 |
0 |
5.Микроконтроллер Arduino |
1 |
800 |
800 |
6.Пульты дистанционного управления |
1 |
750 |
750 |
7.Релейный модуль |
1 |
600 |
600 |
8.Магнитный пускатель |
1 |
5 500 |
5 500 |
9.Конденсаторы |
2 |
100 |
200 |
10.Ручной пульт управления |
1 |
1 350 |
1 350 |
11.Блок питания 9v |
1 |
0 |
0 |
12.Фара автомобильная |
1 |
0 |
0 |
13.Светодиоды |
2 |
5 |
10 |
14.Резисторы 220 Ом |
2 |
5 |
10 |
ИТОГО |
14 620 |
* Самым дорогим элементом является магнитный пускатель. В шкафу на полке такой не найдешь, поэтому придется приобретать в специализированном магазине электротехники. Для тех, у кого в гараже завалялись старые ненужные двигатели, редукторы и прочее, смета выйдет намного дешевле.