Cov txheej txheem:

SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE: 8 Kauj Ruam
SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE: 8 Kauj Ruam

Video: SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE: 8 Kauj Ruam

Video: SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE: 8 Kauj Ruam
Video: Sistema de Riego Inteligente - Arduino - Aplicación Móvil - Iluminación automática. 2024, Kaum ib hlis
Anonim
Image
Image
SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE
SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE
SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE
SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAISCurso: Tshwj xeeb tshwj xeeb hauv Arquitetura de Software Distribuído

Cov ntaub ntawv: 2017-10-26

Unidade: Tshaj tawm Liberdade

Kev qhuab qhia: Internet das Coisas

Xib fwb: 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])

QHIA

Nws yuav zoo li cas yog tias peb tuaj yeem ywg dej peb cov nroj tsuag txhua lub sijhawm, nyob qhov twg? Nrog WaterPlant Project nws yuav ua tau. Txoj haujlwm no tau tsim los txhawm rau txhim kho kev yooj yim thiab siv tau los kho qhov no yog qhov tseem ceeb rau ntiaj chaw.

INTRODUÇÃO

Yuav ua li cas thiaj li tau txais txiaj ntsig los ntawm kev cog qoob loo? Com los Projeto WaterPlant muaj peev xwm. 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.

Cov lus tshaj tawm xov xwm rau API, armazenada na nuvem, que por sua vez é acessada pelo aplicativo mobile, que recebe e trata tais informações. Desta forma aplicação mantem o usuário informado da situação ua ib leeg. O usuário em contato com aplicação poderá solicitar o irrigamento imediado do solo, esta informação é enviada para a API que por sua vez se comunica com a placa para acionamento do dispositivo de irrigação.

Kauj ruam 1: QHIA - DRAGONBOARD

COV NTAUB NTAWV - DRAGONBOARD
COV NTAUB NTAWV - DRAGONBOARD

DragonBoard 410C

DragonBoard 410C yog tus thawj coj ua lag luam tsis muaj tus txheej txheem los ntawm kev siv Qualcomm Snapdragon 400, sib txuas nrog Wifi, Bluetooth thiab GPS em uma placa do tamanho aproximado de um cartão de crédito, e é caracterizada pelo alto desempenho do processador de 64 Qualcomm rodando à 1.2GHz, com 1GB ntawm kev nco DDR3 533 MHz thiab 8GB ntawm memória de armazenamento (eMMC).

Tus nqi: R $ 500 ~ R $ 750

Kauj Ruam 2: QHIA - LINKER BASE

QHIA - LINKER BASE
QHIA - LINKER BASE

Placa de expansão para mapeamento e utilização de portas, ua kom yooj yim thiab siv tau zoo.

Kauj ruam 3: QHIA - SENSOR

TSEEM CEEB - SENSOR
TSEEM CEEB - SENSOR

Sensor de Umidade do Solo

Este sensor siv ua haujlwm eletrodos para passar corrente pelo solo e lê o nível de umidade por comparação com a resistência do potenciômetro do módulo do sensor. Quando o solo estiver seco, a sua resistência aumenta, dificultando a passagem de corrente. Com a absorção da uagua, a resistência do solo diminui permitindo a passagem de corrente entre os eletrodos e fechando, desta forma, o circuito. Dessa forma podemos definir quando o solo está molhado, ou quando está seco.

Nws yog qhov tseem ceeb tshaj plaws rau digital (D0), como uma saída analógica (A0). O sinal digital é ajustado para que tenha valor lógico 1 quando a umidade for maior do que um valor predefinido, ajustado através do potenciômetro presente no módulo.

Tus nqi: R $ 6 ~ R $ 20.

Kauj Ruam 4: DESENVOLVIMENTO COM WINDOWS 10 IOT CORE

Aplicação desenvolvida para rodar na Dragonboard 410c foi feita utilizando o Windows 10 IoT Core.

O Windows 10 IoT Core é uma plataforma de desenvolvimento criada para facilitar a vida dos desenvolvedores na 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, tsis muaj caso de uso da Dragonboard):

  • Visual Studio 2017 Zej Zog los yog koj muaj peev xwm ua tau zoo dua (https://www.visualstudio.com/thank-you-downloading…);
  • DragonBoard Hloov Kho Cuab Yeej;
  • Windows 10 IoT Core Dashboard;
  • DragonBoard Windows 10 IoT Core Duab;
  • Windows IoT qhov haujlwm ua qauv;

Cov txheej txheem ua tiav rau kev teeb tsa thiab teeb tsa pode ser encontrado no seguinte txuas:

Após a instalação e configuração conforme o tutorial da Microsoft basta criar um novo projeto tsis muaj Visual Studio ua cov ntsiab lus keeb kwm yav dhau.

Para este tutorial vamos disponibilizar o código finalizado da aplicação através do GitHub em

Tam sim no teeb tsa ib qho kev pab cuam zoo li tsis yog arquivo StartupTask.cs na raiz do projeto, thiab vamos qhia meej txog cov neeg ua haujlwm ib feem ntawm código.

Tus thawj xibfwb thiab tus thov kev pabcuam o Run () e seu código é o seguinte:

pej xeem tsis muaj dab tsi khiav (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 utilizadas na nossa aplicação enquanto as variáveis timer e timer2 criam 2 timers para serem executados a cada quantidade de tempo, e neste caso foram parametrizados 10 segundos timer. Para alterar esse tempo basta mudar estes valores nessa parte do código.

O Método InitGPIO () a seguir tem como função definir as configuraçõese do pino que ativa a válvula solenoide de água. Nesse exemplo de código rau Dragonboard lossis código do pino foi o 36.

ntiag tug tsis muaj dab tsi InitGPIO ()

{var gpio = GpioController. GetDefault (); yog (gpio == null) {pin = null; rov qab; } tus pin = gpio. OpenPin (36); if (pin == null) {rov qab; } pin. Write (GpioPinValue. High); tus pin. SetDriveMode (GpioPinDriveMode. Output); }

Kev xaiv InitSPI () teeb tsa tus qauv SPI0 ntawm Dragonboard.

ntiag tug async Task InitSPI ()

{sim {var nqis = tshiab SpiConnectionSettings (0); // Seleciona a porta SPI0 da DragonBoard settings. ClockFrequency = 500000; // Configura o clock do barramento SPI em 0.5MHz settings. Mode = SpiMode. Mode0; // COnfigura polaridade e fase ua moos ua SPI var maub los = tos SpiController. GetDefaultAsync (); SpiADC = controller. GetDevice (chaw); } ntes (Kev zam tshwj xeeb) {pov qhov zam tshiab ("Falha na inicialização do SPI", ex); }}

O primeiro timer invoca o método Timer_Tick () que tem como função a verificação através da API se houve um comando para iniciar uma irrigação. Nws tseem ceeb heev uas yuav tsum tau ua raws li cov cai hauv qab no: API:

var httpWebRequest = (HttpWebRequest) WebRequest. Create ("https://serverless-study.appspot.com/api/v1/irrigacoes");

httpWebRequest. ContentType = "application/json"; httpWebRequest. Method = "TAU";

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 é responsável pelo envio dos dados da umidade do solo naquele momento. É tsis muaj seguinte trecho de código deste método que deve ser configurado 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 = "application/json"; httpWebRequest. Method = "POST";

O método LerADC (byte kwj dej) é o método responsável por ler ua tus hloov pauv analógico/digital os valores informados pelo sensor de umidade. Este adaptador informa um array de bytes que é convertido em inteiro através do método ConvertToInt ([ReadOnlyArray] byte cov ntaub ntawv). Segue os trechos de código:

pej xeem int LerADC (byte kwj dej)

{byte readBuffer = tshiab byte [3]; byte writeBuffer = tshiab byte [3] {0x00, 0x00, 0x00}; writeBuffer [0] = 0x01; writeBuffer [1] = kwj dej; SpiADC. TransferFullDuplex (writeBuffer, readBuffer); adcValue = ConvertToInt (readBuffer); rov adcValue; } public int ConvertToInt ([ReadOnlyArray] byte cov ntaub ntawv) {int tshwm sim = 0; tshwm sim = cov ntaub ntawv [1] & 0x03; tshwm sim << = 8; tshwm sim += cov ntaub ntawv [2]; rov qab los; }

Kauj Ruam 5: Npaj API

API foi desenvolvida na plataforma NodeJS (https://nodejs.org), foi utilizado o Swagger (https://swagger.io/specification/) a fim de modelar e documentar os recursos utilizados na integração do trabalho.

Para armazenamento dos dados foi utilizado o banco de dados MySQL, banco de dados relacional e qhib qhov chaw.

Segue abaixo a arquitetura de camadas que compõem a API.

● /api: Camada que gerencia os recursos disponibilizados para que terceiros possam acessar.

○ /api /maub los: Camada que gerencia as rotas definidas tsis muaj ntaub ntawv gerado pelo swagger.

○ /api /kev pabcuam: Camada que entrega os dados de entrada para serem tratados, depois escritos ou lidos pela camada de BO (descrita mais à diante). Nesta camada yog lub teeb tsa los ntawm retorno ocorrido durante lossis txheej txheem kev thov.

○ /api /swagger: Camada que contém o arquivo de configuração do swagger, onde estão toda as configurações dos recursos.

● /sau: Camada que contém toda codificação relacionada a regra de negócio da aplicação.

○ /chaw cia khoom: Camada de persistência de dados.

● /infrastructure: Cama de configuração das strings de conexão do banco de dados e também do servidor que será provisionado pela própria aplicação.

Para mais informações e consulta ao código fonte acesso o link do github:

Segue abaixo uma breve descrição de cada recurso disponibilizados nrog API:

Qhov chaw: POST

URI:/api/v1/umidades

Cov lus piav qhia: Rov siv tau dua rau kev sau npe umidade coletada pelo sensor de umidade.

Piv txwv ntawm kev xav tau:

{

"Siab": 355

Método: Tau

URI:/api/v1/umidades

Cov lus piav qhia: Rov ua dua que rov ua haujlwm tag nrho os registros de valores de umidade que foram salvos anteriormente.

Piv txwv li lus teb:

[{“Id”: 1, “valor”: 355, “dataCadastro”: yyyy-MM-dd HH: MM}]

Qhov chaw: POST

URI:/api/v1/irrigacoes

Descrição: Rov siv tau dua rau ativar o dispositivo de irrigação.

Método: Tau

URI:/api/v1/irrigacoes

Cov lus piav qhia: Rov siv tau dua qub rau qhov tseeb lossis estado de umidade atual do solo.

Piv txwv li lus teb:

{

"Siab": 355

Kauj Ruam 6: APP MOBILE

APP MOBILE
APP MOBILE
APP MOBILE
APP MOBILE

Escolhemos uma tecnologia híbrida para gerar um código reutilizável para todas as plataformas (Android e IOS) para aumentar a abrangência de usuários e diminuir o custo do projeto. O Ionic é um moj khaum que possui uma gigantesca biblioteca de componentes gráficos que facilita a implementação visual do aplicativo. Siv lub vev xaib linguagens (HTML, CSS thiab Javascript) rau 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 ao acessados pelo webview do mesmo.

A aplicativo suav nrog em realizar algumas requisições para a API do sistema a fim de se obter informações sobre a umidade do solo e regar o mesmo remotamente. Através de um evento de botão uma requisição é enviada para o servidor e ação correspondente é realizada.

Txuas:

  • https://ionicframework.com/
  • https://angular.io/
  • https://ionicframework.com/

O código fonte do aplicativo modelo encontra-se no GitHub, tsis muaj qhov kawg

Para que o aplicativo funcione basta configurar o endereço da API no arquivo server.ts que encontra-se no diretório /src/entity/server.ts (https://github.com/jeordanecarlosbatista/temperat…) e alterar a variável URI_PRE ua raws li cov lus pom zoo rau kev ua haujlwm lossis kev ua haujlwm ntawm API:

export chav Server {

pej xeem zoo li qub nyeem URI_PREFIX: hlua = "https://serverless-study.appspot.com/api/v1/"; /* pej xeem nyeem zoo li qub URI_PREFIX: hlua = "https://dominio.com/aplicacao/"; */}

Kauj Ruam 7: FLUXOGRAMA

FLUXOGRAMA
FLUXOGRAMA

Kauj Ruam 8: REFERÊNCIAS

Cov lus qhia:

Qualcomm DragonBoard 410C:

Windows 10 thiab DragonBoard ™ 410c-Pib Zoo Tshaj rau IoT Kev Txhim Kho:

Monitore sua planta siv Arduino:

Pom zoo: