Фотоинтерруптор KY-010

Узнайте всё о фотоинтеррупторе KY-010: спецификации, распиновка, схемы подключения, документация и примеры кода для ESP32, Arduino, Raspberry

Оптические датчики Digital

Обзор

KY-010 — это фотоинтерруптор (оптический датчик прохождения), который обнаруживает объекты, прерывая инфракрасный луч. Идеально подходит для задач, требующих бесконтактного обнаружения объектов, таких как подсчёт или измерение скорости.

KY-010 — цифровой фотоинтерруптор с инфракрасным излучением и приёмником. Он обнаруживает присутствие объекта в слоте путём прерывания луча. Выходной сигнал меняет состояние при обнаружении. Работает от 3.3В до 5В, что делает его совместимым с Arduino, ESP32 и другими микроконтроллерами. Применяется для подсчёта объектов, определения краёв и измерения скорости вращения.

Фотоинтерруптор KY-010
Быстрая навигация
Основные разделы статьи
Примеры кода
Популярные платформы

О фотоинтеррупоре KY-010

Фотоинтерруптор KY-010 — это цифровой модуль, который обнаруживает прохождение объекта через оптический слот. В его основе — инфракрасный светодиод и фотоприёмник, направленные друг на друга. Когда объект проходит между ними, луч прерывается, и выходной сигнал меняет состояние. Модуль работает от 3.3В до 5В, что обеспечивает совместимость с большинством микроконтроллеров, включая Arduino и ESP32. Типичные применения: подсчёт объектов на конвейере, определение краёв и измерение скорости вращения.

Где купить

Приобретите KY-010

Технические характеристики

Характеристики KY-010

Полные технические характеристики фотоинтеррупора KY-010.

Интерфейс
Digital
Ширина слота
5 мм
Диапазон питания
3.3V - 5V
Размеры
19 mm x 15 mm
Скачать полный даташит
Конфигурация пинов

Распиновка KY-010

Распиновка KY-010 включает три вывода: ** Ground** (земля), VCC (питание) и S (цифровой выход).

Визуальная диаграмма распиновки
Основное
Распиновка KY-010
Всего выводов
3
Типы
Питание + Digital
Быстрые советы
  • Выход — цифровой (HIGH/LOW при прерывании луча).
  • Питание — совместим с 3.3В и 5В.
  • Подтяжка — внутренний подтягивающий резистор включается программно.
Описание выводов
Название Тип Описание Примечания
1 - Питание земля (GND) Общая земля
2 + Питание Питание (3.3V или 5V) Универсальное напряжение
3 S Digital Цифровой выход Меняет состояние при прерывании луча
Руководство по подключению

Подключение KY-010 к ESP32

Подключите KY-010 к ESP32, используя цифровой GPIO пин. Датчик работает от 3.3В, что делает его полностью совместимым с ESP32.

Схема подключения
Рекомендуемая (цифровой вход)
Подключение KY-010 к ESP32
Подключений
3
Статус
Все обязательны
Протокол
Digital
Подключения пинов
Вывод KY-010 Подключение Вывод ESP32 Описание
- обязательно GND Общая земля
+ обязательно 3.3V Питание (3.3V или 5V)
S обязательно GPIO15 Цифровой вход (любой GPIO)
📍 Выход: Digital (HIGH/LOW) ⚡ Питание: 3.3V или 5V 📏 Ширина слота: 5 мм 🎯 Прерывание ИК-луча 🔌 Подтяжка: внутренняя (программная)
Помощь и поддержка

Устранение неполадок KY-010

Распространённые проблемы и решения, которые помогут запустить фотоинтерруптор.

Датчик не реагирует на объекты
Нет изменения сигнала при прохождении объекта

Проблема: выход датчика не меняет состояние при прохождении объекта через слот.

Возможные причины: неправильное питание, оставшаяся защитная плёнка на датчике, объект неподходящего размера или цвета (слишком прозрачный).

Решение: проверьте подключение питания (3.3V или 5V), убедитесь что слот чистый, объект непрозрачный и достаточно крупный для полного перекрытия луча. Проверьте логику в коде: pinMode(sensorPin, INPUT_PULLUP).

Случайные срабатывания без объекта
Ложные триггеры из-за помех

Проблема: датчик периодически меняет выход без прохождения объекта.

Возможные причины: внешний инфракрасный шум (солнечный свет, пульты), неустойчивое питание, слишком высокая частота опроса.

Решение: экранируйте датчик от внешнего ИК-излучения (например, обмотайте чёрной изолентой), стабилизируйте питание, добавьте задержку в опросе или используйте аппаратную подтяжку 10kΩ вместо программной.

Неправильная логика (инвертированный сигнал)
Сигнал всегда HIGH, а должен меняться

Причины: KY-010 использует NPN-транзистор, который замыкает выход на GND при обнаружении. При включённом внутреннем подтягивающем резисторе (INPUT_PULLUP) выход будет HIGH в нормальном состоянии и LOW при срабатывании.

Решение: если вы ожидаете HIGH при срабатывании, инвертируйте логику в коде: `if (sensorValue == LOW) { /* объект обнаружен */ }`. Проверьте настройку пина: `pinMode(sensorPin, INPUT_PULLUP)`.

Обнаруживает только очень близкие объекты
Оптимальная работа на небольшом расстоянии

Причина: фотоинтерруптор рассчитан на прохождение объекта непосредственно через узкий слот (5 мм), а не на обнаружение на расстоянии.

Решение: размещайте объект так, чтобы он физически проходил через паз между ИК-излучателем и приёмником. Для дальнего обнаружения используйте другие типы сенсоров (ультразвуковые, ИК-датчики расстояния).

Советы по отладке

Serial монитор
Проверка логики
Подключите Serial Monitor и выводите значение digitalRead(sensorPin). При свободном луче вы should увидеть HIGH (1), при прерывании — LOW (0). Это поможет убедиться в правильности работы датчика и логики кода.
Проверка напряжений
Мультиметр и целостность проводов
Измерьте напряжение на выводах модуля: между + и - должно быть 3.3V или 5V. Проверьте целостность проводников. Убедитесь в надёжности всех соединений.

Дополнительные ресурсы

Примеры кода

Примеры программирования KY-010

Готовые к использованию примеры кода для различных платформ и фреймворков

Пример для Arduino

Совместим с Arduino IDE и платами ESP32

C++
// KY-010 Photo Interrupter — Arduino пример
// Датчик подключён к пину 10, LED — к пину 13

const int sensorPin = 10;   // пин сигнала датчика
const int ledPin = 13;      // пин светодиода
int sensorValue = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(sensorPin, INPUT);
  digitalWrite(sensorPin, HIGH); // внутренний подтягивающий резистор
  Serial.begin(9600);
}

void loop() {
  sensorValue = digitalRead(sensorPin);
  if (sensorValue == HIGH) {
    digitalWrite(ledPin, HIGH); // включить LED
    Serial.println("Объект обнаружен");
  } else {
    digitalWrite(ledPin, LOW);  // выключить LED
  }
  delay(100);
}

Этот скетч Arduino подключает фотоинтерруптор KY-010 к цифровому пину 10 и LED — к пину 13. Внутренний подтягивающий резистор включается для пина датчика. Когда объект прерывает инфракрасный луч, LED загорается, а в Serial Monitor выводится сообщение «Объект обнаружен».

⚠️ Важно: KY-010 использует NPN-транзистор, поэтому выход LOW означает обнаружение, а HIGH — свободный луч при включённом подтягивающем резисторе.

Пример для ESP-IDF

Официальный фреймворк Espressif для разработки IoT

C++
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"

#define SENSOR_PIN GPIO_NUM_15
#define LED_PIN GPIO_NUM_2

void app_main(void) {
    // Настройка пина датчика как вход с подтяжкой
    gpio_config_t sensor_io_conf = {
        .pin_bit_mask = (1ULL << SENSOR_PIN),
        .mode = GPIO_MODE_INPUT,
        .pull_up_en = GPIO_PULLUP_ENABLE,
        .pull_down_en = GPIO_PULLDOWN_DISABLE,
        .intr_type = GPIO_INTR_DISABLE
    };
    gpio_config(&sensor_io_conf);

    // Настройка пина LED как выход
    gpio_config_t led_io_conf = {
        .pin_bit_mask = (1ULL << LED_PIN),
        .mode = GPIO_MODE_OUTPUT,
        .pull_up_en = GPIO_PULLUP_DISABLE,
        .pull_down_en = GPIO_PULLDOWN_DISABLE,
        .intr_type = GPIO_INTR_DISABLE
    };
    gpio_config(&led_io_conf);

    printf("Тест KY-010 Photo Interrupter\n");
    while (1) {
        int sensor_value = gpio_get_level(SENSOR_PIN);
        if (sensor_value == 1) {
            gpio_set_level(LED_PIN, 1); // включить LED
            printf("Объект обнаружен\n");
        } else {
            gpio_set_level(LED_PIN, 0); // выключить LED
        }
        vTaskDelay(pdMS_TO_TICKS(100));
    }
}

