Mục lục:
- Bước 1: Dragonbord 410c - Cảm biến Publicação Dos - Tương tự
- Bước 2: Cảm nhận Digitais - Publicação
- Bước 3: Codigo Para Acionamento Sirene
- Bước 4: Codigo Twitter - Đăng
- Bước 5: Centro De Comando
- Bước 6: Codigo Twitter - Monitoração
- Bước 7: Estrutura AWS
Video: Centro De Comandoprisencias - Erupção De Vulcão E Terremotos: 7 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
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 integrationção com o Twitter e aplicativos com suporte mqtt para acionamento do alerta.
Diante a Possibilidade de Diante meios de entrada na solução, caberá um centro de de operações avaliar se a Informação esta correta evitando assim falsos-Posvos dos dispositivos automatizado e avaliar a possibilidade de fakenews. Tal tomada de decão é quan trọng diante ao pânico que um alertme falso pode gerar.
Como solução de alerta de mensagem estamos coirando o uso do envio de SMS, alerta através de cliente mqtt, email, sirene e twitter.
O projeto contou com uso de recursos da AWS incluindo IOT CORE, EC2 e SNS
Sensores da DragonBord 410c
khách hàng 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]
Bước 1: Dragonbord 410c - Cảm biến Publicação Dos - Tương tự
Abaixo o codigo de publicação dos sensores analógicos, os sensores de temperatura e luminosidade estão configurados para que assim que detarem uma variação fora do padrão pré settingelecido 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, e todo novo alerta detado decresce o contador em 20 segundos.
programma rodando dentro da dragon borad 410c
#! / usr / bin / python3import spidev from libsoc import gpio from time import sleep
# Importa lib para comunicacao com MOSQUITTO nhập paho.mqtt.client dưới dạng mqtt
spi = spidev. SpiDev () spi.open (0, 0) spi.max_speed_hz = 10000 spi.mode = 0b00 spi.bits_per_word = 8
#Usando một porta ADC1 channel_select1 = [0x01, 0x80, 0x00]
#Para sử dụng một porta ADC2 sử dụng 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 ("Message Id:" + str (mid) + "\ n") vượt qua
# 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)
if _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
với gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 trong khi 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 acionar contador doarmme, 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 ("luminosidade", str (adc_value2))
# teste para acionar contador do alertme, 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)
Bước 2: Cảm nhận Digitais - Publicação
código para publicação dos sensores digitais
Os sensores digitais neste projeto foram o Tilte que deta os tremores e o botão para simular o uso de um botão de pânico.
quando Detado uma anomalia ou botão de pânico pressionado a contagem regressiva é iniciada.
programma rodando dentro da dragon borad 410c
từ libsoc_zero. GPIO nhập Nút từ libsoc_zero. GPIO nhập Nghiêng từ lúc nhập ngủ nhập paho.mqtt.client dưới dạng mqtt nhập hệ thống
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") vượt qua
def detectorTilt (): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt (1) exception: sleep_count + = 1 else: count + = 1 sleep_count + = 1 nếu 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
topic = "grupo3"
# Conexao com localhost, uma vez que testamos fora làm labredes. mqttc.connect ("34.230.74.201", 1883)
nghiêng = Nghiêng ('GPIO-A')
btn = Nút ('GPIO-C')
while True: sleep (0,25) detaTilt () if btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") print ("Botao ON") sleep (1) pub = mqttc.publish ("PANICO "," TẮT ") # else: # pub = mqttc.publish (" PANICO "," TẮT ") # print (" TẮT Botao ")
Bước 3: Codigo Para Acionamento Sirene
Codigo para subscrição para acionamento da SIRENE, programma rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITNhập paho.mqtt.client bằng mqtt
từ libsoc_zero. GPIO nhập LED từ thời gian nhập ngủ led = LED ('GPIO-E') # led.off ()
# Define o que fazer ao conectar def on_connect (client, obj, flags, rc): print ("Conex࣠o settingelecida com broker")
# Xác định o que fazer ao Collectber 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 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
# Tăng không có sub.subscribe topico ("SIRENE", qos = 0)
# Vòng lặp para escuta sub.loop_forever ()
Bước 4: Codigo Twitter - Đăng
Código para publicação do twitter đồng hóa que acionado o alertme.
código rodando na maquina virtual da AWS EC2
#! / usr / bin / env python # ---------------------------------------- ------------------------------- # twitter-post-status # - đăng thông báo trạng thái lên dòng thời gian của bạn # --- -------------------------------------------------- ------------------ nhập paho.mqtt.subscribe dưới dạng đăng ký
thời gian nhập khẩu
từ nhập twitter *
# ------------------------------------------------- ---------------------- # tình trạng mới của chúng ta nên là gì? # ------------------------------------------------- ---------------------- new_status = "#Terremoto Mua sắm uma zona segura - teste"
# ------------------------------------------------- ---------------------- # tải thông tin đăng nhập API của chúng tôi # ---------------------- ------------------------------------------------- nhập khẩu sys sys.path.append (".") nhập cấu hình
# ------------------------------------------------- ---------------------- # tạo đối tượng API twitter # ---------------------- ------------------------------------------------- twitter = Twitter (auth = OAuth ('senha removida))
# ------------------------------------------------- ---------------------- # đăng trạng thái mới # tài liệu API twitter: https://dev.twitter.com/rest/reference/post/statu… # ------------------------------------------------- ----------------------
while 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", keep = False) if m.topic == "twitteralarme" and str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status) + str (time.time ())) # print ("cập nhật trạng thái:% s"% new_status)
Bước 5: Centro De Comando
semper que acionado um dispositivo manual ou detado um alerta manual do usuário é acionada uma contagem regressiva para envio de mensagem. O operador pode hủy bỏ o envio ou acionar o envio imediato do alerta.
Para uso do dasboard usingizamos um android do telefone para compor a mesa de operação do centro de comando.
código rodando na maquina virtual da AWS EC2
nhập paho.mqtt.client dưới dạng pahoimport paho.mqtt.subscribe as subscribe import paho.mqtt.publish as Publishers import json import time import 6 import ssl from time import sleep
chủ đề = ['#']
gatilho = 0 hora_disparo = 0 publish.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") Publishing.single ("sensor1", "OFF", qos = 1, hostname = "172.31.83.191 ") publish.single (" sensor2 "," OFF ", qos = 1, hostname =" 172.31.83.191 ")
connflag = Sai
def on_connect (client, userdata, flags, rc): global connflag connflag = True print (connflag) print ("Kết quả trả về kết nối:" + 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-private.pem.key "mqttc.tls_set (caPath, certfile = certPath, keyfile = keyPath, cert_reqs = ssl. CERT_REQUIRED, tls_version = sctl. PROTOCOL_TLSv1_2, ciphersc.conne, keepalive = 60) mqttc.loop_start ()
while 1: hora = time.time () sleep (.1) register.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: Publishing.single ("TEMPO", str (round (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") register.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") else: xuất bản.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) và (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") # publish.single ("LED", "on", hostname = "172.31.83.191") publish.single ("SIRENE", "on", qos = 1, hostname = "172.31. 83.191 ") register.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") register.single ("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos = 1, hostname = "172.31.83.191 ") gatilho = 0 sleep (5) m = subscribe.simple (chủ đề, tên máy chủ =" 172.31.83.191 ", được giữ lại = Sai) nếu m.topic ==" ACIONADO "và str (m.payload.decode (" utf-8 ")) ==" TẮT ": gatilho = 0 print ("celado") nếu m.topic == "y tế" và str (m.payload.decode ("utf-8")) == "bật ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) nếu m.topic ==" bombeiro "và str (m.payload.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " ambulancia "và str (m.payloa d.decode ("utf-8")) == "on": if connflag == True: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) nếu m. topic == "Emergencye" và str (m.payload.decode ("utf-8")) == "on": Publishing.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") Publishing.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time () + 60
Bước 6: Codigo Twitter - Monitoração
código monitoração do twitter, pesquisa post na regiao de sorocaba
código rodando na maquina virtual da AWS EC2
n
từ nhập twitter * nhập cấu hình nhập paho.mqtt.publish dưới dạng xuất bản
từ lúc nhập giấc ngủ
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
vĩ độ = -23.546211 kinh độ = -46.637840 độ cao = 50 resultados = 1
publish.single ("twitter_alarme", "ON", hostname = "34.230.74.201")
result_count = 0 last_id = Không có cờ = 0
cho tôi trong phạm vi (60): # ----------------------------------------- ------------------------------ # thực hiện tìm kiếm dựa trên tài liệu API về vĩ độ và kinh độ # twitter: https:// dev. twitter.com/rest/reference/get/search… # ------------------------------------- ---------------------------------- thử: query = twitter.search.tweets (q = "#Terremoto", geocode = "% f,% f,% dkm"% (vĩ độ, kinh độ, độ cao), max_id = last_id) print ("leu")
ngoại trừ: print ("erro acesso twitter") break
cho kết quả trong truy vấn ["trạng thái"]:
# ------------------------------------------------- ---------------------- # chỉ xử lý một kết quả nếu nó có vị trí địa lý # ----------------- -------------------------------------------------- ---- if result ["geo"]: result_count + = 1 last_id = result ["id"] sleep (1) if result_count == resultados: flag + = 1 Publishing.single ("twitter_alarme", "ON", hostname = "34.230.74.201") Publishing.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") ngắt
Bước 7: Estrutura AWS
Utilizamos uma maquina 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
Chủ đề của Utilizmos do AWS SNS que eram acionados pelo AWS IOT CORE
Đề xuất:
Động cơ bước Điều khiển động cơ bước Không cần vi điều khiển !: 6 bước
Động cơ bước Điều khiển động cơ bước Không cần vi điều khiển !: Trong phần Hướng dẫn nhanh này, chúng tôi sẽ tạo một bộ điều khiển động cơ bước đơn giản bằng cách sử dụng động cơ bước. Dự án này không yêu cầu mạch phức tạp hoặc vi điều khiển. Vì vậy, không cần thêm ado, chúng ta hãy bắt đầu
Động cơ bước được điều khiển Động cơ bước không có vi điều khiển (V2): 9 bước (có hình ảnh)
Động cơ bước được điều khiển bằng động cơ bước Không cần vi điều khiển (V2): Trong một trong những Hướng dẫn trước đây của tôi, tôi đã chỉ cho bạn cách điều khiển động cơ bước bằng cách sử dụng động cơ bước mà không cần vi điều khiển. Đó là một dự án nhanh chóng và thú vị nhưng nó đi kèm với hai vấn đề sẽ được giải quyết trong Có thể hướng dẫn này. Vì vậy, hóm hỉnh
Đầu máy mô hình điều khiển động cơ bước - Động cơ bước như một bộ mã hóa quay: 11 bước (có hình ảnh)
Đầu máy mô hình điều khiển động cơ bước | Động cơ bước làm bộ mã hóa quay: Trong một trong những phần Hướng dẫn trước, chúng ta đã học cách sử dụng động cơ bước làm bộ mã hóa quay. Trong dự án này, bây giờ chúng ta sẽ sử dụng bộ mã hóa quay động cơ bước đó để điều khiển đầu máy mô hình bằng vi điều khiển Arduino. Vì vậy, không có fu
Động cơ bước Điều khiển động cơ bước Động cơ bước - Động cơ bước như một bộ mã hóa quay: 11 bước (có hình ảnh)
Động cơ bước Điều khiển động cơ bước Động cơ bước | Động cơ bước như một bộ mã hóa quay: Có một vài động cơ bước nằm xung quanh và muốn làm điều gì đó? Trong Có thể hướng dẫn này, hãy sử dụng động cơ bước làm bộ mã hóa quay để điều khiển vị trí của động cơ bước khác bằng vi điều khiển Arduino. Vì vậy, không cần phải quảng cáo thêm, chúng ta hãy
Centro De Cómputo Para Niños Con Raspberry Pi: 7 bước
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) Cáp HDMI Cargador Rat ó n Teclado para computadoraEn caso de contar con un Kit de inicio