תוכן עניינים:
- שלב 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
- שלב 2: חיישנים Digitais - Publicação
- שלב 3: Codigo Para Acionamento Sirene
- שלב 4: Codigo Twitter - פרסם
- שלב 5: Centro De Comando
- שלב 6: Codigo Twitter - Monitoração
- שלב 7: Estrutura AWS
וִידֵאוֹ: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
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 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 and avaliar a possibilidade of fakenews. טל tomada de decisão é מכריע diante ao pânico que um alarme falso pode gerar.
מידע על התראה של אנשים שמספקים בחשבון את השימוש ב- SMS, התראה על לקוחות, דוא ל, סירנה וטוויטר.
O projeto contou com uso de recursos da AWS incluindo IOT CORE, EC2 e SNS
Sensores da DragonBord 410c
לקוחות mqtt אנדרואיד
Sendo todo desenvolvido em python
מחברים:
דייגו פרננדס דוס סנטוס - [email protected]
גבריאל פיובאני מורירה דוס סנטוס - [email protected]
Gustavo Venancio Luz - [email protected]
פאולו הנריקה אלמיידה סנטוס - [email protected]
שלב 1: Dragonbord 410c - Publicação Dos Sensores - Analogicos
Abaixo o codigo de publicação dos sensores analógicos, os sensores de temperaturea 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 seguntos, and todo novo alerta detectado decresce o contador em 20 segundos.
programa rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev מ- libsoc יבוא gpio מעכשיו ייבוא שינה
# Importa lib para comunicacao com MOSQUITTO יבוא paho.mqtt.client כמו 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 usar a porta ADC2 use o seguinte vetor de configuraҧ࣠o channel_select2 = [0x01, 0xA0, 0x00]
def on_connect (mqttc, obj, דגלים, rc): הדפס ("rc:" + str (rc))
def on_message (mqttc, obj, msg): print (msg.topic + "" + str (msg.qos) + "" + str (msg.payload))
def on_publish (mqttc, obj, mid): הדפס ("מזהה הודעה:" + str (אמצע) + "\ n") מעבר
# 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
פאב = mqtt. Client ("grupo3")
# Conexao com localhost, אתה יכול לבדוק אם אתה רוצה לעשות זאת. broker_address = "34.230.74.201"
pub.connect (broker_address)
אם _name _ == '_ main_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
עם gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0 בעוד contador <50: gpio_cs.set_high () שינה (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_select1) g) 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 הדפסה ("טמפרטורה: % f / n" % adc_value) pub.publish ("temperatura", str (adc_value)) # teste for acionar contador do alarme, teste ultima leitura + 5%
אם adc_value_old == 0: adc_value_old = adc_value if adc_value> (adc_value_old*1.05): pub.publish ("ALARME", "ON") הדפס ("Alarmado temperatura") adc_value_old = adc_value שינה (1)
gpio_cs.set_high () שינה (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 הדפסה ("Luminosidade: % f / n" % adc_value2) pub.publish ("luminosidade", str (adc_value2))
# teste for acionar contador do alarme, teste ultima leitura + 50%
אם adc_value2_old == 0: adc_value2_old = adc_value2 if adc_value2> (adc_value2_old*1.5): pub.publish ("ALARME", "ON") הדפס ("Alarmado Luminosidade") adc_value2_old = adc_value2 שינה (3)
שלב 2: חיישנים 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 pânico.
quando detectado uma anomalia ou botão de pânico pressionado a contagem regressiva é iniciada.
programa rodando dentro da dragon borad 410c
מכפתור יבוא libsoc_zero. GPIO מיבוא libsoc_zero. GPIO הטה מזמן ייבוא שינה יבוא paho.mqtt.client כ- mqtt sys
def on_connect (mqttc, obj, דגלים, rc): הדפס ("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 ("מזהה הודעה:" + str (באמצע) + "\ n") מעבר
def detectaTilt (): count = 0 sleep_count = 0 while True: try: tilt.wait_for_tilt (1) למעט: sleep_count += 1 אחר: count += 1 sleep_count += 1 אם sleep_count> 999: הפסקה
print ("count:", count) if count> 200: pub = mqttc.publish ("TERREMOTO", "ON") pub = mqttc.publish ("SISMOGRAFO", str (count)) # Criamos o client e setamos suas תצורות mqttc = mqtt. Client ()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
topic = "grupo3"
# Conexao com localhost, אתה יכול לבדוק אם אתה צריך לעשות זאת. mqttc.connect ("34.230.74.201", 1883)
הטיה = הטייה ('GPIO-A')
btn = לחצן ('GPIO-C')
בעוד נכון: sleep (0.25) detectaTilt () אם btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") הדפס ("Botao ON") sleep (1) pub = mqttc.publish ("PANICO "," OFF ") # else: # pub = mqttc.publish (" PANICO "," OFF ") # הדפסה (" Botao OFF ")
שלב 3: Codigo Para Acionamento Sirene
Codigo para subscrição for acionamento da SIRENE, programa rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITTO יבוא paho.mqtt.client כ- mqtt
מ- libsoc_zero. GPIO ייבוא נורית מעת ייבוא שינה שינה = LED ('GPIO-E') #led.off ()
# הגדר o que fazer ao conectar def on_connect (לקוח, obj, דגלים, rc): print ("ConexÃÆ' £ o estabelecida com broker")
# הגדר o que 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 ("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
# אל תגדיר שום תת -מנוי טופיקי ("SIRENE", qos = 0)
# Loop for escuta sub.loop_forever ()
שלב 4: Codigo Twitter - פרסם
Código para publicação do twitter assim que acionado o alarme.
מידע על וירטואלי של AWS EC2
#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-מפרסם הודעת סטטוס לציר הזמן שלך # --- -------------------------------------------------- ------------------ יבוא paho.mqtt. הרשמה כמנוי
זמן יבוא
מיבוא טוויטר *
#------------------------------------------------- ---------------------- # מה צריך להיות הסטטוס החדש שלנו? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"
#------------------------------------------------- ---------------------- # טען את אישורי ה- API שלנו # ---------------------- ------------------------------------------------- יבוא sys sys.path.append (".") הגדרת ייבוא
#------------------------------------------------- ---------------------- # צור אובייקט API של טוויטר # ---------------------- ------------------------------------------------- טוויטר = טוויטר (auth = OAuth ('senha removalida))
#------------------------------------------------- ---------------------- # פרסם סטטוס חדש # מסמכי API של טוויטר: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------
בעוד 1: m = subscribe.simple ("twitteralarme", hostname = "172.31.83.191", retained = False) אם m.topic == "twitteralarme" ו- str (m.payload.decode ("utf-8")) == "on": results = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("status updated: % s" % new_status)
שלב 5: Centro De Comando
manper que acionado um dispositivo manual or detectado um alerta manual to usuário é acionada uma contagem regressiva para envio de mensagem. O operador pode cancelar o envio ou acionar o envio imediato do alerta.
עבור שימוש בדסבורד שימוש באנדרואיד ובטלפונים עבור תוכנת הפעלה מרכזית.
מידע על וירטואלי של AWS EC2
יבוא paho.mqtt.client כ- pahoimport paho.mqtt.s הרשמה כמנוי יבוא paho.mqtt.publish כפרסם יבוא json זמן יבוא שישה יבוא ssl מעת לעת יבוא שינה
נושאים = ['#']
gatilho = 0 hora_disparo = 0 publish.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publish.single ("sensor1", "OFF", qos = 1, host host = "172.31.83.191 ") publish.single (" sensor2 "," OFF ", qos = 1, שם מארח =" 172.31.83.191 ")
connflag = שקר
def on_connect (לקוח, נתוני משתמש, דגלים, rc): global connflag connflag = הדפסה אמיתית (connflag) הדפסה ("החיבור החזיר תוצאה:" + 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 = ssl. PROTOCOL_TLSv1_2, ciphers awc), keepalive = 60) mqttc.loop_start ()
בעוד 1: hora = time.time () שינה (.1) publish.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")
# if connflag == נכון: # mqttc.publish ("הודעה", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: publish.single ("TEMPO", str (עגול (hora_disparo-hora, 0)), qos = 1, hosthost = "172.31.83.191") publish.single ("LEDTERREMOTO", "on", qos = 1, host host = "172.31.83.191") אחר: פרסם.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) ו- (gatilho == 1): # print ("TERREMOTO") # print (connflag) if connflag == True: # mqttc.publish ("הודעה", json.dumps ({'message': "TERREMOTO"}), qos = 1) # mqttc.publish ("הודעה", "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, hosthost = "172.31. 83.191 ") publish.single (" TEMPO "," TERREMOTO ", qos = 1, hostname =" 172.31.83.191 ") publish.single (" ACIONADO "," OFF ", qos = 1, host host =" 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, host host = "172.31.83.191 ") gatilho = 0 שינה (5) m = subscribe.simple (נושאים, שם מארח =" 172.31.83.191 ", שמור = שקר) אם m.topic ==" ACIONADO "ו- str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 הדפסה (" Cancelado ") אם m.topic ==" medico "ו- str (m.payload.decode (" utf-8 ")) ==" מופעל ": if connflag == True: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) if m.topic ==" bombeiro "ו- str (m.payload.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) if m.topic == " אמבולנסיה "ו- str (m.payloa d.decode ("utf -8")) == "on": if connflag == True: mqttc.publish ("ambulance", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) אם m. topic == "urgente" ו- 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 אחר: הדפס ("Acionado") publish.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60
שלב 6: Codigo Twitter - Monitoração
מעקב אחר הטוויטר, הודעה רשומה על סוריה
codigo rodando na maquina virtual da AWS EC2
נ
מאת twitter import *ייבוא config config יבוא paho.mqtt.publish כפרסום
מפעם לפעם ייבוא שינה
טוויטר = טוויטר (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
קו הרוחב = -23.546211 אורך = -46.637840 alcance = 50 תוצאות = 1
publish.single ("twitter_alarme", "ON", hosthost = "34.230.74.201")
result_count = 0 last_id = ללא דגל = 0
עבור i בטווח (60): #----------------------------------------- ------------------------------ # בצע חיפוש המבוסס על קווי רוחב ואורך # מסמכי API של טוויטר: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- נסה: query = twitter.search.tweets (q = "#Terremoto", geocode = " %f, %f, %dkm" %(קו רוחב, אורך, אלקנס), max_id = last_id) הדפס ("leu")
למעט: הדפסה ("erro acesso twitter") הפסקה
לתוצאה בשאילתה ["סטטוסים"]:
#------------------------------------------------- ---------------------- # לעבד תוצאה רק אם יש לה מיקום גיאוגרפי # ----------------- -------------------------------------------------- ---- if result ["geo"]: result_count += 1 last_id = result ["id"] sleep (1) if result_count == resultados: flag += 1 publish.single ("twitter_alarme", "ON", hostname = "34.230.74.201") publish.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") הפסקה
שלב 7: Estrutura AWS
שימוש במכשיר וירטואלי שמכיל ubuntu ו- ests AWS EC2
שימוש ב- AWS IOT CORE עבור שירותי MQTT והתצורות כפי שהן תואמות את הטיפוס
נושאים שימושיים ב- AWS SNS יכולים לשמש עבור AWS IOT CORE
מוּמלָץ:
כיצד לבצע אנטנת BiQuade כפולה 4G LTE שלבים פשוטים: 3 שלבים
כיצד להפוך אנטנת 4G LTE BiQuade כפולה לשלבים קלים: לרוב לא עמדתי בפני, אין לי עוצמת אות טובה לעבודות היום-יומיות שלי. לכן. אני מחפש ומנסה סוגים שונים של אנטנות אבל לא עובד. לאחר בזבוז זמן מצאתי אנטנה שאני מקווה לייצר ולבדוק, כי זה עקרון הבנייה לא
עיצוב משחק בקפיצה ב -5 שלבים: 5 שלבים
עיצוב משחק בקפיצה ב -5 שלבים: פליק הוא דרך פשוטה מאוד ליצור משחק, במיוחד משהו כמו פאזל, רומן חזותי או משחק הרפתקאות
זיהוי פנים ב- Raspberry Pi 4B בשלושה שלבים: 3 שלבים
זיהוי פנים ב- Raspberry Pi 4B בשלושה שלבים: במדריך זה אנו הולכים לבצע זיהוי פנים ב- Raspberry Pi 4 עם Shunya O/S באמצעות ספריית Shunyaface. Shunyaface היא ספריית זיהוי/זיהוי פנים. הפרויקט שואף להשיג את מהירות הזיהוי והזיהוי המהירה ביותר עם
Comando Por Voz - DragonBoard410c: 5 שלבים
Comando Por Voz - DragonBoard410c: Este guia ir á תכנית הלימוד וההגדרה של התוכנית Julius junto com ב- Coruja, que s ã o respectivamente um programa de reconhecimento de voz e o modelo ac ú stico em Portugalu ê s
Centro De Cómputo Para Niños Con Raspberry Pi: 7 שלבים
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 מחשב נייד