Experimenting with Raspberry Pi power management

When creating new interfaces for museums as part of the meSch project one issue that arises regularly is power management. For some battery-powered systems, such as the Blidgets, current consumption is small and so they have a long battery life. However, they lack significant processing power. Often we require something such as a Raspberry Pi in order to run the software that powers our installations. When such installations are fixed in place, as with the meSch cases, we can use mains power. But for handheld, wearable or portable devices we need battery power. The issue then is how to minimise the power usage of the device so that we gain the longest possible battery life.

There are various options for this. First off, we can start by using a Raspberry Pi Model A, rather than a Model B as it has a lower current requirement. This does however limit the number of USB devices that can be connected to the RPi and also removes the Ethernet port.

It is also possible to reduce the current requirements by disabling parts of the RPi board that we are not using. For instance we can disable USB and ethernet on the Model B. Another, more complex option is to replace the on-board voltage regulator with a switching regulator and run the RPi board on 3.3 rather than 5 volts.

Another possibility is to conserve power by shutting down the Raspberry Pi when it is not needed and starting it up again when it is. Often in embedded systems we place devices into a low current sleep mode and then ‘wake’ them when we need them to do something. This means that the device is only really running and drawing significant power for a small percentage of time, which can significantly increase battery life.

Recently, I’ve been experimenting with an add-on board for the Raspberry Pi called a Sleepy Pi. This board plugs directly into the Raspberry Pi expansion header and offers a number of power management options for the Raspberry Pi. It allows you to easily shutdown and restart the RPi with button presses, using an on-board button or a button connected to a jumper on the board. It also contains an Arduino that can be used to shutdown and restart the Pi based on incoming digital or analog signals on the Arduino pins. This means that for instance we could start the Raspberry Pi when a sensor connected to the Arduino registers an event. The Raspberry Pi could then process this event data and generate the necessary output, before shutting back down.

Sleepy-Pi-Rev-E-500

In a museum, for example, the Sleepy Pi could be connected to a IR beam sensor that triggers when a visitor enters a room. This could then start the RPi and present content to the visitor, such as audio or a video projection and then shutdown once the presentation is complete. Or, when used in a mobile device like the Companion Novel, the Raspberry Pi could be shutdown while the visitor is walking around the heritage site and then started up once they enter an active location.

Initial experiments with the Sleepy Pi have been quite positive. Triggering start up and shutdown of the Raspberry Pi is quite straightforward and works well. One possible issue is the start up time of the RPi itself, which could impose restrictions on how this sort of power management can be used. I am currently working on updating some of our meSch prototypes and hope to incorporate the Sleepy Pi into at least one of them. After that I should be able to report in more detail about the effectiveness or otherwise of this approach.