Skip to Content

Projet Arduino et capteur NPK

Projet Arduino et capteur NPK

Dans cet article, vous apprendrez à utiliser des capteurs NPK avec Arduino. NPK (Azote, Phosphore et Potassium) sont les trois macronutriments essentiels pour les plantes. 

Vous pouvez utiliser le capteur NPK pour surveiller la teneur en nutriments disponible pour les plantes dans le sol. Il peut être intégré à vos projets de jardinage, peut-être en complément d’un automated Arduino IoT plant watering system.

Il existe plusieurs types de capteurs pour surveiller les nutriments du sol. Les capteurs NPK utilisés dans ce projet sont précis et fournissent des résultats immédiats. 

Vous aurez besoin d’un convertisseur de niveau pour connecter l’Arduino UNO au capteur NPK.  Vous trouverez ci-dessous les détails du convertisseur, un schéma de connexion étape par étape, ainsi que les broches du capteur NPK. 

Dans les sections suivantes, vous trouverez le code Arduino ainsi qu’une série de questions fréquemment posées sur les projets NPK avec leurs réponses.

Commençons !

Composants nécessaires pour construire le projet Arduino et capteur NPK

Composants matériels

Logiciel

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.

Notions de base sur le capteur NPK

Dans cette section, nous allons découvrir les détails du capteur NPK.  Le capteur NPK typique est montré sur l’image ci-dessous. Ces capteurs intègrent toute l’électronique nécessaire pour échantillonner les données, les traiter et communiquer avec les contrôleurs hôtes via le protocole RS485.

Voyons les détails des broches du capteur typique de nutriments du sol NPK.

Pinout of NPK Sensor
Brochage du capteur NPK

Vous pouvez utiliser Modbus pour obtenir les données des concentrations des trois éléments dans le sol.

Vous pouvez envoyer des requêtes indépendantes sur le bus pour collecter les mesures d’azote, de potassium et de phosphore. 

Le capteur NPK dispose de quatre fils pour la connexion :

Numéro de broche Description de la broche Remarques
1 VCC Ligne d’alimentation
2 GND Connexion à la masse
3 RS485A Ligne de communication RS485 A
4 RS485B Ligne de communication RS485 B

Pour plus de détails, consultez le manuel et la fiche technique du capteur de nutriments du sol NPK :

Vous pouvez mesurer la quantité d’azote, de phosphore et de potassium dans le sol.

Une fois les mesures obtenues, vous pouvez évaluer efficacement l’état du sol.

Vous pouvez mesurer les données sur une longue période et fournir un retour précis à l’équipe qui applique les engrais.

Les capteurs NPK sont utilisés en recherche agricole, jardinage, sylviculture, culture, et bien plus encore. 

Quelles sont les caractéristiques générales des capteurs NPK idéaux ?

Voici la liste des caractéristiques souhaitées pour les capteurs NPK destinés à l’étude des nutriments du sol

  1. Interface facile à utiliser et de préférence avec un nombre réduit d’étapes
  2. Aucun produit chimique actif nocif. 
  3. Possibilité de réaliser un nombre illimité de mesures.
  4. Le temps de réponse doit être très court – Une fois les commandes envoyées, les mesures doivent être effectuées dans le délai le plus court possible. 
  5. Les capteurs doivent être résistants à la corrosion – Vous pouvez laisser le capteur enterré dans le sol pendant longtemps.

Instructions étape par étape pour connecter le module capteur NPK à l’Arduino UNO

Dans cette section, nous allons réaliser un projet utilisant l’Arduino UNO et le module capteur NPK. 

Le module capteur NPK que j’utilise fournit les données via le protocole RS485.

Comme nous ne pouvons pas connecter directement le bus RS485 à l’Arduino UNO, nous utiliserons un convertisseur TTL vers RS485. 

Commençons. 

Nous utiliserons un convertisseur RS485 vers TTL. Voyons la description des broches du module.

Pinout of RS485 to TTL converter
Brochage du convertisseur RS485 vers TTL

Le tableau ci-dessous définit les broches dans l’ordre où elles sont étiquetées sur l’image ci-dessus. 

Numéro de broche  Description de la broche Remarques
1 Sortie Réception   Si A > B de 200mV, RO sera haut ; si A < B de 200mV, RO sera bas
2 Activation Réception Activation de la sortie du récepteur. RO est activé lorsque RE est bas ; RO est en haute impédance lorsque RE est haut
3 Activation Données Activation de la sortie du driver. Les sorties du driver, Y et Z, sont activées en mettant DE à l’état haut. Elles sont en haute impédance lorsque DE est bas. Si les sorties du driver sont activées, les composants fonctionnent comme des drivers de ligne. Lorsqu’elles sont en haute impédance, ils fonctionnent comme des récepteurs de ligne si RE est bas.
4 Entrée Données Entrée du driver. Un niveau bas sur DI force la sortie Y à bas et la sortie Z à haut. De même, un niveau haut sur DI force la sortie Y à haut et la sortie Z à bas.
5 GND Connexion à la masse
6 A Entrée non inverseuse du récepteur
7 B Entrée inverseuse du récepteur
8 VCC Alimentation positive, typiquement 5V

Comment connecter le module capteur NPK à l’Arduino UNO ?

Voici le guide étape par étape pour réaliser les connexions matérielles nécessaires entre l’Arduino et le module capteur NPK.  

Étape 1 : Commencez par les connexions GND.

Start with the GND connections

Connectez la broche de masse du module convertisseur RS485 à la masse du capteur NPK.

Toujours connecter les masses ensemble avant de faire les autres connexions. 

Étape 2 : Connectez les broches A et B du capteur

Connect the A and B pins of the Sensor

Connectez les bornes inverseuse et non inverseuse du module RS485 aux broches A et B du capteur NPK.

Étape 3 : Connectez la broche d’alimentation

Connect the Power pin

Connectez la broche VCC du module au fil VCC du capteur NPK.

Étape 4 : Vérifiez la connexion entre le convertisseur RS485 et le capteur NPK

Verify the connection between RS485 converter and the NPK Sensor

Cela complète les connexions nécessaires entre le module RS485 et le capteur NPK.

Dans les étapes suivantes, nous connecterons l’Arduino UNO au module RS485. 

Étape 5 : Connectez la broche RO à l’UNO

Connect RO Pin the UNO

Connectez la broche 2 à la broche RO du capteur RS485.

Étape 6 : Connectez la broche DI à l’UNO

Connect DI Pin the UNO

Connectez la broche 3 à la broche DI du capteur RS485.

Étape 7 : Connectez la broche DE à l’UNO

Connect DE Pin the UNO

Connectez la broche DE du module à la broche 7 de l’Arduino UNO.

Étape 8 : Connectez la broche RE à l’UNO

Connect RE Pin the UNO

Connectez la broche RE du module à la broche 8 de l’Arduino UNO.

Vous pouvez aussi choisir d’échanger ces connexions avec d’autres broches de l’Arduino UNO.

N’oubliez pas de mettre à jour votre code Arduino pour que les nouvelles connexions fonctionnent. 

Étape 9 : Vérifiez les connexions complètes

Verify the complete connections

Vérifiez les connexions. Félicitations, vous avez terminé les connexions nécessaires pour lire les capteurs NPK. 

Exemple de code Arduino pour le projet Arduino et capteur NPK

Dans cette section, nous allons parcourir un exemple de code Arduino pour tester le module capteur NPK.

Le premier projet teste le circuit que vous avez monté dans la section précédente.

Commençons.

Code Arduino pour afficher les données du capteur NPK

Le code Arduino ci-dessous lit les données du capteur NPK via RS485. Le code Arduino est présenté ci-dessous.

#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];
}

FAQ

J’ai inclus une liste des questions les plus fréquemment posées sur les projets réalisés avec Arduino et les modules capteurs NPK.

Si vous avez d’autres questions, n’hésitez pas à les poser dans la section commentaires.

Je serai ravi d’y répondre. 

Qu’est-ce qu’un capteur NPK ?

NPK signifie Azote, Phosphore et Potassium.

Les capteurs NPK sont utilisés pour détecter la fertilité du sol. Ils servent à évaluer la nature du sol.

Surveiller la fertilité des terres agricoles vous aide à augmenter le rendement, en évitant un usage excessif d’engrais et la pollution naturelle du sol.

Un capteur NPK est alimenté par une source de 5 V à 24 V. Reportez-vous aux spécifications du capteur particulier pour connaître la plage de tension exacte.

Le capteur supporte également une interface de communication RS485 ou similaire.

Dans cet article, nous avons utilisé le protocole RS485 pour communiquer avec l’Arduino UNO.

Le capteur NPK est-il précis ?

En général, il devrait l’être, mais il peut parfois être difficile d’obtenir des mesures précises. Cela dépend du nutriment à mesurer, du capteur et du circuit. Voir la discussion détaillée here pour plus d’informations

Pourquoi la valeur NPK est-elle importante ?

NPK représente les macronutriments les plus essentiels du sol. Connaître la valeur NPK du sol vous permet de nourrir vos plantes de jardin avec le bon niveau de nutriments.

Lequel des NPK est le plus important ?

Parmi les trois éléments, l’azote est crucial pour le développement de la plante.

Les valeurs NPK sont vitales pour la construction de la structure de la plante, la génération des graines, les fleurs, etc. 

Les engrais NPK doivent être appliqués lorsque la plante est en croissance active.

Les capteurs NPK peuvent être utilisés pour surveiller activement les informations nutritionnelles du sol. 

Liens

Conclusion

Dans cet article, nous avons compris les bases d’un capteur NPK et comment il mesure les contenus NPK du sol. 

Nous avons également listé les caractéristiques d’un capteur NPK et appris les bases du convertisseur RS485 vers TTL utilisé dans le projet. 

Vous pouvez suivre les étapes de connexion et compléter le circuit pour notre projet de surveillance de la nutrition du sol.

Le code Arduino présenté pour lire les capteurs NPK est simple et facile à comprendre. 

N’hésitez pas à poser vos questions sur les capteurs NPK dans la section commentaires. Je suis toujours heureux d’y répondre.