Съдържание:

Рекордер на удари за превозни средства: 18 стъпки (със снимки)
Рекордер на удари за превозни средства: 18 стъпки (със снимки)

Видео: Рекордер на удари за превозни средства: 18 стъпки (със снимки)

Видео: Рекордер на удари за превозни средства: 18 стъпки (със снимки)
Видео: Свършвам бързо! Как да правя секс по-дълго? 2024, Ноември
Anonim
Рекордер на въздействия за превозни средства
Рекордер на въздействия за превозни средства

Рекордерът на удари е проектиран да записва удари, претърпени върху превозното средство, докато шофирате или стоите неподвижно. Въздействията се съхраняват в базата данни под формата на показания, както и видео/картина. Отдалеченият потребител при въздействие може да бъде проверен в реално време, а отдалеченият потребител може след това да гледа записаното видео или да вземе отдалечен достъп до камерата pi и да наблюдава съответно събитията.

Стъпка 1: Части и аксесоари

(1) Raspberry Pi 3 или по -добър: Изисква се изчислителна мощност

(2) Малина pi чувствена шапка

(3) Raspberry pi камера / USB камера

(4) Карта с памет с най -новото raspbian изображение (Трябва да поддържа червен възел, почти всяко последно изображение го прави)

(5) Захранване поне 2.1 A (използвал съм батерия за самостоятелна работа в колата)

Стъпка 2: Описание на частите: Sense Hat

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

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

  • Жироскоп
  • Акселерометър
  • Магнитометър
  • Температура
  • Барометричен
  • налягане
  • Влажност

Повече информация за работата със сензор може да бъде получена от следните връзки: Sense_Hat

API за sense hat се хоства на адрес: Sense_hat_API

Кодът за програмиране със сензорна шапка е разгледан в по-късните стъпки. Кодът на Sense hat може също да бъде симулиран на симулатор, хостван на адрес: Sense-hat simulator

Стъпка 3: Сглобяване: Рекордер на въздействието

Сглобяване: Impact Recorder
Сглобяване: Impact Recorder
Сглобяване: Impact Recorder
Сглобяване: Impact Recorder
Сглобяване: Impact Recorder
Сглобяване: Impact Recorder
Сглобяване: Impact Recorder
Сглобяване: Impact Recorder
  • Сглобяването е по -лесно, тъй като сензорната шапка трябва да бъде подредена върху pi (определените монтажни болтове са снабдени със сензорна шапка).
  • USB камера или pi камера могат да бъдат свързани. В урока се разглежда pi камера и съответно се извършва кодиране за същата.
  • Поставете картата с памет и конфигурирайте кода на python и node -red (конфигурацията и кодът са обхванати в следващите стъпки)

Снимката по-горе показва pi-камера, свързана чрез плосък лентов кабел към pi

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

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

За монтиране на рекордера съм използвал двустранна лента, предимството е, че рекордерът може лесно да се премести в различно положение, в зависимост от това, което най -добре подхожда на вашата кола.

Допълнителната камера е монтирана вертикално, както е показано, като се използва същата двойна странична лента, Следващият по ред е да свържете източник на захранване (10 000 mAH захранваща банка) заедно с готова интернет връзка

За приложение MQTT е необходима интернет връзка (подробностите за MQTT са обхванати в следващите стъпки)

Стъпка 5: Рекордер на въздействие: Работа и приложения

От сензорната шапка ускорението и жироскопът се използват за проверка дали необработените стойности надхвърлят зададената граница в кода.

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

Жироскоп; Жироскопът се използва за измерване на ъглови движения, т.е. по време на рязко завъртане сензорът може да се активира (в зависимост от настройката в кода), така че човек, който рязко се върти, ще се хване !!

Всяко активиране на зададения лимит също се показва на LED матрицата на сензорната шапка като "!" в червено за ускорение и зелено за активиране на жироскоп

Стъпка 6: Описание на софтуера: Node Red

Node-RED е инструмент за програмиране, базиран на потока, първоначално разработен от Team Emerging Technology Servicesteam на IBM, а сега част от JS Foundation.

Повече информация за червен възел може да бъде получена чрез следната връзка: node-red

За нашия случай бихме използвали node -red за следните дейности

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

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

(3) Извършване на някои основни неща като изключване на pi

По-нататъшните стъпки дават подробна информация за диаграмата на потока, реализирана на node-red

Моля, обърнете внимание, че диаграмите на потока с червен възел взаимодействат с кода на python, следователно последната част обхваща аспектите на кода на python

Стъпка 7: Основи на Node-red

Червени възли Основи
Червени възли Основи
Червени възли Основи
Червени възли Основи
Червени възли Основи
Червени възли Основи

Някои основни стъпки са подчертани, за да стартирате Node-red в миг, но да, node-red е твърде лесно за стартиране и разработване на приложения.

  • Стартиране на Node-red: https:// localhost: 1880.
  • Стартиране на Node-red, когато pi е свързан към интернет https:// ip адрес>: 1880

Стъпка 8: Node-red: Flow _1a

Червен възел: Поток _1a
Червен възел: Поток _1a

