В этом примере будет создан простой Датчик движения , на базе фоторезистор И Ардуино .
Управляется с помощью пакета поддержки Arduino для МАТЛАБ .
Введение
Фоторезистор — это переменный резистор, который реагирует на интенсивность падающего света, поэтому детектор движения обнаруживает только движение, вызывающее изменения в освещении.Программа управления, написанная на MATLAB, будет использовать команды из пакета поддержки для считывания напряжения с выводов Arduino. Значения напряжения будут загружены непосредственно в MATLAB с отметкой времени.
Эти данные будут отображаться и анализироваться в режиме реального времени для обнаружения движения.
Код использует комбинацию алгоритмов для обнаружения движения, но существует множество других алгоритмов машинного обучения и анализа данных, которые можно использовать в подобных проектах.
Пока детектор движения работает, программа MATLAB сохраняет все показания напряжения вместе с соответствующими отметками времени.
Это позволяет пользователю обрабатывать полный набор данных в MATLAB после завершения записи.
В следующей статье представлены результаты анализа нескольких таких записей и алгоритмов.
Что вам понадобится?
- Ардуино или аналогичный
- USB-кабель
- 1 фоторезистор
- Резистор 10 кОм
- Провода (МГТФ 0.2 должно хватить)
- Небольшая доска разработки
Задача 1 — Подключение Arduino к MATLAB
Чтобы подключить Arduino к MATLAB, вам необходимо установить пакет поддержки MATLAB для Arduino. Этот пакет поддержки доступен для выпусков MATLAB R2014a (в настоящее время R2015a) и выше и устанавливается с помощью установщика пакета поддержки.Этот установщик можно открыть с ленты MATLAB (Дополнения -> Получить пакеты поддержки оборудования) или из командной строки с помощью команды supportPackageInstaller. После установки пакета поддержки вы можете подключить Arduino. Процедура
- Подключите Arduino к компьютеру с помощью USB-кабеля.
- В MATLAB инициализируйте объект Arduino:
% Inputs: Port ID (from your computer), Arduino board type myArduino = arduino('COM4','uno');
Задача 2 — Проверка соединения MATLAB-Arduino
Большинство плат или клонов Arduino имеют встроенный светодиод на контакте 13. Если на вашей плате есть светодиод, вы можете проверить соединение, просто мигнув им.Если встроенного светодиода нет, то можно подключить его последовательно с резистором между цифровым выводом (например, 13) и GND (см.
электрическую схему ниже).
Значение резистора будет варьироваться в зависимости от цвета светодиода, но для красных и желтых светодиодов резистора сопротивлением 330 Ом должно быть достаточно.
Когда светодиод подключен, для проверки нужно запустить приведенный ниже код (мигнуть светодиодом 5 раз).
Задача 3 – Сборка схемы
Важно то, что, как и все резисторы, фоторезистор не имеет ориентации — о направлении протекающего через него тока можно не беспокоиться.Во-первых, вам нужно создать простой делитель напряжения с помощью фоторезистора:
- На макетной плате последовательно соединяем фоторезистор и резистор сопротивлением 10 кОм.
- Соединим свободный вывод резистора сопротивлением 10 кОм с выводом GND Arduino.
- Подключим свободный выход фоторезистора к выводу 5В Arduino.
Это соединение будет работать как потенциометр.
Задача 4 — Проверка схемы и фоторезистора
Следующим шагом будет проверка схемы, чтобы убедиться, что фоторезистор правильно реагирует на изменение уровня освещенности.В приведенном ниже сценарии показано, как настроить Arduino и получить показания напряжения с фоторезистора через аналоговый вывод Arduino. Попробуйте закрыть фоторезистор или включить/выключить свет в комнате во время работы сценария, чтобы увидеть, как фоторезистор реагирует на изменения освещения.
Как фоторезисторы работают с MATLAB Фоторезистор — это резистор переменного сопротивления, реагирующий на интенсивность падающего света.
Чем ярче свет, тем меньше сопротивление фоторезистора.
Простой делитель напряжения в виде последовательно соединенных фоторезистора и постоянного резистора преобразует изменения сопротивления цепи в измеримые падения напряжения.
MATLAB используется для считывания напряжения с аналогового вывода Arduino. Когда значение напряжения записывается в MATLAB, программа может соотнести каждое значение напряжения с соответствующим уровнем освещенности.
Даже простые фоторезисторы могут быть очень чувствительными, позволяя считывать полный диапазон напряжений (0–5 В) с аналогового вывода Arduino. MATLAB будет считывать эти напряжения, округленные до ближайших 0,0049 вольт, поскольку аналоговый сигнал преобразуется в 10-битный цифровой сигнал:
Задача 5 – Калибровка алгоритма детектора движения
Поскольку фоторезистор очень чувствителен, алгоритмы обнаружения движения потребуют калибровки в зависимости от условий окружающего освещения и сценария использования детектора движения.Запрограммированные уровни освещенности также необходимо отрегулировать в соответствии с желаемой чувствительностью.
Код MATLAB для детектора движения (Run_Motion_Detector.m) использует три типа вычислений в реальном времени, чтобы определить, соответствует ли текущее значение напряжения движению.
Каждый расчет — это простой способ количественной оценки изменчивости в небольшом окне данных.
Каждый результат расчета сравнивается с соответствующим пороговым значением, чтобы определить, показывает ли изменение движение.
Если какой-либо из результатов превышает соответствующий порог переменной, текущее значение напряжения обозначается как движение.
Пороговые переменные имеют прямое отношение к чувствительности детектора движения и должны калиброваться для каждой конкретной ситуации.
Всего реализовано 3 метода:
- Метод стандартного отклонения.
Вычисляет стандартное отклонение всех точек в окне данных, используя стандартный ( напряжения ) .
Это основной расчет разницы между показаниями напряжения.
- Метод разностей – вычисляет сумму абсолютных значений разностей между последовательными точками с помощью сумма( пресс( разница( напряжения))) .
Это расчет чистого изменения между последовательными точками данных в окне данных.
- Метод наклона – вычисляет наиболее подходящий линейный тренд (наклон) для окна данных.
Требуются как показания напряжения, так и соответствующая синхронизация.
Эту функцию также следует откалибровать и расширить соответствующим образом, чтобы она описывала уровень освещенности в месте установки вашего детектора движения.
Задача 6 – Обработка записанных данных
Многие датчики движения предназначены только для обнаружения движения в реальном времени, поскольку они предназначены для автоматизации конкретной задачи.Это очень распространенный тип детектора движения, используемый в автоматических дверях в аэропортах и магазинах или в переключателях, активируемых движением, в офисных зданиях.
Детектор движения MATLAB, построенный в этом примере, может не только обнаруживать движение в реальном времени, но также дополнительно записывать и собирать показания датчиков на протяжении всего сеанса записи.
Функция Run_Motion_Detector автоматически сохраняет необработанные аналоговые напряжения и значения времени переменных AnalogVoltage и SensorTime в базовой рабочей области MATLAB. После сохранения в MATLAB эти данные можно передать в функцию Analyse_Motion_Detector_Data для реализации и сравнения различных алгоритмов обнаружения движения.
На рисунке ниже показана производительность трех алгоритмов обнаружения движения на полном наборе данных.
Красные маркеры данных характеризуются движением во всех трех направлениях.
Существенно, что некоторые движения обнаруживаются только методом наклона (показаны зелеными маркерами), тогда как другие движения обнаруживаются только методом стандартного отклонения и/или разницы (показаны синими маркерами).
Используя комбинацию этих трех методов обнаружения движения, детектор движения, реализованный в MATLAB, может создать полную запись движения.
Задача 7 – Классификация движения
Используя MATLAB для обработки данных, легко изолировать события движения и характеризовать каждое из них несколькими расчетными параметрами.Некоторые простые параметры, которые можно рассчитать, включают:
- уровень освещенности до того, как произошло событие движения
- уровень освещенности после движения
- Средняя освещенность во время движения
- Общее время события движения
Описания используются для создания отметок на графике напряжения.
Маркеры движения состоят из трех символов и располагаются над событием движения.
- Первый символ — знак плюс, минус или равенство — указывает на увеличение интенсивности освещения (+), уменьшение (-) или постоянство (=) вблизи события движения.
- Следующий символ — буква, обозначающая определенный тип движения.
Типы движения с соответствующими буквами перечислены ниже.
- G: Длительное движение (легкие изменения происходят более 20 секунд)
- E: Расширенное движение (освещение меняется в течение нескольких секунд)
- М: Значительное изменение освещенности (резкое изменение освещенности вокруг события)
- C: Комбинация (изменение освещения во время мероприятия и вокруг него)
- L: Изменение освещения (небольшое изменение освещения вокруг мероприятия)
- Т: временное движение (нет существенных изменений освещенности вокруг события)
- Третий символ (если указан) показывает, как среднее значение освещенности во время каждого события движения связано с предыдущей и следующей интенсивностью света, используя те же знаки плюс, минус и равенство, что и для первого символа.
Практическое применение: мониторинг активности в холле.
Поскольку детектор движения чувствителен к изменениям освещенности, он будет работать лучше всего, когда движение, которое вы хотите отслеживать, соответствует внезапному увеличению или уменьшению освещенности.
Одним из сценариев, который хорошо работает для обнаружения людей, является размещение детектора движения в коридоре на хорошо освещенной стене или рядом с источником света.
Когда люди идут по коридору, напряжение резко падает, поскольку их тени падают на фоторезистор.
На графике ниже показаны данные, собранные детектором движения в вестибюле.
События движения классифицируются с помощью версии функции Categorize_Motion_Events, специально модифицированной для анализа данных, собранных в холле.
События движения, классифицированные как изменения освещения (M или L), могут быть отброшены, поскольку они, скорее всего, не указывают на людей, проходящих через зал.
Остается девять событий, которые, по-видимому, указывают на проход человека.
Дальнейший анализ может быть выполнен для расчета скорости ходьбы человека или количества людей в группе путем изучения продолжительности движения.
Заключение
Простой детектор движения был создан с использованием Arduino, а MATLAB использовался для калибровки детектора и классификации движения.Практическое применение: потренируйтесь на кошках, чтобы отточить свой алгоритм, а затем перенести его на более серьёзную компонентную базу.
Материалы статьи
Теги: #matlab #arduino #детектор движения #алгоритмы #машинное обучение #matlab-
Мобильный Челлендж Вк 2018
19 Oct, 24 -
Робо-Кью
19 Oct, 24