Damien works with students and teacher from around the world, bringing the effective use of technology to the classroom.  

Damien is a member of the MCP (Mindstorms Community Program), a small group of experts who collaborate with LEGO to make the MINDSTORM product better.

VEX IQ Robotics
Damien is a member of the VEX IQ Super User group, a small group of experts who collaborate with VEX to make the VEX IQ platform a better product 



Teacher Resource Books

Global Map

See where the DomaBot and RileyRover is being used around the world

Entries by Damien Kee (96)


Using Arrays with EV3-G

At a recent conference I ran an advanced EV3 workshop where one activity concentrated specifically on the use of arrays. Arrays are a new edition the MINDSTORMS software that the previous NXT-G software didn't support (at least not cleanly). Arrays allow us to store multiple bits of data all in the one 'thing', which makes it easier to access. If you think of Variables as being a suitcase where you can read and write some information, then Arrays can be thought of as a suitcase that has lots of smaller folders inside. Each folder can store an individual piece of information and you can access that information but selecting suitcase, and then the folder inside.

While you can do the same thing with lots and lots of Variables, Arrays make it far cleaner.

The Project:

Create a game of Memory. The EV3 will call out 4 random colours. You then have to show the Colour Sensor the colours in the right order. Get it right and you score a point, get it wrong and you get a disappointing buzz.

The whole project can be broken down into 2 distinct stages 1. Create and say the sequence of random colours 2. Check if the colours shown to the colour sensor match the sequence.

(click for full size)


Create the Sequence array

To start, we initialise an array and call it 'colours'. As we are going to use the 'Append' function, we don't need to say how big the array will be to start with.

We then generate a random number between 1-4 (I'm only using 4 colours at the moment). This random number is appended to the Array. As there is nothing yet in our array, this means it will be put in at array index 1. (NB. Arrays in EV3-G are numbered from 1, which is different other programming languages with often begin numbering at 0. There were long and intense debates around the reasoning for this which I won't get into!).


If the number is a 1, the EV3 will say 'Black'. A 2 will give 'Blue', 3 will give 'Green' and 4 gives 'Yellow'.


Rinse and repeat 4 times (don't want to make the sequence too long). Each time it repeats, the 'append' function adds a new random number to the end of the array.


Checking the colours

Once the EV3 has said its sequence of colours, it moves into checking mode.

Firstly it waits for a colour to be detected. Any colour will do, just so long as it is not 'no colour'. It then waits for half a second to make sure the colour paddle has settled into place. This is needed to make sure the colour sensor doesn't pick up a bunch of random colours as the paddle comes down over the top.



We then read the actual colour so we can check it against our sequence.  After that we need to check against our array. We use the loop counter plug which keeps track of how many times we've been through the loop. The first time through the loop, the loop counter is '1', which means when we use the 'Read at Index' block, it will tell us what number is in the 1st position of our array.

We send this number from the array along with the colour measured from the Colour Sensor block (which will be in the form of a number) through to a 'Compare Block' which will give us either a TRUE (colours match) or FALSE (colours don't match).

A Logic Switch uses this information to play a High note if it is TRUE and a low note if it is FALSE. Repeat 4 times to match the length of the sequence.

Added bonus

This is the basics behind the game.  In the video I added a score using a variable that incremented.  I also used the Medium motor to turn a simple dial to indicate the score going up.  I'll leave that up to you to figure out :)

If you make some cool modification, please let me know!


Invited Keynote - 2nd Arab Conference on Robotics and Artificial Intelligence

I was very honoured to be invited to give the opening keynote at the 2nd Arab Conference on Robotics and Artificial Intelligence, held in Amman, Jordan on December 14-16th.  

My keynote was titled "Robotics Today and How we are preparing Students for a Robot Filled Future" and I touched on topics such as the current state of robotics, changes in Robotics Education around the world and how Australia is currently approaching a new 'Technologies' curriculum.  Critical Thinking and its interrelation with all curriculum areas was also discussed.


The talk was well received and I had plenty of great conversations with the participants throughout the three days.  In addition to my Keynote, I also ran three EV3 workshops for the delegates.  We did two identical workshops on the basics of EV3 and how it differs from the NXT and one advanced workshop where we dived into more of the complexities of the software.  This advanced workshop concentrated on the new Array feature of the software and I'll do a separate post on that activity shortly.

The only real downside to the whole trip was the sudden and unexpected snowstorm.  Apparently it was the most snow they have experienced in the region in memory and quite a few people (including the Prince of Jordan) were unable to make it on the first day.

A special note of thanks to Sami Alzein who looked after me and took me around on the last day once the snow had melted enough for traffic to get through!



All books now available in pdf


I've finally taken the plunge and am offering all my books in downloadable pdf format. (Still have physical copies if you're so inclined)

Classroom Activity books (EV3, NXT and Datalogging) are US$20 and the rest (WeDo, Making Music and PSP controller workbook) are US$10.

Find them all here! -


EV3 Education vs EV3 Home software

While there has been a lot of discussion and questions around the differences between the Home and Education versions of the EV3, there hasn't been a lot about the differences in the software.  I'm going to try and summarise as best I can here.  If I miss anything, please let me know.


The most important thing to note first up, is if you ignore all the marketing / packaging of each software, then the actually programming language (unofficially called EV3-G) is exactly the same for both the Home and Education editions.

The biggest difference is probably in the Lobby area. The Home edition is definitely marketed towards Boys, aged 8-14 with quite bold and dark colours and slightly menacing looking builds. The Education Edition is far cleaner, which will appeal to teachers and (stereotypical) girls.



  Education Edition Home Edition
Cost US$100 Single licence
US$400 Site Licence
Free Download
Programming Language           EV3-G EV3-G
Content Editor YES YES
Datalogging Software YES NO
Tutorials Generic tutorials for all aspects of the EV3 device Tutorials specific to each particular build
Building Instructions EV3 Core Base
Colour Sorter
Robot Arm H25
Download pdf's here
as well as links to other bonus models
Sensor Support Supports both EDU and Home sensors     

Supports both EDU and Home sensors
(you need to download the EDU blocks)


There will be additional education modules you can purchase (the Design Engineering module being the first) which I believe you can only load into the Education version.

Conclusion:  They are actually pretty close.  If you are just looking to program your robot, and not concerned about the very 'boy' focussed lobby, then the Home version will suit you fine.  If however, you're looking to roll this out in a classroom, where you'll likely have a mix of ages / genders, then the Education edition is certainly worth looking at.  If you're going to be using your EV3 for more than just 'robots' and are going to delving into some *science*  (which I strongly recommend everyone does!), then you can't go past the Education edition software.

Did I miss anything?



Classroom Activities for the Busy Teacher: EV3 now available

My new book Classroom Activities for the Busy Teacher: EV3 is now available!  I'm offering it in two formats, full colour hardcopy from Amazon, or for the first time ever, as a pdf eBook that you can download.

Get all the information, Sample Pages and free Student Worksheets and Building Instructions here!

If you get a copy, leave a comment below to let me know what you think of it.


RileyRover - EV3 Classroom robot design

This is my simple EV3 robot design.  It is very quick to build, uses very few pieces and has interchangeable attachments.  This makes it very useful in a classroom setting.

If you do end up using this design in class, please let me know, I love to hear how far and wide throughout the world my design travels :)

--> Download full colour pdf (including all attachments) <-- 

Click to read more ...


CAD model for my new EV3 classroom robot

It has taken me quite a while and lots of fiddling, but I'm finally happy with the build instructions for my new EV3 classroom robot.  I've got a draft PDF out to a few teachers for them to check over it, but here are a few images of the final product as well as some "production" shots.


What School holidays?

Normally my school holidays are pretty laid back, a chance to catch-up on all the admin work that gets neglected during the Term. I was also really looking forward to some uninterrupted time to be able to finish up the new EV3 book, just in time for the August release date. For some reason however, this turned out to be my busiest School holidays in a very long time.

I ran two Robotics workshops for the Queensland Gifted and Talented Association, two Robotics / Scratch Programming workshops for MENSA children and an all day "Create your own computer games" workshop for The Engineering Links group. Throw in a Stop-Motion animation workshop for a home schoolers group and some incidental IT support for a conference down the Gold Coast and these last two weeks have just flown by!

Fingers crossed I can find enough time to get my EV3 book ready on time!


First Look at the new EV3 software

After being able to see the EV3 hardware for the last few months, it's really exciting to be able to now show off the new software.

This is just a taster, and I'll get into more detail in future posts.


EV3 software:

The new software follows on from the NXT-G software, in that it remains graphically based.  This is fantastic for first time users as well as the younger students.  For those looking for more powerful languages, there is LabView and RobotC to keep you satisfied.

The Palette of Blocks has now been moved to the bottom and the "Common' Palette has been removed.  All the Blocks are available all the time.

For those of you familiar with the WeDo software, it has a lot of familiarity. This will be very beneficial for those students transitioning.

One of the big changes is how the blocks display their parameter information.  In NXT-G, you had the Configuration Panel.  That was great, it had a lot of information there, but once you clicked to another block you couldn't see the info any longer.  With the EV3 software however you can see all the info on the block itself.  No more clicking through every block to understand a program.  This will be a huge help to teachers, as often we are just glancing over students shoulders to see their work, and this will allow us to understand the whole program without taking control of the mouse.


Simple Example

This block I have set up to drive straight ahead, 67% power, for 5 rotations and the Brake at the end.  The motors are connected to Ports B and C.

This one is setup to drive gently to the left, -35% power (backwards), for 3.7 seconds.

Setting the Parameters

Setting the Parameters is really nicely handled as well.  Every Block has a Mode Selector which governs the main function of the Block.  In the above example that means determining if you are working in Seconds, Degrees, Rotations etc.  

If there is a number required, on nearly all the blocks you are given the option of typing in a number or moving a slider bar, very handy indeed.  


Data Wires

Data wires in NXT-G were messy, and while it would be impossible to simplify them entirely, the EV3 software does a much better job in managing them and figuring out where they go.

This example will take a reading from the Ultrasonic sensor connected to Port 1, combine it with some text, display on the screen and then continually update the screen with new readings.

click for larger version


There are tool-tip everywhere, so if you're ever not sure what an icon does, just hover your mouse over it, and it'll give you a couple of words outlining its properties.  

This is just a very brief teaser and I'll go into far more detail in upcoming posts.  If you have any questions or thoughts, please don't hesitate to ask!




The Basics of using the HiTechnic IRSeeker 

I recently ran a Hangout session with a group of girls on the other side of the world.  They were having some issues getting their IRSeeker to accurately track an IR Soccer ball and just needed some tips to get them going.

This post sets out 1 possible way of getting a robot to track an IR Soccer ball using the HiTechnic IRSeeker V2 sensor using the NXT-G software.  If you haven't already done so, download the custom IRSeeker block and install it in the NXT-G software.

The sensor itself comprises 5 individual detectors, that when used together can tell us if the ball is located in 1 of 9 different locations.  From the diagram below we can see that if the IRSeeker gives us a reading of 1, then the ball is all the way to the left.  If it gives a reading of 5 the ball is in the middle and a 9 means the ball is all the way to the right.  A reading of 0 means that it cannot see a ball at all.


Before we start programming, we need to think about what we want the robot to do for each value we may receive from the IRSeeker.  I'm going to keep it very simple for this tutorial, but you can add in more complexity once you have it up and running.

Let's start with some of the easier decisions:

  • If I receive a 1, then I want the robot to do a fast, sharp turn to the left
  • If I receive a 5, then I want the robot to drive forward as fast as possible
  • If I receive a 9, then I want the robot to do a fast, sharp turn to the right
  • If I receive a 0, I'll just make the robot stop moving altogether

Some trickier decisions will be 2,3,4 and 6,7,8.  For each of these conditions I'll still want to turn, but perhaps not as sharply and perhaps not as fast.  I'll leave it up to you to play around and see what works best for your robot.


The Program

The key to this program is the Switch Block.  Normally the Switch block is tied to a sensor and will give you something like the following

IF Sensor reading is greater than a given amount

   Do Action No. 1


   Do Action No. 2

This works well if you only have two things to worry about, but in our case we have 10 separate values that will each have a different action associated with it.  The first thing we need to do is to set up the Switch to be able to take 10 separate values.

1. Set up the Switch to make decisions based on a 'Value' 

That value will be of type 'Number' (not Logic or Text). 


2.  Uncheck 'Flat View'

Flat View is used to flatten out our two conditions so we can see them both on the screen at the same time.  Unchecking this will convert to 'Tabbed' mode where each condition is indicated with a Tab.


3. Add in more conditions

The 'Conditions' column in the configuration panel shows you how many conditions are currently available.  Pressing the "+" button will add conditions (and you will see more Tabs added to the Switch Block itself).  Let's go for 10 conditions.


4. Check the values that trigger each Condition.

The second column in the Conditions section shows you what value will trigger each condition.  The default is that if I receive a '0', I will run condition 1.  If I receive a '1', I'll run condition 2 and so on.  You can play with these if you want, but I'm going to leave them as is.


5.  Start filling in the actions.

By selecting the appropriate Tab, I can then specify exactly what I want my robot to do for each condition.  0=stop, 1=left, 5=straight, 9=right.  I'm setting all movements to be 'unlimited' as I want them to keep doing the same thing until the number changes.  ie, if I can see a '1', then keep turning, keep turning, keep turning until I see a number that is not 1.


6. Configure the whole switch so that the IRSeeker is the sensor sending it numbers.

Grab your newly installed IRSeerker Block.  Use the datahub to wire the 'IRDirection' value to the Switch. 


7. Put the whole thing inside a loop

This is done to ensure the programming is constantly going back to the start and checking for new values from the IRSeeker.  I've set mine up to loop forever, but perhaps you set yours up on a time (chase the ball for 10 seconds?) or another sensor (chase the ball while the compass sensor is pointing towards goal?)


Other ways of doing it.  

Check out these other links (one is mine that I wrote a few years ago and forgot about!).  Remember that there are always many ways of solvinf the same problem.  See if you can understand all of them.



Just remember that I have only presented a framework for making this work.  You'll need to fill in the blanks and also test / tweak to suit your robot.  If you manage to get it working, let me know in the comments below!



Page 1 ... 3 4 5 6 7 ... 10 Next 10 Entries »