Build a Model Satellite with Arduino
Abstract
Have you ever wondered how satellites steer themselves? How can a spy satellite aim its camera? How can a satellite keep its solar panels oriented toward the sun? In this project, you will learn about one method satellites use to control their orientation, called a reaction wheel, and build your own working prototype of a miniature satellite.
Summary
Previous Arduino experience is recommended. See our How to Use an Arduino page for tutorials.
An Arduino kit is available from our partner Home Science Tools®. Additional supplies are required to complete the project. See Materials list for details.
No issues
Objective
Design and build a model Arduino satellite with a reaction wheel.
Introduction
How do satellites steer in space? Satellites are launched into orbit around Earth. While in orbit, satellites may need to control their orientation, or attitude, for a variety of reasons. A communications satellite (satellites that help send data like cell phone or internet signals) might need to point an antenna toward a certain location on the ground. A spy satellite (satellites typically used by governments to take pictures of Earth from space) may need to carefully aim a sensitive camera or telescope. A satellite might need to aim its solar panels toward the sun to maximize solar power generation. Satellites might also need to make small corrections to their orientation from disturbances caused by things like solar radiation pressure, Earth's magnetic field, or atmospheric drag.
Satellites can use a variety of different methods and technologies to control their attitude. One method is to use thrusters that eject mass. If the thruster is offset from the satellite's center of mass, this will generate a torque and cause the satellite to rotate. Thrusters can be chemically-based (burning a fuel and ejecting the exhaust) or electrical (for example, ejecting ions). Another method is to use magnetic torquers, or magnetorquers for short, which use electromagnetic coils to interact with Earth's magnetic field, generating torques on the satellite. A third method is the reaction wheel. When the wheel spins in one direction, due to conservation of angular momentum, the satellite's body will spin in the opposite direction. A combination of three reaction wheels can control the satellite's rotation in three-dimensional space (Figure 1).
In this project, you will build a model satellite that uses a single reaction wheel to aim itself at a light source. The satellite will hang from a string, allowing it to rotate about a single axis (Figure 2). Two light sensors, called photoresistors, detect which way light is coming from, and the satellite spins the reaction wheel to rotate toward the light. This could help a real satellite keep its solar panels pointed towards the Sun in space. While a real satellite would need to do this in three dimensions, since you are doing your experiment on Earth and not in orbit, you will just demonstrate rotation about a single axis.

You can choose whether to add other sensors or accessories to your satellite, for example, an accelerometer to detect the direction of gravity, or light-emitting diodes (LEDs) as status indicators. See our extensive list of Arduino tutorials linked in the Bibliography for instructions on many other Arduino-compatible parts.
Terms and Concepts
- Orbit
- Attitude
- Solar radiation pressure
- Magnetic field
- Atmospheric drag
- Thruster
- Torque
- Magnetic torquer (magnetorquer)
- Reaction wheel
- Conservation of angular momentum
- Photoresistor
- Accelerometer
- Light-emitting diode (LED)
Questions
- Why would a satellite need to control its orientation in space?
- How does a reaction wheel work?
- What are some different ways a satellite can control its orientation?
Bibliography
- Wikipedia. Reaction wheel. Retrieved September 16th, 2026
- Jet Propulsion Laboratory. Attitude and Orbit Control System. Retrieved September 16th, 2026
- European Space Agency. Control Systems. Retrieved September 16th, 2026
- Finio, B. (n.d.). How to Use an Arduino. Science Buddies. Retrieved September 16th, 2026
- Science Buddies Staff (n.d.). Engineering Design Process. Science Buddies. Retrieved September 16th, 2026
Materials and Equipment 
Recommended Project Supplies
-
Electronics Kit for Arduino, available from our partner Home Science Tools®.
- Note: This project will work with the Arduino UNO R3, UNO R4 Minima, UNO R4 WiFi, and compatible third-party boards.
- Additional electronic supplies (not included in the kit):
- LD93D H-bridge
- DC motor with leads
- Photoresistor (2)
- 10 kΩ resistor (2 total, 1 included with kit)
- Optional: small solar panel (2). Make sure the solar panels are less than 5V if you would like to measure their voltage with the Arduino.
- Windows or Mac computer. See this page if you have a Chromebook. Your computer will need:
- Access to the Arduino IDE, either installed local version or web-based editor (note that Chromebooks can only use the web version). Watch this video for a comparison of the two options.
- USB port. The Science Buddies kit comes with a USB-A to C cable. The "C" end plugs into the Arduino and the "A" end plugs into your computer. You will need an adapter or different cable if your computer only has USB-C ports. Watch this video to learn about the different types of cables and adapters.
- Additional craft supplies and tools for building your satellite (may vary depending on your design)
- Cardboard
- Double-sided tape and/or hot glue gun
- Popsicle sticks
- Plastic straw
- Cardboard
- String
- Small eye hook (available at a hardware store)
- Power drill (for drilling hole to insert eye hook into breadboard)
- Clamp for hanging string from shelf
- Small cork
- Flashlight
Disclaimer: Science Buddies participates in affiliate programs with Home Science Tools®, Amazon.com, Carolina Biological, and Jameco Electronics. Proceeds from the affiliate programs help support Science Buddies, a 501(c)(3) public charity, and keep our resources free for everyone. Our top priority is student learning. If you have any comments (positive or negative) related to purchases you've made for science projects from recommendations on our site, please let us know. Write to us at [email protected].
Experimental Procedure

