Índice:

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

Vídeo: IN-FORMA: a Plataforma De Informações Sobre Sua Cidade: 5 etapas

Vídeo: IN-FORMA: a Plataforma De Informações Sobre Sua Cidade: 5 etapas
Vídeo: Unha Pintada - Novas Publicações (Ao Vivo em Aracaju) 2024, Julho
Anonim
IN-FORMA: a Plataforma De Informações Sobre Sua Cidade
IN-FORMA: a 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, sempre preparado preparado para o que der e vier! Ou, então, evitar transitar pelos principais pontos de alagamento durante uma forte tempestade e, ao mesmo tempo, saber o índice de radiação UV antes de ir para uma praia ou um parque para se proteger contra os danos do sol. Com a IN-FORMA, tudo isso é possível em um só lugar! Você pode acompanhar o trânsito de uma região determinada e ver os principais pontos turísticos por perto. Além de ter acesso a um banco de informações, você pode utilizar-las da forma que desejar. Se você gosta de velejar, por exemplo, pode saber a condição dos ventos no momento para analisar a melhor hora de sair de casa.

A IN-FORMA é a mais nova plataforma web que integra diversos tipos de informações 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 conforme as condições daquele local. Além de contar com todos esses sensores, uma 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 uma interação do usuário, sendo este permitido a permissão integrar à plataforma suas próprias aplicações fazendo uso dos dados disponibilizados e, inclusive, pode solicitar acesso para tomar-las 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 desenvolvidas pela própria. As 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 críticas. Com a plataforma, então, é possível 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 é de utilidade extrema em dias 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 plataforma, que mostra o nível da água ao longo do dia e os pontos adequados de alagamento da região.

Etapa 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 uma comunicação via protocolo MQTT.

A 96boards está munida de um Atmel ATMEGA328 que provê entradas digitais e analógicas e, com isto, permite a integração da Qualcomm Dragonboard 410c com sensores. A comunicação entre um Dragonboard e a 96boards se dá através do protocolo I²C (Circuito Inter-Integrado).

Os dados coletados nos dispositivos são enviados para o servidor por meio do protocolo de comunicação TCP / IP. Nenhum servidor como informações são disponibilizadas através de uma API pública, possibilitando a obtenção de informações por qualquer usuário por meio de requisições HTTP para uma API Restfull. Há, inclusive, uma maneira simples de visualizar os dados em um Dashboard baseado em HTML5.

Etapa 2: Placa Dragonboard

Placa dragonboard
Placa dragonboard

A 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 foi aproveitada como servidor local para o sistema. Nela é executada o Framework Mosquitto para promover uma interação via MQTT entre o servidor local e o servidor principal. No link https://www.digitalocean.com/community/questions/h… é possível encontrar um tutorial de como instalar o MQTT no Debian. O sistema operacional usado na placa de desenvolvimento é o Linux Linaro, que é baseado em Debian. No link https://www.embarcados.com.br/linux-linaro-alip-na… é possível encontrar um tutorial de como instalar o Linux Linaro-ALIP na Qualcomm DragonBoard 410C.

A Qualcomm Dragonboard 410c precisa se comunicar com ou mezanino 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 processo. Uma função readData envia bytes até que o mezanino faça uma leitura e devolva uma resposta. Ao receber a resposta, lê uma linha inteira do serial que deve estar no formato "S (código do sensor):(valor do sensor)". Após a leitura, separa o código do valor e retorna.

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

def readData (ser):

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

txt = ''

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

txt = txt + c

dados = txt.split (":")

dados de retorno

dados = readData (ser)

Com os dados recebidos, é possível publicar no servidor MQTT. A comunicação com o servidor é feita utilizando a 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.

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

client = 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

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

pass print publish_name + "=" + dados [1]

enquanto cli.loop ()! = 0:

passar

exceto:

passar

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

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

Para emissão de alertas, o sistema conta com um servidor PABX Asterisc. Sempre que é necessário emitir um alerta, o servidor é responsável por enviar uma chamada de voz ou uma mensagem de texto 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/).

Etapa 3: Placa Mezzanine Com Sensores

Placa Mezzanine Com Sensores
Placa Mezzanine Com Sensores

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

I) Sensor de luminosidade

O sensor LDR é um conduzido 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 a 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 (); configuração de vazio () {SI114X SI1145 = SI114X (); }

void loop () {

vl = SI1145. ReadVisible ();

ir = SI1145. ReadIR ();

uv = floor ((float) SI1145. ReadUV () / 100);

}

III) Sensor de temperatura e umidade

"Grove - Sensor de Temperatura e Umidade Pro" https://wiki.seeed.cc/Grove-Temperature_and_Humidi… Este sensor é capaz de detectar temperatura e umidade relativa.

Biblioteca:

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

DHT dht (DHTPIN, DHTTYPE);

void setup () {

dht.begin (); }

void loop () {

h = dht.readHumidity ();

t = dht.readTemperature ();

}

Para juntar a leitura dos 3 sensores no mezanino, 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;

void loop () {

interruptor (ESTADO) {

caso 0:… quebra;

caso 5:

… pausa;

}

ESTADO = (ESTADO + 1)% 6;

}

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

void loop () {while (! Serial.available ()) delay (10); while (Serial.available ()) Serial.read ();

}

Cada leitura de sensor é canalizado individualmento após a leitura através da função sendSensorData. Esta função recebe o código do sensor (inteiro), o dado a ser enviado e o último dado usado. Se houver mudanças na leitura ela é enviada. Uma função dtostrf converte de double para string. Já a função sprintf formata uma 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 (dados, 4, 2, temp); sprintf (sendBuffer, "S% d:% s", sensorCode, temp); Serial.println (sendBuffer); } void loop () {… case 0: h = dht.readHumidity (); sendSensorData (1, h, lastH); lastH = h; pausa; …}

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

Etapa 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 usado para fazer a leitura do nível de á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 usado um 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".

Etapa 5: Painel

Painel
Painel

A Dashboard tem como principal objetivo organizar e 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 usar a tecnologia HTML5 para seu desenvolvimento.

Recomendado: