Съдържание:
- Стъпка 1: Части и аксесоари
- Стъпка 2: Описание на частите: Sense Hat
- Стъпка 3: Сглобяване: Рекордер на въздействието
- Стъпка 4: Сглобяване: Рекордер на въздействието на таблото на автомобила
- Стъпка 5: Рекордер на въздействие: Работа и приложения
- Стъпка 6: Описание на софтуера: Node Red
- Стъпка 7: Основи на Node-red
- Стъпка 8: Node-red: Flow _1a
- Стъпка 9: Червен възел: Flow_1b
- Стъпка 10: Червен възел: Flow_2a
- Стъпка 11: Червен възел: Flow_2b
- Стъпка 12: Node Red; Поток_3
- Стъпка 13: MQTT
- Стъпка 14: MQTT: Абонат
- Стъпка 15: MQTT: Редактиране на свойства в Node-red
- Стъпка 16: Кодът на Python:
- Стъпка 17: Окончателният код
- Стъпка 18: Наблюдение на видео на живо
Видео: Рекордер на удари за превозни средства: 18 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Рекордерът на удари е проектиран да записва удари, претърпени върху превозното средство, докато шофирате или стоите неподвижно. Въздействията се съхраняват в базата данни под формата на показания, както и видео/картина. Отдалеченият потребител при въздействие може да бъде проверен в реално време, а отдалеченият потребител може след това да гледа записаното видео или да вземе отдалечен достъп до камерата pi и да наблюдава съответно събитията.
Стъпка 1: Части и аксесоари
(1) Raspberry Pi 3 или по -добър: Изисква се изчислителна мощност
(2) Малина pi чувствена шапка
(3) Raspberry pi камера / USB камера
(4) Карта с памет с най -новото raspbian изображение (Трябва да поддържа червен възел, почти всяко последно изображение го прави)
(5) Захранване поне 2.1 A (използвал съм батерия за самостоятелна работа в колата)
Стъпка 2: Описание на частите: Sense Hat
Sense HAT има 8 × 8 RGB LED матрица, джойстик с пет бутона и включва следните сензори:
- Жироскоп
- Акселерометър
- Магнитометър
- Температура
- Барометричен
- налягане
- Влажност
Повече информация за работата със сензор може да бъде получена от следните връзки: Sense_Hat
API за sense hat се хоства на адрес: Sense_hat_API
Кодът за програмиране със сензорна шапка е разгледан в по-късните стъпки. Кодът на Sense hat може също да бъде симулиран на симулатор, хостван на адрес: Sense-hat simulator
Стъпка 3: Сглобяване: Рекордер на въздействието
- Сглобяването е по -лесно, тъй като сензорната шапка трябва да бъде подредена върху 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, следи всички промени във CSV файла и въз основа на промените, т.е. открито въздействие, видеозаписът от камерата е включен и допълнително потребителят е информиран по интернет, че е настъпило въздействие
Стъпка 9: Червен възел: Flow_1b
В споменатия поток видеозаписът може да започне във всяка точка, като просто натиснете джойстика
Стъпка 10: Червен възел: Flow_2a
В споменатия поток, когато всяка нова снимка или видео се съхранява/качва в директорията, информацията се предава на регистрирания потребител през интернет
Стъпка 11: Червен възел: Flow_2b
Този поток е предназначен предимно за отдалечен потребител, така че да управлява устройството по следния начин
а) устройство за изключване
б) правите снимки
в) Записвайте видеоклипове
г) стартиране на основния код (кодът на регистратора на данни е основният код, който изчислява въздействието)
Стъпка 12: Node Red; Поток_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, работещо на мобилни устройства (версия за Android)
Въздействието, открито върху pi, се предава обратно
Стъпка 15: 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
Благодаря ви за четенето !!
Записващото устройство може да направи много повече.
Внимавайте за следващото пространство за анализ на магнитното поле при извършване на картиране на препятствия
Препоръчано:
PCB: GPS и GSM базирана система за проследяване на превозни средства: 3 стъпки
PCB: GPS и GSM базирана система за проследяване на превозни средства: GPS и GSM базирана система за проследяване на превозни средства 30 юни 2016 г., инженерни проекти Проектът GPS и GSM базирана система за проследяване на превозни средства използва глобална система за позициониране (GPS) и глобална система за мобилна комуникация (GSM), която прави този проект по -е
Система за проследяване на превозни средства: 6 стъпки
Система за проследяване на превозни средства: базирана на Arduino система за проследяване на превозни средства, използваща глобална система за позициониране (GPS) и глобална система, използваща GSM модули. Използваният тук GSM модем със SIM карта използва за комуникационната техника. Системата може да бъде инсталирана или скрита във вашия автомобил. След като аз
Алармена система за паркиране на превозни средства с помощта на PIR сензор- Направи си сам: 7 стъпки (със снимки)
Алармена система за паркиране на превозни средства с помощта на PIR сензор- Направи си сам: Имали ли сте някога проблеми, докато паркирате превозно средство като кола, камион, мотоциклет или друго, тогава в тази инструкция ще ви покажа как да преодолеете този проблем с помощта на обикновена аларма за паркиране на превозни средства система, използваща PIR сензор. В тази система, която
Температурен сензор/манометър на двигателя с безжична сонда за класически превозни средства: 7 стъпки
Сензор за температура/измервател на двигателя с безжична сонда за класически превозни средства: Направих тази сонда за моя прекрасен Çipitak. Автомобил fiat 126 с 2 -цилиндров двигател с въздушно охлаждане под задния капак. Çipitak няма температурен индикатор, показващ колко горещ е двигателят, затова си помислих, че сензорът ще бъде полезен. Също така исках сензорът да бъде жичен
Пълна базирана на Arduino GPS+GPRS система против кражба на превозни средства: 5 стъпки (със снимки)
Пълна базирана на Arduino Vehicle GPS+GPRS система против кражба -няма какво друго да се прави, така че в крайна сметка създадох решение на базата на Arduino