smart switch for Raspberry Pi


I recently decided to use my second Raspberry Pi which I wasn’t using as an emulator for old video game consoles. I won’t detail the emulator part, but I used PiMame which does basically what I wanted.

But I had a problem :  the shutdown ! Because yes, the only way to turn off my “gaming console” was to unplug the power cable; this is not convenient at all, and it also does not properly shutdown linux.

I did some research to find a switch for the Raspberry Pi which waits for the linux shutdown to cut the power, I found one but it wasn’t exactly what I was looking for; it has several buttons (one for power on, one for power off and one for reset). I didn’t want that, I only want one button which does power on and power off.

So I decided to do it myself ! The specifications were simple :

  • only one button for power on and power off
  • the power off should notify the Raspberry Pi to shutdown, and then wait some time to cut the power

Here is how it works:

  • there is a bi-stable relay, which brings the +5v to the Raspberry Pi
  • the button is a “momentary” button (and there is also a led inside the button, which is nice)
  • when the button is pressed, it applies +5V to the “set” coil of the relay, and the power is applied to the whole system
  • then the Raspberry starts, and there is a small batch script which put ‘1’ to an output gpio
  • this gpio drives the base of a transistor mounted as an inverser
  • when the user press the power button again, it applies +3,3V to an input gpio
  • the script on the Raspberry sees the ‘1’ on the input, it now drives the output to ‘0’ and it ask a shutdown
  • this ‘0’ on the output gpio now drives a +5v on the collector of the inverser transistor
  • on the collector there is a capacitor with a resistor, so the capacitor starts to load until +5V
  • the capacitor is connected to the V+ entry of a op-amp mounted as a comparator
  • on the V- of the op-amp, there is a zener diod at 3,6V. So when the capacitor is loaded at 3,6V (the values are chosen so it takes about 2 minutes, which is too long but I planed to much when I designed it, I will change later) the op-amp output toggled to +5V (it is a rail-to-rail op-amp)
  • this op-amp output is connected to the reset coil of the bistable, which cut the power of the system, et voilà !

Here is a link to the schematic : SmartSwitch.pdf

For sure this is not perfect, but I am not an hardware guy, and this is a first version !

There are some other stuffs on my schematic that do not concern this switch. There is a connector for a fan, because I want to cool down the temperature of the Raspberry Pi, it can be quite hot when the emulator is running. And there is also a switch; I want to select on which emulator the Raspberry starts instead of having to choose it on the pimame menu (which requires a keyboard !).


Next step : design a nice PCB, instead of this ugly prototyping board !

This is a quick explanation, if you need more details, do not hesitate to leave a comment !