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

UnifiedWater v1

Componentes e suprimentos

Arduino MKR GSM 1400
× 1
Anel Adafruit NeoPixel:WS2812 5050 RGB LED
× 1
Temperatura e umidade GY21
× 1
Sensor de turbidez, saída de fototransistor
× 1
Sensor de temperatura digital Adafruit Waterproof DS18B20
× 1
DFRobot Gravity:Kit de medidor / sensor de pH com ponta de lança analógica
× 1
SparkFun Botão de pressão 12 mm
× 1
Fios de jumpers (genérico)
× 1
Resistor 220 ohm
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)

Aplicativos e serviços online

Arduino Web Editor
Plataforma de conectividade SORACOM Air IoT
Colheita SORACOM
Lagoa SORACOM

Sobre este projeto





Visão geral


Rios. Essencial para nossa sobrevivência, comércio e assim por diante. Grandes esforços foram feitos na última década para reduzir a poluição dos corpos d'água do mundo. Os rios são a fonte da poluição, pois as pessoas não vão ao mar para despejar seu lixo. Eles jogam nos rios.

Esses rios então se derramam no mar, o oceano e então a escova de dentes que uma vez foi jogada em um rio atravessa o mundo e pousa do outro lado dele.

Em um mundo que tenta combater a poluição, os dados são cruciais. Deve ser fácil para empresas e negócios colaborarem em um projeto global para reduzir a poluição da água. É aqui que entra a UnifiedWater.

Um dispositivo barato e escalável que pode facilmente coletar e analisar esses dados, tão necessários para saber o quão poluído está um rio. A WaterAid vem em 2 modos, um que caberia em empresas e outro para indivíduos.

Vários dispositivos podem funcionar juntos, colocados em diferentes pontos de um riacho ou em diferentes corpos d'água. Esses dispositivos coletam dados em um intervalo de tempo enviando-os ao mesmo banco de dados. Isso permite que a empresa verifique o status do rio ou lago que está sendo monitorado com o clique de um botão.

Uma versão portátil do dispositivo também está disponível. Nesta versão, o indivíduo pode carregar o aparelho com ele e, quando deseja colher uma amostra de água, pressiona um botão do aparelho e o coloca na água por 30 segundos. Os dados estarão então disponíveis em um painel online.

Ao coletar a temperatura, o pH e a umidade da água, bem como a temperatura e a umidade atmosféricas, o WaterAid vem com todos os sensores de que você precisa para monitorar a poluição do rio.

Vídeo

Imagens





Funcionalidade


A WaterAid permite que o usuário, uma empresa ou um indivíduo colete dados com segurança e precisão e visualize todos esses dados em um só lugar, graças à nuvem da Soracom. O projeto é composto por um front end e um backend.

Frente Fim

O front end do projeto é o dispositivo físico usado para coletar os dados e enviá-los para a nuvem. O dispositivo pode ser configurado no modo 1 ou 2. No modo 1, o dispositivo registra um conjunto de dados com o toque de um botão, útil para o monitoramento ocasional de um corpo d'água. O Modo 2 configura o dispositivo para fazer leituras em um intervalo de tempo definido e enviar esses dados para a nuvem.

Um MKR GSM é usado para o front-end, pois é fácil de usar e confiável. Ele também pode acessar a Soracom por meio de GSM. Abaixo estão as etapas executadas pelo dispositivo ao coletar dados.

Bateria

O dispositivo pode ser alimentado de várias maneiras. Ele pode ser alimentado por uma bateria LiPo através da porta fornecida no dispositivo, por um banco de energia ou conectando uma bateria através da porta VIN no dispositivo.

A vida útil do dispositivo depende muito da energia da bateria. O dispositivo entra no modo de espera entre as leituras para conservar o máximo de energia possível.

LED Anel

O dispositivo também está equipado com um anel de LED. Isso fornece ao usuário um feedback sobre o que o dispositivo está fazendo no momento. Existem 3 modos em que o anel pode estar.
  • Multicor indica que o dispositivo está configurando ou processando dados
  • Vermelho intermitente um aviso, geralmente significando que o dispositivo deve ser colocado na água, embora também possa indicar um erro
  • Azul progressivo ou verde indica que o dispositivo está atualmente colhendo uma amostra e deve ser colocado na água.

Coletando uma amostra

Todos os sensores do dispositivo devem ser colocados na água quando o dispositivo estiver colhendo uma amostra. Um atraso de 6 segundos é colocado antes que a amostra seja coletada para aquecer os sensores. Para melhores resultados, os sensores devem ser submersos durante o aquecimento.

Análise de dados

Os dados devem ser enviados à Soracom na forma de uma string JSON. Isso dá um valor a todas as chaves usadas. Os dados serão fáceis de interpretar pelo back-end. Abaixo está um exemplo de uma carga que seria enviada.
  {
"Latitude":53.3474617,
"Longitude":- 6,2514529,
"waterpH":7,30,
"turvação da água":94,
"waterTemp":12,10,
"atmoTemp":14,50,
"atmoHum":82,
"deviceID":1,
"deviceName":"device1",
"época":1559392636,
"modo":2
}

O Back-end

O back-end do projeto se refere à Soracom. Os dados são coletados e visualizados no back-end dos painéis. Esses painéis são criados usando Soracom Lagoon.

O Painel

O painel resume todos os dados coletados do dispositivo. Ele representa os locais de onde os dados foram coletados em um mapa, a cor varia de acordo com o quão poluída a água está. Os dados são então representados em gráficos de linha abaixo deles e, em seguida, são totalmente somados em uma tabela.

O usuário também receberá alertas por e-mail caso o valor do pH ou turbidez da água estejam anormais. Abaixo estão algumas imagens do painel.

Escalabilidade

O dispositivo pode ser facilmente escalonável e todos os dados podem ser coletados e ilustrados no mesmo painel. Vários dispositivos podem transmitir dados para o Soracom e ter os dados visualizados no painel.

O preço do dispositivo e a extrema facilidade de construção e programação tornam mais fácil o uso de uma frota de dispositivos. Esses dispositivos também podem ser facilmente registrados na Soracom usando ferramentas como Soracom Krypton.

Cada empresa ou indivíduo terá seu painel personalizado onde serão visualizados os dados coletados por seus dispositivos. Esperançosamente, as pessoas poderão colaborar no mesmo painel e compartilhar seus dados umas com as outras em um futuro próximo.





Benefícios


O indivíduo ou empresa que utiliza este produto terá benefícios em:
  • Custos de operação reduzidos, pois o dispositivo é muito autossuficiente.
  • Facilmente escalonável, o dispositivo pode funcionar facilmente sozinho ou em uma frota de dezenas de outras pessoas.
  • Coleta de dados rápida, permitindo que os dados sejam enviados para a nuvem e visualizados em tempo real.
  • Fácil visualização, os dados podem ser visualizados em qualquer lugar e a qualquer momento usando o painel online.





Construindo o projeto


Etapa 1:Aparelho necessário

Este projeto requer muitos sensores que irão monitorar uma série de parâmetros relacionados à água e à atmosfera inseridos. Abaixo está uma lista de todos os materiais necessários.
  • 1, Arduino MKR GSM
  • 1, 16 LEDs RGB LED anel
  • 1, módulo de temperatura e umidade GY-21
  • 1, sensor de turbidez
  • 1, sensor de temperatura à prova d'água
  • 1, sensor de pH e módulo
  • 1, botão de pressão
  • 1, resistor (220Ω)
  • Fios de jumpers

Etapa 2:Conectando o circuito

Os componentes devem ser soldados juntos. Para facilitar a compreensão dos esquemas, um breadboard foi usado. os esquemas estão abaixo.

Preparando o MKR GSM

Depois que os sensores forem soldados ao dispositivo, o cartão SIM, a antena GSM e a bateria devem ser conectados ao dispositivo. Estou alimentando a placa com 2 baterias AA através da porta VIN. As etapas estão abaixo.

Etapa 3:Reconhecendo o Código

Existem 4 seções principais para o código do projeto.
  • Colete dados do sensor
  • Obtenha a hora e a data
  • Dados do processo
  • Enviar dados

Todas essas seções são descritas e detalhadas a seguir.

Colete dados do sensor
  Serial.println ("Obtendo Amostra"); 
Serial.println ("________________________________________");
Serial.println ("Obtendo Amostra");
Serial.println ("OK - Aquecendo");
atraso (6000); // atraso para calibração do sensor
colourLED (50);
Serial.println ("OK - Coletando Amostra");
Serial.print ("");
para (int i =0; i <16; i ++)
{
if (modo ==1)
{
strip.setPixelColor (i, strip.Color (0, 255, 0 ));
strip.show ();
}
else
{
strip.setPixelColor (i, strip.Color (0, 0, 255));
strip.show ();
}
// vai tirar várias amostras de água - sensores não tão precisos
waterTurbidity + =getWaterTurbidity ();
waterPh + =getWaterPh ();
if (i> 14)
{
// pegar uma única amostra para sensores de alta precisão
waterTemperature =getWaterTemp ();
atmoTemperature =getAtmoTemp ();
atmoHumidity =getAtmoHumidity ();
}
Serial.print (".");
atraso (500);
}
Serial .println ("");
Serial.println ("Sucesso - Amostras obtidas");
for (int i =0; i <=16; i ++)
{
strip.setPixelColor (i, strip.Color (0, 0, 0));
strip.show ();
delay (30);
}
Serial.println ("________________________________________");
Serial.println ("");
atraso (500);

A seção do código acima começa esperando 6 segundos para que os sensores sejam calibrados na água. O dispositivo então faz um loop por 16 vezes, um novo LED acende o anel a cada loop.

Os dados dos sensores com valores flutuantes são coletados 16 vezes e, em seguida, a média é encontrada. Os sensores de alta precisão são lidos no último loop.

Obter data e hora
  void getCredentials () 
{
Serial.println ("[1/2] Hora");
Serial.println ("OK - Obtendo hora do RTC");
currentEpoch =processTime ();
colourLED (50);
Serial.println ("[2/2] Geolocalização");
Serial.println ("OK - Obtendo Geolocalização de GPRS ");
while (! GetLocation ());
Serial.print (" Sucesso - Geolocalização é "); Serial.print (latitude, 7); Serial.print (","); Serial.println (longitude, 7);
colourLED (50);
}

bool getLocation ()
{
if (location.available ( ))
{
latitude =location.latitude ();
longitude =location.longitude ();
atraso (500);
retornar verdadeiro;
}
else
{
atraso (500);
retornar falso;
}
}

O primeiro loop lida com as credenciais. A hora é extraída do RTC integrado, pois foi sincronizada com a rede GSM na configuração. A geolocalização é extraída do GPRS.

Processar Dados
  void processData () 
{
Serial.println ("OK - Como obter a média de pH e turbidez da água");
waterPh =(waterPh / 16);
waterTurbidity =(waterTurbidity / 16);
Serial.println ("OK - Dumping Data to Serial");
Serial.println ("");
Serial.print ("[ Água] pH "); Serial.println (waterPh);
Serial.print ("[Água] Turbidez"); Serial.println (turvação da água);
Serial.print ("Temperatura [da água]"); Serial.println (waterTemperature);
Serial.print ("[Atmo] Temperature"); Serial.println (atmoTemperature);
Serial.print ("[Atmo] Umidade"); Serial.println (atmoHumidity);
Serial.println ("");
Serial.println ("Success - Data Processed");
colourLED (50);
}

