Monitoramento de Piscina em Tempo Real com Arduino MKR1000 e Samsung ARTIK Cloud
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino MKR1000 | 1 |
| Fios jumpers (genéricos) | 1 |
| Medidor de pH DFRobot | 1 |
| Resistor 4,75k ohm | 1 |
| Sonda de temperatura | 1 |
Aplicativos e Serviços Online
- Samsung ARTIK Cloud for IoT
- Arduino IDE
Sobre o Projeto
I. Objetivo
O objetivo principal deste projeto é usar a Samsung ARTIK Cloud para monitorar os níveis de pH e temperatura de piscinas.
II. Configuração da ARTIK Cloud
Passo 1. Criando seu novo dispositivo
Cadastre-se na ARTIK Cloud. Acesse o site do desenvolvedor e crie um novo "device type" (tipo de dispositivo).
Insira o nome de exibição e nome único desejados.
Crie novo Manifesto
Insira o nome do campo e outras descrições
Clique em Salvar e depois navegue até a aba "Activate Manifest"
Clique no botão ACTIVE MANIFEST para finalizar e você será redirecionado aqui
Criação do tipo de dispositivo concluída!
Agora vamos criar sua aplicação que usará esse dispositivo.
Passo 2. Criando sua aplicação
Navegue até ARTIK Cloud Applications.
Clique em "new application"
Insira o nome desejado da aplicação e a URL de redirecionamento de autenticação.
Note que a URL de redirecionamento de autenticação é obrigatória. Ela é usada para autenticar os usuários desta aplicação, portanto redirecionará para esta URL se houver necessidade de login.
Usamos https://localhost/index/ como exemplo.
Agora defina a permissão da sua aplicação para leitura e escrita, navegue até seu dispositivo e salve.
Parabéns, você agora tem sua aplicação!
Agora vamos conectar essa aplicação.
Passo 3. Conectar seu dispositivo
Navegue até "my devices" e clique em "connect another device".
Clique no seu novo tipo de dispositivo criado anteriormente e depois em "connect device".
Clique nas configurações do seu dispositivo conectado.
Anote estas informações, pois você precisará delas no programa.
Agora navegue até seu dispositivo conectado
Configuração da ARTIK Cloud concluída. Uma vez que seu hardware estiver funcionando, o gráfico terá dados.
III. Configuração do Hardware e Sensores
Passo 1. Conectar os sensores de Temperatura e pH ao MKR1000
Aqui está o diagrama:
- Temp GND → MKR1000 GND
- Temp OUT → MKR1000 Pino Digital 1
- Temp VCC → MKR1000 5V
- Conectar um resistor de 4,7K entre Temp VCC e Temp OUT
- pH GND → MKR1000 GND
- pH OUT → MKR1000 Pino Analógico 1
- pH VCC → MKR1000 5V
Aqui está minha fiação de exemplo
Se você notou, adicionamos um Jack de Áudio para facilitar a desconexão do sensor de temperatura. Mas isso é opcional.
Aqui está a conexão do sensor de temperatura ao jack.
Passo 2. Configurar software necessário
Vá na Arduino IDE e adicione a placa MKR1000.
Pesquise "mkr1000" e clique em instalar
Adicione as bibliotecas necessárias
Pesquise e instale as bibliotecas:
- ArduinoJson - usaremos para enviar dados JSON para a ARTIK Cloud
- ArduinoHttpClient - host para conectar à API
- OneWire - necessário para ler entrada digital do sensor de temperatura
- DallasTemperature - biblioteca necessária para sensor de temperatura Dallas
Configuração do software necessária concluída!
Passo 3. Carregar o programa
Agora conecte o MKR1000 ao seu PC/Notebook.
Baixe o software no GitHub aqui
Altere as seguintes informações:
Então faça upload do Código do Software para o MKR1000 e comece a monitorar.
Nota: Seu WiFi deve ter conexão com a internet.
IV. Teste de Campo
Testamos o hardware do sensor em Piscinas Privadas, Públicas e Escolares. A coleta de dados dessas piscinas nos permitiu analisar a capacidade do hardware.
Você pode colocar o MKR1000 e o sensor em uma caixa e colocá-la na sua piscina, longe da contaminação da água. Fazendo isso, você pode monitorar a qualidade da sua água e normalizá-la adicionando os produtos químicos desejados.
Em breve faremos upload do tutorial sobre como colocar todos os circuitos dentro desta caixa e as filmagens reais dos testes.
V. Resultados
Espero que este tutorial ajude as pessoas a construir seu próprio dispositivo DIY de monitoramento de qualidade da água de piscina. Que haja uma maior conscientização sobre a degradação contínua da qualidade da água das piscinas, pois as pessoas tendem a focar mais nas comodidades oferecidas em vez de verificar o quão seguras elas são. Eles também pretendem contribuir para a comunidade ao fornecer um meio de tornar o teste de qualidade da água mais eficiente e eficaz sem o sacrifício desnecessário de recursos.
Boa construção! :)
Código
Código do Arduino MKR1000 (C/C++)
Carregue este código no seu Arduino MKR1000
Visite no GitHub > https://github.com/imjeffparedes/iot-water-quality-artik
/******************** Aqui está meu Código para Monitoramento de Dispositivo de Qualidade da Água publicado em https://www.hackster.io/animo/water-quality-moniroting-840fea ********************/
#include
#include
#include
#include
#include
#include
#include
/**Inicialização do Sensor de Temperatura**/
#define ONE_WIRE_BUS 1 // Fio de dados conectado à porta digital 1 do Arduino
OneWire oneWire(ONE_WIRE_BUS); // Configura uma instância oneWire para comunicar com qualquer dispositivo OneWire
DallasTemperature sensors(&oneWire); // Passa nossa referência oneWire para Dallas Temperature
/** Inicialização REST da ARTIK Cloud **/
char server[] = "api.artik.cloud"; // Host da API Samsung ARTIK Cloud
int port = 443; // 443 para HTTPS
char buf[200]; // dados do corpo para armazenar o JSON a ser enviado para a ARTIK cloud
String deviceID = "artik cloud device id"; // coloque seu device id aqui criado no tutorial
String deviceToken = "artik cloud device token"; // coloque seu device token aqui criado no tutorial
/**Inicialização do medidor de pH**/
#define SensorPin A1 // Saída analógica do medidor de pH para Entrada Analógica 1 do Arduino
#define Offset 0.00 // compensação de desvio
#define samplingInterval 20
#define ArrayLenth 40 // vezes de coleta
int pHArray[ArrayLenth]; // Armazena o valor médio do feedback do sensor
int pHArrayIndex=0;
int status = -1;
int millis_start;
/**Configuração WiFi**/
#define WIFI_AP "your wifi ssid"
#define WIFI_PWD "wifi password"
WiFiSSLClient wifi;
HttpClient client = HttpClient(wifi, server, port);
void setup(void) {
millis_start = millis();
Serial.begin(9600);
startWifi(); // inicia conexão com wifi
}
void loop(void) {
/*Adquirindo temperatura atual*/
float celsius = 0;
sensors.requestTemperatures(); // Envia comando para obter temperaturas
celsius = sensors.getTempCByIndex(0);
sensors.requestTemperatures(); // Envia comando para obter temperaturas
celsius = sensors.getTempCByIndex(0);
/*Adquirindo valor atual de pH*/
static unsigned long samplingTime = millis();
static unsigned long printTime = millis();
static float pHValue,voltage;
if(millis()-samplingTime > samplingInterval) {
pHArray[pHArrayIndex++]=analogRead(SensorPin);
if(pHArrayIndex==ArrayLenth)pHArrayIndex=0;
voltage = avergearray(pHArray, ArrayLenth)*5.0/1024;
pHValue = 3.5*voltage+Offset;
samplingTime=millis();
}
Serial.println("===========================================");
Serial.println("Enviaremos estes dados json");
//imprime em formato json
Serial.println("data: { ");
Serial.print("ph: ");
Serial.print(pHValue);
Serial.print(" , temp: ");
Serial.print(celsius);
Serial.println("} ");
Serial.println("");
Serial.println("Iniciando envio de dados");
String contentType = "application/json";
String AuthorizationData = "Bearer " + deviceToken; //Device Token
int len = loadBuffer(celsius,pHValue);
Serial.println("Enviando temp: "+String(celsius) +" e ph: "+String(pHValue) );
Serial.println("Enviando POST para ARTIK Cloud API");
client.beginRequest();
client.post("/v1.1/messages"); //, contentType, buf
client.sendHeader("Authorization", AuthorizationData);
client.sendHeader("Content-Type", "application/json");
client.sendHeader("Content-Length", len);
client.endRequest();
client.print(buf);
// imprime resposta da api
int statusCode = client.responseStatusCode();
String response = client.responseBody();
Serial.println("");
Serial.print("Status code: ");
Serial.println(statusCode);
Serial.print("Response: ");
Serial.println(response);
delay(1000); // atraso de atualização
}
/*Inicialização da Conexão WiFi*/
void startWifi(){
Serial.println("Conectando MKR1000 à rede...");
// WiFi.begin(); // tenta conectar à rede Wifi:
while ( status != WL_CONNECTED ) {
Serial.print("Tentando conectar ao SSID WPA: ");
Serial.println(WIFI_AP);
WiFi.begin(WIFI_AP, WIFI_PWD);
// espera 10 segundos para conexão:
delay(10000);
status = WiFi.status();
}
}
/*Fonte DfRobot pH Meter*/
double avergearray(int* arr, int number){
int i;
int max,min;
double avg;
long amount=0;
if(number<=0){
Serial.println("Error number for the array to avraging!/n");
return 0;
}
if(number<5){
//menos que 5, calculado diretamente estatísticas
for(i=0;imax){
amount+=max; //arr>max
max=arr[i];
}else{
amount+=arr[i]; //min<=arr<=max
}
}
}
avg = (double)amount/(number-2);
}
return avg;
}
/*Buffer para enviar via REST*/
int loadBuffer(float temp, float ph ) {
StaticJsonBuffer<200> jsonBuffer; // reserva espaço na memória
JsonObject& root = jsonBuffer.createObject(); // cria objetos raiz
root["sdid"] = deviceID;
root["type"] = "message";
JsonObject& dataPair = root.createNestedObject("data"); // cria objetos aninhados
dataPair["temp"] = temp;
dataPair["ph"] = ph;
root.printTo(buf, sizeof(buf)); // JSON-print para buffer
return (root.measureLength()); // também retorna comprimento
}
Esquemáticos
Conexão em protoboard do MKR1000 e sensores
Processo de manufatura
- Navegando em SaaS e nuvem: por que a gestão meticulosa de dados importa
- Expandindo horizontes da nuvem: novas zonas, contêineres e estratégias multicloud
- Dominando o Monitoramento de Aplicações na Nuvem: Insights para Líderes de TI
- Por Que o Cloud Linux Aumenta Segurança, Estabilidade e Desempenho em Hospedagem Compartilhada
- Construa um Sensor de Temperatura Remoto com Raspberry Pi e Python – Guia Passo a Passo
- Home Energy Centre: Monitoramento Solar PV, Painéis Térmicos e Temperaturas de Ambientes com Raspberry Pi e Moteino
- Controle de Temperatura Caseiro para Homebrew: Monitore e Regule com Arduino
- Monitoramento Remoto do Tempo com Raspberry Pi 3 e PubNub
- Sistema Inteligente de Monitoramento de Qualidade do Ar Interno e Resíduos
- Como Soluções de Monitoramento de Gás Aumentam a Segurança em Ambientes Industriais e Automotivos