Humidité du sol

Un forum dédie à vos questions concernant l'intégration à Domoticz des capteurs et gateway mysensors.org
juchalin
Messages : 125
Enregistré le : 07 déc. 2016, 12:08

Humidité du sol

Message par juchalin » 23 mai 2018, 18:22

Salut à tous, je tente de faire le capteur d'humidité de sol du site MySensors.
Il s'affiche dans Domoticz mais je n'ai que des valeur négative, je fais des tests avec un verre d'eau, ça change vaguement mais bon ça change même quand la sonde est débranché, Tout mes branchements sont bon voici mon matos :
https://www.amazon.fr/gp/product/B00K67 ... UTF8&psc=1



Voici le code compilé sur un nano :
// Enable debug prints to serial monitor
#define MY_DEBUG

// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_NRF5_ESB
//#define MY_RADIO_RFM69
//#define MY_RADIO_RFM95

#include <math.h> // Conversion equation from resistance to %
#include <MySensors.h>

// Setting up format for reading 3 soil sensors
#define NUM_READS (int)10 // Number of sensor reads for filtering
#define CHILD_ID 0

MyMessage msg(CHILD_ID, V_LEVEL);
uint32_t SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)

long buffer[NUM_READS];
int idx;

/// @brief Structure to be used in percentage and resistance values matrix to be filtered (have to be in pairs)
typedef struct {
int moisture; //!< Moisture
long resistance; //!< Resistance
} values;

const long knownResistor = 4700; // Constant value of known resistor in Ohms

int supplyVoltage; // Measured supply voltage
int sensorVoltage; // Measured sensor voltage

values valueOf[NUM_READS]; // Calculated moisture percentages and resistances to be sorted and filtered

int i; // Simple index variable

void setup()
{
// initialize the digital pins as an output.
// Pin 6,7 is for sensor 1
// initialize the digital pin as an output.
// Pin 6 is sense resistor voltage supply 1
pinMode(6, OUTPUT);

// initialize the digital pin as an output.
// Pin 7 is sense resistor voltage supply 2
pinMode(7, OUTPUT);
}

void presentation()
{
sendSketchInfo("Soil Moisture Sensor Reverse Polarity", "1.0");
present(CHILD_ID, S_MOISTURE);
}

void loop()
{

measure(6,7,1);
Serial.print ("\t");
Serial.println (average());
long read1 = average();

measure(7,6,0);
Serial.print ("\t");
Serial.println (average());
long read2= average();

long sensor1 = (read1 + read2)/2;

Serial.print ("resistance bias =" );
Serial.println (read1-read2);
Serial.print ("sensor bias compensated value = ");
Serial.println (sensor1);
Serial.println ();

//send back the values
send(msg.set((int32_t)ceil(sensor1)));
// delay until next measurement (msec)
sleep(SLEEP_TIME);
}

void measure (int phase_b, int phase_a, int analog_input)
{
// read sensor, filter, and calculate resistance value
// Noise filter: median filter

for (i=0; i<NUM_READS; i++) {

// Read 1 pair of voltage values
digitalWrite(phase_a, HIGH); // set the voltage supply on
delayMicroseconds(25);
supplyVoltage = analogRead(analog_input); // read the supply voltage
delayMicroseconds(25);
digitalWrite(phase_a, LOW); // set the voltage supply off
delay(1);

digitalWrite(phase_b, HIGH); // set the voltage supply on
delayMicroseconds(25);
sensorVoltage = analogRead(analog_input); // read the sensor voltage
delayMicroseconds(25);
digitalWrite(phase_b, LOW); // set the voltage supply off

// Calculate resistance
// the 0.5 add-term is used to round to the nearest integer
// Tip: no need to transform 0-1023 voltage value to 0-5 range, due to following fraction
long resistance = (knownResistor * (supplyVoltage - sensorVoltage ) / sensorVoltage) ;

delay(1);
addReading(resistance);
Serial.print (resistance);
Serial.print ("\t");
}
}



// Averaging algorithm
void addReading(long resistance)
{
buffer[idx] = resistance;
idx++;
if (idx >= NUM_READS) {
idx = 0;
}
}

long average()
{
long sum = 0;
for (int i = 0; i < NUM_READS; i++) {
sum += buffer;
}
return (long)(sum / NUM_READS);
}

Merci pour votre aide.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Jeff
Messages : 527
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Humidité du sol

Message par Jeff » 23 mai 2018, 20:31

Tu es branché sur D0 ou A0 ?
Que dis les voyants si tu tournes le potard !
Version: 3.81.53; KMTronic usb ; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...) DIO ; OREGON/4 THGN/PCR800; DIY/3 temp, Teleinfo usb; RFLink; MYSensors v2.0/GW Lan/Power meter/RGB 3D; ESPeasy Oled, Nextion...

juchalin
Messages : 125
Enregistré le : 07 déc. 2016, 12:08

Re: Humidité du sol

Message par juchalin » 23 mai 2018, 22:23

Je lai branche sur do, j'ai une led qui s'allume quand je tourne à fond d'un cotée

Jeff
Messages : 527
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Humidité du sol

Message par Jeff » 23 mai 2018, 22:38

1 led est allumée à la mise sous tension, quand il detecte, 2 leds s'allume normalement, fait le test en le trempant dans l'eau.
C'est quoi le device créé dans domoticz ?
Version: 3.81.53; KMTronic usb ; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...) DIO ; OREGON/4 THGN/PCR800; DIY/3 temp, Teleinfo usb; RFLink; MYSensors v2.0/GW Lan/Power meter/RGB 3D; ESPeasy Oled, Nextion...

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


juchalin
Messages : 125
Enregistré le : 07 déc. 2016, 12:08

Re: Humidité du sol

Message par juchalin » 24 mai 2018, 07:20

Ok donc si je t'ai compris quand je plonge la sonde la deuxième led doit s'allumer.
Il ma un devise type général et sous type sol moisture

Merci pour ton aide.

juchalin
Messages : 125
Enregistré le : 07 déc. 2016, 12:08

Re: Humidité du sol

Message par juchalin » 24 mai 2018, 07:59

J'ai réglé la vise juste avant que la led sallule, quand je plonge dans l'eau elle s'allume est s'éteint quand je sort, mais toujours les même chiffres

juchalin
Messages : 125
Enregistré le : 07 déc. 2016, 12:08

Re: Humidité du sol

Message par juchalin » 24 mai 2018, 16:00

Je pense que c'est un problème de code, je vois que la bibliothèque math.h est incluse au début, je ne trouve aucune trace de cette bibliothèque dans l'IDE, mais je n'ai pas de problème de téléversement !

Datawolf
Messages : 25
Enregistré le : 03 avr. 2018, 13:51

Re: Humidité du sol

Message par Datawolf » 25 mai 2018, 15:55

Salut,
J'ai lu en diagonale et je vais peut-être dire une connerie.
Mais si measure(6,7,1) est la lecture de la sonde n°1 alors à quoi correspond measure(7,6,0) ?

hbachetti
Messages : 65
Enregistré le : 03 févr. 2018, 12:44
Localisation : Besançon

Re: Humidité du sol

Message par hbachetti » 27 mai 2018, 10:13

Salut

A mon sens le code proposé sur la page MYSENSORS ne correspond pas au matériel décrit.

Le matériel proposé comprend une sonde dont la résistance varie en fonction de l'humidité, plus un module comparateur avec un potentiomètre permettant de régler la sensibilité de déclenchement. La sortie se connecte à une entrée logique de l'ARDUINO.

Par contre le code fait une lecture analogique sur les pins A0 et A1, en alimentant la sonde à travers une résistance de 4.7K par les pins D6 et D7.

Le code attend une sonde analogique, sans le module comparateur et le hardware est fait pour piloter une entrée logique..

Pour répondre à la question :
Mais si measure(6,7,1) est la lecture de la sonde n°1 alors à quoi correspond measure(7,6,0) ?
La sonde est alimentée par les pins 6 et 7, à travers lune résistance de 4.7K, en appliquant du 5V sur D6 et du 0V sur D7, puis en appliquant du 5V sur D7 et du 0V sur D6. Le changement de polarité permet d'éviter l'oxydation de la sonde.
Par contre je ne m'explique pas la lecture sur deux entrées A0 et A1, à moins qu'il y ait deux sondes.

Donc pour résumer, il y a deux solutions :

* tu trouves un tuto correspondant à ton matériel
Tu enverras à DOMOTICZ une information binaire humide ou sec.
Pas top.

* tu utilises la sonde seule, sans le module comparateur.
Tu branches la sonde en série avec une résistance de 4.7K entre D6 et D7 et tu relies le point milieu à A0.

Code : Tout sélectionner

// Dans le code remplace :
measure(6,7,1);
// par 
measure(6,7,0);
@+

hbachetti
Messages : 65
Enregistré le : 03 févr. 2018, 12:44
Localisation : Besançon

Re: Humidité du sol

Message par hbachetti » 27 mai 2018, 11:24

Autre précision.
Le module comparateur semble disposer d'une sortie analogique que l'on peut brancher sur A0.
Tu peux essayer mais dans ce cas, l'alimentation de la sonde sera toujours faite dans le même sens, et il se produira une oxydation.
Bien sûr il faudra faire la même modif dans le code :

Code : Tout sélectionner

// Dans le code remplace :
measure(6,7,1);
// par
measure(6,7,0);
Dans ce cas, les pins 6 et 7 ne servent à rien.

@+

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre