💬 Battery Powered Sensors
-
Ok thnx guys, guess I'll be ordering a pro mini very soon!
-
@Sebex - i think thats the easiest way, but sometimes its fun to try to create something new - its not impossible, but I would try to reverse engineer the nano (already done - search arduino nano schematic) and there you have to identify all "not essential" components and remove those (ie, making it a big pro-mini) to be able to get the current down as much as possible.
-
@Sebex said in Battery Powered Sensors:
A bit off topic maybe, but I was wondering how the 'pros' around here make the sensor small and sturdy for Arduino's with Si7021+ 2xAA battery pack. My DuPont wires seem a bit loose, so I'm wondering whether I should solder them. And perhaps someone 3d printed a case for an Arduino+Batterypack or some sorts.
You may want to try wire wrapping. It’s faster than soldering, sturdier than DuPont and you can connect multiple wires on same pin. Works wonders for gnd and vcc. Of course if the project is yanked harder, the wire wraps come out.
I made this small video for my home automation group in India. - hence prices for the wire wraps and tool are mentioned in local currency. I leant about this amazing technique from Andreas Spiess
my video
guy with Swiss accent
-
@Puneit-Thukral Both DuPont and wirewrap are generally considered as prototyping methods. For final device build and production more secure connections should be implemented.
-
@skywatch Agree with every word of yours. Not justifying myself here but wirewraps are deployed all over my house. I pour some hot glue to ensure that they don’t come loose. And then a 3D printed enclosure takes care of the elements.
Also, it helps me to quickly repurpose the hardware.
It’s just another approach.
In an ideal world - where PCB shipments never arrive from China and locally they are a but expensive , this is my poor man’s alternative. Example photos. The coin cell holder is diy. Used shaving blades and wrapped wires and taped to create a circuit.
-
@Puneit-Thukral I understand 'poor mans alternative' soooo well!
Glue on the wirewraps will help keep them in place and mitigate thermal stress to some degree and also stop dust and moisture. But over time the glue will change and shrink/crack and things will start to become strange with that arrangement.
It's hard to beat a good soldered joint in the end, that's why all the commercial kit is done that way.
Nice case BTW. I also am working on 3D printed cases for some nodes. Another 6 weeks of lockdown and I should have started on them!
-
@Puneit-Thukral interesting! Seems as a better option than Dupont, I'm gonna look into it.
You mention hot glueing the wires yourself as extra protection. But I imagine you can also put a layer of solder on it right?
-
@Sebex yes, of course. I have done that as well. In case I need to repurpose something , removing solder completely away is a tougher job for me than peeling away a layer of glue. Guess, I am just lazy.
-
@Puneit-Thukral haha okay I see.
Another question, your case that you use in the video snaps onto the pins perfectly it seems. Did you 3d print that yourself? I'm looking to 3D print a case for my pro mini and some other sensors that snaps in a similar way so that nothing moves around. However I'd rather copy a proven design than figuring out the tolerances myself.
-
@Sebex Yes, I 3D printed on my ender 3 and I am using this on nodemcu running ESPhome. But I did not design it. Here is the Thingiverse link to it.
Nodemcu caseI would love to do similar case and a larger case like this to fit other boards. Its rock solid. I do not have skills to make a linear pattern like this. I think I should figure out how to do it.
-
@Puneit-Thukral cool, from what I read the pins are the same size as on Arduino's. I'll use this design to create one for myself.
-
@Sebex Do share the STL - it will be great and if you use Fusion360, then may I request for the F3D file.. I am semi-skilled when it comes to designing
-
@Puneit-Thukral Will do!
After closer inspection the pins of the NodeMCU seem to be a lot bigger in size. However I am struggling to find the correct sizing of Arduino Pro Mini pins (width/thickness). The spacing between pins and length of them are easy to find but I cannot find the thickness at all. Do you have an idea?
-
@Sebex Will this help
https://grabcad.com/library/arduino-pro-mini-1
and should we move this conversation to another topic /PM as this is not relevant to this thread.
-
@mfalkvidd, on the image I see the following marking in red
VCC ==> N/C
Do you know what the meaning is?
This VCC pin and the other VCC pin at the bottom of the image are connected. I verified with the multimeter.
So, what's the purpose of this remark?These pins at the right are used to program the pro mini. I had no problems to program after removing the led and the power regulator. The programmer used the VCC to power the pro mini without any problem...
-
@evb I believe that the reason is to physically (and electrically) isolate the voltage regulator from the circuit. Then only VCC will work and not RAW.
Essentially the same as removing the led or it's series resistor (only one or the other will do) and the regulator from the board.
-
@skywatch, you mean that in normal conditions with the power regulator, we connect the power supply (max 16VDC) to the raw pin and can take 3.3V or 5V, depending on which version, at the pin VCC?
And that now it isn't possible anymore with the regulator removed?I would propose to change the picture :
- there are 2 VCC pins, so the current picture is confusing
- adapt the drawing and mention to connect the battery (2xAA) 3V directly to VCC pin at the bottom (not the VCC pin in the programming row of contacts!)
@skywatch and @mfalkvidd, what do you think?
-
@evb said in Battery Powered Sensors:
@skywatch, you mean that in normal conditions with the power regulator, we connect the power supply (max 16VDC) to the raw pin and can take 3.3V or 5V, depending on which version, at the pin VCC?
And that now it isn't possible anymore with the regulator removed?Yes, because the regulator will drain batteries faster using raw than connecting an appropriate voltage to VCC....
I would propose to change the picture :
- there are 2 VCC pins, so the current picture is confusing
- adapt the drawing and mention to connect the battery (2xAA) 3V directly to VCC pin at the bottom (not the VCC pin in the programming row of contacts!)
@skywatch and @mfalkvidd, what do you think?
I think it is up to the user to decide what pins they want to connect to and why.
-
@evb I don't know what the N/C text means. Presumably N/C stands for Not Connected, but I don't understand what isn't (or shouldn't?) be connected, so I can't say anything about that part unfortunately.
The device can be powered through any of the two Vcc pins. Use the one that is most convenient.
I am not aware of any Arduinos that can handle 16V input on the raw pin. Most clones don't even handle 12V.
If the regulator is removed, the Arduino can no longer be powered through the raw pin.
-
@mfalkvidd That's why I propose to adapt the article and image
If even experienced people like you don't know what it means, what should beginners think?
I was confused and did some extra research on schematics, etc on the internet and measurements on my pro mini, afraid to blow up my only TTL to USB programmer after the modification of the pro mini for saving power consumptionThe 16V was found on a schematics from the arduino.cc (https://www.arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf). I use typically a 9V power adapter to be safe.
@skywatch You are right that the user finally decides what VCC pins he or she will connect, but we can help him and give a hint : if he uses the right VCC pin to solder his battery wire, he will have a hard time to connect his TTL to USB programmer...
-
@evb yes I see your point. But changing things without understanding the background is troublesome, in my experience. Whoever created the original image probably had a good reason to write the N/C part. Therefore, I would prefer if any of the "Ancients" (i.e. people who joined the project before me) could chip in.
-
@evb MySensors is a a technical project that involves both hardware, software and firmare. It is not that easy for everyone to follow a single example and then get all that they want.
Think of it as a leanring curve. You already found something that is not the way you want it to be for your use. Many others will agree with that. Some want it a different way.
The main objective is to learn all you can (or need) to get your projects to where you want them. Some out there won't have a single battery node at all, some will be more advanced in battery power conservation than the case in this thread.
I flagged a faulty 'build' example more than 2 years ago, but it is still there and still wrong. But mine works as it should because I studied the data sheets and did it the right way. Change does not come quickly it seems.
You have to put time and a lot of effort into this unless you already work in such an area or have a degree in associated methodolgy.
-
@skywatch unfortunately, that is also the impression I have, the documentation is not always up to date and it is a laborious process to get it improved.
MySensors is a great project, but the learning curve is not negligible. Making it easier for beginners with real-world examples might make that learning curve a bit easier.
I've already mentioned it, but one example is the workflow of the open source project Home Assistant. The setup of the documentation and the possible pull requests for improvement are easier to get accepted.
If @mfalkvidd now manages to find and to wake up the 'Ancients', this article might be able to be improved anyway
-
@mfalkvidd Don't know if I'm qualified, but I've vague memory (or a wild guess). I think there were some pro-mini models that lost connection to one vcc-pin if you made the cut after the voltage regulator. And btw I never really know why the cutting method was so popular.
-
@m26872, your memory is correct. There are or were pro-mini models who lost connection on the VCC pin at the right if you removed the power regulator. (https://forum.pimatic.org/topic/383/tips-battery-powered-sensors/2).
My batch of chinese pro mini's are not loosing their connection with the VCC pin at the right.
@mfalkvidd, you can maybe adapt the wiki article with this extra info?
-
Meanwhile I found following forum topic : https://forum.mysensors.org/topic/2067/my-slim-2aa-battery-node. Thanks @m26872
@mfalkvidd, I insist , if modifying these 'official' site articles turns out to be so difficult, can't a new section not be added like for example 'User experiences' or 'Advanced use' or 'Real world examples' or ... ?
Now we are obliged to read through hours of forum topics, hoping to find more information somewhere.
On one hand, this is of course instructive, but on the other hand it also wastes a lot of time looking for answers.
If we already had a starting list of some topics from experienced users, the learning curve would already be smaller.I started my battery crusade months ago by ordering some Arduino Pro Mini's from our Chinese supplier AliExpress following the official site article.
Because I could not obtain the given consumption of current, I began to search further.
Today after hours of searching and reading on the forum, I realize that this choice was actually not the right one.
I probably had better ordered the custom PCB from @m26872 and used a barebone 328P, or a Moteino or a Canique or...As far as the current of my pro mini is concerned, I'm stuck at a minimum of 133µA.
- pro mini without power led and power regulator
- refused using the MiniCore packet to 1.8V BOD and 1MHz internal
- board : ATmega328
- clock : internal 1 MHz
- BOD : BOD 1.8V
- EEPROM : EEPROM retained
- Variant : 328P / 328PA
- Bootloader : Yes (UART0)
- only one open or closed contact on pin D3 with external pull-up of 1M ohm
- radio is a RFM69HW
- sketch is using the mysensors sleep function with interrupt wake up (MySensors lib version 2.3.2).
To test if it was the radio module not completely sleeping and causing this consumption, I tested the same on a other pro mini (no power led and no power regulator, same refusing), without any external hardware, using the LowPower sketch from https://andreasrohner.at/posts/Electronics/How-to-modify-an-Arduino-Pro-Mini-clone-for-low-power-consumption/
==>same measurement : 133µA
So the radio module is not the raison!So what is the cause of this higher consumption?
The quality of the Chinese clone boards?
Or is there still external hardware on the board consuming some current? The external crystal still present for example?On the pro mini, there is a led connected to the SCK pin. I think that will add an extra of +-1mA when the radio is active?
But it has nothing to do with the sleep current of 133µA...
-
@evb sorry for the late reply. I noticed your post earlier, but quickly realized I would need some time to catch up and grasp the full discussion. Now, when I finally have time to try to catch up, I realize that this is way beyond my capability of understanding. But if you provide instructions, I can paste them into the pages you deem relevant.
-
@mfalkvidd
Ok, the first point is all about the image with the mention N/C
(see https://forum.mysensors.org/topic/4796/battery-powered-sensors/232)
We didn't know why this was set on the image.
Now we do: there were or are pro mini's, if you desolder the voltage regulator, the mentioned VCC hole is not connected anymore.
--> if you have a pro mini where this is the case, you can't use anymore the usb-to-ttl programmer like that because the pro mini won't be powered on anymore by the VCC of your programmer. You must connect the VCC pin of the programmer with a wire to the other VCC hole.
--> in the other case, like mine pro mini version, no problem, the VCC hole at the right is still connected.The second point is all about the struggle to change/adapt/update existing site articles with updated/corrected/extended information
I see that most site articles have the submenu 'Related Content'. In most articles this is empty. Can't we use that to link to forum topics with more information, I mean forum topics with a great deal of explanation or real world examples.
So that the reader has directly more information to read on the subject, without to be obliged to read hundreds of forum topics before finding the ones with adequate information.
For example I started with the pro mini, because mentioned in the site article, but today I'm aware that this was maybe not the way to go...
An example of such a forum topic is : https://forum.mysensors.org/topic/2067/my-slim-2aa-battery-node.
-
Thanks @evb. I have added the content:
As for the related content, I am not aware of any way to affect that part. To my knowledge, each page links to its own forum thread. For the battery page, it links to the forum thread we are currently posting in.
-
@evb said in Battery Powered Sensors:
As far as the current of my pro mini is concerned, I'm stuck at a minimum of 133µA.
So how low do you want to go? The original article mentions 120uA, so you seem to be pretty close to that value.
-
@Yveaux, after your comment, I did a search on '120' and you are right, it is even mentioned at the beginning of the article!
I think I was to focused on the table of the Radio Power Consumption and on the forum topic https://forum.mysensors.org/topic/2067/my-slim-2aa-battery-node with a sleep consumption of:
The Sleep Mode Power Consumption
I measured the sleep mode current draw to be 1.5uA when it's set to interrupt wake up and 5.8uA when it's set to timer wake up.So the 133 µA is indeed very close to the 120µA mentioned!
So my node is functioning in the wanted consumption range, nothing wrong!
Thanks.
-
one of the eternal problems with documentation: There is always something missing that should be added, but there is also always too much information for someone to read and comprehend.
-
hek kindly explained to me how the related content works. Google generates it based on their magic. So that's why I was unable to find out how to affect it.
-
@mfalkvidd, thanks for searching this out
So it is not really usable as a new section for linking adequate forum topics.Can we add then a new section called for example 'More (advanced) information' and put there more information for users wanting more (advanced) information? It can be extra text information or here for example a link to a advanced useful forum topic like I already mentioned.
What do you think about it?
My intention is to let others avoid the mistake I have made.
If we can provide some targeted links to topics that go deeper on the (basic) content of the article, then that is a win-win situation. The user gets his information and new ideas faster and the topic starter gets recognition for his work
As a user and certainly a beginner, it is sometimes overwhelming to search the forum and to distinguish useful topics from unusable ones.
-
@evb yes, adding a new section is easy. I’ll add one when I’m not on mobile.
-
New section added
-
Does enabled myDebug and some Serial.print statements (with serial port disconnected) affect power consumption of the node?
-
@APL2017 I have no hard evidence, but logically this will take a little more processor time, so a little more power consumption.
But in my opinion, this is going to be negligible as long as you don't have thousands of lines with serial.print statements.
-
@APL2017 debug and serial print are for developmenat only. They will use more power and slow the system (node) down slightly.
When things are working well, remove debug and serial print from your sketches.
-
I keep my debug statements. If the node starts to act up, I want to be able to connect a logger and se what is happening without having to flash the node first.
-
If I remember correctly, writing to the serial port takes about 10s / baud rate for a single byte. That's a little unter 90µs at 115200 baud (common for Arduinos clocking 16 MHz at 5V) or about 1ms at 9600 baud (1MHz for 3V or less).
Imagine we are transmitting two messages per wake cycle and print another few custom lines to the serial port as well, that may result in about 500 bytes total. This would then add another 45ms on a fast clocking Arduino (115200 baud) or 0.5s (9600 baud) - plus likely some overhead - to the time the microcontroller spends in an active state.
According to the datasheet (p.312), an ATmega328P clocking at 1MHz consumes about 0.5mA in an active state at about 3V. So, from here on, you could calculate how drastically (or not) an additional ~0.1 - 0.7s of active time per wake cycle would impact the runtime of the battery.
Since it's possible to run a node for a year or much longer off a set of batteries if it doesn't send lots of messages every few minutes, I doubt you would be able to notice a difference between disabling debug prints or keeping them.
It is usually much more important to keep the current consumption during the power down phase as low as possible, than shedding off a few ms of active time.
-
@evb Hello. I am the maker of the Canique MK2 boards. I started just like you with the website from Andreas Rohner, desoldering the LED and desoldering the voltage regulator from such a chinese board until I realized this is the wrong way round.
As far as I recall, I've seen voltage regulators consume something in the order of 100uA when reverse powered. So that might be a hint.
The external crystal should not be drawing that much current. Using a 16MHz oscillator current can go as low as 4uA with watchdog enabled - in theory and on boards built with minimum consumption as a design goal.To your question regarding the SCK pin: yes, if it is connected to a LED every clock pulse on the SCK pin (when SPI is enabled) will make the LED draw current.
You also have these kinds of troubles (SPI drawing too much current when active or inactive) with chinese boards having a BME280 on them for example. If you have high quality standards, the stock chinese boards won't fit your needs.
-
@evb little info regarding the LED on the SCK pin.
Assuming it is a red LED with a forward voltage of 1.8V, considering the chip is powered with 3.3V and considering the 330 Ohm resistor in series with the LED, the additional current draw when SCK goes high should be about 4.5mA.
-
@canique you confirm my suspicions. For the moment I have 3 working battery nodes with the pro mini and the RFM69HW. We will see how long the batteries are going to last. Normally it should be one year.
I'm constrained by the maximum dimensions of the sensor node. The case must go inside the PVC door frame, so it can be maximum 20mm width on 17mm height, the length is not a constraint.
I had to solder the RFM69HW in line with the pro mini.
The MK2 boards are unfortunately too wide.
-
@evb how's the range of your node? Being enclosed in aluminum will definitely reduce range.
-
@evb I can't see it clearly on the picture but this seems like a reed sensor to me.
Well, usually the transmitter does not have to be at some specific location. There are reed sensors based on magnets (connected with 2 wires to the transmitter). As soon as the magnets are close to each other, a small current flows (or vice versa). They are just attached to the window/door with some sticky adhesive. The transmitter can well be a meter away.I can say from experience with Atmega328P, that when drawing ~24uA in sleep and sending every 30 seconds a single battery lasts ~ 1 year.
This can all be calculated (rough estimates).
A basic online calculator for this kind of stuff can be found @ https://oregonembedded.com/batterycalc.htm
-
@Yveaux It is not a aluminium door frame, but a PVC door frame (plastic).
The problem is that my gateway is in the extension of the brick wall, about 15m away in the garage at the backyard. So I have a 5m brick wall between de node and the gateway
This means that the reliability of the connection is not good, so I had to place a repeater node between them.
-
@canique no, the purpose of the node is to know when the door is locked by the bolt, not only closed. What you see are simply 2 battery springs and the bolt of the lock closes the contact.
I can move the node more upwards the door frame (and I will do it if the radio connection is still not reliable with the repeater).
In order to preserve domestic peace, I placed the nodes in the door frame, invisible when the door is closed: no visible dangling wires and no visible boxes.Maybe an idea for a MK3 version of your board as wide as the RFM69HW
-
Hello
I created battery powered node running on 2x 1.5V AA batteries with DC-DC step up booster. But the step up booster makes audible noise (very tiny beeping) when the radio is transmitting.
It is this step up booster https://www.laskarduino.cz/step-up-boost-menic-s-me2108-33v-480ma/
Is there any way to solve it?
Thanks
Tomas
-
@tssk First things that comes to my mind is that you might draw too much power (but no expert) did you measure it?
-
@tssk There is a name for this noise: it is called "coil whine". In German "Spulenfiepen". It stems from the inductor - I wouldn't know any way to get rid of it.
My mainboard or power supply on my PC creates similar noise when the CPU goes in certain doze modes.
-
@tssk I heard that people got rid of or at least reduced the coil whine by coating the windings of an audible inductor with non-conductive materials like epoxy resin or even hot glue to reduce the vibrations.
Of course, I woudn't mess with expensive PC hardware, but I guess there's not much to loose with a cheap boost module like this.
-
Thanks all for the response.
@BearWithBeard I will start googling about such solution.
Do you think using different step up booster might help? Could someone recommend something?
-
I am biased since I run that website but I can recommend https://www.canique.com/boost
I've never heard it making noise.
-
@canique Thanks for the recommendation if I do not find fix for the model I am using I will consider buying it.
I will try to hot glue the side with the coil as I found on some pages. Any ideas / warnings?
-
@tssk Most of these boosters have a grounded backplane, perhaps trying to re-orientate the inductor so the backplane acts a shield to direct RF may be an option to try ?
If the noise in on the power line I've heard of some managing to block it with a VR circuit if the voltage drop is acceptable, but never tried it.
-
@zboblamont It is not electrical noise but audio noise I can hear. Sorry if I use improper terms.
-
@tssk My misconception.
-
@tssk If the item is not going to be too hot then hot melted candle wax dripped over the coils will probably help.
-
So I used hot glue and it is better. Now I can hear the squeal only when I put my ear directly to the PCB. Thanks for the tips.
@TheoL I have no idea how to measure that.
I noticed that when the radio is transmitting the LED on the Arduino Pro Mini (not the power one) starts blinking very tiny. I still plan to remove the power LED and voltage regulator from the Arduino.
-
@tssk the led blinks because it is connected to the same pin as the SCK pin used by the nrf24.
-
@mfalkvidd You are right I did not know that.
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). These pins support SPI communication, which, although provided by the underlying hardware, is not currently included in the Arduino language.
LED: 13. There is a built-in LED connected to digital pin 13. When the pin is HIGH value, the LED is on, when the pin is LOW, it's off.https://www.arduino.cc/en/pmwiki.php?n=Main/ArduinoBoardProMini
Should I remove the LED to save power? Or it is marginal?
-
@tssk it is marginal
-
@mfalkvidd Thanks.
-
Hello
I would like to ask for help with passive battery powered node I created with following components:
- Arduino pro mini 8MHz - voltage regulator and power LED removed
- SX1276 based 868MHz LoRa radio
- BME680 sensor
- DC-DC 3.3V step-up booster
I created a battery measuring circuit according to scheme on this page ( https://www.mysensors.org/build/battery ).
The problem is the two fresh new AA batteries lasted less than 14 days and stopped when the circuit measured 36%.
2x1.5V AA Aerocell following start and end values:
09.02.2021 16:45 102% (start) : 1.610V and 1.610V
22.02.2021 04:15 36% (end) : 1.001V and -0.150VThe node code is sleeping for 6 minutes between each sensing and sending data.
sleep(180000);
14 days seems very short to me. Is that normal? Is there something I can to make it last longer?
Thanks
-
@tssk could you post your sketch? Some things that could draw power:
- bme not turned off properly when sleeping the node
- lora transmits can take a long time, depending on which settings are used
Which booster are you using? A good booster will use almost no power when the node is sleeping. A bad booster will consume almost as much as if the node was not sleeping, so the performance of the booster will make a huge difference.
-
@tssk Sending 240 messages a day is quite a lot for a battery node. I think you will need higher capacity batteries with that frequency of sending (is it really essential to send that often I wonder?).
Anyway, I am also testing battery nodes and as far as I can see the lora and bme are likely taking a lot of power. They must be 'put to sleep' as much as possible. AFAIK lora is an abbreviation of 'long range' and therefore means 'more power'. Can you test the current drawn by just the radio in sleep and transmitting?
Also, bootloader - I highly recommend using the minicore bootloader with internal 8MHz, bod as you wish (I ususally disable) and try again. My sleeping nodes use less than 5uA in sleep and I am trying to get that even lower this week.
Also check the value of pull-upresistors on the boards, they can be on the low side and perhaps better with higher value external ones (something I hope to test tomorrow as it happens).
Also temperature and humidity will have an effect. I put one test node on a colder NE facing window which has slept all the time except a twice daily battery check and send value only if changed. It is the only node to have changed from 100% to 99% in a week, so the colder window is clearly having an effect on the battery life in this situation.
As @mfalkvidd implied I would get rid of the stepup booster if at all possible, they are not so efficient and can produce a lot of noise on the power line. Can you go to 3xAA batteries? What about an 18650 li-on or two in parallel?
Finally check solder joints. A dry joint or cold joint may look OK but measure them with a meter just to make sure.
-
-
I did not know that I need to turn BME off ů how to do that?
-
Only thing I found is that Arduino has deepSleep() - but I am not sure if I can use it.
-
I am using the default Bw125Cr45Sf128 but thinking about testing Bw125Cr48Sf4096 to achieve greater range.
-
Booster is the whining one - https://www.laskarduino.cz/step-up-boost-menic-s-me2108-33v-480ma/
-
Is there a way I can measure power draw with multimeter?
// Enable debug prints //#define MY_DEBUG // Enable passive mode #define MY_PASSIVE_NODE // Passive mode requires static node ID #define MY_NODE_ID 100 // Enable and select radio type attached //#define MY_RADIO_RF24 //#define MY_RADIO_NRF5_ESB //#define MY_RADIO_RFM69 #define MY_RADIO_RFM95 //#define MY_DEBUG_VERBOSE_RFM95 #define MY_RFM95_FREQUENCY (RFM95_868MHZ) //#define MY_RFM95_MODEM_CONFIGRUATION RFM95_BW31_25CR48SF512 #define MY_RFM95_CS_PIN 8 #define MY_RFM95_IRQ_PIN 2 #include <MySensors.h> #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include "Adafruit_BME680.h" #define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10 //#define SEALEVELPRESSURE_HPA (1013.25) // Initialize general message MyMessage msgTemp( 1, V_TEMP ); MyMessage msgHumi( 2, V_HUM ); MyMessage msgAirq( 3, V_LEVEL ); //Adafruit_BME680 bme; // I2C Adafruit_BME680 bme(BME_CS); // hardware SPI //Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); void setup() { analogReference(INTERNAL); if (!bme.begin()) { Serial.println( "ERR: BME680 not found" ); while (1); } // Set up oversampling and filter initialization bme.setTemperatureOversampling(BME680_OS_8X); //bme.setPressureOversampling(BME680_OS_4X); bme.setHumidityOversampling(BME680_OS_2X); bme.setIIRFilterSize(BME680_FILTER_SIZE_3); bme.setGasHeater(320, 150); // 320*C for 150 ms delay(2000); } void presentation() { // Send the sketch version information to the gateway and controller sendSketchInfo("Room sensor", "4.0"); // Register all sensors to gw (they will be created as child devices) wait(100); present( 1, S_TEMP ); wait(100); present( 2, S_HUM ); wait(100); present( 3, S_AIR_QUALITY ); } void loop() { int batt = analogRead( A3 ); // 1M, 470K divider across battery and using internal ADC ref of 1.1V // Sense point is bypassed with 0.1 uF cap to reduce noise at that point // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts // 3.44/1023 = Volts per bit = 0.003363075 int battP = batt / 10; #ifdef MY_DEBUG float battV = batt * 0.003363075; Serial.print( "Battery Voltage: " ); Serial.print( battV ); Serial.println(" V"); Serial.print( "Battery percent: " ); Serial.print( battP ); Serial.println(" %"); #endif wait(100); sendBatteryLevel( battP ); if (! bme.performReading()) { Serial.println( "ERR: BME680 reading failed" ); return; } float temp = bme.temperature; #ifdef MY_DEBUG Serial.print( "DBG: Temperature = " ); Serial.print( temp ); Serial.println( " C" ); #endif wait(100); send(msgTemp.set( temp, 2 )); /* float pres = bme.pressure/100.00; #ifdef MY_DEBUG Serial.print( "DBG: Pressure = " ); Serial.print( pres ); Serial.println( " hPa" ); #endif wait(100); send(msgPres.set(pres,2)); */ float humi = bme.humidity; #ifdef MY_DEBUG Serial.print( "DBG: Humidity = " ); Serial.print( humi ); Serial.println( " %" ); #endif wait(100); send(msgHumi.set( humi, 2 )); /* float alti = bme.readAltitude(SEALEVELPRESSURE_HPA); #ifdef MY_DEBUG Serial.print( "DBG: Approx. Altitude = " ); Serial.print( alti ); Serial.println( " m" ); #endif wait(100); send(msgPosi.set(alti,2)); */ float airq = bme.gas_resistance / 1000.0; #ifdef MY_DEBUG Serial.print("DBG: Gas Resistance = "); Serial.print( gas ); Serial.println(" KOhms"); #endif wait(100); send(msgAirq.set( airq, 2 )); sleep(10000); //sleep(180000); }
-
-
-
This is room sensor and I would like to react to changes in temperature and airquality - I was thinking that I could prolong the interval up to 12min. What do you think is optimal measurements rate for room thermostat?
-
Is it possible / necessary to put the radio module to sleep? How to do that?
-
So far I did not mess with the Arduino bootloader but I would like to Any link that I could read about it? And specifically about the minicore you mention?
-
I do not understand what you mean by the pull-up resistors?
-
I have my node in the middle of the room around 20-24C that sould not be the problem. Actually it is it main purpose to provide data for optimal room temperature.
-
I included step up boosted based on recommendation on the https://www.mysensors.org/build/battery page. I thought it should use the batteries most efficiently. I think I could go with 3 AA batteries. Will I need to regulate the voltage or can I power the radio and bme modules directly?
-
-
-
@tssk I use a threshold. I measure every 30 - 60 seconds. If a change goes pass the threshold I report immediately. Else I report periodically. I think I've created a small lib for that some years ago
-
@TheoL I see so you measure every tim e but send only sometimes. Nice idea thanks.
-
You might need to turn off the BME, but that depends on how it works and what the Adafruit library handles for you.
My Sensors will turn off the radio when the Arduino goes to sleep so you don't need to sleep the radio manually.
This diagram from the booster datasheet shows how much current it will consume with no load:
-
I hope I am measuring it correctly.
It shows 12.5 when in sleep and up to 90 when transmitting/measuring.
Any one can interpret that for me please?
-
@tssk That is 12.5mA (12500uA) in sleep and up to 90mA (90000uA) in transmit mode. Compare that to my door/window sensor which is <5uA sleep and about 15uA transmit with nrf24l01+). Your current draw is too high for most 'normal' batteries to last very long as you have found out.
Minicore info and install instructions is here -- https://github.com/MCUdude/MiniCore.
Pull-up resistors are on the pcb and connect between data and Vcc as well as clock to Vcc. You won't gain a lot tampering with those with the figures you have posted so I would forget about those at the moment and concentrate on more productive things to get a lower current.
here is the bit of code to only send sensor variable when it has changed.....
if (int != oldint) { send(msgInt.set(int)); oldint = int; }
This is used in my door sensor and can be used with any sensor variable name.
ALso of help would be to re-flash the node with MY_DEBUG to see how often your node is measuring and sending data. It shows if your prog is working as your expected it to (or not).
Anoother thought is that the sleep interval does not have to be fixed. You can vary it so that some times of day it is 20-30mins between read/send and at others you can reduce it if you think you need to.
-
@skywatch said in Battery Powered Sensors:
@tssk That is 12.5mA (12500uA) in sleep and up to 90mA (90000uA) in transmit mode. Compare that to my door/window sensor which is <5uA sleep and about 15uA transmit with nrf24l01+
You mean 15mA transmit, right?
-
I removed the step up booster connected + directly to VCC but the node stopped working - only the arduino onboard led is constantly on.
I also tried to measure the step up booster alone and it is showing 0.05 at 20mA on multimeter settings.
I am now really confused and I am not sure what to conclude from that...
-
@mfalkvidd Yes - you got me
I was confusing it with the battery pir which is 15-16uA in trigger mode. But yes, 15mA in Tx mode with a nrf24 module.
Maybe it is time for me to hibernate for a few months after all .....
-
@tssk said in Battery Powered Sensors:
I removed the step up booster connected + directly to VCC but the node stopped working - only the arduino onboard led is constantly on.
The problem was that the batteries I used were not completely fresh. I googled that Arduino pro mini need at least 2.7V to operate. Using fresh batteries the node is working. And it shows 6.0mA in sleep and 25.4mA when transmitting.
So using the stepup booster adds 6.5mA in sleep and 65mA when transmitting to consumption?
I also found LowPower library (https://github.com/rocketscream/Low-Power) but it seems to interfere with mysensors library (https://github.com/rocketscream/Low-Power/issues/80). Any experience?
-
The 2.7V is set in the fuses, you can go a lot lower if you disable Bod completely. I tested one with nrf24 and it worked down to 1.64V.
I think you will find that all the 'good stuff' from the low power library is included in mysensors sleep function anyway.
I suggest using minicore (it is easy to install and all works from within the arduino IDE you are used to) and set internal oscillator and disable BoD. You will need a programmer (a few dollars) or you can use another arduino as programmer. but that is more time consuming to set up and easier to mess up as well!
Good that you got rid of the booster!
-
@skywatch said in Battery Powered Sensors:
I think you will find that all the 'good stuff' from the low power library is included in mysensors sleep function anyway.
So when I use sleep() mysensors library overloads the generic arduino sleep?
I suggest using minicore (it is easy to install and all works from within the arduino IDE you are used to) and set internal oscillator and disable BoD. You will need a programmer (a few dollars) or you can use another arduino as programmer. but that is more time consuming to set up and easier to mess up as well!
I look at the git repo and I more confused now. I thought it is some kind of bootloader/firmware I flash. What is Arduino core? I never heard that term.
Good that you got rid of the booster!
I wonder why the booster is recommended here https://www.mysensors.org/build/battery ? Or did I misinterpreted?
-
@tssk said in Battery Powered Sensors:
I wonder why the booster is recommended here https://www.mysensors.org/build/battery ? Or did I misinterpreted?
If you interpreted
Note that a booster can be a bit noisy (and disturb the radio). The booster is also less than 100% efficient, so boosting can be less efficient than just powering the Arduino directly from the batteries and change batteries when they hit 2.8V.
as a recommendation, I would say that you did a slight misinterpretation. But it depends on what sensors you use and how much the device will be sleeping.
-
@tssk In following post I have described my adventures in building a battery powered door node : https://forum.mysensors.org/topic/11499/checking-mechanical-locked-doors-by-a-battery-based-windows-door-sensor-node?_=1614421889744
Search for the section : The battery-based windows/door sensor node : software
I explain there the use of the minicore package.
See also the section References at the end for more information about battery powered nodes
-
So I ordered Arduino Uno for programming my Pro Minis. And going to experiment with 2xAA or 3xAA setup without step up booster (they are whining anyway so I will be happy if I get rid of it
Thank everyone for help!
-
I have a problem: when batteries go around 2.7V radio will stop transmitting. Board still take current, but no messages.
I'm using own board with barebone 328p (8mHz internal) and SMD/mini nrf24l01 (pretty shure china)
Did anyone had same issues?I've checked programmaticaly (yes, it is possible!) my fuse bits: Low=0xE2, High=0xD2, Extended=0xFE (0x06)
(BOD = 1.8V)
I've have three same boards (water leak) and used other not-yet-installed with specially made low-voltage regulated source (with 2200 uF capacitor and resistor load to eliminate voltage drop at transmission) to test - same result.
Sometimes i can go lower to 2.5V but not guaranteed, sometimes even corrupted messages (i.e. node id 168 instead 8).
Tests were without UART, only MYSController to monitor messages flooding each 5sec to approve life.Did anyone had same problems with nrf24l01 modules? All i see people say the can go to around 2.0 V.
According to article https://www.gammon.com.au/power (and datasheet)
at 8mHz i'm safe down to 2.4V (something like that i also measured)
nrf should go down to 1.9...Also it would be great to add into advanced section possible voltages and problems with NiMh, china modules & 2.7V(if not only me), [not]possible currents from coin cells and metioned article.
-
@nekitoss said in Battery Powered Sensors:
It would be great to add to this arctle that if you want to be battery powered outdoors with temperature below zero - you have to use lithium batteries (FR6 for AA) (yes, batteries, not li-ion accumulators!) (for example ultimate lithium energizer, also could be found lithium batteries from other vendors), because Alkaline (LR6 for AA) will be frozen and loose their capacity heavily. If i remember it is >50% at -10 C and death at -20 C. Same problem for li-ion accumulators - when liquid is frozen - electrons are stucked...
Also would be great to add some link about battery/accumulator types, advanteges and disadvantages, but i have no links in english, easy-to-read and in one place...But i have very great link about battery-powering that really should be added here, but in advanced section:
http://www.gammon.com.au/power@zboblamont how your alkaline batteries experience after 2 years(temperatures, lasting time)? my freshly installed (yes, it was long develop and test...) Lithium AA - when few weeks ago it was -20 .. stopped transmitting! Fixed resetting power when it become little warmer. Possibly same problem with 2.7V or exactly there may be wrong BOD...
-
@nekitoss If I were you I;d reflash the bootloader and chec again. I got my pro mini with ebyte nrf24 to work and register with the gateway all the way down to 1.63V, so somethingi is wrong if you are loosing it at 2.7V (which is also as it happens, a BoD setting for atmel 328p). For the test I used minicore bootloader iwth Bod disabled and 2MHz clock. Bench power supply for the voltage variation.
-
@nekitoss No problems with alkaline power, 6 - 18 months now on 2xAA down to ca -15c, battery voltage reported ca 2 or 3 times per day.
I vaguely recall reading an article on lithium and alkaline battery behaviour in extreme cold weather, the alkalines were the better performers.Note that the pro-minis here use onboard booster and LDO which provide stable 3.3v all the way down to ca 1.8v battery death, so battery voltage is unrelated to system voltage unlike your setup. They also use rfm69s (433MHz) which are better able to penetrate structural obstacles.
Bear in mind that if you have comms problems this can substantially reduce battery life as it does not quickly waken, perform the task and go back to deep sleep
-
Nice job on updating the infor BTW
-
Adding on to this.. If we use a map function to convert the battery level like this, then it shows up as an attribute in HomeAssistant and Homekit
Map function works and not the percent. The percent always shows as zero in Homekit.
Hope this helps someone!void battery() { long batteryMillivolts = hwCPUVoltage(); int batteryV =batteryMillivolts /1000 + 0.5; auto batteryLevel = map(batteryV,EMPTY_BATTERY, FULL_BATTERY, 0, 100); if (batteryLevel > 100) {batteryLevel=100;} #ifdef MY_DEBUG Serial.print("Battery voltage: "); Serial.print(batteryMillivolts / 1000.0); Serial.println("V"); Serial.print("Battery Level "); Serial.print(batteryLevel); Serial.println(" %"); #endif if (oldBatteryLevel != batteryLevel) { sendBatteryLevel(batteryLevel); send(msgV.set(batteryV,2)); oldBatteryLevel = batteryLevel; } }
![Home Assistant]( image url)
-
@skywatch Thank you very much! Your advice helped. Not shure what it was on BOTH devices - my mistake or some corruption of fuses/program.
On first device (where i found problem) - there were different fuse bits (but according to my eyes BOD was even disabed, but not shure). On the second (where i tested) fuses were checked and were correct. I tried to play with fuses and erase chip... and something strange happened - or chip memory was broken or i can't verify program when box "erase flash and eeprom" is checked... so i took fresh nano, programmed it and resoldered MCU into the second device.
So both devices now are fixed and tested - both work till ~1.9V.
Thanks, you saved my brains!
-
@nekitoss Yay!
Well done on getting it working!
-
Hi from France;
I've tried everything I could and no way to put My temp. sensor to deep sleep.
so I went back to the very beginning with a bare Pro-Min 3.3v and I tryed this:
#include <LowPower.h>
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
}
My boad is going to sleep;
YEEEESSS ! the pb is NOT comming from the board itself....eating a bunch ou micro amp;
Then I've added the minimum requested to make a MySensor extension and I tried this:
#define MY_RADIO_NRF24 // Choix du module radio
#define MY_RF24_PA_LEVEL (RF24_PA_HIGH) //CHOIX: RF24_PA_MIN; RF24_PA_LOW; RF24_PA_HIGH; RF24_PA_MAX
#define RF24_CHANNEL 76
#define RF24_DATARATE RF24_250KBPS
#include <MySensors.h>
#include <LowPower.h>
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
}
The boad stays awaken (4 mA current)
So may be the problem is comming from LowPower library...
I tried this minimal prgm recommended in a tutorial, using MySensors library and SLEEP function:
// Enable and select radio type attached
#define MY_RADIO_RF24
#include <MySensors.h>
uint32_t SLEEP_TIME = 900000; // sleep time between reads (in seconds * 1000 )
int oldBatteryPcnt = 0;
#define FULL_BATTERY 3 // 3V for 2xAA alkaline. Adjust if you use a different battery setup.
void setup()
{
}
void presentation()
{
// Send the sketch version information to the gateway and Controller
sendSketchInfo("Battery Meter", "1.0");
}
void loop()
{
// get the battery Voltage
long batteryMillivolts = hwCPUVoltage();
int batteryPcnt = batteryMillivolts / FULL_BATTERY / 1000.0 * 100 + 0.5;
if (oldBatteryPcnt != batteryPcnt) {
sendBatteryLevel(batteryPcnt);
oldBatteryPcnt = batteryPcnt;
}
sleep(SLEEP_TIME);
}
NO WAY AGAIN; The board is still eating 4mA all the way long.
I'm lost !!!! Please HELP ME ....
-
@Gilles-BILLARD Using the lowpower lib and mysensors lib together will probably give conflicts, so you should avoid it. MySensors lib implements the same low power tricks.
When doing the latest test sketch, are you doing this also with a bare pro-mini 3.3V?
So not connected to anything, no radio, no sensor?
Try the same latest sketch, but set everything inside the loop() in comment except the sleep line.
-
Thanks EVB;
- Yes; Last test with a bare pro-mini 3.3v
- I did that...
// Enable and select radio type attached #define MY_RADIO_RF24 #include <MySensors.h> uint32_t SLEEP_TIME = 900000; // sleep time between reads (in seconds * 1000 ) int oldBatteryPcnt = 0; #define FULL_BATTERY 3 // 3V for 2xAA alkaline. Adjust if you use a different battery setup. void setup() { } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Battery Meter", "1.0"); } void loop() { // // get the battery Voltage // long batteryMillivolts = hwCPUVoltage(); // int batteryPcnt = batteryMillivolts / FULL_BATTERY / 1000.0 * 100 + 0.5; // // if (oldBatteryPcnt != batteryPcnt) { // sendBatteryLevel(batteryPcnt); // oldBatteryPcnt = batteryPcnt; // } sleep(SLEEP_TIME); }
Again : 4.2mA (no sleep )
So sad !
-
@Gilles-BILLARD IT took me some time to work it out and get it working.
I suggest you install MiniCore library - it is easy to follow simple steps and takes a minute or two.
Then burn a bootloader into the atmega, I always use 3.3V, disable BoD and 4MHz or 8MHz internal clock. You can use one arduino to program another or just get a USB programmer from your preferred source (about $2).
Once your pro mini is booeloaded and you have your sketch in installed , remove the Power LED (or the series resistor for the LED) and also remove the voltage regulator (or cut the tracks as shown in the battery powered page).
You won't get down to <10uA in sleep unless you do all of this.
-
Thanks Skywatch,
My Pro-Mini boards are comming from Aliexpress, so, I was also thinking about the bootloader... what else ?
I'll do what you explain ASAP and be back to say what...
BTW: I already have cut the tracks powering the LED & regulator
-
@skywatch NO WAY ! So bad !
I burned the MiniCore bootloader quite eazily using a second Pro-Mini loaded with Arduino BootLoader ( juste a file name error; looking for optiboot_flash_atmega328p_UART1_115200_16000000L_B5.hex but only optiboot_flash_atmega328p_UART0_115200_16000000L_B5.hex on the folder, so I just changed 0-->1 in the file name) and the résult was:
*
avrdude: Version 6.3-20201216
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg WunschSystem wide configuration file is "C:\Users\billa\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.0/avrdude.conf" Using Port : COM7 Using Programmer : stk500v1 Overriding Baud Rate : 19200 AVR Part : ATmega328P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PC2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Programmer Type : STK500 Description : Atmel STK500 Version 1.x firmware Hardware Version: 2 Firmware Version: 1.18 Topcard : Unknown Vtarget : 0.0 V Varef : 0.0 V Oscillator : Off SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.04s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "C:\Users\billa\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.0/bootloaders/empty/empty.hex"
avrdude: writing flash (0 bytes):Writing | ################################################## | 100% 0.00s
avrdude: 0 bytes of flash written
avrdude: verifying flash memory against C:\Users\billa\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.0/bootloaders/empty/empty.hex:
avrdude: load data flash data from input file C:\Users\billa\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.0/bootloaders/empty/empty.hex:
avrdude: input file C:\Users\billa\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.0/bootloaders/empty/empty.hex contains 0 bytes
avrdude: reading on-chip flash data:Reading | ################################################## | 100% -0.00s
avrdude: verifying ...
avrdude: 0 bytes of flash verified
avrdude: reading input file "0x0f"
avrdude: writing lock (1 bytes):Writing | ################################################## | 100% 0.04s
avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0f:
avrdude: load data lock data from input file 0x0f:
avrdude: input file 0x0f contains 1 bytes
avrdude: reading on-chip lock data:Reading | ################################################## | 100% 0.01s
avrdude: verifying ...
avrdude: 1 bytes of lock verifiedavrdude done. Thank you.
Then I loaded it with Blink demo...
At this point all's OKay. Both Po-Mini are blinking
Then I've loaded the 2nd with that:// Enable and select radio type attached #define MY_RADIO_RF24 #include <MySensors.h> uint32_t SLEEP_TIME = 4000; // sleep time (in seconds * 1000 ) void setup() { pinMode(LED_BUILTIN, OUTPUT); } void presentation() { sendSketchInfo("Test Prgm", "1.0"); // Send the sketch version information to the gateway and Controller } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); sleep(SLEEP_TIME); }
and...
the result is...
NO BLINK
(draining more or less 2mA; Varying quickly from 1600uA to 2000uA; I should put a scope probe on that....)
-
@Gilles-BILLARD from the photos it seems you didn't connect a radio. If that is the case, the loop will not be entered and your arduino won't sleep!
-
@Yveaux
YESSSSSS !<
That was the last problèm to solve.
Back with my own MySensors routine all is perfect ! (8uA in sleep mode)
I am very happy now and I thank all those who assisted me.
You've made my day !
Gilles