Solar & supercap charged LoRaWAN IoT device

Use of solar panel and supercapacitor to enable an 3.3V 8MHz ATMega386P to function as remote IoT solution using LoRaWAN.

Similar projects worth following
This project is aimed at learning how to make a battery less solar powered IoT device consisting of at least one sensor that communicates the results via LoRaWAN to the Internet. The learning and experimenting is an essential part of the project (fun) and external knowledge and approaches are used where possible.

I've started, using the links supplied, with getting an ATMega chip running on 8MHz with use of internal oscillator .Then I tested with the blink sketch to see if it worked.

Using a multimeter I checked if the solar panel was supplying voltage and I used a bench power supply to quickly supply an initial load of the supercapacitor. That is also best practice to minimize current leakage according to many websites. With the solar panel it takes a lot of time. ;-)

I'm now in the phase that I can blink an LED for minutes just using the supercap & solar configuration as shown.

Next steps are to implement power saving options as mentioned by the nice Helisoph and Nick Gammon website (URLs are delivered).

Low energy settings via Arduino sketches

Today experimented with low energy options based on suggestions from Nick Gammon's website about Atmegq328P power saving. Started directly with the ATMega 328P on breadboard with internal 8Mhz oscillator and performed some tests with power consumption using the 5V from USB PC via USB&serial converter:

  • sketch A (empty sketch) 16 mA
  • sketch B (sleep mode Power_Down) 375mA/ 0.35 uA
  • sketch C (also brown out detection disabled) 0.35uA
  • sketch D (also all analog pins defined as output with voltage LOW) 0.2uA

I didn't continue because these low current numbers are already impressive and I need to define what options are needed (analog or digital sensor, I2C or SPI?, time or event based interrupt to wake up the processor, etc.). Based on initial choice for IoT usage scenario I can continue to define settings and improve understanding of power needs.

Another solar panel

Another aspect is the solar panel, I had a small one with a Skottky diode to prevent reverse current to solar panel. I changed it for a GH165x135 solar panel where on the back of the panel I've soldered a Skottky diode 1N5819 (1N5817 is even better) and it works perfectly and gave even 6V output past the diode.

I was surprised because with the forward voltage of the diode I expected something around 5.5V which I preferred because I wanted to use it tot charge a 5.5V supercapacitor. and don't want to overcharge it.

Change of plans with super caps

I've replaced the 5.5V 4F supercapacitor for two 2.7V 10F supercapacitors in series. This equals to 5.4V 5F. To avoid overcharging of the supercaps I saw some solutions using a zener diode to maximize for 5.1V but I didn't have that one. Then I used a MCP1700-5002E, low quiescent current LDO that delivers 5V for the two supercaps in parallel. Between the supercaps and the load I used the MCP1700-3302E to output about 3.3V. This is the voltage from my "power management" breadboard that I will use for my "IoT breadboard" with for now just the Atmega328P and LED for testing. In the next phase this will be replaced by sensors and a communications module. The solar power & storage solution can be improved but for now I'm happy with it.

At first I started with 2.7V 10F supercaps in parallel with the idea to run on ever lower voltages as a standard but that was to complex for me and a lot of sensor modules, FTDI USB serial converters that I have are aimed at 5V or 3.3V usage.

ATMega328P VCC versus frequency (from Atmel data sheet)

The used 8 mHz frequency of the MCU is within the range. The sensor is a larger challenge, most (cheap and simple) sensor boards for Arduino come in 3.3V or 5V versions. Most sensor ICs can handle lower voltages, for me the easiest is a digital sensor that handles voltage differences and calibration itself and only outputs what is needed. Using Google search, I've also learned that I2C can go down to 1.8V if needed.

Adjusting fuse settings

I used the Eleccelerator fuse calculator to deternine the fuse settings for the 328P. The main change was enabling the brown out detection (BOD) for a minimum voltage of 1.8V. I know that enabling BOD increases the current use but I don't want to have an instable 328P that can't recover.

Using Arduino ISP as programmer, I used AVRDude via the command line:

  • avrdude...
Read more »

  • 1 × ATMega328P-PU or ATMega328PB With boatloader and settings to use internal 8MHz oscillator
  • 1 × 10K Ohm resistor For pull up of reset pin
  • 1 × 4.7nF capacitor Small filter function
  • 3 × 100nF capacitor For AREF pin 21 to GND and between VCC & GND and AVCC & GND
  • 1 × 1N5819 Schottky diode To block reverse flow (there are better alternatives with lower Fv and better blocking)