Build Your Circuit
- Read about the engineering design process and think about constraints and criteria for your satellite before you proceed. See the link in the Bibliography.
- Assemble your circuit as shown in Figures 3, 4, and 5. You can also access a Tinkercad Circuits version of the simulation here. The circuit uses a part called an H-bridge to control a motor so it can spin in both directions and act as a reaction wheel.
- For now, keep both your Arduino and your breadboard flat on the table.
- Save space on the top half of your breadboard. You will be taping your motor and 9V battery there later.
- Note that your breadboard may have the left/right orientation of the positive (+) and negative (-) buses reversed. Always base your connection on whether it should be positive or negative, not the left/right position.
- Put the H-bridge chip in the breadboard so the notch is facing up (toward row 1). The chip has 16 pins, labeled counter-clockwise starting at the top left. Use jumper wires to connect the pins as follows:
- Pin 1 to positive bus.
- Pin 2 to Arduino pin 4.
- Pin 3 to motor positive wire.
- Pin 4 to negative bus (also called ground).
- Pin 5 to negative bus.
- Pin 6 to motor negative wire.
- Pin 7 to Arduino pin 2.
- Pin 8 to positive bus.
- Pin 12 to negative bus.
- Pin 13 to negative bus.
- Pin 16 to positive bus.
- Pins not listed here remain disconnected (they can be used to control a second motor).
- Note: this configuration will power the motor from the Arduino's 5V pin (the Arduino will be powered by a 9V battery). Normally, you would need a separate, external battery for a motor, because it will drain the 9V battery very quickly. However, for this project, you want to keep the satellite lightweight, and using the 9V battery is OK for quick demonstrations. See this video about how to power an Arduino project for more details.
- Connect a photoresistor and 10kΩ resistor in series to form a light sensor:
- Place the resistor's legs in two different rows of the breadboard. Make sure they are not in the same row as any of the H-bridge pins.
- Place one leg of the photoresistor in the same row as one of the resistor's pins. Place the other leg in a separate row.
- Connect the free end of the resistor to the negative bus.
- Connect the free end of the photoresistor to the positive bus.
- Connect the middle (the row where the two parts meet) to Arduino pin A2.
- Repeat step 2.e on the other side of your breadboard (across the gap in the middle), but connect this sensor to Arduino pin A3.
- Connect power to your breadboard:
- Connect the opposite positive buses together.
- Connect the opposite negative buses together.
- Connect the Arduino's 5V pin to a positive bus.
- Connect the Arduino's GND pin to a negative bus.
- Optionally, connect your two solar panels. Important: only connect your solar panels directly to the Arduino if their maximum output is 5V or less. Higher voltages can damage your Arduino.
- Connect each solar panel's negative wire to a negative bus.
- Connect the solar panels' positive wires to Arduino pins A0 and A1.



- Download the Arduino example code. Read through the commented code so you understand how it works.
- Upload the code to your Arduino. Open the serial monitor (Tools→Serial monitor) and look at the light sensor values. Make sure your body is not blocking or shading the photoresistors when you do this.
- The values may fluctuate slightly even if you are not moving. That is OK. Enter the approximate values you see for the
light1Baselineandlight2Baselinevariables in the code, then re-upload the code. - The motor should not spin. Now, try either covering one of the photoresistors with your finger or shining a flashlight directly at one of them but not the other. The motor should spin.
- Cover the other photoresistor (or shine a flashlight on it). The motor should spin in the other direction.
- Try adjusting the
deadbandvariable in the code. This will change the range of light sensor reading differences in which the motors will not spin. You do not want this value to be zero—since the sensor readings are slightly noisy, this would cause the motor to constantly spin back and forth when the readings are close.
Build Your Satellite
So far, you have built a working prototype circuit on a breadboard. Your goal for this project is to build a working model satellite that can demonstrate reaction wheel control around a single axis. This is an engineering design project, so there is no single right or wrong way to do it. Figures 6 and 7 show two possibilities for mounting your satellite. Figure 6 shows the satellite hanging from a string. Figure 7 shows the satellite mounted on a vertical wooden dowel through a clear plastic straw. Both methods allow the satellite to rotate, but each one has advantages and disadvantages. This section of the procedure will show you how to build the satellite shown in the figures, but you do not have to follow this exact design.


To build a satellite similar to the one shown in this project, follow these steps. Refer to Figures 8 through 11.
- Temporarily disconnect wires that go from the breadboard to the Arduino.
- Peel the adhesive backing off the breadboard.
- If you will be mounting solar panels, attach popsicle sticks to the adhesive backing so they stick out to the sides.
- Attach a straw vertically in the middle of the breadboard. This is useful for a later step, even if you do not plan to mount the satellite on a wooden dowel.
- Using double-sided tape and pieces of cardboard as needed, attach the Arduino to the back side of the breadboard (Figure 8).
- Mount the motor and 9V battery to the empty area on the breadboard using tape or glue (Figure 9).
- Press a cork onto the shaft of the motor to give it added mass.
- Bend the photoresistors around the edge of the breadboard so they face "forward" (toward the Arduino side).
- Reconnect wires between the Arduino and the breadboard, carefully wrapping them from front to back.
- Attach a small piece of cardboard between the photoresistors (you can glue or tape it to the straw). This helps block light that is hitting one photoresistor from hitting the other one (Figure 10).
- Drill a small hole in the top edge of the breadboard and screw in a small eye hook (Figure 11).
- Tie a string to the eye hook.
- Clamp the other end of the string to a shelf.
- Your satellite is now ready to test! Make sure it can rotate freely, and then move on to the next section.




Test Your Satellite
- Disconnect the USB cable from your Arduino if you haven't already. The USB cable will prevent the satellite from spinning freely.
- Make sure the string is completely untwisted and the satellite is not rotating on its own due to torsion in the string.
- Plug the 9V battery into the Arduino using the snap connector and barrel jack. This will power on the Arduino and cause the program to immediately start running.
- The lighting conditions may have changed since you now have the satellite hanging vertically compared to when your circuit was sitting flat on the table. Ideally, your motor should not spin by default. Try to make sure no asymmetric shadows or light sources are falling on the photoresistors. You may need to adjust the lighting in the room, for example, by turning a lamp on or off, or by opening or closing window curtains.
- You may need to recalibrate your baseline light sensor readings while your satellite is vertical. This may require a longer USB cable so you can connect your satellite to your computer while it is hanging.
- Once you have calibrated your sensors so the motor does not spin when the satellite is just hanging there, try aiming a flashlight at one of the photoresistors. The motor should spin, causing the entire satellite to rotate in the opposite direction and point towards the light source.
- Note: if your satellite rotates the wrong way (spins away from the light source), temporarily disconnect the 9V battery. Switch the motor's positive and negative wire connections to the H-bridge. This will reverse the motor's spin direction and should fix the problem.
- If you shine your flashlight on the other photoresistor, does the satellite spin in the opposite direction?
- If you shine the flashlight evenly on both photoresistors at once, does the satellite hold still?
- If you have trouble with your satellite's performance, what changes could you make to the physical design or the code to make it work better?
- How could this behavior help a real satellite aim its solar panels towards the sun?
Ask an Expert
Variations
- Can you use the solar panel voltages directly to control your satellite's rotation without using the photoresistors at all?
- Can you use a proportional controller instead of a simple on/off controller to control your satellite's rotation? A proportional controller makes the motor spin faster as the difference between the light sensor readings gets bigger. You can use the Arduino analogWrite command on a pin connected to H-bridge pin 1 to control the motor's speed.
- Can you add LEDs to your satellite as indicators for the motor status? For example, one LED for clockwise rotation and one for counter-clockwise?
- Can you add other sensors to your satellite? See our list of Arduino tutorials for ideas.
Careers
If you like this project, you might enjoy exploring these related careers:
Contact Us
Our kits are developed in partnership with Home Science Tools®. If you have purchased a kit for this project, Home Science Tools® is pleased to answer any questions.In your email, please follow these instructions:
- Include your Home Science Tools® order number.
- Please describe how you need help as thoroughly as possible:
Examples
Good Question I'm trying to do Experimental Procedure step #5, "Scrape the insulation from the wire. . ." How do I know when I've scraped enough?
Good Question I'm at Experimental Procedure step #7, "Move the magnet back and forth . . ." and the LED is not lighting up.
Bad Question I don't understand the instructions. Help!
Good Question I am purchasing my materials. Can I substitute a 1N34 diode for the 1N25 diode called for in the material list?
Bad Question Can I use a different part?
Contact Support










