MINDSTORMS EV3-basissæt

Lav en førerløs bil

Design et selvkørende køretøj, der følger brugerdefinerede kørekommandoer.

120+ min.
Let øvet
Ungdomsuddannelser
roaming-vehicles-gps

Lektionsplan

Forbered dig
- Læs denne undervisningsvejledning igennem.
- Hvis du føler, der er behov for det, kan du planlægge en lektion ved hjælp af Kom godt i gang-materialet i EV3 Lab-softwaren eller Programmerings-appen. Det vil hjælpe eleverne med at blive fortrolige med LEGO® MINDSTORMS® Education EV3.

Inddrag eleverne (30 min.)
- Brug idéerne i afsnittet Start en samtale nedenfor til at inddrage eleverne i en samtale om emnerne i dette projekt.
- Forklar projektet.
- Opdel klassen i hold a to elever.
- Giv eleverne tid til at brainstorme.

Undersøg (30 min.)
- Få eleverne til at lave flere forskellige prototyper.
- Lad dem udforske både byggeri og programmering.
- Få hvert elevpar til at bygge og teste to løsninger.

Forklar (60 min.)
- Bed eleverne om at teste deres løsninger og vælge den bedste.
- Sørg for, at de kan lave deres egne testskemaer.
- Giv holdene tid nok til at færdiggøre deres projekter og indsamle materiale til at dokumentere deres arbejde.

Udbyg (60 min.)
- Giv eleverne tid til at udarbejde deres endelige rapporter.
- Lad eleverne fremlægge deres resultater, så de kan dele deres erfaringer.

Evaluer
- Giv feedback om hver elevs præstation.
- For at forenkle processen kan du bruge det medfølgende evalueringsskema.

Start en samtale

I dag bruges der mange navigationssystemer i biler. Nogle af disse systemer påtager sig nu førerens ansvar for at køre passagererne sikkert til deres destinationer. Inden de selvkørende biler beregner den bedste rute mellem punkt A og B, skal de kunne udføre en række bevægelser baseret på brugerinput.

roaming-vehicles-gps

Få eleverne til at deltage aktivt i en brainstorming.
Bed eleverne om at overveje disse spørgsmål:

  • Hvad er selvkørende biler, og hvordan fungerer de?
  • Hvor får selvkørende biler deres anvisninger fra?
  • Hvilke bevægelser skal bilen udføre for at kunne bevæge sig gennem en række gader i byens nordlige, sydlige, østlige og vestlige vejnet?

Giv eleverne tid til at besvare disse spørgsmål:

Få eleverne til at dokumentere deres indledende idéer og forklare, hvorfor de valgte netop den løsning, de vil bruge til deres første prototype. Bed dem om at beskrive, hvordan de vil evaluere deres idéer i løbet af projektet. På den måde har de specifikke oplysninger til rådighed, som de kan bruge til at evaluere deres løsning og afgøre, hvorvidt den er effektiv.

Pseudokode er et fantastisk værktøj til at hjælpe eleverne med at organisere deres tanker, før de begynder at programmere.

Byggetips

Start med at bygge et køretøj. Eleverne kan bruge et hvilket som helst af de foreslåede LEGO MINDSTORMS EV3-chassiser eller designe deres eget. Sørg for, at der er fri adgang til knapperne oven på EV3-klodsen. De bruges til at styre retningen i denne aktivitet.

ev3-robot-driving-base

Programmeringstips

Forklar eleverne, at de skal programmere deres robot til at bevæge sig efter en registreret række instruktioner, som den får via knapperne på EV3-klodsen. Brug disse parametre:

  • Når knappen Op stødes, bevæger robotten sig 30 cm fremad
  • Når knappen Ned stødes, bevæger robotten sig 30 cm bagud
  • Når knappen Venstre stødes, drejer robotten 90 grader til venstre
  • Når knappen Højre stødes, drejer robotten 90 grader til højre

Registrering af én handling for at få robotten til at bevæge sig

coding-08-01

