Много-много лет назад делал я простенький лазерный тир с raspberry и камерой.

Технологии с тех пор сильно шагнули вперёд, и захотелось сделать новую, максимально дешёвую версию. В качестве основы взял ESP32 с камерой OV2640 — стоит около 5 евро на AliExpress. Серьёзно переживал за производительность, но её у этого малыша оказалось более чем достаточно. В нём два ядра: одно полностью отдано под обработку изображения, второе — под веб-сервер.

Идея следующая: 60 раз в секунду делаем снимок и ищем на нём пятно от лазера. Параллельно крутится веб-страничка, где на canvas рисуются мишень, попадания и очки. Поскольку полноценный OpenCV на ESP32 не запустить, всё сделано максимально просто. Камера выдаёт чёрно-белые JPEG-кадры, которые я распаковываю в пиксели и ищу те, что превышают порог яркости. Да, камера умеет работать и с RAW-форматами, но там есть нюанс — частота кадров в таком режиме ограничена примерно 15 FPS. А вот распаковывать JPEG «на лету» для ESP32 оказалось посильной задачей, и благодаря этому удалось выжать почти 60 FPS при разрешении 240×240. Для надёжности детектирования у камеры дополнительно задаётся смещение экспозиции.

Но просто найти пятно на картинке недостаточно — нужно сопоставить его с координатами мишени. И вместо того чтобы нагружать микроконтроллер сложной математикой, это можно переложить на пользователя. Поэтому предусмотрена разовая ручная калибровка: на отдельной странице в браузере нужно выбрать четыре маркера на изображении по часовой стрелке. По ним строится матрица обратного перспективного преобразования. Благодаря этому камера может смотреть на мишень под любым углом — математика всё компенсирует.

Но меньше слов, больше действа: https://youtu.be/UJaGSOkALsU

Исходники доступны на github

Комментарии (6)


  1. Viktor-T
    03.01.2026 19:19

    Здорово получилось!

    Пекаш самодельный из указки? А откуда звуки выстрела?


    1. DIMOSUS Автор
      03.01.2026 19:19

      Спасибо) Сделал из страйкбольного. Звук из планшета - веб страничка воспроизводит, когда узнает про новое попадание.


      1. Spalexy
        03.01.2026 19:19

        Круто! Не задумывались о добавлении вибромоторчика для "отдачи"?


        1. DIMOSUS Автор
          03.01.2026 19:19

          При желании можно, да и не сложно.


  1. Heavenanvil
    03.01.2026 19:19

    Сразу вспомнилось это видео:
    https://www.youtube.com/watch?v=OhyvKTrgzp4


  1. 413x
    03.01.2026 19:19

    Есть еще интересный вариант по теме: переделка светового пистолета денди под эмулятор ПК Fceux. В таком варианте можно любой квадрат показывать на какое-то время в области и отлавливать смену состояния кнопки джойстика и если вторая кнопка курка нажата, то регистрировать выстрел.