Считывание данных спомощью Arduino и Processing. Обработка с помощью R

в 9:49, , рубрики: arduino, processing

Сегодня хочу сделать небольшой обзор как можно использовать Arduino и Processing для сбора статистических данных, а также обрабатывать их с помощью R.

Для демонстрации сбора статистики я с помощью ультразвукового датчика HC-SR04 фиксирую, когда коллеги проходят перед моим рабочим столом. Некоторую полезную информацию как скрестить Arduino, Processing и R я взял отсюда.

Arduino

Вот схема для Arduino Uno
image

Если кто-то проходит перед столом срабатывает спикер (и лампочка).

Скетч для Arduino находится здесь.

Нужно учесть несколько моментов

  1. Используется библиотека NewPing, ее нужно проинсталлировать в вашу Arduino среду и перезапустить IDE
  2. Чтобы минимизировать ложные срабатывания, я проверяю наличие сигнала несколько раз. См. функцию pingConfirms. В общем-то надежность срабатывания все еще не идеальна, то срабатывает по нескольку раз за один проход, то пропускает проходы. Но для нашей цели это не очень важно
  3. Обратите внимание на константу MAX_DISTANCE, она задает максимальное расстояние до которого срабатывает датчик.
  4. Самый важный момент: данные на компьютер передаются через серийный порт. Чтобы отличить дебажный вывод перед данными я вывожу "$data:", этот текст я воспринимаю как маркер данных, которые будут добавляться к CSV файлу, поэтому если данных несколько, можно их разделить запятой
  5. В нашем случае в качестве данных передается расстояние в сантиметрах, но рельно нас это значение не будет интересовать, мы будем группировать по количеству

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().
Я написал небольшой скрипт, который

  1. Считывает данные с CSV файла в память.
  2. Вырезает данные нужного временного интервала. Для этого подкорректируйте переменные startDate и endDate
  3. Подсчитывает колличество прохождений в каждый из 10-минутных интервалов. Можна интервал изменить с помощью переменной period, она задается в секундах
  4. Рисует столбиковый график.

image
Для запуска всего этого сделайте следующее:

  1. С консоли запустите комманду R
  2. Задайте путь к каталогу, в котором находится ваш data.csv файл:
    setwd("/home/solvek/projects/electronics/counter/data")
    

  3. Запустите R скрипт:
    source("../plotchart.R")
    

    Здесь путь к скрипту относительно вышезаданного каталогоа данных

Новогодний бонус

Возможно вы обратили внимание на то, что спикер издает сигнал с тональностью, зависящей от расстояния проходящего от датчика. Таким образом с Arduino можно создать примитивный музыкальный инструмент:

Всех с Новым Годом!

Автор: sergi

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js