Pull to refresh

Устройство слежения за движущимся источником света

Reading time3 min
Views26K
Сегодня я решил написать об одном интересном проекте, которым занимался в свободное от учебы время.

Суть устройства проста — есть матрица фотодиодов (в данном случае 4, но можно и больше) которая регистрирует свет от какого-то источника, который может перемещаться. Естественно, количество света, падающее на каждый фотодиод в отдельности различно.

Устройство должно определять расположение в пространстве источника света, который перемещается.Это основная цель. То есть необходимо программно решать задачу многомерной корреляции между вектором интенсивностей и вектором местоположения источника света.



Общая схема показана на рисунке выше. В нашем случае всего 4 фотодиода. Сигнал с фотодиодов усиливается и поступает в микроконтроллер ATMega16. Микроконтроллер формирует пакет с данными и отправляет его с частотой 1 Гц по USART(COM порт). Со стороны компьютера работает программа, написанная на Lazarus (FreePascal), которая считывает с порта данные, и проводит анализ с помощью свободной нейросетевой библиотеки, затем выдает результат о местоположении источника света.

Это было краткое описание, а теперь детали.

1) Подключение фотодиодов


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



Падающий свет вызывает фототок, схема линейна (до насыщения), в отличии от схемы со смещением. Ток почти не течет в инвертирующий вход, и поэтому напряжение на выходе определяется как U=I*R1.

Очень хорошая статья про фотодиоды и усилители написана сотрудником Texas Instruments Philip C. D. HOBBS«Усилители для фотодиодов на операционных усилителях». Рекомендую всем заинтересованным.

Мной использовались высокоскоростные PIN фотодиоды, BPW34. У них не очень большой угол обзора — что было под рукой, то и использовал. Здесь подойдут почти любые фотодиоды, дело вкуса.

Красной строки требует операционный усилитель AD820. Усилитель на полевых транзисторах (FET) обладает преимуществом перед биполярными низким током утечки, поэтому в схемах-конвертерах ток-напряжение это очень важно. Также усилитель имеет Rail-to-Rail выход, то есть размах выходного напряжение может приближаться очень близко в шинам питания.
Рекомендую использовать после выхода усилителя ФНЧ (фильтр низких частот), и выбрать нужную частоту среза, чтобы было меньше шума.

2) Микроконтроллер ATMEGA16


Как я уже писал выше микроконтроллер нужен для того, чтобы оцифровывать сигналы и передавать их в порт ПК.
Здесь используется древнейший MAX232ACPE конвертер для COM порта. Сейчас я пользуюсь контроллерами с аппаратным USB, но год назад, мне схема с MAX232 казалась ну очень крутой, и я сильно радовался, когда, наконец, разобрался с ней.
Тем, у кого нет платы с COM портами придется либо собрать самому на FT232RL или купить конвертер USB-USART, которых сейчас навалом в интернетах.



Первым делом нужно организовать стабильное питание для микроконтроллера (МК). По питанию нужно всегда ставить как можно ближе к ножкам МК керамический конденсатор емкостью 0,1 uF. На рисунке между VCC и GND.

Затем нужно позаботится о тактовом сигнале.

Здесь стоит кварцевый резонатор на 8MHz (поверьте, когда я начинал, тоже думал что это так мало). Для увеличения стабильности ставят как показано на схеме пикофарадные конденсаторы. Для каждой частоты нужен свой номинал, подробности нужно смотреть в даташите (datasheet), официальном паспорте-документации на каждую ИС (интегральную схему).

Для того, чтобы МК работал без случайных сбросов, необходимо подключить через подтягивающий резистор Vcc к RESET.

Аналоговые входы PA0..7 являются портами, куда мы подаем сигналы с усилителей.
В качестве опорного напряжения для АЦП возьмем Vcc, вот так совсем не хитро.

Порты RX, TX служат для отправки и получения данных.
TTL логика и логика RS232 сильно различаются, и не могут работать напрямую, поэтому мы используем конвертер, схема подключения показана слева. Все конденсаторы, приведенные в схеме подключения конвертера керамические, и имеют номинал 0.1 uF.

3) Среда разработки и используемые библиотеки


Этот проект я делал на Lazarus IDE, компилятор FreePascal, в процессе написания мной было использовано несколько компонентов и библиотек.

  • Библиотека для работы с COM-портом CportLib
  • Известная библиотека FANN


Для работы с нейросетями я выбрал свободную библиотеку FANN. Думаю, что большинство знают как работают нейросетевые алгоритмы, но на всякий случай повторюсь на моем примере.



Здесь нейросеть должна вначале обучиться с учителем.

Смысл обучения состоит в том, что сеть должна подстраивать коэффициенты матриц слоев таким образом, чтобы минимизировать разницу между выходным вектором и обучающим вектором.

Каждая задача уникальна в каком-то смысле, и поэтому нет теории, которая бы говорила какого количества нейронов достаточно, чтобы решиться задачу, какую передаточную функцию следует использовать и так далее.

На этом все,
в следующий раз, как найду время — напишу продолжение в котором будут освящены такие части как:
  • Получение данных от МК
  • Обучение нейросети
  • Анализ данных с помощью нейросети

Следующая часть будет полностью программной.
Tags:
Hubs:
+42
Comments39

Articles

Change theme settings