Daftar Isi:
- Langkah 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Langkah 2: Sensores Digitais - Publicação
- Langkah 3: Codigo Para Acionamento Sirene
- Langkah 4: Codigo Twitter - Posting
- Langkah 5: Centro De Comando
- Langkah 6: Codigo Twitter - Monitor
- Langkah 7: Estrutura AWS
Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Projeto acadêmico para atender cenário de colaboração através da internet para divulgação de desastres naturais, onde será possível a detecção dos acontecimentos através de sensores IOT de temperatur, luminosidade, oscilação (tilte) dan botão. Ainda no cenário de colaboração prevemos integrao com o Twitter dan aplicativos com suporte mqtt para acionamento do alerta.
Diante a possibilidade de diversos meios de entrada na solução, caberá um centro de de operações tersedia informasi esta correta evitando assim faalsos-positivos dos dispositivos automatizado dan avaliar a possibilidade de fakenews. Tal tomada de decisão é critical diante ao pânico que um alarme faalso pode gerar.
Dapatkan solusi dari alerta de mensagem estamos mempertimbangkan dan melakukan envio de SMS, alerta através de klien mqtt, email, sirene dan twitter.
O projeto contou com uso de recursos da AWS termasuk IOT CORE, EC2 dan SNS
Sensor dari DragonBord 410c
klien android mqtt
Sendo todo desenvolvido em python
Autore:
Diego Fernandes dos Santos – [email protected]
Gabriel Piovani Moreira dos Santos – [email protected]
Gustavo Venancio Luz – [email protected]
Paulo Henrique Almeida Santos – [email protected]
Langkah 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
Abaixo o codigo de publicao dos sensores analógicos, os sensores de temperatur dan luminosidade estão konfigurasi para que assim que detectarem uma variação untuk melakukan padrão pré estabelecido enviarem um alerta através lakukan protokol mqtt sinali.
Este alerta começa a contagem regressiva que pode ser suspensa ou acelerada pelo operador.
O contador para o alerta começa contagem regressiva em 60 seguntos, e todo novo alerta detectado decresce o contador em 20 segundos.
programa rodando detro da dragon borad 410c
#!/usr/bin/python3import spidev dari libsoc impor gpio dari waktu impor tidur
# Importa lib para comunicacao com NYAMUK impor paho.mqtt.client sebagai mqtt
spi = spidev. SpiDev() spi.open(0, 0) spi.max_speed_hz=10000 spi.mode = 0b00 spi.bits_per_word = 8
#Menggunakan porta ADC1 channel_select1=[0x01, 0x80, 0x00]
#Para usar a porta ADC2 use o seguinte vetor de configuração channel_select2=[0x01, 0xA0, 0x00]
def on_connect(mqttc, obj, flag, rc): print("rc: " + str(rc))
def on_message(mqttc, obj, msg): print(msg.topic + " " + str(msg.qos) + " " + str(msg.payload))
def on_publish(mqttc, obj, mid): print("Id Pesan: " + str(mid) + "\n") lulus
# Criamos o klien dan setamos suas konfigurasi mqttc = mqtt. Client()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
pub = mqtt. Client("grupo3")
# Conexao com localhost, uma vez que testamos fora do labredes. broker_address ="34.230.74.201"
pub.connect(broker_address)
if _name_=='_main_': gpio_cs = gpio. GPIO(18, gpio. DIRECTION_OUTPUT)
dengan gpio.request_gpios([gpio_cs]): contador=0 adc_value_old=0 adc_value2_old=0 while contador < 50: gpio_cs.set_high() sleep(0,00001) gpio_cs.set_low() rx = spi.xfer(channel_select1) gpio_cs.set_high(_cs.set_high(_cs.set_) contador = contador + 1 adc_value = (rx[1] << 8) & 0b1100000000 adc_value = adc_value | (rx[2] & 0xff) adc_value = (((adc_value * 5) / 1024) - 0,5) * 100 print("Temperatura: %f\n" % adc_value) pub.publish("temperatura", str(adc_value)) # teste para acionar contador do alarme, teste ultima leitura + 5%
if adc_value_old==0: adc_value_old=adc_value if adc_value > (adc_value_old*1.05): pub.publish("ALARME", "ON") print ("Alarmado temperaturea") adc_value_old=adc_value sleep(1)
gpio_cs.set_high() sleep(0,00001) gpio_cs.set_low() rx = spi.xfer(channel_select2) gpio_cs.set_high() contador = contador + 1 adc_value2 = (rx[1] << 8) & 0b1100000000 adc_value2 = adc_value2 | (rx[2] & 0xff) adc_value2 = adc_value2 /10 print(" Luminosidade: %f\n" % adc_value2) pub.publish("luminosidade", str(adc_value2))
# teste para acionar contador do alarme, teste ultima leitura + 50%
if adc_value2_old==0: adc_value2_old=adc_value2 if adc_value2 > (adc_value2_old*1.5): pub.publish("ALARME", "ON") print ("Alarmado Luminosidade") adc_value2_old=adc_value2 sleep(3)
Langkah 2: Sensores Digitais - Publicação
código para publicação dos sensores digitais
Sensor digitais neste projeto foram o tilte que detecta os tremors e o botão para simular o uso de um botão de pânico.
quando detectado uma anomalia ou botão de pânico pressionado a contagem regressiva é iniciada.
programa rodando detro da dragon borad 410c
dari libsoc_zero. GPIO tombol impordari libsoc_zero. GPIO impor Miringkan dari waktu impor tidur impor paho.mqtt.client sebagai mqtt impor sys
def on_connect(mqttc, obj, flags, rc): print("Conectado " + str(rc))
def on_message(mqttc, obj, msg): print(msg.topic + " " + str(msg.qos) + " " + str(msg.payload))
def on_publish(mqttc, obj, mid): # print("Id Pesan: " + str(mid) + "\n") lulus
def detectaTilt(): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt(1) kecuali: sleep_count += 1 else: count += 1 sleep_count += 1 jika sleep_count > 999: break
print("count:", count) if count>200: pub = mqttc.publish("TERREMOTO", "ON") pub = mqttc.publish("SISMOGRAFO", str(count)) # Criamos o klien dan setamos suas konfigurasi mqttc = mqtt. Client()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
topik = "grup3"
# Conexao com localhost, uma vez que testamos fora do labredes. mqttc.connect("34.230.74.201", 1883)
kemiringan = Kemiringan('GPIO-A')
btn = Tombol('GPIO-C')
while True: sleep(0.25) detectaTilt() if btn.is_pressed(): pub = mqttc.publish("PANICO", "ON") print("Botao ON") sleep(1) pub = mqttc.publish("PANICO ", "OFF") # else: # pub = mqttc.publish("PANICO", "OFF") # print("Botao OFF")
Langkah 3: Codigo Para Acionamento Sirene
Codigo para subcrio para acionamento da SIRENE, programa rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.client as mqtt
dari libsoc_zero. GPIO impor LED dari waktu impor sleep led = LED('GPIO-E') #led.off()
# Tentukan o que fazer ao conectar def on_connect(client, obj, flags, rc): print("ConexÃÆ'£o estabelecida com broker")
# Tentukan o que fazer ao receber uma mensagem def on_message(klien, obj, pesan): print("LED " + str(message.payload.decode("utf-8"))) if str(message.payload.decode("utf-8")) == "on": print("Sirene ligada") led.on() else: print("Sierene apagada") led.off()
# IP do broker broker_address = "34.230.74.201"
# Cria o klien sub = mqtt. Client("grupo3")
sub.connect(broker_address)
sub.on_message = on_message sub.on_connect = on_connect
# Tambahkan no topico sub.subscribe("SIRENE", qos=0)
# Loop para escuta sub.loop_forever()
Langkah 4: Codigo Twitter - Posting
Kode untuk publik lakukan twitter assim que acionado o alarme.
código rodando dan maquina virtual da AWS EC2
#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status # - memposting pesan status ke timeline Anda #--- -------------------------------------------------- ------------------ impor paho.mqtt.berlangganan sebagai berlangganan
waktu impor
dari impor twitter *
#------------------------------------------------- ---------------------- # seharusnya status baru kita seperti apa? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"
#------------------------------------------------- ---------------------- # memuat kredensial API kami #---------------------- -------------------------------------------------- impor sys sys.path.append(".") konfigurasi impor
#------------------------------------------------- ---------------------- # buat objek API Twitter #---------------------- ------------------------------------------------- Indonesia = Twitter(auth = OAuth('senha removida))
#------------------------------------------------- ---------------------- # posting status baru # twitter API docs: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- -----------------------
while 1: m = subscribe.simple("twitteralarme", hostname="172.31.83.191", dipertahankan=False) if m.topic=="twitteralarme" dan str(m.payload.decode("utf-8")) ="on": result = twitter.status.update(status = (new_status)+str(time.time())) # print("updated status: %s" % new_status)
Langkah 5: Centro De Comando
semper que acionado um dispositivo manual ou detectado um alerta manual lakukan usuário é acionada uma contagem regressiva para envio de mensagem. O operador pode cancelar atau envio ou acionar atau envio imediato lakukan alerta.
Untuk menggunakan dasboard utilizamos um android melakukan telefone untuk menyusun mesa de operação melakukan centro de comando.
código rodando dan maquina virtual da AWS EC2
impor paho.mqtt.client sebagai pahoimport paho.mqtt.berlangganan sebagai berlangganan impor paho.mqtt.publish sebagai publikasikan impor json waktu impor impor enam impor ssl dari waktu impor tidur
topik = ['#']
gatilho=0 hora_disparo=0 publish.single("ACIONADO", "OFF", qos=1, hostname="172.31.83.191") publish.single("sensor1", "OFF", qos=1, hostname="172.31.83.191") publish.single("sensor2", "OFF", qos=1, nama host="172.31.83.191")
connflag = Salah
def on_connect(client, userdata, flags, rc): global connflag connflag = True print(connflag) print("Koneksi mengembalikan hasil: " + str(rc))
def on_message(client, userdata, msg): # print("teste") print(msg.topic+" "+str(msg.payload))
def on_log(klien, data pengguna, level, buf): print(msg.topic+" "+str(msg.payload))
mqttc = paho. Client("Broker_MSG") mqttc.on_connect = on_connect mqttc.on_message = on_message
awshost = "data.iot.us-east-1.amazonaws.com" awsport = 8883 clientId = "a2rczvc6ni8105" thingName = "Ufscar2018" caPath = "aws-iot-rootCA.crt" certPath = "9e85dfd42a-certificate.pem. crt" keyPath = "9e85dfd42a-private.pem.key" mqttc.tls_set(caPath, certfile=certPath, keyfile=keyPath, cert_reqs=ssl. CERT_REQUIRED, tls_version=ssl. PROTOCOL_TLSv1_2, tls_version=ssl. PROTOCOL_TLSv1_2, keepalive=60) mqttc.loop_start()
while 1: hora=time.time() sleep(.1) publish.single("LEDTERREMOTO", "on", qos=1, hostname="172.31.83.191")
# jika connflag ==Benar: # mqttc.publish("message", json.dumps({'message':"TERREMOTO"}), qos=1) if gatilho==1: publish.single("TEMPO", str (round(hora_disparo-hora, 0)), qos=1, hostname="172.31.83.191") publish.single("LEDTERREMOTO", "on", qos=1, hostname="172.31.83.191") else: publish.single("TEMPO", "99", qos=1, hostname="172.31.83.191") # print(" ") if (hora>hora_disparo) dan (gatilho==1): # print("TERREMOTO") # print(connflag) if connflag == True: # mqttc.publish("message", json.dumps({'message':"TERREMOTO"}), qos=1) # mqttc.publish("message", "TERREMOTO"} ", qos=1) mqttc.publish("message", json.dumps("TERREMOTO - PROCURE UMA ZONA SEGURA"), qos=1)
# print("teste SNS") # publish.single("LED", "on", hostname="172.31.83.191") publish.single("SIRENE", "on", qos=1, hostname="172.31. 83.191") publish.single("TEMPO", "TERREMOTO", qos=1, hostname="172.31.83.191") publish.single("ACIONADO", "OFF", qos=1, hostname="172.31.83.191") publish.single("twitteralarme", "on", qos=1, hostname="172.31.83.191") publish.single("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos=1, hostname="172.31.83.191") gatilho=0 tidur(5) m = berlangganan.sederhana(topik, nama host="172.31.83.191", dipertahankan=Salah) jika m.topik=="ACIONADO" dan str(m.payload.decode(" utf-8"))=="OFF": gatilho=0 print("cancelado") if m.topic=="medico" dan str(m.payload.decode("utf-8"))=="on ": if connflag == True: mqttc.publish("medico", json.dumps("MEDICOS - EMERGENCIA TERREMOTO"), qos=1) if m.topic=="bombeiro" and str(m.payload.decode("utf-8"))=="on": if connflag == True: mqttc.publish("bombeiro", json.dumps("BOMBEIRO - EMERGENCIA TERREMOTO"), qos=1) if m.topic==" ambulancia" dan str(m.payloa d.decode("utf-8"))=="on": if connflag == True: mqttc.publish("ambulancia", json.dumps("AMBULANCIA - EMERGENCIA TERREMOTO"), qos=1) if m. topic=="urgente" and str(m.payload.decode("utf-8"))=="on": publish.single("ACIONADO", 1, qos=1, hostname="172.31.83.191") gatilho=1 hora_disparo=waktu.waktu()+5 jika str(m.payload.decode("utf-8"))=="ON": jika gatilho==1: print("acelerado 20") hora_disparo=hora_disparo -20 lain: print("Acionado") publish.single("ACIONADO", 1, qos=1, hostname="172.31.83.191") gatilho=1 hora_disparo=time.time()+60
Langkah 6: Codigo Twitter - Monitor
código monitoração do twitter, posting pesquisa na regiao de sorocaba
código rodando dan maquina virtual da AWS EC2
n
dari twitter impor *impor config impor paho.mqtt.publish as publish
dari waktu impor tidur
twitter = Twitter(auth = OAuth(config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
garis lintang = -23.546211 garis bujur = -46.637840 alcanance = 50 resultados = 1
publish.single("twitter_alarme", "ON", nama host="34.230.74.201")
result_count = 0 last_id = Tidak ada flag = 0
untuk i in range(60): #----------------------------------------- ------------------------------ # melakukan pencarian berdasarkan garis lintang dan garis bujur # dokumen API twitter: https://dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- coba: query = twitter.search.tweets(q = "#Terremoto", geocode = "%f, %f, %dkm" % (lintang, bujur, alcance), max_id = last_id) print("leu")
kecuali: print("erro acesso twitter") break
untuk hasil dalam kueri["status"]:
#------------------------------------------------- ---------------------- # hanya memproses hasil jika memiliki geolokasi #----------------- -------------------------------------------------- ---- if result["geo"]: result_count += 1 last_id = result["id"] sleep(1) if result_count == resultados: flag += 1 publish.single("twitter_alarme", "ON", hostname="34.230.74.201") publish.single("twitter", "TERREMOTO - DETECTADO", hostname="34.230.74.201") istirahat
Langkah 7: Estrutura AWS
Memanfaatkan uma maquina virtual rodando ubuntu dan estrutura AWS EC2
Memanfaatkan AWS IOT CORE para o serviço de MQTT onde configuramos sebagai ações sesuai tipo de mensagem
Manfaatkan topik untuk melakukan AWS SNS dan segera lakukan AWS IOT CORE
Direkomendasikan:
Sistem Peringatan Parkir Terbalik Mobil Arduino - Langkah demi Langkah: 4 Langkah
Sistem Peringatan Parkir Mundur Mobil Arduino | Langkah demi Langkah: Pada proyek kali ini, saya akan merancang Rangkaian Sensor Parkir Mundur Mobil Arduino sederhana menggunakan Sensor Ultrasonik Arduino UNO dan HC-SR04. Sistem peringatan mundur mobil berbasis Arduino ini dapat digunakan untuk Navigasi Otonom, Jarak Robot, dan r
Langkah demi Langkah Membangun PC: 9 Langkah
Langkah demi Langkah Membangun PC: Perlengkapan: Perangkat Keras: MotherboardCPU & Pendingin CPUPSU (Unit catu daya)Penyimpanan (HDD/SSD)RAMGPU (tidak diperlukan)Kasing Alat: Obeng Gelang ESD/pasta matstermal dengan aplikator
Tiga Sirkuit Loudspeaker -- Tutorial Langkah-demi-Langkah: 3 Langkah
Tiga Sirkuit Loudspeaker || Tutorial Langkah-demi-Langkah: Sirkuit Loudspeaker memperkuat sinyal audio yang diterima dari lingkungan ke MIC dan mengirimkannya ke Speaker dari mana audio yang diperkuat diproduksi. Di sini, saya akan menunjukkan kepada Anda tiga cara berbeda untuk membuat Sirkuit Loudspeaker ini menggunakan:
Levitasi Akustik Dengan Arduino Uno Langkah-demi-Langkah (8-langkah): 8 Langkah
Akustik Levitation Dengan Arduino Uno Langkah-demi-Langkah (8-langkah): transduser suara ultrasonik L298N Dc female adapter power supply dengan pin dc laki-laki Arduino UNOBreadboardCara kerjanya: Pertama, Anda mengunggah kode ke Arduino Uno (ini adalah mikrokontroler yang dilengkapi dengan digital dan port analog untuk mengonversi kode (C++)
Centro De Cómputo Para Niños Con Raspberry Pi: 7 Langkah
Centro De Cómputo Para Niños Con Raspberry Pi: Estos serán los primeros pasos de la Raspberry Pi y para ello necesitaremos: Raspberry Pi 2 Adaptor de red a micro USB Tarjeta micro SD(de 8 gb) Kabel HDMI Cargador Tikus Teclado untuk computadoraEn caso de contar con un Kit de inicio