/*
* tcrt5000.c
*
* Created: 09.04.2016 22:33:31
* Author: lBeJIuk
*/
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
#define F_CPU 1000000UL
// Инициализация света
#define PORT_led1 PORTD
#define DDR_led1 DDRD
#define PIN_led1 5
#define PORT_led2 PORTD
#define DDR_led2 DDRD
#define PIN_led2 6
#define PORT_suply PORTB
#define DDR_suply DDRB
#define PIN_suply 2
//инициализация датчика TCRT5000 #1
#define PORT_tc1 PORTB
#define DDR_tc1 DDRB
#define PINN_tc1 PINB
#define PIN_tc1 0
//инициализация датчика TCRT5000 #2
#define PORT_tc2 PORTB
#define DDR_tc2 DDRB
#define PINN_tc2 PINB
#define PIN_tc2 1
#define tcrt_1 ((PINN_tc1>>PIN_tc1) & 1)//TCRT5000 #1 // 0 - сработка
#define tcrt_2 ((PINN_tc2>>PIN_tc2) & 1)//TCRT5000 #2 // 1 - нету сработки
/*
#define on_led_1 ( PORT_led1 = PORT_led1 & (!(1<<PIN_led1)) )
#define off_led_1 ( PORT_led1 = PORT_led1 | (1<<PIN_led1) )
#define led_1 ( PORT_led1 = PORT_led1 ^ (1<<PIN_led1) )
#define led_2 ( PORT_led2 = PORT_led2 ^ (1<<PIN_led2) )
#define on_led_2 ( PORT_led2 = PORT_led2 & (!(1<<PIN_led2)) )
#define off_led_2 ( PORT_led2 = PORT_led2 | (1<<PIN_led2) )
#define on_suply ( PORT_suply = PORT_suply | (1<<PIN_suply) )
#define off_suply ( PORT_suply = PORT_suply & (!(1<<PIN_suply)) )
*/
/*
void led_1 (void)
{ PORT_led1 = PORT_led1 ^ (1<<PIN_led1); }
void led_2 (void)
{PORT_led2 = PORT_led2 ^ (1<<PIN_led2);}
void on_suply (void)
{ PORT_suply = PORT_suply | (1<<PIN_suply) ;}
void off_suply (void)
{ PORT_suply = PORT_suply & (!(1<<PIN_suply));}
*/
int suply_state =0;
char tcrt1_state =0; //0 - сработка
char tcrt2_state =0; //0 - сработка
char led1_state =1; // 0 - включить свет лед1 // 1 - выключить свет лед1
char led2_state =1; // 0 - включить свет лед2 // 1 - выключить свет лед2
void init_port(void){
DDR_led1|=(1<<PIN_led1); // output
DDR_led2|=(1<<PIN_led2); // output
DDR_suply|=(1<<PIN_suply); // output
DDR_tc1= DDR_tc1 & (!(1<<PIN_tc1)); //pull-up
DDR_tc2= DDR_tc2 & (!(1<<PIN_tc2)); //pull-up
PORT_led1|=(1<<PIN_led1); // 0 - светит
PORT_led2|=(1<<PIN_led2); // 1 - не светит
PORT_suply&=(!(1<<PIN_suply)); // 0 - нету напряжения/// 1 - есть напряжение
PORT_tc1|=(1<<PIN_tc1);//pull-up
PORT_tc2|=(1<<PIN_tc2);//pull-up
}
void main (void){
init_port();
_delay_ms(2000);
while(1) {
if ((tcrt_1 == 1) && (tcrt1_state==1) ){tcrt1_state=0;_delay_ms(100);}
if ((tcrt_2 == 1) && (tcrt2_state==1) ){tcrt2_state=0;_delay_ms(100);}
_delay_ms(50);
if ((tcrt_1 == 0) && (tcrt1_state == 0)){
tcrt1_state=1;
_delay_ms(25);
if (tcrt_1 == 0 ){
switch (led1_state){
case 0:
PORTD=PORTD & 0b10111111;//PORT_led1 = PORT_led1 & (! (1<<PIN_led1)) ;//on_led_1
led1_state=1;
break;
case 1:
PORTD=PORTD | 0b01000000;//PORT_led1 = PORT_led1 | (1<<PIN_led1); //off_led_1;
led1_state=0;
break;}
}}
if ((tcrt_2 == 0) && (tcrt2_state == 0) ){
tcrt2_state=1;
_delay_ms(25);
if (tcrt_2 == 0 ){
switch (led2_state){
case 0:
PORTD=PORTD & 0b11011111;//PORT_led2 = PORT_led2 & (!(1<<PIN_led2)); //on_led_2;
led2_state=1;
break;
case 1:
PORTD=PORTD | 0b00100000;//PORT_led2 = PORT_led2 | (1<<PIN_led2); //off_led_2;
led2_state=0;
break;}
}}
if ( ( (PIND>>PIN_led1) &3) != 3 ) {PORT_suply = PORT_suply | (1<<PIN_suply);/*on_suply;*/}
else if ( ( (PIND>>PIN_led1) &3) == 3 ) {PORT_suply = PORT_suply & (!(1<<PIN_suply));/*off_suply;*/}
/*switch((PIND>>PIN_led1)&3){
case 0:
on_suply();
break;
case 1:
on_suply();
break;
case 2:
on_suply();
break;
case 3:
off_suply();
break;
}
*/
}
}
+17 |
3654
102
|
Меряет расстояиние до закрытой двери. Если расстояние меньше или больше уставки -включает через твердотельное реле свет в санузле… Вот вам и бесконтактный датчик :)
По потреблению хватает (контроллер кушает мало и твердотельное реле тоже), то что нет гальванической развязки не критично — нет выступающих токопроводящих частей :)
Всё ж дешевле чем в оффлайне.
А смысла в другом БП не вижу, этот работает надёжно уже около года.
gearbest.com/-/pp_58067.html
кто не умеет — тому схемы попроще, на элементной базе ;)
Космическое излучение, знаете ли бывает.Статика, броски по питанию в сети 220в и наводки.А схема целая.Надёжность никто не отменял.
Микропроцессоры не надёжны по определению.
А угол " обстрела " какой?
Схема, печатка и прошивка отсюда?
www.joyta.ru/3263-prostoj-avtomaticheskij-vklyuchatel-sveta-na-osnove-ultrazvukovom-datchike/
А тригер плох тем что у меня его небыло, а атмега была.
2. Реализовать в программе алгоритм работы простого триггера значительно проще (уровень программы для мигания светодиодом), чем цифрового фильтра, фазового детектора, работающего в реальном времени на частотах в несколько килогерц.
Делается совершенно несложно, займет от силы 1/10 ресурсов меги 328 — но зато, с минимумом лишнего. Вдобавок, можно реализовать не только частотную, но и кодовую идентификацию сигнала. Чтобы устройство гарантированно не спотыкалось об сигналы аналогичных ему устройств, пультов ДУ и тому подобного.
Если так не делать, то солнечный свет в окно слепит все это на ура.
Как вариант: ГПСЧ на основе регистра сдвига с линейной обратной связью.
А аналоговое измерение — как раз, чтобы схема одинаково устойчиво работала и в темноте, и при ярком свете.
Вверху видны два отверстия датчика.
А вот профиль и место под датчик
плата контроллера, сорри за качество фото, фотоаппарата нормального не было.
Делал несколько лет назад.
Даже наоборот хорошо, что такое расстояние.
2. Не слепит в глаза.
Если Вы заметили, подсветка немного отнесена от стены.
Может проще обзор запилить :)
это вид полки внутри шкафа? Канал под провод шпаклевкой + пленка? А профиль просто так для примера положили?
ПС. Откуда фото если работа была пару лет назад? Все работы фотографируете?
На первом фото его видно. потому никаких проводов не видно, только внутри шкафчика вертикально поднимается.
Делал три или четыре года назад, фото платы и врезки делал тогда, первое фото делал недавно.
Так это выглядит полностью.
Справа тоже планировался рейлинг, даже лежит, из нержавейки, но жена сказала что ей так нравится.
Профиль, рассеиватель, заглушки
Мое творение с функцией «снять и забрать на новое место за 60мин»
Вы не показали как разместили светодиод и фотодатчик. От этого (кроме программной и аппаратной настройки чувствительности) зависит и чувствительность срабатывания по расстоянию и угол чувствительности. Покажите, плс.
Светодиод и фотодатчик в одном корпусе, так что разместить по другому не сняв корпус — невозможно.
Схемкой и прошивкой не поделитесь?
bezkz.su/publ/shemy/vyklyuchateli-pereklyuchateliik-f/700211-prostoy-avtomaticheskiy-vyklyuchatel-sveta-na-ultrazvukovom-datchike.html
Код под свои нужды подправил, и плату свою нарисовал, yadi.sk/d/gsuDYyaktmYRf, yadi.sk/i/gd8IbMnJtmYRm
PS — я делал для дома touch выключатели, от батарейки & RF433.
А для комнатного выключателя такая приблуда будет крайне неудобной
шутка :)
catcatcat.d-lan.dp.ua/datchik-priblizheniya-ot-rumena-zheleva/