|
Управление техникой используя ИК диапазон :) Потихоньку тикает время, и уже ни для кого не секрет что за рубежом "умный дом" не такое уж и большое шаманство. Но вот будет все это дело стоить очень много денег, которые ты вряд ли захочешь потратить. Сегодня я расскажу тебе как сделать самопальное подобие всей этой штуки (рассмотрим управление светом/магнитофоном/телеком/вообще чем угодно не вставая с дивана). Это же не кажется странным когда современную бытовую технику оборудуют пультами управления. Вот и мы можем в своем доме посадить на пульт розетки и верхнее освещение. Итак, нужно собрать пульт - некое подобие того чем ты щелкаешь свой телек. И приемник сигналов пульта. И в итоге коммутирующее устройство подключающееся к приемнику - которое в свою очередь будет коммутировать домашние электроцепи. Начнем с теории =)). Передача сигналов ведется в ИК диапазоне (наше зрение его не улавливает, что нельзя сказать о полупроводниковых фотоприемниках). Но пердача информации ведется достаточно хитрым способом, который позволяет передавать ее достаточно далеко и безошибочно, не используя никакой оптики. Для этого сигнал передатчика модулируется с достаточно большой частой (36 КГц). В нашей схеме все будет происходить следующим образом: если пульт отправляет единичку то в течении 1800 мкС его излучающий ИК диод "мигает" с частотой 36 КГц (назовем эту частоту несущей), затем следующие 600 мкС излучатель выключается (некая пауза между битами). После паузы передается следующий бит - если это снова единица - то по уже описанному для нее алгоритму, если ноль - то также как и единица, токо длительность составить не 1800 мкС, а всего 600 мкС. После отправки последненго бита в передаваемом пакете следует достаточно большая пауза - 42 млС - она нужна для того чтобы отделять пакеты (определенные наборы последовательноостей битов друг от друга). Затем пульт может передавать пакеты других кнопок - если они были нажаты. Теперь рассмотрим подробно работу приемника ИК пакетов. Его "глазом" является детать TSOP1736. Последние две цифры в маркировке обозначают несущую частоту, к которой наиболее чувсвителен фотоприемник (частота указана в КГц) - теперь становится ясно почему пульт моделирует мерцание излучателя на частоте 36 КГц? Ведь так ;) ? TSOP1736 - сам по себе штучка достаточно умная, и встроенный в нее фильтр от помех упрощает нашу жизнь =). На выходе мы имеем сигнал очищенный от разных там модуляций. В момент приема "1" (ориентируясь на алгоритм передатчика) напряжение на выходе [data] с +5 вольт опустится до 0 вольт в течении 1800 мкС. В момент приема нолика тоже опустится до нуля на 600 мкС. Во время пауз малой и большой напряжение на выходе [data] будет снова возрастать до +5 вольт. См диаграмму:
Из диаграммы видно что пакет данных для каждой кнопки состоит из 10 битов, первые 7 из которых - это биты идентифицирующие модель пульта (придуманы мной чисто от башки - да и вообще весь протокол придуман по принципу работает и ладно - все временные интервалы тоже изначально придуманы - и в итоге к ним все подстраивается). Последние три бита обозначают номер кнопки - у нас модель пульта простенькая - всего три кнопки. Вообще реализовать приемник на стандартных логических микросхемах громоздко и трудно, поэтому воспользуемся новинками техники - микроконтроллерами - я сконструировал и пульт и приемник на базе одного и того же контроллера - AT90S2313-10PI. Это вполне доступный и недорогой экземпляр. Итак, для тех кто в танке - микроконтроллер это с виду та же микросхема только внутри у нее имеется память - в данном случае 2 КБайта, в которой распологается программа на ассемблере, которая предварительно(перед началом использования микросхемы в устройстве прошивается с помощью программатора соединенного с компьютером). Итак, чем же хороши микроконтоллеры? А тем что для реализации достаточно сложных логических функций на плате устройства можно разместить всего одну микросхемку-микроконтроллер - а все тонкости учесть при написании программы для него. Модель микроконтроллера, который я использую имеет 15 программируемых линий ввода/вывода (из них два входа использующих IRQ[прерывание]), 2 таймера(тоже с IRQ), UART [IRQ], компаратор [IRQ] и многое дугое. Но нам понадобятся только линии ввода вывода использующие прерывания и оба таймера - для приемника. Для передачика из всего этого набора не понадобилось IRQ линий ввода/вывода. Схемы пульта и приемника(на схеме приемник уже скомбинирован с коммутатором) приведены ниже: приемник Обратите внимание на схему приемника - синим выделены элементы коммутатора(к транзисторам подключены реле, рассчитанные на 25 вольт). Красным обозначен блок ручного включения/выключения выбранного канала - при нажатии кнопки произойдет включение/выключение соответствующего канала. Если не хотите, то можете не собирать то что выделено красным - при этом выводы контроллера просто оставить неподсоединенными. При нестабильности работы(хаотичное переключение каналов) советую оставить резисторы(выделены красным) подсоединенные к плюсу и вывыодам контроллера - кнопки при этом можно не подключать. передатчик Советую взять излучатели ИК диапазона следующих марок TSAL5100,TSAL6200. Короче, чем мощней, тем лучше. Можете соединить последовательно два излучателя - хуже не будет. Транзистор использовался КТ315г. Подойдет также и КТ3102. Распиновка деталей указана ниже:
Если схемы кажутся слишком сложными или громоздкими, то предлагаю две фотографии - на одной приемник, на другой передачик в собранном виде: приемник Полезный совет - в качестве дополнительного ИК фильтра можно использовать обычную фотопленку. =) передатчик Итак, предположим, что схемы вы собрали и осталось только прошить программу в микроконтроллер. Для этого я использовал программу ICProg. Как правило они все похожи, и для программирования микроконтроллера он подключается к ПК через параллельный (LPT) порт. Советую использовать на платах кроватки для микросхемы-контроллера что существенно облегчает процедуру вставки/извлечения микросхемы. Файлы прошивки для приемника и передатчика находятся здесь. После прошивки контроллеров вставляйте их на места - не спутайте только их друг с другом - контроллер с программой для приемника вставьте в плату приемника ;) ну вообщем вы поняли. И еще хочу обратить внимание на кварцы для контроллеров. Не используйте кварцы других номиналов нежели указаны мной на схеме - иначе работать не будет - все коэффициенты в программах приемника и передатчика ориентированы на частоту кварца. В приемнике кварц на 10.000МГц, в передачике на 4.000МГц. Теперь вкратце о том как все это работает - нажимаете на пульте кнопку (одну из трех) и просходит переключение на канале коммутатора - если соответствующий какнал до подачи сигнала был выключен, то он включится и наоборот. Правильно собранная схема в отладке не нуждается. Но если будут вопросы - можете написать мне на мыло. Ниже приведены исходные коды программ для микроконтроллеров приемника и
передатчика. приемник #include <io2313v.h> #define TRUE 1 //Here we see the code "up side down"
for(cycle=0;cycle<10;cycle++) if(CompareFlag1==TRUE)Signal1=TRUE; }
//TIMER0 initialisation - prescale:1024 #pragma interrupt_handler timer0_ovf_isr:7 //if we have not signal more then 0.5 sec
after button unpressed if(MakroTimerN<=50)MakroTimerN++;
if(SignalRecieved==FALSE)
//TIMER1 initialisation - prescale:1 #pragma interrupt_handler timer1_ovf_isr:6 if(WasFallingEdge==TRUE)TimerN++; #pragma interrupt_handler int0_isr:2 #pragma interrupt_handler int1_isr:3 /*1*/if((TimerN>=20)&&(TimerN<=52))
//call this routine to initialise all
peripherals MCUCR = 0x0E; void delay_ms(unsigned int
Choice)//Millisecond delay for XTAL=10MHz void main(void) while(1) }
передатчик #include <io2313v.h> unsigned char on=0; /////////////////////////////////////////////////////////////// const unsigned char
Key1Code[32]={255,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0};
//TIMER0 initialisation - prescale:1 #pragma interrupt_handler timer0_ovf_isr:7 } //TIMER1 initialisation - prescale:1 #pragma interrupt_handler timer1_ovf_isr:6 if(count<30) }
//call this routine to initialise all
peripherals MCUCR = 0x00; void delay_ms(int Choice)//Millisecond delay
for XTAL=4MHz
PORTD&=~BIT(0);
}
Sash |
|