Сегодня я решил написать об одном интересном проекте, которым занимался в свободное от учебы время.
Суть устройства проста — есть матрица фотодиодов (в данном случае 4, но можно и больше) которая регистрирует свет от какого-то источника, который может перемещаться. Естественно, количество света, падающее на каждый фотодиод в отдельности различно.
Устройство должно определять расположение в пространстве источника света, который перемещается.Это основная цель. То есть необходимо программно решать задачу многомерной корреляции между вектором интенсивностей и вектором местоположения источника света.
Общая схема показана на рисунке выше. В нашем случае всего 4 фотодиода. Сигнал с фотодиодов усиливается и поступает в микроконтроллер ATMega16. Микроконтроллер формирует пакет с данными и отправляет его с частотой 1 Гц по USART(COM порт). Со стороны компьютера работает программа, написанная на Lazarus (FreePascal), которая считывает с порта данные, и проводит анализ с помощью свободной нейросетевой библиотеки, затем выдает результат о местоположении источника света.
Это было краткое описание, а теперь детали.
Здесь приведена простая схема подключения фотодиода к операционному усилителю, схема конвертера малого тока в напряжение, можно найти в любой книге по схемотехнике.
Падающий свет вызывает фототок, схема линейна (до насыщения), в отличии от схемы со смещением. Ток почти не течет в инвертирующий вход, и поэтому напряжение на выходе определяется как U=I*R1.
Очень хорошая статья про фотодиоды и усилители написана сотрудником Texas Instruments Philip C. D. HOBBS«Усилители для фотодиодов на операционных усилителях». Рекомендую всем заинтересованным.
Мной использовались высокоскоростные PIN фотодиоды, BPW34. У них не очень большой угол обзора — что было под рукой, то и использовал. Здесь подойдут почти любые фотодиоды, дело вкуса.
Красной строки требует операционный усилитель AD820. Усилитель на полевых транзисторах (FET) обладает преимуществом перед биполярными низким током утечки, поэтому в схемах-конвертерах ток-напряжение это очень важно. Также усилитель имеет Rail-to-Rail выход, то есть размах выходного напряжение может приближаться очень близко в шинам питания.
Рекомендую использовать после выхода усилителя ФНЧ (фильтр низких частот), и выбрать нужную частоту среза, чтобы было меньше шума.
Как я уже писал выше микроконтроллер нужен для того, чтобы оцифровывать сигналы и передавать их в порт ПК.
Здесь используется древнейший 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.
Этот проект я делал на Lazarus IDE, компилятор FreePascal, в процессе написания мной было использовано несколько компонентов и библиотек.
Для работы с нейросетями я выбрал свободную библиотеку FANN. Думаю, что большинство знают как работают нейросетевые алгоритмы, но на всякий случай повторюсь на моем примере.
Здесь нейросеть должна вначале обучиться с учителем.
Смысл обучения состоит в том, что сеть должна подстраивать коэффициенты матриц слоев таким образом, чтобы минимизировать разницу между выходным вектором и обучающим вектором.
Каждая задача уникальна в каком-то смысле, и поэтому нет теории, которая бы говорила какого количества нейронов достаточно, чтобы решиться задачу, какую передаточную функцию следует использовать и так далее.
На этом все,
в следующий раз, как найду время — напишу продолжение в котором будут освящены такие части как:
Следующая часть будет полностью программной.
Суть устройства проста — есть матрица фотодиодов (в данном случае 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. Думаю, что большинство знают как работают нейросетевые алгоритмы, но на всякий случай повторюсь на моем примере.
Здесь нейросеть должна вначале обучиться с учителем.
Смысл обучения состоит в том, что сеть должна подстраивать коэффициенты матриц слоев таким образом, чтобы минимизировать разницу между выходным вектором и обучающим вектором.
Каждая задача уникальна в каком-то смысле, и поэтому нет теории, которая бы говорила какого количества нейронов достаточно, чтобы решиться задачу, какую передаточную функцию следует использовать и так далее.
На этом все,
в следующий раз, как найду время — напишу продолжение в котором будут освящены такие части как:
- Получение данных от МК
- Обучение нейросети
- Анализ данных с помощью нейросети
Следующая часть будет полностью программной.