Innehållsförteckning:
- Steg 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Steg 2: Sensores Digitais - Publicação
- Steg 3: Codigo Para Acionamento Sirene
- Steg 4: Codigo Twitter - Posta
- Steg 5: Centro De Comando
- Steg 6: Codigo Twitter - Monitoração
- Steg 7: Estrutura AWS
Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
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) e botão de 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 é avgörande diante ao pânico que um alarme falso pode gerar.
Varningssignal för män kan också ta hänsyn till SMS, varning för kunder, e -post, sirene och twitter.
Oprojeto contou com uso de recursos da AWS incluindo IOT CORE, EC2 e SNS
Sensores da DragonBord 410c
klienter android mqtt
Skicka till och med desenvolvido med python
Författare:
Diego Fernandes dos Santos - [email protected]
Gabriel Piovani Moreira dos Santos - [email protected]
Gustavo Venancio Luz - [email protected]
Paulo Henrique Almeida Santos - [email protected]
Steg 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, and todo novo alerta detectado decresce o contador em 20 segundos.
programa rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev från libsoc import gpio från tid importera viloläge
# Importa lib para comunicacao com MOSQUITTO import paho.mqtt.client som 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, flaggor, 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 ("Message Id:" + str (mid) + "\ n") pass
# 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, vi kan testa för att göra labredes. broker_address = "34.230.74.201"
pub.connect (mäklare_adress)
om _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
med gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 medan contador <50: gpio_cs.set_high () sover (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_select1_ g)) 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 temperatura") 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_ (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)
Steg 2: Sensores Digitais - Publicação
código para publicação dos sensores digitais
Os sensores digitais nästa 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.
programa rodando dentro da dragon borad 410c
från libsoc_zero. GPIO importknapp från libsoc_zero. GPIO import Luta från tid importera sömnimport paho.mqtt.client som mqtt import sys
def on_connect (mqttc, obj, flaggor, 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 ("Message Id:" + str (mid) + "\ n") pass
def detectaTilt (): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt (1) utom: 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 konfiguracoes mqttc = mqtt. Client ()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
topic = "grupo3"
# Conexao com localhost, vi kan testa för att göra labredes. mqttc.connect ("34.230.74.201", 1883)
tilt = Tilt ('GPIO-A')
btn = Knapp ('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 ")
Steg 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 MOSQUITTOimportera paho.mqtt.client som mqtt
från libsoc_zero. GPIO import LED från tid import sleep sleep = LED ('GPIO-E') #led.off ()
# Definiera o que fazer ao conectar def on_connect (klient, obj, flaggor, rc): print ("ConexÃà £ o estabelecida com broker")
# Definiera o que fazer ao receber uma mensagem def on_message (client, obj, message): 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 gör mäklare broker_address = "34.230.74.201"
# Cria o cliente sub = mqtt. Client ("grupo3")
sub.connect (mäklare_adress)
sub.on_message = on_message sub.on_connect = on_connect
# Increve no topico sub. prenumerera ("SIRENE", qos = 0)
# Loop para escuta sub.loop_forever ()
Steg 4: Codigo Twitter - Posta
Código para publicação do twitter assim que acionado o alarme.
codigo rodando na maquina virtual från AWS EC2
#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-postar ett statusmeddelande till din tidslinje # --- ---------------------------------------------------------- ------------------ import paho.mqtt. prenumerera som prenumerera
importtid
från twitterimport *
#------------------------------------------------- ---------------------- # vad ska vår nya status vara? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"
#------------------------------------------------- ---------------------- # ladda våra API-referenser # ---------------------- ------------------------------------------------- import sys sys.path.append (".") importkonfiguration
#------------------------------------------------- ---------------------- # skapa twitter API-objekt # ---------------------- ------------------------------------------------- Twitter = Twitter (auth = OAuth ('senha removeida))
#------------------------------------------------- ---------------------- # publicera en ny status # twitter API-dokument: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------
medan 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", behålls = falskt) om m.topic == "twitteralarme" och str (m.payload.decode ("utf-8")) == "på": resultat = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("uppdaterad status: % s" % new_status)
Steg 5: Centro De Comando
en handbok som du kan använda om du vill veta mer om hur du gör en användarhandbok om hur du kan använda regressiva för en mens. O operador pode cancelar o envio ou acionar o envio imediato do alerta.
Para uso do dasboard utilizamos um android do phone fora for a mesa of operação do centro de comando.
codigo rodando na maquina virtual från AWS EC2
import paho.mqtt.client som pahoimport paho.mqtt. prenumerera som prenumerera import paho.mqtt.publicera som publicera import json importtid importera sex import ssl från tid importera viloläge
ämnen = ['#']
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, hostname =" 172.31.83.191 ")
connflag = Falskt
def on_connect (klient, användardata, flaggor, rc): global connflag connflag = True print (connflag) print ("Anslutning returnerat resultat:" + str (rc))
def on_message (client, userdata, msg): # print ("teste") print (msg.topic+""+str (msg.payload))
def on_log (klient, användardata, nivå, 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, ciphers awnt, keepalive = 60) mqttc.loop_start ()
medan 1: hora = time.time () sleep (.1) publish.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")
# if connflag == True: # mqttc.publish ("meddelande", json.dumps ({'meddelande': "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: publicera.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) och (gatilho == 1): # print ("TERREMOTO") # print (connflag) if connflag == True: # mqttc.publish ("meddelande", json.dumps ({'meddelande': "TERREMOTO"}), qos = 1) # mqttc.publish ("meddelande", "TERREMOTO ", qos = 1) mqttc.publish (" meddelande ", 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 sömn (5) m = subscribe.simple (ämnen, värdnamn =" 172.31.83.191 ", behålls = falskt) om m.topic ==" ACIONADO "och str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") om m.topic ==" medico "och str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "och str (m.payload.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulancia "och str (m.payloa d.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) om m. topic == "urgente" och str (m.payload.decode ("utf-8")) == "on": publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+5 if str (m.payload.decode ("utf-8")) == "ON": if gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 annars: print ("Acionado") publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60
Steg 6: Codigo Twitter - Monitoração
código monitoração do twitter, pesquisa post na regiao de sorocaba
codigo rodando na maquina virtual från AWS EC2
n
från twitter import *import config import paho.mqtt.publish as publish
från tid importera sömn
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
latitud = -23,546211 longitud = -46,637840 alcans = 50 resultat = 1
publish.single ("twitter_alarme", "ON", hostname = "34.230.74.201")
result_count = 0 last_id = Ingen flagga = 0
för i inom området (60): #----------------------------------------- ------------------------------ # utför en sökning baserad på latitud och longitud # twitter API-dokument: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- försök: fråga = twitter.search.tweets (q = "#Terremoto", geokod = " %f, %f, %dkm" %(latitud, longitud, alcans), max_id = last_id) print ("leu")
utom: print ("erro acesso twitter") paus
för resultat i fråga ["status"]:
#------------------------------------------------- ---------------------- # bearbetar bara ett resultat om det har en geografisk plats # ----------------- ---------------------------------------------------------- ---- 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") paus
Steg 7: Estrutura AWS
Utilizamos uma maquina virtual rodando ubuntu and estrutura AWS EC2
Utnyttjar en AWS IOT CORE för att serva MQTT och konfigurationer som fungerar i enlighet med tips för män
Utnyttjande ämnen för AWS SNS kan också användas för AWS IOT CORE
Rekommenderad:
Arduino Car Reverse Parking Alert System - Steg för steg: 4 steg
Arduino Car Reverse Parking Alert System | Steg för steg: I det här projektet kommer jag att utforma en enkel Arduino Car Reverse Parking Sensor Circuit med Arduino UNO och HC-SR04 Ultrasonic Sensor. Detta Arduino -baserade bilomvändningsvarningssystem kan användas för autonom navigering, robotavstånd och andra
Steg för steg PC -byggnad: 9 steg
Steg för steg PC -byggnad: Tillbehör: Hårdvara: ModerkortCPU & CPU -kylarePSU (strömförsörjningsenhet) Lagring (HDD/SSD) RAMGPU (krävs inte) CaseTools: Skruvmejsel ESD -armband/mathermisk pasta med applikator
Comando Por Voz - DragonBoard410c: 5 steg
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
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): 8 steg
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): ultraljudsgivare L298N Dc kvinnlig adapter strömförsörjning med en manlig DC-pin Arduino UNOBreadboardHur det fungerar: Först laddar du upp kod till Arduino Uno (det är en mikrokontroller utrustad med digital och analoga portar för att konvertera kod (C ++)
Centro De Cómputo Para Niños Con Raspberry Pi: 7 steg
Centro De Cómputo Para Niños Con Raspberry Pi: Estos ser á n los primeros pasos de la Raspberry Pi och 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