Регистратор ударов для транспортных средств: 18 шагов (с изображениями)
Регистратор ударов для транспортных средств: 18 шагов (с изображениями)
Anonim
Регистратор ударов для транспортных средств
Регистратор ударов для транспортных средств

Регистратор ударов предназначен для записи ударов, полученных автомобилем во время вождения или стоянки. Удары хранятся в базе данных в виде показаний, а также видео / изображения. Удаленный пользователь после удара может быть проверен в режиме реального времени, а удаленный пользователь может просматривать сохраненное видео или получать удаленный доступ к пи-камере и соответственно наблюдать за событиями..

Шаг 1. Запчасти и аксессуары

(1) Raspberry Pi 3 или лучше: требуется вычислительная мощность.

(2) Шляпа Raspberry Pi sense

(3) Камера Raspberry Pi / USB-камера

(4) Карта памяти с последним образом raspbian (почти все последние образы должны поддерживать красный узел)

(5) Электропитание минимум 2,1 А (я использовал аккумуляторную батарею для автономной работы в автомобиле)

Шаг 2: Описание деталей: Sense Hat

Описание частей: Sense Hat
Описание частей: Sense Hat

Sense HAT имеет светодиодную матрицу 8 × 8 RGB, пятикнопочный джойстик и включает в себя следующие датчики:

  • Гироскоп
  • Акселерометр
  • Магнитометр
  • Температура
  • Барометрический
  • давление
  • Влажность

Более подробную информацию о работе со смысловой шапкой можно получить по следующим ссылкам: Sense_Hat

API для Sense Hat размещены по адресу: Sense_hat_API

Код для программирования смысловой шляпы рассматривается на следующих этапах. Код Sense-hat также можно смоделировать на симуляторе, размещенном по адресу: Sense-hat simulator

Шаг 3: Сборка: регистратора ударов

Сборка: регистратор ударов
Сборка: регистратор ударов
Сборка: регистратор ударов
Сборка: регистратор ударов
Сборка: регистратор ударов
Сборка: регистратор ударов
Сборка: регистратор ударов
Сборка: регистратор ударов
  • Сборка проще, так как сенсорный колпачок должен быть наложен на пи (специальные монтажные болты поставляются с сенсорным колпачком).
  • Можно подключить USB-камеру или пи-камеру. В руководстве рассматривается пи-камера и, соответственно, для нее выполняется кодирование.
  • Вставьте карту памяти и настройте код Python и node -red (настройка и код описаны в дальнейших шагах)

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

Шаг 4: Сборка: регистратора ударов на приборной панели автомобиля

Сборка: регистратор ударов на приборной панели автомобиля
Сборка: регистратор ударов на приборной панели автомобиля

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

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

На очереди подключение источника питания (power bank на 10000 мАч) вместе с готовым подключением к Интернету.

Для приложения MQTT необходимо подключение к Интернету (подробности для MQTT описаны в дальнейших шагах)

Шаг 5: Impact Recoder: работа и приложения

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

Акселерометр: акселерометр показывает величину гравитационной силы (G-силы), действующей на каждую из осей x, y и z, если какая-либо ось измеряет силу более 1G, то быстрое движение может быть обнаружено. (обратите внимание, что ось, направленная вниз, будет иметь значение 1g и должна быть соответствующим образом учтена в коде Python).

Гироскоп; Гироскоп используется для измерения углового движения, т. Е. При резком повороте датчик может сработать (зависит от настройки в коде), поэтому человек, резко вращающий автомобиль, может быть пойман !!

Любая активация установленного лимита также отображается на светодиодной матрице сенсорной шляпы как "!" красным для ускорения и зеленым для активации гироскопа

Шаг 6: Описание программного обеспечения: Node Red

Node-RED - это инструмент программирования на основе потоков, первоначально разработанный группой IBM Emerging Technology Servicesteam, а теперь являющийся частью JS Foundation.

Более подробную информацию об узле красный можно получить по следующей ссылке: узел-красный

В нашем случае мы будем использовать node -red для следующих действий

(1) Взаимодействие с джойстиками для запуска функций камеры

(2) Мониторинг воздействий на транспортное средство и передача информации конечному пользователю с помощью MQTT и последующего принятия команд конечного пользователя через MQTT и запуска необходимого приложения на пи

(3) Выполнение некоторых основных действий, таких как отключение пи

Дальнейшие шаги дают подробную информацию для блок-схемы, реализованной на node-red.

Обратите внимание, что блок-схемы node-red взаимодействуют с кодом python, поэтому последняя часть охватывает аспекты кода python

Шаг 7. Основы Node-Red

Основы Node-Red
Основы Node-Red
Основы Node-Red
Основы Node-Red
Основы Node-Red
Основы Node-Red

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

  • Начальный красный узел: https:// localhost: 1880.
  • Запуск Node-red, когда пи подключен к Интернету https:// ip-адрес>: 1880

Шаг 8: Красный узел: поток _1a

Красный узел: Flow _1a
Красный узел: Flow _1a

Flow _1a отслеживает любые изменения в CSV-файле и на основе этих изменений, т. Е. Обнаружено воздействие, включается запись видео с камеры, а затем пользователь информируется через Интернет о том, что произошло воздействие.

Шаг 9: Красный узел: Flow_1b

Узел красный: Flow_1b
Узел красный: Flow_1b

В указанном потоке запись видео можно начать в любой момент, просто нажав джойстик.

Шаг 10: Красный узел: Flow_2a

Красный узел: Flow_2a
Красный узел: Flow_2a

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

Шаг 11: Красный узел: Flow_2b

Красный узел: Flow_2b
Красный узел: Flow_2b

Этот поток в первую очередь предназначен для удаленного пользователя, чтобы управлять устройством следующим образом:

(а) устройство отключения

(б) фотографировать

(c) Запись видео

(d) начальный основной код (код регистратора данных - это основной код, который рассчитывает воздействие)

Шаг 12: Красный узел; Flow_3

Узел красный; Flow_3
Узел красный; Flow_3

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

Шаг 13: MQTT

MQTT (передача телеметрии очереди сообщений) - это протокол TCP / IP, в котором издатель и подписчик взаимодействуют.

В нашем случае Pi является издателем, а приложение, установленное на нашем мобильном устройстве / ПК, будет подписчиком.

Таким образом, при возникновении любого воздействия информация передается удаленно пользователю (необходимо рабочее подключение к Интернету).

Более подробную информацию о MQTT можно получить по следующей ссылке: MQTT

Чтобы начать использовать MQTT, нам нужно сначала зарегистрироваться, для учебника я использовал cloudmqtt (www.cloudmqtt.com), есть бесплатный план в разделе «Милый кот», вот и все.

После регистрации создайте экземпляр, скажите «пи», после чего вы получите следующие данные

  • Название сервера
  • порт
  • имя пользователя
  • пароль

Вышеуказанное необходимо при подписке через мобильный телефон / компьютер.

Для своего приложения я использовал приложение MQTT из магазина Google Play (версия для Android)

Шаг 14: MQTT: подписчик

MQTT: подписчик
MQTT: подписчик

Приложение MQTT, работающее на мобильном устройстве (версия для Android)

Удары, обнаруженные на пи, передаются обратно

Шаг 15: MQTT: редактирование свойств в Node-red

MQTT: редактирование свойств в Node-red
MQTT: редактирование свойств в Node-red

В красном узле после выбора узла MQTT должны быть упомянуты "имя сервера" и "тема". Это должно быть одинаково на стороне подписчика.

Шаг 16: Код Python:

Функциональность кода соответствует прилагаемой блок-схеме

Шаг 17: последний код

Код python прилагается

Чтобы наш скрипт python запускался с терминала, нам нужно сделать их исполняемыми как chmod + x datalogger.py, а затем в верхней части кода должна быть следующая строка "shebang" #! / usr / bin / python3 (это необходимо для выполнения функций из node-red)

#! / usr / bin / python3 // shebang linefrom sense_hat import SenseHat from datetime import datetime from csv import writer import RPi. GPIO as GPIO from time import sleep

смысл = SenseHat ()

импорт csv

отметка времени = datetime.now ()

delay = 5 // задана задержка для хранения данных в файле data.csv red = (255, 0, 0) green = (0, 255, 0) yellow = (255, 255, 0)

# GPIO.setmode (GPIO. BCM)

# GPIO.setup (17, GPIO. OUT)

def get_sense_impact ():

sense_impact = acc = sense.get_accelerometer_raw () sense_impact.append (acc ["x"]) sense_impact.append (acc ["y"]) sense_impact.append (согласно ["z"])

gyro = sense.get_gyroscope_raw ()

sense_impact.append (gyro ["x"]) sense_impact.append (gyro ["y"]) sense_impact.append (gyro ["z"])

вернуть sense_impact

def impact (): // функция для обнаружения удара # GPIO.setmode (GPIO. BCM) # GPIO.setup (4, GPIO. OUT) ускорение = sense.get_accelerometer_raw () x = ускорение ['x'] y = ускорение ['y'] z = ускорение ['z'] x = abs (x) y = abs (y) z = abs (z)

gyro = sense.get_gyroscope_raw ()

gyrox = gyro ["x"] gyroy = gyro ["y"] gyroz = gyro ["z"]

gyrox = круглый (gyrox, 2)

gyroy = круглый (gyroy, 2) gyroz = круглый (gyroz, 2)

воздействие = get_sense_impact ()

если x> 1,5 или y> 1,5 или z> 1,5: // значения устанавливаются после итерации на реальной дороге, могут быть изменены соответственно для разных типов и навыков вождения с помощью open ('impact.csv', 'w', newline = ' ') как f: data_writer = writer (f) data_writer.writerow ([' acc x ',' acc y ',' acc z ',' gyro x ',' gyro y ',' gyro z ']) #GPIO. output (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", красный) data_writer.writerow (удар)

elif gyrox> 1.5 или gyroy> 1.5 или gyroz> 1.5: // значения устанавливаются с учетом скорости, с которой начинается поворот, с open ('impact.csv', 'w', newline = '') как f: data_writer = writer (f) data_writer.writerow (['acc x', 'acc y', 'acc z', 'gyro x', 'gyro y', 'gyro z']) # GPIO.output (4, GPIO. ВЫСОКИЙ) sense.clear () sense.show_letter ("!", Зеленый) data_writer.writerow (воздействие)

еще:

# GPIO.output (4, GPIO. LOW) sense.clear ()

def get_sense_data (): // функция для записи и сохранения значений с датчика sense_data =

sense_data.append (sense.get_temperature ()) sense_data.append (sense.get_pressure ()) sense_data.append (sense.get_humidity ())

ориентация = смысл.get_orientation ()

sense_data.append (ориентация ["рыскание"]) sense_data.append (ориентация ["шаг"]) sense_data.append (ориентация ["поворот"])

acc = sense.get_accelerometer_raw ()

sense_data.append (acc ["x"]) sense_data.append (acc ["y"]) sense_data.append (acc ["z"]) mag = sense.get_compass_raw () sense_data.append (mag ["x"]) sense_data.append (mag ["y"]) sense_data.append (mag ["z"])

gyro = sense.get_gyroscope_raw ()

sense_data.append (gyro ["x"]) sense_data.append (gyro ["y"]) sense_data.append (gyro ["z"])

sense_data.append (datetime.now ())

вернуть sense_data

с open ('data.csv', 'w', newline = '') как f:

data_writer = писатель (f)

data_writer.writerow (['temp', 'Pres', 'hum', 'yaw', 'pitch', 'roll', 'acc x', 'acc y', 'acc z', 'mag x', ' mag y ',' mag z ',' gyro x ',' gyro y ',' gyro z ',' datetime '])

в то время как True:

print (get_sense_data ()) для события в sense.stick.get_events (): # Проверить, был ли нажат джойстик, если event.action == "нажат": # Проверить, в каком направлении, если event.direction == "вверх": # смысл.show_letter ("U") # Стрелка вверх ускорение = sense.get_accelerometer_raw () x = ускорение ['x'] y = ускорение ['y'] z = ускорение ['z'] x = round (x, 0) y = круглый (y, 0) z = круглый (z, 0)

# Обновить поворот дисплея в зависимости от того, в какую сторону вверх if x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180) else: sense.set_rotation (0) sense.clear () t = sense.get_tempera () t = round (t, 1) message = "T:" + str (t) sense.show_message (message, text_colour = red, scroll_speed = 0,09) elif event.direction == "вниз": ускорение = sense.get_accelerometer_raw () x = ускорение ['x'] y = ускорение ['y'] z = ускорение ['z'] x = round (x, 0) y = round (y, 0) z = round (z, 0)

# Обновить поворот дисплея в зависимости от того, в какую сторону вверх if x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180) else: sense.set_rotation (0) # sense.show_letter ("D") # Стрелка вниз sense.clear () h = sense.get_humidity () h = round (h, 1) message = "H:" + str (h) sense.show_message (message, text_colour = green, scroll_speed = 0,09) p = sense.get_pressure () p = round (p, 1) message = "P:" + str (p) sense.show_message (message, text_colour = желтый, scroll_speed = 0,09)

# elif event.direction == "left":

# ускорение = sense.get_accelerometer_raw () # x = ускорение ['x'] #y = ускорение ['y'] #z = ускорение ['z'] # x = round (x, 0) # y = round (y, 0) # z = круглый (z, 0)

# Обновить поворот дисплея в зависимости от того, в какую сторону вверх // Не используется и контролируется node-red #if x == -1: sense.set_rotation (90) #elif y == 1: sense.set_rotation (270) #elif y == -1: sense.set_rotation (180) #else: sense.set_rotation (0) # sense.show_letter ("L") # Стрелка влево # elif event.direction == "right": # sense.show_letter ("K") # Стрелка вправо # elif event.direction == "middle": # sense.clear ()

влияние()

data = get_sense_data ()

dt = data [-1] - отметка времени, если dt.seconds> delay: data_writer.writerow (data) timestamp = datetime.now ()

Шаг 18: Мониторинг видео в реальном времени

Impact Recorder также можно использовать для мониторинга видео в реальном времени, так как видео можно запускать в любое время в любом месте через MQTT.

мы будем использовать проигрыватель VLC для потоковой передачи видео, по умолчанию в последней версии raspbian VLC предварительно установлен, иначе установите vlc, как указано ниже

Более подробную информацию о просмотре сетевого потока можно получить через сетевой поток VLC.

Спасибо за чтение!!

Регистратор ударов может сделать гораздо больше …

Следите за следующим пространством для анализа магнитного поля при картировании препятствий.