Мазмуну:

Транспорт каражаттарынын таасири: 18 кадам (сүрөттөр менен)
Транспорт каражаттарынын таасири: 18 кадам (сүрөттөр менен)

Video: Транспорт каражаттарынын таасири: 18 кадам (сүрөттөр менен)

Video: Транспорт каражаттарынын таасири: 18 кадам (сүрөттөр менен)
Video: АЯЛДЫ КАНТИП КАНДЫРЫШ КЕРЕК КӨРГҮЛӨ! 2024, Сентябрь
Anonim
Транспорт каражаттарынын таасири жазгыч
Транспорт каражаттарынын таасири жазгыч

Impact Recorder унаа айдап баратканда же токтоп турганда тийген соккуларды жазуу үчүн иштелип чыккан. Таасирлер маалымат базасында окуу, ошондой эле видео/сүрөт түрүндө сакталат. Алыстан колдонуучу реалдуу убакытта ырасталышы мүмкүн, ал эми алыскы колдонуучу сакталган видеону көрүүгө же пи камерага алыстан жетүүгө жана окуяларды көрүүгө болот..

1 -кадам: Бөлүктөр жана аксессуарлар

(1) Raspberry Pi 3 же андан жакшыраак: эсептөө күчү талап кылынат

(2) Raspberry pi сезим шляпасы

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

(4) Акыркы raspbian сүрөтү менен эстутум картасы (Кызыл түйүндү колдошу керек, дээрлик ар бир акыркы сүрөт)

(5) Энергия менен камсыздоо-жок дегенде 2,1 А (мен машинада автономдуу иштөө үчүн батарея банкын колдондум)

2 -кадам: Бөлүктөр Description: Sense Hat

Бөлүктөрдүн Description: Sense Hat
Бөлүктөрдүн Description: Sense Hat

Sense HAT 8 × 8 RGB LED матрицасына, беш баскычтуу джойстикке ээ жана төмөнкү сенсорлорду камтыйт:

  • Гироскоп
  • Акселерометр
  • Магнитометр
  • Температура
  • Барометрдик
  • басым
  • Нымдуулук

Сезим шляпа менен иштөө боюнча көбүрөөк маалыматты төмөнкү шилтемелерден алса болот: Sense_Hat

Сезим шляпа үчүн API төмөнкү жерде жайгашкан: Sense_hat_API

Маани-шляпа программалоо коду кийинки кадамдарда камтылган. Sense шляпа кодун симуляторго окшоштурууга болот: Sense-hat симулятору

3 -кадам: Кураштыруу: Таасир жазгыч

Кураштыруу: Таасир жазгыч
Кураштыруу: Таасир жазгыч
Кураштыруу: Таасир жазгыч
Кураштыруу: Таасир жазгыч
Кураштыруу: Таасир жазгыч
Кураштыруу: Таасир жазгыч
Кураштыруу: Таасир жазгыч
Кураштыруу: Таасир жазгыч
  • Куроо жөнөкөй, анткени маани шляпаны пи үстүнө тыгып коюу керек (белгиленген монтаж болттору маани шляпа менен камсыздалган).
  • USB камера же пи камера туташтырылышы мүмкүн. Үйрөткүчтө pi камерасы каралат жана ошого жараша коддоо жүргүзүлөт.
  • Эстутум картасын салыңыз жана python кодун жана node -redди конфигурациялаңыз (конфигурация жана код кийинки кадамдарда камтылган)

Жогорудагы сүрөттө пи-камера жалпак лента кабели аркылуу piге туташтырылган

4 -кадам: Кураштыруу: Автоунаа тактасына таасир жаздыргыч

Кураштыруу: Автоунаа тактасына таасир жаздыргыч
Кураштыруу: Автоунаа тактасына таасир жаздыргыч

Жаздыргычты орнотуу үчүн, мен эки тараптуу лента колдонгом, анын артыкчылыгы - жаздыргычты ар кандай абалга оңой жылдырууга болот, кайсынысы сиздин машинаңызга ылайыктуу.

Андан ары камера тигил эки жактуу скотчтун жардамы менен көрсөтүлгөндөй тигинен орнотулган, Кийинки кезекте даяр интернет байланышы менен бирге энергия булагын (10 000 мАч кубат банкы) туташтыруу

MQTT тиркемеси үчүн Интернет байланышы талап кылынат (MQTT үчүн деталдар кийинки кадамдарда камтылган)

5 -кадам: Impact Recoder: жумушчу жана колдонмолор

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

Акселерометр: Акселерометр x, y & z огунун ар биринде иштеген гравитациялык күчтүн (G-күчүнүн) көлөмүн айтат, эгерде кандайдыр бир огу 1G күчүнөн чоң болсо, ылдам кыймылды аныктоого болот. (ылдый караган огунун 1г мааниге ээ болорун жана ошого жараша python кодунда каралышы керек экенин эске алыңыз).