String makeLine ()
{
Serial.println ("OK - Fazendo String");
String dataReturned; dataReturned + ="{"; dataReturned + ="\ n";
dataReturned + ="\" Latitude \ ":" + String (latitude, 7); dataReturned + =", \ n";
dataReturned + ="\" Longitude \ ":" + String (longitude, 7); dataReturned + =", \ n";
dataReturned + ="\" waterpH \ ":" + String (waterPh); dataReturned + =", \ n";
dataReturned + ="\" waterTurbidity \ ":" + String (waterTurbidity); dataReturned + =", \ n";
dataReturned + ="\" waterTemp \ ":" + String (waterTemperature); dataReturned + =", \ n";
dataReturned + ="\" atmoTemp \ ":" + String (atmoTemperature); dataReturned + =", \ n";
dataReturned + ="\" atmoHum \ ":" + String (atmoHumidity); dataReturned + =", \ n";
dataReturned + ="\" deviceID \ ":" + String (deviceID); dataReturned + =", \ n";
dataReturned + ="\" deviceName \ ":"; dataReturned + =String ("\" "); dataReturned + =String (deviceName); dataReturned + =String (" \ ""); dataReturned + =", \ n";
dataReturned + ="\" epoch \ ":" + String (currentEpoch); dataReturned + =", \ n";
dataReturned + ="\" modo \ ":" + String (modo); dataReturned + ="\ n";
dataReturned + ="}";
Serial.println ("OK - os dados estão abaixo");
Serial.println ("");
Serial.println (dataReturned);
Serial.println ("");
Serial.println ("Sucesso - String está pronta");
colourLED (50);
return dataReturned;
}

processData () obtém a média dos dados coletados dos sensores que tendem a flutuar e, em seguida, despeja todos os dados no Monitor Serial.

makeLine () compila todos os dados na string JSON que é enviada à Soracom. Todos os valores são analisados ​​em um buffer JSON pronto para serem enviados ao back-end.

Enviar dados
  void parseData (String dataToSend) 
{
Serial.println ("OK - Configurando Conexão");
if (client.connect (url, 80))
{
Serial.println ("OK - Conexão estabelecida, análise de dados");
client.println ("POST / HTTP / 1.1");
client.println ("Host :harvest.soracom.io ");
client.println (" User-Agent:Arduino / 1.0 ");
client.println (" Connection:close ");
client.print ("Content-Length:");
client.println (dataToSend.length ());
client.println ("");
client.println (dataToSend);
Serial.println ("OK - Data Parsed");
}
Serial.println ("OK - Obtendo resposta");
Serial.println ("");
while (1)
{
if (client.available ())
{
char c =client.read ();
Serial.print (c);
}
if (! client.connected ())
{
break;
}
}
Serial.println ("Sucesso - Os dados são analisados ​​");
}

Por fim, os dados são enviados para a Soracom. O dispositivo estabeleceu uma conexão com o servidor e, em seguida, prepara as credenciais. Os dados são então enviados ao servidor e a resposta é impressa no Monitor Serial.

O dispositivo então entra em hibernação até que um gatilho o acorde, repetindo as etapas novamente.

Etapa 4:Configuração das variáveis ​​

Existem certas variáveis ​​que devem ser editadas antes que o projeto possa ser usado. Eles estão listados abaixo. As instruções sobre como configurá-los também estão abaixo.
  • modo o modo do dispositivo dita se ele tira amostras periodicamente ou se tira amostras com a ação de um botão. Se esta variável for definida como 1, o dispositivo precisará ser acionado por meio de um botão. Se o modo for definido como 2, o dispositivo fará amostras periodicamente.
  • deviceID e deviceName essas são variáveis ​​personalizadas que são usadas para identificar o dispositivo se um conjunto de dispositivos estiver sendo usado. Cada dispositivo usado deve receber um ID e nome exclusivos para que possam ser facilmente identificados.
  • sleepTime armazena a quantidade de tempo que o dispositivo dorme entre as leituras, é definido como 5 segundos no código que é apropriado para teste, mas deve ser alterado ao usá-lo em campo. Uma amostra pode ser coletada em intervalos de 15 minutos.
  • proDebug é usado durante a depuração, é definido como falso no código, mas se o monitor serial for necessário durante a depuração, ele deve ser definido como verdadeiro. Observe que o dispositivo ainda imprimirá para o serial, mesmo se a depuração estiver desativada. Se a depuração estiver ativada, o dispositivo não será executado a menos que o monitor serial esteja ativado.

