Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. My Project
  3. Small wall outlet sensor node

Small wall outlet sensor node

Scheduled Pinned Locked Moved My Project
40 Posts 17 Posters 24.0k Views 12 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • axillentA axillent

    I've created this to have easiest way to establish environment monitoring across the house
    the idea is to have a wall outlet type plug with everything on board
    and I like to do small things
    The board is less than 50 x 50 mm
    It contains AC-DC power supply with resettable fuse, 3.3V LDO, arduino based on atmega328, radio, LED, and two slots, one for DS18B20 and the second one is for DHT11/DHT22

    IMG_2117.JPG

    The real consumption measured by RMS wattmeter is just 0.3W
    IMG_2118.JPG

    O Offline
    O Offline
    olaeke
    wrote on last edited by
    #4

    @axillent Very nice! How do you make the circuit board and the soldering of surface mounted components is quit advanced.

    axillentA 1 Reply Last reply
    0
    • greglG gregl

      Really nice!

      I guess the DHT11/22 pin could also be used for PIR sensor or drive a relay/actuator.

      axillentA Offline
      axillentA Offline
      axillent
      Mod
      wrote on last edited by
      #5

      @gregl thanks, yes, the same board can be used for any simple 1-2 inputs or 1-2 channel actuator

      I have a plan to create something similar for wall switch in 3-wire and 2-wire versions

      sense and drive

      RJ_MakeR 1 Reply Last reply
      0
      • hekH hek

        Cool!

        @axillent, did you get a chance to test the MPL-03S-05E I sent you?

        axillentA Offline
        axillentA Offline
        axillent
        Mod
        wrote on last edited by axillent
        #6

        @hek thanks
        I read a datasheet and I doubt about where to use it
        it requires quite a big external filter
        the total size will be bigger than normal isolated AC-DC

        The supply based on none-isoleted schema is interested in some projects where you need lower footprint.

        If someone interested I will do a test

        sense and drive

        1 Reply Last reply
        0
        • axillentA Offline
          axillentA Offline
          axillent
          Mod
          wrote on last edited by
          #7

          Here are a schematic and PCB prints
          MySensors.Sens.atmega328-wall.jpeg

          MySensors.Sens.atmega328-wall.PDF

          sense and drive

          1 Reply Last reply
          0
          • O olaeke

            @axillent Very nice! How do you make the circuit board and the soldering of surface mounted components is quit advanced.

            axillentA Offline
            axillentA Offline
            axillent
            Mod
            wrote on last edited by
            #8

            @olaeke thanks!
            it is half-a-day project including a home-production of the PCB
            but it is a 2-year experience

            I also use a simplified approach for some PCBs, without drilling, using 0.5mm FR4 cut by office scissors and thermo-transfer technology. This one requires about 30-50 minutes for the production circle.depending on etching speed. For example this two side AC lamp off-timer:
            http://radiokot.ru/circuit/digital/automat/81/04.jpg
            http://radiokot.ru/circuit/digital/automat/81/05.jpg

            sense and drive

            1 Reply Last reply
            0
            • axillentA Offline
              axillentA Offline
              axillent
              Mod
              wrote on last edited by
              #9

              Pictures bellow are virtual, under printing

              MySensors.Sens.atmega328-wall modelview-02.JPG MySensors.Sens.atmega328-wall modelview-01.JPG

              sense and drive

              1 Reply Last reply
              2
              • gaduG Offline
                gaduG Offline
                gadu
                wrote on last edited by
                #10

                It would be cool with a 90degree angled version as well :)

                1 Reply Last reply
                0
                • HeinzH Offline
                  HeinzH Offline
                  Heinz
                  Hero Member
                  wrote on last edited by
                  #11

                  Excellent!

                  1 Reply Last reply
                  0
                  • axillentA axillent

                    @gregl thanks, yes, the same board can be used for any simple 1-2 inputs or 1-2 channel actuator

                    I have a plan to create something similar for wall switch in 3-wire and 2-wire versions

                    RJ_MakeR Offline
                    RJ_MakeR Offline
                    RJ_Make
                    Hero Member
                    wrote on last edited by
                    #12

                    @axillent Your an evil genius! :-)

                    RJ_Make

                    axillentA 1 Reply Last reply
                    0
                    • RJ_MakeR RJ_Make

                      @axillent Your an evil genius! :-)

                      axillentA Offline
                      axillentA Offline
                      axillent
                      Mod
                      wrote on last edited by axillent
                      #13

                      @ServiceXp thanks)
                      all this is simple, just a patient work

                      Printed thing is a bit ugly comparing to the virtual one, but it's work is real
                      IMG_2120.JPG IMG_2121.JPG
                      http://www.youtube.com/watch?v=JG7gutD1oo8

                      sense and drive

                      greglG bjornhallbergB 2 Replies Last reply
                      2
                      • axillentA axillent

                        @ServiceXp thanks)
                        all this is simple, just a patient work

                        Printed thing is a bit ugly comparing to the virtual one, but it's work is real
                        IMG_2120.JPG IMG_2121.JPG
                        http://www.youtube.com/watch?v=JG7gutD1oo8

                        greglG Offline
                        greglG Offline
                        gregl
                        Hero Member
                        wrote on last edited by
                        #14

                        @axillent So very very cool!!

                        as @gadu commented, making one at 90 deg so its very low profile would be even better for places such as hallways where the sensor could be bumped....

                        Really nice!

                        1 Reply Last reply
                        0
                        • blaceyB Offline
                          blaceyB Offline
                          blacey
                          Admin
                          wrote on last edited by
                          #15

                          @axillent - well done! :+1:

                          1 Reply Last reply
                          0
                          • axillentA axillent

                            @ServiceXp thanks)
                            all this is simple, just a patient work

                            Printed thing is a bit ugly comparing to the virtual one, but it's work is real
                            IMG_2120.JPG IMG_2121.JPG
                            http://www.youtube.com/watch?v=JG7gutD1oo8

                            bjornhallbergB Offline
                            bjornhallbergB Offline
                            bjornhallberg
                            Hero Member
                            wrote on last edited by
                            #16

                            @axillent Very impressive! What is the total cost of the components involved?

                            axillentA 1 Reply Last reply
                            0
                            • bjornhallbergB bjornhallberg

                              @axillent Very impressive! What is the total cost of the components involved?

                              axillentA Offline
                              axillentA Offline
                              axillent
                              Mod
                              wrote on last edited by axillent
                              #17

                              @bjornhallberg it is hard to say
                              the BOM is simple and short
                              but the cost of a single component is dramatically depends on how many your purchase in a single order
                              for example atmega328 purchased in 10pcs will be US1.2 pcs while a single pcs will costs US3-4

                              If it will be an interest I think in production this PCB can cost retail US8-12

                              sense and drive

                              gigiG 1 Reply Last reply
                              0
                              • axillentA axillent

                                @bjornhallberg it is hard to say
                                the BOM is simple and short
                                but the cost of a single component is dramatically depends on how many your purchase in a single order
                                for example atmega328 purchased in 10pcs will be US1.2 pcs while a single pcs will costs US3-4

                                If it will be an interest I think in production this PCB can cost retail US8-12

                                gigiG Offline
                                gigiG Offline
                                gigi
                                wrote on last edited by
                                #18

                                @axillent
                                very very cool!!

                                Vera lite - mysensors Ethernet gateway - AirWik sensor - Relay Module

                                1 Reply Last reply
                                0
                                • nutcrackerN Offline
                                  nutcrackerN Offline
                                  nutcracker
                                  wrote on last edited by
                                  #19

                                  Impressive!

                                  1 Reply Last reply
                                  0
                                  • axillentA Offline
                                    axillentA Offline
                                    axillent
                                    Mod
                                    wrote on last edited by
                                    #20

                                    made two more with modified box - it is a bit wider to hold DHT sensor inside
                                    I made a new sketch as a combination of Dalas example and DHT. This new sketch able to detect automatically connected sensors and work according to detection.

                                    One problem I've got. I cannot get DHT working from AC plug. It is working fine been powered from DC and failed during startup been powered from AC :( The most probably the reason is high pulsation (up to 440mV) coming from the supply based on SR10 chip.
                                    Dalas is fine with this but not DHT. Probably some code inside the library holds.

                                    Had to mark each sensor with radio channel because they will work with different gateways
                                    IMG_2144.JPG

                                    sense and drive

                                    1 Reply Last reply
                                    0
                                    • S Offline
                                      S Offline
                                      sharath krishna
                                      wrote on last edited by
                                      #21

                                      really cool :) what are u using to convert the AC-DC ? how u doing it ?

                                      axillentA J 2 Replies Last reply
                                      0
                                      • S sharath krishna

                                        really cool :) what are u using to convert the AC-DC ? how u doing it ?

                                        axillentA Offline
                                        axillentA Offline
                                        axillent
                                        Mod
                                        wrote on last edited by
                                        #22

                                        @sharath-krishna thanks

                                        yearly in this thread you can find a schematics.
                                        I'm using here SR10. Many alternatives were discussed here http://forum.mysensors.org/topic/687/230v-power-supply-to-arduino

                                        I've found a solution to my problem with DHT. I put delay(500) at the beginning of setup().
                                        This is needed to stabilize DC before initializing DHT.
                                        Alternatively a 4.7uF capacitor can be connected between RESET and GND

                                        sense and drive

                                        1 Reply Last reply
                                        0
                                        • axillentA Offline
                                          axillentA Offline
                                          axillent
                                          Mod
                                          wrote on last edited by
                                          #23

                                          This is my combined sketch with automatic detection of connected many DS18B20 and DHT11/22

                                          #define RADIO_CHANNEL		76
                                          
                                          #define DS18B20_PIN			A0
                                          #define DS18B20_MAX_SENSORS	8
                                          #define DHT_PIN				A5
                                          #define LED_PIN				5
                                          #define SLEEP_TIME_SEC		60
                                          
                                          #include <avr/wdt.h>
                                          #include <avr/interrupt.h>
                                          #include <avr/sleep.h>
                                          
                                          #include <MySensor.h>
                                          #include <SPI.h>
                                          #include <DallasTemperature.h>
                                          #include <OneWire.h>
                                          #include <DHT.h>
                                          
                                          // DS18B20
                                          OneWire oneWire(DS18B20_PIN);
                                          DallasTemperature	sensors(&oneWire);
                                          
                                          MyMessage msgHum(0, V_HUM);
                                          MyMessage msgTemp(0, V_TEMP);
                                          
                                          struct {
                                          	struct {
                                          		uint8_t	count;
                                          		float	lastTemperature[DS18B20_MAX_SENSORS];	
                                          	} ds18b20;
                                          	struct {
                                          		DHT		sensor;
                                          		uint8_t	count;
                                          		float lastTemp;
                                          		float lastHum;
                                          	} dht;
                                          	MySensor gw;
                                          } var;
                                          
                                          ISR(WDT_vect) {
                                          }
                                          
                                          void setup()
                                          {
                                          	wdt_disable();
                                          	//delay(500);
                                          
                                          	pinMode(LED_PIN, OUTPUT);
                                          	digitalWrite(LED_PIN, HIGH);
                                          
                                          	// init mysensors
                                          	var.gw.begin(NULL, AUTO, false, AUTO, RF24_PA_LEVEL,RADIO_CHANNEL);
                                          
                                          	// init dalas
                                          	sensors.begin();
                                          	var.ds18b20.count = sensors.getDeviceCount();
                                          	if(var.ds18b20.count > DS18B20_MAX_SENSORS) var.ds18b20.count = DS18B20_MAX_SENSORS;
                                          
                                          	// init dht
                                          	digitalWrite(LED_PIN, LOW);
                                          	var.dht.sensor.setup(DHT_PIN);
                                          	float temperature = var.dht.sensor.getTemperature();
                                          	var.dht.count = (isnan(temperature))?0:1; 
                                          
                                          	var.gw.sendSketchInfo("WallCombined", "1.0");
                                          
                                          	// present ds18b20
                                          	for (int i=0; i<var.ds18b20.count; i++) {
                                          		var.gw.present(i+2, S_TEMP);
                                          	}
                                          	if(var.dht.count) {
                                          		var.gw.present(0, S_HUM);
                                          		var.gw.present(1, S_TEMP);		
                                          	}
                                          	var.gw.debugPrint(PSTR("Init of combined sensor: %d ds18b20 sensors, %d dht sensors\n"), var.ds18b20.count, var.dht.count);
                                          	for(int i=0; i < var.ds18b20.count + var.dht.count; i++) {
                                          		digitalWrite(LED_PIN, LOW);
                                          		delay(500);
                                          		digitalWrite(LED_PIN, HIGH);
                                          		delay(1000);
                                          	}
                                          }
                                          
                                          void loop()
                                          {
                                          	// Process incoming messages (like config from server)
                                          	var.gw.process();
                                          
                                          	// Fetch temperatures from Dallas sensors
                                          	if(var.ds18b20.count) sensors.requestTemperatures();
                                          
                                          	// Read temperatures and send them to controller
                                          	for (int i=0; i<var.ds18b20.count; i++) {
                                            
                                          		// Fetch and round temperature to one decimal
                                          		float temperature = static_cast<float>(static_cast<int>((var.gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
                                            
                                          		// Only send data if temperature has changed and no error
                                          		if (var.ds18b20.lastTemperature[i] != temperature && temperature != -127.00) {
                                          	  
                                          			// Send in the new temperature
                                          			var.gw.send(msgTemp.setSensor(i+2).set(temperature,1));
                                          			var.ds18b20.lastTemperature[i]=temperature;
                                          		}
                                          	}
                                          
                                          	if(var.dht.count) {
                                          		boolean metric = var.gw.getConfig().isMetric;
                                          		float temperature = var.dht.sensor.getTemperature();
                                          	
                                          		if (isnan(temperature)) {
                                          			var.gw.debugPrint(PSTR("Failed reading temperature from DHT\n"));
                                          		} else if (temperature != var.dht.lastTemp) {
                                          			var.dht.lastTemp = temperature;
                                          			if (!metric) {
                                          				temperature = var.dht.sensor.toFahrenheit(temperature);
                                          			}
                                          			var.gw.send(msgTemp.setSensor(1).set(temperature, 1));
                                          		}
                                          
                                          		float humidity = var.dht.sensor.getHumidity();
                                          		if (isnan(humidity)) {
                                          			var.gw.debugPrint(PSTR("Failed reading humidity from DHT"));
                                          		} else if (humidity != var.dht.lastHum) {
                                          			var.dht.lastHum = humidity;
                                          			var.gw.send(msgHum.setSensor(0).set(humidity, 1));
                                          		}
                                          	}
                                          
                                          	digitalWrite(LED_PIN, HIGH);
                                          	delay(5000);
                                          	digitalWrite(LED_PIN, LOW);
                                          	delay(500);
                                          
                                          	// sleep
                                          	Serial.flush();
                                          	var.gw.powerDown();
                                          
                                          	for(int wdt_count=SLEEP_TIME_SEC; wdt_count > 0; wdt_count--) {
                                          		wdt_enable(WDTO_1S);
                                          		WDTCSR |= (1 << WDIE);
                                          		set_sleep_mode(SLEEP_MODE_PWR_DOWN);
                                          		sleep_enable();
                                          		sei();
                                          		sleep_cpu();
                                          		sleep_disable();
                                          	}
                                          
                                          	wdt_disable();
                                          }
                                          

                                          sense and drive

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          8

                                          Online

                                          11.7k

                                          Users

                                          11.2k

                                          Topics

                                          113.0k

                                          Posts


                                          Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • MySensors
                                          • OpenHardware.io
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular