Считывание данных спомощью Arduino и Processing. Обработка с помощью R
Сегодня хочу сделать небольшой обзор как можно использовать Arduino и Processing для сбора статистических данных, а также обрабатывать их с помощью R.Для демонстрации сбора статистики я с помощью ультразвукового датчика HC-SR04 фиксирую, когда коллеги проходят перед моим рабочим столом. Некоторую полезную информацию как скрестить Arduino, Processing и R я взял отсюда.
ArduinoВот схема для Arduino UnoЕсли кто-то проходит перед столом срабатывает спикер (и лампочка).
Скетч для Arduino находится здесь.
Нужно учесть несколько моментов
Используется библиотека NewPing, ее нужно проинсталлировать в вашу Arduino среду и перезапустить IDE Чтобы минимизировать ложные срабатывания, я проверяю наличие сигнала несколько раз. См. функцию pingConfirms. В общем-то надежность срабатывания все еще не идеальна, то срабатывает по нескольку раз за один проход, то пропускает проходы. Но для нашей цели это не очень важно Обратите внимание на константу MAX_DISTANCE, она задает максимальное расстояние до которого срабатывает датчик. Самый важный момент: данные на компьютер передаются через серийный порт. Чтобы отличить дебажный вывод перед данными я вывожу »$data:», этот текст я воспринимаю как маркер данных, которые будут добавляться к CSV файлу, поэтому если данных несколько, можно их разделить запятой В нашем случае в качестве данных передается расстояние в сантиметрах, но рельно нас это значение не будет интересовать, мы будем группировать по количеству Processing В этом проекте Processing 2 я буду использовать исключительно для считывания данных с серийного порта (USB) и дописывание их в CSV файл. Вы можете также использовать Processing для визуализации своих данных, но здесь графики я буду рисовать с помощью R.Среда Processing очень похожа на среду Arduino, но язык Java-подобный. Универсальный скетч для считывания данных с Arduino здесь.Вам нужно сначала запустить скетч, он выведет в консоль список всех доступных сериальных портов, найдите порт, на котором работает Arduino, возьмите его порядковый номер (нумерация начинается с нуля) и пропишите его в константу mySerialPort. Обратите также внимание, куда пишутся данные String filePath = sketchPath (»…/…/data/data.csv»); Функция sketchPath создаст путь относительно папки в которой находится скетч. Если файл нет он создастся, если уже есть в него будут добавляться строки. Автоматически первым элементом в каждой строке CSV файла будеть timestamp (колличество миллисекунд после 1970–01–01).
R Для обработки данных и отображения графиков я использую статистический пакет R.После инсталляции R системы можно войти в интерактивный режим с помощью однобуквенной комманды R. (Чтобы выйти с интеактивного режима введите q ().Я написал небольшой скрипт, которыйСчитывает данные с CSV файла в память. Вырезает данные нужного временного интервала. Для этого подкорректируйте переменные startDate и endDate Подсчитывает колличество прохождений в каждый из 10-минутных интервалов. Можна интервал изменить с помощью переменной period, она задается в секундах Рисует столбиковый график. Для запуска всего этого сделайте следующее: С консоли запустите комманду R Задайте путь к каталогу, в котором находится ваш data.csv файл: setwd (»/home/solvek/projects/electronics/counter/data») Запустите R скрипт: source (»…/plotchart.R») Здесь путь к скрипту относительно вышезаданного каталогоа данных Новогодний бонус Возможно вы обратили внимание на то, что спикер издает сигнал с тональностью, зависящей от расстояния проходящего от датчика. Таким образом с Arduino можно создать примитивный музыкальный инструмент:[embedded content]Вот переделанный для этого скетч.Всех с Новым Годом!