Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Piscina Azure IoT

Componentes e suprimentos

DS18B20 Sensor de temperatura digital à prova d'água
(o fio vermelho conecta-se a 3-5V, o azul / preto conecta-se ao aterramento e amarelo / branco são os dados )
× 2
IoT Power Relay
× 1
Resistor 4,75 k ohm
1 / 4W, 5%
× 2
Raspberry Pi 2 Modelo B
× 1
Arduino UNO
Arduino Uno R3
× 1

Aplicativos e serviços online

Microsoft Azure
Microsoft Windows 10 IoT Core
Arduino IDE
Microsoft Visual Studio 2015
Azure IoT Hub Device Explorer
Fritzing
Power BI

Sobre este projeto





Visão geral


O objetivo deste projeto é controlar e monitorar uma piscina utilizando sensores de temperatura, relés e Microsoft Azure.

A inspiração para este projeto é a necessidade de operar e monitorar remotamente nossa piscina infantil, que é uma piscina redonda Intex 15 'x 48 ". A piscina comporta aproximadamente 5.000 galões de água. Está conectada a um Filtro / Bomba de Areia, um aquecedor de 11 KW e um sistema de água salgada. O objetivo era monitorar a temperatura da água da piscina, a temperatura do ar e controlar a bomba, o aquecedor e o sistema de água salgada para garantir que a piscina estivesse quente o suficiente para as crianças, sem sobrecarregá-la.

Este vídeo de 5 minutos mostra como o pool, sensores, placas de circuito e relés estão conectados.

O diagrama de arquitetura a seguir mostra todos os principais componentes da solução.

O Raspberry Pi, o Arduino, o IoT Power Relay e a placa de ensaio são presos por zíper em um recipiente de plástico para manter a água / umidade longe. Furos foram feitos para os cabos e ventilação.





Sensores


O monitoramento da temperatura da água da piscina e da temperatura do ar é realizado usando um par de sensores de temperatura à prova d'água DS18B20, conectado a um Arduino Uno R3 usando a Biblioteca de controles Dallas e a Biblioteca OneWire. Os dados de temperatura (em Celsius) são enviados para um Raspberry Pi a cada 1 segundo em I2C. Os dois valores de temperatura são delimitados por "|".
  temperatureData =padRight (String (poolSensor.getTempCByIndex (0)) + "|" + String (outsideSensor.getTempCByIndex (0)), I2C_BUFFER_LEN);  

Os sensores de temperatura à prova d'água DS18B20 vêm pré-instalados da seguinte forma:
  • Vermelho conecta a 3v / 5v
  • Azul / preto conecta-se ao solo
  • Amarelo / branco são dados

Usei um pouco de fio de campainha de calibre 20 barato (fio da campainha da porta) para estender o alcance do DS18B20 que está lendo a temperatura da água. Este DS18B20 está submerso na piscina.

O segundo sensor DS18B20 que lê a temperatura do ar é colado na parte externa do recipiente de armazenamento de plástico.





Relé


O Raspberry Pi controla uma barra de energia do IoT Power Relay à qual a bomba e o sistema de água salgada estão conectados usando 110v. Isso é feito usando o pino 3v no Pi. Alternar o pino de 3 V ativa / desativa um par de tomadas de 110 V no IoT Power Relay (o par de tomadas está desligado por padrão). Consulte o diagrama mais tarde para um esquema.

Não houve necessidade de conectar um relé ao Aquecedor, pois ele possui um sensor de fluxo embutido e irá parar / iniciar o aquecimento com base na ausência ou presença de fluxo de água. Além disso, não consegui encontrar prontamente um relé para controlar um circuito 220v / 60amp necessário para o aquecedor usando 3v ou 5v.

No futuro, estarei conectando sensores para medir o uso elétrico dos circuitos 110v e 220v. Se alguém puder recomendar alguns, eu ficaria muito grato.





Raspberry Pi


O Raspberry Pi executa o Windows IoT Core Build 10.0.10586.0 e executa o seguinte:
  • Executa o IoTPoolRaspiBackgroundApp aplicativo de fundo;
  • Atua como um gateway de campo IoT (opaco);
  • Fornece energia para o Arduino Uno via USB (5v);
  • Recebe a temperatura da piscina e do ar (em C) do Arduino Uno acima de I2C;
  • Controla o relé de energia IoT usando um pino 3v; e
  • Envia o nome da piscina, a temperatura da piscina, a temperatura do ar, o status ativado / desativado do IoT Power Relay e um carimbo de data / hora (em UTC) a cada 1 minuto para o Hub IoT do Azure.

O IoTPoolRaspiBackgroundApp é um aplicativo C # headless, desenvolvido usando o aplicativo de segundo plano (IoT) modelo de projeto no Visual Studio 2015, atualização 3.

O IoTPoolRaspiBackgroundApp envia a seguinte carga útil JSON para o Hub IoT do Azure a cada 1 minuto usando AMQP (isso pode ser alterado no código-fonte para HTTPS ou MQTT).
  {"PoolName":"iotpool", "PoolWaterTempC":30, "OutsideAirTempC":27, "IsPoolPowerOn":false, "SampleDateTime":"2016-07-05T23:35:58.0882185Z"}  

O Raspberry Pi está registrado como um dispositivo no Hub IoT do Azure. A maneira mais fácil de registrar um dispositivo no Hub IoT do Azure é usando o Device Explorer. Esta ferramenta também é uma ótima maneira de obter a string de conexão do dispositivo, monitorar mensagens D2C (dispositivo para nuvem) e testar o envio de mensagens C2D (nuvem para dispositivo).

Edite o seguinte em StartupTask.cs para conectar IoTPoolRaspiBackgroundApp ao seu Hub IoT:
  string estática iotPoolConnString ="HostName = .azure-devices.net; DeviceId =iotpool; SharedAccessKey ="; string estática deviceName ="iotpool";  





Arduino Uno


O Arduino Uno R3 é conectado a dois sensores de temperatura DS18B20 usando a Biblioteca de controles Dallas e a Biblioteca OneWire. Ele é alimentado pelo Raspberry Pi via USB (5v) e envia o par de leituras de temperatura para o Raspberry Pi via I2C usando os pinos SDA e SLC. Consulte o diagrama de Fritzing para um esquema.

Use o código Two-DS18B20-I2C.ino para executar o Arduino.





Azure


Todos os componentes do Azure foram criados na mesma região do Azure (oeste dos EUA) para minimizar os custos associados ao tráfego de saída.





Hub IoT do Azure


A edição gratuita do Azure IoT Hub foi usada neste projeto. É limitado a 8.000 mensagens / dia a 500 bytes cada. O IoTPoolRaspiBackgroundApp envia mensagens D2C a 1 por minuto, ou 1.440 / dia, a 158 bytes cada. Isso deixa um amplo espaço para qualquer mensagem C2D.

Você deve primeiro registrar um dispositivo com o Hub IoT do Azure. O método mais fácil é usar o Device Explorer. Depois de registrado, você pode obter a string de conexão do dispositivo usando o Device Explorer.





Análise de streaming do Azure


O trabalho do Azure Streaming Analytics (ASA) conecta a entrada do Hub IoT à saída do Banco de Dados SQL do Azure usando a seguinte consulta ASA simples.
  SELECT PoolName, PoolWaterTempC, OutsideAirTempC, IsPoolPowerOn, SampleDateTimeINTO sqlFROM iothub  

Essa consulta grava cada mensagem JSON do Dispositivo na Nuvem (D2C) (1 por minuto) em uma tabela chamada Pools em um Banco de Dados SQL do Azure.

Futuras melhorias para esta consulta podem incluir algumas funções de agregação para fins de alerta (por exemplo, Average PoolWaterTempC> 35 indica que a piscina está ficando muito quente).





Banco de dados SQL do Azure


Para minimizar o custo e porque os requisitos de desempenho do banco de dados eram mínimos, o banco de dados é um padrão S0 (10 DTUs).

Um único banco de dados com uma única tabela foi criado para armazenar todas as mensagens D2C.

Esquema:
  CRIAR TABELA [dbo]. [Pools] ([Id] INT IDENTITY (1, 1) NÃO NULO, [PoolName] NVARCHAR (MAX) NULO, [PoolWaterTempC] FLOAT (53) NÃO NULO, [OutsideAirTempC ] FLOAT (53) NÃO NULO, [IsPoolPowerOn] INT NÃO NULO, [SampleDateTime] DATETIME NÃO NULO, CONSTRAINT [PK_dbo.Pools] PRIMARY KEY CLUSTERED ([Id] ASC));  





Aplicativo da API do Azure


A API é uma API RESTful construída usando ASP.NET Web API.

Os clientes API devem ser autenticados usando uma chave API especificada no cabeçalho HTTP.
  api-key:{sua chave de API}  

A chave API é definida em IoTPoolAPI \ Controllers \ PoolControllers.cs . O Mobile App e o Web App devem usar esta chave de API para se comunicar com a API.

A API REST oferece suporte aos seguintes métodos:

As melhorias futuras na API podem incluir colocá-la atrás do Gerenciamento de API do Azure e adicionar outras opções de autenticação à API, como o Azure Active Directory.





Aplicativo da Web do Azure


O IoTPoolWebApp contém um aplicativo de formulários da web ASP.NET para interagir com a API.

Também existe uma versão do aplicativo da web amigável para dispositivos móveis.

Edite o default.aspx.cs e altere o seguinte:
  string estática privada apiKey =""; ... HttpRequestMessage requestMessage =.... "http://  .azurewebsites.net / api / pool / poweroff"); ... HttpRequestMessage requestMessage =.... "http://  .azurewebsites.net / api / pool / poweron"); ... HttpRequestMessage requestMessage =.... "http://  .azurewebsites.net / api / pool / getlatest ");  

O aplicativo da web é integrado ao Azure Active Directory (AAD) para autenticação. O aplicativo da web requer que todos os usuários se autentiquem usando AAD.

