Powering a sensor with digital out



  • Hi,

    I'm trying to power a sensor with one of the digital pins of Arduino. Issue I'm facing is I'm unable to turn on digital pin, I have tried quite few options. I feel I'm missing something simple but its wrecking my brain. Can any one of you look at the code and see what I'm doing wrong, please.

    Arduino : pro mini Atmega168 3.3v

    #define MY_NODE_ID 1  // node id 
    #define MY_RADIO_NRF24  // enabling support for NRF radio module
    #define NODE_ID 1  // sensor id
    #define SENS_ON 2
    #include <MySensors.h>
    #include <SPI.h>
    
    
    MyMessage msg(NODE_ID, V_LEVEL); // constructing the msg
    const int VAL_PROBE = 0; // initializing the moisture variable
    
    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, HIGH);
      delay(10000); // To check the input voltage on pin 2
      int moisture = analogRead(VAL_PROBE); //measuring the moisture
      send(msg.set(moisture));  // sending the data 
      sleep(1000);  // sleeping for 10 sec
    }
    

  • Contest Winner

    @hozze

    try this

    void loop()
    {
      digitalWrite(SENS_ON, HIGH);
    
      delay(10000); // To check the input voltage on pin 2
    // byTheo 10 seconds seems to be a bit much??
    
      int moisture = analogRead(VAL_PROBE); //measuring the moisture
    
      digitalWrite(SENS_ON, LOW); // turn it off
    //byTheo you didn't turn the pin off
    
    
      send(msg.set(moisture));  // sending the data 
      sleep(10000);  // sleeping for 10 sec
    // byTheo 1000 s isn't 10 secs 
    }

  • Mod

    @hozze I'm using a similar solution if my office plant monitoring. It works well. What observation made you think that it doesn't work? Have you tried measuring the output pin with a multimeter? Could you show your wiring diagram?


  • Mod

    You could try changing

    const int VAL_PROBE = 0; // initializing the moisture variable
    

    to

    #define VAL_PROBE A0
    

    I don't see any point in declaring it const int, and I prefer to use the An naming to make it clear which pin I am using.



  • @TheoL , Thanks for the suggestion . Tried that, same result.

    @mfalkvidd , Thanks for the code suggestion, I made the change. Regarding the issue, I did check with a multi-meter and it shows 0V . To make sure I also used the example blink sketch with pin 2 as output and it is showing 3.24V I will attach the wiring diagram(I haven't drawn one). Things I noticed.

    • On commenting the Mysensor.h library and related code from above sketch I'm able to turn on the Pin
    • I tried using different digital pins and same result.
    • To make sure I measured the output pin voltage powering it with USB ( without connecting the board to radio and soil sensor ) , same result voltage is 0V

  • Mod

    @hozze looks like good troubleshooting, great work.

    Very interesting that it works when uncommenting the MySensors stuff. I think there are some leds blinking features in 2.0 (have not yet moved to 2.0 myself so I don't know more than what I've read in the forum), but I think that is only enabled for gateways.

    Does it help if you remove include <SPI.h>? It looks like SPI is not used so it shouldn't make a difference but you might as well remove it if you aren't using it.


  • Mod

    @mfalkvidd said:

    there are some leds blinking features in 2.0

    This feature is also present in previous versions and not limited to gateways.
    Pin 2 however is never used for leds as it is the default irq pin for nRF.
    Try with another pin, e.g. 4/5/6 and see if that makes a difference.



  • @mfalkvidd : Removed SPI.h , it didn't help though. Thanks for pointers on cleaning up the code :smiley:
    @Yveaux :
    Tried with pin 5 , same result.
    Tried using a different pro mini ( Atmega328 16Mhz 5 v ) got same result , no output on pin :expressionless:


  • Mod

    @hozze make sure you don't define MY_LEDS_BLINKING_FEATURE or MY_INCLUSION_MODE_FEATURE, as their pin mappings might interfere with your application.



  • @Yveaux I don't have those defined. Below is my current code.

    #define MY_NODE_ID 1  // 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>
    
    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, HIGH);
      delay(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, LOW); // turn it off
    //  sleep(1000);  // sleeping for 10 sec
    }
    

    An as soon as I comment it out like below the pin out on 5 works

    #define MY_NODE_ID 1  // 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>
    
    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, HIGH);
      delay(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, LOW); // turn it off
    //  sleep(1000);  // sleeping for 10 sec
    }
    

  • Mod

    @hozze it's strange that you only measure 3.24V on the output pin if you're using a 5V pro mini. This is IMHO an indication that something is wrong, also when your pin does seem to toggle.



  • I see that output on pro mini Atmega168 3.3v with commented sketch.
    I tried with a different 5v pro mini Atmega368 and I'm getting 5.04V on output pin with commented sketch.


  • Contest Winner

    @Yveaux @hozze Are you sure it's a ProMini 5V? Could you measure the voltage on the Raw pin.

    I've received some Pro Mini 3.3V while I actually did order 5V.

    It's just a guess.



  • @TheoL I have two pro mini's. I measured the voltage across a output pin ( HIGH ) and GND and it gives me near 5V on one and near 3.3V on another .So it looks as if I do have 5V pro mini.

    I have tried few other sketches on both, seems they are working fine, I face the specific issue only when including the Mysensor.h library. I will give it a try on a nano that I have and see what happens.


  • Contest Winner

    @hozze It was just a guess. I once compiled a sketch for a 5V and uploaded it to a ProMini 3.3V. Took me a while before I noticed my mistake. I just didn;t understand why my Arduino couldn't control my relay boards ;-)



  • @TheoL :smiley: me too learning things the hard way.

    Thanks for all the pointers that you guys are giving . Looks as if I'm in the right place and with a great community,

    Let me tinker a bit more and see if I can get somewhere, if anyone can give any further info kindly do.


  • Hero Member

    @hozze You should enable debugging at the top of your sketch with

    // Enable debug prints to serial monitor
    #define MY_DEBUG
    

    and check the serial monitor to see if the radio is initialising . Maybe the loop part of the program will not run if this does not happen. That could be why commenting out the #include <MySensors.h> allows it to work.

    You might also use wait instead of delay



  • @Boots33 , I enabled MY_DEBUG. Sorry if I sound stupid. I have connected the pro mini to computer with USB serial CP2102 for programming/serial debug , at the same time can I power the pro mini + Radio with an external power supply 3.3V ?

    I did something similar with a ATTINY85 few days back and bricked it :cry: ( Connected it to USB and same time powered it )


  • Mod

    @hozze connect gnd from the serial adapter AND the external power supply to gnd on the Arduino. Connect + on the external adapter to the pin you normally use (vcc or raw). Do not connect + from the serial adapter. That's it.


  • Hero Member

    @hozze The whole purpose of a good forum is for people to share ideas and knowledge. So never be worried about asking questions. :)


Log in to reply
 

Looks like your connection to MySensors Forum was lost, please wait while we try to reconnect.