Forklaring af programmet

  1. Start programmet.

  2. Lav en Variabel-blok, der kaldes "Kør".

  3. Vent på, at en betjeningsknap stødes.

  4. Afspil lyden "Click 2".

  5. Registrer den numeriske værdi for den knap, der er trykket ind, i variablen "Kør".

  6. Vent 2 sekunder.

  7. Afspil lyden "G02".

  8. Aflæs det tal, der er lagret i variablen "Kør", og send værdien til en forgrening.

  9. Numerisk forgrening:

    a. Hvis Kør = 0 (standardvalg): Gør intet.
    b. Hvis Kør = 1: Drej robotten i en bue til venstre.
    c. Hvis Kør = 3: Drej robotten i en bue til højre.
    d. Hvis Kør = 4: Bevæg robotten 2 hjulrotationer fremad.
    e. Hvis Kør = 5: Bevæg robotten 2 hjulrotationer bagud.

  10. Afspil lyden "Game Over 2".

Registrering af flere handlinger for at få robotten til at bevæge sig
Arrayhandlinger-blokken bruges til at lagre en datasekvens. Den beskrives ofte som en tabel, der består af en enkelt række med flere kolonner.

coding-08-02

Forklaring af løsningen

  1. Start programmet.

  2. Lav en Variabel-blok, der kaldes "Kør". Vælg indstillingen "Skriv numerisk array".

  3. Lav en løkke. Kodeeksemplet er indstillet til at køre 5 gange.

  4. Vent på, at en betjeningsknap stødes.

  5. Afspil lyden "Click".

  6. Aflæs Variabel-blokken "Kør". Vælg indstillingen "Aflæs numerisk array".

  7. Brug Arrayhandlinger-blokken. Vælg "Skriv ved indeks – numerisk".

    a. Tilslut Variabel-blokken "Kør".
    b. Tilslut løkkeindekset fra starten af løkken til indeksplaceringen på Arrayhandlinger-blokken.
    c. Tilslut værdien fra Vent på EV3 knap-blokken til værdiplaceringen på Arrayhandlinger-blokken.

  8. Skriv outputtet fra Arrayhandlinger-blokken i Variabel-blokken"Kør".

  9. Vent 2 sekunder.

  10. Afspil lyden "Go".

  11. Lav en anden løkke. Kodeeksemplet er indstillet til at køre 5 gange – det samme antal gange som den første løkke.

  12. Aflæs Variabel-blokken "Kør". Vælg indstillingen "Aflæs numerisk array".

  13. Brug Arrayhandlinger-blokken. Vælg indstillingen "Læs fra indeks – numerisk".

  14. Numerisk forgrening:

    a. Hvis Kør = 0 (standardvalg): Gør intet.
    b. Hvis Kør = 1: Drej robotten i en bue til venstre.
    c. Hvis Kør = 3: Drej robotten i en bue til højre.
    d. Hvis Kør = 4: Bevæg robotten 2 hjulrotationer fremad.
    e. Hvis Kør = 5: Bevæg robotten 2 hjulrotationer bagud.

  15. Afspil lyden "Game Over 2".

Download programeksempler 32 kB, kræver EV3 Lab-software

Fane "1" og "2"

EV3 MicroPython programløsninger

Registrering af én handling for at få robotten til at bevæge sig

#!/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)

Registrering af flere handlinger for at få robotten til at bevæge sig

#!/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)

Idéer til videre arbejde

Idéer til videre arbejde – faglig kommunikation

Mulighed 1
Brug af tekstbaseret programmering:

  • Bed eleverne om at udforske tekstbaserede programmeringsløsninger, så de kan sammenligne forskellige programmeringssprog.

Mulighed 2
I denne lektion lavede eleverne en førerløs bil, der fungerede i henhold til instruktionerne i et array. Hvad nu, hvis fremtidens førerløse biler kunne programmeres til at tilsidesætte input fra deres menneskelige førere?
For at styrke elevernes færdigheder i faglig kommunikation kan de:

  • Skrive et argument, der støtter påstanden om, at førerløse biler ikke bør være i stand til selv at styre deres hastighed på trods af passagerinput.
  • Medtage specifik dokumentation for at understøtte validiteten af denne påstand med henvisning til eksempler på situationer, hvor passageren kan havne i en ugunstig situation.
  • Sørge for at overveje modargumentet om, at førerløse bilers selvstændige styring af hastigheden kan være en effektiv strategi for øget fører- eller trafiksikkerhed.

