MINDSTORMS EV3 Grundset

Gör en förarlös bil

Designa ett autonomt fordon som följer användarbestämda körningskommandon.

120+ min.
Medelnivå
Årskurs 7-Gymnasiet
roaming-vehicles-gps

Lektionsplanering

Förberedelser

  • Läs igenom det här lärarmaterialet.
  • Om du tror att det behövs planerar du en lektion med hjälp av kom igång-materialet i EV3 Lab Software eller programmeringsappen. På så vis får eleverna bekanta sig med LEGO® MINDSTORMS® Education EV3.

Engagera (30 minuter)

  • Använd idéerna i avsnittet Starta en diskussion nedan för att få eleverna att diskutera projektet.
  • Förklara projektet.
  • Dela in klassen i par.
  • Ge eleverna tid för att komma på idéer.

Utforska (30 minuter)

  • Låt eleverna skapa flera prototyper.
  • Uppmuntra dem att utforska både byggande och programmering.
  • Låt varje par bygga och testa två lösningar.

Förklara (60 minuter)

  • Be eleverna att testa sina lösningar och välja ut den bästa av dem.
  • Se till att de kan skapa sina egna testtabeller.
  • Ge paren tid att avsluta sina projekt och samla in material för att dokumentera sitt arbete.

Utveckla (60 minuter)

  • Ge eleverna tid att skapa slutrapporter.
  • Skapa en möjlighet att dela där varje grupp får presentera sina resultat.

Utvärdera

  • Ge återkoppling kring varje elevs prestation.
  • Du kan använda utvärderingsmatrisen som ingår för att förenkla processen.

Starta en diskussion

Idag finns det många navigeringssystem som används i bilar. Vissa av dem tar nu över förarens ansvar för att köra passagerare till sina resmål på ett säkert sätt. Autonoma bilar måste kunna utföra en serie rörelser som bygger på information från användaren innan de beräknar den bästa rutten mellan punkterna A och B.

roaming-vehicles-gps

Uppmuntra eleverna att aktivt komma på idéer.
Be eleverna att fundera kring följande frågor:

  • Vad är autonoma bilar och hur fungerar de?
  • Varifrån får autonoma bilar sina instruktioner?
  • Vilka rörelser måste bilen kunna utföra för att köra längs stadsgator i ett koordinatsystem med riktningarna norr, söder, öst och väst?

Ge eleverna tid att svara på följande frågor.

Uppmuntra eleverna att dokumentera sina första idéer och förklara varför de valde den lösning de kommer att använda till sin första prototyp. Be dem att beskriva hur de kommer att utvärdera sina idéer under projektet. Det ger dem specifik information att använda när de i gransknings- och revideringsskedet utvärderar sin lösning och fastställer om den fungerar eller inte.

Pseudokod är ett fantastiskt verktyg som hjälper eleverna att strukturera sina tankar innan de börjar programmera.

Byggtips

Börja med att bygga ett fordon. Eleverna kan använda någon av de föreslagna LEGO® MINDSTORMS® EV3 körningsbasmodellerna eller designa en egen modell. Se till att knapparna ovanpå EV3-enheten är lättillgängliga. De kommer att användas för att styra riktning i den här aktiviteten.

ev3-robot-driving-base

Kodningstips

Förklara för eleverna att de ska programmera sin robot att röra sig enligt en serie instruktioner som den får via knapparna på EV3-enheten. Använd följande parametrar:

  • Intryckt övre knapp: Roboten rör sig 30 cm framåt
  • Intryckt nedre knapp: Roboten rör sig 30 cm bakåt
  • Intryckt vänsterknapp: Roboten svänger 90 grader åt vänster
  • Intryckt högerknapp: Roboten svänger 90 grader åt höger

Registrera en handling för att få roboten att röra sig

coding-08-01

