Mundarija:

Avtomobillar uchun zarba yozuvchisi: 18 qadam (rasmlar bilan)
Avtomobillar uchun zarba yozuvchisi: 18 qadam (rasmlar bilan)

Video: Avtomobillar uchun zarba yozuvchisi: 18 qadam (rasmlar bilan)

Video: Avtomobillar uchun zarba yozuvchisi: 18 qadam (rasmlar bilan)
Video: Самаркандлик ам товба 2024, Iyul
Anonim
Avtomobillar uchun zarba yozuvchisi
Avtomobillar uchun zarba yozuvchisi

Impact Recorder avtomobil haydash paytida yoki harakatsiz holatda bo'lgan zarbalarni qayd etish uchun mo'ljallangan. Ta'sirlar ma'lumotlar bazasida o'qish, shuningdek video/rasm ko'rinishida saqlanadi. Uzoq masofali foydalanuvchi real vaqtda tekshirilishi mumkin, va masofali foydalanuvchi saqlangan videoni tomosha qilishdan yoki pi kameraga masofadan kirishni va shunga ko'ra voqealarni ko'rishni ko'ra oladi..

1 -qadam: ehtiyot qismlar va aksessuarlar

(1) Raspberry Pi 3 yoki undan yuqori: Hisoblash kuchi talab qilinadi

(2) Raspberry pi sezgir shlyapa

(3) Raspberry pi kamera / Usb kamera

(4) so'nggi ruscha tasvirli xotira kartasi (qizil tugunni qo'llab -quvvatlashi kerak, deyarli har bir so'nggi rasm)

(5) kamida 2,1 A quvvat manbai (men avtoulovda avtonom ishlash uchun akkumulyator bankidan foydalanganman)

2 -qadam: qismlar tavsifi: Sense Hat

Qismlarning tavsifi: Sense Hat
Qismlarning tavsifi: Sense Hat

Sense HAT 8 × 8 RGB LED matritsasi, besh tugmachali joystikka ega va quyidagi sensorlarni o'z ichiga oladi:

  • Gyroskop
  • Akselerometr
  • Magnitometr
  • Harorat
  • Barometrik
  • bosim
  • Namlik

His -shlyapa bilan ishlash haqida qo'shimcha ma'lumotni quyidagi havolalardan olish mumkin: Sense_Hat

Sense shapka uchun API quyidagi manzilda joylashgan: Sense_hat_API

His-shlyapa dasturlash kodi keyingi bosqichlarda yoritilgan. Sense shlyapa kodini simulyatorda simulyatsiya qilish mumkin: Sense-hat simulyatori

3 -qadam: yig'ish: zarba yozuvchisi

O'rnatish: zarba yozuvchisi
O'rnatish: zarba yozuvchisi
O'rnatish: zarba yozuvchisi
O'rnatish: zarba yozuvchisi
O'rnatish: zarba yozuvchisi
O'rnatish: zarba yozuvchisi
O'rnatish: zarba yozuvchisi
O'rnatish: zarba yozuvchisi
  • O'rnatish osonroq, chunki sezgichli shlyapani pi ustiga yopishtirish kerak (belgilangan murvat bolt bilan ta'minlangan).
  • USB kamera yoki pi kamera ulanishi mumkin. Qo'llanmada pi kamera ko'rib chiqiladi va shunga mos ravishda kodlash amalga oshiriladi.
  • Xotira kartasini joylashtiring va python kodini va tugun -qizilni sozlang (konfiguratsiya va kod keyingi bosqichlarda yoritilgan)

Yuqoridagi rasmda pi-kamera tekis lenta kabeli orqali pi ga ulangan

4 -qadam: Yig'ish: Mashinaning boshqaruv paneliga zarba yozuvchisi

Yig'ish: Mashinaning boshqaruv panelidagi zarba yozuvchisi
Yig'ish: Mashinaning boshqaruv panelidagi zarba yozuvchisi

Yozish moslamasini o'rnatish uchun men ikki tomonlama lentani ishlatardim, uning afzalligi shundaki, magnitafonni har xil holatga o'tkazish mumkin, qaysi biri sizning mashinangizga mos bo'lsa.

Boshqa kamera ko'rsatilgandek vertikal ravishda o'rnatiladi, xuddi shu ikki tomonlama tasma yordamida, Keyingi navbatda quvvat manbai (10 000 mA / soat quvvat banki) va tayyor Internet aloqasi

MQTT ilovasi uchun Internetga ulanish talab qilinadi (MQTT tafsilotlari keyingi bosqichlarda yoritilgan)

5 -qadam: Ta'sirni yozuvchi: Ishlash va ilovalar

