These are truly magnificent pieces of engineering, and we were very lucky to be able to use one for the day.
Our version had been outfitted with a Lego studded test bed, which allows for the rapid testing and prototyping of Lego models. As you can see from the picture above, the tunnel is a finely-engineered beast.
On the left of the tunnel is a laminar air intake, which forces the air through a honeycombed aluminium structure to reduce the turbulence. Once through this, the diameter of the tunnel reduces sharply, increasing the airspeed through the test bed.
The LEGO bed is attached to two load sensors as can be seen below. One senses movement in the vertical direction, which indicates a Lift force in Newtons, and the other senses the Drag generated by the model in Newtons. The machine outputs the readings to two digital 7-segment LED displays, and are accurate to 0.01 of a Newton. The air exits via the exhaust side, and is driven by a mains-powered air conditioning fan. This is adjustable up to 18m/s at top speed, so the tunnel can really push the limits of most lego models.
It is very hard to directly visualise the airflows without some seriously dense smoke (which would set off alarms, asthma), but we have cotton thread on a wand that can be used to directly visualise the airflow over a model by tracing it around the outside of the model.
After the initial setup in the school library, I opened up my Big Box o Lego (TM), featuring many classic LEGO pieces from the golden era of 1980s space lego, and infused with Dexter’s more contemporary LEGO star wars pieces. We even took my younger son’s duplo airplane as seen above.
The basic procedure was outlined:
(1) Build a model, get it tested in the wind tunnel
(2) Record the Drag and Lift Values from the tunnel
(3) Refine your design, retest.
We had an incredible variety of models made, from the austere and efficient to the beautifully sculpted and adjustable masterpieces. Over 45 different models were made and refined over the course of the day, involving multiple rounds of testing.
The best models of the day tended to have the best Lift to Drag ratio, the best being 1.09N Lift, 0.38N Drag. We discussed how you could make them more efficient, including using flat pieces to reduce drag around the studs, removing unnecessary fandangles and gizmos.
The crowd that gathered was equal parts boys and girls, as well as equal part child and adult. LEGO is a great leveller, and many families had to pull away their participants in order to see the amazing things on offer elsewhere in the Science Fair.
Buy, or build your own robotic arm from the plans available from phenoptix. Connect it to a Pi using an Adafruit I2C servo controller board. Control it using ScratchGPIO. Get creative. This is perfect for KS2 or KS3 students who want a build challenge, but aren’t quite ready for the challenge of coding the robot control in python.
I bought a MeArm from Phenoptix before the Christmas break, as my STEM club kids had wanted to build a Mars Rover style robot with a robotic arm. I thought I’d start small and work my way up to building my own so I bought a retail kit from the phenoptix website after being really impressed with the V3 at the Poole Raspberry Pi Jam 2014.
The kit is sold by Phenoptix (www.makersify.com) and comes with everything needed to build the robot, including laser cut acrylic parts, M3 nuts and bolts for fixing, and 4x 9g Turnigy servo motors. They also entered the design into the Hackaday I/O contest, and open sourced the hardware so you can roll your own if you need to. This makes it an amazing choice for school STEM projects if your school has access to a laser cutter or a 3D printer, as you can make the robot for less than £20 quid and a dig around in the parts bin. Controlling the robot is left up to you: There are build instructions for Arduino, Pi, and Beaglebone (and presumably ninja skills with 555 timers and pots) as the control methods. The code for all these has been hosted on gitub.
The build was moderately difficult for KS3/KS4 students, and was not helped by the sometimes obtuse instructions on www.instructables.com. The Stem club were going to try and document a clearer build – I think the instructions could be done in a different colour acrylic to make it clearer, or perhaps add some 3D or wireframe instructions like an IKEA flatpack build! One of our improvements was to add engraved numbers to adjoining edges, so 2 fits with 2, 5 with 5 etc. But then again, solving problems is part of the whole STEM process!
My initial kit had the incorrect number of parts, so the build stalled about 2/3 of the way through but a quick email to the website meant they dispatched replacement parts in about 4 days. It’s really important to get the initial positions of the servos correct in the build, as it can have two consequences:
Having to disassemble the robot to correct the servo position in order to get the full range of movement. (A pain)
If the base servo is misaligned, the robot can end up pushing against the supports and burning out your servos. The claw servo can also burn out easily if you haven’t set limits in software and misaligned the servo before assembly.
Once assembled, the robot looks pretty awesome but the robot won’t be able to move without precisely timed PWM signals generated from a Pi, Arduino, Beaglebone or a servo controller unit. These have to be precisely timed, and require a PWM pin, +5 V and ground for each servo.
Connections to the GPIO
This how-to is for a Raspberry Pi Model B or B+ (not a Pi 2) , using Adafruit’s 16 channel servo controller board, Scratch GPIO 7.
1. Assemble the Adafruit board by soldering in the header pins
2. Enable i2C on your pi by following the instructions at the Adafruit Learning Centre. This is just editing a config file and then rebooting down the Pi
3.Attach the breakout pins on the Adafruit board pins to the correct GPIO pins as shown below.
This picture is from a B+ GPIO.
Make sure that the Pi is turned off before attaching pins to the controller board!
VCC is attached to 3V3 (GPIO 1 ) This provides the voltage for the controller chip at 3V.
Gnd is attached to Gnd (GPIO 6 ) This provides a ground voltage for the controller chip at 0V
SDA is attached to SDA (GPIO3 ) This pin is the Serial Data pin, where all of the PWM signals are pushed to the different servos
SCL is attached to SCL (GPIO5 ) This pin is the Serial Clock pin, where the timed pulses for i2C master-slave communication are generated.
and you should get output that it has detected your device (mine was 0x40)
Connecting the servos to the board.
Connect each servo to the board correctly:
Make sure that the Black wire is connected to ground, The red wire to V+, and the White wire to PWM.
I connected the servos to the board as follows:
Base servo: Channel 0
‘Shoulder’ servo: Channel 1
‘Elbow’ servo: Channel 2
‘Gripper’ servo: Channel 3
I usually have a whole bunch of female-female header leads for experiments with Raspberry Pis, and then I use solid jumper leads to connect these to the servo leads. You should thread the leads through the centre of the arm to keep the leads tidy, and to minimise snagging whilst the robot is moving. You’ll need to extend the servo leads of the micro servos in order to prevent any tension whilst the robot is in motion. I’ve got 20cm jumper leads bought on Amazon, and can highly recommend them for STEM projects.
The Adafruit 16channel 12bit i2c board, allows the Pi to control the 4 servos using i2c over the GPIO. You need to use an external 5V power source to power this board, otherwise the Pi will brown out whenever the servos are moving. You can damage your Pi if you try to drive 4 servos with the GPIO. I used an external bench power supply to make sure the servos got a constant voltage supply.
Make sure that you connect the servos to the Adafruit board, the Adafruit board to the GPIO and the External Supply to the Adafruit board whilst the Pi is powered down. Check, check and check all your connections again. The GPIO can be a fickle beast, and connecting it incorrectly can damage the Pi. Be nice to your Pi.
Once you reboot your Pi, you should see the adafruit board will light up, and you can check that the Pi can see the i2C device with
Connecting the Adafruit Servo Board to Scratch GPIO.
Install ScratchGPIO on the pi using
wget http://bit.ly/1wxrqdp -O isgh7.sh
sudo bash isgh7.sh
ScratchGPIO7 should then be installed. If you don’t get a link on the desktop, you might need to dig around in /etc/ to locate the scratchGPIO7.sh file.
Start ScratchGPIO. The program should automagically detect the i2c device if it can be seen using the i2cdetect command.
Set up some variables:
AdaServo0 – This is channel 0, the base servo, and should only be sent values ranging from -90 to 90
AdaServo1 -This is channel 1, the shoulder servo, and should only be sent values ranging from 70 to 0
AdaServo2 -This is channel 2, the ‘elbow’ servo, and should only be sent values ranging from 20 to 70
AdaServo3 -This is channel 3, the gripper servo, and should only be sent values from 0 to 30.
These values are all assuming that you have assembled the arm according to instructions. You might find that your ranges are slightly different.
You can choose to increment the values of the variables by using the arrow keys, or you might create a generator script which will automatically scan through the values for each variable. we had a ‘panic’ function that set the robot to a home state with a single button press if things got hairy!
Here’s a video of it in action:
Be careful not to exceed the maximum values for the servos. The 9g servos have relatively weak plastic gear trains, and can strip their gears easily!
We’ll share our scratch code, and will post our python code as soon as we can get coding again.