Skech using DHT11/LDR and SoilMoisture from itead. (Solved solution inside)
-
This is good? i think is not, maybe someone can check?
Regards.// Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 //#define MY_RADIO_RFM69 //Including nescessary libraries #include <SPI.h> #include <MySensors.h> #include <DHT.h> //Defining child ID's and sensor pins //#define MY_NODE_ID 2 #define LIGHTLEVEL 0 #define HUMIDITY 1 #define TEMPERATURE 2 #define SOILHUMDITY 3 //agregado soil #define HUMIDITY_SENSOR_DIGITAL_PIN 3 #define LIGHT_SENSOR_ANALOG_PIN A0 #define ANALOG_INPUT_SOIL_SENSOR A1 // agregado soil DHT dht; //Defining values to store sensor information int LightLevel = 0; int lastLightLevel; int lastSoilValue = -1; // agregado soil float lastTemp; float lastHum; boolean metric = true; //Defining sleep and wait times unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)(30 seconds) #define MESSAGEWAIT 500 MyMessage LightMsg(LIGHTLEVEL, V_LIGHT_LEVEL); MyMessage msgHum(HUMIDITY, V_HUM); MyMessage msgTemp(TEMPERATURE, V_TEMP); MyMessage sHum(SOILHUMDITY, V_HUM); //agregado soil void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Sensor Pot", "1.0"); wait(MESSAGEWAIT); // Register all sensors to gateway (they will be created as child devices) present(LIGHTLEVEL, S_LIGHT_LEVEL); wait(MESSAGEWAIT); present(HUMIDITY, S_HUM); wait(MESSAGEWAIT); present(TEMPERATURE, S_TEMP); wait(MESSAGEWAIT); present(SOILHUMDITY, S_HUM); } void setup() { dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); pinMode(ANALOG_INPUT_SOIL_SENSOR, INPUT); } void loop() { delay(dht.getMinimumSamplingPeriod()); float temperature = dht.getTemperature(); if (isnan(temperature)) { Serial.println("Failed reading temperature from DHT"); } else if (temperature != lastTemp) { lastTemp = temperature; send(msgTemp.set(temperature, 1)); Serial.print("T: "); Serial.println(temperature); } float humidity = dht.getHumidity(); if (isnan(humidity)) { Serial.println("Failed reading humidity from DHT"); } else if (humidity != lastHum) { lastHum = humidity; send(msgHum.set(humidity, 1)); Serial.print("H: "); Serial.println(humidity); } int lightLevel = (1023-analogRead(LIGHT_SENSOR_ANALOG_PIN))/10.23; Serial.println(lightLevel); if (lightLevel != lastLightLevel) { send(LightMsg.set(lightLevel)); lastLightLevel = lightLevel; } // Read analog soil value int soilValue = analogRead(ANALOG_INPUT_SOIL_SENSOR); if (soilValue != lastSoilValue) { Serial.print("Soil Value: "); Serial.println(soilValue); send(sHum.set(soilValue)); } sleep(SLEEP_TIME); } -
This is good? i think is not, maybe someone can check?
Regards.// Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 //#define MY_RADIO_RFM69 //Including nescessary libraries #include <SPI.h> #include <MySensors.h> #include <DHT.h> //Defining child ID's and sensor pins //#define MY_NODE_ID 2 #define LIGHTLEVEL 0 #define HUMIDITY 1 #define TEMPERATURE 2 #define SOILHUMDITY 3 //agregado soil #define HUMIDITY_SENSOR_DIGITAL_PIN 3 #define LIGHT_SENSOR_ANALOG_PIN A0 #define ANALOG_INPUT_SOIL_SENSOR A1 // agregado soil DHT dht; //Defining values to store sensor information int LightLevel = 0; int lastLightLevel; int lastSoilValue = -1; // agregado soil float lastTemp; float lastHum; boolean metric = true; //Defining sleep and wait times unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)(30 seconds) #define MESSAGEWAIT 500 MyMessage LightMsg(LIGHTLEVEL, V_LIGHT_LEVEL); MyMessage msgHum(HUMIDITY, V_HUM); MyMessage msgTemp(TEMPERATURE, V_TEMP); MyMessage sHum(SOILHUMDITY, V_HUM); //agregado soil void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Sensor Pot", "1.0"); wait(MESSAGEWAIT); // Register all sensors to gateway (they will be created as child devices) present(LIGHTLEVEL, S_LIGHT_LEVEL); wait(MESSAGEWAIT); present(HUMIDITY, S_HUM); wait(MESSAGEWAIT); present(TEMPERATURE, S_TEMP); wait(MESSAGEWAIT); present(SOILHUMDITY, S_HUM); } void setup() { dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); pinMode(ANALOG_INPUT_SOIL_SENSOR, INPUT); } void loop() { delay(dht.getMinimumSamplingPeriod()); float temperature = dht.getTemperature(); if (isnan(temperature)) { Serial.println("Failed reading temperature from DHT"); } else if (temperature != lastTemp) { lastTemp = temperature; send(msgTemp.set(temperature, 1)); Serial.print("T: "); Serial.println(temperature); } float humidity = dht.getHumidity(); if (isnan(humidity)) { Serial.println("Failed reading humidity from DHT"); } else if (humidity != lastHum) { lastHum = humidity; send(msgHum.set(humidity, 1)); Serial.print("H: "); Serial.println(humidity); } int lightLevel = (1023-analogRead(LIGHT_SENSOR_ANALOG_PIN))/10.23; Serial.println(lightLevel); if (lightLevel != lastLightLevel) { send(LightMsg.set(lightLevel)); lastLightLevel = lightLevel; } // Read analog soil value int soilValue = analogRead(ANALOG_INPUT_SOIL_SENSOR); if (soilValue != lastSoilValue) { Serial.print("Soil Value: "); Serial.println(soilValue); send(sHum.set(soilValue)); } sleep(SLEEP_TIME); }@Tagore.PDE I don't think it's appropriate to post a sketch and ask if it's a good sketch. Please be more specific. Like do you have errors? Does something not work?
-
Sorry about that, maybe the Controller ( Domoticz ) is not taking the soilmoisture correctly.
I see that he send 3 digits number, like this:
But domoticz show me like this:

So maybe is confused? or ai m confused?
Regards
-
Sorry about that, maybe the Controller ( Domoticz ) is not taking the soilmoisture correctly.
I see that he send 3 digits number, like this:
But domoticz show me like this:

So maybe is confused? or ai m confused?
Regards
@Tagore.PDE I had a quick peak at your sketch. You're presenting the soil moisture sensor as a humidity sensor. That way Domoticz treats it as a humidity temp sensor.
If you want to be able to see the moisture level you could present it as a light level
// Register all sensors to gateway (they will be created as child devices) gw.present(CHILD_ID_LIGHT, S_LIGHT_LEVEL);But maybe @mfalkvidd has a better solution. Not sure what he uses for his office plant monitoring.
I just used the digitial output of the soil moisture sensor. Because I was only interested in the fact that my plants are thirsty.
Hope this helps.
-
@TheoL thx for your feedback.
-
For the record, to send in %, next code:
int soilValue = analogRead(ANALOG_INPUT_SOIL_SENSOR); soilValue = constrain(soilValue, 420, 1023); soil = map(soilValue, 420, 1023, 100, 0); if (soil != lastSoilValue) { send(msgHumSoil.set(soil)); // Send in percent lastSoilValue = soil;``` -
Hi @tlpeter , cna share one example?
Regards.
-
I think i get it, @tlpeter :
MyMessage msgHumSoil(SOILHUMDITY, V_LEVEL); void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Sensor POT", "1.1"); wait(MESSAGEWAIT); // Register all sensors to gateway (they will be created as child devices) present(SOILHUMDITY, S_MOISTURE);
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login