Контроллер центрального замка авто

mambavamba14
Offline
Зарегистрирован: 25.12.2019

Делал для друга простенький контроллер ЦЗ, вот решил поделиться)

Основан на МК 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();
    }
}

ilya_s85
Offline
Зарегистрирован: 16.05.2019

78L05 линейный стабилизатор, думаю что с 12 до 5 будет адски нагреваться. Я бы строил что то на основе шим

-NMi-
Offline
Зарегистрирован: 20.08.2018

ilya_s85 пишет:

будет адски нагреваться. Я бы строил что то на основе шим

 

Рана тибе есчо саветы такие делать.

Уотт када ты к ним цифеерки с расчётом прикрепишь да обоснуешь - уотт тагда уже буит можна.