Idéer til videre arbejde – matematik

I denne lektion lavede eleverne en sving-for-sving-sekvens af instruktioner til en førerløs bil. Ved hjælp af sensorer og maskinlæring kan førerløse biler følge instruktioner og ændre på, hvordan disse instruktioner udføres, hvis forholdene ændrer sig.
For at styrke deres færdigheder i matematik og udforske maskinlæringens anvendelsesmuligheder på førerløse biler kan eleverne få et "budget" på et bestemt antal sving. Derefter kan de:

  • Lave et gitter, der repræsenterer byens vejnet (f.eks. fem gader, der går fra øst mod vest, og fem gader, der går fra nord mod syd).
  • Vælge et startpunkt og en destination. Med tanke på, at ruten med de færreste sving repræsenterer den bedste rute: analysere tre vejkryds mellem startpunktet og destinationen.
  • Bestemme sandsynligheden for, at deres køretøj kommer frem til destinationen "under budgettet" i en tilfældig retning.

Evalueringsmuligheder

Underviserens observationstjekliste
Lav en skala, der passer til dine behov, f.eks.:

  1. Delvist gennemført
  2. Gennemført
  3. Gennemført over forventning

Brug de følgende succeskriterier til at evaluere elevernes fremskridt:

  • Eleverne kan identificere de vigtige elementer i et problem.
  • Eleverne kan selvstændigt udvikle en fungerende og kreativ løsning.
  • Eleverne kan tydeligt kommunikere deres idéer.

Selvevaluering
Når eleverne har indsamlet data om deres løsningers ydeevne, skal de have tid til at reflektere over løsningerne. Hjælp dem ved at stille spørgsmål som:

  • Opfylder din løsning kriterierne i opgaveformuleringen?
  • Kan din robots bevægelse(r) gøres mere præcise?
  • Hvordan har andre løst dette problem?

Bed eleverne om at brainstorme og dokumentere to måder, de kunne forbedre deres løsninger på.

Fælles feedback
Lad eleverne deltage i en evalueringsproces, hvor hver gruppe skal evaluere både deres eget og de andres projekter. Denne evalueringsproces kan hjælpe eleverne med at udvikle deres kompetencer i at give konstruktiv feedback samt forbedre deres analysefærdigheder og evner til at bruge objektive data til understøttelse af deres argumenter.

Mulige karrierer

Hvis eleverne kunne lide denne lektion, ville de måske være interesserede i at undersøge karrieremuligheder inden for:

  • Erhverv og økonomi (iværksætteri)
  • Fremstilling og teknik (teknisk planlægning)

Hjælp til lærere

Eleverne skal:
Bruge designprocessen til at løse virkelige problemer

Fysik/kemi efter 9. klasse
• Eleven kan designe enkle teknologiske løsninger på udfordringer fra hverdag og samfund
• Eleven har viden om metoder til udvikling af tekniske løsninger

Teknologiforståelse efter 9. klasse
• Eleven kan vurdere forskellige algoritmers anvendelighed og kan benytte forskellige metoder til at afprøve algoritmer
• Eleven har viden om forskellige parametre til vurdering af algoritmers anvendelighed
• Eleven kan læse og forstå programmer skrevet i et tekstbaseret programmeringssprog samt anvende et sådant til systematsk modifkaton og konstrukton af programmer ud fra en problemspecifkaton
• Eleven har viden om metoder til at analysere og forudsige programmers opførsel samt teknikker til systematsk og trinvis udvikling af programmer

Informatik C – hhx, htx, stx
• Eleven kan give eksempler på, hvordan it-systemer har betydning for og påvirker menneskelige aktiviteter
• identificere basale strukturer i programmeringssprog, modellere programmer og anvende programmering til udvikling af simple it-systemer

Elevmateriale

Elevark

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.