diy: простые интересные РАДИОСХЕМЫ сделанные своими руками

» ДАТАШИТ
Например: TDA2050


» ТРЕКЕР GPS


» РАДИОБЛОГИ
Как сделать усилитель из платы от телевизора
Детектор электромагнитных волн на базе детекторного приемника
Усилитель из старого магнитофона
Ремонт новогодней гирлянды своими руками
Ремонт микроволновки LG своими руками
Точный индикатор напряжения из 34063api
Суперконденсаторы для запуска двигателей
Ремонт стиральной машины Индезит WITL86


Радиосхемы » Устройства на микроконтроллерах

ИК СИГНАЛИЗАЦИЯ

      

Здравствуйте - решил позаниматься радио"скотством", увидев в интернете связку лазер - фоторезистор - тиристор. Молодые люди так лихо всё преподнесли, правда для людей не особо разбирающихся в электронике. Да это всё ерунда, я решил раскачать эту сигнализацию, накидать всяких плюшек, реализовать настройку лазер - зеркало... Да много чего ещё - короче к делу. Вашему вниманию уже готовый вид сигналки:

готовый вид ИК сигналки

Принцип работы охранного устройства

Направляем луч лазера на фоторезистор - на расстояние предполагаемой охраняемой зоны, подключаем питание - загорает зелёный светодиод, нажимаем на пульте ДУ красную кнопку или чёрную механическую - устройство в режиме срабатывания сигнализации, при прерывании хода луча лазера - неважно чем условно "рукой" загорает RGB светодиод и из динамика звучит мелодия "Аксель - полицейский из Беверли - Хилз". Чёрная кнопка (слева от красной) на пульте для пропуска или выхода из условно охраняемой зоны - затем снова активируем защиту красной кнопкой или чёрной механической.

Отключить мелодию и перезагрузить сигнализацию можно только переподключив питание всего устройства - я сделал это умышленно, чтобы человек понял причину срабатывания сигнализации.

Оговорюсь, что это любительская сигнализация и реализована не профессионалом, для более серьёзного исполнения нужны более глубокие знания и опыт в разработке подобных систем, надёжные детали, автономное питание и т.д. и т.п. LetsGO - начнём с принципиальной схемы:

Электрическая схема

ИК СИГНАЛИЗАЦИЯ - схема принципиальная на МК

ИК СИГНАЛИЗАЦИЯ - список деталей

На схеме вместо: фоторезистора - переменный резистор, ИК датчика - лампа; питание (5 Вольт) микроконтроллера - 7 и 20 ноги - +; 8 и 22 ноги - -. Начнём с механизма фиксации прерывания луча пары лазер - фотодатчик. В цепи делителя R1 - Fotoresistor, основным элементом является фоторезистор, меняющий своё сопротивление в зависимости от уровня освещённости, чем светлее, тем меньше его сопротивление. Провоцирующим устройством - уменьшающим сопротивление - будет луч лазера. В роли ключа использован тиристор, этот полупроводник работает как диод, только когда на его управляющий вывод подано нужное напряжение открывания (по справочному листу - 0.8 Вольт), с нашего делителя. Всё просто при создании барьера между лазером и фоторезистором в виде условной руки, у нас открывается ключ-тиристор, и подключенный последовательно с тиристором RGB светодиод загорается. Каждый участок схемы отлаживался на breadboarde:

ИК СИГНАЛИЗАЦИЯ - отладка

Реле RL2 подключенное параллельно RGB будет имитировать кнопку, то есть подачу логической единички на 13 вход контроллера. Этот механизм необходим для связи сигнализации с микроконтроллером. Реализован следующим образом - контакты питания реле подключены параллельно светодиоду, НР контакты один вывод к плюсу питания, второй через подтягивающий резистор к минусу, с этого вывода и забираем нашу "1" на вход 13 при срабатывании нашей сигнализации. На данном этапе микроконтроллер будет управлять следующими процессами:

  • будет включать светодиод зелёного свечения с 15 вывода и отключать его в случае срабатывания сигнализации, на выводе 17 контроллера подключать BUZZER и проигрывать мелодию сирены.

Отладка номер 2

ИК СИГНАЛИЗАЦИЯ - настройка схемы

Инфракрасный датчик задуман для возможности отключения-включения питания схемы сигнализации. Реле RL1 коммутирует НР контакты, при поступлении сигнала с пульта ДУ на ИК (4 вход Atmeg-и) НР контакты реле (получают усиленный транзистором с 6 вывода сигнал)  замыкаются и "питают" механизм фиксации прерывания луча пары лазер - фотодатчик. Другим сигналом с пульта ДУ разрываем контакты реле - в общем это нужно чтобы включать и отключать сигнализацию дистанционно. 

