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. Development
  3. Powering a sensor with digital out

Powering a sensor with digital out

Scheduled Pinned Locked Moved Development
27 Posts 7 Posters 4.5k Views 7 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.
  • hozzeH Offline
    hozzeH Offline
    hozze
    wrote on last edited by
    #21

    Thanks guys, I will check this out.

    1 Reply Last reply
    0
    • hozzeH Offline
      hozzeH Offline
      hozze
      wrote on last edited by
      #22

      Was away from arduino for over a week with regular job. Tested the code with debug on a new arduino pro mini 3.3v 8Mhz and the below is the output ( please note that the values getting send are random values , i'm still not able to power the sensor with digital Pin )

      TSP:MSG:SEND 1-1-0-0 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=ok:0100
      TSP:MSG:SEND 1-1-0-0 s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=ok:2.0.0
      TSP:MSG:SEND 1-1-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=ok:0
      TSP:MSG:READ 0-0-1 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
      TSP:MSG:SEND 1-1-0-0 s=1,c=0,t=35,pt=0,l=0,sg=0,ft=0,st=ok:
      TSP:MSG:SEND 1-1-0-0 s=255,c=3,t=11,pt=0,l=10,sg=0,ft=0,st=ok:SoilSensor
      TSP:MSG:SEND 1-1-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=ok:0.1
      Request registration...
      TSP:MSG:SEND 1-1-0-0 s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=ok:2
      TSP:MSG:READ 0-0-1 s=255,c=3,t=27,pt=1,l=1,sg=0:1
      Node registration=1
      Init complete, id=1, parent=0, distance=1, registration=1
      TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:786
      TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:503
      TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:410
      TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:425
      TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:461
      TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:539
      TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:507
      TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:392
      

      Looks fine for me , still I can't turn a digital pin On :disappointed:

      Boots33B 1 Reply Last reply
      0
      • hozzeH hozze

        Was away from arduino for over a week with regular job. Tested the code with debug on a new arduino pro mini 3.3v 8Mhz and the below is the output ( please note that the values getting send are random values , i'm still not able to power the sensor with digital Pin )

        TSP:MSG:SEND 1-1-0-0 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=ok:0100
        TSP:MSG:SEND 1-1-0-0 s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=ok:2.0.0
        TSP:MSG:SEND 1-1-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=ok:0
        TSP:MSG:READ 0-0-1 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
        TSP:MSG:SEND 1-1-0-0 s=1,c=0,t=35,pt=0,l=0,sg=0,ft=0,st=ok:
        TSP:MSG:SEND 1-1-0-0 s=255,c=3,t=11,pt=0,l=10,sg=0,ft=0,st=ok:SoilSensor
        TSP:MSG:SEND 1-1-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=ok:0.1
        Request registration...
        TSP:MSG:SEND 1-1-0-0 s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=ok:2
        TSP:MSG:READ 0-0-1 s=255,c=3,t=27,pt=1,l=1,sg=0:1
        Node registration=1
        Init complete, id=1, parent=0, distance=1, registration=1
        TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:786
        TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:503
        TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:410
        TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:425
        TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:461
        TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:539
        TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:507
        TSP:MSG:SEND 1-1-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:392
        

        Looks fine for me , still I can't turn a digital pin On :disappointed:

        Boots33B Offline
        Boots33B Offline
        Boots33
        Hero Member
        wrote on last edited by
        #23

        @hozze It really should be working. I tried your original above and with a led connected to pin 5 it turns on when the code is run

        try the code below with some serial prints to see what happens

        // Enable debug prints to serial monitor
        #define MY_DEBUG
        #define MY_NODE_ID 150  // node id 
        #define MY_RADIO_NRF24  // enabling support for NRF radio module
        
        #define NODE_ID 1  // sensor id
        #define SENS_ON 5
        #define VAL_PROBE A0
        #include <MySensors.h>
        #define POWER_ON 1  //  value to write to turn on sensor
        #define POWER_OFF 0 //  value to write to turn off sensor
        MyMessage msg(NODE_ID, V_LEVEL); // constructing the msg
        
        void setup()
        {
          pinMode(SENS_ON, OUTPUT);
        }
        
        void presentation()
        {
          present(NODE_ID, S_MOISTURE);  // presenting the sensor
          sendSketchInfo("SoilSensor", "0.1"); //meta data
        }
        
        void loop()
        {
        
        
          digitalWrite(SENS_ON, POWER_ON);
          Serial.print("Sensor Power on pin "); Serial.print(SENS_ON); Serial.print(" is..."); Serial.println((POWER_ON));
          wait(1000); // To check the input voltage of pin 2
          int moisture = analogRead(VAL_PROBE); //measuring the moisture
          send(msg.set(moisture));  // sending the data
          digitalWrite(SENS_ON, POWER_OFF); // turn it off
          Serial.print("Sensor Power on pin "); Serial.print(SENS_ON); Serial.print(" is..."); Serial.println((POWER_OFF));
        
          wait(1000);
        }
        
        

        I get an output like this below and the led flashes on and off at 1 second intervals. Maybe try just a led with a 200 to 300 ohm resistor on pin 5 to see what is happening. could the moisture sensor be drawing more than the arduino can give?

        TSP:MSG:SEND 150-150-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,ft=1,st=ok:0
        TSP:MSG:READ 0-0-150 s=255,c=3,t=6,pt=0,l=1,sg=0:M
        TSP:MSG:SEND 150-150-0-0 s=1,c=0,t=35,pt=0,l=0,sg=0,ft=0,st=ok:
        TSP:MSG:SEND 150-150-0-0 s=255,c=3,t=11,pt=0,l=10,sg=0,ft=0,st=ok:SoilSensor
        TSP:MSG:SEND 150-150-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=ok:0.1
        Request registration...
        TSP:MSG:SEND 150-150-0-0 s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=ok:2
        TSP:MSG:READ 0-0-150 s=255,c=3,t=27,pt=1,l=1,sg=0:1
        Node registration=1
        Init complete, id=150, parent=0, distance=1, registration=1
        Sensor Power on pin 5 is...1
        TSP:MSG:SEND 150-150-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:511
        Sensor Power on pin 5 is...0
        Sensor Power on pin 5 is...1
        TSP:MSG:SEND 150-150-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:313
        Sensor Power on pin 5 is...0
        Sensor Power on pin 5 is...1
        TSP:MSG:SEND 150-150-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:254
        Sensor Power on pin 5 is...0
        Sensor Power on pin 5 is...1
        TSP:MSG:SEND 150-150-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:326
        Sensor Power on pin 5 is...0
        Sensor Power on pin 5 is...1
        TSP:MSG:SEND 150-150-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=ok:235
        Sensor Power on pin 5 is...0
        Sensor Power on pin 5 is...1
        
        1 Reply Last reply
        1
        • hozzeH Offline
          hozzeH Offline
          hozze
          wrote on last edited by
          #24

          I'm stupid ! @Boots33 the debug info saved me. With debug info I came to notice that the sketch goes into loop part only if the gateway is also connected and available. Stupid me was doing the pin checks just by connecting the sensor and keeping the gateway disconnected , when I had the gateway connected I didn't bother to check the pin out, I was going in the same loop and wasting my and all your valuable time.

          Thanks for all your assistance people, you guys are awesome.

          1 Reply Last reply
          2
          • Boots33B Offline
            Boots33B Offline
            Boots33
            Hero Member
            wrote on last edited by
            #25

            Great to hear you got it going, and don't worry I am sure everyone here ( including me) has there own moments they would rather forget when it comes to writing code. :)

            1 Reply Last reply
            1
            • xydixX Offline
              xydixX Offline
              xydix
              wrote on last edited by
              #26

              This sounds like a really good idea.
              Can I use this to power like a DS18B20 tempsensor. Would this save power and give my battery powered sensors extended battery life?

              bjacobseB 1 Reply Last reply
              0
              • xydixX xydix

                This sounds like a really good idea.
                Can I use this to power like a DS18B20 tempsensor. Would this save power and give my battery powered sensors extended battery life?

                bjacobseB Offline
                bjacobseB Offline
                bjacobse
                wrote on last edited by bjacobse
                #27

                @xydix
                Arduino using Atmega can supply max 40mA per pin, and in total max 100mA.
                DS18B20 seems to use max 1,5mA
                so yes this will work
                After searching on the net.
                https://github.com/nathanchantrell/TinyTX/blob/master/TinyTX_DS18B20/TinyTX_DS18B20.ino

                The part for the power on, read, power off is below (taken from the above link):

                void loop() {

                digitalWrite(ONE_WIRE_POWER, HIGH); // turn DS18B20 sensor on

                //Sleepy::loseSomeTime(5); // Allow 5ms for the sensor to be ready
                delay(5); // The above doesn't seem to work for everyone (why?)

                sensors.begin(); //start up temp sensor
                sensors.requestTemperatures(); // Get the temperature
                tinytx.temp=(sensors.getTempCByIndex(0)*100); // Read first sensor and convert to integer, reversed at receiving end

                digitalWrite(ONE_WIRE_POWER, LOW); // turn DS18B20 off

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


                28

                Online

                11.7k

                Users

                11.2k

                Topics

                113.1k

                Posts


                Copyright 2025 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