View all 11 components

  • Elektor Uno R4 usable for my tests with 328PB

    PMBNL03/20/2017 at 16:18 0 comments

    Steps taken:

    • Use of Elektor Uno R4 board with small modification to use it as 3.3V MCU with 328PB that has 2 HW USARTs.
    • Added reset line to RN2483 to solve instable situations for communication.
    • Successful test with use of Serial and Serial1 in Arduino sketch for RN2483 communication and debugging via serial console

    Details of progress and next steps in main text of project.

  • Stuck with unstable softserial

    PMBNL03/12/2017 at 14:37 0 comments

    Steps taken:

    • Made test setting to test the serial communication and possible use of timer trigger from RN2483.
    • Use of logic analyzer to inspect serial traffic between 328P and RN2483 reveiled strange behavior. It randomly seems to work.
    • Retesting with another RN2483 and with a Pro Mini 3.3V 8MHz gave same results.
    • Ordered the Atmega328PB chip with 2 hardware UARTs and PCB to solder it on to ensure solid communication, this will impact my board setting.

    Details of progress and next steps in main text of project.

  • Connected to the LoRaWAN network on supercaps ;-)

    PMBNL02/23/2017 at 15:19 0 comments

    Additional steps taken:

    • Configuring the RN2483 via terminal session in order to save settings in EEPROM of device
    • Basic sketch to connect to LoRaWAN network using ABP
    • Lots of challenges had to be solved
    • First couple of successful LoRaWAN transmissions to KPN's network with the board powered by supercaps only

    Details of progress and next steps in main text of project.

  • First load test with supercaps only

    PMBNL02/21/2017 at 19:55 0 comments

    Additional steps taken:

    • Used timer based blink sketch with IDLE sleep mode to test usability of supercaps
    • Uptime without solar panel was 65 minutes with every 8 seconds the LED turned on

    Promising for further improvement.

    Details of progress and next steps in main text of project.

  • Hardware & power optimizations

    PMBNL02/20/2017 at 18:20 0 comments

    Additional steps taken:

    • Enabled Atmega328P's BOD at 1.8V level to enable usage at 3.3V or lower voltage
    • Use of 5V LDO between solar panel and supercaps
    • Supercaps in series with 5.4V (only 5V max used) and 5F as result
    • Use of 3.3V LDO between solar panel and supercaps
    • Test with renewed hardware using a standard blink sketch

    Details of progress in main text of project.

  • Summary of steps

    PMBNL02/16/2017 at 16:35 0 comments

    Highlight of steps sofar:

    • initial hardware setup
    • testing with low power settings for ATMega328P
    • use of other solar panel and 2 super caps in parallel

    Details of progress in main text of project.

View all 6 project logs

Enjoy this project?



PMBNL wrote 02/16/2017 at 16:32 point

Any suggestions for buck converter between solar panel and the two 2.7V 10F super caps in parallel? I'm looking at the DSN-MINI-360 buck converter with specs 4.75-23V to 1-17V. The small size is nice for minimizing the size of IoT solution enclosure.

  Are you sure? yes | no

florian.jean13 wrote 02/20/2017 at 09:55 point

Nice project
There is a mistake in your document. Two 2.7V 10F capacitors in parallel make a 2.7V 20F equivalent one and not 10F.

Also,Solar Panel are considered as current source (this explains the voltage
you didn't except). So you should consider putting a Zener diode in
parallel to the capacitor not to exceed the rated voltage !

In  order to step down the voltage, you have to add the regulator after the supercaps
(because the Solar Panel are a current source and a buck converter  is
controlled by the amount of current flowing in a coil (cf on/off time)).

The easiest way to do it in your case  is to put the two super caps in
series and to put a a 5V Zener in parrallel of the caps. You would have
(5 V /2 on each of them) and take the voltage only at the connections
at one of them. You can add an LDO from it with a pretty good efficiency (80-90%) if you want a stable voltage

Be sure the Zener is rated to dissipate at least the maximum amount of power you can receive from your solar pannel

I hope this will help you

  Are you sure? yes | no

PMBNL wrote 02/20/2017 at 10:36 point

Thanks for the recommendations! I knew that the parallel capacitors were still 2.7V. My thoughts were that 20F is a bigger "power buffer" that could be handy if the power consumption is higher with the use of sensors and communications module. The idea I worked on/struggling with was to use the 328P and possible I2C sensors to work with voltages between 2.7V and 1.8V. To do so I just used an Arduino ISP to program the fuses with BOD 1.8V in stead of a higher one. I don't want to disable BOD if that can result in instability.  With respect to the caps & solar source I will add a Zener as you suggested. I'm really struggling on the power thing, this is way more complex then I sought. ;-) For the supercaps in series I also read that I need balancing resistors(?). I will try to come up with a renewed idea for the power section and I would appricate if you could check that one too on newbie errors and if I understood your suggestions correctly.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates