# Умные шторы Старинная русская пословица гласит "Хочешь жить - умей вертеться". Если нам хочется жить в полном комфорте, придется научиться вертеть приводом для штор. Задача не требует высокой скорости и большой точности, но при этом требует развивать достаточно заметное усилия, поэтому здесь пригодится электродвигатель с редуктором. ![](/assets/images/iot/07/motor.jpg) Он способен создавать крутящий момент 2.5 килограмма при рычаге в 1 см, что хватит двигать большинство штор по горизонтали и даже поднимать не слишком тяжелые шторы по вертикали. Но при этом он потребляет довольно большой ток (около 500 мА), что уже слишком много для обычного контроллера, поэтому потребуется использовать специальный драйвер, который сможет пропускать через себя достаточный ток. ![](/assets/images/iot/07/driver.jpg) ### Схема подключения ![](/assets/images/iot/07/curtains.svg) > **Обратите внимание, что в клемму «–» нужно вставить два провода: один от батареек, а второй подключается к контроллеру WeMos D1.** ### Пример программы ```c #define IN1 D2 #define IN2 D3 void setup() { pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); Serial.begin(115200); Serial.println("Enter number for control option:"); Serial.println("1. FORWARD"); Serial.println("2. REVERSE"); Serial.println("3. STOP"); Serial.println(); } void loop() { char user_input; while(Serial.available()) { user_input = Serial.read(); digitalWrite(IN1, LOW); //OFF digitalWrite(IN2, LOW); if (user_input == '1') { Forward(); } else if(user_input == '2') { Reverse(); } else if(user_input == '3') { Stop(); } else { Serial.println("Invalid option entered."); } } } void Forward() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); Serial.print("Motor Forward"); Serial.println(); } void Reverse() { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); Serial.print("Motor Reverse"); Serial.println(); } void Stop() { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); Serial.print("Motor 1 Stop"); Serial.println(); } ``` В этом примере управление двигателем осуществляется из терминала по последовательному порту. Чтобы все заработало надо отключить передачу символов конца строки. ![](/assets/images/iot/07/serial_port_monitor_nocrlf.png) Управление крайне просто - просто пишем HIGH на один из пинов и двигатель крутится. **ВНИМАНИЕ!** Сначала подаём LOW на оба пина, а затем только на один из пинов подаем HIGH! **Если подать питание на два пина, есть шанс спонтанного возникновения белого дыма.** ### Готовое устройство ![](/assets/images/iot/07/curtains.jpg) ## Задача При поступлении числа в топик **itschool/curtains/left** или **itschool/curtains/right** двигатель должен крутиться указанное в сообщении количество секунд в указанном (топиком) направлении. Желательно также предусмотреть использование концевых выключателей (обычных кнопок), которые смогут досрочно остановить вращение двигателя. [к списку задач](iot/summer/tasks)