Mündəricat:
- Addım 1: Parçalar və Aksesuarlar
- Addım 2: Parçaların Təsviri: Sense Hat
- Addım 3: Quraşdırma: Zərbə Kaydedici
- Addım 4: Montaj: Avtomobilin İdarə Heyətinə Zərbə Kaydedici
- Addım 5: Təsir Recoder: İşləmə və Tətbiqlər
- Addım 6: Proqram Təsviri: Qırmızı Node
- Addım 7: Node-red əsasları
- Addım 8: Node-red: Flow _1a
- Addım 9: Qırmızı Node: Flow_1b
- Addım 10: Qırmızı Node: Flow_2a
- Addım 11: Qırmızı Node: Flow_2b
- Addım 12: Qırmızı Node; Flow_3
- Addım 13: MQTT
- Addım 14: MQTT: Abunəçi
- Addım 15: MQTT: Xüsusiyyətləri Node-red ilə redaktə edin
- Addım 16: Python Kodu:
- Addım 17: Son Kod
- Addım 18: Canlı Videonun İzlənməsi
Video: Nəqliyyat vasitələri üçün zərbə yazıcı: 18 addım (şəkillərlə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:45
Impact Recorder, avtomobil idarə edərkən və ya hərəkətsiz vəziyyətdə olarkən vurulan zərbələri qeyd etmək üçün nəzərdə tutulmuşdur. Təsirlər məlumat bazasında oxunuşlar şəklində, eləcə də video/şəkil şəklində saxlanılır. Uzaqdan təsir edən istifadəçi real vaxtda yoxlanıla bilər və uzaq istifadəçi saxlanan videoya baxmaqdan və ya pi kameraya uzaqdan daxil olmaqdan və hadisələri izləməkdən daha çox edə bilər..
Addım 1: Parçalar və Aksesuarlar
(1) Raspberry Pi 3 və ya daha yaxşı: Hesablama gücü tələb olunur
(2) Raspberry pi hiss şapka
(3) Raspberry pi kamera / Usb kamera
(4) Ən son raspbian şəkli olan yaddaş kartı (Qırmızı düyünü dəstəkləməlidir, demək olar ki, hər bir son görüntü yoxdur)
(5) Ən az 2,1 A enerji təchizatı (maşında müstəqil işləmək üçün batareya bankından istifadə etmişəm)
Addım 2: Parçaların Təsviri: Sense Hat
Sense HAT 8 × 8 RGB LED matrisə, beş düyməli joystickə malikdir və aşağıdakı sensorlar daxildir:
- Giroskop
- Akselerometr
- Maqnitometr
- Temperatur
- Barometrik
- təzyiq
- Rütubət
Hiss şapkası ilə işləmək haqqında daha çox məlumatı aşağıdakı bağlantılardan əldə etmək olar: Sense_Hat
Hiss şapkası üçün API: Sense_hat_API ünvanında yerləşdirilir
Hiss-şapka proqramlaşdırma kodu sonrakı mərhələlərdə əhatə olunacaq. Sense şapka kodu, həmçinin: Sense-hat simulyatorunda yerləşən bir simulyatorda da simulyasiya edilə bilər
Addım 3: Quraşdırma: Zərbə Kaydedici
- Montaj daha asandır, çünki hiss şapkasının pi üzərində yığılması lazımdır (təyin olunmuş montaj cıvataları hiss şapkası ilə təmin olunur).
- USB kamera və ya pi kamera qoşula bilər. Dərslikdə pi kamera nəzərdən keçirilir və buna görə də kodlaşdırma eyni şəkildə aparılır.
- Yaddaş kartını daxil edin və python kodunu və node -red konfiqurasiya edin (konfiqurasiya və kod sonrakı addımlarda əhatə olunur)
Yuxarıdakı şəkil, pi lentə düz lent kabel vasitəsilə bağlanan pi-kameranı göstərir
Addım 4: Montaj: Avtomobilin İdarə Heyətinə Zərbə Kaydedici
Səsyazıcının quraşdırılması üçün iki tərəfli lentdən istifadə etmişəm, üstünlüyü, maşınınıza uyğun olan hər hansı bir mövqedə asanlıqla dəyişdirilə bilər.
Əlavə kamera göstərildiyi kimi eyni cüt tərəfli lentdən istifadə edərək şaquli olaraq quraşdırılır.
Növbəti növbədə, hazır bir İnternet bağlantısı ilə birlikdə bir enerji mənbəyi (10 000 mAH güc bankı) bağlamaqdır
MQTT tətbiqi üçün İnternet bağlantısı tələb olunacaq (MQTT üçün detallar sonrakı addımlarda əhatə olunacaq)
Addım 5: Təsir Recoder: İşləmə və Tətbiqlər
Mənası şapkadan, sürətlənmə və giroskop, xam dəyərlərin kodda müəyyən edilmiş həddi aşmadığını yoxlamaq üçün istifadə olunur.
Akselerometr: Akselerometr, hər hansı bir oxun 1G gücündən çox ölçüdə olması halında, x, y və z oxlarının hər birinə təsir edən cazibə qüvvəsinin (G qüvvəsi) miqdarını, sürətli hərəkətin aşkar oluna biləcəyindən xəbər verir. (aşağıya baxan oxun 1g dəyərinə sahib olacağını və buna görə python kodunda nəzərə alınması lazım olduğunu unutmayın).
Giroskop; Jiroskop, açısal hərəkəti ölçmək üçün istifadə olunur, yəni kəskin dönmə zamanı sensor işə düşə bilər (koddakı parametrdən asılıdır), buna görə də maşını kəskin şəkildə fırladan adam yaxalanacaq !!
Set limitinin hər hansı bir aktivləşdirilməsi də hissi şapka LED matrisində "!" sürətlənmə üçün qırmızı, jiroskopun aktivləşdirilməsi üçün yaşıl rəngdədir
Addım 6: Proqram Təsviri: Qırmızı Node
Node-RED, əvvəlcə IBM-in İnkişaf etməkdə olan Texnologiya Servicesteam tərəfindən hazırlanmış və hazırda JS Vəqfinin bir hissəsi olan axına əsaslanan bir proqramlaşdırma vasitəsidir.
Qırmızı node haqqında daha çox məlumatı aşağıdakı linkdən əldə edə bilərsiniz: node-red
Bizim vəziyyətimiz üçün, aşağıdakı fəaliyyətlər üçün node -red istifadə edərdik
(1) Kamera funksiyalarına başlamaq üçün joysticklərlə qarşılıqlı əlaqə
(2) MQTT istifadə edərək nəqliyyat vasitəsinə təsirlərin monitorinqi və məlumatların son istifadəçiyə ötürülməsi və MQTT vasitəsilə son istifadəçi əmrlərinin qəbul edilməsi və pi -də lazım olan tətbiqin işə salınması
(3) pi -nin bağlanması kimi bəzi əsas işləri yerinə yetirmək
Sonrakı addımlar node-red üzərində tətbiq olunan axın diaqramı üçün ətraflı məlumat verir
Diqqət yetirin ki, qovşaq-qırmızı axın diaqramları python kodu ilə qarşılıqlı əlaqədədir, buna görə də sonuncu hissə python kodu aspektlərini əhatə edir
Addım 7: Node-red əsasları
Bəzi əsas addımlar Node-red-ə bir anda başlamaq üçün vurgulanır, amma bəli node-red, tətbiqləri işə salmaq və işləmək üçün çox sadədir.
- Başlanğıc Node-qırmızı: https:// localhost: 1880.
- Pi internetə qoşulduqda Node-red-dən başlayır https:// ip address>: 1880
Addım 8: Node-red: Flow _1a
Flow _1a, CSV sənədindəki hər hansı bir dəyişikliyi izləyir və dəyişikliklərə əsaslanaraq, yəni təsir təsbit edildi, kamera video çəkilişi açıq rejimə qoyulur və istifadəçiyə bir təsirin baş verməsi barədə internet üzərindən məlumat verilir.
Addım 9: Qırmızı Node: Flow_1b
Sözügedən axında, video çəkiliş istənilən vaxt sadəcə joystickə basaraq başlaya bilər
Addım 10: Qırmızı Node: Flow_2a
Sözügedən axında, hər hansı bir yeni şəkil və ya video qovluğa saxlanıldıqda/yükləndikdə məlumatlar internet üzərindən qeydiyyatdan keçmiş istifadəçiyə ötürülür.
Addım 11: Qırmızı Node: Flow_2b
Bu axın əvvəlcə cihazı aşağıdakı qaydada idarə etmək üçün uzaqdan istifadəçi üçün nəzərdə tutulmuşdur
(a) bağlama cihazı
(b) şəkil çəkmək
(c) Video yazın
(d) əsas kodu işə salın (datalogger kodu təsirini hesablayan əsas koddur)
Addım 12: Qırmızı Node; Flow_3
Əsas kod və ya söndürmə cihazını işə salmaq üçün axın yerli giriş üçün nəzərdə tutulmuşdur
Addım 13: MQTT
MQTT (Message Queuing Telemetry Transport), yayımçı ilə abunəçinin qarşılıqlı əlaqədə olduğu bir TCP/IP protokoludur.
Bizim vəziyyətimizdə Pi nəşriyyatçıdır, halbuki moblile/PC -də quraşdırılmış tətbiq abunəçi olacaq.
Bu şəkildə hər hansı bir təsirin yaranması ilə əlaqədar məlumatlar uzaqdan istifadəçiyə ötürülür (işləyən internet bağlantısı olmalıdır)
MQTT haqqında daha çox məlumatı aşağıdakı linkdən əldə etmək olar: MQTT
MQTT istifadə etməyə başlamaq üçün əvvəlcə qeydiyyatdan keçməliyik, cloudmqtt (www.cloudmqtt.com) istifadə etdiyim dərs üçün "sevimli pişik" altında pulsuz bir plan var, hamısı budur.
Qeydiyyatdan keçdikdən sonra bir nümunə yaradın "pi" deyin, sonra aşağıdakı detalları əldə edəcəksiniz
- Server adı
- liman
- istifadəçi adı
- parol
Mobil/kompüter vasitəsilə abunə olarkən yuxarıdakılar tələb olunur
Tətbiqim üçün google play mağazasından MQTT tətbiqindən istifadə etdim (Android versiyası)
Addım 14: MQTT: Abunəçi
Mobil cihazlarda çalışan MQTT tətbiqi (Android versiyası)
Pi üzərində təsbit edilən təsir geri ötürülür
Addım 15: MQTT: Xüsusiyyətləri Node-red ilə redaktə edin
MQTT node, "Server adı" və "mövzu" qeyd edildikdən sonra node-qırmızı rəngdədir. Bu abunəçi ucunda eyni olmalıdır
Addım 16: Python Kodu:
Kodun funksionallığı əlavə edilmiş sxemə görədir
Addım 17: Son Kod
Python kodu əlavə olunur
Python skriptimizin terminaldan işləməsini təmin etmək üçün onları chmod +x datalogger.py kimi işlək hala gətirməliyik, bundan sonra kodun yuxarı hissəsində aşağıdakı "shebang" sətri #olmalıdır! /usr/bin/python3 (node-reddən funksiyaları yerinə yetirmək üçün bu tələb olunur)
#!/usr/bin/python3 // hissi_hat idxalından shebang xətti SenseHat datetime -dan datetime csv -dən datetime idxal edir yazar RPi. GPIO -u GPIO olaraq vaxt idxal yuxudan.
məna = SenseHat ()
csv idxal edin
vaxt damgası = datetime.now ()
gecikmə = 5 // gecikmə məlumatları data.csv faylında saxlamaq üçün təyin olunur red = (255, 0, 0) yaşıl = (0, 255, 0) sarı = (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"])
gyro = məna.get_gyroscope_raw ()
məna_impakt.qoşulmaq (girro ["x"]) məna_impakt.ağırlama (girro ["y"]) məna_impaktı
hissi_ təsirini qaytarın
def Impact (): // təsirini aşkar etmək funksiyası #GPIO.setmode (GPIO. BCM) #GPIO.setup (4, GPIO. OUT) sürətləndirmə = sense.get_accelerometer_raw () x = sürətləndirmə ['x'] y = sürətləndirmə ['y'] z = sürətlənmə ['z'] x = abs (x) y = abs (y) z = abs (z)
cayro = məna.get_gyroscope_raw ()
gyrox = gyro ["x"] gyroy = gyro ["y"] gyroz = gyro ["z"]
gyrox = yuvarlaq (gyrox, 2)
gyroy = yuvarlaq (gyroy, 2) gyroz = yuvarlaq (gyroz, 2)
təsir = get_sense_impact ()
əgər x> 1.5 və ya y> 1.5 və ya z> 1.5: // faktiki yolda iterasiya edildikdən sonra dəyərlər təyin olunarsa, açıq tipli müxtəlif növlər və sürücülük bacarıqları üçün müvafiq olaraq dəyişdirilə bilər ('təsir.csv', 'w', newline = ' ') f olaraq: data_writer = yazıçı (f) data_writer.writerow ([' acc x ',' acc y ',' acc z ',' gyro x ',' gyro y ',' gyro z ']) #GPIO. çıxış (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", qırmızı) data_writer.writerow (təsir)
elif gyrox> 1.5 və ya gyroy> 1.5 və ya gyroz> 1.5: // dəyərlər f: data_writer olaraq açıq ('təsir.csv', 'w', newline = '') ilə dönüşlərin başladığı sürəti nəzərə alaraq təyin edilir. = yazıçı (f) data_writer.writerow (['acc x', 'acc y', 'acc z', 'gyro x', 'gyro y', 'gyro z']) #GPIO.output (4, GPIO. YÜKSƏK) hissi.arıq () mənası.show_letter ("!", Yaşıl) data_writer.writerow (təsir)
başqa:
# GPIO.output (4, GPIO. LOW) sense.clear ()
def get_sense_data (): // sensorun dəyərlərini qeyd etmək və saxlamaq funksiyası sense_data =
sens_data.append (sense.get_temperature ()) sense_data.append (sense.get_pressure ()) sense_data.append (sense.get_humidity ())
oriyentasiya = məna.get_orientasiya ()
sens_data.append (oriyentasiya ["yaw"]) sense_data.append (orientation ["pitch"]) sense_data.append (oriyentasiya ["roll"])
acc = hissi.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 = məna.get_gyroscope_raw ()
məna_datası
sense_data.append (datetime.now ())
hissi_datanı qaytarın
açıq olaraq ('data.csv', 'w', newline = '') f olaraq:
data_writer = yazıçı (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 '])
Doğru halda:
print (get_sense_data ()) for event.stick.get_events (): # Event.action == "basıldığı təqdirdə" joystickin basıldığını yoxlayın: # event.direction == "yuxarı" olduqda hansı istiqamətdə olduğunu yoxlayın: # məna.show_letter ("U") # Yuxarı ox sürətlənməsi = hissi.get_accelerometer_raw () x = sürətlənmə ['x'] y = sürətlənmə ['y'] z = sürətlənmə ['z'] x = yuvarlaq (x, 0) y = yuvarlaq (y, 0) z = yuvarlaq (z, 0)
# Eger x == -1: sens.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180)) başqa: sense.set_rotation (0) sense.clear () t = sense.get_temperature () t = round (t, 1) message = "T:" + str (t) sense.show_message (mesaj, text_colour = qırmızı, scroll_speed = 0.09) elif event.direction == "aşağı": sürətləndirmə = sense.get_accelerometer_raw () x = sürətlənmə ['x'] y = sürətlənmə ['y'] z = sürətlənmə ['z'] x = yuvarlaq (x, 0) y = yuvarlaq (y, 0) z = yuvarlaq (z, 0)
# Eger x == -1: sens.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180)) başqa: sense.set_rotation (0) # sense.show_letter ("D") # Aşağı ox hissi. aydın () h = hissi.get_humidity () h = yuvarlaq (h, 1) mesaj = "H:" + str (h) sense.show_message (mesaj, text_colour = yaşıl, scroll_speed = 0.09) p = sense.get_pressure () p = yuvarlaq (p, 1) mesaj = "P:" + str (p) sense.show_message (mesaj, text_colour = sarı, scroll_speed = 0.09)
# elif event.direction == "sol":
#sürətləndirmə = məna.get_accelerometer_raw () #x = sürətlənmə ['x'] #y = sürətlənmə ['y'] #z = sürətlənmə ['z'] #x = yuvarlaq (x, 0) #y = yuvarlaq (y, 0) #z = yuvarlaq (z, 0)
#Ekranın fırlanmasını hansı istiqamətə qalxdığından asılı olaraq yeniləyin // İstifadə olunmur və node -red tərəfindən idarə olunmur #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") # Sol ox # elif event.direction == "right": # sense.show_letter ("K") # Sağ ox # elif hadisə. istiqaməti == "orta": # məna. Aydın ()
təsir ()
data = get_sense_data ()
dt = data [-1] - zaman damgası əgər dt.saniyə> gecikmə: data_writer.writerow (data) timestamp = datetime.now ()
Addım 18: Canlı Videonun İzlənməsi
Video MQTT vasitəsi ilə istənilən vaxt istənilən yerdə başlaya biləcəyi üçün Təsir Kaydedici canlı videonu izləmək üçün də istifadə edilə bilər
Video axını etmək üçün VLC pleyerdən istifadə edərdik, standart olaraq VLC əvvəlcədən quraşdırılmış, başqa bir şəkildə VLC-ni quraşdırın
Şəbəkə axını haqqında daha çox məlumatı VLC Şəbəkə axını vasitəsilə əldə etmək olar
Oxuduğunuz üçün təşəkkürlər !!
Təsir yazıcının edə biləcəyi daha çox şey var.
Maneələrin xəritələşdirilməsində maqnit sahəsinin təhlili üçün növbəti məkana diqqət yetirin
Tövsiyə:
ScanUp NFC Oxucu/Yazıçı və Korlar, Görmə Əlillər və Digərləri üçün Audio Yazıcı: 4 Addım (Şəkillərlə)
ScanUp NFC Oxucu/Yazıçı və Korlar, Görmə Əlilləri və Başqaları üçün Audio Yazıcı: Sənaye dizaynını öyrənirəm və layihə semestrimin işidir. Məqsəd, görmə qüsurlu və kor insanları SD kartda WAV formatında səs yazdırmağa və bu məlumatları NFC etiketi ilə çağırmağa imkan verən cihazla dəstəkləməkdir. Belə ki
Toxunma həssas tədris vasitələri: 5 addım
Toxunma Həssas Tədris Aidləri: Bu təlimat Bristol Universitetinin Bristol İnteraktiv Qrupu ilə birlikdə hazırlanmışdır, həm texniki olmayan istifadəçilərə, həm də daha da inkişaf etdirmək istəyən istifadəçilərə yönəlmişdir. Bu fərqi aydınlaşdırmaq üçün sadə təlimatları
Arduino Robotları üçün Ucuz Zərbə Sensorları: 4 Addım (Şəkillərlə birlikdə)
Arduino Robotları üçün Ucuz Zərbə Sensorları: Robotunuzu ələ keçirmək üçün ucuz, asanlıqla qaynaqlanan qabar sensorlarına ehtiyacınız var- Arduino layihəsini nəzərdə tuturam? Bu kiçik sensorların istifadəsi asan, hazırlanması asan və cüzdanda (hər biri 17 qəpik!) Və mikro nəzarətçi-ba-da sadə maneələrin aşkarlanması üçün əla işləyir
Edison Baş Zərbə Sistemi: 6 addım
Edison Baş Zərbə Sistemi: Bu layihənin məqsədi, baş zərbələrinin intensivliyini izləyən və sarsıntı meydana gətirmək ehtimalı yüksək olan təsirləri aşkar edən bir cihaz yaratmaq idi. Gənclik futbolunda bu tibbi cihaz əlavə bir "göz dəsti" ola bilər
555 Zamanlayıcı ilə Zərbə/Solma/Yanıp sönən LED: 7 addım
555 Zamanlayıcı ilə Zərbə/Solma/Yanıp Sönən LED: Bu kiçik sxem fişləri proqramlaşdırmadan və ya kod yazmadan solğun bir LED açmağın sadə bir yoludur. Yalnız bir neçə sadə komponent və bütün gün solmağa hazırsınız. Nəticə, gözləmə rejimində olan bir Mac kimi davamlı olaraq solub sönməkdir. Cəhd edin