Оглавление:

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

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

Видео: Регистратор ударов для транспортных средств: 18 шагов (с изображениями)
Видео: Приказ комиссара. Warhammer 40k 2024, Ноябрь
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.

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

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

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

Рекомендуемые: