Isi kandungan:
- 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 - Kirim
- Langkah 5: Centro De Comando
- Langkah 6: Codigo Twitter - Monitoração
- Langkah 7: Estrutura AWS
Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:09
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 temperatura, luminosidade, oscilação (tilte) boto Ainda no cenário de colaboração prevemos integração com o Twitter e 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 avaliar se a informação esta correta evitando assim falsos-positivos dos dispositivos automatizado e avaliar a possibilidade de fakenews. Tal tomada de decisão adalah penting diante ao pânico que um alarme falso pode gerar.
Como solução de alerta de mensagem estamos thinkando o uso do envio de SMS, alerta através de cliente mqtt, e-mel, sirene dan twitter.
O projeto contou com uso de recursos da AWS incluindo IOT CORE, EC2 e SNS
Sensores da DragonBord 410c
pelanggan mqtt android
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 publicação dos sensores analógicos, os sensores de temperatura e luminosidade estão configurados para que assim que Detectarem uma variação fora do padrão pré estabelecido enviarem um alerta através do protocolo mqtt sinalizando um evento.
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 Detado decresce o contador em 20 segundos.
programa rodando dentro da naga borad 410c
#! / usr / bin / python3import spidev dari libsoc import gpio dari waktu import import
# Importa lib para comunicacao com MOSQUITTO import 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
#Usando a porta ADC1 channel_select1 = [0x01, 0x80, 0x00]
#Para menggunakan porta ADC2 menggunakan seguinte vetor de configuraÃÆ'§ÃÆ' £ £ channel_select2 = [0x01, 0xA0, 0x00]
def on_connect (mqttc, obj, flags, rc): cetak ("rc:" + str (rc))
def on_message (mqttc, obj, msg): print (msg.topic + "" + str (msg.qos) + "" + str (msg.payload))
def on_publish (mqttc, obj, mid): cetak ("Id Id:" + str (pertengahan) + "\ n") hantaran
# Criamos o client e setamos suas configuracoes 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)
jika _nama _ == '_ 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 sementara contador <50: gpio_cs.set_high () tidur (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_select1) gp) 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 cetakan ("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") cetak ("Alarmado temperatura") adc_value_old = adc_value tidur (1)
gpio_cs.set_high () tidur (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 = iklan (rx [2] & 0xff) adc_value2 = adc_value2 / 10 cetak ("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") cetak ("Alarmado Luminosidade") adc_value2_old = adc_value2 tidur (3)
Langkah 2: Sensores Digitais - Publicação
código para publicação dos sensores digitais
Os sensores digitais neste projeto foram o tilte que detecta os tremores e o botão para simular o uso de um botão de pânico.
quando Detado uma anomalia ou botão de pânico pressionado a contagem regressiva é iniciada.
programa rodando dentro da naga borad 410c
dari libsoc_zero. GPIO import Buttondari libsoc_zero. GPIO import Tilt dari time import import import paho.mqtt.client sebagai mqtt import sys
def on_connect (mqttc, obj, flags, rc): cetak ("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 Mesej:" + str (tengah) + "\ n") hantaran
def detectaTilt (): hitung = 0 sleep_count = 0 sementara True: cuba: tilt.wait_for_tilt (1) kecuali: sleep_count + = 1 other: count + = 1 sleep_count + = 1 if sleep_count> 999: break
cetak ("hitung:", hitung) jika hitungan> 200: pub = mqttc.publish ("TERREMOTO", "ON") pub = mqttc.publish ("SISMOGRAFO", str (count)) # Criamos o client e setamos suas configuracoes mqttc = mqtt. Client ()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
topik = "grupo3"
# Conexao com localhost, uma vez que testamos fora do labredes. mqttc.connect ("34.230.74.201", 1883)
tilt = Miring ('GPIO-A')
btn = Butang ('GPIO-C')
sementara Benar: tidur (0,25) mendeteksi Tilt () jika 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 subscrição para acionamento da SIRENE, programa rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.klien sebagai mqtt
dari libsoc_zero. GPIO import LED dari time import led led = LED ('GPIO-E') # led.off ()
# Tentukan o que fazer ao conectar def on_connect (klien, obj, flags, rc): print ("ConexÃÆ' £ o estabelecida com broker")
# Tentukan o que fazer ao penerima uma mensagem def on_message (klien, obj, mesej): print ("LED" + str (message.payload.decode ("utf-8"))) jika str (message.payload.decode ("utf-8")) == "on": print ("Sirene ligada") led.on () else: print ("Sierene apagada") led.off ()
# IP buat broker broker_address = "34.230.74.201"
# Cria o cliente sub = mqtt. Client ("grupo3")
sub.connect (broker_address)
sub.on_message = on_message sub.on_connect = on_connect
# Naikkan subtanggan langganan topico ("SIRENE", qos = 0)
# Gelung untuk escuta sub.loop_forever ()
Langkah 4: Codigo Twitter - Kirim
Código para publicação do twitter assim que acionado o alarme.
código rodando na maquina virtual da AWS EC2
#! / usr / bin / env python # ---------------------------------------- ------------------------------- # twitter-post-status # - menghantar mesej status ke garis masa anda # --- -------------------------------------------------- ------------------ import paho.mqtt.subscribe sebagai subscribe
masa import
dari import twitter *
# ------------------------------------------------- ---------------------- # apakah status baru kita? # ------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura - teste"
# ------------------------------------------------- ---------------------- # muatkan kelayakan API kami # ---------------------- ------------------------------------------------- import sys sys.path.append (".") import import
# ------------------------------------------------- ---------------------- # buat objek API twitter # ---------------------- ------------------------------------------------- twitter = Twitter (auth = OAuth ('senha removida))
# ------------------------------------------------- ---------------------- # siarkan status baru # dokumen API twitter: https://dev.twitter.com/rest/reference/post/statu… # ------------------------------------------------- ----------------------
sementara 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", retained = False) jika m.topic == "twitteralarme" dan str (m.payload.decode ("utf-8")) == "on": hasil = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("status dikemas kini:% s"% new_status)
Langkah 5: Centro De Comando
manual semper que acionado um dispositivo ou manual manual detectado um alerta do usuário é acionada uma contagem regressiva para envio de mensagem. O operador pode cancelar o envio ou acionar o envio imediato do alerta.
Para uso do dasboard utilizamos um android do telefone para compor a mesa de operação do centro de comando.
código rodando na maquina virtual da AWS EC2
import paho.mqtt.client sebagai pahoimport paho.mqtt.subscribe sebagai subscribe import paho.mqtt.publish as publish import json import time import enam import ssl dari time import sleep
topik = ['#']
gatilho = 0 hora_disparo = 0 publish.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publish.single ("sensor1", "OFF", qos = 1, nama host = "172.31.83.191 ") publish.single (" sensor2 "," OFF ", qos = 1, hostname =" 172.31.83.191 ")
connflag = Salah
def on_connect (client, userdata, flags, rc): global connflag connflag = True print (connflag) print ("Hasil sambungan dikembalikan:" + str (rc))
def on_message (client, userdata, msg): # print ("teste") print (msg.topic + "" + str (msg.payload))
def on_log (klien, data pengguna, level, buf): cetak (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-sijil.pem. crt "keyPath =" 9e85dfd42a-private.pem.key "mqttc.tls_set (caPath, certfile = certPath, keyfile = keyPath, cert_reqs = ssl. CERT_REQUIRED, tls_version = ssl. PROTOCOL_TLSv1one, ciphs, keepalive = 60) mqttc.loop_start ()
manakala 1: hora = time.time () sleep (.1) publish.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")
# if connflag == True: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) jika gatilho == 1: publish.single ("TEMPO", str (bulat (hora_disparo-hora, 0)), qos = 1, nama host = "172.31.83.191") publish.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") lain: terbitkan.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) dan (gatilho == 1): # cetak ("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, nama host =" 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 = subscribe.simple (topik, nama host =" 172.31.83.191 ", dikekalkan = Salah) jika m.topic ==" ACIONADO "dan str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") jika m.topic ==" medico "dan str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == Benar: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) jika m.topic ==" bombeiro "dan str (m.payload.decode ("utf-8")) == "on": if connflag == Benar: 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 == Benar: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) jika m. topic == "urgente" dan str (m.payload.decode ("utf-8")) == "on": publish.single ("ACIONADO", 1, qos = 1, nama host = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 5 if str (m.payload.decode ("utf-8")) == "ON": if gatilho == 1: cetak ("acelerado 20") hora_disparo = hora_disparo -20 yang lain: cetak ("Acionado") publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 60
Langkah 6: Codigo Twitter - Monitoração
código monitoração do twitter, pesquisa post na regiao de sorocaba
código rodando na maquina virtual da AWS EC2
n
dari twitter import * import config import paho.mqtt.publish as publish
dari waktu tidur import
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
garis lintang = -23.546211 garis bujur = -46.637840 alcance = 50 resultados = 1
publish.single ("twitter_alarme", "ON", nama host = "34.230.74.201")
result_count = 0 last_id = Tiada bendera = 0
untuk i dalam jarak (60): # ----------------------------------------- ------------------------------ # lakukan carian berdasarkan garis lintang dan garis bujur # twitter API API: https:// dev. twitter.com/rest/reference/get/search… # ------------------------------------- ---------------------------------- cuba: pertanyaan = twitter.search.tweets (q = "#Terremoto", geocode = "% f,% f,% dkm"% (garis lintang, garis bujur, alcance), max_id = last_id) cetakan ("leu")
kecuali: cetak ("erro acesso twitter") rehat
untuk hasil pertanyaan ["status"]:
# ------------------------------------------------- ---------------------- # hanya memproses hasil jika mempunyai geolokasi # ----------------- -------------------------------------------------- ---- jika hasil ["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", nama host = "34.230.74.201") rehat
Langkah 7: Estrutura AWS
Utilizamos uma maquina virtual rodando ubuntu na estrutura AWS EC2
Utilizamos a AWS IOT CORE para o serviço de MQTT onde configuramos sebagai ações συμμόρφωση o tipo de mensagem
Utilizmos topicos do AWS SNS que eram acionados pelo AWS IOT CORE
Disyorkan:
Sistem Makluman Tempat Letak Balik Kereta Arduino - Langkah demi Langkah: 4 Langkah
Sistem Makluman Tempat Letak Balik Kereta Arduino | Langkah demi Langkah: Dalam projek ini, saya akan merancang Litar Sensor Tempat Letak Kereta Berbalik Arduino yang ringkas menggunakan Sensor Ultrasonik Arduino UNO dan HC-SR04. Sistem amaran Car Reverse berasaskan Arduino ini dapat digunakan untuk Navigasi Autonomi, Robot Ranging dan rangkaian lain
Langkah demi Langkah Pembinaan PC: 9 Langkah
Langkah demi Langkah Pembinaan PC: Persediaan: Perkakasan: MotherboardCPU & CPU cooler PSU (Unit bekalan kuasa) Penyimpanan (HDD / SSD) RAMGPU (tidak diperlukan) Alat kes: Pemutar skru Gelang ESD / tampal matsthermal dengan aplikator
Comando Por Voz - DragonBoard410c: 5 Langkah
Comando Por Voz - DragonBoard410c: Este guia ir á ensinar a instalar e configurar o programa Julius junto com o Coruja, que s ã o respectivamente um programa de reconhecimento de voz e o modelo ac ú stico em Portugu ê s.A vantagem da utiliza ç ã o do Ju
Pengangkatan Akustik Dengan Arduino Uno Langkah demi Langkah (8-langkah): 8 Langkah
Acoustic Levitation With Arduino Uno Step-by Step (8-step): transduser suara ultrasonik L298N Dc power adaptor wanita dengan pin dc lelaki Arduino UNOBreadboardBagaimana ini berfungsi: Pertama, anda memuat naik kod ke Arduino Uno (ia adalah mikrokontroler yang dilengkapi dengan digital dan port analog untuk menukar kod (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 Adaptador de red a micro USB Tarjeta micro SD (de 8 gb) Cable HDMI Cargador Rat ó n Teclado para computadoraEn caso de contar con un Kit de inicio