When you've spent a few hundred Euros on a Lego robot you want to do something more than build a few standard models and run a few standard programs, you want to stretch yourself and learn more about programming. I do, anyway. So I've set myself some challenges that you might like to have a go at too. Most of these challenges have already been attempted by other people (grrrrr) but I think some are original, as far as I know. They are listed in order of complexity, simplest first. I have given my own solutions to each problem but I encourage you to have a go without looking at my solutions. Even the simplest projects here require a minimum of programming skills and familiarity with the various blocks, such as knowing about loops and data wires. It would be a good idea to complete all the 'Robot Educator' exercises in the education version of the EV3 software (if you have access to them) before trying my projects. For each of my projects the project file is available for downloading. You are welcome to use and modify these projects as you wish.
I encourage to think up original challenges of your own - if you are successful then let me know and I'll include you on the page devoted to 'Your Projects'. All my projects are compatible with the standard 'driving base' used in the the official 'Robot Educator' exercises that are included in the the education version of the EV3. I encourage you to also try to make projects that are compatible with this model.
Alternatively, consider using as the standard base for your work the RileyRover (see images below) which is the standard robot used in Damien Kee's excellent 'Classroom Activities for the Busy Teacher: EV3' text which I am using in my classes. Damien has kindly made available the building instructions for the RileyRover HERE on a Creative Commons Licence (free to use except for commercial use). Visit Damien's site at damienkee.com.
Steer the robot rover by making sound (needs the sound sensor which is only available as an extra).
It would be useful to be able to display numbers (integers between 0 and 999, for example) in jumbo size on the EV3 display so that they can be read easily even while the robot is moving.
The EV3 is pretty terrible at working with text - it can't even do word wrap or centering. So how would you display a long message on the EV3 display?
Make a program that reports which of two entered numbers is greater and which is smaller. My solution uses a MyBlock which might be useful in other programs.
Clap To Control
This project assumes you have access to the sound sensor which is only available as an optional extra. What's the best way to give instructions to a robot that is already running a program? You could press the touch sensor or show the robot a colored block but if you have the sound sensor available then I think the best way to give a robot instructions would be through a series of claps. Can you make a program that reliably counts the number of times you have clapped? Three quick claps might mean 'turn right', for example, or 'run program 3'. You're thinking that you could just use the infra-red remote for this? Then you've forgotten that the education version of the EV3 does not include the IR sensor or IR beacon. Coming!
Can you devise a neat mechanism and program for lowering a pen onto the paper-covered floor and raising it again, preferably a method that does not need a dedicated motor? Coming!
The line follower suggested in the official 'Robot Educator' exercises works very badly. Can you make a better one?
It's been said that an infallible way to solve a walk-through maze is to touch the wall with your right with your hand and then walk through the maze without ever losing touch with that wall to your right. I'm not really sure that that rule works, but why not try to make your robot do that anyway, in other words advance while always staying close to (but without touching) a wall. It's not very difficult to do this using two ultra-sonic sensors so try to do it with just one. (Actually most people don't even have even one ultrasound sensor since none is included in the retail version of the EV3 - I don't know whether the IR sensor can be used instead).
It seems that most EV3 wheeled vehicles have two powered wheels which cannot be 'steered' in the way that a car's front wheels can be steered. These EV3 vehicles are more like wheelchairs than cars in that sense. So why not try to make a three-wheeled vehicle with a truly steerable wheel? It could look like a tricycle, with a single, steerable wheel at the front and two at the back. Either the front wheel or the two back wheels could be powered. If the back wheels are to be powered by a single motor then it would normally be necessary to use a 'differential drive' to stop the wheels skidding when the vehicle turns, so this would be a great way to learn about that technology, which I think can be constructed using the EV3 components. The other thing I like about this project is that it allows us to avoid using the 'castor' - the metal ball that is supposed to act like a kind of wheel but which tends to get blocked with dirt rather quickly such that it stops turning at all.
Sometimes you might want to enter a decimal number such as 256 into a running program, e.g. to control a frequency or set a distance. But the EV3 intelligent brick only has 5 buttons (not counting the 'back' button that cannot be used while a program is running except to end the program) so how can these 5 buttons be used to easily enter any integer number that you wish?
I devised a game in which the brick speaks a random sequence of five words such as "up, start, down, left, down" and you have to then press the corresponding brick buttons in the right order ("start" means the centre button). Can you do the same? I used a numeric array to store the random sequence.
Navigate with scanning sonar
I'll certainly make a robot with a scanning sonar that will help the robot move around, perhaps through a simple maze, for example. The sonar (the ultrasound sensor) will just scan back and forth because it's really difficult to make a sonar that rotates continuously through 360° like a ships's radar. First I thought that a third motor would be needed to make the ultrasound sensor scan back and forth but watching a video by this 13 year old professor at MIT I realized that the scanning can also be achieved just by having the robot zigzagging left and right as it advances forward:
As you can see, he is not using a Lego robot but a robot of his own design, the Fuzzbot, for which there are building instructions HERE.
360° sonar scanners have been done before but the ones I've seen make the whole vehicle rotate - this is not an elegant solution. Can you design a sonar scanner using the ultrasonic sensor that can rotate continuously without requiring that the whole Lego vehicle rotate? The difficulty here is allowing for a continuous rotation without the sensor cable getting twisted.
Lesson 15 of the Robot Educator>Beyond Basics lessons in the education version of the EV3 software show how to control a single motor connected to one EV3 brick by manually turning a motor connected to another brick. This is possible once a Bluetooth connection between the bricks has been established, as explained in the lesson. The lesson also shows (in a pair of hidden programs) how to control two motors of the receiving robot by manually turning two motors attached to the transmitting robot, or brick. But this implementation uses 'tank steering', making it very difficult to use. Is it possible to set up the receiving robot so that it can be controlled in the normal way, with one wheel on the transmitter controlling the speed (power) and one wheel controlling the steering?
Can you make a program that is capable of reading a very simple bar code that is passed on front of the colour sensor? The bar code itself could be made from Lego pieces.
The retail version of the EV3 includes a ball launcher but the education version does not. How can a ball launcher be made with the parts of the education version?
Gear box (Motor Multiplexer)
Is it possible to make a gear box (motor multiplexer) that can allow a single motor to both select and drive one of several axles?
Robot determines its position
It is obviously often very useful for the robot to know where it is! One approach to this might be to have the robot detect three beacons and then figure out its position by triangulation. For an over-complex realisation of this, see this page and the video below.
Another approach would be to make sure that the robot operates in a space with two nearby perpendicular walls or barriers that the robot can detect with its ultrasonic sensor. That would then allow the robot to determine its location relative to those walls.
A step beyond the robot knowing its location is SLAM, Simultaneous Localisation And Mapping' - this means that the robot makes a map of its surroundings and knows where it is on the map (so it should really be called SMAL, but that doesn't sound so good).
Make a holonomic robot
Holonomic robots use special 'omniwheels' to move around in surprising and fascinating ways - the video above demonstrates both a holonomic robot and position determination using multiple beacons (though I suspect this can be achieved more simply...).
Printing with chocolate
I wish I had thought of this myself. I like the idea that the machine will draw neatly on an unusual 3D surface and that the result might make a unique gift.
This shouldn't be too hard: make a Lego machine that proposes a selection of tunes, accepts real coins and gives change, then plays the desired tune.
This could be a great project to work on, for vending machines are genuinely useful.
Still not inspired? Check out this 8 minute video for impressive Lego creations. They're mostly not using the EV3 but hey, maybe they could be?...