Spisu treści:
- Krok 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- Krok 2: Sensores Digitais - Publicação
- Krok 3: Codigo Para Acionamento Sirene
- Krok 4: Codigo Twitter - Post
- Krok 5: Centro De Comando
- Krok 6: Codigo Twitter - Monitoração
- Krok 7: Estrutura AWS
Wideo: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
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 nie cenią współpracy przed integracją z Twitterem i aplikacjami z obsługą mqtt dla działań alarmowych.
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 é kluczowe diante ao pânico que um alarme falso pode gerar.
Como rozwiązanie alerta de mensagem estamos o nas, o envio de SMS, alerta através de cliente mqtt, e-mail, sirene i twitter.
O projeto contou com de recursos da AWS incluindo IOT CORE, EC2 i SNS
Czujniki DragonBord 410c
klienci androida mqtt
Wyślij todo desenvolvido em python
Autorzy:
Diego Fernandes dos Santos – [email protected]
Gabriel Piovani Moreira dos Santos – [email protected]
Gustavo Venancio Luz – [email protected]
Paulo Henrique Almeida Santos – [email protected]
Krok 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 for do padrão pre estabelecido enviarem um alerta através do protocolo mqtt sinalizando um
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.
programa rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev z libsoc importuj gpio od czasu importuj uśpienie
# Importa lib para comunicacao com MOSQUITTO import paho.mqtt.client jako mqtt
spi = spidev. SpiDev() spi.open(0, 0) spi.max_speed_hz=10000 spi.mode = 0b00 spi.bits_per_word = 8
#Utwórz porta ADC1 channel_select1=[0x01, 0x80, 0x00]
#Para usar a porta ADC2 użyj 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): print("Identyfikator wiadomości: " + str(mid) + "\n") pass
# Criamos o kliencie i setamos w innych konfiguracjach mqttc = mqtt. Client()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
pub = mqtt. Klient("grupo3")
# Conexao com localhost, uma vez que testamos fora do labredes. adres_brokera ="34.230.74.201"
pub.connect(adres_brokera)
if _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 while contador < 50: gpio_cs.set_high() sleep(0.00001) gpio_cs.set_low() rx = spi.xfer(channel_select1) gpio_high_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 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_value2 | (rx[2] & 0xff) adc_value2 = adc_value2 /10 print(" Luminosidade: %f\n" % adc_value2) pub.publish("luminozydade", 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("ALARM", "ON") print ("Alarmado Luminosidade") adc_value2_old=adc_value2 sen(3)
Krok 2: Sensores 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 panico.
Quando detectado uma anomalia lub botão de panico pressionado contagem regressiva é iniciada.
programa rodando dentro da dragon borad 410c
from libsoc_zero. GPIO import Buttonfrom libsoc_zero. GPIO import Tilt od czasu import sleep import paho.mqtt.client as mqtt import sys
def on_connect(mqttc, obj, flags, rc): print("Połącz " + str(rc))
def on_message(mqttc, obj, msg): print(msg.topic + " " + str(msg.qos) + " " + str(msg.payload))
def on_publish(mqttc, obj, mid): # print("Identyfikator wiadomości: " + str(mid) + "\n") pass
def detectaTilt(): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt(1) z wyjątkiem: 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 konfiguracja mqttc = mqtt. Klient()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
temat = "grupo3"
# Conexao com localhost, uma vez que testamos fora do labredes. mqttc.connect("34.230.74.201", 1883)
pochylenie = pochylenie('GPIO-A')
btn = Przycisk('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")
Krok 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 jako mqtt
z libsoc_zero. GPIO import LED od czasu import uśpienia led = LED('GPIO-E') #led.off()
# Zdefiniuj fazer ao conectar def on_connect(client, obj, flags, rc): print("Conexão estabelecida com broker")
# Zdefiniuj 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("Ligada Sirene") led.on() else: print("Ligada Sirene") led.off()
# IP do brokera broker_address = "34.230.74.201"
# Cria o kliencie sub = mqtt. Client("grupo3")
sub.connect(adres_brokera)
sub.on_message = on_message sub.on_connect = on_connect
# Increve no topico sub.subscribe("SIRENE", qos=0)
# Pętla do powrotu sub.loop_forever()
Krok 4: Codigo Twitter - Post
Código para publicação zrobić twitter assim que acionado o alarme.
código rodando na maquina virtual da AWS EC2
#!/usr/bin/env python #-------------------------------------------- ------------------------------- # twitter-post-status # - publikuje wiadomość o statusie na Twojej osi czasu #--- -------------------------------------------------- ------------------ importuj paho.mqtt.subscribe jako subskrybuj
czas importu
z importu z Twittera *
#------------------------------------------------- ---------------------- # jaki powinien być nasz nowy status? #------------------------------------------------- ----------- new_status = "#Terremoto Pozyskaj uma zona segura - teste"
#------------------------------------------------- ---------------------- # załaduj nasze dane uwierzytelniające API #---------------------- ------------------------------------------------- import sys sys.path.append(".") import konfiguracji
#------------------------------------------------- ----------- # utwórz obiekt API Twittera #-------------------------- -------------------------------------------------- twitter = Twitter(auth = OAuth('senha removida))
#------------------------------------------------- ---------------------- # opublikuj nowy status # twitter API doc: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- -----------------------
while 1: m = subscribe.simple("twitteralarme", hostname="172.31.83.191", zachowane=False) if m.topic=="twitteralarme" and str(m.payload.decode("utf-8")) =="on": wyniki = twitter.status.update(status = (nowy_status)+str(time.time())) # print("zaktualizowany stan: %s" % nowy_status)
Krok 5: Centro De Comando
semper que acionado um dispositivo manual ou detectado um alerta manual do usuário é acionada uma contagem regressiva para envio de mensagem. O operador pode cancelar o envio ou acionar o envio imediato do alerta.
Aby wykonać tablicę rozdzielczą um android zrobić telefon do komponowania mesa de operação do centro de comando.
código rodando na maquina virtual da AWS EC2
import paho.mqtt.client jako pahoimport paho.mqtt.subscribe jako subskrybuj import paho.mqtt.publish jako publikuj import json import time import six import ssl from time import sleep
tematy = ['#']
gatilho=0 hora_disparo=0 publish.single("ACIONADO", "OFF", qos=1, nazwa hosta="172.31.83.191") publish.single("czujnik1", "OFF", qos=1, nazwa hosta="172.31.83.191") publish.single("czujnik2", "OFF", qos=1, hostname="172.31.83.191")
connflag = Fałsz
def on_connect(client, userdata, flags, rc): global connflag connflag = True print(connflag) print("Połączenie zwróciło wynik: " + str(rc))
def on_message(client, userdata, msg): # print("teste") print(msg.topic+" "+str(msg.payload))
def on_log(klient, dane użytkownika, poziom, 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, awhosttcN.connect, keepalive=60) mqttc.loop_start()
while 1: hora=time.time() sleep(.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 (round(hora_disparo-hora, 0)), qos=1, hostname="172.31.83.191") publish.single("LEDTERREMOTO", "on", qos=1, hostname="172.31.83.191") else: publikuj.single("TEMPO", "99", qos=1, hostname="172.31.83.191") # print(" ") if (hora>hora_disparo) and (gatilho==1): # print("TERREMOTO") # print(connflag) if connflag == True: # mqttc.publish("wiadomość", json.dumps({'wiadomość':"TERREMOTO"}), qos=1) # mqttc.publish("wiadomość", "TERREMOTO" ", qos=1) mqttc.publish("wiadomość", json.dumps("TERREMOTO - ZAMÓWIENIE 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, nazwa hosta="172.31.83.191") publish.single("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos=1, nazwa hosta="172.31.83.191") gatilho=0 sleep(5) m = subscribe.simple(topics, hostname="172.31.83.191", zachowane=False) if m.topic=="ACIONADO" and str(m.payload.decode(" utf-8"))=="OFF": gatilho=0 print("cancelado") if m.topic=="medico" and str(m.payload.decode("utf-8"))=="on ": if connflag == True: mqttc.publish("medico", json.dumps("MEDICOS - EMERGENCIA TERREMOTO"), qos=1) if m.topic=="bombeiro" and str(m.payload.decode("utf-8"))=="on": if connflag == True: mqttc.publish("bombeiro", json.dumps("BOMBEIRO - EMERGENCIA TERREMOTO"), qos=1) if m.topic==" ambulancia” i str(m.payloa d.decode("utf-8"))=="on": if connflag == True: mqttc.publish("ambulancia", json.dumps("AMBULANCIA - EMERGENCIA TERREMOTO"), qos=1) if m. topic=="urgente" and 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 else: print("Acionado") publish.single("ACIONADO", 1, qos=1, hostname="172.31.83.191") gatilho=1 hora_disparo=time.time()+60
Krok 6: Codigo Twitter - Monitoração
código monitorção do twitter, pesquisa post na regiao de sorocaba
código rodando na maquina virtual da AWS EC2
n
z twittera import *import config import paho.mqtt.publish as publish
od czasu importuj sen
twitter = Twitter(auth = OAuth(config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
szerokość geograficzna = -23,546211 długość geograficzna = -46,637840 alcance = 50 wyników = 1
publish.single("twitter_alarme", "WŁ", nazwa hosta="34.230.74.201")
liczba_wyników = 0 last_id = Brak flaga = 0
dla i w zakresie(60): #------------------------------------------ ------------------------------ # Przeprowadź wyszukiwanie na podstawie szerokości i długości geograficznej # Dokumentacja API twittera: https://dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- spróbuj: query = twitter.search.tweets(q = "#Terremoto", geocode = "%f, %f, %dkm" % (szerokość, długość geograficzna, alcance), max_id = last_id) print("leu")
z wyjątkiem: print("erro acesso twitter") break
dla wyniku w zapytaniu["statusy"]:
#------------------------------------------------- ---------------------- # przetwarzaj wynik tylko wtedy, gdy ma geolokalizację #----------------- -------------------------------------------------- ---- if wynik["geo"]: liczba_wyników += 1 ostatni_id = wynik["id"] sleep(1) if liczba_wyników == liczba wyników: flag += 1 publish.single("twitter_alarme", "ON", hostname="34.230.74.201") publish.single("twitter", "TERREMOTO - DETECTADO", hostname="34.230.74.201") przerwa
Krok 7: Estrutura AWS
Utilizamos uma maquina wirtualny 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
Wykorzystaj tematy do AWS SNS que eram acionados pelo AWS IOT CORE
Zalecana:
Licznik kroków - Micro:Bit: 12 kroków (ze zdjęciami)
Licznik kroków - Micro:Bit: Ten projekt będzie licznikiem kroków. Do pomiaru kroków użyjemy czujnika przyspieszenia wbudowanego w Micro:Bit. Za każdym razem, gdy Micro:Bit się trzęsie, dodamy 2 do licznika i wyświetlimy go na ekranie
Comando Por Voz - DragonBoard410c: 5 kroków
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ç
Lewitacja akustyczna z Arduino Uno krok po kroku (8 kroków): 8 kroków
Lewitacja akustyczna z Arduino Uno Krok po kroku (8-kroków): ultradźwiękowe przetworniki dźwięku Zasilacz żeński L298N Dc z męskim pinem dc Arduino UNOBreadboardJak to działa: Najpierw wgrywasz kod do Arduino Uno (jest to mikrokontroler wyposażony w cyfrowy oraz porty analogowe do konwersji kodu (C++)
Jak używać silnika krokowego jako enkodera obrotowego i wyświetlacza OLED dla kroków: 6 kroków
Jak używać silnika krokowego jako enkodera obrotowego i wyświetlacza OLED dla kroków: W tym samouczku dowiemy się, jak śledzić kroki silnika krokowego na wyświetlaczu OLED. Obejrzyj film demonstracyjny.Kredyt samouczka oryginalnego trafia do użytkownika YouTube „sky4fly”
Centro De Cómputo Para Niños Con Raspberry Pi: 7 kroków
Centro De Cómputo Para Niños Con Raspberry Pi: Estos serán los primeros pasos de la Raspberry Pi i dla innych potrzebnych produktów: Raspberry Pi 2 Adapter do czerwonego kabla micro USB Tarjeta micro SD(de 8 gb) Kabel HDMI Cargador Ratón Teclado para computadoraEn caso de contar con un Kit de inicio