Have this up as students arrive. Once everyone is seated, welcome them to Flight School: over two days they'll program a robot, learn to fly a drone, and finish with a mission where both work together.
Day 1, Session 1
Welcome and Python Basics
9:00–10:10
Camp intro and safety
Drone demo
Python basics
Human Robot game
Session 1 runs until recess at 10:10. Order: camp intro and safety, crews, drone demo, Python basics, then the Human Robot game. Keep Python practical: students should be typing within 10 minutes of starting it.
From the ground to the air
Python basicsprint, variables, loops
Robot codeprogram VEX AIM
Robot soccerscore goals
First flightstake off and land
Flying shapescode a flight path
Hoop coursefly through hoops
Ping pong pushthe drone's downdraught
Final missiondrone plus robot
Day 1, Tuesday
Day 2, Wednesday
Walk through the eight sessions quickly. The message to land: everything builds towards the final mission, where the drone and the robot work together.
How coins work
EarnFinish a challenge and your crew earns a coin. Harder challenges are worth more.
TrackEvery coin goes on the crew scoreboard.
SpendSpend your crew's coins at the Prize Store at the end of Day 2.
Open the scoreboard with the coin button in the bottom bar, or press C, to show it. Award coins from any slide the same way; the scoreboard saves as you go and stays up to date on every staff device. Coins belong to the crew, not to individuals.
What can you buy with coins?
Squishy
Pokémon cards
Labubu
Show what's waiting in the Prize Store, then move on. Crews spend their coins together at the end of Day 2, so every challenge counts.
Camp safety rules
Hands off robots and drones until an instructor says go.
Drones only fly in the flying zone, with an instructor watching.
Stay behind the safety line whenever a drone is in the air.
Walk, don't run. There are cables and robots on the floor.
If something goes wrong, stop and put your hand up.
Go through each rule and ask a student to repeat it back. Point out the flying zone and the safety line in the room. The full drone safety course comes in Session 4; these are the whole-camp basics.
Your crews
Add the crews on the scoreboard (coin button or C) before the session, and they appear here. Send crews to their stations. Crews stay together for both days, and coins are earned as a crew.
Demo flight
Stay seated behind the line while the drone flies.
Fly a short demo: take off, fly a square, land. Narrate what the drone is doing as it flies. Students stay seated behind the line throughout.
Example: Programming a drone
Press Run and let students watch: the drone flies a square and climbs at each corner. Switch between 2D and 3D to show the same flight from above and from the side. Then Step through it and point at the if: the climb only happens when i is less than 3. Don't teach it yet; ask what they think each line does. By the end of Day 2 they will have used every command here.
What's different about a drone
PositionIt has a height, as well as forward and sideways.
RotationIt turns on the spot while hovering.
Take-offPrograms start with take_off() and end with land().
DriftAir moves it, so it never stops in exactly the same spot.
BatteryFlights are short. Check the battery first.
These are the practical differences students will meet tomorrow. Point at the arrows: forward and rightward are like the robot, downward is new. Drift is why real landings never match the simulator exactly.
What is a program?
A program is a list of instructions that a computer follows, in order.
Take off
Fly forward 2 metres
Turn right
Land
This is a drone's flight, written as a list of instructions. Ask: what happens if we swap the first and last steps? (It tries to land before taking off.) What if we skip Turn right? Order matters, and a computer never fills in a missing step. It does exactly what the list says.
The power of programming
By hand, this would take an hour. With code, it takes a second.
Turn:
Press Run. The computer draws 200 lines in about two seconds. Before each number button, ask students to guess what will change: 90 makes a square spiral, 91 twists it, 121 makes a triangle swirl, 145 a star burst, 170 a flower. Then let a student call out any number and type it in. The forward and turn commands are the same ones they will use in the Human Robot game and on the real robots.
One program, 100 drones
This is real Python. Drone light shows work this way: a program works out a position for every drone and sends it. move_to(x, y, z) is a real VEX Air command; x is left and right, z is height, both in millimetres. Press Run. The first loop puts the 100 drones in a 10 by 10 grid using the drone's number: d % 10 picks the column, d // 10 picks the row. The second loop spaces them round a circle, 3.6 degrees apart (100 x 3.6 = 360). The other loops use the same idea with different maths: a flower, a spiral and a wave. While the drones move, the loop that is running lights up in the code. Ask: how many move_to commands did that take? (500, from about 30 lines.) Try changing 1500 to 800 to shrink the circle, or 5 to 3 in the flower. set_colour changes the lights before each shape. Real show drones have programmable lights; VEX Air drones don't, so set_colour only works in this simulator.
Your turn
Now you code
Every program you just saw is built from three things.
print()shows a message
variablesremember a value
loopsrepeat lines
This is the switch from watching to doing. Say it plainly: the drone square, the spiral drawing and the 100-drone show all use the same three things, and by recess everyone will have written all three. Then go straight into print().
print() displays a message
Output
Ask students to predict the output before you press Run. Point out that the text inside the quotation marks is exactly what appears. Then edit it live: change the message, and drop a quote mark on purpose so students see that error messages are normal. Click into the code to type. Ctrl+Enter runs it. Press Esc to get the arrow keys back for changing slides.
Your Flight School page
Open the Flight School page.
Pick a challenge, or open the Playground.
Type your code, then press Run, or Step to go one line at a time.
decks.tabbott.dev/fly
Share the link with students before the session, for example through your class channel, so nobody has to type it. Challenges lists every challenge with its coins and a hint, and robot and drone challenges come with a simulator to test code before running it for real. Playground is free Python, or a free robot or drone simulator. Commands lists every command used at camp, with links to the VEX reference. It saves each student's code in their own browser.
Try it: Make it talk
Print your name.print("Ava")
Print your crew's call sign.
Bonus: print a countdown. 3, 2, 1, Lift off! One print() per line.
Give students the full 3 and a half minutes in the playground before moving on. Most common errors: missing quote marks, missing brackets, a capital P in Print. Celebrate the first error message someone fixes on their own.
Example: Make it talk
Output
Show this once time is up. Run it, then change the name to a student's and run it again. Step shows the countdown printing one line at a time.
What is a variable?
A variable is a name that refers to a value.
= means “set to”. It isn't equals like in maths.
A variable holds one value at a time.
Use the name to get the value back.
name = "Ava"
name→"Ava"
age = 11
age→11
age = 12
age→11 12
Write name = "Ava" on the board and draw an arrow from the name to the value. Read = aloud as "is set to", never "equals". Then write age = 11, then age = 12, and move the arrow: a variable holds one value at a time, and setting it again replaces the old value. Ask: after these lines, what is age?
Variables in Python
Variables
Output
Press Step to run one line at a time and watch each variable appear. Ask: what would print("name") show, compared with print(name)? Words in quotes are text; a word without quotes is a variable's name. Change "Ava" to a student's name and run it again.
Predict: What will it print?
A11
B12
C11 12
Output
Hands up for A, B or C before you press Run. Answer: B. A variable holds one value at a time, so setting age again replaces 11 with 12. Step through it and watch age change in the Variables panel.
Try it: Name your variables
Make a variable called name, set to your name.name = "Ava"
Make a variable called fav_number, set to your favourite number.fav_number = 7
Bonus: print a sentence that uses your variables.print("I am", name)
Students work in the playground. Variable names can't have spaces, which is why we use fav_number with an underscore. Watch for fav number with a space.
Example: Name your variables
Variables
Output
Show this once time is up. Step through it so students watch each variable appear in the Variables panel. If anyone tried a name with a space, type it here to show the error and how to fix it.
What is a loop?
A loop repeats instructions, so you don't have to write them over and over.
range(3) means repeat 3 times.
Indented lines are inside the loop.
Without a loop
print("Flap!")
print("Flap!")
print("Flap!")
With a loop
for i in range(3):
print("Flap!")
Both programs do exactly the same thing. Ask: what would you change in each one to flap 100 times? The loop version needs one number changed; the other needs 97 more lines. The indent is how Python knows which lines belong inside the loop.
Loops in Python
Variables
Output
Press Step and let students call out what happens next each time. Watch i in the Variables panel count 0, 1, 2. Ask: why does Landed only print once? Because it isn't indented, so it's outside the loop. Then indent it and press Step again. This idea comes back for the robot square challenge.
Predict: What is total?
A2
B3
C6
Output
Vote first. Answer: C. The loop runs 3 times and adds 2 each time: 2, 4, 6. Step through it to watch total grow in the Variables panel.
Try it: Loop the loop
Print Lift off! 10 times, using only 2 lines of code.for i in range(10):
Loop over range(5) and print i each time. Which numbers appear?
Bonus: print Ready once, Go! three times, then Landed once.
Students work in the playground. Task 2 surprises everyone: range(5) gives 0, 1, 2, 3, 4, because Python starts counting at 0. Let them discover it before you explain. Forgotten indents and a missing colon are the most common errors.
Example: Loop the loop
Variables
Output
Show this once time is up. Step through the middle loop so students see i go 0, 1, 2, 3, 4. For the bonus, point out that Ready and Landed sit outside the loop because they aren't indented.
The Human Robot game
ProgrammerReads out one command at a time.
RobotDoes exactly what each command says.
DebuggerSpots the command that went wrong.
Weave around the three poles, crouch under the bridge, then turn right to the finish.
Set up the course with what's in the room: three chairs in a line as the poles, a broom or rope held across the path behind them as the bridge, and a spot to the right as the finish. One step is one normal walking step. Run the demo on the next slide first, then crews play, swapping roles after each run.
Human commands
Build the program with the class: students call out one command at a time while you type it, or click a command on the left to add it. Run or Step to test, and let the Debugger fix any bump. Show solution swaps in a working program; press it again to get the class’s version back. The robot turns orange while crouching.
Recess
10:10–10:30
Leave this up for the whole break. Robots stay where they are.
Day 1, Session 2
Robotics Programming in Python
10:30–12:30
Meet VEX AIM
Your first drive
Robot challenges
Session 2 runs until lunch at 12:30. Robots should be moving within 15 minutes of this slide. Coins start here.
Meet VEX AIM
DriveMoves in any direction, even sideways.
TurnSpins on the spot.
KickCollects a ball with its magnet, then kicks or places it.
ScreenShows messages and pictures.
Hold up a robot while you go through the list. Show the wheels (they let it slide sideways), the kicker at the front and the screen. Hand robots out after this slide.
Running your code
Turn on your robot.
Open VEXcode AIM and choose Python.
Connect to your crew’s robot.
Write your program.
Press Start, and keep hands clear.
Demo the whole process once on the projector with a one-line program. Check every crew is connected to their own robot before moving on.
Moving with move_for
robot.move_for(300, 0)
The first number is how far, in millimetres.
The second number is which way, in degrees.
300 millimetres is 30 centimetres.
Direction is measured from the robot’s front: 0 is straight ahead, 90 is its right, 180 is backwards, 270 is its left. The wheels slide, so 90 moves sideways without turning.
Try it: First drive
Drive forward 30 cm.robot.move_for(300, 0)
Then drive back to where you started, without turning.
Bonus: slide 30 cm to the right, then back again.
Everyone runs code on a real robot in the next few minutes. Common mistake: turning around with turn_for instead of using 180. Leave that for crews to discover.
Turning with turn_for
robot.turn_for(RIGHT, 90)
Choose LEFT or RIGHT.
Then how many degrees to turn.
A turn changes which way is forward.
90: quarter turn
180: half turn
360: full turn
Have everyone stand and do a quarter turn, a half turn and a full turn.
Predict: Which way?
The robot turns right, then moves with 0. Which path will it take?
Hands up for A, then hands up for B, before you press Run. Answer: B. After the turn, the robot’s front points right, so 0 now means right.
Demo: Star burst
Run it. Each time round the loop the robot drives out, comes back and turns 45 degrees. Ask: what would range(4) draw? What turn would you need for 6 points? (60.)
Predict: Which shape?
Which shape will this loop draw?
Vote first. Many students expect 60 degrees for a triangle. The robot turns through the outside of each corner, and three turns of 120 make a full 360. Answer: A.
What's different about a real robot
UnitsDistances are in millimetres. 10 mm is 1 cm.
SlipWheels slip a little, so a real turn is never exactly 90 degrees.
TestRun it, measure, change one number, run it again.
The simulator is perfect and the real robot isn't. Crews should expect to adjust numbers after testing. Within a hand's width of the target counts as a pass on every challenge.
Looking up commands
Open the VEX command reference.
Choose Python.
Search with Ctrl+K, or open a category like Motion.
Read what the command does, then copy its example.
VEX AIMapi.vex.com/aim/home
VEX Airapi.vex.com/air/home
This is where every command lives, written by VEX. Show it live: open the AIM page, choose Python, press Ctrl+K and search for move_for, then point out the parameters and the example. Crews should check here before asking an instructor. Students can click both links from decks.tabbott.dev/fly.
Challenges
Write it in VEXcode.
Test it on your robot.
Show an instructor a full run to earn the coins.
Star is a bonus for crews who finish early.
Hints: decks.tabbott.dev/fly
Leave this up while crews work. Click a challenge to open its slide. Award coins on the scoreboard (press C). Solutions are hidden on each challenge slide behind Show solution: only show one to a crew that has finished it, or to the whole room once every crew is done.
Challenge: Square
1 coin
Drive a square with 40 cm sides and finish where you started.
Write every move out, one line at a time.
Eight lines: move and turn, four times. Real robots won’t stop exactly on the start; within a hand’s width is a pass. Ask crews which lines repeat; that is the next challenge.
Challenge: Loop square
1 coin
Drive the same square using a loop and a variable called side.
Change side to 600 and it should still finish where it started.
This joins variables and loops from this morning. Check by changing side: if the square grows and still closes, they’ve got it.
Challenge: Hexagon
2 coins
Drive a hexagon with 30 cm sides.
Use a loop.
Finish where you started.
The turn is 360 divided by 6 sides: 60. Crews who did the triangle prediction should spot the pattern.
Challenge: Staircase
2 coins
Climb 3 steps, each 20 cm tall and 20 cm deep.
Use a loop.
No turn_for allowed.
The trick is moving sideways with 90. If a crew is stuck after a few minutes, point back to the move_for directions slide.
Challenge: Fetch the ball
2 coins
Drive to the ball, collect it, bring it back to the start and put it down.
The ball is 60 cm straight ahead.
Use robot.kicker.place() to put it down.
Set a ball on a tape mark 60 cm in front of the start. The magnet holds the ball when the robot drives straight into it. Driving backwards with 180 keeps the ball at the front.
Challenge: Star
3 coins
Bonus: drive a five-pointed star with 50 cm lines.
Use a loop.
Hint: each turn is bigger than 90.
For fast crews only. The turn is 144 degrees: going round the star turns the robot twice, 720 ÷ 5 = 144. Let them test 140 and 150 to get close first.
Lunch
12:30–1:10
On Bowman
Robots stay at the stations. Crews finish challenges at the start of Session 3.
Day 1, Session 3
Robot Soccer and Meet the Drone
1:10–2:10
Finish your challenges
Robot soccer
Meet VEX Air
About 15 minutes for challenges, 25 for soccer, then 20 on the drone. Once every crew is done, open a challenge slide and press Show solution to go through it together.
Finish your challenges
Write it in VEXcode.
Test it on your robot.
Show an instructor a full run to earn the coins.
Star is a bonus for crews who finish early.
Hints: decks.tabbott.dev/fly
Crews finish their challenges. When every crew is done, click a challenge, press Show solution, then Step through it together.
Demo: How to score a goal
Run it: the robot drives into the ball, the magnet holds it, then the kicker fires. Try SOFT instead of HARD and watch it stop short. Kicks can be SOFT, MEDIUM or HARD.
Challenge: Robot soccer
2 coins
The goal is to the right. Collect the ball and score.
Driven goal: 1 coin, using the AIM controller.
Set the ball and goal to match the picture, or change the distances to match your field. A coded goal is worth 2 coins because it has to be planned; a driven goal is worth 1.
Meet VEX Air
DroneFlies indoors, up to 2.5 m high.
ControllerFlies the drone and starts your programs.
BatteriesMust be charged before flying.
Show each part as you go. Drones stay powered off and on the table during this slide.
How a drone flies
All four propellers speed up, so the drone rises.The back propellers speed up. The drone tips forward and flies forward.The front propellers speed up. The drone tips back.The right propellers speed up. The drone tips left.The left propellers speed up. The drone tips right.Two opposite propellers speed up, and the drone spins left.The other two speed up, and the drone spins right.
Yellow propellers are spinning faster. Click a move to see it.
Click each move. Propellers push air down, and the air pushes the drone up. Speeding up some propellers tips the drone, and it moves the way it tips. Ask a student to act as the drone and lean the way it would move.
The controller
Left stick
Up / downClimb and descend
Left / rightTurn
Right stick
Up / downForward and back
Left / rightSlide sideways
Drag the sticks to fly the drone on screen. Use the 2D and 3D buttons to switch views; 3D shows the height. Let students call out moves: go up, turn to face the door, fly forward. Check this matches the default flying mode on your controllers before the session.
Afternoon tea
2:10–2:30
Drones stay powered off. Charge batteries now for Session 4.
Day 1, Session 4
Drone Programming
2:30–[3:30]
Drone safety
Pilot’s licence quiz
First flights
Code a landing
Nobody flies until the safety slides and quiz are done. Batteries charged and the flying zone marked before the session.
Pre-flight checks
Controller and drone batteries are over 20%.
Propellers and landing feet are not damaged.
The drone is on a flat surface.
The flying zone is clear: 1.5 m all around, 1 m above.
Long hair is tied back.
From VEX’s pre-flight checklist. Pilots say every check out loud before every flight.
Flying rules
Call itSay “Taking off!” and “Landing!” out loud.
Stay backEveryone, pilot included, stays behind the safety line.
InstructorAn instructor stands next to every pilot, ready to stop the drone.
Hands offNever touch a drone until its propellers have stopped.
StopIf anything goes wrong, stop the drone straight away.
Show where the stop controls are and practise with the drone off. To stop a running program mid-flight: press Takeoff, then Land. Propeller Lock keeps a drone grounded until its power button is pressed.
Pilot’s licence quiz
What do you say out loud before take-off? Taking off!
Where does the pilot stand? Behind the safety line
What is the lowest battery you can fly with? Over 20%
How much clear space does the drone need around it? 1.5 metres
When can you pick up the drone? When the propellers have stopped
A flying drone heads towards you. What do you do? Step back and let the instructor stop it
Which stick makes the drone climb? Left stick, pushed up
How does the drone fly forward? The back propellers speed up
Where should the drone take off from? A flat surface
How do you stop a program mid-flight? Press Takeoff, then Land
Crews answer each question together by holding up 1, 2 or 3 fingers, then press Reveal answer. A crew that gets all ten right earns a coin. Anyone who missed a question talks it through with an instructor before they fly; every pilot needs their licence.
The drone dashboard
HeadingWhich way the drone faces.
DownwardHow high it is above the floor.
X, Y, ZWhere it is, in millimetres.
The controller can show this dashboard during flight. Pilots use Downward on their first flight to hover at the right height.
Your first flight
Take off, hover at 1 metre, then land.
Hold Downward between 900 and 1100 mm for 5 seconds.
Land safely to earn a coin.
One drone per flying zone. While one pilot flies, the rest of the crew does the simulator mission on the next slide. Award the coin on the scoreboard (press C).
Simulator: Yellow rings
Plug a controller into a laptop.
Open VEXcode AIR and choose the Simulator tab.
Click the drone’s power button to unlock it.
Fly through both yellow rings, then land on the platform.
The VEX AIR Flight Simulator needs a real controller connected by USB; use one from a drone that isn’t flying. It counts rings flown through and collisions. Reset puts the drone back on the platform.
Directions work like the robot: 0 is forward, 90 is right, 180 is back, 270 is left.
Robot or drone?
VEX AIM robot
robot.move_for(500, 0)
distance, then direction
VEX Air drone
drone.move_for(0, 500)
direction, then distance
Same move. The numbers swap places.
This is the most common drone bug of the day. Ask: what would drone.move_for(500, 0) try to do? It asks for direction 500 and distance 0, so the drone won’t fly forward.
Running drone code
Plug the controller into the laptop.
In VEXcode AIR, press Download.
Press Run.
Press and hold Takeoff on the controller.
To stop mid-flight: press Takeoff, then Land.
From VEX’s instructions for downloading and running a project. The Controller icon in VEXcode AIR turns green when it is connected.
Demo: Take off and land
The drone gets bigger on screen as it climbs. Step through it, then delete the last line and Run to show the warning when a program doesn’t land.
Predict: How high?
How high does the drone end up: 1.5 m, 2 m or 2.5 m?
Vote for 1.5 m, 2 m or 2.5 m, then Run in 3D and read the height. Answer: 2 m. It starts at 0.5 m and climbs 0.5 m three times.
Challenge: Land on target
1 coin
Take off, fly to the target and land on it.
The target is 1 m ahead and 50 cm to the right.
Your landing must touch the target.
Lay a target 1 m ahead and 50 cm right of the take-off spot. Crews test in this simulator first, then fly it for real. Real drones drift, so real landings land further out.
Landing showdown
Each crew flies its land-on-target program once.
Measure from the centre of the target to the centre of the drone.
The closest landing wins 2 coins.
Run the crews one after another while everyone watches from behind the line. Read each distance out loud. Award the coins on the scoreboard (press C).
Day 1 complete
Tomorrow
Flying shapes
Hoop course
Ping pong push
Final mission
The standings come straight from the scoreboard. Congratulate the leading crew, then preview tomorrow.