Sunday, September 11, 2011

Lathe Project 1 - Simplex Air Engine

I wanted to share this Simplex Engine design.  So I have created one large (and maybe slightly overwhelming) drawing to aid anyone else who wants to build it.

Please remember, I have not yet made every part, so there may be mistakes and/or missing dimensions.

Simplex Engine Drawing

Lathe Project 1 - Simplex Air Engine

Over the past week, I have been using every spare night to machine my engine parts.  Here is what I have done so far.

First, I re-machined the piston to cam connecting shaft.  I was not happy with the first version. After my third attempt, I'm pretty happy with the result.  A few mill operations and it's done. (the top part is the first attempt, the bottom my final part awaiting machining on the mill).

Connecting Rods (my iterations)
Next, after only one attempt, I created a nice drive shaft which also serves as the valve for this engine.  A few mill operations and it's done.

Drive Shaft

Next, I machined the pin which will hold the Connecting Rod to the Piston.  I just need to thread the small diameter (#2-56).

Piston Pin

Finally, after a number of failed attempts, I finished the lathe work on the Cam Shaft Pin.  This pin connects the Connecting Rod to the offset weight.  Two of the diameters need to be threaded with #2-56.

Cam Shaft Pin

I have also included two cross sectional images of the engine assembly.  The first image is the cylinder being pressurized (the compressed air comes from the end of the tube).

Pressurize Stroke
The next image shows the exhaust stroke.

Exhaust Stroke



Sunday, September 4, 2011

Lathe Project 1 - Simplex Air Engine

For my first 'real' project, I wanted to start small.  Nothing too time consuming or complicated.  After poking around on the web for a while, I stumbled on a 9x20 lathe blog (Smithy's Lathe Blog).  Smithy has made a number of cool working engines powered using compressed air.  After doing some reading, I thought I could do the same.  So, I sat down and designed my own based on Smitty's.

Simplex Air Engine - Front

Simplex Air Engine - Rear

I have also started the first part, the connecting rod.  The basic shape is there, next comes a few milling cuts and then holes for the pins into the piston and cam.

Partially Complete Connecting Rod


Sunday, August 21, 2011

Practice with the lathe

It has been a while, at least 4 years, since I have played with a lathe.  So, before I begin to start any serious projects, I wanted to freshen my memory.

My first practice project was to make a spinning top out of some steel bar I had laying around (actually it's precision ground rod from my CNC project, unhardened).

Here it is.

Finished top
And better yet, it works!

Spinning top
The next practice project involved machining a diameter which was at a precise size.  So, using a bearing out of my roller blade wheel, I machined a part to fit it on.

Bearing and mating part
Bearing and mount assembled
Now that I've got the basics down, time for something more advanced.

Grizzly G4000 Benchtop Lathe

Ever since I worked in a machine shop over the summer when I was in school, I have loved lathes.  For a while now, I have wanted my own benchtop version to support my robot hobby.  Finally, I had the cash to buy one.  I bought the Grizzly G4000 9x19 Bench lathe (G4000 link)

First, this is the bench I made to hold it.  It is made of 1.5" square tube with a 1.5" thick wood top.  It has castors for easily moving it around, as well as leveling feet for... well, leveling.

Bench for lathe
The images below are the 'fresh out of the box' images in chronological order.

As shipped
Four jaw chuck
Face plate
Tale stock
Misc parts
Steady rest
Follow rest
Compound slide and tool holder
Stripped lathe
Drive gears and pulleys
Fully stripped lath
Chip pan
The above chip pan is to be used (per the instructions) as the bolt template to drill and secure the lathe to the bench.  It's obviously pretty easy to drill the two holes for the 1/2" bolts when you have the machine, but it would have been nice to have the information before it arrived.  So, for your convenience, the bolt center to center distance is approximately 23 3/16", as shown below.

Lathe mount bolt distance

Re-assembled lathe on bench
Workshop

Tachometer Project is Complete! (kinda)

Since my last posting, a lot has happened.  I received the new tachometer board, populated it, programmed it, and then tested it.  Below is an image of the testing set-up.

Prototyped Tach Board in Test
In the image above, you can see the oscilloscope to the left which is hooked up to the photogate signal.  I have a motor spinning an incremental encoder wheel (a disk with slots on it) from an old ball mouse.  You can also see the RPM is being displayed on the serial display.

The current code works by counting the number of 'highs' within 250 ms (1/4 sec) and doing some simple math to compute the RPM.  Although the code is working and I can call this one 'completed', I'm not too happy with the accuracy.  It is slightly inaccurate because of the method I used (as described above).  The more accurate method involves measuring the time between 'highs' (or teeth in my case).  That way there are no rounding errors.

The current method rounds down, so if the chip has counted 55 highs and is 95% to the next high, just as the time ticks to 250ms, it only sees 55.  So the extra 0.95 high is not counted.  If your gear has very few teeth, the time between teeth increases and your error becomes bigger.  The high to high counting does not have this issue.

This whole project started off by wanted to provide an RPM measurement for my dad's Mini-Mill from Grizzly.com (the G0463).  Finally, the project is at a phase where we can integrate it to the machine and I can update the program later (if I get the energy).

The images below show the mini-mill's gears which I plan on hooking my magnetic tooth sensor too.

G0463 Mini-Mill with gear cover removed
Below are the spindle and drive gears with the number of teeth marked on each.  I will obviously need the number of teeth per revolution to program into the chip.  It was not obvious to me, at lease not right away, that after you know the number of teeth per revolution, it does not matter which gear, big or small, you place the sensor next too.  Ponder it... you'll figure it out. (it's not like belts and pulleys). 

G0463 Mini-Mill Spindle and drive gears
And next I had planned to include an image of the populated board and all of the external parts (display, tooth sensor, and battery clip), but apparently I forgot to take a picture before handing the assembly over to my dad.... well, you'll have to wait.

Saturday, June 18, 2011

PIC16F688 Timer 1 Code

After developing the code on the PIC16F877A for my tachometer, I decided to use the PIC16F688 since it was cheaper and smaller.  Below is the code to run Timer 1.


// PIC16F688
// Flash LED with Timer 1
// RoboSlave.Blogspot.com 6/2011


// -----------------------------------------------------------------------
// Includes
// -----------------------------------------------------------------------
#include "system.h" // Include general file


// -----------------------------------------------------------------------
// Configuration Bits
// -----------------------------------------------------------------------
#pragma DATA _CONFIG, _PWRTE_OFF & _WDT_OFF & _CPD_OFF & _HS_OSC & _CP_OFF
#pragma CLOCK_FREQ 20000600


// -----------------------------------------------------------------------
// Defines
// -----------------------------------------------------------------------
#define TimerLED portc.0


// -----------------------------------------------------------------------
// Interrupt
// -----------------------------------------------------------------------
void interrupt( void )
{
if( pir1 & (1<<TMR1IF) )   // Handle timer1 interrupt
{
TimerLED = !TimerLED; // Toggle Timer LED
pir1.TMR1IF = 0; // Reset interrupt flag
}
}


// -----------------------------------------------------------------------
// Main Program
// -----------------------------------------------------------------------
void main( void )
{
ansel = 0x00; //Configure portC as I/O
cmcon0 = 0xFF; //Configure portC as I/O


trisc = 0x00;   //Configure port C
portc = 0x00;   //Initialize port C


tmr1h = 0x00; //should be cleared before enabling interrupts
tmr1l = 0x00;


intcon.GIE = 1; //Global Interrupt Enable bit
intcon.PEIE = 1; //Peripheral Interrupt Enable bit
pie1.TMR1IE = 1; //Timer1 Overflow Interrupt Enable bit


t1con = 0b00010001;


     while (1)
    {
}
}