Förklaring av programmet

  1. Starta programmet.

  2. Skapa ett variabelblock med namnet ”Kör”.

  3. Vänta tills en knapp på enheten trycks in.

  4. Spela ljudet ”Click 2”.

  5. Registrera det numeriska värdet hos den intryckta knappen i variabeln ”Kör”.

  6. Vänta i 2 sekunder.

  7. Spela ljudet ”G02”.

  8. Läs av värdet som lagras i variabeln ”Kör” och skicka det till en omkopplare.

  9. Numerisk omkopplare:

    a. Om Kör = 0 (standardvärde), gör ingenting.
    b. Om Kör = 1, sväng roboten åt vänster.
    c. Om Kör = 3, sväng roboten åt höger.
    d. Om Kör = 4, kör roboten 2 hjulrotationer rakt framåt.
    e. Om Kör = 5, kör roboten 2 hjulrotationer rakt bakåt.

  10. Spela ljudet ”Game Over 2.”

Registrera flera handlingar för att få roboten att röra sig

Blocket Matrisoperationer används för att lagra en serie data. Det beskrivs ofta som en tabell som består av en enda rad med flera kolumner.

coding-08-02

Förklaring av lösningen

  1. Starta programmet.
  2. Skapa ett variabelblock med namnet ”Kör”. Välj alternativet ”Skriv Numerisk matris”.
  3. Skapa en loop. Exempelkoden är inställd på att köras 5 gånger.
  4. Vänta tills en knapp på enheten trycks in.
  5. Spela ljudet ”Click”.
  6. Läs av variabelblocket ”Kör”. Välj alternativet ”Läs Numerisk matris”.
  7. Använd blocket Matrisoperationer. Välj ”Skriv till Index - Numerisk”.

a. Koppla in variabelblocket ”Kör”.
b. Koppla loopindexet från den främre delen av loopen till indexpositionen hos blocket Matrisoperationer.
c. Koppla värdet från blocket Vänta på EV3-knapp till värdepositionen hos blocket Matrisoperationer.

  1. Skriv utdata från blocket Matrisoperationer i variabelblocket ”Kör”.
  2. Vänta i 2 sekunder.
  3. Spela ljudet ”Go”.
  4. Skapa en andra loop. Exempelkoden är inställd på att köras 5 gånger, det vill säga lika många gånger som den första loopen.
  5. Läs av variabelblocket ”Kör”. Välj alternativet ”Läs Numerisk matris”.
  6. Använd blocket Matrisoperationer. Välj alternativet ”Läs vid index - Numerisk”.
  7. Numerisk omkopplare:

a. Om Kör = 0 (standardvärde), gör ingenting.
b. Om Kör = 1, sväng roboten åt vänster.
c. Om Kör = 3, sväng roboten åt höger.
d. Om Kör = 4, kör roboten 2 hjulrotationer rakt framåt.
e. Om Kör = 5, kör roboten 2 hjulrotationer rakt bakåt.

  1. Spela ljudet ”Game Over 2.”
Ladda ner exempelprogram 32 KB, kräver EV3 Lab Software

Flikarna ”1” och ”2”

EV3 MicroPython programlösningar

Registrera en handling för att få roboten att röra 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)

Registrera flera handlingar för att få roboten att röra 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)

Utvidgning

Fördjupning i språkfärdighet

Alternativ 1
Använd textbaserad programmering:

  • Låt eleverna utforska textbaserade programmeringslösningar så att de kan jämföra olika programmeringsspråk.

Alternativ 2
I den här lektionen skapade eleverna en förarlös bil som körde sig själv genom att följa instruktioner som har matats in i en matris. Vad händer om framtidens förarlösa bilar kan programmeras att strunta i indata från mänskliga förare?
För att integrera utveckling i språkfärdigheter kan du låta eleverna:

  • Skriva ett argument som stöder påståendet att förarlösa bilar inte bör kunna bestämma sin hastighet oberoende av passagerarnas indata
  • Inkludera specifika bevis som stöder påståendet, och ge exempel på situationer där det här kan vara till nackdel för passageraren
  • Bemöta motargumentet att autonom hastighetskontroll hos förarlösa bilar kan vara en effektiv strategi för att öka förarens säkerhet och trafiksäkerheten

Fördjupning i matematik

I den här lektionen skapade eleverna en ”sväng-för-sväng-sekvens” av instruktioner för en förarlös bil. Med hjälp av sensorer och maskininlärning kan förarlösa bilar följa instruktioner och modifiera dem baserat på nya förhållanden.
För att integrera utveckling inom matematik, och för att undersöka maskininlärningsapplikationer för förarlösa bilar, kan du tilldela eleverna ett visst antal svängar. Låt dem sedan:

  • Skapa ett rutnät som representerar bilgator (till exempel fem gator som går från öster till väster, och fem gator som går från norr till söder)
  • Välja en startpunkt och ett mål, och analysera tre korsningar däremellan för att välja den bästa vägen, vilket är den väg som har så få svängar som möjligt
  • Bestämma sannolikheten för att deras fordon tar sig fram till målet i en slumpmässig riktning, utan att överskrida antalet tilldelade svängar

Möjligheter till utvärdering

Checklista för lärarobservationer
Skapa en skala som passar dina behov, t.ex.:

  1. Delvis genomfört
  2. Helt genomfört
  3. Genomfört över förväntan

Använd följande kriterier för att utvärdera elevernas prestationer:

  • Eleverna kan identifiera de viktigaste beståndsdelarna hos ett problem.
  • Eleverna kan självständigt utveckla en fungerande och kreativ lösning.
  • Eleverna kan på ett tydligt sätt kommunicera sina idéer.

Självutvärdering
Ge eleverna tid att reflektera kring sina lösningar när de har samlat in data från sina resultat. Hjälp dem genom att ställa frågor som:

  • Uppfyller lösningen kriterierna i konstruktionsbeskrivningen?
  • Kan robotens rörelse(r) göras mer exakt?
  • Hur har andra löst uppgiften?

Be eleverna att komma på idéer och dokumentera två sätt att förbättra sina lösningar.

Gemensam återkoppling
Uppmuntra eleverna att granska varandras arbeten och låt varje grupp ansvara för att utvärdera sitt eget och andras projekt. Det utvecklar deras förmåga att ge konstruktiv feedback, att analysera och att använda objektiva data som stöd för sina argument.

Yrkeslänkar

Elever som uppskattar den här lektionen kan vara intresserade av att utforska följande yrkesval:

  • Affärsverksamhet och ekonomi (ekonom)
  • Tillverkning och konstruktion (ingenjör)

Stöd för lärare

Eleverna kommer att:

  • Använda designprocessen för att lösa ett verklighetsbaserat problem

Läroplan för gymnasieskolan (Gy11)

Kap 1 Skolans värdegrund och uppgifter - Gymnasieskolans uppdrag.
”Skolan ska stimulera elevernas kreativitet, nyfikenhet och självförtroende samt vilja att pröva och omsätta idéer i handling och att lösa problem. Alla elever ska få utveckla sin förmåga att ta initiativ och ansvar och att arbeta både självständigt och tillsammans med andra. Skolan ska bidra till att alla elever utvecklar kunskaper och förhållningssätt som främjar entreprenörskap, företagande och innovationstänkande vilka ökar elevernas möjligheter till framtida sysselsättning, genom företagande eller anställning.”

Kap 2.1 Kunskaper
”Det är även skolans ansvar att varje elev som har slutfört ett nationellt program eller annan nationellt fastställd utbildning…

  • kan använda sina kunskaper som redskap för att formulera, analysera och pröva antaganden och lösa problem, lösa praktiska problem och arbetsuppgifter,
  • kan använda såväl digitala som andra verktyg och medier för kunskapssökande, informationsbearbetning, problemlösning, skapande, kommunikation och lärande.”

Kurser - Centralt innehåll

Nedan finns ett urval på kurser där delar av det centrala innehållet överensstämmer med lektionens innehåll. EV3 erbjuder möjligheten till en kursöverskridande samverkan.

  • Konstruktion 1, 100 p (Kurskod: KOTKOS01)
  • Matematik 1C, 100p (Kurskod: MATMAT01c)
  • Programmering 1, 100 p (Kurskod: PRRPRR01)
  • Svenska 1, 100 p (Kurskod: SVESVE01.Motsvarande finns även i SVASVA01).
  • Teknik 1, 150 p (Kurskod: TEKTEK01)
  • Tillämpad programmering, 100 p (Kurskod: TIATIL00S)

Elevmaterial

Elevblad

Download to view and share the student worksheet.

Ladda ner, visa eller dela elevbladet, antingen som en HTML-sida eller som en utskrivbar PDF.

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