Talaan ng mga Nilalaman:
- Hakbang 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Hakbang 2: Sensores Digitais - Publicação
- Hakbang 3: Codigo Para Acionamento Sirene
- Hakbang 4: Codigo Twitter - Mag-post
- Hakbang 5: Centro De Comando
- Hakbang 6: Codigo Twitter - Monitoração
- Hakbang 7: Estrutura AWS
Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Projeto acadêmico para atender cenário de colaboração através da internet para sa 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) at botão de pânico. Ainda no cenário de colaboração prevemos integração com o Twitter e aplicativos com suporte mqtt para acionamento do alerta.
Maaring magkaroon ng isang pagkakaiba-iba ng mga de-kuryenteng 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 é crucial diante ao pânico que um alarme falso pode gerar.
Como solução de alerta de mensagem estamos considerando o uso do envio de SMS, alerta através de cliente mqtt, email, sirene at twitter.
O projeto contou com uso de recursos da AWS incluindo IOT CORE, EC2 at SNS
Sensores da DragonBord 410c
mga kliyente 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]
Hakbang 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
Abaixo o codigo de publicação dos sensores analógicos, os sensores de temperatura at luminosidade estão configurados para que assim que detectarem uma variação fora do padrão pré establelecido 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 sa alerta começa contagem regressiva em 60 seguntos, at sa pamamagitan ng detalyadong detalyado o contador em 20 segundos.
programa rodando dentro da dragon borad 410c
#! / usr / bin / python3import spidev mula sa libsoc import gpio mula sa pag-import ng oras sa pagtulog
# 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
# Gumamit ng isang porta ADC1 channel_select1 = [0x01, 0x80, 0x00]
#Para gamitin ang isang porta na ginagamit ng ADC2 o seguinte vetor de configuraç࣠o channel_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): i-print ("Id ng Mensahe:" + str (mid) + "\ n") ipasa
# Criamos o client at 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, lahat ng mga pagsubok para sa mga labredes. broker_address = "34.230.74.201"
pub.connect (broker_address)
kung _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
kasama ang gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 habang ang contador <50: gpio_cs.set_high () sleep (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_select1) gpio_cs.) 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 sa acionar contador gawin alarme, teste ultima leitura + 5%
kung 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_value2 | (rx [2] & 0xff) adc_value2 = adc_value2 / 10 print ("Luminosidade:% f / n"% adc_value2) pub.publish ("luminosidade", str (adc_value2))
# teste para sa acionar contador gawin ang alarme, teste ultima leitura + 50%
kung adc_value2_old == 0: adc_value2_old = adc_value2 kung adc_value2> (adc_value2_old * 1.5): pub.publish ("ALARME", "ON") print ("Alarmado Luminosidade") adc_value2_old = adc_value2 sleep (3)
Hakbang 2: Sensores Digitais - Publicação
código para sa publiko na 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.
programa rodando dentro da dragon borad 410c
mula sa libsoc_zero. GPIO import Button mula sa libsoc_zero. GPIO import Ikiling mula sa oras na import ng pagtulog import paho.mqtt.client bilang mqtt import 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 ("Message Id:" + str (mid) + "\ n") pass
def detectaTilt (): count = 0 sleep_count = 0 habang True: subukan: tilt.wait_for_tilt (1) maliban sa: sleep_count + = 1 pa: count + = 1 sleep_count + = 1 kung 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
paksa = "grupo3"
# Conexao com localhost, lahat ng mga pagsubok para sa mga labredes. mqttc.connect ("34.230.74.201", 1883)
ikiling = Ikiling ('GPIO-A')
btn = Button ('GPIO-C')
habang Totoo: matulog (0.25) detectaTilt () kung btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") print ("Botao ON") pagtulog (1) pub = mqttc.publish ("PANICO "," OFF ") # else: # pub = mqttc.publish (" PANICO "," OFF ") # print (" Botao OFF ")
Hakbang 3: Codigo Para Acionamento Sirene
Codigo para sa subscrição para sa acionamento da SIRENE, programa rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.client as mqtt
mula sa libsoc_zero. GPIO import LED mula sa oras na pag-import ng tulog na humantong = LED ('GPIO-E') # led.off ()
# Tukuyin ang que fazer ao conectar def on_connect (client, obj, flags, rc): print ("Conex࣠o establelecida com broker")
# Tukuyin ang que fazer ao receber uma mensagem def on_message (client, obj, message): print ("LED" + str (message.payload.decode ("utf-8"))) kung str (message.payload.decode ("utf-8")) == "on": print ("Sirene ligada") led.on () else: print ("Sierene apagada") led.off ()
# IP gawin ang 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
# Palakihin walang topico sub.subscribe ("SIRENE", qos = 0)
# Loop para escuta sub.loop_forever ()
Hakbang 4: Codigo Twitter - Mag-post
Código para sa publiko na gawin ang twitter assim que acionado o alarme.
código rodando na maquina virtual mula sa AWS EC2
#! / usr / bin / env python # ----------------- ------------------------------ # twitter-post-status # - nag-post ng isang mensahe sa katayuan sa iyong timeline # --- ---- ----------------- import paho.mqtt.subscribe bilang mag-subscribe
oras ng pag-import
mula sa twitter import *
# ----------------------------------------------- ----------------- # ano ang dapat maging bago nating katayuan? # ----------------------------------------------- ----------------- new_status = "#Terremoto Procure uma zona segura - teste"
# ----------------------------------------------- ----------------- # i-load ang aming mga kredensyal sa API # ----------------- ------------------------------------------------- angkat sys sys.path.append (".") i-import ang config
# ----------------------------------------------- ----------------- # Gumawa ng twitter API object # ----------------- ------------ ------------ twitter = Twitter (auth = OAuth ('senha tangoida))
# ----------------------------------------------- ----------------- # mag-post ng isang bagong katayuan # twitter API docs: https://dev.twitter.com/rest/referensi/post/statu… # ----------------------------------------------- -----------------
habang 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", pinanatili = Mali) kung m.topic == "twitteralarme" at str (m.payload.decode ("utf-8")) == "on": mga resulta = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("na-update na katayuan:% s"% new_status)
Hakbang 5: Centro De Comando
semper que acionado um dispositivo manu-manong upang makita mo ang manu-manong gabay ng manu-manong gawin ito upang ma-access ang lahat ng regressiva para sa envio de mensagem. O operador pode cancelar o envio ou acionar o envio imediato do alerta.
Para sa uso do dasboard utilizamos um android gawin telefone para compor isang mesa de operação do centro de comando.
código rodando na maquina virtual mula sa AWS EC2
import paho.mqtt.client as pahoimport paho.mqtt.subscribe as subscribe import paho.mqtt.publish as publish import json import time import anim import ssl from time import sleep
mga paksa = ['#']
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 = Mali
def on_connect (client, userdata, flags, rc): pandaigdigan na connflag connflag = True print (konflag) print ("Ibinalik ang koneksyon na resulta:" + 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 ("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-pribado.pem.key "mqttc.tls_set (caPath, certfile = certPath, keyfile = keyPath, cert_reqs = ssl. CERT_REQUIRED, tls_version = ssl. PROTOCOL_TLSv1_2, ciphersost = Wala), keepalive = 60) mqttc.loop_start ()
habang 1: hora = time.time () pagtulog (.1) publish.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")
# if connflag == True: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: publish.single ("TEMPO", str (bilog (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") publish.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") iba pa: i-publish.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") kung (hora> hora_disparo) at (gatilho == 1): # print ("TERREMOTO") # print (connflag) kung 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 sleep (5) m = subscribe.simple (mga paksa, hostname =" 172.31.83.191 ", napanatili = Mali) kung m.topic ==" ACIONADO "at str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") kung m.topic ==" medico "at str (m.payload.decode (" utf-8 ")) ==" sa ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) kung m.topic ==" bombeiro "at str (m.payload.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulancia "at str (m.payloa d.decode ("utf-8")) == "on": kung connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) kung m. paksa == "urgente" at str (m.payload.decode ("utf-8")) == "sa": publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 5 kung str (m.payload.decode ("utf-8")) == "ON": kung gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 pa: print ("Acionado") publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 60
Hakbang 6: Codigo Twitter - Monitoração
código monitoração do twitter, pesquisa post na regiao de sorocaba
código rodando na maquina virtual mula sa AWS EC2
n
mula sa twitter import * import config import paho.mqtt.publish bilang i-publish
mula sa oras mag-import ng pagtulog
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
latitude = -23.546211 longitude = -46.637840 alcance = 50 resultados = 1
publish.single ("twitter_alarme", "ON", hostname = "34.230.74.201")
resulta_count = 0 huling_id = Wala flag = 0
para sa ako sa saklaw (60): # ----------------- ------------------------------ # gumanap ng isang paghahanap batay sa latitude at longitude # twitter API docs: https:// dev. twitter.com/rest/referensi/get/search… # ------------------------------------ ---------------------------------- subukan: query = twitter.search.tweets (q = "#Terremoto", geocode = "% f,% f,% dkm"% (latitude, longitude, alcance), max_id = last_id) print ("leu")
maliban sa: i-print ("erro acesso twitter") masira
para sa resulta sa query ["mga status"]:
# ----------------------------------------------- ----------------- # iproseso lamang ang isang resulta kung mayroon itong geolocation # ----------------- ---- ---- kung resulta ["geo"]: resulta_count + = 1 huling_id = resulta ["id"] pagtulog (1) kung resulta_count == resultados: flag + = 1 publish.single ("twitter_alarme", "ON", hostname = "34.230.74.201") publish.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") break
Hakbang 7: Estrutura AWS
Utilizamos uma maquina virtual rodando ubuntu na estrutura AWS EC2
Gumamit ng isang AWS IOT CORE para sa serbisyo ng MQTT sa mga configuramos bilang isang pagsunod sa tipo ng mensagem
Gumagamit ng mga paksa sa AWS SNS sa eram acionados pelo AWS IOT CORE
Inirerekumendang:
Arduino Car Reverse Parking Alert System - Hakbang sa Hakbang: 4 na Hakbang
Arduino Car Reverse Parking Alert System | Hakbang sa Hakbang: Sa proyektong ito, magdidisenyo ako ng isang simpleng Arduino Car Reverse Parking Sensor Circuit gamit ang Arduino UNO at HC-SR04 Ultrasonic Sensor. Ang Arduino based Car Reverse alert system na ito ay maaaring magamit para sa isang Autonomous Navigation, Robot Ranging at iba pang range r
Hakbang sa Hakbang Pagbubuo ng PC: 9 Mga Hakbang
Hakbang sa Hakbang ng PC Building: Mga Pantustos: Hardware: MotherboardCPU & CPU coolerPSU (Power supply unit) Storage (HDD / SSD) RAMGPU (hindi kinakailangan) CaseTools: ScrewdriverESD bracelet / matsthermal paste w / applicator
Tatlong Loudspeaker Circuits -- Hakbang-hakbang na Tutorial: 3 Mga Hakbang
Tatlong Loudspeaker Circuits || Hakbang-hakbang na Tutorial: Ang Loudspeaker Circuit ay nagpapalakas ng mga audio signal na natanggap mula sa kapaligiran papunta sa MIC at ipinapadala ito sa Speaker mula sa kung saan ginawa ang pinalakas na audio. Dito, ipapakita ko sa iyo ang tatlong magkakaibang paraan upang magawa ang Loudspeaker Circuit na ito gamit ang:
Comando Por Voz - DragonBoard410c: 5 Hakbang
Comando Por Voz - DragonBoard410c: Este guia ir á ensinar ng isang pag-install ng configurar ng programa Julius junto com o Coruja, que s ã o respivamente um programa de reconhecimento de voz e o modelo ac ú stico em Portugu ê s.A vantagem da utiliza ç ã o do Ju
Centro De Cómputo Para Niños Con Raspberry Pi: 7 Hakbang
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