====== Инфракрасный датчик контроля KB874 ======
===== Описание =====
Создаете беспроводную сигнализацию или просто хотите знать сколько человек за день проходит через определенную дверь? Воспользуйтесь инфракрасным датчиком контроля.

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

Комплект состоит из передатчика и приёмника. Передатчик постоянно излучает инфракрасный сигнал с длиной волны 850 нм, а приемник, устанавливаемый напротив передатчика принимает его и выдает на выходе логическую 1. В обычном состоянии сигнал от передатчика к приемнику поступает непрерывно. Как только происходит прерывание сигнала (кто-то или что-то пересекли невидимый луч) - контроллер выдает логический 0. Подсчет количества прерываний за определенный промежуток времени позволит сделать выводы о том, сколько человек прошло в помещение.

Передатчик и приемник снабжены удобными отверстиями для крепления диаметром 3,2 мм.

Для работы передатчика достаточно обеспечить постоянную подачу тока. Это можно сделать как от независимого источника тока, так и от контроллера. Передатчик подключается с помощью двух проводов:
  * **красный** (питание) - соединяется с выводом питания ("+") источника тока или с выводом 5 V контроллера; также допускается подключение вывода к цифровому пину контроллера, установленного в режим OUT с установкой на выводе логической 1;
  * **черный** ("земля") - соединяется с выводом "-" источника тока или выводом GND контроллера.

Приемник подключается к контроллеру с помощью трех проводов:
  * **белый** (сигнал) - соединяется с цифровым выводом контроллера;
  * **красный** (питание) - соединяется с выводом питания контроллера 5 V;
  * **черный** ("земля") - соединяется с выводом GND контроллера.

==== Технические характеристики ====
  * Напряжение питания: 5 В
  * Максимальный потребляемый ток: 20 мА
  * Эффективное рабочее расстояние: до 1 м
  * Максимальный эффективный угол приемника: 10°
  * Время отклика: 2 мс
  * Длина волны передатчика: 850 нм
  * Рабочая температура: от -25 до +60 °С
  * Длина проводов: 30 см

==== Физические размеры ====
  * Габаритные размеры приемника (Д х Ш х В) : 18 х 11 х 7 мм
  * Габаритные размеры передатчика (Д х Ш х В) : 18 х 11 х 7 мм

===== Примеры подключения и использования =====
==== Вывод значений на экран ====
**Задача:** Подсчёт количества пересечений датчика (например, посетителей магазина) и вывод значения в монитор Serial-порта.

^ Что нужно                                                                                                               ^  Кол-во, шт  ^
| [[https://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                  |  1           |
| [[https://smartelements.ru/collection/shildy/product/sensor-shield|Sensor Shield]]                      |  1           |
| [[https://smartelements.ru/collection/datchiki-i-sensory/product/optopara-kb874|Инфракрасный датчик контроля KB874]]                      |  1           |
| [[https://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]] |  5           |


**Схема подключения:**
{{ :главная:датчики:kb874_оптопара_н.png?nolink |}}

**Скетч для загрузки:**
<file Arduino>
const int OP = 11;            //вывод подключения белого провода приёмника

int quant = 0;                //счётчик для подсчёта количества посетителей
boolean lastState = LOW;      //последнее состояние оптопары

void setup() {
  pinMode(OP, INPUT);         //установка режима вывода
  Serial.begin(9600);         //инициализация монитора порта
}

void loop() {
  boolean curState = digitalRead(OP); //текущее состояние оптопары
  
  if (curState == HIGH && lastState == LOW) { //если датчик сработал
    quant++; //увеличить количество посетителей
    Serial.print("Customers: "); //вывести надпись на дисплей
    Serial.println(quant); //вывести значение на дисплей
  }  
  
  delay(50); //добавление небольшой задержки
  lastState = curState; //запомнить последнее состояние оптопары
}
</file>

==== Вывод значений на дисплей ====
**Задача:** Подсчёт количества пересечений датчика (например, посетителей магазина) и вывод значения на четырёхзначный индикатор. При каждом срабатывании датчика будет воспроизводиться звуковой сигнал.

^ Что нужно                                                                                                               ^  Кол-во, шт  ^
| [[https://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                  |  1           |
| [[https://smartelements.ru/collection/shildy/product/sensor-shield|Sensor Shield]]                      |  1           |
| [[https://smartelements.ru/collection/datchiki-i-sensory/product/optopara-kb874|Инфракрасный датчик контроля KB874]]   |  1           |
| [[https://smartelements.ru/collection/displei-i-indikatory/product/modul-4-razryadnogo-indikatora-krasnyy|Модуль 4-разрядного индикатора]]                      |  1           |
| [[https://smartelements.ru/collection/moduli/product/modul-zummera-2|Модуль зуммера]]                      |  1           |
| [[https://smartelements.ru/collection/provoda-i-kabeli/product/shleyf-mama-mama-h3-20-sm|Шлейф "мама-мама" х3]]       |  1           |
| [[https://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]] |  9           |


**Схема подключения:**
{{ :главная:датчики:kb874_оптопара_пример_2_н.png?nolink |}}

**Скетч для загрузки:**
<file Arduino>
#include "SevenSegmentTM1637.h" //подключение библиотеки для работы с дисплеем

const byte PIN_CLK = 4;       //вывод контакта CLK дисплея
const byte PIN_DIO = 5;       //вывод контакта DIO дисплея
const int OP = 11;            //вывод подключения белого провода приёмника
const int BUZ = 3;            //вывод подключения модуля зуммера 

SevenSegmentTM1637    display(PIN_CLK, PIN_DIO); //создание объекта дисплея
int quant = 0;                //счётчик для подсчёта количества посетителей
boolean lastState = LOW;      //последнее состояние оптопары

void setup() {
  pinMode(OP, INPUT);         //установка режима вывода
  pinMode(BUZ, OUTPUT);       //установка режима вывода

  display.begin();            //инициализация дисплея
  display.setBacklight(100);  //установка яркости в 100%
  display.print("INIT");      //отображение надписи INIT (инициализация) на дисплее
  delay(1000);                //задержка в 1 секунду
  display.clear();            //очистка дисплея
}

void loop() {
  boolean curState = digitalRead(OP); //текущее состояние оптопары
  if (curState == HIGH && lastState == LOW) { //если датчик сработал
    quant++; //увеличить количество посетителей
    display.print(quant); //вывести значение на дисплей
    tone(BUZ, 294, 300); //подать звук
  }  
  delay(50); //добавление небольшой задержки
  lastState = curState; //запомнить последнее состояние оптопары
}
</file>