İçindekiler:

Araçlar için Darbe Kaydedici: 18 Adım (Resimlerle)
Araçlar için Darbe Kaydedici: 18 Adım (Resimlerle)

Video: Araçlar için Darbe Kaydedici: 18 Adım (Resimlerle)

Video: Araçlar için Darbe Kaydedici: 18 Adım (Resimlerle)
Video: Hain Saldırı Anı, Güvenlik Korucusu, Saldırı 2024, Aralık
Anonim
Araçlar için Darbe Kaydedici
Araçlar için Darbe Kaydedici

Darbe Kaydedici, sürüş veya hareket halindeyken araca verilen darbeyi kaydetmek için tasarlanmıştır. Etkiler, video/resimlerin yanı sıra okumalar şeklinde veritabanında saklanır. Etki üzerine, uzaktaki kullanıcı gerçek zamanlı olarak doğrulanabilir ve uzaktaki kullanıcı, kaydedilen videoyu izlemekten veya pi kameraya uzaktan erişim sağlayarak olayları buna göre izleyebilir..

Adım 1: Parçalar ve Aksesuarlar

(1) Raspberry Pi 3 veya daha iyisi: Hesaplama gücü gerekli

(2) Ahududu pi duyu şapkası

(3) Raspberry pi kamera / Usb kamera

(4) En son raspbian görüntüsüne sahip hafıza kartı (Düğüm kırmızısını desteklemesi gerekir, hemen hemen her son görüntü bunu yapar)

(5) Güç kaynağı en az 2,1 A (arabada bağımsız çalışma için pil bankasını kullandım)

Adım 2: Parça Açıklaması: Sense Hat

Parça Açıklaması: Sense Hat
Parça Açıklaması: Sense Hat

Sense HAT, 8×8 RGB LED matrisine, beş düğmeli bir joystick'e sahiptir ve aşağıdaki sensörleri içerir:

  • Jiroskop
  • ivmeölçer
  • manyetometre
  • Sıcaklık
  • Barometrik
  • baskı yapmak
  • Nem

Sense şapka ile çalışma hakkında daha fazla bilgi aşağıdaki bağlantılardan elde edilebilir: Sense_Hat

Sense şapka API'si şu adreste barındırılmaktadır: Sense_hat_API

Sense-hat programlama kodu sonraki adımlarda ele alınmıştır. Sense hat kodu, şu adreste barındırılan bir simülatörde de simüle edilebilir: Sense-hat simulator

Adım 3: Montaj: Darbe Kaydedici

Montaj: Darbe Kaydedici
Montaj: Darbe Kaydedici
Montaj: Darbe Kaydedici
Montaj: Darbe Kaydedici
Montaj: Darbe Kaydedici
Montaj: Darbe Kaydedici
Montaj: Darbe Kaydedici
Montaj: Darbe Kaydedici
  • Duyu şapkasının pi üzerine istiflenmesi gerektiğinden montajı daha kolaydır (belirlenen montaj cıvataları duyu şapkasıyla birlikte verilir).
  • USB kamera veya pi kamera bağlanabilir. Öğreticide pi kamera ele alınıyor ve buna göre kodlama yapılıyor.
  • Bellek kartını takın ve python kodunu ve -red düğümünü yapılandırın (yapılandırma ve kod sonraki adımlarda ele alınacaktır)

Yukarıdaki resim, düz şerit kabloyla pi'ye bağlı pi-kamerayı göstermektedir.

Adım 4: Montaj: Arabanın Gösterge Panosundaki Darbe Kaydedici

Montaj: Arabanın Gösterge Panosuna Darbe Kaydedici
Montaj: Arabanın Gösterge Panosuna Darbe Kaydedici

Kayıt cihazını monte etmek için çift taraflı bant kullandım, avantajı kayıt cihazının farklı pozisyonlarda kolayca kaydırılabilmesi, hangisi arabanıza en uygunsa.

Diğer kamera, aynı çift taraflı bant kullanılarak gösterildiği gibi dikey olarak monte edilir, Sırada, hazır bir internet bağlantısıyla birlikte bir güç kaynağı (10.000 mAH güç bankası) bağlamak var

MQTT başvurusu için internet bağlantısı gerekli olacaktır (MQTT ile ilgili ayrıntılar daha sonraki adımlarda ele alınacaktır)