Гироскоп; Гироскоп бурчтук кыймылды өлчөө үчүн колдонулат, башкача айтканда, чукул бурулуу учурунда сенсор ишке кириши мүмкүн (коддогу жөнгө салууга жараша болот), андыктан унааны чукул бурган адам кармалып калат !!

Белгиленген чекти ар кандай активдештирүү сезүү шляпасынын LED матрицасында "!" Деп көрсөтүлөт. ылдамдануу үчүн кызыл жана жашыл гироскопту иштетүү үчүн

6 -кадам: Программанын сүрөттөмөсү: Node Red

Node-RED-бул негизинен IBMдин өнүгүп келе жаткан технологиялар сервиси тарабынан иштелип чыккан, азыр JS фондунун бир бөлүгү.

Кызыл түйүн жөнүндө көбүрөөк маалыматты төмөнкү шилтеме аркылуу алууга болот: node-red

Биздин учурда, биз төмөнкү аракеттер үчүн node -red колдонмокпуз

(1) камера функцияларын баштоо үчүн джойстиктер менен өз ара аракеттенүү

(2) Транспорт каражаттарына тийгизген таасирин көзөмөлдөө жана маалыматты акыркы колдонуучуга жеткирүү MQTTди колдонуу жана андан ары MQTT аркылуу акыркы колдонуучунун буйруктарын кабыл алуу жана пи боюнча керектүү тиркемени баштоо.

(3) Пиди өчүрүү сыяктуу кээ бир негизги нерселерди аткаруу

Кийинки кадамдар түйүн-кызылда ишке ашырылган агым диаграммасы үчүн толук маалыматты берет

Сураныч, түйүн-кызыл агым диаграммалары python коду менен өз ара аракеттенет, андыктан акыркы бөлүгү python кодунун аспектилерин камтыйт

7-кадам: Түйүндүн кызыл негиздери

Node-red Basics
Node-red Basics
Node-red Basics
Node-red Basics
Node-red Basics
Node-red Basics

Кээ бир Негизги кадамдар Node-red'ди бир заматта баштоо үчүн баса белгиленет, бирок ооба node-red тиркемелерди иштетүү жана иштеп чыгуу үчүн өтө жөнөкөй.

  • Node-red баштап: https:// localhost: 1880.
  • Пи интернетке туташканда Node-red башталат https:// ip address>: 1880

8-кадам: Node-red: Flow _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

Бул агым биринчи кезекте алыстан колдонуучу үчүн иштелип чыккан, ошондуктан аппаратты төмөнкүдөй түрдө башкарат

(а) өчүрүү түзмөгү

(б) сүрөткө тартуу

(с) Видеолорду жазуу

(г) баштоочу негизги код (datalogger коду - бул таасирди эсептөөчү негизги код)

12 -кадам: Кызыл түйүн; Flow_3

Кызыл түйүн; Flow_3
Кызыл түйүн; Flow_3

Негизги кодду же өчүрүү түзмөгүн баштоо үчүн, агым жергиликтүү жетүү үчүн иштелип чыккан

13 -кадам: MQTT

MQTT (Message Queuing Telemetry Transport) - бул TCP/IP протоколу, анда жарчы менен абонент өз ара аракеттенишет.

Биздин учурда Pi - жарыялоочу, ал эми биздин мобилдик/PCке орнотулган тиркеме абонент болот.

Ошентип, кандайдыр бир таасирди жаратууда, маалымат алыстан колдонуучуга жеткирилет (иштеп жаткан интернет байланышы керек)

MQTT жөнүндө көбүрөөк маалыматты төмөнкү шилтемеден алууга болот: MQTT

MQTT колдонууну баштоо үчүн, адегенде каттоодон өтүшүбүз керек, мен cloudmqtt (www.cloudmqtt.com) колдонгон окуу куралы үчүн "сүйкүмдүү мышыктын" акысыз планы бар, баары ушул.

Катталгандан кийин мисал түзүңүз, "pi" деп айтыңыз, андан кийин сиз төмөнкү деталдарды аласыз

  • Сервердин аты
  • порт
  • колдонуучунун аты
  • купуя сөз

Жогоруда айтылгандар мобилдик/компьютер аркылуу жазылуу учурунда талап кылынат

Колдонмо үчүн мен Google Play дүкөнүнөн MQTT тиркемесин колдондум (Android версиясы)

14 -кадам: MQTT: Абонент

MQTT: Абонент
MQTT: Абонент

MQTT тиркемеси мобилдик телефондо иштейт (Android версиясы)

Пи боюнча аныкталган сокку артка кайтарылат

15-кадам: MQTT: Сыпаттарды Red-Node менен түзөтүү

MQTT: Node-red менен касиеттерди түзөтүү
MQTT: Node-red менен касиеттерди түзөтүү

MQTT түйүнү тандалгандан кийин түйүн-кызыл түстө "Сервердин аты" жана "тема" айтылат. Бул абоненттин аягында бирдей болушу керек

16 -кадам: Python коду:

Коддун иштеши тиркелген схемага ылайык

17 -кадам: Акыркы код

Питон коду тиркелет

Питон скриптибизди терминалдан иштетүү үчүн, аларды chmod +x datalogger.py катары аткарылышы керек, андыктан коддун үстү жагында төмөнкү "shebang" сапы #болушу керек! /usr/bin/python3 (бул түйүн-кызылдан функцияларды аткаруу үчүн керек)

№!

сезим = SenseHat ()

csv импорттоо

убакыт белгиси = 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 ()

маани_импакт.акшыруу (гиро ["x"]) маани_ымпакт.акшыруу (гиро ["y"]) маани_ымпакт.акшыруу (гиро ["z"])

кайтаруу мааниси_импакт

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 ()

гирокс = гиро ["x"] гиро = гиро ["y"] гироз = гиро ["z"]

гирокс = тегерек (гирокс, 2)

гиро = тегерек (гирой, 2) гироз = тегерек (гироз, 2)

таасир = get_sense_impact ()

Эгерде x> 1.5 же y> 1.5 же z> 1.5: // баалуулуктар чыныгы жолдо кайталангандан кийин коюлат, ошого жараша ар кандай түрлөрү жана айдоочулук көндүмдөрү үчүн ачык түрдө өзгөртүлүшү мүмкүн ('effect.csv', 'w', newline = ' ') f катары: data_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 or gyroz> 1.5: // маанилер f: data_writer катары ачык ('effect.csv', 'w', newline = '') менен бурулуштун ылдамдыгына карап коюлат. = жазуучу (f) data_writer.writerow (['acc x', 'acc y', 'acc z', 'gyro x', 'gyro y', 'gyro z']) #GPIO.output (4, GPIO. HIGH) сезим.тушунуктуу () сезим.шоу_кат ("!", Жашыл) data_writer.writerow (таасир)

башка:

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

def get_sense_data (): // функция sensor маанилерин жазуу жана сактоо үчүн sense_data =

маани_маалыматтар

багыттоо = мааниде.get_orientation ()

sense_data.append (ориентация ["yaw"]) сезим_маалыматы

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 (гиро ["x"]) сезим_маалыматы

sense_data.append (datetime.now ())

return_data

ачык ('data.csv', 'w', newline = '') менен f:

data_writer = жазуучу (f)

data_writer.writerow (['темп', 'pres', 'hum', 'yaw', 'pitch', 'roll', 'acc x', 'acc y', 'acc z', 'mag x', ' маг y ',' mag z ',' gyro x ',' gyro y ',' gyro z ',' datetime '])

чын болсо:

print (get_sense_data ()) in event in sense.stick.get_events (): # Event.action == "pressed" болсо, джойстик басылганын текшериңиз: # Event.direction == "өйдө" болсо, кайсы багытты текшериңиз: # сезим.show_letter ("U") # Өйдө жебе ылдамдатуу = мааниде.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)) башка: sense.set_rotation (0) sense.clear () t = sense.get_temperature () t = round (t, 1) message = "T:" + str (t) sense.show_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)

# Дисплейдин айлануусун жаңыртыңыз, эгерде x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180)) башка: sense.set_rotation (0) # sense.show_letter ("D") # Төмөн жебе sense.clear () h = сезим.get_humidity () h = тегерек (h, 1) билдирүү = "H:" + str (з) маани.шоу_сабаты (билдирүү, текст_түсү = жашыл, scroll_speed = 0.09) p = sense.get_pressure () p = тегерек (p, 1) билдирүү = "P:" + str (p) sense.show_message (билдирүү, text_colour = сары, scroll_speed = 0.09)

# elif event.direction == "солго":

#ылдамдануу = мааниде.get_accelerometer_raw () #x = ылдамдануу ['x'] #y = ылдамдануу ['y'] #z = ылдамдануу ['z'] #x = тегерек (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) # башка: 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] - timtamp if dt.seconds> delay: data_writer.writerow (data) timestamp = datetime.now ()

18 -кадам: Live Video мониторинг

Impact Recorderди видеону каалаган убакта MQTT аркылуу каалаган жерден баштаса болот, түз видеону көзөмөлдөө үчүн да колдонсо болот

Биз видеолорду агылтуу үчүн VLC ойноткучун колдонобуз, демейки боюнча, акыркы raspbianде VLC алдын ала орнотулган, башка учурда vlcти төмөнкүдөй орнотуңуз

Тармак агымын көрүү жөнүндө көбүрөөк маалыматка VLC Network агымы аркылуу кирүүгө болот

Окуганыңыз үчүн рахмат !!

Эффект жазгычтын дагы кыла турган иштери көп..

Тоскоолдуктарды картага түшүрүү үчүн магнит талаасынын анализи үчүн кийинки боштукту байкаңыз

Сунушталууда: