Introduction: Minha Via IOT

Pós Graduação em Desenvolvimento de Aplicações para dispositivos móveis
PUC Contagem

Alunos: Gabriel André e Leandro Reis

Os pavimentos das principais rodovias federais, estaduais e das vias públicas das cidades possuem algum tipo de defeito, causados por vários fatores, o que gera um grande impacto no custo operacional do transporte. A partir deste problema, o presente trabalho tem como objetivo a apresentação de um aplicativo para smartphone com sistema operacional Android que identifique as irregularidades na pavimentação dos logradouros das cidades utilizando os sensores acelerômetro e o GPS. Os tipos de irregularidade mais comum encontrados são: remendos em processo de afundamento ou remendos com elevação acima do pavimento regular, afundamentos, trincas, ondulações e buracos. Abaixo segue os passos necessários para entendimento da construção da aplicação.

Step 1: Configuração Do AndroidManifest

No arquivo AndroidManifest.xml é realizado as configurações necessários de permissão e funcionamento do aplicativo com os conceitos de computação ubíqua.

  1. Permissões

    Detalhamos abaixo as permissões do aplicativo e os motivos do uso de cada configuração.
    • Permissão de Localização

      Permissão do aplicativo para encontrar a localização configuramos duas tags, sendo elas:


      < uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    • Permissão para identificação de Inicialização e Reinicialização do Aplicativo
      Permissão do aplicativo para "escutar" um evento de inicialização e reinicialização do sistema Android, com objetivo de iniciar os serviços que irá monitorar a busca de pavimentos irregulares, sendo ela:
    • Permissão de acesso a Internet
      Permissão para o aplicativo utilizar a internet com objetivo de sincronizar os dados com o servidor firebase, sendo ela:

  2. Serviços

    2.1) Serviço de Pavimento Irregular

    Na tag Service que aponta para a classe "PavimentoIrregularBackgroundService" tem como objetivo de captar informações dos pavimentos irregulares e armazenar no banco de dados do aparelho smartphone para o aplicativo.

    2.2) Serviço de GeoLocalização
    Na tag service que aponta para a classe "GeoBackgroundService" tem como objetivo de tratar as informações de pavimento irregular e busca a sua localização de logradouro, bairro, cidade, unidade federativa para agrupar os dados de pavimento irregular por logradouro de uma cidade.


    2.3) Serviço de Sincronização de dados com Firebase Na tag service que aponta para a classe "FirebaseBackgroundService" tem como objetivo de enviar as informações de pavimento irregular encontrado pelo aparelho de Smartphone, somando com as demais informações encontradas por outras pessoas que utilizam o mesmo aplicativo.

  3. Configuração da API do MAPS

    Para configuração da API do Maps precisamos registrar uma chave por aplicativo, conforme tutorial (Configurar API MAPS Android).

    A chave obtida deverá ser colocada em "android:value" na tag "meta-data" do 'android:name="com.google.android.geo.API_KEY"', conforme exemplo abaixo:

  4. Receiver
    Receiver neste projeto irá escutar as ações de inicialização e reinicialização do sistema para captar as informações de pavimento irregular.


    4.1) Receiver de Pavimento Irregular

    A classe "AlarmReceive" é chamada toda vez que há inicialização do sistema operacional android, conforme configuração da tag "". Após esta chamada, dentro da classe há um agendador para a execução do serviço "PavimentoIrregularBackgroundService" que fica avaliando se há pavimento irregular.

    4.2) Receiver de GeoLocalização A classe "AlarmGeoReceive" é chamada toda vez que há inicialização do sistema operacional android, conforme configuração da tag "




    4.3) Receiver do Firebase A classe "AlarmFirebaseReceive" é chamada toda vez que há inicialização do sistema operacional android, conforme configuração da tag "". Após esta chamada, dentro da classe há um agendador para a execução do serviço "FirebaseBackgroundService" que fica avaliando se há registros com todos os dados de logradouro disponivel para envio ao servidor firebase.

Step 2: Entendendo As Classes De Serviço "PavimentoIrregularBackgroundService"

A classe "PavimentoIrregularBackgroundService" é utizada para capturar informações dos sensores acelerômetro e GPS. Com base nas informações obtidas ele tem um algoritmo especifico no método "onLocationChanged" que avalia se o pavimento é irregular, no qual é inserido em uma tabela de banco de dados da própria aplicação. A classe possui algumas tratativas especificas para identificar se o aparelho está com a bateria baixa com objetivo de encerrar o serviço sem que haja prejuízo na coleta das informações e contribuir com o funcionamento do aparelho para o usuário. Outras tratativas prevê que o encerramento da aplicação, pausa da aplicação, etc.

