Today I wanted to do a quick project status of the 1st prototype of ULPNode I received some days ago. After the introduction of ULPNode, and both articles about bootloader (1 and 2) used, for this one I will start with pictures of the prototypes.
What’s on the board ?
The board contains several parts, I will not enter into deep details now but let’s see the main features.
On the bottom
- Place for RFM12B or RFM69 Radio module
- Place to put a cell coin battery holder (CR2032 or CR2450) or a AAA holder
- Bottom pad of ISCP programmer for ATMega328p
- Pad for FTDI connector if needed
- Some configuration solder pad
On the top
- Top right is the main intelligence and advanced Low Power management system, a switch let us choose between powering board with cell coin or AAA battery (both connections are present) or USB (via FTDI) or Lipo
- Top left is a place for cheap and fine I2C humidity temperature sensor TH02
- Just right to TH02 place, the advanced luminosity sensor TSL2561
- Below TH02 the extended connector containing :
- 3 sensors pins, A0, A1, A3, each one with 1% precision pull up to achieve good measure if needed. One is 10K, one is 4.7K and last has 1K (pullup can be enabled/disabled with solder pad). You can use it also for digital sensors such as DS18B20, DHT22, ….
- One permanent power
- One activated power (activated by mosfet driven by Arduino pin)
- Center of the board, one groove I2C connector
- Right to the groove connector, the 10K 1% precision on board temperature sensor
- Right the sensor, the reset switch
- Below Reset, the ICSP Pad connector
- Left to the ICSP Pads, the “general” NRF24L01 socket which can handle NRF24L01, the RFM module using breakout board, or whatever SPI devices….
- Left again the CPU core ATMega328P (with 16MHz crystal below)
- Left CPU, the FTDI connector with diffferent way to connect (Pad, hole, solder, ….)
- Below the FTDI connector, a custom switch I use to Wake the node and send frame other the air
- And bottom right the WS2812B RGB Led and also a classic 0805 LED
RGB Led was working on some boards and not others, after digging into scope it shows that at 4MHz the timing to drive it are not respected, on more tolerant chip, it works, but not on the others. That is why I decided to change speed to 8MHz to drive the WS2812B. In real working condition of ULPNode, this speed will be setup only before driving the RGB and set back to 4MHz after. Remember 4MHz is the cruising speed ULPNode because it can works until 1.8V. I changed the bootloader and sketch according to this, now it’s working very nice.
Battery measurement was not working as expected, after investigation, it was a stupid mistake of reversed source and drain pin of a Mosfet in Eagle CAD. Corrected now on schematics and PCB
What else ? Well, to my great surprise everything is working fine, especially the Ultra Low Power side. I measured the timing base of the Ultra Low Power sleeping mode to be about
45 109 seconds. This can be increased or decreased depending on a capacitor value, but 45 109 seconds seems a good start.
Edit : 01/07/2015 : After correcting the reversed MOSFET described above and done some code optimization, the idle consumption went incredibly lower.
Now just as an example with AAA battery. Assuming I want to do nothing (no measure, no transmission, ..) just node to be alive and blinking RGB LED, I’m able to have the ULPNode intelligence part (ATMega328, RFM69, TSL2561, …) consuming absolutely nothing on the battery for about
45 108 seconds (hardware sleep mode default duration) then consumption goes to approx 15 mA only for 10 ms (let’s says we blink 10 ms) , and then back to 45 108 seconds off again. From an CR2032 battery, the sleep duration is a bit lower (90 seconds) which confirm my first assumption, best results are achieved with AAA battery. During this sleeping stage only power management circuit quiescent current is pumped from battery (approx 400nA). Not Bad at all !!!
More than this, if you decide to have a pulse (rising/falling) sensor (counter for example), the consumption will be able to be 400 nA until falling/rising edge wake it up (even if pulse come once a day !!!!!).
Now if for example we want to do sensor measurement and transmit frame every
45 108 seconds, the consumption will be 400 nA during 45 108 seconds, and about 10 mA for 30 ms (sensor measurement) + 45 mA (depending on transmitter) for 5 ms to send frame. This is more than 99.9% idle time consuming 400 nA
I let you imagine the endless possibilities you can achieve with this new feature. I will do more measurements soon, but I wanted you to know 1st results.
What’s next ?
- I’ve designed the 2nd prototype board, little increasing size to be able to but AA battery also, I just realized that they are the most used one I had in stock back from old devices saying “low bat”, so I wanted to be able to use them.
- AA and AAA connector will be like this one and will let the RFM69 module soldered below the battery.
- ISCP and NRF24L01 will be trough hole, much cheaper and easier to solder
- Edit : 01/07/2015 : A Micro USB connector will be on the board to be able to power it using classic USB adapter. This USB will also be connected for adding a new upload features from USB such as this one or this one
- Edit : 01/07/2015 : ISCP and NRF24L01 radio connector become PTH, easier to source, solder and cheaper.
I’m now doing more intensive testing before ordering 2nd prototype, I will let you inform of the project status.
Here below a bonus picture of ULPNode powered by AAA battery. Stay tuned.