Hi, I have to build a small soil moisture monitor for 4 type of soil at the same time (the test was made on the same soil/same moisture). I build sensor and code a sketch (based on GardenBot) to read 4 of them from Arduino Uno. I've got some weird read value. In my test, i can see that the DigitalPin 5 and 10 cannot provide enough power for the sensor?? Someone know why? I also try to use AnalogPin 5 to 2 and only pin 2 and 3 give good reading.... I change the ATMEGA328p because i have spare and nothing change. I post the last sketch revision i made. In this sketch i can have good reading from sensor #2, #3 and #4 but the sensor #1 give me random number ranging from 400 to 800. I also post a picture to show how the sensor is made. For the 57-100K resistor i put 100K on all sensor. Help please!!
#define voltageFlipPin11 2
#define voltageFlipPin12 3
#define voltageFlipPin21 4
#define voltageFlipPin22 6
#define voltageFlipPin31 7
#define voltageFlipPin32 8
#define voltageFlipPin41 9
#define voltageFlipPin42 11
#define sensorPin1 5
#define sensorPin2 3
#define sensorPin3 1
#define sensorPin4 0
int flipTimer = 1000;
int currentsensor=1;
int val11;
int val12;
int avg1;
int val21;
int val22;
int avg2;
int val31;
int val32;
int avg3;
int val41;
int val42;
int avg4;
void setup(){
Serial.begin(9600);
pinMode(voltageFlipPin11, OUTPUT);
pinMode(voltageFlipPin12, OUTPUT);
pinMode(voltageFlipPin21, OUTPUT);
pinMode(voltageFlipPin22, OUTPUT);
pinMode(voltageFlipPin31, OUTPUT);
pinMode(voltageFlipPin32, OUTPUT);
pinMode(voltageFlipPin41, OUTPUT);
pinMode(voltageFlipPin42, OUTPUT);
digitalWrite(voltageFlipPin11, LOW);
digitalWrite(voltageFlipPin12, LOW);
digitalWrite(voltageFlipPin21, LOW);
digitalWrite(voltageFlipPin22, LOW);
digitalWrite(voltageFlipPin31, LOW);
digitalWrite(voltageFlipPin32, LOW);
digitalWrite(voltageFlipPin41, LOW);
digitalWrite(voltageFlipPin42, LOW);
pinMode(sensorPin1, INPUT);
pinMode(sensorPin2, INPUT);
pinMode(sensorPin3, INPUT);
pinMode(sensorPin4, INPUT);
}
void loop(){
switch (currentsensor){
case 1:
digitalWrite(voltageFlipPin11, HIGH);
digitalWrite(voltageFlipPin12, LOW);
delay(flipTimer);
val11 = analogRead(sensorPin1);
delay(flipTimer);
digitalWrite(voltageFlipPin11, LOW);
digitalWrite(voltageFlipPin12, HIGH);
delay(flipTimer);
val12 = 1023 - analogRead(sensorPin1);
avg1 = (val11 + val12) / 2;
digitalWrite(voltageFlipPin11, LOW);
digitalWrite(voltageFlipPin12, LOW);
++currentsensor;
break;
case 2:
digitalWrite(voltageFlipPin21, HIGH);
digitalWrite(voltageFlipPin22, LOW);
delay(flipTimer);
val21 = analogRead(sensorPin2);
delay(flipTimer);
digitalWrite(voltageFlipPin21, LOW);
digitalWrite(voltageFlipPin22, HIGH);
delay(flipTimer);
val22 = 1023 - analogRead(sensorPin2);
avg2 = (val21 + val22) / 2;
digitalWrite(voltageFlipPin21, LOW);
digitalWrite(voltageFlipPin22, LOW);
++currentsensor;
break;
case 3:
digitalWrite(voltageFlipPin31, HIGH);
digitalWrite(voltageFlipPin32, LOW);
delay(flipTimer);
val31 = analogRead(sensorPin3);
delay(flipTimer);
digitalWrite(voltageFlipPin31, LOW);
digitalWrite(voltageFlipPin32, HIGH);
delay(flipTimer);
val32 = 1023 - analogRead(sensorPin3);
avg3 = (val31 + val32) / 2;
digitalWrite(voltageFlipPin31, LOW);
digitalWrite(voltageFlipPin32, LOW);
++currentsensor;
break;
case 4:
digitalWrite(voltageFlipPin41, HIGH);
digitalWrite(voltageFlipPin42, LOW);
delay(flipTimer);
val41 = analogRead(sensorPin4);
delay(flipTimer);
digitalWrite(voltageFlipPin41, LOW);
digitalWrite(voltageFlipPin42, HIGH);
delay(flipTimer);
val42 = 1023 - analogRead(sensorPin4);
avg4 = (val41 + val42) / 2;
digitalWrite(voltageFlipPin11, LOW);
digitalWrite(voltageFlipPin12, LOW);
++currentsensor;
break;
case 5:
Serial.print("Valeur sensor #1: ");
Serial.println(avg1);
Serial.println();
Serial.print("Valeur sensor #2: ");
Serial.println(avg2);
Serial.println();
Serial.print("Valeur sensor #3: ");
Serial.println(avg3);
Serial.println();
Serial.print("Valeur sensor #4: ");
Serial.println(avg4);
Serial.println("-----------------------");
Serial.print("Valeur moyenne de tout les sensors: ");
Serial.println((avg1+avg2+avg3+avg4)/4);
Serial.println();
Serial.println();
currentsensor=1;
break;
}
}
And the sensors. I coated the upper of the sensor with paraffin because water have tendency to accumulate on the little piece of board and cause bad reading.