Finding Fëanor

From ESE205 Wiki
Revision as of 19:20, 13 December 2016 by Fordicejw (talk | contribs)
Jump to navigation Jump to search

Project Overview

The primary drawback of solar panels as a commercially viable energy harvesting application is the high cost per energy harvested. Currently, the best consumer solar modules are able to achieve an efficiency of 24%, meaning that about 24% of incident solar radiation is converted to usable electrical energy. That figure is astounding if one examines previous maximum efficiency in consumer models throughout the technology's development.

This success aside, our group believes that the core issue of high cost per energy harvested is still not being addressed in a practical way, which is the motivation behind our project, Finding Fëanor. A portion of the inefficient energy conversion stems from the changing angle of incident sunlight with the respect to a given solar panel. The closer to 90˚ between the face of the solar panel and the path of sunlight, the more optimum the collection is. The problem with current products on the market is that most are static panels that cannot change in response to the changing angle, driving their already low power output even lower.

Our solution is to build an Arduino-controlled system that allows for two axes of rotation. This would allow a panel in almost any setting or application to be dynamically adjusted to the changing incident angle of light. While doing preliminary research, we came across a project almost identical in motivation and scope. We decided that improving upon this project would give allow us to experience a design project more holistically than if we had to start from scratch. This also means we will be attempting to optimize some aspects of the old design. These optimizations are covered in the objective portion of the proposal.


Completed System.jpg

Team Members

  • John Fordice
  • Zach Pewitt
  • Sam Donaldson
  • Will Luer (TA)

Objectives

A successful project will require:

  • 1. A frame that allows for dual axis rotation.
    • A base which will most likely be made from a block of wood.
    • A 3D-printed U-frame to house the panel itself.
  • 2. Implementation of phototransistors that allow an Arduino unit to calculate the incidence angle.
    • While the original project used photoresistors, ours will use phototransistors because of their greater sensitivity.
    • The phototransistor unit will be separate from the solar panel, but it will be in a fixed plane with the panel such both components experience the same angle of incidence from a sufficiently distant light source.
    • The photoresistors will be in a pyramid array, exactly like the array from the hackster project.
  • 3. A control algorithm for a motor system based on data taken from the phototransistors and processed by the arduino.
  • 4. (Stretch Goal) A scale-able design.
    • The same control algorithm and photo resistor arrangement should be able to work with components of a larger physical size. This will most likely require a change in materials involved.
    • The extra weight of larger frames and motors will not spoil the design
    • Stretch Goal: With larger size and more weight comes more power consumption. We would need to make sure that power consumption is less than the yeild of a typical consumer panel.

Challenges

Power supply
  • Can handle load bearing of panel (more of a challenge at large scale).
Hardware
Board Mounts.jpg
  • Implementation of stepper motors that enable dual axis rotation without unnecessary failure points
  • 360 degree rotation (stepwise) without tangling of wiring
  • Keeping control systems stable during rotation
Power supply
  • Drawing power from the solar panel attached would be ideal but we may try and implement a regular two prong wall plug for convenience and testing.
Safety
  • Mechanical safety should not be too much of an issue given the relatively small size of our design. Safety regarding moving parts should also not be an issue as this project will be designed to move slowly in order to get accurate readings on the light sensitive phototransistors.

Budget

Total: $123.24

Design Solutions

Mechanical Design

After preliminary research, we came across a project on Hackster (mentioned in overview) which gave us a base point for the pivoting U-frame design. It quickly became evident that 3D printing would allow us to take significant departures from the original design.

We were able to mount the Arduino and motor shield on the system itself which allowed for a more compact form factor. This allowed us to eliminate most of the rotational constraints. We didn’t want to risk a battery-powered set-up for the demo for fear of running low on charge so the constraint of a power cord to the system remained.

Another improvement we made to the original project had to do with the mounting of the bottom stepper motor. Instead of attaching the pin to the frame, we found we could get more stability by using the screw holes already in the motor. The pin of the motor does not rotate. Instead, it is held stationary by a heat shrink inside a block of wood while the rest of the motor is free to rotate within the constraint of the power cord.

Circuitry and Wire Management

Our light sensing device is fairly simple and is made out of four basic phototransistor circuits, each composed of a phototransistor and a 1MΩ resistor. The apparatus to put these phototransistors to good use is a 3D printed square pyramid with a 0.5cm diameter hole in the middle of each of the four triangular faces. These holes are there to protrude the bulb of each phototransistor through and then glued in place, while having all the wires contained within the inside of the pyramid. All the positive voltage leads of each phototransistor were soldered to one singular wire that will provide power to all four circuits directly from the Arduino. The remaining leads of each phototransistor are soldered to a 4-set ribbon wire as to consolidate all four of these loose wires. From the pyramid apparatus, this ribbon wire is fed under the solar panel and is soldered onto the circuit board mounted there. Soldered to the circuit board are all four 1MΩ resistors, 3 jumpers to connect the V_out side of the resistors, a wire leading from these jacks to ground, and an additional ribbon wire to connect the phototransistor outputs to Arduino pins A0, A1, A2, and A3.

Circuit used to read voltages from phototransistors

Each stepper motor has a 4-set of ribbon wire soldered to its four protruding output wires and fed directly into the Arduino. The 3D printed frame has rectangular holes on all its sides making it easier to feed the wires directly to their respective pins on the Arduino and to ensure these additional wires do not interfere with the rotation of the solar panel. The Arduino to USB power cable is the only wire that is not contained within the moving parts of the solar panel mount. If the base is round then the cord will have no problem winding itself around until the rotation of the solar panel mount exceeds the length of the cable. If the base is a polygon (like ours) the cable can virtually do the same thing but take greater care to make sure it does not get suck on a corner.

  • Note: All solder joints are wrapped in electrical tape to ensure there is no electrical interference from neighboring wires.
  • Note: Make sure wires going from circuit board to the Arduino are long enough so they do not interfere with the panel’s rotation.


Algorithm Design

Though we had an idea for the general structure of the algorithm, the design of the algorithm did not begin until after the stepper motors and the motor shield arrived.

The motors used (NEMA 17) were designed to only draw 350 mA and, as such, could be controlled by an arduino through a stepper shield. A native arduino library saved us the hassle of authoring functions to control the motors ourselves. This library, conveniently named “Stepper.h”, included functions to define specific stepper objects, specify the rotation speed, and individually step each of the motors. We wrote a simple arduino sketch to familiarize ourselves with the library and its use. With the motor control fully understood, the next step was to include and read the phototransistors.

After the electrical circuit was completed, it was a simple step to read in the voltages from the phototransistors. A high resistance in the biasing circuit allows for a greater range of output voltages based on the amount of incoming light. The analogRead() command allows the arduino to read the values from each transistor. With the motor control understood and the phototransistor voltages available, the final step was to actually construct the algorithm.

Dimensions of the NEMA 17 stepper motor

The algorithm used in this setup is a basic greedy search algorithm. First, it reads in the voltage data from the phototransistors and assigns each to its own variable. Next, it compares the left and right phototransistors and assigns this difference to another variable. The same process is followed with the top and bottom phototransistors. These two values are then compared to a predefined tolerance and if they are outside of the absolute value of this range the steppers are adjusted as to minimize this difference. If the left phototransistor was higher than the right, for example, the horizontal stepper motor would be incremented to turn the pyramid toward the light source and work to minimize this difference. Every time the motors are incremented or decremented, a counter is updated to match the number of steps taken. If this counter reaches the amount of steps that corresponds to a half rotation in the horizontal direction or a quarter rotation in the vertical direction, the motor will not increment any further. Each iteration of the algorithm can only step the motor once, but because it is run continuously it gives the illusion of smooth movement.

After the setup was completed and the algorithm was uploaded to the arduino, we tuned some of the specific parameters. First, we tested several tolerance limits and actually used a separate tolerance for the vertical movement and horizontal movement. Additionally, we looked at using several different motor speeds. A speed of 200 rpm was used for the vertical axis, while a slower speed of 125 rpm was used for the horizontal axis to minimize the loss of steps.

Gantt Chart

GanttChart10-6-16.png