В устройстве предусмотрена механическая часть - кнопка в случае отказа работы ИК датчика, также с её помощью можно перезагрузить всю сигнализацию.

В схеме присутствует стандартная обвязка прошитого на плате Arduino микроконтроллера Atmega - кварцевый резонатор на 16 мГц и 2 конденсатора на 22 пФ.

Для усиления выходного сигнала на 17 выходе контроллера подключим транзистор и будем регулировать громкость переменным резистором.

Для минимизации своего проекта я зашил бутлоадер Arduino в контроллер Atmeg-и по инструкции описанной в этой статье.

зашил бутлоадер Arduino в контроллер Atmeg

Я просто вытащил родной контроллер из Arduino Uno и вставил с записанным загрузчиком микроконтроллер и зашил свой скетч. Учтите, что выходы  Arduino Uno и микроконтроллера будут отличаться, поэтому придерживайтесь этой схемы:

Arduino UNO схема

Немного о коде

Для связи ИК и контроллера в среде Arduino написана библиотека IREMOTE.H, в ней выбираем скетч DUMP, собираем схему подключения ИК датчика к контроллеру, открываем Serial monitor и нажимая на кнопки пульта считываем код этой самой кнопки.

О мелодии - ну тут всё просто музыкальное сопровождение можно выбрать из 180 композиций, которые находятся в свободном доступе в инете. Весь код далее:

#include <IRremote.h>//это библиотека для связи ИК-датчика с ARDUINO
IRrecv irrecv(2); // указываем вывод, к которому подключен приемник
decode_results results; //это переменная для приёма сигнала 
int freq[7][12] = {
 {65, 69, 73, 78, 82, 87, 92, 98, 104, 110, 117, 123},                     //0 = Большая октава   
 {131, 139, 147, 156, 165, 175, 185, 196, 208, 220, 233, 247},             //1 = Малая октава
 {262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494},             //2 = 1-я октава
 {523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 932, 988},             //3 = 2-я октава
 {1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976}, //4 = 3-я октава
 {2093, 2218, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951}, //5 = 4-я октава
 {4186, 4435, 4699, 4978, 5274, 5588, 5920, 6272, 6645, 7040, 7459, 7902}, //6 = 5-я октава
};
int SoundPin = 11;// выхода на динамик - переменная
void setup() {

irrecv.enableIRIn(); // запускаем прием  
pinMode (SoundPin, OUTPUT);// 17 ножка 328
pinMode (4, OUTPUT);// 6 ножка 328
pinMode (7, INPUT);// 13 ножка 328
pinMode (9, OUTPUT);// 15 ножка 328
}
//ВЕСЬ ПОСЛЕДУЮЩИЙ КОД НЕОБХОДИМ ДЛЯ ВОСПРОИЗВЕДЕНИЯ ВЫБРАННЫХ МЕЛОДИЙ
int extractNumber(int& myNumber, char Muz[], int& curPosition)
{
    int digitsNumber=0;
    int curDigit=0;
    myNumber=0;
    do
    {
        if ((Muz[curPosition]> 47) && (Muz[curPosition]<58)) // Коды ASCII цифр '0' == 48 , "9' == 57
        { 
            curDigit=Muz[curPosition]-48;
            digitsNumber++;
            myNumber=myNumber*10+curDigit;
        }
        else
        {
        return digitsNumber;
        }     
        curPosition++;
    }while(Muz[curPosition]!= '\0');
    return digitsNumber;
}

int pointsCount(char Muz[], int& curPosition)
{
    int pointsNumber=0;
    do
    {
        if (Muz[curPosition]== '.')
        { 
            pointsNumber++;
        }
        else
        {
        return pointsNumber;
        }     
        curPosition++;
    }while(Muz[curPosition]!= '\0');
    return pointsNumber;
}

void Qb_PLAY(char Muz[])
{
  static int generalOktava;   
  int oktava;   
  static int tempo=120; // Задание темпа или четвертных нот, которые исполняются в минуту. n от 32 до 255. По умолчанию 120
  int Nota=0; 
  int  curPosition, curNota4;
  unsigned long currentNotaPauseDuration;
  unsigned long currentNotaDuration; 
  unsigned long  pauseDuration; 
  int takt=240000/tempo; 
  bool isNota; 
  bool isPause; 
  int pointsNum=0;
  float generalNotaMultipl=0.875;
  static float NotaLong;
  float curMultipl;
  float tempFlo;
  float curPause;
  unsigned long tempLong;
  int i=0;
  do 
  {
   isNota=false; 
   isPause=false; 
   oktava=generalOktava;
   switch(Muz[i]){
         case '\0':{
             return; 
             }
             break;
         case 'C':{
             Nota=0;
             isNota=true; 
             }
             break;
         case 'D':{
             Nota=2;
             isNota=true; 
             }
             break;
         case 'E':{
             Nota=4;
             isNota=true;      
             }
             break;
         case 'F':{
             Nota=5;
             isNota=true;     
             }
             break;
         case 'G':{
             Nota=7;
             isNota=true;         
             }
             break;
         case 'A':{
             Nota=9;
             isNota=true;
             }
             break;
         case 'B':{
             Nota=11;
             isNota=true; 
             }
             break;   
         case 'N':{// Nнота    Играет определенную ноту (0 - 84) в диапазоне семи октав (0 - пауза).     
                 curPosition=i+1;
                 if (extractNumber(curNota4, Muz, curPosition)){
                     i=curPosition-1;
                     if (curNota4){
                         curNota4--;          
                         oktava=curNota4 / 12;                
                         Nota=curNota4 % 12;
                         isNota=true; 
                     }        
                     else{
                         isPause=true;
                     }
                 }                
             }
             break;   
         case 'O':{ //Oоктава    Задает текущую октаву (0 - 6). 
             curPosition=i+1;
             if (extractNumber(oktava, Muz, curPosition)){
                 i=curPosition-1;
                 generalOktava=oktava; 
                 }
             }
             break;          
         case '>':{
             generalOktava++;
             }
             break;  
         case '<':{
             generalOktava--;
             }
             break;
         case 'M':{   
              switch(Muz[i+1]){
                 case 'N':{ //MN    Нормаль. Каждая нота звучит 7/8 времени, заданного в команде L
                     generalNotaMultipl=0.875; //  =7/8
                     i++;
                     }
                     break;
                 case 'L':{ //ML    Легато. Каждая нота звучит полный интервал времени, заданного в команде L
                     generalNotaMultipl=1.0;
                     i++;
                     }
                     break;                 
                 case 'S':{ //MS    Стаккато. Каждая нота звучит 3/4 времени, заданного в команде L
                     generalNotaMultipl=0.75;  // =3/4
                     i++;
                     }
                     break;                 
                 case 'F':{ //MF Режим непосредственного исполнения. Т.е. на время проигрывания ноты программа приостанавливается. Используется по умолчанию
                     i++;   //Сдвигаем точку чтения и ничего не делаем.
                     }
                     break;   

                 case 'B':{ //MB проигрывние в буффер
                     i++;   //Сдвигаем точку чтения и ничего не делаем.
                     }
                     break;   
               }
             }
             break;             
         case 'L':{ //Lразмер    Задает длительность каждой ноты (1 - 64). L1 - целая нота, L2 - 1/2 ноты и т.д.    
             curPosition=i+1;
             if (extractNumber(curNota4, Muz, curPosition)){
                 i=curPosition-1;
                 tempFlo=float(curNota4);
                 NotaLong=1/tempFlo;
                 }             
             }
             break;
         case 'T':{ //Tтемп    Задает темп исполнения в четвертях в минуту (32-255).По умолчанию 120
             curPosition=i+1;
             if (extractNumber(tempo, Muz, curPosition)){
                i=curPosition-1;
                takt=240000/tempo; // миллисекунд на 1 целую ноту. 240000= 60 сек * 1000 мсек/сек *4 четвертей в ноте
                }             
             }
             break;
         case 'P':{ //Pпауза    Задает паузу (1 - 64). P1 - пауза в целую ноту, P2 - пауза в 1/2 ноты и т.д.
             curPosition=i+1;
             if (extractNumber(curNota4, Muz, curPosition)){
                 tempFlo=float(curNota4);
                 curPause=1/tempFlo;
                 i=curPosition-1;
                 isPause=true;
                 }
             }
             break;              
         case ' ':{ //Есть в некоторых текстах. Вероятно это пауза длительностью в текущую ноту
             curPause= NotaLong;
             isPause=true;
             }
             break;  
    }          
    if (isNota){
      switch(Muz[i+1]){
         case '#':{ // диез
             Nota++;
             i++;
             }
             break;
         case '+':{ // диез
             Nota++;
             i++;
             }
             break;                 
         case '-':{ // бемоль
           Nota--;
           i++;
          }
          break;   
       }
       curPosition=i+1;
       if (extractNumber(curNota4, Muz, curPosition)){
         currentNotaDuration=takt/curNota4;
         i=curPosition-1;
         }
     }
     if (oktava<0) oktava=0; 
     if (oktava>6) oktava=6; 
     if (isNota || isPause){ 
       curPosition=i+1;
       pointsNum=pointsCount(Muz, curPosition);  
       if (pointsNum) i=curPosition-1;   
       curMultipl=1.0;                
       for (int j=1; j<=pointsNum; j++) {
          curMultipl= curMultipl * 1.5;
       }   
       currentNotaPauseDuration=(takt*NotaLong);
     } 
     if (isNota){
        curMultipl=curMultipl*generalNotaMultipl;
        currentNotaDuration= (currentNotaPauseDuration*curMultipl); 
        if (Nota<0) Nota=0; 
        if (Nota>11) Nota=11; 
        tempLong= freq[oktava][Nota];
        tone(SoundPin,tempLong,currentNotaDuration);     
        delay(currentNotaPauseDuration);
     } 
     if (isPause){
         pauseDuration=takt*curPause*curMultipl;
         delay(pauseDuration);     
     } 
    i++;          
  } while (Muz[i]!= '\0');   
}

void loop() {
  digitalWrite(9,HIGH);// делаем активным зелённый светодиод
    if ( irrecv.decode( &results )) { // если данные с пульта ДУ пришли
    switch ( results.value ) {
    case 0xFF02FD:// это то что мы считали с пульта ДУ
    digitalWrite(4, HIGH); //подключаем реле 
    break;
    case 0xFF827D:// это то что мы считали с пульта ДУ
    digitalWrite(4, LOW); // разрываем реле  
    break;
    }    
    irrecv.resume(); // принимаем следующую команду
  }
  
  while(digitalRead(7) == HIGH)// если на 13 ножке, действительно логическая единичка, то выполнить условие 
{
   digitalWrite(9,LOW);//отключить зелёный светодиод
  digitalWrite(SoundPin,HIGH);// подключаем динамик и проигрываем мелодию
Qb_PLAY ( "MNT150L8O2F+P8A.L16F+F+F+L8BF+EF+P8>C+L16<F+F+F+L8>DC+");
Qb_PLAY ( "<AF+>C+F+L16<F+EEEL8C+G+F+L4F+P2L8F+P8A.L16F+F+F+L8BF+");
Qb_PLAY ("EF+P8>C+L16<F+F+F+L8>DC+<AF+>C+F+L16<F+EEEL8C+G+F+L4F+");
Qb_PLAY ( "P2L8<F+P8>F+.L16<EE>EL8<C+>C+<EF+P8>F+P8P16L16<C+L8>C+");
Qb_PLAY ( "EF+<DP8>D.L16<EE>EL8<C+EF+L4>F+P4P16L16EL8<C+BAF+P8>F+.");
Qb_PLAY ( "L16<EE>EL8<C+>C+<EF+P8>F+P8P16L16<C+L8>C+EF+<DP8>D.L16<E");
Qb_PLAY ( "E>EL8<C+EF+L4>F+P4P16L16EL8<C+BAF+P8A.L16F+F+F+L8BF+E");
Qb_PLAY ( "F+P8O3C+L16<F+F+F+L8>DC+<AF+>C+F+L16<F+EEEL8C+G+F+L4F+");
Qb_PLAY ( "P2L8F+P8A.L16F+F+F+L8BF+EF+P8>C+L16<F+F+F+L8>DC+<AF+>C+");
Qb_PLAY ( "F+L16<F+EEEL8C+G+F+L4F+P2P8L8>C+C+L16C+EP16L8EL16EL8D+");
Qb_PLAY ( "D+D+C+C+L16C+EP16EL8DC+<AP8AAAL16AL8BL16BP16L8BL16BL8B");
Qb_PLAY ( ">C+C+C+L16<BL8>C+L16C+P16L8C+P8P8C+C+L16C+EP16L8EL16E");
Qb_PLAY ( "L8D+D+D+C+C+L16C+EP16EL8DC+<AP8AAAL16AL8BL16BP16L8BL16B");
Qb_PLAY ( "L8B>C+C+C+L16<BL8>C+L16C+P16L8C+P8O1F+P8>F+.L16<EE>EL8<C+");
Qb_PLAY ( ">C+<EF+P8>F+P8P16L16<C+L8>C+EF+<DP8>D.L16<EE>EL8<C+EF+");
Qb_PLAY ( "L4>F+P4P16L16EL8<C+BAF+P8>F+.L16<EE>EL8<C+>C+<EF+P8>F+");
Qb_PLAY ( "P8P16L16<C+L8>C+EF+<DP8>D.L16<EE>EL8<C+EF+L4>F+P4P16L16E");
Qb_PLAY ( "L8<C+BAF+P8A.L16F+F+F+L8BF+EF+P8O3C+L16<F+F+F+L8>DC+<A");
Qb_PLAY ( "F+>C+F+L16<F+EEEL8C+G+F+L4F+P2P4L8F+P8A.L16F+F+F+L8BF+");
Qb_PLAY ( "EF+P8>C+L16<F+F+F+L8>DC+<AF+>C+F+L16<F+EEEL8C+G+F+L4F+");
Qb_PLAY ( "P2P4L8A.L16EL8EAL16AL8E.AEA.L16EL8EAL16AL8E.AEA.L16EL8E");
Qb_PLAY ( "AL16AL8E.AEL16>ED<BAAL8BL16>DL8ED<BAL16>ED<BAAL8BL16>D");
Qb_PLAY ( "L8ED<BAL16>ED<BAAL8BL16>DL8ED<BAL16>ED<BAAL8BL16>DL8E");
Qb_PLAY ( "D<BAP8>C+C+L16C+EP16L8EL16EL8D+D+D+C+C+L16C+EP16EL8DC+");
Qb_PLAY ( "<AP8AAAL16AL8BL16BP16L8BL16BL8B>C+C+C+L16<BL8>C+L16C+");
Qb_PLAY ( "P16L8C+P8P8C+C+L16C+EP16L8EL16EL8D+D+D+C+C+L16C+EP16E");
Qb_PLAY ( "L8DC+<AP8AAAL16AL8BL16BP16L8BL16BL8B>C+C+C+L16<BL8>C+");
Qb_PLAY ( "L16C+P16L8C+P8AAAL16AL8BL16BP16L8BL16BL8BC+C+C+L16<BL8>C+");
Qb_PLAY ( "L16C+P16L8C+P8F+P8A.L16F+F+F+L8BF+EF+P8C+L16<F+F+F+L8>D");
Qb_PLAY ( "C+<AF+>C+F+L16<F+EEEL8C+G+F+L4F+P2P4"  );

}
}

Печатная плата:

ИК СИГНАЛИЗАЦИЯ - печатная плата

Далее монтажные работы, и наконец-то финальная пуско-наладка:

ИК СИГНАЛИЗАЦИЯ самодельная

Дальше больше сделал такие наличники:

ИК СИГНАЛИЗАЦИЯ - наличники

И собрал схему под названием "Угол падения - равен углу отражения" - настройка была долгой но всё прошло на УРА!

Своими руками ИК СИГНАЛИЗАЦИЯ ОХРАННАЯ

Всё действо можно лицезреть на видеоролике - будет интересно:

Видео

Спасибо за внимание - с уважением ко всем таким же начинающим радиолюбителям как и я, да и просто заблудшим душам. С вами был Тольяттинский Эмбеддер (1945).

   Форум по охранным устройствам

   Обсудить статью ИК СИГНАЛИЗАЦИЯ


Схемы наши, лайки ваши - всё по честному :)


ОХРАННАЯ СИГНАЛИЗАЦИЯ С МОБИЛЬНЫМ ТЕЛЕФОНОМ

     Предлагаю схему проверенной сигнализации, с выходом на мобильный телефон.

ФОНАРИ НА СВЕТОДИОДАХ

ФОНАРИ НА СВЕТОДИОДАХ     Простейшая но эффективная переделка обычного фонаря с лампочкой накаливания на светодиод.

КИТАЙСКОЕ ПРОИЗВОДСТВО

КИТАЙСКОЕ ПРОИЗВОДСТВО     Уникальная возможность посетить китайское производство и узнать многие технологические секреты.

СВЕТОДИОДНЫЕ ТОЧЕЧНЫЕ СВЕТИЛЬНИКИ

СВЕТОДИОДНЫЕ ТОЧЕЧНЫЕ СВЕТИЛЬНИКИ     Информационный материал про светодиодные точечные светильники. Характеристики и область применения.


» ПОИСК СХЕМ


» РАДИОЭЛЕМЕНТЫ


Группа вконтакте Канал ютуб Группа в фэйсбук Мобильная версия © 2010-2016, "Радиосхемы". Все права защищены. Почта