Skip to Content

Projeto Arduino e Sensor NPK

Projeto Arduino e Sensor NPK

Neste artigo, vais aprender a usar sensores NPK com Arduino. NPK (Nitrogénio, Fósforo e Potássio) são os três macronutrientes vitais para as plantas. 

Podes usar o sensor NPK para monitorizar o conteúdo nutricional disponível para as plantas no solo. Pode ser usado como parte dos teus projetos de jardim, talvez juntamente com um automated Arduino IoT plant watering system.

Existem vários tipos de sensores disponíveis para monitorizar os nutrientes do solo. Os sensores NPK usados neste projeto são precisos e os resultados estão disponíveis imediatamente. 

Vais precisar de um conversor de nível para ligar o Arduino UNO ao sensor NPK.  Abaixo, encontrarás os detalhes do conversor, um diagrama de ligação passo a passo e os pinos do sensor NPK. 

Nas secções seguintes, encontrarás o código Arduino e uma coleção de perguntas frequentes sobre projetos com sensores NPK, com respostas.

Vamos começar!

Componentes Necessários Para Construir o Arduino e o Sensor NPK

Componentes de Hardware

Software

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Noções Básicas do Sensor NPK

Nesta secção, vamos aprender sobre os detalhes do sensor NPK.  O sensor NPK típico é mostrado na imagem abaixo. Os sensores contêm toda a eletrónica necessária para amostrar os dados, processá-los e comunicá-los com os controladores anfitriões através do protocolo RS485.

Vamos ver os detalhes dos pinos do sensor típico de nutrientes do solo NPK.

Pinout of NPK Sensor
Pinagem do Sensor NPK

Podes usar Modbus para obter os dados das concentrações dos três elementos no solo.

Podes enviar consultas independentes pelo barramento para recolher os dados de medição de nitrogénio, potássio e fósforo. 

O sensor NPK tem quatro fios disponíveis para a ligação:

Número do Pino Descrição do Pino Observações
1 VCC Linha de alimentação e comunicação
2 GND Ligação à terra
3 RS485A Linha de comunicação RS485 A
4 RS485B Linha de comunicação RS485 B

Para mais detalhes, consulta o manual e a folha de dados do sensor de nutrientes do solo NPK:

Podes medir a quantidade de nitrogénio, fósforo e potássio no solo.

Depois de obteres as medições, podes avaliar eficazmente a condição do solo.

Podes medir os dados durante um longo período e fornecer feedback adequado à equipa que aplica os fertilizantes.

Os sensores NPK são usados em investigação agrícola, jardinagem, silvicultura, cultivo e muito mais. 

Quais são as características genéricas dos sensores NPK ideais?

Aqui está a lista das características desejadas para sensores NPK em aplicações de estudo de nutrientes do solo

  1. Interface fácil de usar e preferencialmente com poucos passos
  2. Sem químicos ativos nocivos. 
  3. Deve ser possível realizar qualquer número de leituras.
  4. O tempo de resposta deve ser significativamente curto – Assim que emitas os comandos, as medições devem ser concluídas no menor tempo possível. 
  5. Os sensores devem ser resistentes à corrosão – Podes deixar o sensor enterrado no solo por longos períodos.

Instruções Passo a Passo Para Ligar o Módulo Sensor NPK ao Arduino UNO

Nesta secção, vamos construir um projeto usando o Arduino UNO e o módulo sensor NPK. 

O módulo sensor NPK que estou a usar fornece dados através do protocolo RS485.

Como não podemos ligar diretamente o barramento RS485 ao Arduino UNO, vamos usar um conversor TTL para RS485. 

Vamos começar. 

Vamos usar um conversor RS485 para TTL. Vamos ver as descrições dos pinos do módulo.

Pinout of RS485 to TTL converter
Pinagem do conversor RS485 para TTL

A tabela abaixo define os pinos pela ordem em que estão rotulados conforme a imagem acima. 

