diff --git a/docs/projects/timing-gates.md b/docs/projects/timing-gates.md new file mode 100644 index 00000000..1ae0cca2 --- /dev/null +++ b/docs/projects/timing-gates.md @@ -0,0 +1,217 @@ +# Timing gates + +In ths project, we will build a timing gate, a system that can measure the speed of a car. + +The timing gate is made of two sensors that can detect the moving car. +When the car goes through the gate, it triggers each sensor and the micro:bit +records the times. The speed is then computed by dividing the distance between the sensors +by the time between each sensor trigger. + +### ~hint + +This lesson explains the principles of timing gates using household materials. To build high performance gates, +you will need better sensors such as [Hall Effect sensors](https://en.wikipedia.org/wiki/Hall_effect_sensor). + +### ~ + +## Materials + +* Carboard +* Aluminum fail +* Double-side tape (carpet tape) +* 4 crocodile clips +* A micro:bit board and USB cable + +![](/static/mb/projects/timing-gates/materials.jpg "Materials") + +## blocks + +```cards +basic.showLeds(` + . . . . . + . . . . . + . . # . . + . . . . . + . . . . . + `) +input.onPinPressed(TouchPin.P0, () => {}) +let t = 0 +input.runningTime() +t - 1 +control.eventTimestamp(); +basic.showNumber(0) +``` + +## Building the gate + +The sensor is made by tapping two strips of fail on the cardboard as close as possible. + +Add two strips of double-sided tape on the cardboard. Remove the protective film. + +![](/static/mb/projects/timing-gates/tape.jpg "Double sided tape") + +Lay the Aluminum foil on the double-sided tape. Press firmly on the tape to get a good bonding of the foil. + +![](/static/mb/projects/timing-gates/stickfoil.jpg "Foil sensor") + +Strip the out foil around and between the tape strips. Make sure both foil strips don't touch each other. + +![](/static/mb/projects/timing-gates/spreadfoil.jpg "Foil taped") + +Connect a crocodile strip to each foil strip. + +![](/static/mb/projects/timing-gates/connectsensor.jpg "Connecting sensor") + +Connect the crocodile plugs to the ``GND`` and ``P0`` pins on the micro:bit. + +![](/static/mb/projects/timing-gates/connectcrocs.jpg "Connecting the micro:bit") + +The gate is ready to use! Your circuit should look like the picture below: + +![](/static/mb/projects/timing-gates/sensordone.jpg "A single gate") + + +## Detecting the car with code + +The micro:bit provides an event [on pin pressed](/reference/pins/on-pin-pressed) +that is raised when a circuit between ``GND`` and a pin is detected. The circuit conductor could be a wire or even your body! +We will attach a foil to the bottom of the car. When it passes over the gate, it connect both foil strips, close the circuit and trigger the event. + +Open the [code editor](/) and start a new project and add the following blocks. Notice that we are using pin ``P0`` here. + +```blocks +basic.showLeds(` + . . . . . + . . . . . + . . # . . + . . . . . + . . . . . + `) +input.onPinPressed(TouchPin.P0, () => { + basic.showLeds(` + # . . . . + # . . . . + # . . . . + # . . . . + # . . . . + `) +}) +``` + +Testing the code with our finger, we see a LED column turn on when pressing both strips. + +https://youtu.be/zi_-NAmdDpY + +## Upgrading the car + +In this lesson, we picked a random toy car and tapped foil to the bottom. +As the car goes through the gate, it will connect both sides of the gate and trigger it. Make sure to add enough foil to get a good connection on the ground. + +![](/static/mb/projects/timing-gates/carfoil.jpg "Attaching foil to the car") + +By moving the car (slowly) through the gate, you will see that it triggers the ``on pin pressed`` event. + +https://youtu.be/M3DIUvDPlIA + +### ~hint + +It does not work always! Sometimes the foil does not touch long enough both strip to be detected. This is due to the poor quality of our sensor. +To fix this, you would have to consider using better sensors based on IR or Hall effect. + +### ~ + +## Adding the second gate + +Repeat the same process with tape and foil to build the first gate. + +![](/static/mb/projects/timing-gates/sensor2.jpg "Double foil sensors") + +Connect the crocodile plugs to the ``GND`` and ``P1`` pins on the micro:bit. + +![](/static/mb/projects/timing-gates/sensormicrobit2.jpg "Sensor and microbit") + +## Detecting the second gate + +Since the second gate is connected to pin ``P1``, we add a second [on pin pressed](/reference/pins/on-pin-pressed) event +that display 2 columns of LEDs. + +```blocks +basic.showLeds(` + . . . . . + . . . . . + . . # . . + . . . . . + . . . . . + `) +input.onPinPressed(TouchPin.P0, () => { + basic.showLeds(` + # . . . . + # . . . . + # . . . . + # . . . . + # . . . . + `) +}) +input.onPinPressed(TouchPin.P1, () => { + basic.showLeds(` + # . . . # + # . . . # + # . . . # + # . . . # + # . . . # + `) +}) +``` +Strolling the car over both gates, you can see how the first gate triggers then the second. + +https://youtu.be/N4bWQcu6yWs + +## Computing time + +The micro:bit has a clock that measures time precisely. It measures how many seconds the micro:bit has been on. +We will record the time where each gate is tripped in variables ``t0`` and ``t1``. +We take the different between ``t1`` and ``t0`` to compute the duration between the gates. + +```blocks +let t0 = 0; +let t1 = 0; +basic.showLeds(` + . . . . . + . . . . . + . . # . . + . . . . . + . . . . . + `) +input.onPinPressed(TouchPin.P0, () => { + t0 = control.eventTimestamp(); + basic.showLeds(` + # . . . . + # . . . . + # . . . . + # . . . . + # . . . . + `) +}) +input.onPinPressed(TouchPin.P1, () => { + t1 = control.eventTimestamp(); + basic.showLeds(` + # . . . # + # . . . # + # . . . # + # . . . # + # . . . # + `) + let d = t1 - t0 + basic.showNumber(d) +}) +``` + +https://youtu.be/piyym_ux1EM + +## Computing velocity + +Measure the distance between the gates and apply Newton's laws to compute the velocity of the car. + + v = d / t + +We'll let you try to code this one on your own! \ No newline at end of file diff --git a/docs/static/mb/projects/timing-gates/carfoil.jpg b/docs/static/mb/projects/timing-gates/carfoil.jpg new file mode 100644 index 00000000..6365abfd Binary files /dev/null and b/docs/static/mb/projects/timing-gates/carfoil.jpg differ diff --git a/docs/static/mb/projects/timing-gates/connectcrocs.jpg b/docs/static/mb/projects/timing-gates/connectcrocs.jpg new file mode 100644 index 00000000..69eec45d Binary files /dev/null and b/docs/static/mb/projects/timing-gates/connectcrocs.jpg differ diff --git a/docs/static/mb/projects/timing-gates/connectsensor.jpg b/docs/static/mb/projects/timing-gates/connectsensor.jpg new file mode 100644 index 00000000..637a0b0b Binary files /dev/null and b/docs/static/mb/projects/timing-gates/connectsensor.jpg differ diff --git a/docs/static/mb/projects/timing-gates/materials.jpg b/docs/static/mb/projects/timing-gates/materials.jpg new file mode 100644 index 00000000..b2c22a27 Binary files /dev/null and b/docs/static/mb/projects/timing-gates/materials.jpg differ diff --git a/docs/static/mb/projects/timing-gates/sensor2.jpg b/docs/static/mb/projects/timing-gates/sensor2.jpg new file mode 100644 index 00000000..2a27a5ef Binary files /dev/null and b/docs/static/mb/projects/timing-gates/sensor2.jpg differ diff --git a/docs/static/mb/projects/timing-gates/sensordone.jpg b/docs/static/mb/projects/timing-gates/sensordone.jpg new file mode 100644 index 00000000..519dc0b2 Binary files /dev/null and b/docs/static/mb/projects/timing-gates/sensordone.jpg differ diff --git a/docs/static/mb/projects/timing-gates/sensormicrobit2.jpg b/docs/static/mb/projects/timing-gates/sensormicrobit2.jpg new file mode 100644 index 00000000..d95c33fc Binary files /dev/null and b/docs/static/mb/projects/timing-gates/sensormicrobit2.jpg differ diff --git a/docs/static/mb/projects/timing-gates/spreadfoil.jpg b/docs/static/mb/projects/timing-gates/spreadfoil.jpg new file mode 100644 index 00000000..2e4042c3 Binary files /dev/null and b/docs/static/mb/projects/timing-gates/spreadfoil.jpg differ diff --git a/docs/static/mb/projects/timing-gates/stickfoil.jpg b/docs/static/mb/projects/timing-gates/stickfoil.jpg new file mode 100644 index 00000000..001eb38e Binary files /dev/null and b/docs/static/mb/projects/timing-gates/stickfoil.jpg differ diff --git a/docs/static/mb/projects/timing-gates/tape.jpg b/docs/static/mb/projects/timing-gates/tape.jpg new file mode 100644 index 00000000..ea5449af Binary files /dev/null and b/docs/static/mb/projects/timing-gates/tape.jpg differ