Этот ESP-IDF пример настраивает GPIO15 как вход с внутренней подтяжкой для KY-010 и GPIO2 как выход для LED. При свободном луче вход получает HIGH (из-за подтяжки), при прерывании — LOW. В зависимости от состояния включается LED и выводится сообщение.

Пример для ESPHome

Конфигурация ESPHome для Home Assistant

YAML
# Конфигурация ESPHome для KY-010
binary_sensor:
  - platform: gpio
    pin:
      number: GPIO15
      mode: INPUT_PULLUP
    name: "KY-010 Photo Interrupter"
    filters:
      - delayed_on: 10ms
      - delayed_off: 10ms
    on_press:
      - then:
          - lambda: 'ESP_LOGD("sensor", "Объект обнаружен");'

Эта конфигурация создаёт бинарный сенсор на GPIO15 с внутренней подтяжкой. Фильтры delayed_on/off добавляют debounce 10 мс. При обнаружении объекта (переход LOW→HIGH с учётом подтяжки) в лог выводится сообщение.

Пример для PlatformIO

Профессиональная среда разработки

C++

platformio.ini

[env:esp32]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200

src/main.cpp

#define SENSOR_PIN 15
#define LED_PIN 2

void setup() {
  pinMode(SENSOR_PIN, INPUT_PULLUP); // подтяжка к VCC
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(115200);
  Serial.println("Тест KY-010 Photo Interrupter");
}

void loop() {
  // KY-010: LOW = объект в слоте, HIGH = луч свободен
  if (digitalRead(SENSOR_PIN) == LOW) {
    Serial.println("Объект обнаружен");
    digitalWrite(LED_PIN, HIGH);
  } else {
    digitalWrite(LED_PIN, LOW);
  }
  delay(100);
}

PlatformIO проект для ESP32 на Arduino фреймворке. Пин датчика настраивается с внутренней подтяжкой (INPUT_PULLUP). Логика та же: при LOW на пине (луч прерван) LED включается и выводится сообщение.

Пример для MicroPython

Python для микроконтроллеров

Python
import machine
import time

SENSOR_PIN = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_UP)
LED_PIN = machine.Pin(2, machine.Pin.OUT)

while True:
    if SENSOR_PIN.value() == 0:  # LOW = объект обнаружен
        print("Объект обнаружен")
        LED_PIN.on()
    else:
        LED_PIN.off()
    time.sleep(0.1)

MicroPython скрипт для ESP32. Пин 15 настраивается как цифровой вход с внутренней подтяжкой (PULL_UP). При значении 0 (LOW) — луч прерван, LED на пине 2 включается и выводится сообщение. При HIGH — LED выключен.

Итоги KY-010

Фотоинтерруптор **KY-010** для ESP32 — это надёжный и простой цифровой модуль для бесконтактного обнаружения объектов. Он совместим с Arduino, ESP-IDF, ESPHome, PlatformIO и MicroPython, что делает его универсальным выбором для проектов с микроконтроллерами.

Рекомендации

Для стабильной работы используйте стабильное питание 3.3V или 5V, размещайте датчик вдали от ярких источников ИК-излучения, обеспечивайте точное прохождение объекта через оптический слот. При необходимости настройте debounce в коде (задержку или аппаратную RC-фильтрацию).

Безопасность прежде всего

Перед подключением проверьте совместимость напряжения (3.3V для ESP32, 5V для Arduino). Не превышайте максимальное напряжение питания. Избегайте коротких замыканий в проводках, особенно при питании 5V.

Готовы начать создавать?

Теперь, когда у вас есть вся необходимая информация, пора интегрировать KY-010 в проект на ESP32 и воплотить идеи в жизнь!