We tried social media. It's not very sociable. This is just a corner of the internet where slightly nerdy stuff gets recorded, so we know it once happened.
Highland Miniatures create some beautiful looking Mounted Questing Knights https://www.myminifactory.com/users/Highlandsminis
The horses have plenty of decoration for painting different types of heraldry and the knights look nice and easy to paint (I'm thinking black, drybrushed silver, edge highlights in bright silver and a few little spot details would be enough to call them done!).
I hollowed and printed a couple of knights to try thing out. My default process for printing pretty much any miniature is to take the Ryan Ford character from Titan Forge (before they created their sci-fi spin-off division, Cyber Forge) and scale everything to him. I find the Cyber Forge miniatures to be just the right size for me - small enough to still qualify as 32mm "heroic" but large enough to be able to paint tiny details like eyes and facial details.
So I scaled these knights to match my preferred scale and set them running around the jousting track
Disaster! While the horses travel the track just how we want them to (facing the right way, turning around the bar at the end of each run etc) just watching the whole performance makes it look like the bar is only about five feet wide!
One of the constraints we're having to work with, is the size of the closed-loop belt we're using (we tried making our own belt and it failed under tension) and the largest size belt I've got it 610mm. We might be able to go a little bit bigger - but the other constraint we have is the size of the laser cutter we're using (which can only take sheet materials up to about 300m wide).
So even if we had a larger belt, we're not able to cut a large base for it to run along (without making our playing surface out of multiple sections and joining them together). So the obvious thing is to try to make our miniatures.... well.... more miniature.
We'll try scaling our minis down in 10% increments until we find a size we're happy with. Anything smaller than 80% or so, and we'll just have to give up on trying to paint eyes and any similar tiny little details - but that might be no bad thing either; we can just stick to knights with full-face, closed helmets!
When we first designed our "race track" for the jousting knights to move around, we picked the dimensions of a typical GW horse base as being 60mm x 35mm
This requires the distance between the horizontal arms of our track to be at least 35mm apart (assuming the knights will travel perfectly along the centre of the track. Since we need half-a-base-width for each knight, and there are two knights, it was easy enough to arrive at 35mm distance apart.
We then allowed 6mm for our "bar" between the two knights (the bar to be cut from 3mm mdf plus a few mm for any embellishments) and we quickly arrived at a minimum distance of not less than 42mm apart.
But that was assuming that the drive belt would be running through the middle of our character bases. But since we mounted the magnets on little "arms", that's no longer the case. And watching our two fake-bases travelling around the track (see previous video) they do appear to be quite a way apart from each other. Our knights are going to have to carry extra-long lances, just to reach each other, over the bar!
So I guess we're going to have to redesign the size/shape of our track, to make it "thinner" and have the horses run past each other at a closer distance....
It may not be obvious in the earlier video (our first successful test, driving two magnets across the top of a playing surface) but one of the magnets spins quite a lot, as it is dragged along by the magnet underneath (the one that is fixed to the belt).
Clearly, we don't want our knights to be spinning around like the teacups ride at a travelling funfair - we want them to face the direction they are travelling in!
So we added a second magnet, just behind each existing magnet on the belt.
The idea is that our knight miniatures will have not one, but two, magnets in their bases. To ensure our knights miniatures are placed facing the correct direction on the board, we reversed the polarity of the rear-most magnets (so if you try to place your knight facing the wrong way around, instead of attracting to the belt, the magnets in the base will repel each other, and it will be clear that the knight has not been placed correctly on the playing surface).
So now we were ready to actually try the whole thing out - to get our knights to complete one (or more) complete circuits of the track (and hopefully keep facing the right way around, throughout!).
It'll be interesting to see how two magnets a set fixed width apart (on the miniature base) work with the magnets underneath that might change the distance between them (as they travel around curves/corners on the track). I guess there's only one way to find out - build it and give it a go!
So having just a single thin sheet of acrylic to support our stepper motor and drive belt isn't good enough, and we need to add some braces to the acrylic to stop it from deflecting when the belt is under tension. What we need is some "sides" on our stepper not-yet-an-enclosure.
We had some A4 sheets of 3mm acrylic knocking around (it's been hanging about for years) so threw together some designs in Inkscape and set the old laser cutter going again
Talk about cutting it fine! We just about got everything cut from a single sheet of A4. (ok, everything bar one side piece - but we managed to squeeze an awful lot onto a single A4 sheet! We assembled the box shape and fitted the stepper motor inside
At the other end (and mostly because we couldn't be certain of exact dimensions when first designing our race track, before the continuous loop belts had arrived) we fitted the two bearings to a sliding "carriage". The carriage is fitted to the "box lid" through two long slots (and some more tapped and threaded holes directly in the acrylic carriage material). This way we can wrap the belt around the bearings and the pulley on the stepper motor, then slide the far bearings away from the motor, adding more (or less) tension to the belt, as required.
With everything installed and the bearings set to the correct distance, we gave our belt a quick test, to make sure it could rotate around the bearings freely. Everything was working well. The plastic no longer had any flex in it, the belt was perfectly horizontal, and no matter how many times we span it around and around, the belt never once tried to work itself up and over the tops of the bearings.
Now we needed to find a way to fix some magnets to the belt in such a way that they could move freely, in close contact with the "lid" (yet to be fitted) but without them getting snagged or tangled up with the bearings/pulley.
We couldn't clip anything over the belt (since it would eventually run over the bearings or get snagged in the pulley on the stepper motor). But - as currently set up - nothing ever comes into contact with the outside face of the belt. We figured we could glue some little "brackets" to the outside face of the belt, and add our magnets to these. A little bit of bent solid-core wire was just the job!
Superglue on drive belts isn't a brilliant idea - we've already had experience of it failing, when we made our own belt-loop, made by super-gluing the end edges of a single length of T2.5 belt together, then reinforcing with some plastic, superglued across the join.
The problem with superglue is that it makes a "stiff" section in the belt. But our solid core wire is barely 1mm thick. So the amount of surface area affected by the superglue will be very small. Once we'd got our "wire brackets" fixed to opposite corners of the belt, we superglued a 5mm disc neodymium magnet onto each one (making sure to use similar polarities for ease of use later). With the magnets fixed to opposite corners of the belt, rotating it caused the two magnets to appear to travel towards each other, until they passed each other, somewhere near the middle of the track.
After a dry-run, pushing the belt by hand, it was time to run the motor, and made sure that the magnets could travel freely and easily around the outside edges of the bearings
Everything looks like it's going to plan. Just one last test to try out - the big one. The one that will tell us whether this entire project will even work or not! The idea is to place two knights on horseback on top of this belt - each knight having a magnet in his base. As the belt spins, under the playing surface, so the magnets with travel around the outside of the circuit, described by the belt. And if our tabletop miniatures also have magnets in them (presuming we've fitted them with the correct polarity) then we should be able to get our knights to travel towards each other (for each round of the jousting competition) then away to tournee around the rail and prepare for their next charge.
The big question is - as a concept, would these even work?
And here's the final result. A playing surface, on which two magnets appear to travel, completely without restrictiom. It looks like we might be on to something after all....
It's funny how even the simplest, most obvious things can sometimes catch you off-guard. Like this belt-driven "race track" for our Full Tilt game remake.
To date, we've stuck with acrylic for fixing the stepper motor and the bearing down and laying things out. It's not the cheapest material to use for "iterative design" (read try something, cock it up, put it right, try it again, etc. ad infinitum). MDF would probably be cheaper and a more appropriate material for prototyping and getting the layouts right.
But acrylic has one thing in its favour - you can make your holes for your bolts ever-so-slightly-too-small (e.g. 3.5mm for a 4mm bolt) and they take a threaded tap really, really well. So where we've got upright "posts" for our bearings to sit on, by using acrylic, we can drill these holes and tap them, and screw the bolt straight into the thread in the acrylic.
It's possible to tap into MDF but after a little while, the threads tend to work loose. If ever you put a bolt through a hole in some MDF you almost always end up putting a nut on the other side to keep the bolt in place. And we don't want unsightly nuts everywhere, because that would raise the bearings up in the air, and make the belt ride higher than we'd like.
So we're sticking with acrylic. Because laser-cutting holes then tapping them to take our M4 bolts is really neat. But there's something we overlooked...
When running our belt backwards and forwards, the belt kept "creeping up" towards the top of the bearings (if left unchecked, it would work itself up and over the top of the bearings and effectively just fall off). It was as if the belt wasn't travelling perfectly horizontally after all.....
And that's because.... it isn't.
One thing we'd overlooked is that if there's any tension in the belt at all, it will be pulling against the acrylic base. And with nothing to support it, the long, thin base is simply warping.
Before we go much further with this, we're going to have to build something to give that piece of acrylic some reinforcement!
Well, it turns out that - contrary to much of the advice across the internet - enabling microstepping doesn't make operating a stepper motor quieter.
If anything else, it makes it noiser. At least that's what I found, when I enabled half-stepping on my A4988 driver board. Enabling quarter-stepping made it even worse! Far from making everything smoother and quieter, it made the stepping more pronounced and obvious, and the noise from the motor got noticeably louder.
It looks like I'm going to have to try one of those ultra-quiet driver boards after all....
Ok, we're not messing about now. Yes, it was always a gamble that using a cheap 28BYJ-48 stepper motor with a laser cut home-made gear and a super-glued length of timing belt to make a continuous loop might not work. And it turns out it didn't.
Sure, we could add some kind of spring rollers to push the belt against the drive gear to help reduce slippage. But right at the very start of this project, we suspected this might happen...
So we're not going to waste spend any more time cobbling together something that may or may not work -it's time to focus on the end result here, not tinker with possibles and maybes (however interesting it might be to try out lots of different ideas). It's time to do it properly (as we probably should have done in the first place!) and use a "proper" stepper motor, and a "proper" closed loop timing belt and remove as many points of weakness/failure from the system as possible.
There are a few common-fixed-length closed loop timing belts on the market - the largest I could find (at a reasonable cost and able to deliver quickly) was 610mm. They are available in multi-packs of different sized belts:
These come with T2 pulleys for use with any common 3d printer kit. Which means we're going to be driving our nema-17 stepper motor using an A4988 driver board.
(whether we go for the full 12V or stick with our preferred 9V, we'll have to wait and see, but the principle is pretty much the same not matter which supply voltage we eventually go with)
The nice thing about the A4988 board is that we don't need to worry about investigating coils and working out step sequences and making sure we drive the coils in the correct sequence and so on. You simply provide a direction signal and a step pulse and each time the step pin rises from low-to-high, the board sends the appropriate signals to advance the stepper motor by one step (in the appropriate direction).
There's also an Arduino library that allows you to send single, individual step commands - so we can run a function on a timer-based interrupt which checks to see if the motor should be running, and sends the appropriate pulse-step if necessary - this will allow us to run our code without having to worry about "blocking functions" or the microcontroller becoming unresponsive while the motor is turning.
As before, the first step is to just get our motor spinning in response to a single input condition - we can then expand this for use with a closed-loop belt and to make our "racetrack" for a remake of the classic GW game Full Tilt.
const int stepPin = 8;
const int dirPin = 9;
int delay_ms = 1;
int potValue = 0;
digitalWrite(dirPin,HIGH);
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin,HIGH);
delay(delay_ms);
digitalWrite(stepPin,LOW);
delay(delay_ms);
getSpeed();
}
delay(100);
// change rotation direction
digitalWrite(dirPin,LOW);
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin,HIGH);
delay(delay_ms);
digitalWrite(stepPin,LOW);
delay(delay_ms);
getSpeed();
}
delay(100);
}
void getSpeed(){
// read the speed input pot and set the speed value as appropriate
potValue = analogRead(A0);
delay_ms = map(potValue, 0, 1023, 1, 25);
}
The end result is a variable speed motor, which we can use a simple potentiometer to control to speed of rotation.
At slow speeds, the stepping becomes almost visible, and the noise from the motor becomes very noticeable. At higher speeds, the motor is less "noisy" but at its fastest, the motor is clearly moving too quickly for our purposes - probably great if you're driving a CNC or a 3d printer, to be able to move the head around so quickly, but for us, we'd much rather a slower "top speed" and a quieter operation.
There are driver boards out there that specialise in ultra-quiet operation. If it comes to it, we might give this some consideration. But before we do that, there is still one option available to us..... microstepping.
Everything seems to be coming along quite nicely already. We managed to get a stepper driver up and running (relatively) easily. Sure, it needs its own power rather than being driven off the puny usb port supply, but other than that simply swapping out some LEDs for a motor and everything worked as it should! So now it's time to try it out with the actual belt drive....
Oh dear.
Nothing. Or that's how it seemed at first. There was the tiniest little hum of activity coming from the motor, suggesting it was trying to do something. So I moved the belt(s) out of the way.
And, sure enough, the motor was trying to spin - it just didn't have enough power to push the belt around the track. Despite using low-friction bearings and trying to minimise the load on the motor, running it at 5V (off a phone charger power supply) just wasn't quite enough to get things moving.
So we tried bumping the power up and supplied (just the motor) with 9V from a power adapter (being careful to isolate the power to/from the Arduino and keep that separate - in the fullness of time we'd probably have a single power supply and run the Arduino off a step-down converter, but for now we'll keep things simple by keeping the two power supplies separate).
It looks like our motor is getting enough power now and preventing it from stalling. But the extra power isn't pushing the belt around - it's just causing the teeth to slip. So we need some kind of spring or something to help push the belt against the gear, to prevent it slipping. There's no guarantee that will work - it's still possible that the belt will slip. But it's quite obvious that without something to hold the belt against the gear, this thing is never going to spin around!
As for the short video length? Well, that's because when I tried to squeeze the belt against the gear (to simulate it being held by a spring) this happened.....