Saturday, 30 November 2013

Got a bit further with the etch a sketch at the last WIP night at Foulab.  There are at least two components to the backlash problem. One - a curable one - was that the way I was using the AccelStepper and AFMotor libraries was not ideal.  I was releasing the motor immediately after finishing the stepping.  This caused the last step to be left incomplete, at least some of the time.  Introducing a 500ms delay before releasing the motor cleared this up.

This was detectable by writing a very simple program that took just a few steps (in this case 3) very slowly.  Then I could count the steps by eye, and see that some were missed.

That cleared up a lot of the irregular wobbling.  However, there is real backlash in the etch a sketch mechanism. When the direction of movement is changed, there are nearly 10 steps where there is basically no movement, and another 5 or so where the movement is proportionally reduced.   It would appear that this is due to stretch inside the etch a sketch itself, not in the gearing.  It persists even if the other axis is moved in between the forward and reverse movements.

You can see this in the picture - each step in the zigzag is ostensibly the same number of steps.  The squished ends are due to this backlash.


Just to be clear, i moved the cursor down and left to the bottom corner of the drawing shown, then shook the sketch.  Then the motors were moved in a zigzag to the right, then the reverse pattern.  The squishing at the ends is due to the backlash - note that the backlash in each direction is almost perfectly equal, meaning that the ends line up.  Gives hope for correcting it.

Thursday, 3 October 2013

Backlash complications.

Did a little work on the etch a sketch device at Work in Progress night at Foulab yesterday.  Nothing amazing to report, but was able to observe more clearly the strange backlash problems that it has.   The following pic shows a square wave of 100 steps up, and 50 steps over, followed by one back moving -100 steps in y and -50 in x each time.  It should produce a nice level series of even rectangles.   Obviously it does not - theres a lot of drift.  At least some of the drift seems to be hysteresis in the movement, and it may also be skipping a step occasionally, especially the vertical axis.

Well, such is the nature of work in progress.

Friday, 15 March 2013

Bracket for Prusa

Nearly a year since the last post.  Oops.  It was a busy year.  Among other things, built a 3D printer, something that will probably feature in future posts on this blog.  Its a Prusa Mendel I3 - built it at
Voxel Factory / Foulab Prusa Mendel Build Party


Whats the first thing everyone prints on a 3D printer?  Parts for the 3D printer of course.  I am no exception. First non-calibration print - a bracket to hold the LCD screen on.

Files on thingiverse: http://www.thingiverse.com/thing:62091

Alright, its pretty minor, but I have to ease back into this blog thing.

Tuesday, 8 May 2012

Heater control

This project has been a long time coming.  A looooooong time.  In fact, it was one of the first I started after joining Foulab.  The project is a set of wireless (well X10, so it goes through the house wiring) controllers for the heaters in my apartment.  Each controller uses a DS1820 temperature sensor, and an ATmega 168 microcontroller.

Heres one of the finished products, and a graph of the temperature in the kitchen.  The full writeup is on the Foulab website.


Saturday, 21 April 2012

CNC gear cutting experiments

Foulab is fortunate enough to possess a small CNC machine, suitable for cutting wood and plastics.  I've been interested in cutting out wooden gears for a while.   I wanted to try a relatively easy project, to learn a bit before taking on anything major.  As you will see in this post, that was probably a good idea.

As a preliminary project, I decided to make a spirograph.  Not a mini, notepad sized one, for a fine tipped pen.   A chunky, full sheet of paper kind, for a Sharpie.

 As a first attempt, I used Inkscape's render function to generate gears.  The number of teeth is self-explanatory, the circular pitch ends up affecting the radius.  I used 37, rather arbitrarily.  It turns out i just barely made the gear big enough for a 1/8 inch cutter to cut it out, so it was a good guess on my part.  Its worth noting that its quite important to pay attention to this - you need to scale all your gears the same if they are to mesh, so if you forget, you will have to work it out tediously by measuring and dividing.

The existing Foulab CNC chain was QCad for drawing, gCNCCam for generating the G-code, and EMC2 for controlling the machine.   Inkscape saves to DXF, which can be loaded by QCad so I loaded my gear directly there.  The center is not indicated by Inkscape, but is easily found geometrically, as shown.

gCNCCam has some problems generating a proper entry move, so we use a modified version, available here.

I put a central hole to act as an axis, and a couple others to act as placement points for a Sharpie.   I then drew a large outer gear ring, which would be treated as the outer ring gear.  It was so large, i had to cut it into two parts, to fit on the CNC. I tottled off to the lab to cut it.

Total fail.  EMC2 refused to cut it, and rightly so, since the tool radius was such that many of the corners could not be cut out.  No concave corner can be tighter than the tool radius.  Unfortunately, gCNCCam doesn't complain about this, and its processing for a file of this complexity was very slow.

I manually edited the drawing, to round out the bottoms of the gears.  This process quickly became iterative, and slow.  Heres my advice:
  • Cut out a small piece of gear, gCNCCam will work much faster, and if it will cut one tooth, it will cut them all.  However, bear in mind that:
  • If the G-Code fails, look closely at where.  When I chopped my gear into parts, it was the point where I chopped it that had a tiny concavity, not the tooth itself.  Putting a small round on that corner resolves the problem.
  • Numerical issues can also cause problems.  I've had better luck designing the drawing for a tool with 3.2mm diameter, and telling EMC2 that the tool diameter was 3.199mm.
  • The gCNCCam to EMC2 loop quickly gets tedious, and at first, I was doing the drawings at home, and then heading to Foulab to discover that EMC2 would reject them.  Loading the file in gCNCCam can also be very long. (It seems to do all its work on load, or when a parameter is changed, analyzing the graph then.  Clicking the generate GCode button is anticlimactic, and takes only a moment.)
  • The solution I found was to install a virtual machine with the EMC2 distro, and run the design through at home, before heading to the CNC.  The boring wait for processing could be offset by working on other things.

Its also worth noting, that gCNCCam got inside and outside backwards on the drawing.  So my first attempt at the ring gear had the tool on the inside, with, needless to say, poor results.  gCNCCam draws an arrow in the direction of cut.  If your template is for counter clockwise, but it draws the arrow clockwise, switch the tool from inside to outside.
Use a small piece to work out if the tool can cut it it will be much faster.  Also, watch gcnccam closely, this was supposed to be a counterclockwise cut, but its moving the tool clockwise.  Inside and outside will be reversed.


So after much hand editing, I got it to work.  I cut the gears out of MDF, which can be cut pretty fast, and even then, the cutting time was LONG, over an hour for the ring gear. 

I cut out a 24 tooth inner gear and a 72 tooth outer gear, glued some legs on and got down to drawing.  And this is where those of you who kept reading to the bottom of the post get to laugh at the author.  Thats right - 72 and 24 - so it draws:
Since 72/24=3 i get a lovely triangle


Twenty-five and 27 tooth inner gears will be coming up shortly, don't worry.  After this, however, I will probably write my own gear drawing code.  The Inkscape renderer looks good, but it has too many concave corners that have to be hand edited.

Friday, 6 April 2012

Heart beat to midi, take 2

So it took about a month to get organized again, and once again David did most of the work for us.  It turns out the inventor of Exerlopers pulse monitoring equipment lives in Montreal.  He quickly turned around a customized version of their pulse detector that outputs a 5v signal when the heart beat is detected.

Gapzap had actually constructed an EKG on himself.  In that experiment, he had found that the myoelectric signals interfered a lot with the heart rate.  In the patent for this pulse detector, theres a lot of discussion about filtering those signals.  Originally, Gapzap found this other patent... looks like a bit of overlap.  But I digress.

Anyway, the pulse detector seems pretty good at first view.  Construction is solid, and it responds well to anyone who picks it up to use it.  Heres a shot of the version 1 pulse to midi hooked to the new sensor.

So - its time to analyse whats coming out of it.  I wrote a quick Arduino program to get the pulse timing as precisely as possible. (The code is up on github, here.) And I gathered a couple minutes of data to take a look at.  The first few samples, as i was grabbing on to the sensor, and the last sample as I let go were outliers.  But the middle part was pretty consistent.  Heres a histogram:

Bottom scale is microseconds.  It seemed unlikely that just going direct to midi is a good idea - the small irregularities in the heartbeat will be quite jarring to the ear.  And, in fact, that was the case.  Heres a sound sample:

video
So, not quite done yet, time to break out some filtering algorithms.

Thursday, 29 March 2012

A heart beat to midi converter

Some while ago, David Usher approached Foulab about creating a device to convert heartbeats into midi signals.  Fortunately for us, he had already done a large part of the work and had got a hold of the optical pulse sensor recently featured in Make.

The pulse sensor shines a green light on the skin which is partially reflected onto a photosensor.  This outputs an analog signal, that, when conditions are right, indicates the intensity of blood flow beneath the skin, and thus to the heartbeat.  First tests were promising - modifying the Arduino code provided with the sensor to play a midi note was straightforward.  In the video below you can hear a note played for 50ms every detected heart beat.
First build is a bit ghetto, didn't even have a midi cable.  Also - note to self: dust the piano, sheesh.
video

One catch was that David wanted to take this on tour in a couple days.  Gapzap and I spent a crazy Tuesday evening putting together a robust project that would hopefully hold up in stage use.  In the end, the construction quality was pretty good (for which Gapzap should get most of the credit, I was up to my usual sloppiness, note the broccoli elastics).



Alas, it was for naught.  The sharp eyed readers will have noted the key phrase "when conditions are right" above.  They have to be exactly right.  In playing with it, David found sometimes it would work, sometimes not.  Some people it just never worked on.  And in all cases, the heartbeat was not as regular as you would expect - which might be a real phenomenon, the heart is not a clock.  You can hear this in the video, it seems alternately jumpy, then halting.  But in any case, it couldn't be played along with.

Still, not bad for a Tuesday night.  So that iteration was put aside, until its time for take 2.