Adım 5: Impact Recoder: Çalışma ve Uygulamalar

Sense hat, ivme ve jiroskoptan ham değerlerin kodda belirlenen limitin ötesinde olup olmadığını kontrol etmek için kullanılır.

İvmeölçer: İvmeölçer, x, y ve z eksenlerinin her birine etki eden yerçekimi kuvvetinin (G-kuvveti) miktarını söyler, eğer herhangi bir eksen 1G'den fazla kuvvet ölçerse, hızlı hareket algılanabilir. (lütfen aşağıyı gösteren eksenin 1g değerine sahip olacağını ve python kodunda buna göre değerlendirilmesi gerektiğini unutmayın).

Jiroskop; Jiroskop, açısal hareketi ölçmek için kullanılır, yani keskin dönüş sırasında sensör devreye girebilir (koddaki ayara bağlıdır), bu nedenle aracı keskin bir şekilde döndüren bir kişi yakalanabilir!

Ayarlanan limitin herhangi bir aktivasyonu, algılama şapka LED matrisinde de "!" olarak görüntülenir. hızlanma için kırmızı ve jiroskop aktivasyonu için yeşil

Adım 6: Yazılım Açıklaması: Kırmızı Düğüm

Node-RED, başlangıçta IBM'in Gelişen Teknoloji Hizmetleri ekibi tarafından geliştirilen ve şimdi JS Foundation'ın bir parçası olan akış tabanlı bir programlama aracıdır.

Kırmızı düğüm hakkında daha fazla bilgi aşağıdaki bağlantıdan edinilebilir: düğüm-kırmızı

Bizim durumumuz için, aşağıdaki faaliyetler için node -red kullanıyor olacağız

(1) Kamera işlevlerini başlatmak için joysticklerle etkileşim kurma

(2) Araç üzerindeki etkilerin izlenmesi ve MQTT kullanılarak bilgilerin son kullanıcıya iletilmesi ve ayrıca MQTT üzerinden son kullanıcı komutlarının kabul edilmesi ve pi üzerinde gerekli uygulamanın başlatılması

(3) Pi'nin kapatılması gibi bazı temel işlemleri gerçekleştirmek

Sonraki adımlar, düğüm kırmızısında uygulanan akış şeması için ayrıntılı bilgi verir.

Lütfen düğüm kırmızısı akış şemalarının python koduyla etkileşime girdiğine dikkat edin, bu nedenle son kısım python kodunun özelliklerini kapsar

7. Adım: Düğüm Kırmızısı Temelleri

Düğüm kırmızısı Temelleri
Düğüm kırmızısı Temelleri
Düğüm kırmızısı Temelleri
Düğüm kırmızısı Temelleri
Düğüm kırmızısı Temelleri
Düğüm kırmızısı Temelleri

Düğüm kırmızısını bir anda başlatmak için belirli Temel adımlar vurgulanmıştır, ancak evet, düğüm kırmızısı uygulamaları başlatmak ve çalıştırmak için çok basittir.

  • Düğüm kırmızısını başlatma:
  • Pi internete bağlandığında Düğüm-red'i başlatma https:// ip adresi>:1880

Adım 8: Düğüm kırmızısı: Akış _1a

Düğüm-kırmızı: Akış _1a
Düğüm-kırmızı: Akış _1a

Akış _1a, CSV dosyasındaki tüm değişiklikleri izler ve değişikliklere, yani algılanan etkiye göre, kamera video kaydı açık moduna ayarlanır ve ayrıca kullanıcı, bir etkinin meydana geldiği konusunda internet üzerinden bilgilendirilir.

9. Adım: Kırmızı Düğüm: Flow_1b

Kırmızı Düğüm: Flow_1b
Kırmızı Düğüm: Flow_1b

Söz konusu akışta sadece joystick'e basılarak herhangi bir noktada video kaydı başlatılabilir.

Adım 10: Kırmızı Düğüm: Flow_2a

Düğüm Kırmızı: Flow_2a
Düğüm Kırmızı: Flow_2a

Söz konusu akışta dizine her yeni resim veya video kaydedildiğinde/yüklendiğinde bilgiler kayıtlı kullanıcıya internet üzerinden iletilir.

Adım 11: Kırmızı Düğüm: Flow_2b

Düğüm Kırmızı: Flow_2b
Düğüm Kırmızı: Flow_2b

Bu akış, cihazı aşağıdaki şekilde kontrol etmek için öncelikle uzak kullanıcı için tasarlanmıştır.

(a) kapatma cihazı

(b) fotoğraf çekmek

(c) Videoları kaydedin

(d) ana kodu başlat (veri kaydedici kodu, etkiyi hesaplayan ana koddur)

Adım 12: Kırmızı Düğüm; Akış_3

Düğüm Kırmızı; Akış_3
Düğüm Kırmızı; Akış_3

Akış, ana kodu veya kapatma cihazını başlatmak için yerel erişim için tasarlanmıştır.

Adım 13: MQTT

MQTT (Message Queuing Telemetri Transport), yayıncı ve abonenin etkileşimde bulunduğu bir TCP/IP protokolüdür.

Bizim durumumuzda Pi yayıncı, mobil/PC'mizde yüklü uygulama abone olacaktır.

Bu sayede herhangi bir etkinin oluşması üzerine bilgi kullanıcıya uzaktan iletilir (çalışan bir internet bağlantısı şarttır)

MQTT hakkında daha fazla bilgiye aşağıdaki bağlantıdan erişilebilir: MQTT

MQTT'yi kullanmaya başlamak için önce kayıt olmamız gerekiyor, cloudmqtt (www.cloudmqtt.com) kullandığım eğitim için, "sevimli kedi" altında ücretsiz bir plan var, hepsi bu.

Kaydolduktan sonra bir örnek oluşturun "pi" deyin, ardından aşağıdaki ayrıntıları alacaksınız

  • Sunucu adı
  • Liman
  • Kullanıcı adı
  • parola

Mobil/PC üzerinden abone olurken yukarıdakiler gereklidir.

Uygulamam için google play store'dan MQTT uygulamasını kullandım (Android versiyonu)

Adım 14: MQTT: Abone

MQTT: Abone
MQTT: Abone

Mobilde çalışan MQTT uygulaması (Android versiyonu)

Pi üzerinde algılanan etki geri iletilir

Adım 15: MQTT: Özellikleri Düğüm Kırmızısında Düzenleme

MQTT: Özellikleri Düğüm Kırmızısında Düzenleme
MQTT: Özellikleri Düğüm Kırmızısında Düzenleme

MQTT düğümü seçildikten sonra node-red'de "Sunucu adı" ve "konu" yazılmalıdır. Bu, abone tarafında aynı olmalıdır.

Adım 16: Python Kodu:

Kod işlevi, ekteki akış şemasına göredir

Adım 17: Son Kod

piton kodu ektedir

Python betiğimizi terminalden çalıştırmak için, onları chmod +x datalogger.py olarak çalıştırılabilir hale getirmemiz gerekiyor, ayrıca kodun üst kısmında aşağıdaki "shebang" satırını içermesi gerekir #! /usr/bin/python3 (bu, kırmızı düğümden işlevleri yürütmek için gereklidir)

#!/usr/bin/python3 // sens_hat'tan shebang satırı içe aktar datetime'dan SenseHat'ı içe aktar csv'den tarihsaati içe aktar yazıcıyı içe aktar RPi. GPIO'yu zamandan GPIO olarak içe aktar uykudan içe aktar

sense = SenseHat()

csv'yi içe aktar

zaman damgası = tarihsaat.now()

gecikme = 5 // gecikme, data.csv dosyasında veri depolamak için tanımlanır kırmızı = (255, 0, 0) yeşil = (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 = sense.get_gyroscope_raw()

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

dönüş sense_impact

def etki(): // etkiyi algılama işlevi #GPIO.setmode(GPIO. BCM) #GPIO.setup(4, GPIO. OUT) hızlanma = sense.get_accelerometer_raw() x = hızlanma['x'] y = hızlanma['y'] z = hızlanma['z'] x=abs(x) y=abs(y) z=abs(z)

gyro = sense.get_gyroscope_raw()

gyrox = cayro["x"] cayroy = cayro["y"] gyroz = cayro["z"]

gyrox = yuvarlak(gyrox, 2)

gyroy = yuvarlak(gyroy, 2) gyroz = yuvarlak(gyroz, 2)

etki = get_sense_impact()

x > 1.5 veya y > 1.5 veya z > 1.5 ise: // değerler, gerçek yolda yinelemeden sonra ayarlanır, open('impact.csv', 'w', newline=' ile farklı türler ve sürüş becerileri için uygun şekilde değiştirilebilir. ') f: data_writer = yazar(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("!", kırmızı) data_writer.writerow(etki)

elif gyrox > 1.5 veya gyroy > 1.5 veya gyroz > 1.5: // değerler, f: data_writer olarak open('impact.csv', 'w', newline='') ile dönüşlerin başlatıldığı hıza bakarak ayarlanır = yazar(f) data_writer.writerow(['acc x', 'acc y', 'acc z', 'gyro x', 'gyro y', 'gyro z']) #GPIO.output(4, GPIO. YÜKSEK) sense.clear() sense.show_letter("!", yeşil) data_writer.writerow(etki)

Başka:

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

def get_sense_data(): // sensörden gelen değerleri kaydetme ve saklama işlevi sense_data =

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

oryantasyon = sense.get_orientation()

sense_data.append(yönlendirme["yaw"]) sense_data.append(yönlendirme["adım"]) sense_data.append(yönlendirme["yuvarla"])

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

gyro = sense.get_gyroscope_raw()

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

sense_data.append(tarihsaat.now())

sense_data döndür

open('data.csv', 'w', newline='') ile f olarak:

data_writer = yazar(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 iken:

print(get_sense_data()) in sense.stick.get_events() içindeki olay için: # joystick'e basılıp basılmadığını kontrol edin eğer event.action == "basıldıysa": # event.direction == "yukarı" ise hangi yönde olduğunu kontrol edin: # sense.show_letter("U") # Yukarı ok hızlanma = sense.get_accelerometer_raw() x = hızlanma['x'] y = hızlanma['y'] z = hızlanma['z'] x=yuvarlak(x, 0) y =yuvarlak(y, 0) z=yuvarlak(z, 0)

# Ekranın dönüşünü hangi yöne göre yukarıya doğru güncelleyin 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.clear() t = sense.get_temperature() t = round(t, 1) mesaj = "T: " + str(t) sense.show_message(message, text_color = kırmızı, scroll_speed=0.09) elif event.direction == "aşağı": hızlanma = sense.get_accelerometer_raw() x = hızlanma['x'] y = hızlanma['y'] z = hızlanma['z'] x=yuvarlak(x, 0) y=yuvarlak(y, 0) z=yuvarlak(z, 0)

# Ekranın dönüşünü hangi yöne göre yukarıya doğru güncelleyin 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("D") # Aşağı ok sense.clear() h = sense.get_humidity() h = round(h, 1) mesaj = "H: " + str(h) sense.show_message(message, text_color = yeşil, scroll_speed=0.09) p = sense.get_pressure() p = round(p, 1) mesaj = "P: " + str(p) sense.show_message(message, text_color = sarı, scroll_speed=0.09)

# elif event.direction == "sol":

# hızlanma = sense.get_accelerometer_raw() # x = hızlanma['x'] #y = hızlanma['y'] #z = hızlanma['z'] #x=yuvarlak(x, 0) #y=yuvarlak(y, 0) #z=yuvarlak(z, 0)

# Ekranın dönüşünü hangi yöne bağlı olarak güncelleyin // Node-red tarafından kullanılmaz ve kontrol edilmez #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 ok # elif event.direction == "sağ": # sense.show_letter ("K") # Sağ ok # elif event.direction == "orta": # sense.clear()

darbe()

veri = get_sense_data()

dt = data[-1] - dt.saniye > gecikme ise zaman damgası: data_writer.writerow(data) zaman damgası = datetime.now()

Adım 18: Canlı Videoyu İzleme

Etki Kaydedici, canlı videoyu izlemek için de kullanılabilir, çünkü video, MQTT aracılığıyla herhangi bir zamanda herhangi bir yerde başlatılabilir

videoları yayınlamak için VLC oynatıcıyı kullanırdık, varsayılan olarak en son raspbian'da VLC önceden yüklenmiştir, aksi takdirde vlc'yi aşağıdaki gibi kurun

Ağ akışını görüntüleme hakkında daha fazla bilgiye VLC Ağ akışı aracılığıyla erişilebilir

Okuduğunuz için teşekkürler!!

Etki kaydedicinin yapabileceği daha çok şey var..

Engel haritalamayı gerçekleştirirken manyetik alan analizi için bir sonraki alana dikkat edin

Önerilen: