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

SmartAgro

Componentes e suprimentos

Arduino MKR GSM 1400
× 1
SORACOM Air Global IoT SIM
× 1
Arduino MKR MEM Shield
× 1
GY21 Temperatura e Umidade
× 1
Sensor de luz UV Adafruit SI1145
× 1
Sensor de umidade do solo SparkFun (com terminais de parafuso)
× 1
Adafruit Waterproof DS18B20 Sensor de temperatura digital
× 1
Fios de jumpers (genérico)
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)

Sobre este projeto





Visão geral


A terra agrícola é um recurso precioso, necessário para a sobrevivência da sociedade moderna. Mas tantos desafios são enfrentados na agricultura agrícola, você precisa obter a temperatura, a umidade e a luz solar certas para a safra e, então, você tem que garantir que nada destrua a safra.

O conceito agricultura inteligente vem ganhando corpo, nos últimos anos, a ideia de supervisionar remotamente o estado de sua safra. Mas esta revolução na agricultura tem um grande custo, a maioria dos sistemas disponíveis são muito caros para implementar em pequenas propriedades e os sistemas podem não cobrir grandes propriedades.

A SmartAgro pretende criar uma rede de dispositivos fáceis de usar que possam ser colocados no campo que está sendo monitorado. Os dispositivos coletam dados atmosféricos, parâmetros relacionados ao solo e valores de luz, enviando todos os dados para a nuvem onde são apresentados em um painel.

Isso permite que qualquer fazenda, de qualquer tamanho, entre na nova era da agricultura, implementando uma frota escalável de dispositivos em suas terras que podem avisá-los se uma seca estiver se aproximando.

Vídeo

Imagem





Funcionalidade


O SmartAgro permite ao usuário implementar facilmente um conjunto de dispositivos em campo que está sendo monitorado. Esses dispositivos coletam amostras dos sensores em intervalos de tempo definidos.

Os dados são então registrados em um arquivo.csv em um cartão SD e enviados ao back-end, onde os dados são visualizados em um painel. O projeto consiste em um front-end e um back-end.

Front-End

O front-end do projeto refere-se aos dispositivos físicos colocados no campo. Esses dispositivos obtêm amostras de dados de seus sensores, gravando-os em um cartão SD e enviando os dados para o back-end. Abaixo está a visão geral da funcionalidade do projeto.

Um MKR GSM é usado para o front-end, o dispositivo coleta os dados e os envia para a Soracom, onde são visualizados. Abaixo estão as etapas executadas pelo dispositivo ao coletar dados.

SDCard

O dispositivo irá registrar os dados adquiridos dos sensores no cartão SD anexado a ele. Os dados serão anexados a um arquivo.csv que pode então ser baixado.

Na configuração, o dispositivo localiza se um arquivo.csv para gravação está disponível e irá anexar a ele se já existir. Ele criará um novo arquivo, se ainda não houver um. Abaixo estão algumas imagens do arquivo.

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 do 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.

Envio de dados

Os dados são enviados à Soracom por meio de uma conexão GSM com o servidor. Os dados são enviados como carga útil JSON. Esses dados são recebidos pelo back-end e, em seguida, processados. Abaixo está um exemplo de carga útil.
  {"Latitude":53,3570404, "Longitude":- 6,2609935, "soloTemp":20,56, "soloHumidity":40, "atmoTemp":22,12, "atmoHumidity":62, "uvLight":0,00, "irLight":257, "deviceName":"device1"}  

Back-end

O back-end do aplicativo se refere à Soracom. Os dados são recebidos pela Soracom, processados ​​e exibidos no painel.

O Painel

O painel do projeto está hospedado na Lagoa Soracom. Os dados são recebidos pela Soracom Air no backend, o Soracom Harvest coleta os dados e, em seguida, o Lagoon os consulta do Harvest.

A localização de cada dispositivo na frota e todos os dados do sensor são plotados no painel. As capturas de tela do painel estão abaixo.

Alertas

O usuário também pode configurar o back-end para receber notificações por e-mail se o índice UV ou a umidade do solo coletados pelo dispositivo forem anormais. Dessa forma, o usuário saberá se as lavouras precisam de atenção.





Benefícios


O usuário que opera este projeto terá muitos benefícios:
  • Visualize dados em qualquer lugar, a qualquer hora e em qualquer lugar usando o painel.
  • Amplie facilmente os dispositivos e use-os como múltiplos.
  • Custos mais baixos do que as soluções usuais do mercado.





Construindo o projeto


Etapa 1:Aparelho necessário

Este projeto requer uma lista de sensores e outros materiais. A lista completa de materiais necessários está abaixo.
  • 1, Arduino MKR GSM
  • 1, Arduino MEM Shield
  • 1, módulo de temperatura e umidade GY-21
  • 1, sensor de temperatura à prova d'água
  • 1, sensor de luz UV SI-1145
  • 1, Sensor de umidade do solo
  • Caixa de bateria 1, 2AA (com baterias) ou uma bateria LiPo
  • 1, Soracom Sim Card
  • 1, cartão SD
  • Fios de jumpers

Etapa 2:Conectando o circuito

Um ferro de solda será necessário para soldar todos os componentes juntos. Os esquemas são ilustrados no arquivo fritzing abaixo.

Lembre-se de prender o escudo MEM na placa!

Preparando o MKR GSM

O Arduino MKR GSM precisa ser preparado. Eu alimentei 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 usado para o projeto.
  • Prepare SD
  • Colete dados
  • Gravar dados em SD
  • Envie dados para Soracom

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

Prepare SD
  bool createFile () {// cria o arquivo .csv no cartão SD Serial.println ("Criando Arquivo"); Serial.println ("OK - Criando e abrindo arquivo"); Arquivo dataFile =SD.open ("datalog.csv", FILE_WRITE); if (dataFile) {Serial.println ("OK - Arquivo criado"); Serial.println ("OK - Anexando legenda ao arquivo"); Serial.print ("OK - Anexar"); Serial.println (legenda); dataFile.println (legenda); dataFile.close (); Serial.println ("Sucesso - Dados anexados"); } else {Serial.println ("Erro - Arquivo não detectado"); Serial.println ("OK - Nova tentativa em 5 segundos"); Serial.println ("________________________________________"); Serial.println (""); dataFile.close (); atraso (5000); retorna falso; } Serial.println ("________________________________________"); Serial.println (""); return true;} void checkFile () {Serial.println ("Checking .csv"); Serial.println ("________________________________________"); Serial.println ("Configurando o arquivo"); Serial.println ("OK - Verificando a presença do arquivo"); if (SD.exists ("datalog.csv")) // verifique se o arquivo .csv já existe {// anexe ao arquivo existente se ele existe Serial.println ("OK - Arquivo existe"); Serial.println ("OK - será acrescentado ao arquivo existente"); Serial.println ("________________________________________"); Serial.println (""); } else {// cria um novo arquivo para anexar a Serial.println ("OK - Arquivo não presente"); Serial.println ("OK - Criando Arquivo"); Serial.println (""); while (! createFile ()) {}; }}  

O checkFile () A função verifica se o arquivo.csv ao qual o dispositivo deve anexar existe. Se o arquivo existir, a função termina, caso contrário, ela chama createFile () que cria um novo arquivo.csv para anexar.

CollectData
  void collectData () {Serial.println ("Coletando Dados"); Serial.println ("________________________________________"); Serial.println ("Obtendo dados de sensores"); Serial.println ("OK - contatando todos os sensores"); // coleta de dados de todos os sensores soloSens.requestTemperatures (); soloTemp =soloSens.getTempCByIndex (0); soloHumidity =analogRead (A1); soloHumidity =map (soloHumidity, 1023, 0, 0, 100); atmoTemp =gy21.readTemperature (); atmoHumidity =gy21.readHumidity (); visibleLight =uv.readVisible (); irLight =uv.readIR (); rawUVLight =uv.readUV (); uvLight =(rawUVLight / 100); Serial.println ("OK - Dados coletados"); Serial.println ("OK - Dados de despejo"); Serial.print ("[Claro] Visível"); Serial.println (visibleLight); Serial.print ("[Light] Infrared"); Serial.println (irLight); Serial.print ("[Light] Ultraviolet"); Serial.println (uvLight); Serial.print ("Temperatura [Atmo]"); Serial.println (atmoTemp); Serial.print ("[Atmo] Umidade"); Serial.println (atmoHumidity); Serial.print ("Temperatura [do solo]"); Serial.println (soloTemp); Serial.print ("Umidade [do solo]"); Serial.println (soloHumidity); Serial.println ("Sucesso - Dados Despejados"); Serial.println ("________________________________________"); Serial.println ("");}  

Esta seção do código coleta dados de todos os sensores a bordo. Ele contata sensores para temperatura e umidade atmosférica, umidade e temperatura do solo e índice de UV, valor de luz IV e luz visível.

Gravar dados em SD
  bool burnData (String data) {Serial.println ("Burning Data"); Serial.println ("________________________________________"); Serial.println ("Gravação de dados em cartão SD"); Serial.println ("OK - Abrindo arquivo"); Arquivo dataFile =SD.open ("datalog.csv", FILE_WRITE); if (dataFile) {Serial.println ("OK - Arquivo está presente"); Serial.print ("OK - Anexando"); Serial.println (dados); Serial.println ("OK - Gravando dados"); dataFile.println (dados); // queima os dados no cartão SD dataFile.close (); Serial.println ("Sucesso - Dados anexados"); Serial.println ("________________________________________"); Serial.println (""); } else {Serial.println ("Erro - Arquivo não presente"); Serial.println ("OK - Nova tentativa em 5 segundos"); Serial.println ("________________________________________"); Serial.println (""); atraso (5000); } Serial.println ("");}  

Esta função grava os dados previamente compilados em uma linha de um arquivo.csv no cartão SD. Os dados são anexados ao arquivo no cartão.

Enviar dados para Soracom
  void parseData (String dataToSend) {Serial.println ("Enviando dados"); Serial.println ("________________________________________"); Serial.println ("Enviando dados para Soracom"); Serial.println ("OK - Configurando Conexão"); if (client.connect (url, 80)) // prepara a conexão e formata send {Serial.println ("OK - Conexão Estabelecida, Analisando Dados"); client.println ("POST / HTTP / 1.1"); client.println ("Host:harvest.soracom.io"); client.println ("User-Agent:Arduino / 1.0"); client.println ("Conexão:fechar"); 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 (""); // ler de volta do servidor while (1) {if (client.available ()) {char c =client.read (); Serial.print (c); } if (! client.connected ()) {break; }} Serial.println ("Sucesso - Dados analisados"); Serial.println ("________________________________________"); Serial.println ("");}  

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 por um determinado período de tempo, repetindo as etapas novamente.

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

Algumas variáveis ​​devem ser editadas pelo usuário antes que o projeto possa ser usado. As variáveis ​​editáveis ​​estão no arquivo principal do código. Eles são descritos a seguir.
  • deviceName representa o nome personalizado do dispositivo. Isso é enviado junto com a carga útil para a Soracom, é útil para identificar dispositivos separados ao gerenciar um conjunto de dispositivos.
  • sleepTime é a quantidade de tempo (em milissegundos) que o dispositivo ficará hibernando entre as leituras. O dispositivo irá hibernar entre as leituras para reduzir o consumo de bateria.
  • proDebug é definido como verdadeiro se houver bug e como falso caso contrário. Se o proDebug estiver ativado, o dispositivo precisará estar conectado a um computador com o monitor serial ligado para funcionar. Defina como verdadeiro durante a depuração, mas certifique-se de que esteja definido como falso se estiver no campo. Observe que o dispositivo ainda imprimirá em serial, mesmo se proDebug for false;

Etapa 5:Configurando o cartão SD

O cartão SD deve ser preparado antes de ser usado com o dispositivo. O cartão SD deve ser formatado como FAT 32. Siga as etapas abaixo para preparar o cartão SD.

Etapa 6:Faça 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 7:Configurando Soracom

Esta etapa é dividida em 2 seções, a primeira cobrirá a criação de uma conta na Soracom e o registro do seu SIM, enquanto a outra cobrirá a configuração do Soracom Harvest para coletar os dados do ar. Se você já possui uma conta na Soracom, pule a primeira seção.

Seção 1:Criação de uma conta

Seção 2:Grupos e colheita

Etapa 8:Configurando a Lagoa Soracom

A última coisa a configurar no Soracom é o Lagoon, esta é a ferramenta que usaremos para visualizar nossos dados e criar alertas de e-mail se os dados não forem bons. Siga os passos abaixo.

Bibliotecas
  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public License esta biblioteca é de domínio público
  • MKRGSM (c) 2016 Arduino AG GNU Licença Pública Geral Menor esta biblioteca é de domínio público
  • Wire (c) 2006 Nicholas Zambetti GNU Licença Pública Geral Menor esta biblioteca é de domínio público
  • OneWire (c) 2007 Jim Studt GNU General Public License esta biblioteca é de domínio público
  • DallasTemperature GNU General Public License esta biblioteca é de domínio público
  • RTCZero (c) 2015 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
  • SPI (c) 2015 Hristo Gochkov Lesser GNU Lesser General Public Licence this library is in the public domain
  • SD (C) 2010 SparkFun Electronics GNU General Public Licence this library is in the public domain

Final

Finally I designed an enclosure for the project, it would be preferable if the top of the enclosure would be transparent so that the UV sensor can be placed within the enclosure, I placed my sensor outside the enclosure to prevent any interference.

Finally, ensure that all the variables are set and then place the device on the field, it should be ready to monitor all parameters now.

Using an SD Card Module

I have chosen to use the Arduino MKR MEM shield as it is easy to use and quite compact. An SD card module can also be used though most operate with 5v while the MKR GSM can only provide 3.3v, therefore a level convertor is needed to step up the 3.3v to 5v.





Antecedentes


I came up with this idea while going on a bus past fields. I remembered reading about new devices used to monitor agricultural fields but I was made aware of the costs which are mostly not affordable for farmers.

So I decided to use the low cost Arduino to monitor multiple parameters on the farm and allow any farm, big or small to step into the age of IoT and smart farming.


Código

SmartAgro
The Full Code

Esquemas

schematics_rrBJ3HiIfc.fzz

Processo de manufatura

  1. Sensor Arduino - Tipos e Aplicações
  2. Construindo uma rede de sensores sem fio em sua casa
  3. Monitoramento de CO2 com Sensor K30
  4. Qual é sua altura?
  5. Sensor de obstáculo simples com Arduino
  6. Sensor capacitivo de impressão digital com um Arduino ou ESP8266
  7. Arduino Cloud Sensor Tower
  8. Pistola de água com sensor de movimento
  9. Como criar um site de comunicação do Arduino usando PHP
  10. Mini Radar com Arduino