ЖД шлагбаум на Arduino своими руками, управление с пульта

Питание 12В, логика на Arduino, привод шлагбаума - моторчик из cd-привода с резиновым пассиком из велошины, корпус - канализационные трубы 50мм, лампы галогенные по 10W, крепление - подставка для живой елки, звонок - катушка, втягивающая сердечник, который отпружинивая ударяет звонок. #include IRremote.h //#include IRremoteInt.h IRrecv irrecv(11); //пин ИК приемника decode_results results; //переменная где будет хр. результат int motor1=3; //пин мотора 1 int motor2=4; //пин мотора 2 int pwm=5; //пин ШИМ int buzz=6; //пин звонка int white=7; //пин белой лампы int red1=8; //пин красной лампы 1 int red2=9; //пин красной лампы 2 int switch1=10; //пин концевика на открытие int switch2=12; //пин концевика на закрытие int redlamp=red1; //пин активной красной лампы void setup() { (); // Запускаем прием pinMode(motor1,OUTPUT); pinMode(motor2,OUTPUT); pinMode(pwm,OUTPUT); pinMode(buzz,OUTPUT); pinMode(white,OUTPUT); pinMode(red1,OUTPUT); pinMode(red2,OUTPUT); pinMode(switch1, INPUT_PULLUP); //HIGH-разомкнут, LOW-замкнут pinMode(switch2, INPUT_PULLUP); //HIGH-разомкнут, LOW-замкнут digitalWrite(motor1,LOW); digitalWrite(motor2,LOW); digitalWrite(pwm,LOW); digitalWrite(buzz,LOW); digitalWrite(white,LOW); digitalWrite(red1,LOW); digitalWrite(red2,LOW); } void buzz_and_redlight() { digitalWrite(redlamp,HIGH); digitalWrite(buzz,HIGH); delay(50); digitalWrite(buzz,LOW); delay(200); digitalWrite(buzz,HIGH); delay(50); digitalWrite(buzz,LOW); delay(200); digitalWrite(redlamp,LOW); if (redlamp==red1) {redlamp=red2} else {redlamp=red1} //смена активной красной лампы } void loop() { //открытие шлагбаума digitalWrite(motor1,HIGH); //поднимаем шлагбаум digitalWrite(motor2,LOW); while (digitalRead(switch1) == HIGH) //пока не сработает концевик мигаем красными и звеним { buzz_and_redlight(); if ((&results)) {goto closing;} //прерывание с пульта } digitalWrite(motor1,LOW); //останавливаем двигатель digitalWrite(white,HIGH); //зажигаем белый while (!(&results)){} //ждем команды с пульта digitalWrite(white,LOW); //гасим белый //закрытие шлагбаума closing: (); digitalWrite(motor1,LOW); digitalWrite(motor2,HIGH); //опускаем шлагбаум while (!(&results)) //пока не будет команды с пульта мигаем красными и звеним { buzz_and_redlight(); if (digitalRead(switch2) == LOW) {digitalWrite(motor2,LOW);} //если сработал концевик останавливаем двигатель } (); }
Back to Top