Step 3: Entendendo As Classes De Serviço "GeoBackgroundService"

A classe "GeoBackgroundService" é responsável por buscar pavimentação irregular e complementar as informações de endereço da latitude e longitude encontrados para que haja o envio dessas informações pelo serviço de Firebase. Basicamente ele busca a informação e atualiza complementando que está no método "updateAddress".

Step 4: Entendendo As Classes De Serviço "FirebaseBackgroundService"

A classe "FirebaseBackgroundService" é responsável pelo o envio dos dados de endereço de pavimento irregular para o servidor Firebase da aplicação.

Após a sincronização das informações, os dados no banco de dados da aplicação é limpado para prover espaço de armazenamento ao aparelho Smartphone. O método "enviarPavimentoIrregular" é o principal responsável pela sincronização das informações necessárias. E para configurar o Firebase ao seu projeto em android, você deverá seguir o tutorial em (Configurando Firebase para Android) para vincular a sua base de informações com o seu banco em Firebase.

Step 5: Entendendo Activity "MapaActivity"

MapaActivity é a principal Activity do sistema, pois ela é responsavel pela exibição dos pavimentos irregulares encontrados nas cidades e sua informações é exibida por um mapa de calor, onde a maior ocorrência de pavimento irregular aparece em destaque de vermelho no mapa.

Step 6: Firebase

No arquivo "minhaviaiot-export.json" exportado do Firebase, segue um exemplo da estrutura dos dados armazenados pela aplicação, conforme detalhado abaixo:

Cada logradouro poderá ter mais de um pavimento irregular. Cada Cidade poderá ter mais de um logradouro com pavimento irregular. E assim por diante até chegar no país de origem do logradouro problemático.

{ "minhaviaiot": { "pais": { "BR": { "uf": { "Minas Gerais": { "cidade": { "Belo Horizonte": { "logradouro": { "Acesso Praça Paulo Gustavo do Vale": { "LTE5Ljg1OTg3MDA2LTQzLjk5Mzc3MDI4": { "cidade": "Belo Horizonte", "idFirebase": "LTE5Ljg1OTg3MDA2LTQzLjk5Mzc3MDI4", "latitude": "-19.85987006", "logradouro": "Acesso Praça Paulo Gustavo do Vale", "longitude": "-43.99377028", "pais": "BR", "uf": "Minas Gerais" }, "LTE5Ljg1OTgwMDQ4LTQzLjk5MzM2MDg1": { "cidade": "Belo Horizonte", "idFirebase": "LTE5Ljg1OTgwMDQ4LTQzLjk5MzM2MDg1", "latitude": "-19.85980048", "logradouro": "Acesso Praça Paulo Gustavo do Vale", "longitude": "-43.99336085", "pais": "BR", "uf": "Minas Gerais" }, "LTE5Ljg1OTgzNzMxLTQzLjk5MzYxMzE4": { "cidade": "Belo Horizonte", "idFirebase": "LTE5Ljg1OTgzNzMxLTQzLjk5MzYxMzE4", "latitude": "-19.85983731", "logradouro": "Acesso Praça Paulo Gustavo do Vale", "longitude": "-43.99361318", "pais": "BR", "uf": "Minas Gerais" } }, "Avenida Afonso Pena": { "LTE5LjkzODk3NTI5LTQzLjkyNjQ0MzI5": { "cidade": "Belo Horizonte", "idFirebase": "LTE5LjkzODk3NTI5LTQzLjkyNjQ0MzI5", "latitude": "-19.93897529", "logradouro": "Avenida Afonso Pena", "longitude": "-43.92644329", "pais": "BR", "uf": "Minas Gerais" }, "LTE5LjkzODkyOTY1LTQzLjkyNjM2MDk=": { "cidade": "Belo Horizonte", "idFirebase": "LTE5LjkzODkyOTY1LTQzLjkyNjM2MDk=", "latitude": "-19.93892965", "logradouro": "Avenida Afonso Pena", "longitude": "-43.9263609", "pais": "BR", "uf": "Minas Gerais" } } } } } } } } } } }

Step 7: Conclusão Do Projeto Final

Em anexo a este instructables segue todo o projeto Android compactado. Com este projeto é possível ter uma visão dos conceitos de computação ubíqua aplicado em um problema que não tem em nenhum sistema de tempo real. Com este projeto é possível chegar na realidade de cada cidade e identificar onde deverá ser aplicado os investimentos para um novo asfalto ou uma correção de curto prazo.

Para quaisquer dúvidas e contato segue meu e-mail: leandro.reis@outlook.com