Etapa 5:Upload do código

Antes de configurar o back-end, os dados devem ser enviados a ele.

Para fazer isso, conecte seu MKR GSM ao computador e carregue o código para o dispositivo, certifique-se de que o modo do dispositivo está definido como 1 para esta configuração. Após o upload do código, coloque todos os sensores na água.

Agora pressione o botão no dispositivo e aguarde os dados serem coletados e enviados. Repita algumas vezes para preencher o Soracom Air.

Etapa 6:Configurando Soracom

This step is split into 2 sections, the first will cover creating an account with Soracom and registering your SIM while the other will cover setting up Soracom Harvest to collect the data from Air. If you already have an account with Soracom, skip the first section.

Section 1:Creating an Account

Section 2:Groupsand Harvest

Step 7:Setting Up Lagoon

The last thing to set up on Soracom is Lagoon, this is the tool that we will use to visualise our data and create email alerts if the data is not good. Follow the steps below.

Calibration Problems

The turbidity and pH sensors have to be calibrated to be used precisely, you might find that when running the code, the turbidity might by 105% or the pH of water 3. In this case, the sensors have to be calibrated. A quick guide into calibrating them is below.
  • pH Sensor The pH sensor can be calibrated using the potentiometers on the module, place the probe in still bottled water of pH 7 and wait for 5 minutes, now develop a code that prints the pH from the sensor to the serial monitor. Twist the potentiometer until the pH is 7.
  • Turbidity Sensor The turbidity sensor is not very precise and so a relative percentage, compared to pure water is taken. To refine the value of pure water, if your readings exceed 100% turbidity, you will need to place the turbidity sensor in pure water and develop a code that prints the voltage on the analog pin of the pH sensor to the serial monitor. A variable named calibration is found in sensors.h , change the value of that variable to the voltage received when the probe was placed in pure water.

Libraries
  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
  • Adafruit_Neopixel (c) Phil Burges Lesser General Public Licence this library is in the public domain
  • MKRGSM (c) 2016 Arduino AG GNU Lesser General Public Licence this library is in the public domain
  • Wire (c) 2006 Nicholas Zambetti GNU Lesser General Public Licence this library is in the public domain
  • OneWire (c) 2007 Jim Studt GNU General Public Licence this library is in the public domain
  • DallasTemperature GNU General Public Licence this library is in the public domain
  • RTCZero (c) 2015 Arduino LLC GNU Lesser General Public Licence this library is in the public domain

Final

Finally, I got an enclosure done for the project that could be easily portable but be fixed to collect samples both in mode 1 and 2. Steps are below.

Finally, ensure that the mode is set accordingly and start using the device on the field. Check out your local river or lake and see how clean it is. Play around with the dashboard and see what other widgets it has.





Background


Today, data is the new currency and collecting it easily and efficiently is key to a better environment. By measuring the pollution of rivers and lakes collectively, we can raise awareness that the waters are getting dirtier and something has to be done.

I was thinking of an idea for the Soracom contest and I felt like I had to make something beneficial for the environment, the idea of people and companies working together on collective dashboards to visualise the status of rivers and lakes globally inspired me to take this project on.

What will you do to stop water pollution? Because action has to be taken today, and tomorrow is a day too late.



Código

Código
The repo for the projecthttps://github.com/Andrei-Florian/UnifiedWater-v1

Esquemas

schematics_e7TRP6KJKI.fzz

Processo de manufatura

  1. O que é um sensor de O2?
  2. Sensor de movimento usando Raspberry Pi
  3. Sensor de umidade do solo Raspberry Pi
  4. Teste o sensor DS18B20
  5. Sensor de temperatura Raspberry Pi
  6. Telemetria do Sensor 2.0.1
  7. Sensor de emoção / EEG
  8. Windows 10 IoT Core no Raspberry Pi 2 - Dados do sensor Adafruit
  9. MyRiver
  10. Arduino Cloud Sensor Tower