Tabla de contenido:

IN-FORMA: a Plataforma De Informações Sobre Sua Cidade: 5 Pasos
IN-FORMA: a Plataforma De Informações Sobre Sua Cidade: 5 Pasos

Video: IN-FORMA: a Plataforma De Informações Sobre Sua Cidade: 5 Pasos

Video: IN-FORMA: a Plataforma De Informações Sobre Sua Cidade: 5 Pasos
Video: cabel0 2024, Noviembre
Anonim
IN-FORMA: una Plataforma de Informações Sobre Sua Cidade
IN-FORMA: una Plataforma de Informações Sobre Sua Cidade

Quem nunca saiu de casa com roupas de frio e quando chegou no destino estava fazendo o maior sol ?! Imagine, então, poder acompanhar em tempo real a temperatura de diversos pontos de sua cidade, semper estando preparado para o que der e vier! Ou, então, evitar transitar pelos principais pontos de alagamento durante uma forte tempestade e, até mesmo, saber o índice de radiação UV antes de ir para uma praia ou um parque para se proteger adecuadamente contra os danos do sol. ¡Com a IN-FORMA, tudo es posible em um só lugar! Você pode acompanhar o trânsito de uma determinada região e ver os principais pontos turísticos por perto. Além de ter acesso a um banco de informações, você pode utilizá-las da forma que desejar. Se você gosta de velejar, por ejemplo, pode saber a condição dos ventos no momento para analisar a melhor hora de sair de casa.

A IN-FORMA es una nueva plataforma web que integra diversos tipos de información a respeito da sua cidade. São espalhados em diversos pontos da região sensores de temperatura, umidade, luminosidade, entre outros, que fornecem em tempo real as condições daquele local. Além de contar com todos esses sensores, a plataforma tem conexão direta com o Google Maps, trazendo informações sobre o trânsito e localização, e pode conectar-se a outros sistemas de mapeamento da região. Uma das inovações trazidas pela plataforma é que ela pode contar com a interação do usuário, sendo este permitido a solicitar autorização para integrar à plataforma suas próprias aplicações fazendo uso dos dados disponibilizados e, inclusive, pode solicitar acesso para torná-las visíveis aos outros usuários.

A IN-FORMA, além de poder integrar diversos tipos de aplicações desenvolvidas pelos usuários e empresas, conta com um sistema de mapeamento de inundações desenvolvida pela própria. Como inundações trazem muitos problemas à população, tanto de saúde pública, quanto ambientais e sociais. Por isso, em cidades com sistemas de drenagem ineficientes, é de extrema importância a pontuação das regiões mais criticas. Com a plataforma, então, é possível saber o nível de água nas ruas em vários pontos da cidade, através de aparelhos instalados nas vias ou calçadas. Este sistema es de extrema utilidad en días de chuva, pois informa os locais mais prejudicados pela água, evitando que a população transite por estes. Além disso, o sistema de drenagem das ruas pode ser melhorado com os dados fornecidos pela platform, que mostram o nível da água ao longo do dia e os pontos críticos de alagamento da região.

Paso 1: Arquitetura Da Plataforma

Arquitetura Da Plataforma
Arquitetura Da Plataforma

A proposta é o desenvolvimento de uma plataforma aberta para integração de diversos dispositivos. A arquitetura do sistema é baseada na comunicação entre uma placa Dragonboard, munida da placa de conexão 96boards, com o serviço AWS da Amazon utilizando o Framework Mosquitto para perpetuar a comunicação via protocolo MQTT.

A 96boards está munida de um Atmel ATMEGA328 que provê entradas digitales e analógicas e, com isto, permite una integración de Qualcomm Dragonboard 410c com sensores. Una comunicación entre un Dragonboard y un 96boards se dá através do protocolo I²C (Inter-Integrated Circuit).

Os dados coletados nos dispositivos são enviados para o servidor por meio do protocolo de comunicação TCP / IP. Ningún servidor como información está disponible através de uma API pública, posibilitando una obtención de información de cualquer usuário por meio requisições HTTP a uma Restfull API. Há, inclusive, uma maneira simples de visualizar os dados em uma Dashboard basado en HTML5.

Paso 2: Dragonboard Placa

Placa Dragonboard
Placa Dragonboard

Un Qualcomm Dragonboard 410c é um ambiente de desenvolvimento para prototipagem de projetos. A placa possui hardware equivalente ao Moto G, fabricado pela Motorola. No desenvolvimento da plataforma ela para utilizado como servidor local para el sistema. Nela é ejecutada o Framework Mosquitto para promover una interacción a través de MQTT entre o servidor local e o servidor principal. No hay enlace https://www.digitalocean.com/community/questions/h… es posible encontrar un tutorial de cómo instalar o MQTT en Debian. O sistema operacional usado en placa de desenvolvimento é o Linux Linaro, que es baseado en Debian. Sin enlace https://www.embarcados.com.br/linux-linaro-alip-na… es posible encontrar un tutorial de cómo instalar o Linux Linaro-ALIP en Qualcomm DragonBoard 410C.

Un Qualcomm Dragonboard 410c precisa se comunicar com o Mezzanine para receber as informações coletadas no sensor e enviá-las para o servidor MQTT local ou remoto. Utilizamos python e comunicação serial.

O código abaixo detalha este proceso. Una función readData envia bytes até que o Mezzanine faça uma leitura e devolva a resposta. Ao receber a resposta, lê uma linha inteira do serial que deverá estar no formato "S (código do sensor):(valor do sensor)". Após a leitura, separa o código do valor e retorna.

importar serial ser = serial. Serial ('/ dev / tty96B0', 115200)

def readData (ser):

while ser.inWaiting () == 0: ser.write ([0])

txt = ''

while True: c = ser.read () if c == '\ n': break elif c == '\ r': continue

txt = txt + c

dados = txt.split (":")

volver dados

dados = readData (ser)

Como dados recebidos, es posible publicar sin servidor MQTT. A comunicação com o servidor é feita utilizando una biblioteca paho. O código abaixo se conecta a um servidor e, através da função publicar, publica no servidor com o tópico adequado.

importar paho.mqtt.client como paho SERVIDOR_LOGIN = "" SERVIDOR_SENHA = "" SERVIDOR_ENDERECO = "localhost"

cliente = paho. Client ()

client.username_pw_set (SERVIDOR_LOGIN, SERVIDOR_SENHA) client.connect (SERVIDOR_ENDERECO, 1883) client.loop_start ()

def publicar (dados, cli):

try: publish_name = '' if dados [0] == 'S1': publish_name = "/ qualcomm / umidade" elif dados [0] == 'S2': publish_name = "/ qualcomm / temperatura" elif dados [0] = = 'S3': publish_name = "/ qualcomm / luminosidade" elif dados [0] == 'S4': publish_name = "/ qualcomm / luzvisivel" elif dados [0] == 'S5': publish_name = "/ qualcomm / infravermelho "elif dados [0] == 'S6': publish_name =" / qualcomm / ultravioleta "else: return False

while cli.publish (publish_name, dados [1]) [0]! = 0:

pasar imprimir nombre_publicación + "=" + datos [1]

mientras que cli.loop ()! = 0:

aprobar

excepto:

aprobar

O código completo pode ser visto no arquivo "mezzanine_mqtt.py".

Para comunicação com o servidor a Dragonboard está conectado com o servidor através de uma conexão 3G, usando o modem 3G HSUPA USB Stick MF 190 usando una operadora TIM.

Para emissão de alertas, o sistema conta com um servidor PABX Asterisc. Semper que es necesario emitir um alerta, o servidor é respuesta por enviar uma chamada de voz o uma mensagem de para o sistema de emergência da região. Para instalar o Asterisc você pode seguir o link (https://www.howtoforge.com/tutorial/how-to-install-asterisk-on-debian/).

Paso 3: Placa Mezzanine Com Sensores

Placa Mezzanine Com Sensores
Placa Mezzanine Com Sensores

Três Sensores se conectam com o Entresuelo: luminosidade, luz solar e temperatura e umidade.

I) Sensor de luminosidad

O sensor LDR é um led ativado pela luminosidade que incide sobre ele. A leitura é feita através da porta analógica A0.