Número do pino  Descrição do pino Observações
1 Receive Out   Se A > B por 200mV, RO estará alto; Se A < B por 200mV, RO estará baixo
2 Receive Enable Ativação da saída do recetor. RO está ativado quando RE está baixo; RO está em alta impedância quando RE está alto
3 Data Enable Ativação da saída do transmissor. As saídas do transmissor, Y e Z, são ativadas ao colocar DE alto. Estão em alta impedância quando DE está baixo. Se as saídas do transmissor estiverem ativadas, as peças funcionam como drivers de linha. Enquanto estiverem em alta impedância, funcionam como recetores de linha se RE estiver baixo.
4 Data In Entrada do transmissor. Um nível baixo em DI força a saída Y a baixo e a saída Z a alto. De forma semelhante, um nível alto em DI força a saída Y a alto e a saída Z a baixo.
5 GND Ligação à terra
6 A Entrada do recetor não inversora
7 B Entrada do recetor inversora
8 VCC Alimentação positiva, tipicamente 5V

Como Ligar o Módulo Sensor NPK ao Arduino UNO?

Abaixo está o guia passo a passo para completar as ligações de hardware necessárias para ligar o Arduino ao módulo sensor NPK.  

Passo 1: Começa pelas ligações GND.

Start with the GND connections

Liga o pino de terra do módulo conversor RS485 ao fio de terra do sensor NPK.

Liga sempre os terra juntos antes de fazer outras ligações. 

Passo 2: Liga os pinos A e B do Sensor

Connect the A and B pins of the Sensor

Liga os terminais inversor e não inversor do módulo RS485 aos pinos A e B do sensor NPK.

Passo 3: Liga o pino de alimentação

Connect the Power pin

Liga o pino VCC do módulo ao fio VCC do sensor NPK.

Passo 4: Verifica a ligação entre o conversor RS485 e o Sensor NPK

Verify the connection between RS485 converter and the NPK Sensor

Isto completa as ligações necessárias entre o módulo RS485 e o sensor NPK.

Nos próximos passos, vamos ligar o Arduino UNO ao módulo RS485. 

Passo 5: Liga o pino RO ao UNO

Connect RO Pin the UNO

Liga o pino 2 ao pino RO do sensor RS485.

Passo 6: Liga o pino DI ao UNO

Connect DI Pin the UNO

Liga o pino 3 ao pino DI do sensor RS485.

Passo 7: Liga o pino DE ao UNO

Connect DE Pin the UNO

Liga o pino DE do módulo ao pino 7 do Arduino UNO.

Passo 8: Liga o pino RE ao UNO

Connect RE Pin the UNO

Liga o pino RE do módulo ao pino 8 do Arduino UNO.

Podes também optar por trocar as ligações para outros pinos do Arduino UNO.

Por favor, atualiza também o teu código Arduino para que as novas ligações funcionem. 

Passo 9: Verifica as ligações completas

Verify the complete connections

Verifica as ligações. Parabéns por completares as ligações necessárias para ler os sensores NPK. 

Exemplo de Código Arduino Para o Projeto Arduino e Sensor NPK

Nesta secção, vamos analisar o código Arduino de exemplo para testar o módulo sensor NPK.

O primeiro projeto testa o circuito que construíste na secção anterior.

Vamos começar.

Código Arduino para mostrar os dados do Sensor NPK

O código Arduino abaixo lê os dados do sensor NPK via RS485. O código Arduino é apresentado abaixo.

#include "SoftwareSerial.h"
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
 
#define SCREEN_WIDTH 128    // OLED display width, in pixels
#define SCREEN_HEIGHT 64    // OLED display height, in pixels
#define OLED_RESET -1       // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
 
#define RE 8
#define DE 7
 
const byte nitro[] = {0x01, 0x03, 0x00, 0x1e, 0x00, 0x01, 0xe4, 0x0c};
const byte phos[] = {0x01, 0x03, 0x00, 0x1f, 0x00, 0x01, 0xb5, 0xcc};
const byte pota[] = {0x01, 0x03, 0x00, 0x20, 0x00, 0x01, 0x85, 0xc0};
 
byte values[11];
SoftwareSerial mod(2, 3);
 
void setup() {
  Serial.begin(9600);
  mod.begin(9600);
  pinMode(RE, OUTPUT);
  pinMode(DE, OUTPUT);
 
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64)
  delay(500);
  display.clearDisplay();
  display.setCursor(25, 15);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.println(" NPK Sensor");
  display.setCursor(25, 35);
  display.setTextSize(1);
  display.print("Initializing");
  display.display();
  delay(3000);
}
 
void loop() {
  byte val1, val2, val3;
  val1 = nitrogen();
  delay(250);
  val2 = phosphorous();
  delay(250);
  val3 = potassium();
  delay(250);
 
  Serial.print("Nitrogen: ");
  Serial.print(val1);
  Serial.println(" mg/kg");
  Serial.print("Phosphorous: ");
  Serial.print(val2);
  Serial.println(" mg/kg");
  Serial.print("Potassium: ");
  Serial.print(val3);
  Serial.println(" mg/kg");
  delay(2000);
 
  display.clearDisplay();

  display.setTextSize(2);
  display.setCursor(0, 5);
  display.print("N: ");
  display.print(val1);
  display.setTextSize(1);
  display.print(" mg/kg");
 
  display.setTextSize(2);
  display.setCursor(0, 25);
  display.print("P: ");
  display.print(val2);
  display.setTextSize(1);
  display.print(" mg/kg");
 
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print("K: ");
  display.print(val3);
  display.setTextSize(1);
  display.print(" mg/kg");
 
  display.display();
}
 
byte nitrogen() {
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(10);
  if (mod.write(nitro, sizeof(nitro)) == 8) {
    digitalWrite(DE, LOW);
    digitalWrite(RE, LOW);
    for (byte i = 0; i < 7; i++) {
      //Serial.print(mod.read(),HEX);
      values[i] = mod.read();
      Serial.print(values[i], HEX);
    }
    Serial.println();
  }
  return values[4];
}
 
byte phosphorous() {
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(10);
  if (mod.write(phos, sizeof(phos)) == 8) {
    digitalWrite(DE, LOW);
    digitalWrite(RE, LOW);
    for (byte i = 0; i < 7; i++) {
      //Serial.print(mod.read(),HEX);
      values[i] = mod.read();
      Serial.print(values[i], HEX);
    }
    Serial.println();
  }
  return values[4];
}
 
byte potassium() {
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(10);
  if (mod.write(pota, sizeof(pota)) == 8) {
    digitalWrite(DE, LOW);
    digitalWrite(RE, LOW);
    for (byte i = 0; i < 7; i++) {
      //Serial.print(mod.read(),HEX);
      values[i] = mod.read();
      Serial.print(values[i], HEX);
    }
    Serial.println();
  }
  return values[4];
}

Perguntas Frequentes

Incluí uma lista das perguntas mais frequentes sobre projetos construídos usando Arduino e módulos sensores NPK.

Se tiveres mais perguntas, por favor coloca-as na secção de comentários.

Terei todo o gosto em respondê-las. 

O que é um sensor NPK?

NPK significa Nitrogénio, Fósforo e Potássio.

Os sensores NPK são usados para detetar a fertilidade do solo. Os sensores NPK são usados para avaliar a natureza do solo.

Monitorizar a terra agrícola para fertilidade ajuda a aumentar a produção, evitando o uso excessivo indesejado de fertilizantes e a poluir a essência natural do solo.

Um sensor NPK é alimentado com uma fonte de 5 V a 24 V. Consulta as especificações do sensor específico para informação precisa sobre a gama de voltagem.

O sensor também suporta RS485 ou uma interface de comunicação similar.

Neste artigo, usamos o protocolo RS485 para comunicar com o Arduino UNO.

O sensor NPK é preciso?

Geralmente deve ser, mas por vezes pode ser desafiante obter leituras precisas. Pode depender do nutriente que queres medir, do sensor e do circuito. Vê a discussão detalhada here para mais informações

Porque é que o valor NPK é importante?

NPK representa o macronutriente mais essencial do solo. Se souberes o valor NPK no solo, podes nutrir as plantas do teu jardim com o nível correto de nutrientes.

Qual dos NPK é o mais importante?

Dos três elementos, o Nitrogénio é crítico para o desenvolvimento da planta.

Os valores NPK são vitais na construção da estrutura da planta, geração de sementes, flores, etc. 

Os fertilizantes NPK devem ser aplicados quando a planta está a crescer ativamente.

Os sensores NPK podem ser usados para monitorizar ativamente a informação nutricional do solo. 

Links

Conclusão

Neste artigo, compreendemos os conceitos básicos de um sensor NPK e como o sensor NPK mede os conteúdos de NPK do solo. 

Também listámos as características de um sensor NPK e aprendemos o básico do conversor RS485 para TTL usado no projeto. 

Podes seguir os passos de ligação e completar o circuito para o nosso projeto de monitorização da nutrição do solo.

O código Arduino para ler os sensores NPK apresentado é fácil e direto de entender. 

Por favor, coloca as tuas perguntas sobre os sensores NPK na secção de comentários. Estou sempre disponível para responder.