ECE597 Fall2014 Ringing Servos

Team members: Mark Morrison, Peter Olejnik,  Randy Turner

Executive Summary
The goal of the project at this moment is to use a cape that gives the BeagleBone usage of 32 PWM ports and to attach servo motors to it. The servo motors will then drive a mechanism that will ring bells of sorts. We have successfully used the PWM cape to drive a servo to a specified position using a shell script. This was more difficult than it was originally thought, because the cape uses I2C1 on the board, which is I2C2 in software, and because there were multiple other configurations we needed to change to set up the cape. We use a JavaScript program to output I2C messages to the cape to control the servos. The servos are connected to a mechanism with two bells, and when the servo rotates the bells ring. The bells do not require a great amount of movement to ring, but need to be oriented correctly to get the best sound, so the program only moves the servo about 15 degrees away from the center in either direction. From this, we have learned that JavaScript was a poor choice for a project as time-sensitive as this. The asynchronous nature of the language has made it all-but impossible to control timing when using multiple threads. For this reason, we ported our software to C.

Give two sentence intro to the project.

Give two sentences telling what works.

Give two sentences telling what isn't working.

End with a two sentence conclusion.

The sentence count is approximate and only to give an idea of the expected length.

Mechanical Hardware
Two diffrent types of servos were used. These were used with simmilar results.


 * Dynam DY1008 9G Digital Servo
 * Solar Servo D220 0.11@4.8v Digital 9g Micro Servo

The following quantaties of fasterners were used as well. All were obtained from McMaster-Carr


 * X2 per Servo Mount 10-24 X 3/4" Nylon Shoulder Screw
 * X2 per Servo Mount 4-40 X 3/16" Screw
 * X5 per Servo Mount, X16 per Rack 2-56 X 1/2" Screw
 * X2 per Servo Mount 2-56 Nyloc Nut
 * X2 per Servo Mount #4 Washer

The bells used are bells provided to us by Dr. Yoder, originating from Hobby Lobby.

To build the Servo Mount, pieces were cut out from acrylic sheets. The links lead to DXF files. To download, rightclick and click save link as.


 * X2 @ 0.125 in Bell_Twist.DXF
 * X1 @ 0.125 in Servo_Connection.DXF
 * X1 @ 0.25 in Base.DXF
 * X4 @ 0.25 in and X2 @ 0.125 in Spacer.DXF

To build the Mounting Racks, pieces were cut out from acrylic sheets. The links lead to DXF files. To download, rightclick and click save link as.


 * X1 @ 0.125 in LowerRack.DXF
 * X1 @ 0.25 in TopRack.DXF
 * X16 @ 0.125 in Latch.DXF

Electrical Hardware
A BeagleBone is the bread and butter of the project, driving the entire effort. In case you dont have one, you can get one here!

To drive all these the following cape was used:


 * PWM Cape

The electrical circitry for the detector was made a few components. Additional components may be needed if you don't want to make perminant additions to the cape.

Each detector comprises of:
 * X1 QED233
 * X1 LTR-3208E
 * X1 10K Ohm
 * X1 150 Ohm

Servo Mount Assembly
1. Collect all the materials and tools you will use. In terms of tools, you will need a 2-56 tap, a 4-40 tap, a 10-24 tap, as well as tools to attach the screws/nuts.



2. First thing first, you need to tap the right holes. The two large holes on the Base are 10-24, the holes above and below the hole for the servo to sit in on the Base are 2-56. The hole further from the large hole on the Bell_Twist need to be tapped to 4-40. Also, depending on your horn (the thing that spins on the servo motor), you may need to widen the holes present there.



3. Ensure that the horn is vertical when the servo is at 90 degreees. After that, attach the servo, the two Bell_Twists, and the Servo_Connection to each other with the 2-56 screws and nuts as seen in the picture below. The screw and nut should hold the peices firmly together, but still allow for easy pivoting.



4. Next is to add the shoulder screw and spacers. The order which the peices should be on the screw, from the head of the screw, is the 0.125 in Spacer, the Bell_Twist, and then two 0.25 in Spacers.



