Tabla de contenido:
- Paso 1: COMPONENTES - DRAGONBOARD
- Paso 2: COMPONENTES - LINKER BASE
- Paso 3: COMPONENTES - SENSOR
- Paso 4: DESENVOLVIMENTO COM WINDOWS 10 IOT CORE
- Paso 5: PREPARAR una API
- Paso 6: APLICACIÓN MÓVIL
- Paso 7: FLUXOGRAMA
- Paso 8: REFERNCIAS
Video: SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE: 8 Pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:40
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:
Recomendado:
Sistema de riego por goteo conectado a Internet controlado por retroalimentación de humedad del suelo (ESP32 y Blynk): 5 pasos
Sistema de riego por goteo conectado a Internet controlado por retroalimentación de humedad del suelo (ESP32 y Blynk): preocúpese por su jardín o sus plantas cuando se vaya de vacaciones, u olvídese de regar su planta a diario. Bueno, aquí está la solución Es un sistema de riego por goteo controlado por la humedad del suelo y conectado globalmente controlado por ESP32 en la parte frontal del software i
Sistema De Irrigação Automático Para Plantas: 8 Pasos
Sistema De Irrigação Automático Para Plantas: A irrigação é uma das tecnologias mais used por agricultores pois this atividade independent da ocorrência de chuvas, garante uma safra uniforme, reduz a falha human, minimiza o consumo de água (using apenas quando necessário) e minimiza os
Puerta automática de gallinero - Controlada por Arduino .: 10 pasos (con imágenes)
Puerta automática para gallinero - Controlada por Arduino: Este Instructable es para el diseño de una puerta automática para gallinero con tiempos de apertura y cierre modificables manualmente. La puerta se puede abrir o cerrar de forma remota en cualquier momento. La puerta está diseñada para ser modular; el marco, la puerta y el controlador pueden ser contras
Clasificadora por color basada en cinta transportadora controlada por TIVA: 8 pasos
Clasificadora por color basada en cinta transportadora controlada TIVA: El campo de la electrónica tiene una amplia aplicación. Cada aplicación necesita un circuito diferente y un software diferente, así como una configuración de hardware. El microcontrolador es el modelo integrado incrustado en un chip en el que se pueden ejecutar diferentes aplicaciones con
Monitoreo de temperatura ambiente controlada por Raspberry Pi con salida de imagen Gnuplot y capacidad de alerta por correo electrónico: 7 pasos
Monitoreo de temperatura ambiente controlada de Raspberry Pi con salida de imagen Gnuplot y capacidad de alerta por correo electrónico: donde trabajo, hay una sala muy importante que alberga muchas computadoras. La temperatura ambiente de esta sala debe ser muy fría para optimizar el rendimiento de estos sistemas. Se me pidió que creara un sistema de monitoreo que tuviera la capacidad de