Hissiy shlyapa, akseleratsiya va giroskop yordamida xom qiymatlarning kodda belgilangan chegaradan oshib ketmaganligini tekshirish mumkin.

Akselerometr: akselerometr x, y va z o'qlarining har biriga ta'sir qiladigan tortishish kuchi (G-kuchi) miqdorini ko'rsatadi, agar har qanday o'q 1G kuchdan katta bo'lsa, tez harakat aniqlanishi mumkin. (E'tibor bering, pastga qaragan o'q 1g qiymatiga ega bo'ladi va shunga mos ravishda python kodida hisobga olinishi kerak).

Giroskop; Gyroskop burchak harakatini o'lchash uchun ishlatiladi, ya'ni keskin burilish paytida sensor ishga tushishi mumkin (koddagi sozlamalarga bog'liq), shuning uchun mashinani keskin aylantirgan odam ushlanib qoladi!

Belgilangan chegaraning har qanday faollashtirilishi, shuningdek, LED matritsasida "!" Belgisi bilan ko'rsatiladi. tezlashtirish uchun qizil rangda va gyroskopni faollashtirish uchun yashil rangda

6 -qadam: Dastur tavsifi: Qizil tugun

Node-RED-bu oqimga asoslangan dasturlash vositasi bo'lib, dastlab IBMning Rivojlanayotgan Texnologiyalari Servicesteam kompaniyasi tomonidan ishlab chiqilgan va hozirda JS Jamg'armasi tarkibiga kiradi.

Qizil tugun haqida qo'shimcha ma'lumotni quyidagi havola orqali olish mumkin: node-red

Bizning holatimizda biz quyidagi amallar uchun node -red dan foydalangan bo'lardik

(1) kamera funksiyalarini ishga tushirish uchun joystiklar bilan ishlash

(2) Avtotransport vositalariga ta'sirini kuzatish va ma'lumotni oxirgi foydalanuvchiga MQTT -dan foydalanish va MQTT orqali oxirgi foydalanuvchi buyruqlarini qabul qilish va pi -da kerakli dasturni ishga tushirish.

(3) pi -ni o'chirish kabi ba'zi asosiy ishlarni bajarish

Keyingi qadamlar tugun-qizil ustida bajarilgan oqim diagrammasi uchun batafsil ma'lumot beradi

E'tibor bering, tugun-qizil oqim sxemalari python kodi bilan o'zaro ta'sir qiladi, shuning uchun oxirgi qismi python kodining aspektlarini qamrab oladi

7-qadam: Qizil tugunli asoslar

Qizil tugunli asoslar
Qizil tugunli asoslar
Qizil tugunli asoslar
Qizil tugunli asoslar
Qizil tugunli asoslar
Qizil tugunli asoslar

Qizil tugunni bir zumda boshlash uchun ba'zi asosiy qadamlar ajratilgan, lekin ha tugun-qizil dasturlarni ishga tushirish va ishlash uchun juda oddiy.

  • Bosh tugun-qizil: https:// localhost: 1880.
  • Pi Internetga ulanganda tugun-qizil boshlanishi https:// ip address>: 1880

8-qadam: Qizil tugun: Oqim _1a

Qizil tugun: oqim _1a
Qizil tugun: oqim _1a

Flow _1a, CSV faylidagi har qanday o'zgarishlarni kuzatib boradi va o'zgarishlar asosida, ya'ni ta'sir aniqlanganda, kamerada video yozib olish rejimi yoqiladi va foydalanuvchiga ta'sir sodir bo'lganligi haqida internet orqali xabar qilinadi.

9 -qadam: Qizil tugun: Flow_1b

Qizil tugun: Flow_1b
Qizil tugun: Flow_1b

Aytgancha, video yozishni joystikni bosish orqali istalgan vaqtda boshlash mumkin

10 -qadam: Qizil tugun: Flow_2a

Qizil tugun: Flow_2a
Qizil tugun: Flow_2a

Yuqorida aytilganidek, har qanday yangi rasm yoki video katalogga saqlansa/yuklansa, ma'lumot internet orqali ro'yxatdan o'tgan foydalanuvchiga uzatiladi.

11 -qadam: Qizil tugun: Flow_2b

Qizil tugun: Flow_2b
Qizil tugun: Flow_2b

Bu oqim asosan masofali foydalanuvchi uchun mo'ljallangan bo'lib, qurilmani quyidagi tartibda boshqaradi

a) o'chirish moslamasi

b) suratga olish

(c) video yozib olish

(d) asosiy kodni ishga tushirish (ma'lumotlar katalogi kodi - ta'sirni hisoblaydigan asosiy kod)

12 -qadam: Qizil tugun; Oqim_3

Qizil tugun; Oqim_3
Qizil tugun; Oqim_3

