25

ULPNode first prototypes status

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.

ULPNode 1st Proto PCB

ULPNode 1st Prototypes PCB, top and bottom.

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

First testing

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.

Charles

ULPNode-Proto1-with-battery-bottom ULPNode-Proto1-with-battery-top

Charles

Charles

25 Comments

  1. Hi! Do you plan on making available a version *without* the onboard sensors, but with the regular Atmega pins exposed? I’m looking for essentially a better Jeenode.
    Awesome work you’ve been doing, congratulations.

    • Hi Sven,

      Well, the onboard sensors such as the thermistor and luminosity sensor will always be on board, this is how is designed the ULPNode.

      But there are some pins that are available for end users. The external sensors can be used as normal pins. The available pins for that are
      A0, A1 and A3. You will have some more available on the NRF24L01 connector that is D8 and another one if you don’t want to use the WS2812B that is D6

      The others pins are used by the board, SPI (D2 + D10-D13) for RF module, I2C for luminosity sensor (A4 and A5), D4 for the onboard switch, D3 for the external wakeup controller, D0 and D1 for the UART and uploading sketch, D7 for controlling the Power of RF module and D9 for controlling the Power of I2C modules and sensors. A6 for measuring the onboard Thermistor value, and A7 for measuring the connected battery level. A2 used to control the booster, the brain of the lowpower secret of ULPNode.

      Hope this help and let you have a better vision of used pins.

      Charles

  2. Charles,

    You made al the good choices.
    For everyone everyting on one board. I can even put a microphone in a groove slot.
    Im impressed. Bravo.
    Hoping is comes in production.
    Put me in the loop for preordering for the BeeHives.
    Koen.

    • Koen,

      Tried to do my best, I’m glad you find it useful. I’m currently trying to test all funct (and write all optimized code for low power)

      I will launch a 2nd proto test batch very soon (with minor PCB changes and bugfix), if all is fine, I will start mass production 😉

      Charles

  3. Hi,

    Great card and design ! I’ll be highly interested for 10 after your 2nd proto, but what is your target price ?

    Thanks

  4. Sounds great 🙂
    I am just ordering how did you do the trick for the wake up interrupt ? A R/C circuit ?

    • Oliv,

      That’s a excellent question, I will write an explanation and release associated source code/schematic by the end of this month. Just an indication, yes it’s being a capacitor with quick charge and long discharge (more than 100 sec) totally managed by external hardware controller. External line from controller is interrupt connected to Arduino and occurs when hardware is charging back the caps. Of course, the Arduino is able to control the hardware supervisor also depending on what it need to do 😉

      Charles

  5. Hello Charles
    I been looking for and experimenting with several wireless solutions and while searching found your module. Infact you are very close to an amazing product. It will really simply quite a lot but I have few questions
    1. Have also looked at or evaluated the ESP2866Ex chip? The new version does come with a low power option, will this be compatible?
    2. Have you also tested the battery life when all more than on sensor is sending data e.g. thermistor + luminosity + led ? how do you see the battery life?
    3. If the battery test results are close to what you have described in your presentation, that will be simply impressive.
    4. When do you plan to release the final version?
    5. Do you plan to provide a casing as an option, will be perfect for using this outdoors? This would make it more attractive.
    Looking forward to hear more of this great product.
    Thanks
    Arnold

  6. Hi Arnold,
    whooo, thank you for your great comment. I appreciate this.

    To answer to you questions, yes I looked to the ESP chip, very cheap and look promising. I think this product is very new and also need the community to work on it, since development need to be more affordable and documented. Since it’s contain a processor, it’s not compatible with ULPNode, but may be, depending on how it use Low Power, we could bring the Low Power stage of ULPNode to this chip, great challenge. My main concern is more about consumption, you know, marketing always says Low Power, but all of that is very relative and I don’t see how can Wifi device can be Low Power except disconnecting it and connect to WiFi network only to send sensor measurement.

    Battery life has been tested with several sensors, In fact I choose Low Power sensor than does are not harvesting the Power. Thermistor are fine such as the Luminosity sensor on board (or even LDR). They are activated (powered) only when doing measurement. Even if the node could work with sensors such as DHT11, DHT22, DS18B20 these sensors need settle time and are consuming more power than the one I choose.

    I hope releasing the final version by the end of February. I worked hard on optimized code and created a dedicated library with lot of samples. The core (Bootload and Low Power) is working very fine now, as some sensors.

    Casing is bringing me some headache because I would love to have a nice enclosure but I’m in lack (no time for now) of knowledge to create a custom one but I agree that it would be so nice, so if anyone has idea let me know 😉

    I’ve put some graph of really early prototype sending data every 40s (temperature, battery and Lux by LDR). The Low Power of these node is not as efficient as the new one but it’s a good starting point since I’ve put on these node old AAA battery marked as “dead” from my Oregon sensors. Seeing it start to be between 1.1V and 1.2V. The beginning of the graph indicate some test/change I made on battery so do not take it into account. What’s interresting is that old batteries continues to send data every 40s (so very often) since 3 month now and battery voltage does not seems decrease too much even with quite old version of Low Power module and code.

    [caption id="attachment_867" align="alignnone" width="300"]ULPNode Battery Graph ULPNode Battery Graph[/caption]

    Hope this help

    Charles

  7. Charles,
    About casing.
    I dont know the exact mesurements. But.
    It looks like it fits in a tik-tak-mint box.
    Verry cheep.

    Koen

    • Koen,

      Thank for the idea, but even if I think the box you’re talking about could fit the PCB board (need to check) but the issue will come from thickness because with the battery holder (in case on cell coin) would surely be not enough thick to fit in (moreover with AAA battery)

      Charles

  8. Charles, thanks for your feedback. I have read bit more in your blog to understand the product better, if i get it correctly by default you will only sell the main board and others modules as optionals i.e. NRF24L01 or RFM. Correct me if I am wrong here.
    the price you have mentioned (i.e. ~$25) is only for the main board + one selected module or is it only for the main board?

    I still have to evaluate the ESP module, has some cool features but as you said it may need constant power, unless there is some magic happening when in low power mode.

    Have you also looked at Bluetooth BLE ?

    And yes, will it be possible to connect sensors which require 5v e.g. Ultrasonic sensor or your product is primiraly aimed for sensors for <=3.3v?

    Launching by end of FEB sounds promising. Looking forward for it.
    Arnold

    • Arnold,
      Correct, I’ll try to sell the board with one module RFM69CW (433 or 868 MHz), but I can deal also with NRF24L01. Hoping the target price could fit $25 module included, but for now $ vs Euro exchange rate changed my vision on this, trying to keep target.
      I ordered some ESP to play with, but peak current seems far away from Low Power (Adafruit says 300mA peak). BLE is also a solution I think, could be really fine if it can work until 1.8V. May be one day, for now I’m focusing on hard work trying to have ULPNode working fine 😉

      5V is not supported, but due to the build and Low Power engine, I’m sure it could work changing 1 resistor. But, there is a but, if you do this, Radio Module will be powered at 5V and this will definitively damage it if not using level shifter.

      ULPNode at full power is 3.6V, not 3V3 (yes I lied) which seems to be compatible with lot of low power sensor and Radio modules but mainly for WS2812B blue led stated 3.5V mini.

      Charles

      Charles

  9. Super interesting post, thanks for sharing ! Je serais également très intéressé par la mailing list, pour pouvoir suivre le développement et éventuellement commander un des prototypes.
    Eric.

  10. Great project… got one question. You mentioned the sleep time will depend on the capacitor size, so I imagine it won’t be able to change by software, right? Is that because you’re putting the atmega on shutdown mode and can be wake only by interrupt? Or are actually shutting down the whole circuit, including the Mcp regulator and the avr will restart every cycle?

    Cheers

    • Mike,
      Correct you won’t be able to change it by software, but you will still be able to use the Watchdog is you need (but consuming a bit more and wake more often). If you want more time there is also a PTH capacitor place, so user can add the one that fit to custom use.
      If you don’t use the Watchdog, The ATMega is put in sleep mode called “Total Power Down” (about 100nA) and then waked by interrupt or local push button. In this sleep mode, code is just halted, this mean that your code is not starting from a fresh reset. The Whole circuit is never shut down 😉

      Here is an example code I use in loop on my test ULPNode

      void loop()
      {
      // light Off board LED and RGB Led
      ulpn.setDevice(DEVICE_LED_OFF);
      ulpn.RGB(0,0,0);

      // Turn mosfet OFF to disable devices
      ulpn.setDevice(DEVICE_SENSORS_OFF);
      ulpn.powerRadio(false);

      // Disable all peripherals of CPU (for low power)
      ulpn.disableCPUDevices();

      // go to sleep mode, NO BOD, disable booster but allow it to wake us as the switch push button
      ulpn.sleepDeviceWake( SLEEP_BOD_OFF | SLEEP_BOOSTER_OFF | SLEEP_WAKE_BOOSTER | SLEEP_WAKE_SWITCH );

      // We've been waked up by a IRQ, disable ours until we done the job
      ulpn.setIRQ(IRQ_SWITCH_DISABLE | IRQ_BOOSTER_DISABLE);

      // Ok now we need to be sure that we never go in a dead loop
      // So we activate watchdog to autoreset the board in case of
      // this, let's say we have 2 seconds max doing our JOB !!!
      #ifdef APP_WATCHDOG_TO
      wdt_enable(APP_WATCHDOG_TO);
      wdt_reset();
      #endif

      // Enable back delay() function
      power_timer0_enable();

      // IRQ are disabled, it's safe to use these vars
      WakeCounter = iWakeCounter;
      SwitchCounter = iSwitchCounter;
      WatchdogCounter = iWatchdogCounter;
      IrqTrigger = iIrq;

      // Now we can enable the booster
      // not before because we clean the IRQ
      // that boosterMode will trigger (related HW)
      // Enable sensors, RGB LED and onboard LED also
      ulpn.setDevice(DEVICE_BOOSTER_ON | DEVICE_SENSORS_ON | DEVICE_LED_ON );

      // Activate back Serial
      #ifdef VERBOSE
      power_usart0_enable();
      Serial.begin(SERIAL_PORT_SPEED);
      #endif

      // Do your own stuff and check who waked us
      // ...
      }

      Charles

      • Thanks Charles… hope to see more news soon about your project. At the moment I’m working with some CanBus modules, but one piece is actually a CanBus to RF gateway to talk with remote sensors and triggers. In many cases I’ll be using i2c sensors with built in interrupt so it can wake up the AVR immediatly… very impressive the level of customization some i2c chips offer. Others cases the whole thing will be off as in your project, but wake by timer, push readings and pool for any pending message to the node.

        Cheers

Comments on this topic in community Forums.