Before talking about the platform I made, I'm going to write a basic introduction on solar energy harvesting.
A solar energy harvesting system can be decomposed as shown below:

Solar energy harvesting system
As you can see, every element of this chain has quite important disavantadges. What I mean by "battery charge efficiency" is that typical Li-Ion batteries are not optimized to be charged at low currents (as far as the battery life is concerned).
So let's analyse in details each element shown above to get a better understanding of the solar energy harvesting concept.

Indoor lighting and solar panel orientation

Influence of solar panel orientation
Did you know that a 45 degrees misalignment of your solar panel reduces your solar panel energy extraction efficiency by 20% ? Actually , my tests showed that it is much more...
Looking at the graph above, you can already see that extracting solar energy in an indoor environment can be quite tricky, as you will mainly get the reflections of the sun rays in the room where your solar panel is located (and of course your indoor lighting).
For information, for an outdoor environment, if your solar panel is not tracking the sun position, you could expect this energy production:

Solar energy production through the year
From macslab.com: The graph above shows the effect of adjusting the tilt of your solar panel. The violet line is the amount of solar energy you would get each day if the panel is fixed at the winter angle. The turquoise line shows the energy per day if the panel is fixed at the full year angle. The red line shows how much you would get by adjusting the tilt four times a year as described above. For comparison, the green line shows the energy you would get from two-axis tracking, which always points the panel directly at the sun. These figures are calculated for 40° latitude.
You can clearly see a big difference in energy production if your solar panel is able to track the sun... quite impressive right?

The solar panel itself

Photovoltaic solar panels (the ones you will find everywhere) have very low efficiency. The ones I bought from seedstudio only have a 17% efficiency.
That is indeed quite annoying! Lots of research is currently being done to increase this efficiency, and some amazing discoveries have just been done. But you'll still have to wait quite a long time before these new panels are available for you to purchase.
And not only do they have low efficiency, but you can't use the produced energy as you would like to.
Solar panel I/V curve Shown above is the current / voltage curve of a typical solar panel for different lighting conditions. It shows the non-linear efficiency of the solar panel when it comes to electric energy extraction.
To get the maximum energy from the solar panel, you'd have to adjust your load so it is exactly at the right position in this I/V curve (black line in the graph). This is called Maximum Power Point Tracking (MPPT), and can be done using several algorithms.

The battery charger

This element takes the energy from the solar panel to charge your battery.
It is mainly composed of a step-up voltage converter and usually includes a basic Maximum Power Point control circuit.
However, its efficiency will vary with its output current.

Efficiency of the LTC3105
The graph above is taken from the Linear Technology's LTC3105 solar energy harvesting chip datasheet that I had previously chosen for my solar energy harvesting logging board.
What can we say? Well, it's great if you have plenty of light in your house, but otherwise... not good.
And you know what? When there's no light in your home, this chip consumes 40uA!!! Quite a bad surprise when I assembled my first board....

All in all

Here is a simple drawing that summarizes what I wrote until now:

Overall system efficiency
I will let you do the maths :) ...
Anyway, this is a first answer to the question "why am I still not seing anything solar-powered in my everyday life?".
But let's not give up that easily. Why? Firstly because we still would like some numbers on the energy you could expect to harvest / lose in an indoor environment but also because 2 months ago (at the time I am writting this article), Texas Instruments launched an interesting chip on the market: the BQ25504.

The logging platform

So here is a picture of what I want to log :

What the platform will log
In plain text, I want to know at any moment in time what is the energy that is given to / lost by my battery.
And while I'm at it, I want to compare it with the energy that is dissipated in a fixed load when the same solar panel is not connected to a battery charger (ie another solar panel is directly connected to one resistor).
The goal of these two energy measurements is therefore to check the performance of my battery charger (MPPT + efficiency).
So here are the schematics:

Logging board schematics
So what you should firstly see here is that two batteries are used, one dedicated to receive the harvested solar energy and the other to power the logging circuit.
The battery charger is therefore the BQ25504 from Texas Instruments, and all the resistors you see around it are used to set the correct charging voltage and MPPT parameters. This new component is very promising and is already encountering quite some success on the blogs accross the web, even though it is still not available for sale (you can ask for some samples though ;) )! Unfortunately the BQ25504 is in a QFN package... lots of fun to solder!
You may also notice that I'm not using the MAX9934 bi-directional current sensing capability. The reason for this is that the BQ25504 quiescent current is only 1uA, which is nothing compared to the current provided by the battery charger when there is little light (all these data have been measured by me, as it is not the first board revision ;) ).
When there is no light, the quiescent current of the harvesting part of the platform is actually 3uA (1uA from the BQ25504 + 2uA from R6&R7). Please note that increasing R6&R7 value to reduce the quiescent current will make your Vcharg voltage reading not accurate as the ADC input resistance of the ATtiny is not infinite. Anyway, I only want a worst case scenario (ie what is the minimum harvested energy I can expect for a given month).
So basically the chosen ATTiny87 is able to measure at any moment the voltage of (the battery + sensing resistor), and the current going through them.
R4 and R5 have been set to measure up to 4.4mA in the BT1 + R4 branch, thus I will only be able to measure up to 18.5mW charging energy. My first measurements showed that you will not be likely to attain this energy level in an indoor environment.
Expected sensing resolution is.... well it varies with the voltage across R5. Why? Because I can use the differential input of my ATtiny87, which can have a gain of 1x, 8x or 20x. Its ADC has also three voltage references: 1.1V, 2.56V and the system's 3.3V, so I'm not going to list all the cases here.

BQ25504
Concerning the solar panel which is directly connected to a fixed load, R8 & R9 have been chosen in such a way that the maximum energy that you can measure is the same as the one above (18.5mW). R = U²/P, with U = 5V and P = 18.5mW.
Resolution for this part is (when chosing the 2.56V ADC reference) 10mV which corresponds to a 0.29uW resolution.
For the logging part, the ATtiny87 has a 256kbits SPI EEPROM connected to it, allowing a one-month logging capability for 4 bytes of data taken every 6 minutes (3 voltages + one parameter bytes). Once again, I don't need the maximum resolution that the ADC can provide (10bits) but just a worst case energy harvesting scenario, so 8 bits are enough (and I'm not even mentioning the internal reference & amplifier gain precisions). One could argue that I could also have chosen a Flash storage chip or an external SD card. Well, I mainly chose this solution because I wanted to collect the data every month and because it was simpler this way :) .

System in action
The microcontroller has a 32k crystal connected to one of its timers to have a (quite) accurate time base. The U7 connector is present on the board to allow data export through the ATtiny serial interface (ie you just have to connect these lines to a FTDI232 serial to USB converter).
The MAX1551 li-ion battery charger is here to allow logging battery charge at any point in time, and the brand new ADP162 LDO 3.3V regulator from Analog Devices has been chosen, as it has a very low quiescent current (7uA for 1mA load) and a very low dropout voltage (7mV for 10mA load). Current consumption of the whole circuit is 635uA in sleep mode, which gives me a nice theoritical 38 days autonomy for the 580mAh Li-Ion batteries I just bought. Here is the picture of the assembled board:

Finished platform
Please note that on this board, you'll have to monitor (well, maybe once a month) the voltage of the BT1 battery in case it is full. But nothing to worry if you choose a high capacity Li-ion battery :) . Therefore, one improvement could be to allow the ATtiny to discharge the solar energy harvesting battery, but I'm not sure that it is crucial.
Do I have beautiful graphs to show you? Not yet! I wanted to publish this article on my blog as soon as I had a fully tested board so you may want to do the measurements at the same time as me. But I can already tell you that this BQ25504 chip is quite impressive! The few tests I already made showed that it has a better efficiency than a solar panel directly connected to fixed load.
So here are the files in case you want to join the initiative ;), let's build a database of energy measurements!:

Datasheets Solar platform production files Source files

By the way, the computations performed in the main.c file with floats is just for your information and debug. You will want to remove all this part as I found that computations with floats in an ATtiny takes a lot of space (DUH...) but also corrupted data stored in the ram space on my platform (my guess is because of a stack/heap collision)... If you still want to use this functionality, you may want to find a way to do this computation with only multiplication and bit shfiting :) . Be aware that if you're not familiar with the structure of an AVR microcontroller memory space, these bugs are practically impossible to find.

Still reading? Ok, just because it is you, here are the energy measurements I had today at home :

First energy measurements
Not bad right? Average harvested energy for this 24h period is 244uW for the BQ25504 and 141uW for the fixed load.
This was during a semi-cloudy / sunny day in mid-december in Switzerland. The board was approximately 3 meters from the window, solar panels facing up, with the axis platform > window > south west :

Home
What's next? Energy measurements through the year, with a lot of platforms in a lot of different rooms! Let's see what we can harvest....