Автоматическое включение света
Добавлено: Вт мар 10, 2015 13:53:15
Добрый день,
Как то у нас вышел закон об обязательном включении ходовых огней при движении в городе. Соответственно очень часто забывается то включить то выключить. Лезть в электронику авто категорически запрещено условиями гарантии. Да и потом такая проблема у родителей, у друзей. Порывшись в интернете готового не нашел (Точнее нашел готовое устройство 3тыс руб). Вот и родилась идея, что если ловить разницу напряжение на аккумуляторе при заглушенном двигателе 12в при заведенном больше 13в и в зависимости от этого щелкать реле.

Принцип простой, кидаем 2 провода на аккумулятор, на основе аналогового компаратор, есть опорное напряжение 3,3V D4 и делитель R5. Высчитываем делитель так чтобы при 12.5 на делителе было чуть меньше 3,3.
Почему выбран контроллер, а не обычный дешевый компаратор - отсрочка времени включения и исключить провалы при включении нагрузки как дальний свет, печка и тп.
Итог: Прошу посмотреть и проверить. как бы по частям все работает, все вместе не собирал. Так сказать прошу модерации)!
Всем спасибо! за потраченное время)
Как то у нас вышел закон об обязательном включении ходовых огней при движении в городе. Соответственно очень часто забывается то включить то выключить. Лезть в электронику авто категорически запрещено условиями гарантии. Да и потом такая проблема у родителей, у друзей. Порывшись в интернете готового не нашел (Точнее нашел готовое устройство 3тыс руб). Вот и родилась идея, что если ловить разницу напряжение на аккумуляторе при заглушенном двигателе 12в при заведенном больше 13в и в зависимости от этого щелкать реле.
Код: Выделить всё
#define F_CPU 9600000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define SET_B(x) |= (1<<x)
#define CLR_B(x) &=~(1<<x)
#define INV_B(x) ^=(1<<x)
unsigned char Cache;
unsigned char x=170;
int main (void)
{
DDRB=0x00; //порт на выход
DDRB SET_B(2);
DDRB SET_B(3);
PORTB =0x00;
ACSR|=(0<<ADC); //включение компаратора
ACSR|=(0<<ACBG);
while(1){
if ((ACSR & (1<<ACO))==0)
PORTB SET_B(2);
else
PORTB CLR_B(2);
if (((ACSR & (1<<ACO))!=0) && (x<180)){
x++;
_delay_ms(100);
}
if (((ACSR & (1<<ACO))==0) && (x>160) ){
x--;
_delay_ms(100);
}
if (x==160)
PORTB SET_B(3);
if (x==180)
PORTB CLR_B(3);
}
}
Почему выбран контроллер, а не обычный дешевый компаратор - отсрочка времени включения и исключить провалы при включении нагрузки как дальний свет, печка и тп.
Итог: Прошу посмотреть и проверить. как бы по частям все работает, все вместе не собирал. Так сказать прошу модерации)!
Всем спасибо! за потраченное время)