Leitura do sensor: ldr = analogRead (LDRPIN) /10.0

II) Sensor de luz solar "Grove - Sensor de luz solar"

Este é um sensor multi-canal capaz de detectar luz ultravioleta, infra-vermelho e luz visível.

Biblioteca:

Utilizando una biblioteca disponível através do link abaixo, conectamos o sensor através da porta I2C disponível. A leitura é feita da seguinte maneira:

SI114X SI1145 = SI114X (); configuración vacía () {SI114X SI1145 = SI114X (); }

bucle vacío () {

vl = SI1145. ReadVisible ();

ir = SI1145. ReadIR ();

uv = piso ((flotante) SI1145. ReadUV () / 100);

}

III) Sensor de temperatura e umidade

"Grove - Temperature and Humidity Sensor Pro" https://wiki.seeed.cc/Grove-Temperature_and_Humidi… Este sensor es capaz de detectar temperatura e umidade relativa.

Biblioteca:

Conectamos este sensor na porta analógica A0 e utilizamos o seguinte código para lectura:

DHT dht (DHTPIN, DHTTYPE);

configuración vacía () {

dht.begin (); }

bucle vacío () {

h = dht.readHumidity ();

t = dht.readTemperature ();

}

Para juntar a leitura dos 3 sensores no Mezzanine, criamos uma máquina de estados, onde cada estado é responsável por uma leitura. Como são 6 leituras no total, teremos 6 estados, organizado da seguinte forma:

int ESTADO = 0;

bucle vacío () {

cambiar (ESTADO) {

caso 0:… romper;

caso 5:

… rotura;

}

ESTADO = (ESTADO + 1)% 6;

}

Para evitar leituras desnecessárias, o estágio atual só ejecuta quando a Qualcomm DragonBoard 410c está pronta para receber as informações. Para isto, utilizamos uma espera ocupada:

bucle vacío () {while (! Serial.available ()) delay (10); while (Serial.available ()) Serial.read ();

}

Cada leitura de sensor é enviada individualmento após a leitura através da função sendSensorData. Esta función recibe el código del sensor (inteiro), o dado a ser enviado y último dado utilizado. Se houver mudanças na leitura ela é enviada. A função dtostrf converte de double para string. Já a função sprintf formata a string para ser enviada pela serial com a função Serial.println.

char sendBuffer [20], temp [10]; void sendSensorData (int sensorCode, double data, double lastData) {if (data == lastData) return; dtostrf (datos, 4, 2, temp); sprintf (sendBuffer, "S% d:% s", sensorCode, temp); Serial.println (sendBuffer); } bucle vacío () {… caso 0: h = dht.readHumidity (); sendSensorData (1, h, lastH); lastH = h; rotura; …}

O código completo pode ser visto no arquivo "sensores.ino".

Paso 4: Sensor De Alagamento Utilizando NodeMCU

Sensor De Alagamento Utilizando NodeMCU
Sensor De Alagamento Utilizando NodeMCU
Sensor De Alagamento Utilizando NodeMCU
Sensor De Alagamento Utilizando NodeMCU
Sensor De Alagamento Utilizando NodeMCU
Sensor De Alagamento Utilizando NodeMCU

O NodeMCU foi utilizado para fazer a leitura do nível da água, utilizando um sensor de fácil criação. Utilizando um pedaço de aproximadamente 30cm de um cabo de par trançado, quatro fios foram dispostos. O processo de eletrólise cria um resistor virtal quando o dispositivo é inundado.

Para o desenvolvimento do código, foi used a IDE do Arduino com as bibliotecas: Pubsub-client (https://pubsubclient.knolleary.net/) ESP8266 (https://github.com/esp8266/Arduino).

O código completo pode ser visto no arquivo "sensorAlagamento.ino".

Paso 5: Panel de control

Tablero
Tablero

Un panel de control como principal objetivo organizar y apresentar melhor os conteúdos informativos dos sensores coletados, dando a eles um design mais interativo, além trazer informações a respeito de pontos turísticos de diversos pontos da cidade e do trânsito local. Foi used a tecnologia HTML5 para seu desenvolvimento.

Recomendado: