Hacker News new | ask | show | jobs
by jcwilde 3986 days ago
Seems some pixels are not displaying correct colours on the live feed (most visible as white pixels when displaying the black background of the F21 logo).

I guess the spool belts have run out of alignment? I would have guessed they'd have implemented closed-loop positioning for the colour-belt, but it appears not to be the case.

2 comments

It would have been nice with some kind of closed loop feedback system for all positions around the ribbons, but it became a cost problem. What we did instead was to put an IR sensor on the motor controller behind each motor. The fabric ribbons are fitted with a retroreflective strip for homing. This gives us one absolute starting point on each pixel and then each color is just at a fixed ustep offset from zero. But as you pointed out, some of the ribbons are slipping a little bit so they are a color our two out of cal. The ribbons are real fabric ribbons, not timing belts so that's why we do have some slip. We periodically run the strip over the IR sensor to zero out the calibration so bad pixels should re-align at least a little bit over time. If they are really bad, we take them down and swap in a spare 32 pixel module while tightening the belt on the bad ones.
How bad would it be to to always run the ribbon past the homing strip each time a move is called for? In the worst case you'd have to make just over a full loop instead of a small move, but the stepper motors could probably make the full loop pretty quickly at full blast. Awesome project, congratulations!
> The fabric ribbons are fitted with a retroreflective strip for homing. This gives us one absolute starting point on each pixel and then each color is just at a fixed ustep offset from zero.

If you had a reflective strip between each color—and just counted the strips to determine current color—wouldn't that have kept it in continuous calibration? Then you wouldn't even need a stepper motor, you could use a plain DC motor, since you wouldn't be using the step count to determine position anymore.

(I haven't used that setup for a real project, but I intend to since it seems it would be cheaper and easier, and I was wondering if you considered something like that but dismissed it.)

Also, if you don't mind sharing: what IR sensor did you use?

Very cool, have you thought about using a RGB color sensor (like a TCS34725) to detect the color of the ribbon instead of finding an IR homing strip? That might help with slip since you know the order of all the colors and could move exactly until the right one is being displayed.
Yes! we actually prototyped that.. didn't have great success unfortunately, because of space constraints in our particular application, we have to have our sensors look down a 1/8" passage (passed the motor) down onto the ribbons. I feel like I tested every single optical sensor from digi-key before we finally had to settle with an IR sensor. We use a pretty strong IR LED and bouncing that off of a reflector on the ribbon. We simply could not separate the signal from noise trying to read the actual color of the ribbon. Moving the sensor off the PCB (closer to the ribbon) would have worked, but the cost increase for 6400 pixels.. yeah, couldn't do it.
You could have printed a quadrature pattern on the back for not much more complexity. Just one additional sensor per strip. Even that wouldn't be an absolute necessity since you know which direction the rotation is going. A single series of bars with one skipped or widened for home would suffice. Then you'd be able to compensate more readily for slippage and stretching.
Any reason why you didn't use a camera looking at the front of the display? That way you'd only need one sensor and the ribbons wouldn't need to be instrumented in any way.
Interesting... One further question: when does it recalibrate—is it opportunistically, when it is already running past the reflective strip (I'm guessing in-line with the black displaying), or every so often (after each image cycle)?

One workaround that could better hide the inaccuracy would have been to only have smooth colour transitions on the ribbons (including between black and white), as it appears to be a hard transition between blank and white that causes it to be so noticeable with the small positional error.

And ideally not just using an encoder to detect skipped steps or something. But using some kind of vision to close the loop using color since you're making an image.

At the very least put a Gray code on the back of every fabric loop to get actually accurate positioning.

Coding on the underside crossed my mind too, but then you'd need a multi-sensor tx/rx board for each ribbon, mounted inside and under the moving parts. And it looks like this mech doesn't have a lot of space to begin with.
That's why using a high res camera to image the entirety of the spools and make adjustments as necessary seems like the best way to close the loop. It won't be able to make minor adjustments but if something is really wrong it wouldn't be hard (algorithmically) to locate which spool is totally bonkers and get it much closer to right.