Kazalo:
- 1. korak: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- 2. korak: Senzorji Digitais - Publicação
- 3. korak: Codigo Para Acionamento Sirene
- 4. korak: Codigo Twitter - objava
- 5. korak: Centro De Comando
- 6. korak: Codigo Twitter - Monitoração
- 7. korak: Estrutura AWS
Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
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 temperature, luminosidade, oscilação (tilte) e botão. Ainda no cenário de colaboração prevemos integração com on Twitter e aplicativos com suporte mqtt para acionamento do alertta.
Diante a possiblebilidade 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 possiblebike de fakenews. Tal tomada de Decisionão é ključna diante ao pânico que um alarme falso pode gerar.
Como solução de alertta de mensagem estamos obzir ali uporabo e -pošte SMS, alerta através de cliente mqtt, email, sirene e twitter.
O projeto contou com uso de recursos da AWS vključuje IOT CORE, EC2 e SNS
Senzorji da DragonBord 410c
odjemalci android mqtt
Sendo todo desenvolvido em python
Autores:
Diego Fernandes dos Santos - [email protected]
Gabriel Piovani Moreira dos Santos - [email protected]
Gustavo Venancio Luz - [email protected]
Paulo Henrique Almeida Santos - [email protected]
1. korak: Dragonbord 410c - Publicação Dos Sensores - Analogicos
Abaixo o codigo de publicação dos sensores analógicos, os sensores de temperature 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 detectado decresce o contador em 20 segundos.
program rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev iz libsoc uvoz gpio iz časovnega uvoza
# Importa lib para comunicacao com MOSQUITTO uvoz paho.mqtt.client kot 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 usar a porta ADC2 use o seguinte vetor de configuraç࣠o channel_select2 = [0x01, 0xA0, 0x00]
def on_connect (mqttc, obj, zastave, 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 sporočila:" + str (sredi) + "\ n") pass
# Criamos ali 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)
če _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
z gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 medtem ko contador <50: gpio_cs.set_high () spanje (0,00001) gpio_cs.set_low () rx = spi.xfer (channel_select1) gpio) 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 alarmme, teste ultima leitura + 5%
če je adc_value_old == 0: adc_value_old = adc_value, če je adc_value> (adc_value_old*1.05): pub.publish ("ALARME", "ON") print ("Alarmado temperatura") adc_value_old = adc_value spanje (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 alarmme, teste ultima leitura + 50%
če je adc_value2_old == 0: adc_value2_old = adc_value2 če je adc_value2> (adc_value2_old*1.5): pub.publish ("ALARME", "ON") print ("Alarmado Luminosidade") adc_value2_old = adc_va2
2. korak: Senzorji 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 detectado uma anomalia ou botão de pânico pressionado a contagem regressiva é iniciada.
program rodando dentro da dragon borad 410c
from libsoc_zero. GPIO import Buttonfrom libsoc_zero. GPIO import Tilt from time import sleep sleep import paho.mqtt.client kot mqtt import sys
def on_connect (mqttc, obj, zastave, 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 sporočila:" + str (sredi) + "\ n") pass
def detectaTilt (): count = 0 sleep_count = 0 while True: poskusite: tilt.wait_for_tilt (1) razen: sleep_count += 1 else: count += 1 sleep_count += 1 if sleep_count> 999: break
print ("count:", count) if count> 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
topic = "grupo3"
# Conexao com localhost, uma vez que testamos fora do labredes. mqttc.connect ("34.230.74.201", 1883)
nagib = nagib ('GPIO-A')
btn = Gumb ('GPIO-C')
medtem ko je 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 ")
3. korak: Codigo Para Acionamento Sirene
Codigo para subscrição para acionamento da SIRENE, program rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.client kot mqtt
iz libsoc_zero. GPIO LED za uvoz iz časa uvoza sleep sleep = LED ('GPIO-E') #led.off ()
# Define o que fazer ao conectar def on_connect (client, obj, flags, rc): print ("ConexÃÆ' £ o estabelecida com broker")
# Določi o que fazer ao receber uma mensagem def on_message (odjemalec, obj, sporočilo): 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 posrednika 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
# Increve no topico sub.subscribe ("SIRENE", qos = 0)
# Loop para escuta sub.loop_forever ()
4. korak: Codigo Twitter - objava
Código para publicação do twitter assim que acionado o alarme.
código rodando na maquina virtualni AWS EC2
#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-objavi sporočilo o stanju na vaši časovnici # --- -------------------------------------------------- ------------------ uvoz paho.mqtt.naročite se kot naročite
čas uvoza
z uvoza na twitterju *
#------------------------------------------------- ---------------------- # kakšen naj bi bil naš novi status? #------------------------------------------------- ---------------------- new_status = "#Terremoto Nabavi uma zona segura-teste"
#------------------------------------------------- ---------------------- # naložite naše poverilnice API # ---------------------- ------------------------------------------------- uvoz sys sys.path.append (".") Uvozi konfiguracijo
#------------------------------------------------- ---------------------- # ustvari objekt API twitter # ---------------------- ------------------------------------------------- twitter = Twitter (auth = OAuth ('senha removida))
#------------------------------------------------- ---------------------- # objavi novo stanje # twitter API dokumenti: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------
medtem ko 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", rended = False), če je m.topic == "twitteralarme" in str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("posodobljeno stanje: % s" % new_status)
5. korak: Centro De Comando
semper que acionado um dispositivo manual ou detectado um alertta manual do usuário é acionada uma contagem regressiva para envio de mensagem. O operaterju pode Cancelar o envio ou acionar o envio imediato do alerta.
Za uporabo dasboard -a z androidom na telefonu za računalnik z operacijskim sistemom centro de comando.
código rodando na maquina virtualni AWS EC2
uvoz paho.mqtt.client kot pahoimport paho.mqtt.subscribe as subscribe uvoz paho.mqtt.publish kot objava import json čas uvoza uvoz šest uvoz ssl iz časa uvoz spanja
themes = ['#']
gatilho = 0 hora_disparo = 0 published.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") published.single ("sensor1", "OFF", qos = 1, hostname = "172.31.83.191 ") published.single (" senzor2 "," IZKLOP ", qos = 1, ime gostitelja =" 172.31.83.191 ")
connflag = Napačno
def on_connect (odjemalec, uporabniški podatki, zastavice, rc): globalna connflag connflag = True print (connflag) print ("Povezava je vrnila rezultat:" + str (rc))
def on_message (client, userdata, msg): # print ("teste") print (msg.topic+""+str (msg.payload))
def on_log (client, userdata, level, buf): print (msg.topic+""+str (msg.payload))
mqttc = paho. Client ("posrednik_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_TLSv1con, cip, keepalive = 60) mqttc.loop_start ()
medtem ko 1: hora = time.time () sleep (.1) published.single ("LEDTERREMOTO", "vklopljeno", qos = 1, ime gostitelja = "172.31.83.191")
# if connflag == True: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: published.single ("TEMPO", str (okroglo (hora_disparo-hora, 0)), qos = 1, ime gostitelja = "172.31.83.191") published.single ("LEDTERREMOTO", "vklopljeno", qos = 1, ime gostitelja = "172.31.83.191") drugo: objavi.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) in (gatilho == 1): # print ("TERREMOTO") # print (connflag) if connflag == True: # mqttc.publish ("sporočilo", json.dumps ({'sporočilo': "TERREMOTO"}), qos = 1) # mqttc.publish ("sporočilo", "TERREMOTO ", qos = 1) mqttc.publish (" sporočilo ", json.dumps (" TERREMOTO - PROCURE UMA ZONA SEGURA "), qos = 1)
# print ("teste SNS") # published.single ("LED", "vklopljeno", ime gostitelja = "172.31.83.191") published.single ("SIRENE", "vklopljeno", qos = 1, ime gostitelja = "172.31. 83.191 ") published.single (" TEMPO "," TERREMOTO ", qos = 1, ime gostitelja =" 172.31.83.191 ") published.single (" ACIONADO "," IZKLOP ", qos = 1, ime gostitelja =" 172.31.83.191 ") published.single ("twitteralarme", "vklopljeno", qos = 1, ime gostitelja = "172.31.83.191") published.single ("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos = 1, ime gostitelja = "172.31.83.191 ") gatilho = 0 sleep (5) m = subscribe.simple (teme, ime gostitelja =" 172.31.83.191 ", ohranjeno = False), če je m.topic ==" ACIONADO "in str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancellado "), če je m.topic ==" medico "in str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "in str (m.payload.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulancia "in str (m.payloa d.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) če je m. topic == "urgente" in str (m.payload.decode ("utf-8")) == "on": published.single ("ACIONADO", 1, qos = 1, ime gostitelja = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+5 if str (m.payload.decode ("utf-8")) == "ON": če gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 drugo: print ("Acionado") published.single ("ACIONADO", 1, qos = 1, ime gostitelja = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60
6. korak: Codigo Twitter - Monitoração
código monitorração do twitter, pesquisa post na regiao de sorocaba
código rodando na maquina virtualni AWS EC2
n
from twitter import *import config import paho.mqtt.publish as published
od časa uvoza spanja
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
zemljepisna širina = -23,546211 dolžina = -46,637840 alcance = 50 rezultatov = 1
published.single ("twitter_alarme", "ON", ime gostitelja = "34.230.74.201")
result_count = 0 last_id = Brez zastavice = 0
za i v dosegu (60): #----------------------------------------- ------------------------------ # izvedite iskanje glede na zemljepisno širino in dolžino # twitter API docs: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- poskusite: query = twitter.search.tweets (q = "#Terremoto", geocode = " %f, %f, %dkm" %(zemljepisna širina, dolžina, alcance), max_id = last_id) print ("leu")
razen: print ("erro acesso twitter") break
za rezultat v poizvedbi ["statusi"]:
#------------------------------------------------- ---------------------- # obdeluje rezultat le, če ima geolokacijo # ----------------- -------------------------------------------------- ---- če je rezultat ["geo"]: rezultat_števek += 1 zadnji_id = rezultat ["id"] spanje (1) če je rezultat_številk == rezultat: zastava += 1 objava.single ("twitter_alarme", "ON", hostname = "34.230.74.201") published.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") prelom
7. korak: Estrutura AWS
Uporabite uma maquina virtualni rodando ubuntu na strukturo AWS EC2
Uporabite AWS IOT CORE za servis MQTT v konfiguracijah kot skladne s tipo de mensagem
Utilizmos topicos do AWS SNS que eram acionados pelo AWS IOT CORE
Priporočena:
Števec korakov - mikro: Bit: 12 korakov (s slikami)
Števec korakov - Micro: Bit: Ta projekt bo števec korakov. Za merjenje korakov bomo uporabili senzor pospeška, ki je vgrajen v Micro: Bit. Vsakič, ko se Micro: Bit trese, bomo štetju dodali 2 in ga prikazali na zaslonu
Comando Por Voz - DragonBoard410c: 5 korakov
Comando Por Voz - DragonBoard410c: Este guia ir á ensinar a instalar e configurar o programu Julius junto com o Coruja, que s ã o respectivamente um program de reconhecimento de voz e o modelo ac ú stico em Portugu ê s. A vantagem da utiliza ç ã o do
Akustična levitacija z Arduino Uno Korak po korak (8 korakov): 8 korakov
Akustična levitacija z Arduino Uno Korak po korak (8 korakov): ultrazvočni pretvorniki zvoka L298N Dc ženski adapter z napajalnim vtičem za enosmerni tok Arduino UNOBreadboard Kako to deluje: Najprej naložite kodo v Arduino Uno (to je mikrokrmilnik, opremljen z digitalnim in analogna vrata za pretvorbo kode (C ++)
Vijak - Nočna ura za brezžično polnjenje DIY (6 korakov): 6 korakov (s slikami)
Bolt - Nočna ura za brezžično polnjenje DIY (6 korakov): Induktivno polnjenje (znano tudi kot brezžično polnjenje ali brezžično polnjenje) je vrsta brezžičnega prenosa energije. Za zagotavljanje električne energije prenosnim napravam uporablja elektromagnetno indukcijo. Najpogostejša aplikacija je brezžično polnjenje Qi
Centro De Cómputo Para Niños Con Raspberry Pi: 7 korakov
Centro De Cómputo Para Niños Con Raspberry Pi: To so napake, ki niso primerne za Raspberry Pi, in parametri, ki jih potrebujete: Raspberry Pi 2 Adapter, rdeč, mikro USB Tarjeta micro SD (de 8 gb) Kabel HDMI Cargador Rat ó n Teclado para computadoraEn caso de contar con un Kit de inicio