MINDSTORMS EV3 coreset

Maak een zelfrijdende auto

Ontwerp een autonoom voertuig dat door de gebruiker gedefinieerde rijcommando's volgt.

120+ min.
Intermediair
Derde tot en met de zesde klas
roaming-vehicles-gps

Lesplan

Voorbereiden
- Lees deze informatie voor jou als docent door.
- Als je denkt dat het nodig is, bereid dan een les voor met behulp van het ‘Aan de slag’-materiaal in de EV3 Labsoftware of EV3-programmeerapp. Daardoor raken je leerlingen vertrouwd met LEGO® MINDSTORMS® Education EV3.

Activeren (30 min.)
- Maak gebruik van de ideeën in het deel Start een gesprek hieronder om met je leerlingen een gesprek over dit project te voeren.
- Leg het project uit.
- Verdeel de klas in teams van twee leerlingen.
- Laat de leerlingen enige tijd brainstormen.

Onderzoeken (30 min.)
- Laat de leerlingen meerdere prototypes maken.
- Moedig ze aan om zowel het bouwen als het programmeren uit te proberen.
- Laat elk duo twee oplossingen bouwen en testen.

Uitleggen (60 min.)
- Vraag de leerlingen om hun oplossingen te testen en de beste te kiezen.
- Zorg ervoor dat ze hun eigen testtabellen kunnen maken.
- Geef de teams wat tijd om hun project af te ronden en om gegevens te verzamelen voor een verslag over hun werk.

Uitbreiden (60 min.)
- Geef de leerlingen wat tijd om hun definitieve verslag te maken.
- Organiseer een bespreekmoment waarin elk team zijn resultaten presenteert.

Evalueren
- Geef elke leerling feedback over zijn of haar prestaties.
- Je kunt gebruikmaken van de meegeleverde suggestie voor evaluatierubrieken om dit eenvoudiger te maken.

Start een gesprek

Er worden tegenwoordig veel soorten navigatiesystemen gebruikt in auto's. Sommige van die systemen nemen nu de verantwoordelijkheid van de chauffeurs over om passagiers veilig naar hun bestemming te brengen. Voordat autonome auto‘s kunnen achterhalen wat de beste route is tussen de punten A en B, moeten ze in staat zijn een serie bewegingen uit te voeren op basis van input van de gebruiker.

roaming-vehicles-gps

Moedig een actief brainstormproces aan.
Vraag de leerlingen na te denken over deze vragen:

  • Wat zijn zelfrijdende auto's en hoe werken ze?
  • Hoe komen zelfrijdende auto‘s aan hun richtingaanwijzingen?
  • Welke bewegingen moet de auto uitvoeren om door een aantal straten te rijden op een raster van noord, zuid, oost en west?

Geef de leerlingen wat tijd om deze vragen te beantwoorden.

Moedig de leerlingen aan om hun eerste ideeën op te schrijven en uit te leggen waarom ze kiezen voor de oplossing die ze voor hun eerste prototype gaan gebruiken. Vraag ze om te beschrijven hoe ze hun ideeën tijdens het project gaan evalueren. Daardoor hebben ze achteraf specifieke informatie die ze kunnen gebruiken voor het evalueren van hun oplossing en om te kunnen beslissen of deze al dan niet efficiënt was.

Pseudocode is een geweldig hulpmiddel waarmee leerlingen hun gedachten op een rijtje kunnen zetten voordat ze beginnen te programmeren.

Bouwtips

Begin met het bouwen van het voertuig. De leerlingen kunnen een van de voorgestelde LEGO® MINDSTORMS® EV3 Rijbasismodellen gebruiken of zelf een model ontwerpen. Zorg ervoor dat er geen belemmering is om bij de knoppen bovenop de EV3-steen te komen. Die worden hier gebruikt om de richting mee te bepalen.

ev3-robot-driving-base

Programmeertips

Leg de leerlingen uit dat ze hun robot zo gaan programmeren dat die beweegt volgens een opgenomen set instructies die hij ontvangt via de knoppen op de EV3-steen. Gebruik deze parameters:

  • Knop Omhoog geraakt, de robot gaat 30 cm. vooruit.
  • Knop Omlaag geraakt, de robot gaat 30 cm. achteruit.
    *Linkerknop geraakt, de robot draait 90 graden naar links
  • Rechterknop geraakt, de robot draait 90 graden naar rechts

Eén actie opnemen om de robot te laten bewegen

coding-08-01

Uitleg van het programma

  1. Start het programma.
  2. Maak een blok Variabele met de naam ‘Rijden’.
  3. Wacht tot een knop op de steen wordt geraakt.
  4. Speel geluid ‘Click 2’ af.
  5. Neem de opgenomen numerieke waarde op van de ingedrukte knop in de variabele "Rijden."
  6. Wacht 2 seconden.
  7. Speel geluid ‘G02’ af.
  8. Lees het nummer dat is opgeslagen in de variabele "Rijden" en stuur de waarde naar een blok Schakelen.
  9. Numerieke schakelaar:

    a. Als Rijden = 0 (standaardvoorwaarde), niets doen.
    b. Als Rijden = 1, bocht draai de robot naar links.
    c. Als Rijden = 3, bocht draai de robot naar rechts.
    d. Als Rijden = 4, beweeg de robot recht vooruit gedurende 2 rotaties van de wielen.
    e. Als Rijden = 5, beweeg de robot recht achteruit gedurende 2 rotaties van de wielen.

  10. Speel geluid ‘Game Over 2‘ af.

Meerdere acties opnemen om de robot te laten bewegen

Het blok Reeks Bewerkingen wordt gebruikt om een serie gegevens op te slaan. Het wordt vaak beschreven als een tabel bestaande uit een enkele rij met meerdere kolommen.

coding-08-02

Uitleg van de oplossing

  1. Start het programma.
  2. Maak een blok Variabele met de naam ‘Rijden’. Kies de optie ‘Schrijven > Numerieke reeks’.
  3. Maak een Herhaling. De voorbeeldprogrammering is ingesteld op 5 keer uitvoeren.
  4. Wacht tot een knop op de steen wordt geraakt.
  5. Speel geluid ‘Click’ af.
  6. Lees het Variabele blok ‘Rijden’. Kies de optie ‘Lezen > Numerieke reeks’.
  7. Gebruik het blok Reeks bewerkingen Kies 'Schrijven bij index > numeriek '.

a. Voeg het variabele blok ‘Rijden’ in.
b. Voeg de herhalingsindex uit het begin van de herhaling in de indexlocatie in op het blok Reeks Bewerkingen.
c. Voeg de waarde van het blok Wachten op EV3-knop in de waardelocatie in op het blok Reeks Bewerkingen.

  1. Schrijf de uitvoer van het blok Reeks bewerkingen in het Variabele blok ‘Rijden’.
  2. Wacht 2 seconden.
  3. Speel geluid ‘Go’ af.
  4. Maak een tweede Herhaling. De voorbeeldprogrammering is ingesteld op 5 keer uitvoeren, evenveel als de eerste Herhaling.
  5. Lees het Variabele blok ‘Rijden’. Kies de optie ‘Lezen > Numerieke reeks’.
  6. Gebruik het blok Reeks bewerkingen Kies de optie ‘Lezen bij Index > Numeriek’.
  7. Numerieke schakelaar:

a. Als Rijden = 0 (standaardvoorwaarde), niets doen.
b. Als Rijden = 1, bocht draai de robot naar links.
c. Als Rijden = 3, bocht draai de robot naar rechts.
d. Als Rijden = 4, beweeg de robot recht vooruit gedurende 2 rotaties van de wielen.
e. Als Rijden = 5, beweeg de robot recht achteruit gedurende 2 rotaties van de wielen.

  1. Speel geluid ‘Game Over 2‘ af.
Download voorbeeldprogramma‘s 32 KB, EV3 Labsoftware vereist

Tabbladen ‘1’ en ‘2’

EV3 MicroPython programmeeroplossingen

Eén actie opnemen om de robot te laten bewegen

#!/usr/bin/env pybricks-micropython

from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port, Stop, Button, SoundFile
from pybricks.tools import wait
from pybricks.robotics import DriveBase

# The Left, Right, Up, and Down Buttons are used to command the robot.
COMMAND_BUTTONS = (Button.LEFT, Button.RIGHT, Button.UP, Button.DOWN)

# Configure 2 motors with default settings on Ports B and C.  These
# will be the left and right motors of the Driving Base.
left_motor = Motor(Port.B)
right_motor = Motor(Port.C)

# The wheel diameter of the Robot Educator Driving Base is 56 mm.
wheel_diameter = 56

# The axle track is the distance between the centers of each of the
# wheels.  This is 118 mm for the Robot Educator Driving Base.
axle_track = 118

# The Driving Base is comprised of 2 motors.  There is a wheel on each
# motor.  The wheel diameter and axle track values are used to make the
# motors move at the correct speed when you give a drive command.
robot = DriveBase(left_motor, right_motor, wheel_diameter, axle_track)

# Wait until one of the command buttons is pressed.
while not any(b in brick.buttons() for b in COMMAND_BUTTONS):
    wait(10)

# Store the pressed button as the drive command.
drive_command = brick.buttons()[0]
brick.sound.file(SoundFile.CLICK)

# Wait 2 seconds and then play a sound to indicate that the robot is
# about to drive.
wait(2000)
brick.sound.file(SoundFile.GO)
wait(1000)

# Now drive the robot using the drive command.  Depending on which
# button was pressed, drive in a different way.

# The robot turns 90 degrees to the left.
if drive_command == Button.LEFT:
    robot.drive_time(100, -90, 1000) 

# The robot turns 90 degrees to the right.
elif drive_command == Button.RIGHT:
    robot.drive_time(100, 90, 1000)

# The robot drives straight forward 30 cm.
elif drive_command == Button.UP:
    robot.drive_time(100, 0, 3000) 
    
# The robot drives straight backward 30 cm.
elif drive_command == Button.DOWN:
    robot.drive_time(-100, 0, 3000)

# Play a sound to indicate that it is finished.
brick.sound.file(SoundFile.GAME_OVER)
wait(2000)

Meerdere acties opnemen om de robot te laten bewegen

#!/usr/bin/env pybricks-micropython

from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port, Stop, Button, SoundFile
from pybricks.tools import wait
from pybricks.robotics import DriveBase

# The Left, Right, Up, and Down Buttons are used to command the robot.
COMMAND_BUTTONS = (Button.LEFT, Button.RIGHT, Button.UP, Button.DOWN)

# Configure 2 motors with default settings on Ports B and C.  These
# will be the left and right motors of the Driving Base.
left_motor = Motor(Port.B)
right_motor = Motor(Port.C)

# The wheel diameter of the Robot Educator Driving Base is 56 mm.
wheel_diameter = 56

# The axle track is the distance between the centers of each of the
# wheels.  This is 118 mm for the Robot Educator Driving Base.
axle_track = 118

# The Driving Base is comprised of 2 motors.  There is a wheel on each
# motor.  The wheel diameter and axle track values are used to make the
# motors move at the correct speed when you give a drive command.
robot = DriveBase(left_motor, right_motor, wheel_diameter, axle_track)

# Pressing a button stores the command in a list.  The list is empty to
# start.  It will grow as commands are added to it.
drive_command_list = []

# This loop records the commands in the list.  It repeats until 5
# buttons have been pressed.  This is done by repeating the loop while
# the list contains less than 5 commands. 
while len(drive_command_list) < 5:
    # Wait until one of the command buttons is pressed.
    while not any(b in brick.buttons() for b in COMMAND_BUTTONS):
        wait(10)
    
    # Add the pressed button to the command list.
    drive_command_list.append(brick.buttons()[0])
    brick.sound.file(SoundFile.CLICK)

    # To avoid registering the same command again, wait until the Brick
    # Button is released before continuing.
    while any(brick.buttons()):
        wait(10)

# Wait 2 seconds and then play a sound to indicate that the robot is
# about to drive.
wait(2000)
brick.sound.file(SoundFile.GO)
wait(1000)

# Now drive the robot using the list of stored commands.  This is done
# by going over each command in the list in a loop.
for drive_command in drive_command_list:
    # The robot turns 90 degrees to the left.
    if drive_command == Button.LEFT:
        robot.drive_time(100, -90, 1000) 

    # The robot turns 90 degrees to the right.
    elif drive_command == Button.RIGHT:
        robot.drive_time(100, 90, 1000)

    # The robot drives straight forward 30 cm.
    elif drive_command == Button.UP:
        robot.drive_time(100, 0, 3000) 
        
    # The robot drives straight backward 30 cm.
    elif drive_command == Button.DOWN:
        robot.drive_time(-100, 0, 3000)

# Play a sound to indicate that it is finished.
brick.sound.file(SoundFile.GAME_OVER)
wait(2000)

Uitbreidingen

Taaluitbreiding

Optie 1
Tekst-gebaseerde programmering gebruiken:

  • Laat de leerlingen op tekst gebaseerde programmeeroplossingen onderzoeken, zodat ze verschillende programmeertalen kunnen vergelijken.

Optie 2
In deze les hebben je leerlingen een zelfrijdende auto gemaakt die in een bepaalde volgorde instructies opvolgt. Wat zou er gebeuren als zelfrijdende auto’s in de toekomst zo geprogrammeerd kunnen worden dat ze de input van chauffeurs negeren?
Laat de leerlingen voor de ontwikkeling van hun taalvaardigheid:

  • een betoog schrijven waarin ze het standpunt onderbouwen dat zelfrijdende auto’s niet in staat zouden moeten zijn om de input van chauffeurs te negeren en zelf hun snelheid te bepalen
  • specifiek bewijs aandragen dat de validiteit van dit standpunt onderbouwt en praktische voorbeelden aandragen om aan te tonen waarom dit voor de chauffeur nadelig kan zijn
  • het tegenovergestelde standpunt innemen en betogen dat autonome snelheidsbesturing door zelfrijdende auto’s een effectieve strategie kan zijn om de veiligheid van de chauffeur en de verkeersveiligheid te vergroten

Rekenuitbreiding

In deze les hebben je leerlingen stapsgewijze instructies voor een zelfrijdende auto gemaakt. Zelfrijdende auto’s kunnen door middel van sensoren en machine learning instructies opvolgen en de uitvoering van deze instructies aanpassen op basis van nieuwe omstandigheden.
Geef de leerlingen voor de ontwikkeling van hun rekenvaardigheid en inzicht in de toepassingen van machine learning in zelfrijdende auto’s een ‘budget’ voor het aantal keer dat ze mogen afslaan. Laat ze vervolgens:

  • een rooster maken dat de straten in een stad moet voorstellen (bijvoorbeeld: vijf straten die van oost naar west lopen en vijf straten die van noord naar zuid lopen)
  • een begin- en eindpunt bepalen · drie kruisingen tussen het begin- en eindpunt analyseren, waarbij ze rekening houden met het feit dat de route met de minste bochten de beste route is
  • de waarschijnlijkheid bepalen dat hun voertuig ‘binnen het budget’ en in een willekeurige richting op de eindbestemming aankomt

Evaluatiemogelijkheden

Observatiechecklist docent
Maak naar eigen inzicht een schaalverdeling, bijvoorbeeld:

  1. Gedeeltelijk uitgevoerd
  2. Volledig uitgevoerd
  3. Boven verwachting uitgevoerd

Gebruik de volgende criteria om de ontwikkeling van je leerlingen te beoordelen:

  • Leerlingen kunnen de belangrijkste onderdelen van een probleem identificeren.
  • Leerlingen kunnen zelfstandig een werkende en creatieve oplossing ontwikkelen.
  • Leerlingen kunnen hun ideeën duidelijk communiceren.

Zelfevaluatie
Geef de leerlingen de tijd om over hun oplossingen na te denken als ze eenmaal een aantal gegevens over de prestaties van hun oplossingen hebben verzameld. Help ze daarbij door vragen te stellen als:

  • Voldoet jullie oplossing aan de criteria uit het Ontwerpplan?
  • Is het mogelijk de robot nauwkeuriger te laten bewegen?
  • Welke oplossingen hebben anderen gebruikt?

Vraag de leerlingen om te brainstormen en twee manieren op te schrijven waarmee ze hun oplossingen zouden kunnen verbeteren.

Feedback van elkaar
Laat leerlingen elkaars werk evalueren en maak elk team verantwoordelijk voor de evaluatie van zowel hun eigen project als het project van anderen. Dit evaluatieproces kan de leerlingen helpen bij het ontwikkelen van vaardigheden voor het geven van opbouwende kritiek en bij het verbeteren van hun analysevaardigheden en het gebruik van objectieve gegevens ter ondersteuning van een argument.

Leerlingen die deze les leuk vonden, zijn misschien geïnteresseerd in een van de studierichtingen:

  • Business and Finance (ondernemerschap)
  • Productie en techniek (pre-engineering)

Ondersteuning voor de leraar

De leerlingen:
passen het ontwerpproces toe om een realistisch probleem op te lossen

HAVO/VWO Natuurkunde/NLT

A6.6 De kandidaat kan in contexten op basis van een gesteld probleem een technisch ontwerp voorbereiden, uitvoeren, testen en evalueren en daarbij relevante begrippen, theorie en vaardigheden en valide en consistente redeneringen hanteren.

VMBO NASK1

NASK1/K/3: natuurkundige apparatuur gebruiken, daarmee experimenten uitvoeren en de resultaten interpreteren en

  • de computer gebruiken om met meetprogramma’s experimenten uit te voeren en te interpreteren, om met applets en simulaties onderzoek te doen en om natuurkundige informatie te selecteren en te verwerken.
  • een onderzoek doen en een ontwerpproces uitvoeren en evalueren, daarbij ook rekening houdend met de veiligheid.

Materiaal voor de leerlingen

Leerlingenwerkblad

Download to view and share the student worksheet.

LEGO, the LEGO logo, the Minifigure, DUPLO, the SPIKE logo, MINDSTORMS and the MINDSTORMS logo are trademarks and/or copyrights of the LEGO Group. ©2024 The LEGO Group. All rights reserved. Use of this site signifies your agreement to the terms of use.