Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAISCurso: Especialização em Arquitetura de Software Distribuído
Datos: 2017-10-26
Unidade: Praça da Liberdade
Disciplina: Internet das Coisas
Profesor: Ilo Rivero
Alunos: Bruno Valgas ([email protected])
Dellan Hoffman P. Silva ([email protected])
Hebert Alves Ferreira ([email protected])
Jean Carlos Batista ([email protected])
Jeordane Batista ([email protected])
INTRODUCCIÓN
¿Cómo sería si pudiéramos regar nuestras plantas en cualquier momento y en cualquier lugar? Con el Proyecto WaterPlant será posible. Este proyecto fue desarrollado con el objetivo de mejorar la conveniencia y practicidad para tratar este ser tan importante para el planeta.
INTRODUÇÃO
¿Como seria se pudéssemos aguar nossas plantas a qualquer hora e de qualquer lugar? Com o Projeto WaterPlant será posible. Este projeto foi desenvolvido visando melhorar a comodidade e a praticidade para tratar deste ser tão importante para o planeta.
FUNCIONAMENTO
O projeto foi desenvolvido para monitoramento de jardins, onde é possível efetuar a verificação do estado do solo, com relação a sua umidade. Sendo assim, por meio de parâmetros da umidade do solo é possível avaliar a necessidade de sua irrigação.
A placa envia informações para una API, armazenada na nuvem, que por su vez é acessada pelo aplicativo mobile, que recebe e trata tais informações. Desta forma una aplicação mantem o usuário informado da situação do solo. O usuário em contato com una aplicação poderá solicitar o irrigamento imediado do solo, esta informação é enviada para una API que por sua vez se comunica com una placa para acionamento do dispositivo de irrigação.
Paso 1: COMPONENTES - DRAGONBOARD
DragonBoard 410C
A DragonBoard 410C é a primeira placa de desenvolvimento baseada no processador da série Qualcomm Snapdragon 400, contando com conexões Wifi, Bluetooth e GPS em uma placa do tamanho aproximado de um cartão de crédito, e é caracterizada pelo alto desempeño do processador de 64 bits da Qualcomm rodando a 1.2GHz, con 1GB de memoria DDR3 533 MHz y 8GB de memoria de armazenamento (eMMC).
Precio: R $ 500 ~ R $ 750
Paso 2: COMPONENTES - LINKER BASE
Placa de expansión para mapeamento y utilización de portas, facilitando una utilización de sensores.
Paso 3: COMPONENTES - SENSOR
Sensor de Umidade do Solo
Este sensor utiliza dois eletrodos para passar corrente pelo solo e lê o nível de umidade por comparação com una resistência do potenciômetro do módulo do sensor. Quando o solo estiver seco, a sua resistência aumenta, dificultando a passm de corrente. Com a absorção da água, a resistência do solo diminui permitindo a pasaje de corrente entre os eletrodos e fechando, desta forma, o circuito. Dessa forma podemos definir quando o solo está molhado, ou quando está seco.
O módulo fornece tanto uma saída digital (D0), como uma saída analógica (A0). O sinal digital é ajustado para que tenha valor lógico 1 quando a umidade para maior do que um valor predefinido, ajustado através do potenciômetro presente no módulo.
Precio: R $ 6 ~ R $ 20.
Paso 4: DESENVOLVIMENTO COM WINDOWS 10 IOT CORE
Una aplicación desenvolvida para rodar en Dragonboard 410c para usar Windows 10 IoT Core.
O Windows 10 IoT Core es una plataforma de desenvolvimento criada para facilitar una vida de dos desenvolvedores en la hora de programar seus dispositivos. Com ele é possível desenvolver para várias placas existentes no mercado, bastando ter instalado no computador os seguintes itens (já em sequência de instalação, no caso de uso da Dragonboard):
- Visual Studio 2017 Community ou qualquer outra versão (https://www.visualstudio.com/thank-you-downloading…);
- Herramienta de actualización DragonBoard;
- Panel de Windows 10 IoT Core;
- Imagen de DragonBoard Windows 10 IoT Core;
- Plantillas de proyectos de Windows IoT;
El proceso completo para la instalación y la configuración se encontró sin el siguiente enlace:
Após a instalación y configuración conforme o tutorial de Microsoft basta criar um novo proyecto en Visual Studio do tipo Aplicación en segundo plano.
Para este tutorial vamos a disponer del código finalizado de la aplicación através de GitHub en
Toda una configuración del aplicativo no está archivada en StartupTask.cs na raiz del proyecto, y vamos a explicar una parte a parte del código.
O método principal da aplicação é o Run () e seu código é o seguinte:
ejecución vacía pública (IBackgroundTaskInstance taskInstance)
{InitGPIO (); InitSPI (); _deferral = taskInstance. GetDeferral (); timer = ThreadPoolTimer. CreatePeriodicTimer (Timer_Tick, TimeSpan. FromMilliseconds (10000)); timer2 = ThreadPoolTimer. CreatePeriodicTimer (Timer_Tick2, TimeSpan. FromMilliseconds (10000)); }
Os métodos InitGPIO () e InitSPI () inicializam variáveis para serem used na nossa aplicação enquanto as variáveis timer e timer2 criam 2 timers para serem ejecutados a cada quantidade de tempo, e neste caso foram parametrizados 10 (10 mil milissegundos) para cada timer. Para alterar esse tempo basta mudar estes valores nessa parte do código.
O Método InitGPIO () a seguir tem como función definir como configuraçõese do pino que ativa a válvula solenoide de água. Nesse exemplo de código para a Dragonboard o código do pino foi o 36.
vacío privado InitGPIO ()
{var gpio = GpioController. GetDefault (); if (gpio == null) {pin = null; regreso; } pin = gpio. OpenPin (36); if (pin == null) {return; } pin. Write (GpioPinValue. High); pin. SetDriveMode (GpioPinDriveMode. Output); }
El método InitSPI () configura un porta SPI0 de Dragonboard.
Tarea privada asíncrona InitSPI ()
{prueba {var settings = new SpiConnectionSettings (0); // Selecciona un porta SPI0 da DragonBoard settings. ClockFrequency = 500000; // Configura o clock do barramento SPI em 0.5MHz settings. Mode = SpiMode. Mode0; // Configurar polaridade e fase do clock do SPI var controller = await SpiController. GetDefaultAsync (); SpiADC = controller. GetDevice (configuración); } catch (Exception ex) {lanzar nueva Exception ("Falha na inicialização do SPI", ex); }}
O primeiro timer invoca o método Timer_Tick () que como función de verificación através da API se houve um comando para iniciar uma irrigação. O seguinte trecho de código é responsável pela chamada à API:
var httpWebRequest = (HttpWebRequest) WebRequest. Create ("https://serverless-study.appspot.com/api/v1/irrigacoes");
httpWebRequest. ContentType = "aplicación / json"; httpWebRequest. Method = "OBTENER";
Neste trecho de código deve ser alterado para o endereço onde será hospedado o código da API para buscar o comando de irrigação. É neste trecho de código que a irrigação é encerrada também.
Para o segundo timer é invocado o método Timer_Tick2 () que responde al tiempo envio dos dados da umidade do solo naquele momento. É no seguinte trecho de código deste método que deve ser establecido o endereço da API para o envio dos dados:
var httpWebRequest = (HttpWebRequest) WebRequest. Create ("https://serverless-study.appspot.com/api/v1/umidades");
httpWebRequest. ContentType = "aplicación / json"; httpWebRequest. Method = "POST";
O método LerADC (byte canal) é o método responsável por ler do conversor analógico / digital os valores informados pelo sensor de umidade. Este adaptador de información um array de bytes que se convirtió en inteiro através do método ConvertToInt ([ReadOnlyArray] byte datos). Segue os trechos de código:
public int LerADC (canal de bytes)
{byte readBuffer = nuevo byte [3]; byte writeBuffer = nuevo byte [3] {0x00, 0x00, 0x00}; writeBuffer [0] = 0x01; writeBuffer [1] = canal; SpiADC. TransferFullDuplex (writeBuffer, readBuffer); adcValue = ConvertToInt (readBuffer); return adcValue; } public int ConvertToInt ([ReadOnlyArray] byte datos) {int resultado = 0; resultado = datos [1] & 0x03; resultado << = 8; resultado + = datos [2]; devolver resultado; }
Paso 5: PREPARAR una API
API para desenvolvimiento en la plataforma NodeJS (https://nodejs.org), para uso o Swagger (https://swagger.io/specification/) a fin de modelar y documentar los recursos utilizados en la integración del trabalho.
Para armazenamento dos datos utilizados o banco de datos MySQL, banco de datos relacional y código abierto.
Segue abaixo a arquitetura de camadas que compõem a API.
● / api: Camada que gerencia os recursos disponibles para que terceiros possam acessar.
○ / api / controller: Camada que gerencia as rotas definidas no document gerado pelo swagger.
○ / api / service: Camada que entrega os dados de entrada para serem tratados, depois escritos ou lidos pela camada de BO (descrita mais à diante). Nesta camada está configurado o retorno ocorrido durante el proceso de solicitud.
○ / api / swagger: Camada que contém o arquivo de configuração do swagger, onde estão toda as configurações dos recursos.
● / dominio: Camada que contém toda la codificación relacionada con la regra de negócio da aplicação.
○ / repositorio: Camada de persistência de dados.
● / infraestructura: Cama de configuración de las cadenas de conexión del banco de datos y también del servidor que será provisionado para la próxima aplicación.
Para mais informações e consulta ao código fonte acesso o link do github:
Segue abaixo uma breve descripción de cada recurso disponible en API:
Método: POST
URI: / api / v1 / umidades
Descripción: Recurso utilizado para registar umidade coletada pelo sensor de umidade.
Exemplo de requisição:
{
"Valor": 355}
Método: OBTENER
URI: / api / v1 / umidades
Descrição: Recurso que recupera todos os registros de valores de umidade que foram salvos anteriormente.
Ejemplo de respuesta:
[{"Id": 1, "valor": 355, "dataCadastro": aaaa-MM-dd HH: MM}]
Método: POST
URI: / api / v1 / irrigacoes
Descripción: Recurso utilizado para ativar o dispositivo de irrigação.
Método: OBTENER
URI: / api / v1 / irrigacoes
Descripción: Recurso utilizado para verificar o estado de umidade atual do solo.
Ejemplo de respuesta:
{
"Valor": 355}
Paso 6: APLICACIÓN MÓVIL
Escolhemos uma tecnología híbrida para gerar um código reutilizável para todas como plataformas (Android e IOS) para aumentar una abrangência de usuários e diminuir o custo do projeto. O Ionic é um framework que posui uma gigantesca biblioteca de componentes gráficos que facilitan una implementación visual do aplicativo. Ele utiliza de linguagens web (HTML, CSS e Javascript) para una criação das telas e tem o Angular como o seu núcleo (core). Através do cordova (biblioteca javascript) os recursos do dispositivos são acessados pelo webview do mesmo.
El aplicativo consiste en realizar algumas requisitos para una API del sistema a fin de obtener información adicional sobre una umidada de solo e regar o mesmo remotamente. Através de un evento de botão uma requisição é enviada para o servidor e ação corresponnte é realizada.
Enlaces:
- https://ionicframework.com/
- https://angular.io/
- https://ionicframework.com/
O código fuente del aplicativo modelo encontra-se no GitHub, no endereço
Para que o aplicativo encontrativo funcione basta configurar o endereço da API no arquivo server.ts que-se no diretório /src/entity/server.ts(https://github.com/jeordanecarlosbatista/temperat …) e alterar un variável URI_PREFIX, conforme exemplo abaixo para o endereço onde está hospedada a API:
exportar clase Server {
public static readonly URI_PREFIX: string = "https://serverless-study.appspot.com/api/v1/"; / * public static readonly URI_PREFIX: string = "https://dominio.com/aplicacao/"; * /}
Paso 7: FLUXOGRAMA
Paso 8: REFERNCIAS
Instructables:
Qualcomm DragonBoard 410C:
Windows 10 y DragonBoard ™ 410c: el comienzo perfecto para el desarrollo de IoT:
Monitore sua planta usando Arduino: