Оглавление:
- Шаг 1. Запчасти и аксессуары
- Шаг 2: Описание деталей: Sense Hat
- Шаг 3: Сборка: регистратора ударов
- Шаг 4: Сборка: регистратора ударов на приборной панели автомобиля
- Шаг 5: Impact Recoder: работа и приложения
- Шаг 6: Описание программного обеспечения: Node Red
- Шаг 7. Основы Node-Red
- Шаг 8: Красный узел: поток _1a
- Шаг 9: Красный узел: Flow_1b
- Шаг 10: Красный узел: Flow_2a
- Шаг 11: Красный узел: Flow_2b
- Шаг 12: Красный узел; Flow_3
- Шаг 13: MQTT
- Шаг 14: MQTT: подписчик
- Шаг 15: MQTT: редактирование свойств в Node-red
- Шаг 16: Код Python:
- Шаг 17: последний код
- Шаг 18: Мониторинг видео в реальном времени
Видео: Регистратор ударов для транспортных средств: 18 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Регистратор ударов предназначен для записи ударов, полученных автомобилем во время вождения или стоянки. Удары хранятся в базе данных в виде показаний, а также видео / изображения. Удаленный пользователь после удара может быть проверен в режиме реального времени, а удаленный пользователь может просматривать сохраненное видео или получать удаленный доступ к пи-камере и соответственно наблюдать за событиями..
Шаг 1. Запчасти и аксессуары
(1) Raspberry Pi 3 или лучше: требуется вычислительная мощность.
(2) Шляпа Raspberry Pi sense
(3) Камера Raspberry Pi / USB-камера
(4) Карта памяти с последним образом raspbian (почти все последние образы должны поддерживать красный узел)
(5) Электропитание минимум 2,1 А (я использовал аккумуляторную батарею для автономной работы в автомобиле)
Шаг 2: Описание деталей: 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
Некоторые базовые шаги выделены, чтобы мгновенно начать работу с красным узлом, но да, красный узел слишком прост, чтобы начинать и разрабатывать приложения.
- Начальный красный узел: https:// localhost: 1880.
- Запуск Node-red, когда пи подключен к Интернету https:// ip-адрес>: 1880
Шаг 8: Красный узел: поток _1a
Flow _1a отслеживает любые изменения в CSV-файле и на основе этих изменений, т. Е. Обнаружено воздействие, включается запись видео с камеры, а затем пользователь информируется через Интернет о том, что произошло воздействие.
Шаг 9: Красный узел: Flow_1b
В указанном потоке запись видео можно начать в любой момент, просто нажав джойстик.
Шаг 10: Красный узел: Flow_2a
В указанном потоке всякий раз, когда любое новое изображение или видео сохраняется / загружается в каталог, информация передается зарегистрированному пользователю через Интернет.
Шаг 11: Красный узел: Flow_2b
Этот поток в первую очередь предназначен для удаленного пользователя, чтобы управлять устройством следующим образом:
(а) устройство отключения
(б) фотографировать
(c) Запись видео
(d) начальный основной код (код регистратора данных - это основной код, который рассчитывает воздействие)
Шаг 12: Красный узел; Flow_3
Поток предназначен для локального доступа, чтобы запустить основной код или выключить устройство.
Шаг 13: MQTT
MQTT (передача телеметрии очереди сообщений) - это протокол TCP / IP, в котором издатель и подписчик взаимодействуют.
В нашем случае Pi является издателем, а приложение, установленное на нашем мобильном устройстве / ПК, будет подписчиком.
Таким образом, при возникновении любого воздействия информация передается удаленно пользователю (необходимо рабочее подключение к Интернету).
Более подробную информацию о MQTT можно получить по следующей ссылке: MQTT
Чтобы начать использовать MQTT, нам нужно сначала зарегистрироваться, для учебника я использовал cloudmqtt (www.cloudmqtt.com), есть бесплатный план в разделе «Милый кот», вот и все.
После регистрации создайте экземпляр, скажите «пи», после чего вы получите следующие данные
- Название сервера
- порт
- имя пользователя
- пароль
Вышеуказанное необходимо при подписке через мобильный телефон / компьютер.
Для своего приложения я использовал приложение MQTT из магазина Google Play (версия для Android)
Шаг 14: MQTT: подписчик
Приложение MQTT, работающее на мобильном устройстве (версия для Android)
Удары, обнаруженные на пи, передаются обратно
Шаг 15: 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.
Спасибо за чтение!!
Регистратор ударов может сделать гораздо больше …
Следите за следующим пространством для анализа магнитного поля при картировании препятствий.
Рекомендуемые:
Легко создавайте свои собственные виджеты - Быстрый счетчик ударов в минуту: 6 шагов
Легко создавайте свои собственные виджеты - Быстрый счетчик BPM: веб-приложения - обычное дело, но веб-приложения, не требующие доступа в Интернет, - нет. В этой статье я покажу вам, как я сделал счетчик BPM на простой HTML-странице в сочетании с ванильным javascript ( посмотреть здесь). После загрузки этот виджет можно использовать в автономном режиме
Визуализация транспортных данных с помощью карты Google: 6 шагов
Визуализация транспортных данных с помощью карты Google: обычно мы хотим записывать различные данные во время езды на велосипеде, на этот раз мы использовали новый Wio LTE для их отслеживания
Отслеживание транспортных средств своими руками: 8 шагов (с изображениями)
DIY Vehicle Tracker: Мой мотоцикл был украден прошлым летом. К счастью, полиция нашла его практически невредимым (NYPD FTW!), Но я знаю, что увернулся от пули, так что пришло время внедрить некоторые технологии 21 века в мою поездку в конце 20 века. К сожалению, угнанный автомобиль треки
Инструкции по набору средств анализа кодирования: 9 шагов
Инструкции по набору средств анализа кодирования. Набор средств анализа кодирования (CAT) - это бесплатное программное обеспечение для качественного анализа данных, полностью доступное в Интернете. Для исследователей с текстовыми данными CAT позволяет категоризировать и систематизировать крупномасштабные объемы данных в количественные суммы
Создание собственных аппаратных и программных средств Nixie Clock: 7 шагов
Создание собственных аппаратных и программных средств Nixie Clock: в этом руководстве мы будем создавать собственные часы Nixie Tube Clock. Большое спасибо JLC PCB за спонсирование этого проекта. Мы перейдем от создания специальной печатной платы к 3D-печати корпуса и написанию кода программного обеспечения для его запуска. Бесплатная доставка по пихте