Cov txheej txheem:
- Kauj Ruam 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Kauj Ruam 2: Sensores Digitais - Tshaj tawm
- Kauj Ruam 3: Codigo Para Acionamento Sirene
- Kauj Ruam 4: Codigo Twitter - Tshaj Tawm
- Kauj Ruam 5: Centro De Comando
- Kauj Ruam 6: Codigo Twitter - Monitoração
- Kauj Ruam 7: Estrutura AWS
Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 Kauj Ruam
2024 Tus sau: John Day | [email protected]. Kawg hloov kho: 2024-01-30 09:27
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. 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 é 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 thiab twitter.
O projeto contou com uso de recursos da AWS incluindo IOT CORE, EC2 e SNS
Sensores ntawm DragonBord 410c
neeg android mqtt
Sendo todo desenvolvido em nab
Sau:
Diego Fernandes dos Santos - [email protected]
Gabriel Piovani Moreira dos Santos - [email protected]
Gustavo Venancio Luz - [email protected]
Paulo Henrique Almeida Santos - [email protected]
Kauj Ruam 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é generateelecido 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.
Cov kab mob sib kis los ntawm kev ceeb toom tuaj ntawm kev sib kis regressiva em 60 seguntos, e todo novo alerta detectado decresce o contador em 20 segundos.
programa rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev los ntawm libsoc ntshuam gpio los ntawm lub sijhawm ntshuam pw
# Importa lib para comunicacao com MOSQUITTO ntshuam paho.mqtt.client li 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 siv qhov chaw ADC2 siv seguinte vetor de configuraÃÆ'§ÃÆ' channel o channel_select2 = [0x01, 0xA0, 0x00]
def on_connect (mqttc, obj, chij, 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 tus thov kev pabcuam 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)
yog _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
nrog gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 thaum contador <50: gpio_cs.set_high () pw (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_sigh1.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 print ("Kub: % f / n" % adc_value) pub.publish ("temperatura", str (adc_value)) # teste para acionar contador do alarme, teste ultima leitura + 5%
yog adc_value_old == 0: adc_value_old = adc_value yog adc_value> (adc_value_old*1.05): pub.publish ("ALARME", "ON") print ("Alarmado temperatura") adc_value_old = adc_value pw tsaug zog (1)
gpio_cs.set_high () pw (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%
yog adc_value2_old == 0: adc_value2_old = adc_value2 yog adc_value2> (adc_value2_old*1.5): pub.publish ("ALARME", "ON") print ("Alarmado Luminosidade") adc_value2_old = adc_value2 pw (3)
Kauj Ruam 2: Sensores Digitais - Tshaj tawm
código rau 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.
programa rodando dentro da dragon borad 410c
los ntawm libsoc_zero. GPIO ntshuam khawm los ntawm libsoc_zero. GPIO ntshuam Qaij los ntawm lub sijhawm ntshuam ntshuam ntshuam paho.mqtt.client li mqtt ntshuam sys
def on_connect (mqttc, obj, chij, 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 (): suav = 0 sleep_count = 0 thaum Tseeb: sim: tilt.wait_for_tilt (1) tshwj tsis yog: sleep_count += 1 ntxiv: suav += 1 sleep_count += 1 yog sleep_count> 999: so
print ("suav:", suav) yog suav> 200: pub = mqttc.publish ("TERREMOTO", "ON") pub = mqttc.publish ("SISMOGRAFO", str (suav)) # 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
ntsiab lus = "grupo3"
# Conexao com localhost, uma vez que testamos fora do labredes. mqttc.connect ("34.230.74.201", 1883)
qaij = Qaij ('GPIO-A')
btn = Khawm ('GPIO-C')
thaum muaj tseeb: pw (0.25) detectaTilt () yog btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") print ("Botao ON") pw (1) pub = mqttc.publish ("PANICO "," OFF ") # ntxiv: # pub = mqttc.publish (" PANICO "," OFF ") # print (" Botao OFF ")
Kauj Ruam 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.client li mqtt
los ntawm libsoc_zero. GPIO ntshuam LED los ntawm lub sij hawm ntshuam pw coj = LED ('GPIO-E') #led.off ()
# Txhais o que fazer ao conectar def on_connect (tus thov kev pab, ob, tus chij, rc): luam tawm ("ConexÃÆ' £ o tus tsim tawm com broker")
# Txhais o que fazer ao receber uma mensagem def on_message (tus thov, ob, lus): luam tawm ("LED" + str (message.payload.decode ("utf-8"))) yog str (message.payload.decode ("utf-8")) == "on": print ("Sirene ligada") led.on () else: print ("Sierene apagada") led.off ()
# IP ua tus 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
# Ua kom tsis muaj lub ntsiab lus sub.subscribe ("SIRENE", qos = 0)
# Loop para escuta sub.loop_forever ()
Kauj Ruam 4: Codigo Twitter - Tshaj Tawm
Código rau publicação rau twitter assim que acionado o alarme.
código rodando na maquina virtual da AWS EC2
#!/usr/bin/env nab hab sej #---------------------------------------- ------------------------------- # twitter-post-status #-tshaj tawm cov xwm txheej xwm txheej rau koj lub sijhawm # # ----------------------------------------------------------------------- ------------------ ntshuam paho.mqtt.subscribe ua subscribe
lub sij hawm ntshuam
los ntawm twitter ntshuam *
#------------------------------------------------------- ---------------------- # peb qhov xwm txheej tshiab yuav yog dab tsi? #------------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"
#------------------------------------------------------- ---------------------- # thauj peb cov ntawv pov thawj API # ---------------------- ------------------------------------------------- ntshuam sys sys.path.append (".") ntshuam teeb tsa
#------------------------------------------------------- ---------------------- # tsim twitter API khoom # ---------------------- ------------------------------------------------- twitter = Twitter (auth = OAuth ('senha removida))
#------------------------------------------------------- ---------------------- # tshaj tawm cov xwm txheej tshiab # twitter API docs: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------------- ---------------------- ua tsaug
thaum 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", khaws cia = Cuav) yog m.topic == "twitteralarme" thiab str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("update status: % s" % new_status)
Kauj Ruam 5: Centro De Comando
semper que acionado um dispositivo phau ntawv ou detectado um alerta phau ntawv siv usuário é acionada uma contagem regressiva para envio de mensagem. Operarador pode cancelar o envio ou acionar o envio imediato do alerta.
Para uso do dasboard utilizamos um android do telefone para compor mesa de operação do centro de comando.
código rodando na maquina virtual da AWS EC2
ntshuam paho.mqtt.client li pahoimport paho.mqtt.subscribe raws li sau npe ntshuam paho.mqtt.publish raws li tshaj tawm ntshuam json ntshuam lub sijhawm ntshuam rau ntshuam ssl los ntawm lub sijhawm ntshuam pw
ntsiab lus = ['#']
gatilho = 0 hora_disparo = 0 ເຜີຍ ແຜ່.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publishing.single ("sensor1", "OFF", qoj = 1, hostname = "172.31".83.191 ") publishing.single (" sensor2 "," OFF ", qos = 1, hostname =" 172.31.83.191 ")
connflag = tsis tseeb
def on_connect (tus thov kev siv, cov ntaub ntawv siv, tus chij, rc): thoob ntiaj teb connflag connflag = luam tawm tseeb (connflag) luam tawm ("Kev sib txuas tau rov qab los:" + str (rc))
def on_message (tus neeg siv, cov ntaub ntawv siv, ntawv): # print ("teste") print (msg.topic+""+str (msg.payload))
def on_log (tus neeg siv, cov ntaub ntawv siv, qib, buf): luam tawm (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 = None) aws, keepalive = 60) mqttc.loop_start ()
thaum 1: hora = time.time () pw (.1) luam tawm.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")
# if connflag == Tseeb: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) yog gatilho == 1: publish.single ("TEMPO", str (puag ncig (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") luam tawm.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") ntxiv: tshaj tawm.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") yog (hora> hora_disparo) thiab (gatilho == 1): # print ("TERREMOTO") # print (connflag) if connflag == Tseeb: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) # mqttc.publish ("message", "TERREMOTO ", qoj = 1) mqttc.publish (" message ", json.dumps (" TERREMOTO - CUAM UMA ZONA SEGURA "), qos = 1)
# print ("teste SNS") # published.single ("LED", "on", hostname = "172.31.83.191") publishing.single ("SIRENE", "on", qws = 1, hostname = "172.31. 83.191 ") publishing.single (" TEMPO "," TERREMOTO ", qoj = 1, hostname =" 172.31.83.191 ") publishing.single (" ACIONADO "," OFF ", qos = 1, hostname =" 172.31.83.191 ") tshaj tawm.single ("twitteralarme", "on", qos = 1, hostname = "172.31.83.191") publishing.single ("twitter", "TERREMOTO - TSEV UMA ZONA SEGURA", qos = 1, hostname = "172.31.83.191 ") gatilho = 0 pw tsaug zog (5) m = subscribe.simple (ncauj lus, hostname =" 172.31.83.191 ", khaws cia = Tsis raug) yog m.topic ==" ACIONADO "thiab str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 print (" cancelado ") yog m.topic ==" medico "thiab str (m.payload.decode (" utf-8 ")) ==" on ": yog connflag == Muaj tseeb: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qov = 1) yog m.topic ==" bombeiro "thiab str (m.payload.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) yog m.topic == " ambulancia "thiab str (m.payloa d.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) yog m. ntsiab lus == "xwm txheej ceev" thiab str (m.payload.decode ("utf-8")) == "ntawm": luam tawm.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+5 yog str (m.payload.decode ("utf-8")) == "ON": yog gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 lwm tus: luam tawm ("Acionado") tshaj tawm.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60
Kauj Ruam 6: Codigo Twitter - Monitoração
código monitoração rau twitter, pesquisa post na regiao de sorocaba
código rodando na maquina virtual da AWS EC2
n
los ntawm twitter ntshuam *ntshuam teeb tsa ntshuam paho.mqtt.publish li tshaj tawm
los ntawm lub sijhawm ntshuam pw
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
publishing.single ("twitter_alarme", "ON", hostname = "34.230.74.201")
result_count = 0 last_id = Tsis muaj tus chij = 0
rau kuv hauv thaj tsam (60): #----------------------------------------- ------------------------------ # ua qhov kev tshawb fawb raws li latitude thiab longitude # twitter API docs: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- sim: nug = twitter.search.tweets (q = "#Terremoto", geocode = " %f, %f, %dkm" %(latitude, longitude, alcance), max_id = last_id) print ("leu")
tshwj tsis yog: luam tawm ("erro acesso twitter") so
rau qhov tshwm sim hauv kev nug ["xwm txheej"]:
#------------------------------------------------------- ---------------------- # tsuas yog txheej txheem qhov tshwm sim yog tias nws muaj geolocation # ----------------- ----------------------------------------------------------------------- ---- yog qhov tshwm sim ["geo"]: result_count += 1 last_id = result ["id"] pw (1) yog result_count == resultados: flag += 1 published.single ("twitter_alarme", "ON", hostname = "34.230.74.201") publishing.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") so
Kauj Ruam 7: Estrutura AWS
Siv cov cuab yeej zoo tshaj plaws virtual rodando ubuntu na estrutura AWS EC2
Utilizamos a AWS IOT CORE para o serviço de MQTT onde configuramos as ações conforme o tipo de mensagem
Utilizmos topicos do AWS SNS que eram acionados pelo AWS IOT CORE
Pom zoo:
Arduino Tsheb Rov Qab Chaw Nres Tsheb Ceeb Toom - Cov Kauj Ruam ntawm Kauj Ruam: 4 Kauj Ruam
Arduino Tsheb Rov Qab Chaw Nres Tsheb Ceeb Toom | Cov kauj ruam ib kauj ruam: Hauv txoj haujlwm no, kuv yuav tsim qhov yooj yim Arduino Tsheb Rov Qab Tsheb Nres Tsheb Nres Sensor Siv Arduino UNO thiab HC-SR04 Ultrasonic Sensor. Qhov no Arduino raws Lub Tsheb Rov Qab ceeb toom tuaj yeem siv rau Kev Tshawb Fawb Txog Tus Kheej, Robot Ranging thiab lwm yam
Comando Por Voz - DragonBoard410c: 5 Kauj Ruam
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
Tsev Automation Kauj Ruam ntawm Kauj Ruam Siv Wemos D1 Mini Nrog PCB Tsim: 4 Kauj Ruam
Tsev Automation Kauj Ruam Ib Leeg Siv Wemos D1 Mini Nrog PCB Tsim: Tsev Automation Kauj Ruam los ntawm Kauj Ruam siv Wemos D1 Mini nrog PCB Tsim cov tub ntxhais kawm ntawv qib siab. Tom qab ntawd ib tus ntawm peb cov tswv cuab tuaj
RC Taug Qab Neeg Hlau Siv Arduino - Kauj Ruam Ib kauj ruam: 3 Kauj Ruam
RC Tracked Robot Siv Arduino - Kauj Ruam Ib Nrab: Hav guys, Kuv rov qab los nrog lwm tus neeg hlau txias chassis los ntawm BangGood. Vam tias koj tau dhau los ntawm peb cov phiaj xwm yav dhau los - Spinel Crux V1 - Tus Cwj Pwm Tswj Tus Neeg Hlau, Spinel Crux L2 - Arduino Xaiv thiab Muab Neeg Hlau nrog Robotic caj npab thiab Badland Braw
Centro De Cómputo Para Niños Con Raspberry Pi: 7 Kauj Ruam
Centro De Cómputo Para Niños Con Raspberry Pi: Estos ser á n los primeros pasos de la Raspberry Pi y para ello necesitareos: 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