Making Low-power(0.12μA) Arduino Control Board




When make some electronic stuffs powered by battery, it is important to save the power. I look for the proper Arduino compatible control board, but there is not. So I designed a Arduino-compatible low-power controller named by μHex.

μHex power consumption is only 0.12μA@3.3V in sleep mode. When in sleep, μHex will turn off the power to the peripheral modules except for waking module. So the system is very efficient.

The features:

  • 4 switchable power supply interfaces to reduce power consumption
  • Two sleep-wake interfaces for convenient interactions with surrounding
  • Cross design in power and IO interfaces, directly supports 3 pin/4 pin sensor/actuator

Step 1: How Effective Is the ΜHex?

How effective is the μHex? I have made a comparison test between Arduino mini pro and μHex. Using LIR2032 battery, both sample temperature and humidity data and display the data on the LCD when waked up from sleep every 30 minutes. Test results shown below, the battery voltage of mini-pro falls below 2V after 5 hours but the voltage of μHex is only reduced by 0.1V after 38 hours.

Step 2: Power Consumption Test

Test Target

  • μHex: ATMEGA328P@8M RC
  • mini-pro:ATMEGA328P@8M crystal

Test Environment

  • Testbed: use Romeo from DFRobot
  • Battery:rechargerable lithium coin LIR2032
  • DHT22:Temperature and Humidity Sensor
  • LCD: I2C 1602 LCD

Test Method

  • Target: Both is in a sleep state by default. When waked up by testbed, sample temperature and humidity and then display data on the LCD. After 10 seconds, they will go to sleep again.
  • Testbed: Trigger an interrupt every 30 minutes to wake the targets, and then read the battery voltage of the targets.

Step 3: Design Principles

  • Only work if be needed
  • Reduce unnecessary conversion
  • Reduce the clock frequency

Step 4: Hardware Design

Refer to the schematic. The important is:

  • Use mosfet(T1) to control the power out, so you can shut down the peripheral modules.
  • C3 is necessary. If not, the MCU maybe been reseted when power on the peripheral modules.
  • The frequency of MCU is 8Mhz, so it can be work 2.7V-5.5V.
  • There is not any voltage conversion.

Step 5: Software Design

I have push the Arduino library microPoly Library to Github. You can download it and read it. Here I only describe the sleep process:

  1. Disable IO ports (set INPUT mode): because they could power the peripheral modules.
  2. Disable feature blocks (UART I2C): must be done because these features override the IO ports.

  3. Shut down power out( disable mosfet )
  4. Disable BOD (BOD is automatically enabled after waked up)
  5. Goto sleep
  6. Recover power out
  7. Recover IO port's settings
  8. Recover feature blocks

Reference: consumption of some blocks of ATMEGA328P at 3.3V, 25 Celsius degree and Power Down mode

Module Consumption

WDT 4.1µA

ADC 92µA

BOD 17µA

Analog Comparator 53µA

Step 6: Make ΜHex

  • You can get the eagle files, bootloader from ( to make it under the CC BY-NC 3.0 License.
  • or You can get μHex from DFRobot (

Enjoy DIY, Enjoy yourself.



    • Growing Beyond Earth Maker Contest

      Growing Beyond Earth Maker Contest
    • Planter Challenge

      Planter Challenge
    • Sensors Contest

      Sensors Contest

    15 Discussions


    4 years ago on Introduction

    Thanks. You can get them from


    Hi, what a great project you did!

    May I ask what kind of bootloader/board file you used for the 8Mhz internal clock and where I can find it?


    4 years ago on Introduction

    Hi i'd like compile this measure.ino files (arduino ide 1.6.3) but it generates library error

    C:\Users\HHS\Documents\Arduino\libraries\micropoly\microPoly.cpp: In member function 'void MicroPoly_class::updatePinTriggerState()':
    C:\Users\HHS\Documents\Arduino\libraries\micropoly\microPoly.cpp:393:55: error: invalid initialization of reference of type 'uint8_t& {aka unsigned char&}' from expression of type 'boolean {aka bool}'
    uint8_t &state = a_InterruptManager[interruptNum].state;

    I don't know what is went wrong, libraries are right places, check. any helps

    3 replies

    Reply 4 years ago on Introduction

    Thank you. I use IDE 1.0.6. but there is a compile error on IDE 1.6.x. Now you can update the library from github. or modify: file- microPoly.cpp, Line 393:

    from: uint8_t &state = a_InterruptManager[interruptNum].state;

    to: boolean &state = a_InterruptManager[interruptNum].state;


    Reply 4 years ago on Introduction

    You are welcome:) Thanks for bug report. The measure.ino use third part's libraries, you can get them from the below links:

    ***************************** Hardware *************************************DHT11 I2C LCD1602

    Reply 4 years ago on Introduction

    1, You can upload bootloader by the smt pads of uHex's back. you can using pogo pin or solder wire to it. Yes, it is not very easy:(

    2, I have designed and made a pogo clip for smt pad interface. I will launch it when I finish the tutorial.


    Reply 4 years ago on Introduction

    you can get it from Step 6. and you can find a link to github.


    4 years ago on Introduction

    Nice build :D I wish I was good enough at soldering to build my own :( I cant do surface mount soldering at all

    1 reply

    you should do a kcikstarter or somthing this is what i have been looking for but i am not willing to do smd soldering

    1 reply

    Reply 4 years ago on Introduction

    Thanks. Yeah, it is a bit hard to do smd soldering. I have authorized DFRobot to production and sale μHex. You can get it at