PIC-based solar engine (PICSE) 2007

My PrayBot project last year needed a “solar engine,” and the quickest thing I could come up with was based on a PIC instead of the more usual BEAM-style solutions. This year I wanted something more efficient. But it still ended up with a PIC, and it’s much more efficient than any of the BEAM designs I’ve tried.

This came as a surprise. I’m not sure whether it’s because I didn’t do a very good implementation of the other BEAM designs, or because I spent a lot of time tweaking this one. Perhaps the BEAM folks are more interested in simple designs, and I can respect that. But for what it’s worth, neither the EZ Solar Engine nor the T3SE, which both claim to be more efficient and robust than most of the other SE’s, came anywhere close to the performance of the circuit I ended up with. The standard FLED circuit was hopeless.

I’m getting about 7 RPM in ambient room light, 200+ RPM in weak sunlight (just enough to see a shadow), and too fast to measure by eye in strong sunlight, with a light load (the spinning tub, as pictured in the old PrayBot gallery). It’s difficult to compare this precisely with the other engines, because their behavior is different (the EZSE waves back and forth, and the T3SE only releases current when the charge rate is decreased, so it doesn’t run continuously in low light), but in person, the difference is remarkable. I certainly haven’t tried all the BEAM engines out there (or even all the ones listed in the link above), so I’d love to hear about engines that might be more efficient than this one. Simplifications would be good too!

Circuit details

A solar engine’s basic task is to store up charge from a photovoltaic panel until there’s enough to start a motor running from a standstill, then release it.

Refer to the schematic image. Working from left to right, roughly:

  1. Switch S1 switches the solar panel PV1 into charging the main capacitor C1. When S1 is off, it connects R4 to drain C1, for easier testing and general safety.

  2. IC1 is the PIC microcontroller. It’s isolated from the supply by the RC filter R1/C3, which helps prevent it from getting locked up by rapid brownouts caused by the noise thrown out by the motor. It’s also protected from overvoltage by zener diode Z1.

  3. Zener diode D1 and R2 are the voltage sensor for IC1. The PIC is configured to turn on when VCC reaches 2 V. It then polls the voltage on GP1 periodically until it’s about 3.5 V. Then it turns on GP2 and goes to sleep.

  4. GP2 turns on Q1, which connects the motor to the supply. C2 holds Q1’s gate high after the PIC stops running - i.e., when VCC drops below 2 V. This helps performance tremendously, as it ensures that C1 is completely drained before the motor is turned off. R3 ensures that Q1 is eventually turned off, which ensures that we’re not still trying to run the motor when we return to the charging phase.

  5. The motor is a particularly efficient Hankscraft motor (purchased at Electronic Goldmine sometime last winter). D2 handles any inductive kickback after Q1 turns off, and possibly also protects against reverse voltage if someone spins the motor backward.

The changes that made the greatest efficiency differences were:

  • Using a MOSFET for Q1 instead of a BJT.

  • Adding C2 to keep Q1 open as long as possible, and then adding R3 to close it thereafter.

  • Tuning IC1’s trip voltage to suit the motor and PV panel (not as important, but helpful).

  • Probably using a control method that uses very little current while charging and almost none while running.

The binary for the PIC’s firmware is attached below; source (in SourceBoost C) or programmed chips are available on request.

PrayBot firmware - source and binary38.05 KB



Could you please email me a copy of your firmware for this pic solar engine. I would be very interested in trying it out and comparing it to the EZSE.

Thank You, Gene


I’ve attached it here, but I can’t e-mail it to you without your address… If you want more, let me know!

Source Code

Hi, thanks for the hex file. Is it possible for you to email me the source code? (gururise AT gmail DOT com)

Thank You, Gene


I emailed it to Gene, and have updated the zip file here with source for anyone else interested.

Did you try a miller SE?

Did you try a miller SE?


No, I didn’t have a 1381 around and had all the other parts. It would be interesting to compare. The MOSFET was more efficient than the BJT in my tests back then. And I spent a little time tuning the PIC’s switching thresholds to what worked best with this particular motor.