Intro: Programmable Smart Solar Oven
I have been using solar ovens for a number of years. I love to cook food with the Sun's energy, and, more often than not, the food tastes really good. I decided to do this project because I want to use the oven more than just on weekends, when I'm around to tend it. I know that people who do solar cooking sometimes put food in in the morning and come home after work to a cooked meal. I have done that myself. However, it is really hard to have control of the cooking duration and final outcome if you just leave the oven sitting by itself.
This instructable describes how to build a rotating platform that is controlled by an Arduino microcontroller. It follows the Sun until the food has cooked for a
predetermined amount of time and then it will turn the oven away from the Sun. I've only had a few opportunities to use it, because our rainy season just started, but I am
very pleased with the results and I can't wait for more opportunities to use it. After spending so much time on a project, it's very gratifying to know that it will actually be
Note: These instructions assume that you are using a box cooker. If you are going to use some other type of solar cooker, you will have to make some modifications.
Note: If you live in the tropics, the Sun may be so high that there is no way to completely turn the oven away to stop cooking. In that case, I think the best solution is to
make a mechanism that closes the reflector over the top of the oven.
The system consists of
- a circular platform on a lazy susan bearing
- a geared motor that turns the platform and a circuit that drives the motor
- an optical sensor that the microcontroller uses to determine if the oven is facing the Sun
- a temperature sensor that is stuck into the food being cooked
- the Arduino and a bunch of electronic components
- the Arduino program that I wrote
Step 1: Videos
Here's a short video show what the end-of-travel switch does when it works properly (See Step 6 of this instructable).
This video shows the platform working under simulation conditions. A desk lamp was used to simulate the Sun and a cup of hot water was used to simulate the food being heater.
This video shows my oven and platform tracking the Sun for the better part of a day last summer. For this video, I was using a circuit made of discreet components and the platform was not yet programmable.
This video is a benchtop simulation that I ran before running the program on the actual platform. I used a small DC motor to simulate the platform motor, a flashlight to simulate the Sun and a cup of hot water to simulate cooking food. I altered the Arduino program to operate with the lower light level and lower temperature. I also programmed the "cooking time" to be only four minutes.
Step 2: A Note on My Solar Oven (Box Cooker)
My oven is a pretty typical box cooker, but it has some atypical materials. The box is made of rigid polyurethane insulation that I got for free from a contractor who had extra material after a job. The reflector is an old aluminum window screen in which the screen has been replaced with a sheet of aluminized mylar. At some point I will do an instructable just for the oven.
For the rotating platform in this instructable, any solar cooker that has a preferred direction toward the Sun will work just fine.
Step 3: List of Materials
Electric drill and various bit sizes
Hole saws of various sizes (1", 1 1/4", 1 1/2")
Soldering iron and solder
Plenty of solid core wire
Third Hand and/or a Small Vice for holding electronics items when soldering
Step 4 Platform and Rotation Mechanism
Wooden Box - Large enough to accomodate an 18" circle on the top and deep enough for whichever gear motor you end up using (I used an old kitchen cabinet drawer)
Four 2x4s about 2 feet long (for the platform legs)
1/4-20 bolts andnuts and 1/4" washers to fasten the legs onto the box
Steel Bolt __ inches long
12 inch Lazy Susan Bearing
Round Plywood 18" in diameter
4 wood screws 1/2-3/4 inch long
4 Sheet metal screws 1 inch long
3/4" long piece of 1" PVC pipe
1" fender washer
1 1/2" wood screw
Step 5 Motor Drive Components
Motor and Gearhead from a cordless drill (you can use any dc gear motor that provides enough torque to turn the platform
Small rubber caster ~1 1/4 inches in diameter
~7" x 3" piece of 3/4" thick plywood
4-inch length of 1/4-20 threaded rod
2 1/4-inch nuts washers
#8-32 screw ~2 1/2" long plus nut and washer
2 #8-32 screws 1 inch long plus nuts and washers
small eye screw
A piece of aluminum sheet metal ~ 3 x 8 inches
4-5 ft. ength of 2-conductor wire capable of ~2 Amps
Step 6 End-of-Travel Switch
1 Microswitch with lever arm
2 small wood screws
1 small, thin piece of wood ~1 x 2 inches
Step 7 Sun Sensor
2 Phototransistors (Mine are made by Vijay semiconductor but any type will work. The Vijay's have a nearly 90 degree field of view, which has some advantages but is not necessary)
3 pieces of aluminum sheet metal ~7 x 2 inches
2 #6-32 screws (1/2-3/4 inches long) and nuts and washers
Stereo phone plug (three contacts)
Step 8 Temperature Sensor
1 Temperature sensor - LM 135, LM335, or any type with an analog output
Step 9 Electronics Circuit
1 Arduino microprocessor
9 Volt DC power supply (for the Arduino and 2-transistor non-inverting voltage amplifier)
12 Volt DC power supply (for the motor)
1 stereo phone jack (3 conductors) for Sun Sensor cable
1 Coaxial Power Plug (for the 5V motor power)
1 Power MOSFET transistor
2basic NPN transistors
1 rectifier diode
2 tiny push buttons that plug into a breadboard
2 100 ohm resistors
6-8 1 k-ohm resistors
1 10 k-ohm resistor
Step 10 LED Display
Option 1 - 8 LEDs
Option 2 - Two digit 7-segment display
1 2 x 3 inch IC circuit board
1 16-pin right angle male connector
2 16-pin right angle female connectors
8 inches of 16-conductor flex cable
1 LTD 482 EC dual 7-segment display
2 DM7447 7-segment driver ICs
8 470 ohm resistors (1 k-ohm also OK)
Step 4: The Rotating Platform
The solar oven sits on an 18 inch diameter circle of wood (commonly available in hardware stores) that is fastened with screws to a 12 inch lazy susan bearing. The bearing is fastened to the top of a five sided wooden box (dimensions). I actually used a drawer from an old kitchen cabinet for the box. The box has to be tall enough to accomodate the rather long drive motor assembly (see step 5). I added legs to the bottom of the box so the oven sits at a convenient height. You could also put it on a small table.
1. Follow the installation instructions for the Lazy Susan bearing and install it in the middle of the top of the wooden box.
2. Continue with the Lazy Susan instructions to mount the 18" circle of wood concentrically with the top of the Lazy Susan. To position the wood concentrically, I measured the distance to the edge of the bearing with a ruler and gradually moved things around until it was pretty well centered. I used short sheet metal screws that pass through the wood and fasten to the mounting holes on the bearing. If these screws are even a little too long, they scrape against the fixed surface of the bearing and keep it from turning smoothly.
The next step is for making a registering feature on the platform, so the oven can easily be placed right in the center. Since my oven is made of foam, I used a 1-inch hole saw to cut a small, circular depression right in the center of the oven. This depression mates with a protrusion on the platform. You may have to do something different, but it pays to have a convenient way of centering the oven on the platform.
3. Cut a piece of 1 inch diameter PVC pipe into a 1 inch length. Screw this into the center of the rotating platform, with a 1-inch fender washer in between the screw and the section of pipe. This protruding cylinder will be used to center the solar oven on the platform.
I found that the drive wheel didn't grip the wood circle too well, so I added a strip of rubber from a bicycle inner tube, fastened on with a staple gun. I drove the staples into the wood at a level that would not come into contact with the drive wheel (note: with the new drive system (Step 5), it appears that the rubber is not necessary.
Step 5: Motor Drive Assembly
The gear motor is from an old cordless drill. It has a planetary gearhead that increases the torque a lot, which is perfect for this application. If you can't get a hold of an old cordless drill, you can substitute any DC motor/gear combination, as long as it develops enough torque to turn the platfrom.
Taking apart the cordless drill was kind of a challenge and I learned how they work. I don't know how similar other cordless drill are to the one I used (an old Black and Decker). One thing that stymied me for a while is that there is a left-handed hex screw that holds the drill chuck on. I struggled for a long time to unscrew it, before I realized that it wasn't a right handed screw (See step 4 for a photo of the screw). I removed the chuck for my setup, but you may want to use it to hold your drive wheel.
The whole motor assembly is rather long, which is why the plaform box has to be so tall. If you use a more conventional gearhead, then you could get by with a shorter platform box.
At the top of the gearhead I fastened a small wheel with several rubber O-rings. Any small hard rubber wheel, such as a castor wheel, should do the trick.
If one were to mount the motor assembly with the drive wheel held rigidly against the rotating platform, then any small changes in the platform radius would result in changes to the load on the motor. In the worst case, the platform radius could get so large that it would stall the motor, or so small that the drive wheel would lose its grip against the platform. Instead, the drive wheel is not fixed, but is allowed to move in and out with the radius of the platform.
My first attempt at doing this is shown in photos 1 and 2 below. I had the motor assembly mounted on and pivoting on a 1/4 inch bolt. A small adjustable spring pressed against the motor assembly, ostensibly keeping it pressed against the platform with enough force. Because this whole thing created a long, flexible cantilever, it worked when the motor only had to turn the oven in small increments (for Sun tracking), but it didn't work well at all when I tasked the motor with rotating the platform enough to turn the oven away from the Sun.
My current system seems to work a lot better so far, although it still needs improvement. This time, the motor assembly is mounted to, and pivots on, a horizontal axis (see photo 6 below). When the right amount of weight is hung from the end of the wooden piece, it causes the drive wheel to be pushed against the side of the platform. Any changes in the platform radius will cause the motor assembly to pivot slightly up or down, always keeping the wheel in good contact with the platform.
Steps for making the drive motor mount:
1. The central part to this mechanism is a clamp made of 3/4 inch plywood (photos 3 and 4 below). First outline the shape of the part in pencil. For my motor, I made the large circle 1 1/4 inches in diameter.
2. Cut out the motor clamping circle with a hole saw and make the outline cuts with a hand saw.
3. Drill out the hole for the clamp screw.
4. Drill out the hole for the pivot. I used a 5/16" bit and my axis is a 1/4" bolt, which actually creates too much play. I will be improving this soon by adding a bronze bearing into the mechanism. It works for now.
5. Make a U-bracket that fastens the assembly to the box out of aluminum sheet metal ( I don't recommend this design and I will be changing to an improved design soon). You need to first figure out how far below the top of the box the pivot will be and then drill holes in the bracket for the pivot holes at that distance.
6. Screw a small eye screw into the far end of the clamp, about the same distance from the motor axis as the contact point of the drive wheel is from its pivot. When you hang a weight from the eye screw, it will act as a lever, providing force to keep the drive wheel pushed against the platform.
7. Assemble the motor in the clamp together with the U-bracket and pivot.
8. Insert the drive wheel up through the hole in the box and, from the top side, clamp the drive wheel so the motor assembly hangs in place (see photo below of how I clamped the drive wheel).
9. From below, carefully position the U-bracket in the correct location and mark the locations on the box where the thru holes will be.
10. Drill out the two U-bracket mounting holes on the box and fasten the U-bracket to the box with screws and nuts.
The problem with the current design is that there is too much play in the pivot and in the U-bracket. When the drive wheel is torqued, the U-bracket flexes and causes the drive wheel axis to tilt off-axis. In spite of this, the platform does rotate nicely.
I have already decided on a new design that should be more rigid than the sheet metal U-bracket. I have cut two blocks of wood that are like a cube with one side at a 45 degree angle (see the last photo below). I made these diagonal cuts by drawing a line with pencil and using hand saw. A more accurate method would have been to use a miter box, such as this one made by Craftsman tools. These blocks will be screwed into the side of the box and the pivot will be held and suspended between the two blocks.
Step 6: End-Of-Travel-Switch
Step 7: Sun Sensor
The Sun sensor uses two phototransistors separated by a small partition. When the Sun illuminates one phototransistor, while the other one is shadowed by the partition, the platform will rotate until both transistors are illuminated.
The structure is made of aluminum sheet metal. Many other materials could be used, so long as the phototransistors are arranged as described.
Piece 1 has two functions: to hold the two phototransistors and to mount the whole sensor to the solar oven. The other two pieces create the partition between the two phototransistors.
1. Drill two holes in piece 1 the size of the phototransistors, 1/2 inch apart, as shown in the first photo.
2. Make a 90 degree bend in piece 1 (photo 1)
3. Bend piece 2 such that the partition is about 2 inches tall.
4. Place the partition so it is exactly in between the two holes in piece 1 and mark the location of the right hole onto piece 2. Drill a hole in piece 2 at this location that is larger than the phototransistor.
5. Tape both piece 1 and 2 together with the partition in the correct place and drill a pair of screw holes through both pieces, as shown in photos 1 and 2.
Once you are confident that the two pieces will screw together properly, it's time to glue the phototransistors in place.
6. First, identify the collector and emitter of each transistor and mark them in some way. You can see a diagram of these leads at this link. You will see that, when looking at the back of each transistor, the emitter is the first lead clockwise from the tab and the collector is the third. The second lead is the base and it is not needed in this circuit.
Glue the two phototransistors into piece 1 with epoxy, as shown in all three photos. The tab on the back of each transistor may be covered with glue, which is why you need to identify the leads beforehand.
7. Once the epoxy is dry, solder the leads to the 3-conductor wire as shown. in my circuit the collectors of both transistors connect to the red wire, while each emitter connects to a separate wire.
8. Solder the other ends of the wire to the 3-conductor phone plug as shown.
Each transistor has the collector connected to +5V from the Arduino board and the emitter connected to ground via a 100 ohm resistor. The output of the sensor is from the top of the resistor, and this wire from each of the two transistors connects to an analog input on the Arduino (see Step 9 for the circuit diagram)
Step 8: Temperature Sensor
For a temperature sensor, I use either an LM135 or LM335.These are both integrated circuits with three leads. You could also use a TMP-36, sold by Adafruit Industries for $2.00. Note that the circuit used for the TPM-36 is a little different than that for the LM135 or 335. You could also use a thermistor or any other compatible temperature sensor.
I used a length of 3-conductor wire with one conductor soldered to each of the sensor leads. Note that I am only using two of the leads. The third one is for accurately calibrating the sensor, if desired. So, you could get by with a 2-conductor wire here. I guess there is some concern about this wire, because temperatures in the oven may reach 300 F. The two concerns are that a). the insulation could outgas some toxic chemical and b) the insulation could fail at high temperatures. For the first concern, I figure that any outgassing that happens will be done with after the first exposure, so if you are worried about this, just bake out the cable in your oven for a good while. For the second concern, I have seen my wire become a little discolored, but it still seems to work fine after a number of uses. Of course, the best solution (but not the cheapest) is to find wire with insulation that is rated for high enough temperatures.
The temperature sensor needs to be made water proof so it can be inserted inside the food that is being cooked, and it also needs to be food safe. I have done this in two different ways. One of my sensors is potted epoxy (see photo below) and then I wrap it in aluminum foil when I'm using it for cooking. With another one, I sealed it with shrink wrap, then insert it in the finger of a latex glove, and finally wrap that with aluminum foil.
There is also a nice instructable that has a different method for waterproofing one of these sensors and I may consider using that method myself.
See Step 9 for a circuit diagram of how the sensor is connected.
Step 9: Electrical Diagram and Schematic
The photograph, diagram, and schematic below show the connections between the arduino and the electronics and all of the sub-circuits. If the schematic is too hard to read, you can download it from this link. Note: I will add resistor values soon.
This is a list of the Arduino Pins and used and their functions
0-7 Digital Outputs for LED display
10 External Interrupt for end-of-travel switch
11,12 Digital Inputs for Programming Buttons
13 Digital Output to turn the motor on and off
0,1 Analog Inputs for Phototransistors
2 Analog Input for Temperature Sensor
- 5V 2A used for the platform motor (connects to power MOSFET)
- 9V 300 mA used to power the arduino and also a couple of NPN transistors that boost the
Arduino's digital out from 5 V to 9V.
Step 10: LED Display
Building the display was practically a project unto itself. Before I built it, I used digital pins 0-7 to display to decimal digits in binary numbers. This actually worked very well. For example, to display the number 36, the 8 digital bits would be: 0 0 1 1 ; 0 1 1 0.
So, you have a choice of using either the 8 LEDs (easy) or a pair of 7-segment displays (a lot of extra work).
The 2-digit 7-segment display is a LTD-482EC and it's driven by two DM7447 drivers ICs. Each IC takes four inputs from the Arduino (digital pins 0-3 for the ones digit and pins 4-7 for the tens digit). Then, each IC has seven resistors soldered to it and to a pin on the display chip.
The eight digital inputs from the Arduino are passed via a 16-pin connector, four to each driver IC. Each driver IC then has 7 outputs that go to 7 resistors that connect to the 7 segments of each digit. Check out the datasheets for each of these components to get the pinouts and connections that you need. Feel free to ask me for help if you need it.
I had a strange problem where displaying the temperature with the LEDs (either type) with digital out on pins 0-7 would change the analog in value for the temperature sensor. After several weeks, I finally figured out that I could eliminate this problem by putting a 1K resistor in series with each digital out. I guess that's a good thing in general to do with DO pins.
Step 11: Software
You can download a copy of the program below or from this link . The latest version is 4.2.1 I am working on it a lot right now, so check frequently for updates.
For testing the software, I found it very useful to have a benchtop setup that simulated the oven. See Step 2 for a video of this set up.
Below is a test "pseudo-code description of the program:
1. If left button pushed once go to step 2
2. count number of times right button pushed to set cooking temperature
3. If left button pushed a second time, go to step 4.
4. Count number of times right button pushed to set cooking time
5. If left button pushed a third time, proceed to main loop
6. If food temperature < cooking temperature oven is in pre-heating mode and will track the Sun.
7. If food temperature >= cooking temperature, oven is in cooking mode. It will track the Sun and also count down the cooking timer.
8. If the cooking timer reaches zero, the oven will rotate CW continuously.
9. If at any time the end-of-travel switch is tripped, the motor turns off. The oven will be facing away from the Sun.
Step 12: Cooking Results
From the few times that I've cooked with programmed cooking times, I can tell that this system is going to be very useful. I need to keep records like the ones below and build up a sort of database of foods and cooking times.
Cooking Results So Far (November, 2010):
2 sweet potatoes, wrapped in foil and cooked inside a covered black pot
Cooking Temperature: >70 C
Cooking Time: 180 min
A bit overcooked. Next time cook for 150 min.
3 beets covered in water in a small black pot
cooking temperature: >80 C
cooking time: 60 min
A bit overcooked. Next time cook for 45 min?
Small Kabocha winter squash
Cooking Temperature: > 70 C
Cooking Time: 150 min.
Turned out good.
Mini Pecan Pie, baked in a black ceramic bowl with a cover
Cooking Temperature: >80 C
Cooking Time: 150 min.
Cooking Temperature: >70ºC
Cooking Time: 150 min.
Turned out good.
Step 13: Project Notes
I have completely fixed the display and it now works perfectly. During pre-heating, the display shows the temperature in degrees celcius, and when the cooking temperature has been reached, the display alternates between the food temperature and the remaining cooking time.
I think I've solved the problem with the LED display!!!! I put a 1K resistor in series with the LEDs and now the temperature sensor is working and the correct temperature is being displayed. Now I just need to incorporate these resistors into my display circuit.
The failure of the end-of-travel switch when I shot the video two days ago revealed a design flaw which should have been obvious. The EOT switch contact screw has a really thin edge so the margin of error is slim. When the microswitch was passing the screw, this thin edge must have been either below or above the switch lever. This should be pretty easy to fix.
I have stopped using either of the LED displays for now (See Step 11) because they both cause incorrect temperature sensor readings. This is a big problem, because it means I can only monitor the program with a laptop and serial port, or I can run the program "blind" and hope that I'm pushing the right programming buttons.
Step 14: Future Directions
Some ideas I have are:
- Make the motor solar powered by having a small solar panel charge a battery
- Once the circuitry is settled, make the breadboard into a permanent circuit board
- insert a temperature sensor into a pointed rod, like a meat thermometer
- use the program and Arduino with a data logging shield so I can collect detailed temperature data for each cooking job.
- get a wifi Arduino shield so I can keep track of the solar oven when I'm at work and also automatically upload the data to Google Docs.
- Try to find some kind of basic formula for cooking time vs. temperature for a variety of foods.