S17: Propeller Clock
Contents
Project Title
Propeller Clock (Persistence of Vision Based Analog Clock)
Abstract
Persistence of Vision (POV) refers to the optical illusion in which after image of an object seen by the eye, exists for a brief time, usually 1/10th of a second. We have used this phenomenon to create a POV clock where we display the face of an analog clock by driving one dimensional LED array (1 x 17) using precise time delays. To reduce the weight in order to achieve higher RPM necessary for POV displays, we have used wireless power supply modules to drive micro-controller and LED array which are located on the rotating arm.
Introduction
The main idea of the POV display is to flash/blink the LEDs at exact same location in each revolution. If the speed of revolution is fast enough, then the human eye cannot distinguish between two different blinks and the LEDs appear to be static and constantly glowing. Usually the motion picture frame rate is 24 frames per second and this seems to be an ideal condition for smooth POV system. However, anything above 10 updates per second can provide illusion of continuous motion.
In this project we have used 1200 RPM(no load) motor and have used 5mm bright LEDs (~10mA) which aid in creating a POV clock. Initially, the idea was to use slip ring to avoid mounting of SJOne Board on the rotating arm. However, RPM limit of 300 and limited number of wires on slip ring reduced it's feasibility. Hence, we mounted LPCXpresso LPC1769 board on the rotor and provided wireless power supply so that we can reduce the weight on the rotating arm by avoiding heavy battery. LPCXpresso LPC1769 board was chosen over SJOne board because of it's light weight and form factor which made it suitable for mounting on the rotating arm.
Instead of controlling the RPM of the motor and displaying the clock using fixed delays, we calculate and correct the time delay according to the varying RPM which in turn will compensate/nullify the effect of varying RPM on the display (moving/ dragging / stretching of the analog clock). For this, we have used reed switch.
Objectives
The main objective of this project is to implement the following:
- Determine the power consumption of the system especially the maximum current requirement so that it matches with the specified ratings of the wireless power transfer module.
- Design hardware system (PCB) which is fairly balanced and as light as possible so that it can be mounted on the rotating arm of the motor to provide balanced and stable rotation with sufficient RPM.
- Design precise time delays using timers interrupts to flash the LEDs at precise location.
- Design hardware and algorithm for compensating the change in RPM (to display a stable clock face - avoid rotation/dragging of clock face) using reed switch.
Team Members & Responsibilities
- Aakash Menon
- Designing precise timer interrupts for providing timing base for updates in each rotation.
- Aditya Choudhari
- Hardware and PCB Designing.
- Aditya Deshmukh
- DC Motor Interface.
- Reed switch/IR sensor interfacing and programming.
- Ajinkya Mandhre
- Soldering the components.
- Algorithm for displaying POV clock's hour/minute/second hand and final integration of all the codes.
- Kalki Kapoor
- Algorithm that keeps track of actual time to be displayed.
Schedule
Week# | Start Date | End Date | Task | Status | Actual Completion Date |
---|---|---|---|---|---|
1 | 03/14 | 03/20 |
|
Completed | 03/20 |
2 | 03/21 | 03/27 |
|
Completed | 03/27 |
3 | 03/28 | 04/03 |
|
Completed | 04/03 |
4 | 04/04 | 04/10 |
|
Completed (slip ring discarded/wireless supply added) | 04/10 |
5 | 04/11 | 04/17 |
|
Completed | 05/02 |
6 | 04/18 | 04/24 |
|
Completed | 04/24 |
7 | 04/25 | 05/01 |
|
Completed | 05/05 |
8 | 05/02 | 05/08 |
|
Completed | |
9 | 05/09 | 05/15 |
|
Completed | 05/15 |
10 | 05/16 | 05/23 |
|
Planned | |
11 | 05/25 | 05/25 |
|
Planned |
Parts List & Cost
Below is the bill of materials required in this project.
Item | Description | Manufacturer/Source | Quantity | Total Cost |
---|---|---|---|---|
LPCXpresso Board | LPCXpresso LPC1769 rev D | Embedded Artist | 1 | $23.00 |
Wireless Charging Module | 9V 600mA (2-20mm) | robotshop.com | 2 | $19.95 |
High Torque DC Motor | 12V 1200RPM | Uxcell - amazon.com | 1 | $15.28 |
Motor Shaft Coupler | 5mm Rigid Flange Coupling Connector | Uxcell - amazon.com | 1 | $7.19 |
5mm LED multi-color | 5mm IL184 LED | Microtivity - amazon.com | Pack of 60 | $6.99 |
Voltage Regulator | 3.3V LM1086CT 3.3 | Excess Solutions | 10 | $5.00 |
Switch | 2x1 DIP Switch | Excess Solutions | 5 | $2.50 |
Reed Switch | Magnetic Reed Switch | amazon.com | Pack of 5 | $14.13 |
Magnet | GradeN52 Neodymium Magnets | CMS Magnetics - amazon.com | Pack of 10 | $15.98 |
Power Adapter | 9V 1.67A | Excess Solutions | 1 | $5.00 |
Power Adapter | 12V 1.5A | Excess Solutions | 1 | $2.50 |
PCB | PCB Manufacturing | PCB4WAYS | 1 | $26.00 |
Total Cost | $143.52 |
Design & Implementation
The initial plan in this project was to have LED strip on the rotating arm of the motor and a slip ring which would connect those LEDs with micro-controller. This way we did not have to put micro controller on the rotating arm thus we could use SJOne board and issue of battery adding weight on the rotating arm was out of question. However, all the economically viable slip rings available in the market had limitations on the RPM (< 300). With this setup, there would be five update per second; which is insufficient for persistence of vision. Hence, the idea of using slip ring was dropped.
Hence, we decided to design the system with micro controller on the rotating arm. The SJOne board has weight and form factor which made it difficult to be placed on rotating arm such that it provides stable(balanced) rotations. Hence, we decided to use LPCXpresso LPC1769 which is light weight, has form factor which made it easier to put on top of the rotating arm and is based on same family of MCU 17xx (ARM Cortex M3). To further reduce weight we decided to use wireless power transmitter and receiver modules, instead of battery, to run the system.
To display a stable clock face, some method/system was required to correctly determine the RPM on real time basis. For this, we decided to use IR led and IR receiver. However, the IR LED were highly directional and even slightest movement (misalignment) of the IR receiver placed on the rotating arm gave us incorrect RPM readings. Hence, we used reed switch assembly instead. The reed switch is normally open but when it is in the magnetic field, it closes. We placed reed switch on the rotating arm and a magnet just below the rotating arm. During rotation, whenever the reed switch passed over the magnet, the micro controller pin was driven high. This was we could determine the RPM and then correctly calculate the time delay to display the clock's second, minute and hour hands.
Hardware Design
Printed Circuit Board
To design the PCB, we first had to decide on the length of the rotating arm. Too long arm would have led to increased load on motor while it must also be able to accommodate array of 17 LEDs. We determined that 17 5mm LEDs would require (5+1)*17 = 102mm space. Hence, we designed a 40mm x 200mm board. Our PCB design consists footprints to solder 1x17 LEDs, rectifier with voltage regulator and LPCXpresso LPC1769.
We designed the PCB using Autodesk EAGLE 8.1.1 software. Designing PCB in EAGLE is a two step process:
- Schematic Designing: In this, we need to assemble components and make the necessary electrical connections. This is just a symbolic representation of circuit. We can get the basic components and their footprint in EAGLE library. But for LPCXpresso LPC1769, we had to download specific library (.lbr) from NXP website which gave us the component object as well as required board footprint. Place the necessary components and connect them using line (wire) button.
- Board Designing: Once the schematic is ready, switch to board view where one can find a black grid with all the components clustered on one side. Select and place each component at required distance and then select tools->auto router to let EAGLE decide the best routing option. For a two layered board, select '*' option in 'top' and 'bottom' drop down list. Make sure that the components fit within the dimensions permitted under free license or else auto router wont work. Once routing is done, check for errors using ERC (Electrical Rule Check) and DRC (Design Rule Check) checks. If there are no errors then the check should return "ERC: No Error" and "DRC: No Error". We converted the unused copper layer as ground plane and added solder mask for protection.
Hardware Interface
The initial idea in this project was to use slip ring and the slip ring has limited number of wires. Hence, we had planned to use SPI expander to drive the LEDs. However, once the slip ring idea was discarded and MCU was put on the PCB, we decided to use GPIO pins because of simplicity in board designing and coding. The reed switch is connected to P0.10 of the LPC1769 which is configured as GPIO input. We have used GPIO rising edge interrupt to capture the reed switch input. The LEDs are connected to port 0 (0.0 to 0.7) and port 2 (2.0 to 2.8) in active low configuration.
Software Design
Time is the most critical parameter in this project. Operation are taking place in microseconds. Exact speed of the motor is unknown and keeps varying at every rotation. For this reason, time for each rotation is calculated dynamically using GPIO interrupt and Timer. Using this, all the further calculations are done. Time for each angular degree motion is calculated. A separate Timer does the work of timekeeping, and updates seconds, minutes and hours counters. LEDs are turned ON at precise locations with the help of above two parameters at every revolution creating a POV to depict time and characters.
Implementation
This section includes implementation, but again, not the details, just the high level. For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash. You can include sub-sections for each of your component implementation.
Testing & Technical Challenges
Describe the challenges of your project. What advise would you give yourself or someone else if your project can be started from scratch again? Make a smooth transition to testing section and described what it took to test your project.
Include sub-sections that list out a problem and solution, such as:
My Issue #1
Discuss the issue and resolution.
Conclusion
Conclude your project here. You can recap your testing and problems. You should address the "so what" part here to indicate what you ultimately learnt from this project. How has this project increased your knowledge?
Project Video
Project Source Code
References
Acknowledgement
We would like to thank Professor Preetpal Kang for the knowledge he has given us about FreeRTOS and coding for bare metal ARM.
References Used
1. http://www.nxp.com/documents/user_manual/UM10360.pdf
2. http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/f2012/cfz4_sjh234/cfz4_sjh234/FinalProjectDocumentation.html
3. http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/f2013/js2839_yc969/js2839_yc969/js2839_yc969/index.html