Asosiy kod yoki o'chirish qurilmasini ishga tushirish uchun oqim mahalliy kirish uchun mo'ljallangan

13 -qadam: MQTT

MQTT (Message Queuing Telemetry Transport) - bu TCP/IP protokoli bo'lib, unda noshir va abonent o'zaro aloqada bo'ladi.

Bizning holatimizda Pi - bu nashriyotchi, bizning mobil kompyuterimizda o'rnatilgan dastur - abonent.

Shunday qilib, har qanday ta'sir paydo bo'lganda, ma'lumot masofadan turib foydalanuvchiga uzatiladi (ishlayotgan Internet aloqasi bo'lishi shart).

MQTT haqida qo'shimcha ma'lumotni quyidagi havola orqali olish mumkin: MQTT

MQTT -dan foydalanishni boshlash uchun biz avval ro'yxatdan o'tishimiz kerak, men cloudmqtt (www.cloudmqtt.com) dan foydalangan darslik uchun "yoqimli mushuk" ostida bepul reja bor, hammasi shu.

Ro'yxatdan o'tgandan so'ng, misol yarating, "pi" deb ayting, shundan so'ng siz quyidagi ma'lumotlarni olasiz

  • Server nomi
  • port
  • foydalanuvchi nomi
  • parol

Yuqorida aytilganlar mobil/shaxsiy kompyuter orqali obuna bo'lganda talab qilinadi

Mening ilovam uchun Google Play do'konidagi MQTT ilovasidan foydalanganman (Android versiyasi)

14 -qadam: MQTT: Abonent

MQTT: obunachi
MQTT: obunachi

Mobil qurilmalarda ishlaydigan MQTT dasturi (Android versiyasi)

Pi ga aniqlangan zarba orqaga qaytariladi

15-qadam: MQTT: Xususiyatlarni tugun-qizil rangda tahrirlash

MQTT: Xususiyatlarni tugun-qizil rangda tahrirlash
MQTT: Xususiyatlarni tugun-qizil rangda tahrirlash

MQTT tugunini tanlagandan so'ng qizil-qizil rangda "Server nomi" va "mavzu" ko'rsatiladi. Bu obunachilar uchun ham bir xil bo'lishi kerak.

16 -qadam: Python kodi:

Kodning funktsional imkoniyatlari biriktirilgan sxemaga muvofiq

17 -qadam: Yakuniy kod

Python kodi biriktirilgan

Python skriptimizni terminaldan ishga tushirish uchun ularni chmod +x datalogger.py sifatida bajarilishini ta'minlashimiz kerak, bundan tashqari kodning yuqori qismida quyidagi "shebang" qatori #bo'lishi kerak! /usr/bin/python3 (bu tugun-qizil funktsiyalarni bajarish uchun kerak)

#!/usr/bin/python3 // shebang linefrom sense_hat import datetime dan datetime import csv import yozuvchisi import RPi. GPIO GPIO sifatida vaqtli import uyqusidan.

ma'no = SenseHat ()

csv import qilish

vaqt tamg'asi = datetime.now ()

kechikish = 5 // kechikish ma'lumotlarni saqlash uchun belgilanadi.csv fayli qizil = (255, 0, 0) yashil = (0, 255, 0) sariq = (255, 255, 0)

#GPIO.setmode (GPIO. BCM)

#GPIO. sozlash (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"])

gyro = ma'no.get_gyroscope_raw ()

sens_impact.append (gyro ["x"]) sense_impact.append (gyro ["y"]) sense_impact.append (gyro ["z"])

sense_impact -ga qaytish

def Impact (): // ta'sirni aniqlash funktsiyasi #GPIO.setmode (GPIO. BCM) #GPIO.setup (4, GPIO. OUT) tezlashtirish = sense.get_accelerometer_raw () x = tezlashtirish ['x'] y = tezlashtirish ['y'] z = tezlanish ['z'] x = abs (x) y = abs (y) z = abs (z)

gyro = ma'no.get_gyroscope_raw ()

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

gyrox = dumaloq (gyrox, 2)

gyroy = dumaloq (gyroy, 2) gyroz = yumaloq (gyroz, 2)

ta'sir = get_sense_impact ()

agar x> 1.5 yoki y> 1.5 yoki z> 1.5: // haqiqiy yo'lda iteratsiyadan so'ng qiymatlar o'rnatilsa, mos ravishda har xil turdagi haydash ko'nikmalari uchun ochiq o'zgarishi mumkin ('shock.csv', 'w', newline = ' ') f sifatida: data_writer = yozuvchi (f) data_writer.writerow ([' acc x ',' acc y ',' acc z ',' gyro x ',' gyro y ',' gyro z ']) #GPIO. chiqish (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", qizil) data_writer.writerow (ta'sir)

elif gyrox> 1.5 yoki gyroy> 1.5 yoki gyroz> 1.5: // qiymatlar f: data_writer sifatida ochiq ('shock.csv', 'w', newline = '') bilan burilishlarning boshlanish tezligiga qarab belgilanadi. = yozuvchi (f) data_writer.writerow (['acc x', 'acc y', 'acc z', 'gyro x', 'gyro y', 'gyro z']) #GPIO.output (4, GPIO. YUQORI) sezgi.yaqqol () sezgi.shou_ xat ("!", Yashil) data_writer.writerow (ta'sir)

boshqa:

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

def get_sense_data (): // sensor sens_data qiymatlarini yozish va saqlash funktsiyasi =

sense_data.append (sense.get_temperature ()) sense_data.append (sense.get_pressure ()) sens_data.append (sense.get_humidity ())

yo'nalish = ma'no.get_orientation ()

sense_data.append (orientatsiya ["yaw"]) sense_data.append (orientatsiya ["pitch"]) sense_data.append (orientatsiya ["roll"])

acc = ma'no.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 = ma'no.get_gyroscope_raw ()

sens_data.append (gyro ["x"]) sens_data.append (gyro ["y"]) sens_data.append (gyro ["z"])

sense_data.append (datetime.now ())

sense_data -ni qaytarish

ochiq ('data.csv', 'w', newline = '') bilan f:

data_writer = yozuvchi (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 '])

rost bo'lsa:

print (get_sense_data ()) hodisa ma'nosida.stick.get_events (): # Eventstaction == "pressed" bo'lsa, joystick bosilganligini tekshiring: # Event.direction == "up" bo'lsa, qaysi yo'nalishni tekshiring: # his.shou_letter ("U") # Yuqoriga o'q tezlashuvi = sens.get_accelerometer_raw () x = tezlanish ['x'] y = tezlanish ['y'] z = tezlanish ['z'] x = yumaloq (x, 0) y = yumaloq (y, 0) z = yumaloq (z, 0)

# Displeyning aylanishini yangilang, agar x == -1: sens.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 (xabar, text_colour = qizil, scroll_speed = 0.09) elif event.direction == "pastga": tezlanish = sense.get_accelerometer_raw () x = tezlanish ['x'] y = tezlanish ['y'] z = tezlanish ['z'] x = yumaloq (x), 0) y = dumaloq (y, 0) z = yumaloq (z, 0)

# Displeyning aylanishini yangilang, agar x == -1: sens.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180)) else: sense.set_rotation (0) # sense.shou_letter ("D") # Pastga o'q sezgisi. aniq () h = sezish.get_umidity () h = yumaloq (h, 1) xabar = "H:" + str (h) sense.show_message (xabar, text_colour = yashil, scroll_speed = 0.09) p = sense.get_pressure () p = dumaloq (p, 1) xabar = "P:" + str (p) sens.shou_message (xabar, matn_ rangi) sariq, scroll_speed = 0.09)

# elif event.direction == "chapda":

#tezlanish = sense.get_accelerometer_raw () #x = tezlanish ['x'] #y = tezlanish ['y'] #z = tezlanish ['z'] #x = dumaloq (x, 0) #y = dumaloq (y, 0) #z = dumaloq (z, 0)

#Ekranning aylanishini yangilang, qaysi tomonga // yuqoriga qarab // ishlatilmaydi va qizil tugun bilan boshqarilmaydi #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") # Chap strelka # elif voqea.yo'nalishi == "o'ng": # sense.shou_letter ("K") # O'ng o'q # elif voqea.dir yo'nalishi == "o'rtada": # ma'no. Aniq ()

ta'sir ()

ma'lumotlar = get_sense_data ()

dt = ma'lumotlar [-1] - vaqt tamg'asi, agar dt.sekund> kechikish: data_writer.writerow (ma'lumotlar) vaqt tamg'asi = datetime.now ()

18 -qadam: Jonli videoni kuzatish

Impact Recorder -dan jonli videoni kuzatish uchun ham foydalanish mumkin, chunki MQTT orqali istalgan vaqtda videoni boshlash mumkin

biz videolarni oqimlash uchun VLC pleeridan foydalanardik, sukut bo'yicha oxirgi raspian tilida VLC oldindan o'rnatilgan, aks holda vlc ni quyida o'rnating.

Tarmoq oqimini ko'rish haqida qo'shimcha ma'lumotni VLC Network oqimi orqali olish mumkin

O'qiganingiz uchun tashakkur !!

Ta'sir yozuvchisi qila oladigan yana ko'p narsalar bor.

To'siqlar xaritasini tuzishda magnit maydonni tahlil qilish uchun keyingi joyni ko'rib chiqing

Tavsiya: