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

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


» РАДИОБЛОГИ
Цветомузыка на микросхеме индикаторе уровня
Генератор импульсов на микросхеме К174ХА11
Реставрация лабораторного БП
Зарубежные схемы FM трансмиттеров
Почему светодиоды надо питать током?
Последнее интервью Никола Теслы
Керамические конденсаторы К10-83
Использование старых спутниковых тюнеров
Шуруповёрт: вторая жизнь
Генератор импульсов с независимой регулировкой длительности и скважности

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

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

      

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

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

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

Направляем луч лазера на фоторезистор - на расстояние предполагаемой охраняемой зоны, подключаем питание - загорает зелёный светодиод, нажимаем на пульте ДУ красную кнопку или чёрную механическую - устройство в режиме срабатывания сигнализации, при прерывании хода луча лазера - неважно чем условно "рукой" загорает 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, "Радиосхемы". Все права защищены. Почта