Потокът _1a, следи всички промени във CSV файла и въз основа на промените, т.е. открито въздействие, видеозаписът от камерата е включен и допълнително потребителят е информиран по интернет, че е настъпило въздействие

Стъпка 9: Червен възел: Flow_1b

Червен възел: Flow_1b
Червен възел: Flow_1b

В споменатия поток видеозаписът може да започне във всяка точка, като просто натиснете джойстика

Стъпка 10: Червен възел: Flow_2a

Червен възел: Flow_2a
Червен възел: Flow_2a

В споменатия поток, когато всяка нова снимка или видео се съхранява/качва в директорията, информацията се предава на регистрирания потребител през интернет

Стъпка 11: Червен възел: Flow_2b

Червен възел: Flow_2b
Червен възел: Flow_2b

Този поток е предназначен предимно за отдалечен потребител, така че да управлява устройството по следния начин

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

б) правите снимки

в) Записвайте видеоклипове

г) стартиране на основния код (кодът на регистратора на данни е основният код, който изчислява въздействието)

Стъпка 12: Node Red; Поток_3

Червен възел; Поток_3
Червен възел; Поток_3

Потокът е предназначен за локален достъп, така че да стартира основния код или устройството за изключване

Стъпка 13: MQTT

MQTT (Message Queuing Telemetry Transport) е TCP/IP протокол, при който издателят и абонатът си взаимодействат.

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

По този начин при генериране на всяко въздействие информацията се предава дистанционно на потребителя (задължителна е работеща интернет връзка)

Повече информация за MQTT можете да получите от следната връзка: MQTT

За да започнем да използваме MQTT, първо трябва да се регистрираме, за урока съм използвал cloudmqtt (www.cloudmqtt.com), има безплатен план под „сладка котка“, това е всичко.

След като се регистрирате, създайте екземпляр, кажете „pi“, след което ще получите следните подробности

  • Име на сървъра
  • пристанище
  • потребителско име
  • парола

Горепосочените са необходими при абониране чрез мобилен телефон/компютър

За моето приложение използвах приложение MQTT от Google Play Store (версия за Android)

Стъпка 14: MQTT: Абонат

MQTT: Абонат
MQTT: Абонат

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

Въздействието, открито върху pi, се предава обратно

Стъпка 15: MQTT: Редактиране на свойства в Node-red

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

В 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 импортиране на SenseHat от datetime импортиране datetime от csv импортиращ запис import RPi. GPIO като GPIO от time sleep импорт

sense = SenseHat ()

импортиране на csv

timestamp = datetime.now ()

забавяне = 5 // забавянето е дефинирано за съхраняване на данни във файл data.csv червено = (255, 0, 0) зелено = (0, 255, 0) жълто = (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 (acc ["z"])

жироскоп = смисъл.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)

жироскоп = смисъл.get_gyroscope_raw ()

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

жирокс = кръг (жирокс, 2)

gyroy = кръгъл (gyroy, 2) gyroz = кръгъл (gyroz, 2)

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

ако x> 1,5 или y> 1,5 или z> 1,5: // стойностите се задават след повторението на действителния път, могат да бъдат съответно променени за различни типове и шофьорски умения с отворен ('impact.csv', 'w', newline = ' ') като f: data_writer = писател (f) data_writer.writerow ([' acc x ',' acc y ',' acc z ',' gyro x ',' gyro y ',' gyro z ']) #GPIO. изход (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 = писател (е) 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 (въздействие)

иначе:

# 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 (ориентация ["yaw"]) sense_data.append (ориентация ["височина"]) sense_data.append (ориентация ["roll"])

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"])

жироскоп = смисъл.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

с отворен ('data.csv', 'w', newline = '') като f:

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

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 '])

докато е вярно:

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 = кръг (x, 0) y = кръг (y, 0) z = кръг (z, 0)

# Актуализирайте завъртането на дисплея в зависимост от това нагоре ако 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_temperature () 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 = кръг (x, 0) y = кръг (y, 0) z = кръг (z, 0)

# Актуализирайте завъртането на дисплея в зависимост от това нагоре ако 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 = кръг (h, 1) message = "H:" + str (з) 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 == "наляво":

#ускорение = sense.get_accelerometer_raw () #x = ускорение ['x'] #y = ускорение ['y'] #z = ускорение ['z'] #x = кръг (x, 0) #y = кръг (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 == "надясно": # sense.show_letter ("K") # Стрелка надясно # elif event.direction == "middle": # sense.clear ()

въздействие ()

данни = get_sense_data ()

dt = данни [-1] - времева отметка, ако dt.seconds> забавяне: data_writer.writerow (данни) времева марка = datetime.now ()

Стъпка 18: Наблюдение на видео на живо

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

бихме използвали VLC плейър за поточно предаване на видеоклипове, по подразбиране в последния raspbian VLC е предварително инсталиран, иначе инсталирайте vlc както под

Повече информация за гледане на мрежовия поток може да бъде достъпна чрез VLC Network stream

Благодаря ви за четенето !!

Записващото устройство може да направи много повече.

Внимавайте за следващото пространство за анализ на магнитното поле при извършване на картиране на препятствия

Препоръчано: