The base of SolarNAV is a laser-cut acrylic box designed to fit the servo motors within the structure for added support. The acrylic box provides a strong base for the solar panel which is mounted on top of a universal joint with double sided 3M tape. The box shape of the base also helps to prevent the system from tipping over when the solar panel tilts all the way to one side. The solar panel is a 5 watt NOCO Bisolar5 panel that is weather proof and scratch resistant. In order to tilt the plate, servo motors move rods up and down that are attached to the plate. Since there are two servo motors, the plate has two axis of rotation that allow the solar panel to tilt in virtually every direction.
SolarNAV is controlled by an Arduino Uno which is a microcontroller that is programmed to position the solar panel relative to the sun based off of photoresistor readings. There are two arrays of three photoresistors each on individual breadboards. Each array of photoresistors controls an individual servo motor's position. Based off of photoresistor readings, the Arduino will activate the servo motors in order to tilt the panel towards the sun. The power for the system comes from a rechargeable 12 volt lead acid battery that is continually recharged by the solar panel. The solar panel is directly connected to the 12 volt battery, so the battery recharges at the same time that it is powering the system in order to make SolarNAV self sustaining. Buck converters are used between the 12 volt battery and the Arduino and servo motors in order to ensure proper voltage to power each component. All of the wires have in-line fuses with proper ratings for the circuit components. All of the wiring for SolarNAV goes through power distribution blocks for ease of use and organization of wiring. SolarNAV can be turned off and on through a single switch that is connected to the battery.
The Arduino is programmed to run a single function in an endless loop called sunSet(). This main algorithm is responsible for checking the position of the sun through photoresistor readings and then changing the position of servo motors in order to tilt the panel towards the sun. The photoresistors are programmed to take arrays consisting of ten sample readings each that are then averaged in order to ensure an accurate measurement of the sun's position if one reading was off for whatever reason. The Arduino is programmed to move the solar panel throughout a range of nine different positions. The panel with move directly north, south, east, or west if the highest photoresistor reading is significantly greater than the others, indicating that the sun is in that direction. If two photoresistors have similar readings, it indicates that the sun is in a direction between north, south, east, or west, so it will move the solar panel north-east, south-west, north-west, or south-east. The final position is if the sun is directly overhead, in which case the solar panel stays flat towards the sky. In order to minimize power consumption, the Arduino is programmed to take readings every 30 minutes, going into a sleep mode in-between readings where minimal power is used.