Контроллер центрального замка авто
- Войдите на сайт для отправки комментариев
Втр, 28/04/2020 - 15:01
Делал для друга простенький контроллер ЦЗ, вот решил поделиться)
Основан на МК Attiny13A, прошивается через ArduinoIDE(ядро есть в архиве) при помощи программатора USBASP.
Из функционала, открытие/закрытие ЦЗ по сигналу концевика главного ЦЗ, открытие/закрытие по нажатию на кнопку, защита от случайного закрытия ЦЗ при открытой двери(концевик двери "-")
Все необходимое по ссылке в архиве https://yadi.sk/d/ZNYRyx6u7EuifA
//ядро attiny13 https://github.com/MCUdude/MicroCore //Контроллер центрального замка //1.открытие и закрыти по нажатию на кнопку //2.открытие и закрытие по изменению положения активатора //3.защита от закрывания активаторов при открытой двери #include <avr/io.h> #include <avr/wdt.h> // здесь организована работа с ватчдогом #include <avr/sleep.h> // здесь описаны режимы сна #include <avr/interrupt.h> // работа с прерываниями //пин положения цз 4 #define PC_BIT 4 // 4 #define PC_PORT PORTB #define PC_CLR (bitClear(PC_PORT, PC_BIT)) #define PC_OUT DDRB |= (1 << PB4); #define PC_INIT PC_CLR; PC_OUT #define PC_CONT (bitRead(PINB, PC_BIT)) //пин положения концевиков 3 #define DOOR_BIT 3 // 3 #define DOOR_PORT PORTB #define DOOR_CLR (bitClear(DOOR_PORT, DOOR_BIT)) #define DOOR_OUT DDRB |= (1 << PB3); #define DOOR_INIT DOOR_CLR; DOOR_OUT #define DOOR_CONT (bitRead(PINB, DOOR_BIT)) //пин кнопки открытия/закрытия 0 #define BTN_BIT 0 // 0 #define BTN_PORT PORTB #define BTN_CLR (bitClear(BTN_PORT, BTN_BIT)) #define BTN_OUT DDRB |= (1 << PB0); #define BTN_INIT BTN_CLR; BTN_OUT #define BTN_CONT (bitRead(PINB, BTN_BIT)) //пин сигнала открытия 1 #define OPEN_BIT 1 // 1 #define OPEN_PORT PORTB #define OPEN_CLR (bitClear(OPEN_PORT, OPEN_BIT)) #define OPEN_SET (bitSet(OPEN_PORT, OPEN_BIT)) #define OPEN_OUT DDRB &= ~(1 << PB1); #define OPEN_INIT OPEN_CLR; OPEN_OUT //пин сигнала открытия 2 #define CLOSE_BIT 2 // 2 #define CLOSE_PORT PORTB #define CLOSE_CLR (bitClear(CLOSE_PORT, CLOSE_BIT)) #define CLOSE_SET (bitSet(CLOSE_PORT, CLOSE_BIT)) #define CLOSE_OUT DDRB &= ~(1 << PB2); #define CLOSE_INIT CLOSE_CLR; CLOSE_OUT volatile boolean control; //флаг положения цз //-------------------------------------------------------------- ISR(PCINT0_vect) //Прерывание на PCINT { if (PC_CONT==control) //проверяем положение цз 0 = закрыто 1 = открыто { switch(PC_CONT){ //меняем положение активаторов цз case 0: CLOSE_SET; delay(500); CLOSE_CLR; control=1; if (!DOOR_CONT) { OPEN_SET; delay(500); OPEN_CLR; control=0; } break; case 1: OPEN_SET; delay(500); OPEN_CLR; control=0; break; } } if(!BTN_CONT) //если нажата кнопка цз { switch(PC_CONT){ case 1: CLOSE_SET; delay(500); CLOSE_CLR; control=1; if (!DOOR_CONT) { OPEN_SET; delay(500); OPEN_CLR; control=0; } break; case 0: OPEN_SET; delay(500); OPEN_CLR; control=0; break; } while(!BTN_CONT); //ждем пока отпустят кнопку } } //-------------------------------------------------------------- void sleep_pwr_down(void) { MCUCR |= (1<<SM1); // power-down mode MCUCR &= ~(1<<SM0); // power-down mode MCUCR |= (1<<SE); asm("sleep"); } //-------------------------------------------------------------- int main(void) { PRR = (1<<PRADC); // shut down ADC pinMode(BTN_BIT, INPUT_PULLUP); pinMode(DOOR_BIT, INPUT_PULLUP); pinMode(PC_BIT, INPUT_PULLUP); CLOSE_INIT; OPEN_INIT; GIMSK |= (1<<PCIE); //разрешил прерывание PCINT0 PCMSK |= (1<<PB4); //Разрешил вызов прерывания при изменении положения активатора цз PCMSK |= (1<<PB0); //Разрешил вызов прерывания при на клавишу цз SREG |= (1<<SREG_I); // Разрешаем прерывания глобально //-------------------------------------------------------------- while(1) { sleep_pwr_down(); } }
78L05 линейный стабилизатор, думаю что с 12 до 5 будет адски нагреваться. Я бы строил что то на основе шим
будет адски нагреваться. Я бы строил что то на основе шим
Рана тибе есчо саветы такие делать.
Уотт када ты к ним цифеерки с расчётом прикрепишь да обоснуешь - уотт тагда уже буит можна.
ilya_s85 - Потребление устройства не более 2мА, так что нагрева там в принципе не может быть)
Интересный контроллер ЦЗ. Подскажите, а что будет если постоянно на вход 1 подать питание?
И не совсем понятно какой сигнал принимает вход 3?
что будет если постоянно на вход 1 подать питание?
Ничего не будет. Там для таких случаев диод стоит.