Одноплатный компьютер из камеры видеонаблюдения. Создаём WiFi-мобиль. Часть I |
||
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2023-11-30 13:09 Я уже рассказывал про то, как из телевизионной приставки можно сделать одноплатный компьютер (SBC — single board computer). Если же у вас завалялась ненужная или разбитая камера видеонаблюдения, не спешите её выбрасывать. Я покажу, как её можно использовать, даже если на ней не работают какие-либо функции вроде звука, изображения и т. п. Сегодня нас камера интересует только как SBC. Расскажу, как найти куда подпаять нагрузку, какую нагрузку можно подключить к камере и какими способами можно ею управлять. Средняя камера видеонаблюдения — это ARM-система на процессоре 500-900Mhz с памятью 64-256Mb. Это гораздо серьёзнее, чем общепринятые контроллеры AVR Atmega и даже ARM STM32 с частотами в пределах нескольких сотен мегагерц. Такие ресурсы можно найти на плодово-ягодных одноплатниках вроде Raspberry, Orange, Banana. Но там и цена! Покопавшись в коробочке, я для примера выбрал плату камеры. У этой камеры сгорела светочувствительная матрица. Но внутри остался ![]() Ну, хватит лирики, давайте к деталям. Подопытный образец — это плата 50H10L. Как выглядел корпус именно этой камеры, уже никто никогда не узнает, но почти на такой же плате десятилетие назад собирали камеры Escam QD300. ![]() ? Железо подопытной камеры На плате имеется процессор Hisilicon 3518EV200, под который я подобрал правильную прошивку OpenIPC. Использование OpenIPC нам нужно для управления GPIO через sysfs. В заводской прошивке обычно такой возможности нет. Кроме того, в этой ОС есть огромное количество полезных инструментов, и в отличие от прошивок производителей камер не создаются искусственные препятствия для доступа ко всем компонентам. На заводской прошивке придётся повозиться, чтобы включить telnet или SSH-доступ, найти пароль доступа и потом надеяться, что в системе доступны команды вроде mount.nfs и т. п. Очень удобно, что вся файловая система в OpenIPC доступна для записи через оверлей. Таким образом вы можете не только изменять, но и удалять любые файлы и даже отменять удаление файлов из прошивки. Все изменения сохраняются в директории /overlay. Вы, конечно, можете попробовать всё повторить на стоке, но в посте речь будет идти именно о системе Linux из проекта OpenIPC. Как устанавливать OpenIPC, я рассказывал. ? IRCUT и драйвер мотора 6208 IRCUT — это электромагнит управления IR-фильтром. Следует учитывать, что выходы IRCUT управляют электромагнитом, и потребляемый ток для GPIO слишком высок, поэтому всегда этот выход подключён не напрямую в процессор, а через микросхему драйвера мотора (по сути). Чаще всего это микросхема 6208, к ногам 5 и 8 которой ведут два GPIO от процессора. Именно тут к ним можно подпаяться. Но установленный драйвер мотора может для вас оказаться незаменимой штуковиной. Без такого усилителя не запитать что-либо кроме самого маломощного светодиода. ![]() ? Контакт датчика освещения На старых камерах от модуля подсветки со светодиодами обычно к плате камеры идёт один проводок. Это провод от датчика освещённости, который представляет собой фоторезистор. Для приведения напряжений к приемлемому для SoC уровню в цепь включён транзистор. Я сдул этот транзистор феном и подпаялся к пятаку от него на плате, чтобы подключить ещё один светодиод. ![]() Я думаю, на этом этапе моя мысль ясна: выбрасывая ненужную периферию камеры, можно подключиться к некоторому количеству выходов GPIO. Перечислю, что можно ещё задействовать с платы камеры, чтобы получить дополнительные GPIO:
? Управление GPIO из Linux Есть два способа управления GPIO: через файловую систему sysfs и напрямую через /dev/mem командой busybox devmem прямым доступом. Не припоминаю, чтобы первый способ был реализован в стоковых прошивках, но он очень удобен и доступен в OpenIPC. Если вы не программист и ваше знание Linux заканчивается на bash-скриптах, то это способ для вас. Кстати, приведённые ниже примеры вполне актуальны и для плодово-ягодных компьютеров с системами вроде Armbian или OpenELEC за той лишь разницей, что там GPIO выведены на симпатичные документированные гребёнки и не приходится возиться с их выискиванием на плате и пайкой. Скукота, да и только! Эти файлы не являются файлами на диске. Это лишь способ управления настройками, драйверами и устройствами через файловую систему sysfs. Всё, что начинается на gpiochipXX, нас не интересует — это контроллеры GPIO. Интересующих нас файлов gpioXX пока нет. Но прежде чем мы их создадим, нужно выяснить, какой номер GPIO каким физическим контактом на плате управляет. Зная вендора платы камеры и процессор, здесь можно с некоторой вероятностью найти, какие номера GPIO задействованы и на каких компонентах: github.com/OpenIPC/wiki/blob/master/en/gpio-settings.md. IRCUT1, IRCUT2 есть на всех камерах: как я уже говорил, к ним двумя проводками подключён через микросхему 6208 блок с IR-фильтром, к которому крепится объектив. IRSTATUS — это датчик освещённости. На старых камерах сам датчик находится на плате подсветки со светодиодами, но на многих новых может вообще отсутствовать. Состояние освещённости можно получить и без фоторезистора. Выбираю по табличке, зная, что моя плата на процессоре 3518ev200 произведена вендором XiongMai. Обратите внимание, что вендор платы это не то же самое, что производитель камеры. Одна плата может использоваться огромным количеством производителей камер, таких как Azishn, Escam, Gadinan и т. п. Вижу, что IRCUT — это 33,34, IRSTATUS — это 24. Выводы ALM_IN и ALM_OUT на моей плате не разведены. Чтобы их найти, нужно открывать даташит на процессор и искать, как к ним можно подпаяться. Подпаиваю для эксперимента самые, насколько возможно, маломощные светодиоды одной ногой (катод) на землю через резистор 1кОм. И другой стороной (анод) к входным ногам 5 и 8 микросхемы 6208 усиления сигнала для IRCUT, а также к коннектору, который ведёт на датчик освещения. Я использовал для ограничения тока один общий резистор на все светодиоды. Сегодня будем управлять GPIO-пином с номером 33. Включаем доступ к нему. Для этого записываем номер 33 в файл export: В результате этого действия у нас появляется в этой же директории ещё один симлинк на директорию, через файлы в которой можно управлять состоянием нашего светодиода: Чтобы не усложнять жизнь, не обращаем внимания, куда ведёт эта символическая ссылка. Мы будем работать с директорией gpio33. Но адреса из этой ссылки в будущем нам могут понадобиться для второго способа доступа к GPIO. Теперь нужно указать назначение пина: ввод или вывод данных. Сейчас я хочу зажечь подпаяный светодиод, значит это будет вывод (out). Если бы мне нужно было считывать состояние какого-либо датчика, тогда следовало бы включать ввод (in). Записываем слово out в файл direction: Эта настройка делается только один раз после загрузки ОС. Теперь записываем единицу в значение этого порта, зажигаем светодиод: Выключаем светодиод: Дальше можете подключать усилитель и управлять вместо светодиода хоть заводом через этот контакт. Ну нормально же, запустил скрипт по крону, и завод начал работать в 8:00, можно на работу не идти. У управления GPIO через sysfs есть большой недостаток — очень медленная скорость. Есть ещё один способ через devmem, но способ достаточно сложный. В busybox для ARM-платформ обычно включают апплет devmem, который позволяет писать напрямую в память. Наши любимые GPIO это, грубо говоря, ячейки памяти, которые подключены к внешним контактам. К этим ячейкам можно получить доступ по адресу памяти. Но всё усложняется, так как у них есть множество различных режимов и настроек. Поэтому, прежде чем использовать этот способ, придётся найти документацию на SoC (процессор) и найти адреса не только GPIO, но и вспомогательных регистров, которые задают настройки режимов, направления, прерываний и т. п. Углубляться в детали этого способа управления GPIO не будем, так как это тема для отдельного поста. ? IPCTool А пока вернёмся к вопросу поиска GPIO. Если вы не знаете вендора платы камеры или не нашли её в табличке, то у вас проблема. Перейдём к следующему этапу с надеждой на везение. Чтобы точно выяснить на вашей камере GPIO, нам поможет ipctool, которая имеет отличный режим отслеживания изменений на контактах GPIO. Чтобы запустить на заводской прошивке, я подмонтирую NFS-директорию с предварительно скачанной программой по адресу 192.168.1.100:/mnt/nfs: Дальше нужно спровоцировать камеру переключить IRCUT. Например, затемнить датчик света. Как только камера переключится щелчком в ночной режим, ipctool покажет, на каких GPIO были изменения. Эти данные нужны будут вам и в том случае, если вы просто захотите использовать камеру по своему прямому назначению с прошивкой OpenIPC. ? Сканирование GPIO, к которым подпаяны светодиоды Если не нашли в табличке свои GPIO, а сохранить данные с заводской прошивки не удалось до установки OpenIPC, это всё равно ещё не катастрофа. Можно отсканировать скриптом, перебрав все GPIO в системе. Подпаяйте LED, как я рассказал к микросхеме 6208, и запустите следующий скрипт, который переберёт все GPIO. Имейте в виду, что GPIO могут быть использованы таким оборудованием, как сетевые PHY, и обращение к ним оставит камеру без сети. Поэтому сканирование GPIO крайне желательно делать через UART-консоль. Иногда камера может зависнуть при попытке использования некоторых GPIO, и таковые нужно будет просто пропустить при задании диапазона сканирования. ![]() В разных платах разное количество GPIO. Как-то раз я перебирал от 0 до номера 120, будучи увереным, что больше не бывает. Очень много времени убил, а оказалось в конце концов, что искомый пин висит на GPIO 121. Но на большинстве камер при попытке доступа выше 70 вы уже начнёте видеть ошибки. В процессе сканирования внимательно наблюдаем за светодиодами. Когда настанет очередь GPIO, который отвечает за управление этим контактом, светодиод загорится и погаснет. ? Ааааавтомобиль! Микросхема 6208 вполне справляется с током, который потребляет двигатель детской машинки, если вы понимаете, о чём я говорю. Поэтому вполне законно вместо IR CUT подключить такой моторчик, и в консоли дать команды, которые прокрутят его в одном и в другом направлении. ![]() Я не лучший рассказчик, но хотел показать на видео, что получилось в результате опыта с машинкой под управлением камеры OpenIPC. Резюме Я показал вам, что из бытовых устройств не только TV BOX может быть прекрасным достаточно производительным одноплатным компьютером, но и камера видеонаблюдения. Кроме запуска программных задач, я на практике показал, что через контакты GPIO можно не только считывать данные с датчиков, но и управлять нагрузкой, такой как двигатель постоянного тока через имеющийся на любой камере драйвер мотора 6208 без каких-либо аппаратных изменений в самой камере. После эксперимента, если камера была рабочей, её можно продолжить использовать по своему назначению. OpenIPC можно при этом оставить как основную прошивку. Источник: habr.com Комментарии: |
|