5. Now comes the time to attach the servo assembly to the Base. Simply slide it in and screw in the two shoulder screws into the Base. Follow that up with adding two 2-56 screws with washers, to hold the servo down firmly.



6. The bells you select may need some prep work. The ones we recieved had tinsle and little cards on them. This needs to be removed so you only have bells.



7. The final step is to attach the bells to the bell-less servo mount. Use the two 4-40 screws to do so.



Rack Holder Assembly
1. Collect all the materials and tools you will use. In terms of tools, you will need a 2-56 tapas well as probably a screwdriver to attach the screws.



2. On the LowerRack, tap all the small holes as 2-56. There should be a total of 16.



3. Place on top of the Lower Rack the TopRack. The small holes should align over each other. Then screw in a 2-56 screw, with a latch as well. To restate this, the screw should pass, from head down, the latch, the TopRack, and then the LowerRack. The screw should be just tight enough to hamper motion of the latch, but not enough to stop it.



Rack Holder Assembly
The final assembly should look something like this. Each assembly consists of four servo mounts and a single rack. If done correctly, everything should slide sunggly into each other and hold quite respectably.



Other Stuff....cause work in progress

 * Project materials are at https://github.com/randman2011/ECE597-RingingBells. Clone the repository to find a read-me and code to get started.
 * Use a PWM Cape to expand the PWM functionality of the Beaglebone.
 * Attach bells to the servos so they will ring with minimal servo movement.
 * Run the "RingerScript.js" program.

Give step by step instructions on how to install your project.


 * The GitHub repository containing all of our software can be located here: https://github.com/randman2011/ECE597-RingingBells.
 * Be sure your README.md is includes an up-to-date and clear description of your project so that someone who comes across you git repository can quickly learn what you did and how they can reproduce it.
 * Include a Makefile for you code.
 * Include any additional packages installed via opkg.
 * If there is extra hardware needed, include links to where it can be obtained.

User Instructions
Executing the makefile will create a RingerScript executable. The executable sets up separate threads automatically, so all the user has to do is execute it. The ringing of the bells is controlled by the proximity sensor LEDs. Waving a hand in front of them will trigger the board to begin ringing the associated bells. Execution continues until the SIGINT command is sent via terminal.

Highlights
Here is where you brag about what your project can do.

Include a YouTube demo.

Theory of Operation
Give a high level overview of the structure of your software. Are you using GStreamer? Show a diagram of the pipeline. Are you running multiple tasks? Show what they do and how they interact.

Work Breakdown
While we all took part in all the components, each one of us took lead in a particular field:
 * Mark took lead in desinging the electrical hardware. He also, polished up the last bit of code, due to his extensive experiance in C.
 * Peter was the brainchild behind the physical mounts and the mechanical design. He also was most responsible for aquiring the tools and components needed.
 * Randy was the inital architect of the software that drove the bells and servos, building most of the framework that later got converted into C.

Future Work

 * The current I/O being used is using an IR detector and IR LED. The detection range of our set up is not that long. It would be intresting to see an improvement on this scheme.
 * Other hardware inputs could also be looked at, from as simple as push buttons to a Rube Goldberg like contraption.
 * In addition to hardware inputs, software inputs of various type could be looked at. These wern't looked at as deeply as we would have liked to, due to the limitation of time. A great suggestion would be to use Crontab.

Conclusions
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.

Techical notes of intrest

 * The GitHub repository containing all of our software, as well as files CAD files, can be located here.
 * i2c1=i2c2
 * i2c2=i2c1
 * i2c0=???
 * i2cdetect -y -r 2 finds address 0x40 and 0x41
 * need to set mode register (register 0x00) to not sleep mode to use the internal oscillator

Grading Template
I'm using the following template to grade. Each slot is 10 points. 0 = Missing, 5=OK, 10=Wow!

 00 Executive Summary 00 Installation Instructions 00 User Instructions 00 Highlights 00 Theory of Operation 00 Work Breakdown 00 Future Work 00 Conclusions 00 Demo 00 Late Comments: I'm looking forward to seeing this.

Score: 10/100

(Inline Comment)