3-in-1 Humidity Temp and Motion
-
Hi,
I took your updated code for 2.0 and tried to add a relay.
The code looks like this:#define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 //#define MY_RADIO_RFM69 #include <SPI.h> #include <MySensors.h> #include <DHT.h> #define CHILD_ID_HUM 10 #define CHILD_ID_TEMP 11 #define CHILD_ID_MOT 12 //motion sensor #define HUMIDITY_SENSOR_DIGITAL_PIN 4 #define DIGITAL_INPUT_SENSOR 3 // The digital input you attached your motion sensor. (Only 2 and 3 generates interrupt!) #define RELAY_1 7 // Arduino Digital I/O pin number for first relay (second on pin+1 etc) #define NUMBER_OF_RELAYS 1 // Total number of attached relays #define CHILD_ID 5 #define RELAY_ON 1 // GPIO value to write to turn on attached relay #define RELAY_OFF 0 // GPIO value to write to turn off attached relay DHT dht; float lastTemp; float lastHum; boolean metric = true; unsigned long interval= 3000;//dht.getMinimumSamplingPeriod(); // the time we need to wait unsigned long previousMillis=0; // millis() returns an unsigned long. unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds) MyMessage msgHum(CHILD_ID_HUM, V_HUM); MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); MyMessage msgMot(CHILD_ID_MOT, V_TRIPPED); //me void before() { for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) { // Then set relay pins in output mode pinMode(pin, OUTPUT); // Set relay to last known state (using eeprom storage) digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF); } } void setup() { dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); // metric = getConfig().isMetric; pinMode(DIGITAL_INPUT_SENSOR, INPUT); // sets the motion sensor digital pin as input } void presentation() { // Send the Sketch Version Information to the Gateway sendSketchInfo("4-1 Sensor", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID_HUM, S_HUM); present(CHILD_ID_TEMP, S_TEMP); present(CHILD_ID_MOT, V_TRIPPED); //me for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) { // Register all sensors to gw (they will be created as child devices) present(sensor, S_BINARY); } } void loop() { // Read digital motion value boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; // only run loop if time has passed. unsigned long currentMillis = millis(); // grab current time // check if "interval" time has passed if ((unsigned long)(currentMillis - previousMillis) >= interval) { send(msgMot.set(tripped?"1":"0")); #ifdef MY_DEBUG Serial.print("Motion: "); Serial.println(tripped); #endif // Fetch temperatures from DHT sensor float temperature = dht.getTemperature(); if (isnan(temperature)) { Serial.println("Failed reading temperature from DHT"); } else if (temperature != lastTemp) { lastTemp = temperature; if (!metric) { temperature = dht.toFahrenheit(temperature); } send(msgTemp.set(temperature, 1)); #ifdef MY_DEBUG Serial.print("T: "); Serial.println(temperature); #endif } // Fetch humidity from DHT sensor 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)); #ifdef MY_DEBUG Serial.print("H: "); Serial.println(humidity); #endif } // save the "current" time previousMillis = millis(); } // Sleep until interrupt comes in on motion sensor. Send update every two minute. //sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); } void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.type==V_STATUS) { // Change relay state digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF); // Store state in eeprom saveState(message.sensor, message.getBool()); // Write some debug info Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); } }However, when i look in domoticz the relay isnt presented as a child.
Plus, the motion sensor is called "S_LIGHT_LEVEL" and not "S_MOTION" as it does in my other device (that only have temp, hum motion and not a relay in the sketch).
temp/hum sensor and motion sensor works as intended in domoticz.
My first though is that the motion and relay somehow is a bit mixed up by the sketch, but im kinda new to this so im not sure.
Would really appreciate if someone can look at the sketch and see if there is any obvious problem :)Under "void presentation()" , present(CHILD_ID_MOT, V_TRIPPED); //me should be
present(CHILD_ID_MOT, S_MOTION); //me
that should fix the light level problem.
I haven't done a relay yet. If no one else responds I look at it later tonight. I also have a relay but haven't had time to try and implement it yet.
-
Hello everybody,
first off all a big thank you for creating this awsome sketch. It works perfect for me !!
But, as you might already have guessed I have a little problem.I built 2 exact same nodes and flashed the exact same sketch ( only thing I changed is the child ID´s) but one node works just like a charm ( MSPIRAndy) but the other one (MYSENSOR_106) doesnt transmit its readings (?)
Via the serial monitor the readings do exist and work perfect.
Thanks a lot, all help is appreciated
KOmaandy


-
Yes i did swap the radios, but what seems to be the problem is the arduino itself.
When swapping the arduinos ( both arduino pro mini 3,3 volt) both flashed with the same sketch one works and the other just doesnt.
I just swapped the arduinos on the breadboard and left everything else in place...
Thats really strange, given the fact that BOTH transmit good readings when connected to the arduino-serial-monitor ... -
Do you have a schematic that you could post?
-
Do you have a schematic that you could post?
-
@ryanbrown204 welcome to the MySensors community!
This is a long thread with a lot of different people posting, so it is a bit hard to guess which schematic you are looking for. Could you clarify?
@mfalkvidd the schematic for the original 3-in-1 Humidity Temp and Motion. I would like to try me hand at building the first version and then adding the additions.
-
@mfalkvidd the schematic for the original 3-in-1 Humidity Temp and Motion. I would like to try me hand at building the first version and then adding the additions.
@ryanbrown204 temperature: https://www.mysensors.org/build/temp
Motion: https://www.mysensors.org/build/motionSee the first post in this thread for the modifications Konrad did.
-
This post is deleted!
-
This post is deleted!