Primeiro, você deve registrar seu aplicativo da web com o locatário do AAD (por exemplo, tenant_name.onmicrosoft.com). Você pode fazer isso por meio do Portal do Azure ou do Visual Studio. Depois de registrado, copie a ID do cliente do Portal do Azure.

Em seguida, altere o domínio AAD no aplicativo da web modificando o no web.config.
       





Aplicativo móvel


O aplicativo móvel foi escrito usando o Xamarin Forms. Eu apenas compilei para rodar no Windows Phone e Windows 10, mas deveria compilar no iOS e Android.

Edite Core.cs e altere o seguinte:
  string queryString ="http://  azurewebsites.net/api/pool/getlatest  

Edite DataService.cs e altere o seguinte:
  string estática privada apiKey ="";  

Edite PoolPage.xaml.cs e altere o seguinte:
  string estática privada apiKey =""; ... HttpRequestMessage requestMessage =.... "http://  .azurewebsites.net / api / pool / poweroff"); ... HttpRequestMessage requestMessage =.... "http://  .azurewebsites.net / api / pool / poweron");  





Power BI


O Power BI (edição gratuita) foi usado para criar e publicar um painel em tempo real mostrando dados do IoT Pool.

O processo envolveu o download do Power BI Desktop, a conexão com o Azure SQL DB (usando DirectQuery), a criação de alguns relatórios com recursos visuais e a publicação do .pbix no PowerBI.com. Em seguida, fixei o relatório em um painel.

No futuro, posso usar o Power BI incorporado para incorporar diretamente o painel ao aplicativo da web.

Por enquanto, posso visualizar o painel por meio do Powerbi.com ou do aplicativo gratuito Power BI para dispositivos móveis.





Referências


Aqui está uma lista de recursos que usei na construção desta solução:
  • https://developer.microsoft.com/en-us/windows/iot/win10/samples/blinky
  • https://create.arduino.cc/projecthub/mmackes/pool-controller-8dfa69?ref=tag&ref_id=relays&offset=0
  • https://azure.microsoft.com/en-us/documentation/articles/iot-hub-csharp-csharp-getstarted/
  • https://azure.microsoft.com/en-us/documentation/articles/iot-hub-csharp-csharp-c2d/
  • https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-rest-service-aspnet-api-sql-database/
  • https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-xamarin-forms-get-started/
  • https://msdn.microsoft.com/en-us/library/hh975357.aspx
  • https://www.arduino.cc/en/Guide/Windows
  • http://playground.arduino.cc/Learning/OneWire
  • http://milesburton.com/Dallas_Temperature_Control_Library
  • https://learn.sparkfun.com/tutorials/i2c

Agradecimentos especiais a Miles Burton pela Biblioteca de Controles de Dallas e Mike Mackes pelo código de amostra do Arduino / I2C / DS18B20 e inspiração geral para este projeto.

Código

  • Formato de carga útil de mensagem JSON para mensagens de dispositivo para nuvem (D2C)
  • Esquema de tabela "Pools" do banco de dados SQL
Formato de carga útil de mensagem JSON para mensagens de dispositivo para nuvem (D2C) JSON
Nota:"IsPoolPowerOn" - 0 indica desligamento; 1 indica energia em
 {"PoolName":"IoTPool", "PoolWaterTempC":30, "OutsideAirTempC":27, "IsPoolPowerOn":false, "SampleDateTime":"2016-07-05T23:35:58.0882185Z" } 
Esquema de tabela "Pools" do banco de dados SQL SQL
 CRIAR TABELA [dbo]. [Pools] ([Id] INT IDENTITY (1, 1) NOT NULL, [PoolName] NVARCHAR (MAX) NULL, [PoolWaterTempC] FLOAT (53) NÃO NULL, [OutsideAirTempC] FLOAT ( 53) NOT NULL, [IsPoolPowerOn] INT NOT NULL, [SampleDateTime] DATETIME NOT NULL, CONSTRAINT [PK_dbo.Pools] PRIMARY KEY CLUSTERED ([Id] ASC)); 
Repo de hub Git Pool IoT
Todo o código-fontehttps://github.com/khilscher/iotpool

Esquemas

Raspberry Pi para Arduino via I2C conectando 2 sensores DS18B20 RaspiArduinoTwoDS18B20.fzz Diagrama arquitetônico geral

Processo de manufatura

  1. Piscina
  2. A placa Arduino visa IoT industrial
  3. Os kits Dev suportam Azure RTOS
  4. IoT na nuvem:Azure vs AWS
  5. Registrador de dados GPS, análise espacial e Hub IoT do Azure.
  6. Como salvar vidas aquáticas e combater a poluição da água com IoT e IA
  7. Monitor de freqüência cardíaca usando IoT
  8. Usando IoT para controlar remotamente um braço robótico
  9. IOT - Jar inteligente usando ESP8266, Arduino e sensor ultrassônico
  10. Rastreador solar baseado na Internet das coisas (IoT)