Tartalomjegyzék:
- 1. lépés: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- 2. lépés: Sensores Digitais - Publicação
- 3. lépés: Codigo Para Acionamento Sirene
- 4. lépés: Codigo Twitter - Bejegyzés
- 5. lépés: Centro De Comando
- 6. lépés: Codigo Twitter - Monitoração
- 7. lépés: Estrutura AWS
Videó: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
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 pânico. Ainda no cenário de colaboração prevemos integração com o Twitter and aplicativos com comporting mqtt para acionamento do alerta.
Diante a lehetséges diverzios meios de entrada na solução, caberá um centro de de operações nyilvános se a informationço esta korrektus evitando assim falsos-positivos dos dispositivos automatizado e avaliar a possibleilidade de fakenews. Tal tomada de decisão é essential diante ao pânico que um alarmme falso pode gerar.
Como solução de alerta de mensagem estamos kaaluk vagy használjuk az envio de SMS, alerta através de cliente mqtt, email, szirene és twitter.
Az AWS recurso projeto contou com uso de recursos da IOT CORE, EC2 és SNS segítségével
Sensores da DragonBord 410c
clientes android mqtt
Küldje el a python desenvolvido -ját
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. lépés: 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 segment, and todo novo alerta detectado decresce o contador em 20 segundos.
program rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev from libsoc import gpio from time import alvó
# Importa lib para comunicacao com MOSQUITTO import paho.mqtt.client as 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 használjon egy porta ADC2 -t, vagy használja a beállítást, ha konfigurálja a csatorna_select2 = [0x01, 0xA0, 0x00]
def on_connect (mqttc, obj, flags, 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 ("Üzenet azonosítója:" + str (közép) + "\ 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, uma vez que testamos fora do labredes. broker_address = "34.230.74.201"
pub.connect (broker_address)
ha _név _ == '_ fő_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0, míg contador <50: gpio_cs.set_high () alvás (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 ("Hőmérséklet: % f / n" % adc_value) pub.publish ("hőmérséklet", str (adc_value)) # teste para acionar contador do alarmme, 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 () alvás (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 = 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 alarmme, 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
2. lépés: Sensores Digitais - Publicação
código para publicação dos sensores digitais
Os sensores digitalis 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
A libsoc_zero. GPIO import gombja
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 ("Üzenet azonosítója:" + str (közép) + "\ n") pass
def detectaTilt (): count = 0 sleep_count = 0, míg True: try: tilt.wait_for_tilt (1), kivéve: sleep_count += 1 else: count += 1 sleep_count += 1 if sleep_count> 999: break
print ("count:", count), ha a szám> 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)
tilt = Tilt ('GPIO-A')
btn = Gomb ('GPIO-C')
míg Igaz: alvás (0,25) észlelhető (), ha btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") print ("Botao ON") alvás (1) pub = mqttc.publish ("PANICO "," OFF ") # else: # pub = mqttc.publish (" PANICO "," OFF ") # print (" Botao OFF ")
3. lépés: 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 as mqtt
from libsoc_zero. GPIO import LED from time import alvó led = LED ('GPIO-E') #led.off ()
# Define o que fazer ao conectar def on_connect (kliens, obj, zászlók, rc): print ("ConexÃÆ'à £ £ estabelecida com broker")
# Define o que fazer ao receber uma mensagem def on_message (kliens, obj, üzenet): 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 cliente sub = mqtt. Client ("grupo3")
sub.connect (broker_address)
sub.on_message = on_message sub.on_connect = on_connect
# Növelje a témát
# Loop para escuta sub.loop_forever ()
4. lépés: Codigo Twitter - Bejegyzés
Código para publicação do twitter assim que acionado o alarmme.
Código rodando maquina virtuális AWS EC2
#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-állapotüzenetet tesz közzé az idővonalán # --- -------------------------------------------------- ------------------ import paho.mqtt.subscribe as subscribe
importálási idő
a Twitter importálásából *
#------------------------------------------------- ---------------------- # milyen legyen az új státuszunk? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"
#------------------------------------------------- ---------------------- # töltse be API hitelesítő adatainkat # ---------------------- ------------------------------------------------ import sys sys.path.append (".") import konfiguráció
#------------------------------------------------- ---------------------- # twitter API objektum létrehozása # ---------------------- ----------------------------------------------- twitter = Twitter (auth = OAuth ('senha removeida))
#------------------------------------------------- ---------------------- # új állapot közzététele # twitter API-dokumentumok: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------
míg 1: m = feliratkozás.egyszerű ("twitteralarme", hostname = "172.31.83.191", megtartva = Hamis), ha m.topic == "twitteralarme" és str (m.payload.decode ("utf-8")) == "on": eredmények = twitter.statuses.update (állapot = (new_status)+str (time.time ())) # print ("frissített állapot: % s" % new_status)
5. lépés: Centro De Comando
semper que acionado um dispositivo manual or detectado um alerta manual do usuário é acionada uma contagem regressiva para envio de mensagem. O operador pode cancellary o envio ou acionar o envio imediato do alerta.
Használja a dasboard -ot az androidos telefonon, hogy megtudja, hogyan kell működni a központban.
Código rodando maquina virtuális AWS EC2
import paho.mqtt.client mint pahoimport paho.mqtt.subscribe as subscribe import paho.mqtt.publish as közzététel import json import time import hat import ssl from time import alvó állapot
topic = ['#']
gatilho = 0 hora_disparo = 0 publis.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publis.single ("sensor1", "OFF", qos = 1, hostname = "172.31".83.191 ") publis.single (" szenzor2 "," KI ", qos = 1, gazdagépnév =" 172.31.83.191 ")
connflag = Hamis
def on_connect (kliens, felhasználói adatok, zászlók, rc): global connflag connflag = True print (connflag) print ("A kapcsolat visszaadott eredménye:" + str (rc))
def on_message (kliens, felhasználói adatok, üzenet): # print ("teste") print (msg.topic+""+str (msg.payload))
def on_log (kliens, felhasználói adatok, szint, 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, titkosítók, titkosítók), keepalive = 60) mqttc.loop_start ()
míg 1: hora = time.time () alvás (.1) publis.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")
# if connflag == Igaz: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: publis.single ("TEMPO", str. (kerek (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") publis.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") else: közzététel.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) és (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") # publis.single ("LED", "on", hostname = "172.31.83.191") publis.single ("SIRENE", "on", qos = 1, hostname = "172.31. 83.191 ") publis.single (" TEMPO "," TERREMOTO ", qos = 1, hostname =" 172.31.83.191 ") publis.single (" ACIONADO "," OFF ", qos = 1, hostname =" 172.31.83.191 ") publis.single ("twitteralarme", "on", qos = 1, hostname = "172.31.83.191") publis.single ("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos = 1, hostname = "172.31".83.191 ") gatilho = 0 alvás (5) m = feliratkozás.egyszerű (témák, gazdagépnév =" 172.31.83.191 ", megtartva = Hamis), ha m.topic ==" ACIONADO "és str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print ("cellalado"), ha m.topic == "medico" és str (m.payload.decode ("utf-8")) == "on ": if connflag == Igaz: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "és str (m.payload.decode ("utf -8")) == "on": if connflag == Igaz: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulancia "és str (m.payloa d.decode ("utf -8")) == "on": if connflag == Igaz: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) ha m. topic == "urgente" és str (m.payload.decode ("utf-8")) == "on": publis.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": ha gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 else: print ("Acionado") közzététel.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60
6. lépés: Codigo Twitter - Monitoração
código monitoração do twitter, pesquisa post na regiao de sorocaba
Código rodando maquina virtuális AWS EC2
n
twitter import *import konfiguráció import paho.mqtt.publish mint közzététel
az idő alvó alvásból
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
szélesség = -23.546211 hosszúság = -46.637840 alcance = 50 resultados = 1
publis.single ("twitter_alarme", "ON", hostname = "34.230.74.201")
result_count = 0 last_id = Nincs jelző = 0
i (60) tartományban: #----------------------------------------- ------------------------------ # végezzen keresést a szélesség és hosszúság alapján # twitter API dokumentumok: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- próbálkozzon: query = twitter.search.tweets (q = "#Terremoto", geokód = " %f, %f, %dkm" %(szélességi, hosszúsági, alcance), max_id = last_id) print ("leu")
kivéve: nyomtatás ("erro acesso twitter") szünet
a
#------------------------------------------------- ---------------------- # csak akkor dolgozza fel az eredményt, ha van földrajzi helye # ----------------- -------------------------------------------------- ---- if result ["geo"]: result_count += 1 last_id = result ["id"] sleep (1) if result_count == resultados: flag += 1 publis.single ("twitter_alarme", "ON", hostname = "34.230.74.201") publis.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") break
7. lépés: Estrutura AWS
Segítségével maquina virtuális Rodando ubuntu és astrutura AWS EC2
Utilizamos a AWS IOT CORE a MQTT szolgáltatásaihoz és konfigurációihoz, mint a konfiguráció vagy a típusú
Hasznos témák az AWS SNS programhoz AWS IOT CORE
Ajánlott:
Comando Por Voz - DragonBoard410c: 5 lépés
Comando Por Voz - DragonBoard410c: Este guia ir á elsődleges telepítő és konfigurátor vagy program Julius junto com o Coruja, que s ã o respektivamente um program de reconhecimento de voz e o modelo ac ú stico em Portugu ê s. Vantagem da utiliza ç ã o do Ju
DC - DC feszültség Lépés lekapcsoló mód Buck feszültségátalakító (LM2576/LM2596): 4 lépés
DC-DC feszültség Lépés lekapcsoló üzemmód Buck feszültségátalakító (LM2576/LM2596): A rendkívül hatékony bakkonverter készítése nehéz feladat, és még a tapasztalt mérnököknek is többféle kivitelre van szükségük, hogy a megfelelőt hozzák létre. egy DC-DC áramátalakító, amely csökkenti a feszültséget (miközben növeli
Akusztikus levitáció az Arduino Uno-val Lépésről lépésre (8 lépés): 8 lépés
Akusztikus lebegés az Arduino Uno-val Lépésről lépésre (8 lépés): ultrahangos hangátvivők L298N Dc női adapter tápegység egy egyenáramú tűvel Arduino UNOBreadboard és analóg portok a kód konvertálásához (C ++)
Élő 4G/5G HD videó streamelés DJI drónról alacsony késleltetéssel [3 lépés]: 3 lépés
Élő 4G/5G HD videó streaming a DJI Drone-tól alacsony késleltetéssel [3 lépés]: Az alábbi útmutató segít abban, hogy szinte bármilyen DJI drónról élő HD minőségű videó streameket kapjon. A FlytOS mobilalkalmazás és a FlytNow webes alkalmazás segítségével elindíthatja a videó streamingjét a drónról
Centro De Cómputo Para Niños Con Raspberry Pi: 7 lépés
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 Adapter red and 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