MINDSTORMS EV3 Grundset

Gör ett farthållningssystem

Designa ett farthållningssystem som ändrar hastigheten hos ett fordon genom en knapptryckning.

120+ min.
Mellannivå
Årskurs 9–Gymnasiet
set-cruise-controle

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

Farthållaren i en personbil är ett system som automatiskt reglerar fordonets hastighet. Funktionen kanske verkar vara modern teknik, men introducerades redan 1958. Hur fungerar det?

set-cruise-controle

Uppmuntra eleverna att aktivt komma på idéer.

Be eleverna att fundera kring följande frågor:

  • Vilket syfte har farthållaren i en bil?
  • Hur kan farthållaren hjälpa föraren under långa resor?
  • Hur skulle farthållningsfunktionen kunna förbättras?
  • Hur skulle ett hastighetskontrollsystem med tryckknapp användas av en förare?
  • Vilka delar kommer att behövas i programmet för att få knapptryckningar att ändra motorhastigheten?

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.

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 de innehåller knappar som efterliknar knapparna på ratten hos en bil med farthållare.

ev3-robot-color-sensor

Använda två trycksensorer

Förklara att under dagens lektion kommer eleverna att använda två trycksensorer för att kontrollera och upprätthålla hastigheten hos sina körningsbaser.

Kodningstips

Eleverna kommer troligtvis att använda variabelblock under det här projektet. Ett variabelblock är ett programmeringsblock som kan lagra data (t.ex. text, logiska värden, numeriska värden eller matriser), som när som helst kan skrivas över medan programmet körs.

En variabel är ett sätt att lagra uppdaterbara värden i ett program. Värdet som lagras i en variabel kan skrivas över om och om igen medan programmet körs.

Öka hastigheten med ett variabelprogram

coding-07-01

Förklaring av programmet

  1. Starta programmet.

  2. Skapa ett variabelblock med namnet ”Hastighet” och mata in värdet 0.

  3. Om trycksensorn trycks in:

    a. Läs av variabeln ”Hastighet”.
    b. Addera ”10” till det avlästa värdet.
    c. Skriv resultatet i variabeln ”Hastighet”.
    d. Läs av variabeln ”Hastighet”.
    e. Starta motorerna B och C i en hastighet som motsvarar värdet som lagras i variabeln ”Hastighet” ANNARS (gör ingenting).

  4. Upprepa steg 3a till 3e för alltid.

Öka och minska hastigheten med variabel

coding-07-02

Förklaring av programmet

  1. Starta programmet.
  2. Skapa ett variabelblock med namnet ”Hastighet”, mata in värdet 0 och starta två uppgifter.

Uppgift 1
3. Om Trycksensor 1 trycks in:

a. Läs av variabeln ”Hastighet”.
b. Addera ”10” till det avlästa värdet.
c. Skriv resultatet i variabeln ”Hastighet”.
d. Läs av variabeln ”Hastighet”.
e. Starta motorerna B och C i en hastighet som motsvarar värdet som lagras i variabeln ”Hastighet” ANNARS (gör ingenting).

  1. Upprepa steg 3a till 3e för alltid.

Uppgift 2
5. Om Trycksensor 2 trycks in:

a. Läs av variabeln ”Hastighet”.
b. Subtrahera ”10” från det avlästa värdet.
c. Skriv resultatet i variabeln ”Hastighet”.
d. Läs av variabeln ”Hastighet”.
e. Starta motorerna B och C i en hastighet som motsvarar värdet som lagras i variabeln ”Hastighet” ANNARS (gör ingenting).

  1. Upprepa steg 5a till 5e för alltid.

Öka och minska hastigheten med variabel och display
Låt eleverna använda blocket Display för att visa körningsbasens hastighet.

coding-07-03

Förklaring av programmet

  1. Starta programmet.
  2. Skapa ett variabelblock med namnet ”Hastighet”, mata in värdet 0 och starta tre uppgifter.

Uppgift 1
3. Starta Mina block ”Acceleration”.

Uppgift 2
4. Starta Mina block ”Retardation”.

Uppgift 3
5. Läs av variabeln ”Hastighet”.
6. Visa värdet som lagras i variabeln ”Hastighet”.
7. Upprepa steg 5 och 6 för alltid.

LADDA NER EXEMPELPROGRAM15 KB, kräver EV3 Lab Software

EV3 MicroPython programlösningar

Öka hastigheten med variabel

#!/usr/bin/env pybricks-micropython

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

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

# Set up the Touch Sensor on Port 1.  It is used to increase the speed
# of the robot.
increase_touch_sensor = TouchSensor(Port.S1)

# Initialize the "old_speed" variable to "None."  It is used to check
# whether the speed variable has changed.  Setting it to "None" ensures
# this check will be "True" when the speed variable is initialized with
# a value.
old_speed = None

# Initialize the speed variable to 0.
speed = 0

# This is the main part of the program.  It is a loop that repeats
# endlessly.
while True:

    # Check whether the Touch Sensor is pressed, and increase the speed
    # variable by 10 mm per second if it is.
    if increase_touch_sensor.pressed():
        speed += 10
    
    # If the speed variable has changed, update the speed of the robot.
    if speed != old_speed:
        old_speed = speed
        robot.drive(speed, 0)

    # Wait 200 milliseconds before starting the loop again.
    wait(200)

Öka och minska hastigheten med variabel

#!/usr/bin/env pybricks-micropython

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

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

# Set up the Touch Sensor on Port 1.  It is used to increase the speed
# of the robot.
increase_touch_sensor = TouchSensor(Port.S1)

# Set up the Touch Sensor on Port 2.  It is used to decrease the speed
# of the robot.
decrease_touch_sensor = TouchSensor(Port.S2)

# Initialize the "old_speed" variable to "None."  It is used to check
# whether the speed variable has changed.  Setting it to "None" ensures
# this check will be "True" when the speed variable is initialized with
# a value.
old_speed = None

# Initialize the speed variable to 0.
speed = 0

# This is the main part of the program.  It is a loop that repeats
# endlessly.
#
# First, increase the speed variable if Touch Sensor 1 is pressed.
# Second, decrease the speed variable if Touch Sensor 2 is pressed.
# Finally, the robot updates its speed if the speed variable was
# changed.
#
# Then the loop starts over after a brief pause.
while True:

    # Check whether Touch Sensor 1 is pressed, and increase the speed
    # variable by 10 mm per second if it is.
    if increase_touch_sensor.pressed():
        speed += 10
    
    # Check whether Touch Sensor 2 is pressed, and decrease the speed
    # variable by 10 mm per second if it is.
    if decrease_touch_sensor.pressed():
        speed -= 10
    
    # If the speed variable has changed, update the speed of the robot.
    if speed != old_speed:
        old_speed = speed
        robot.drive(speed, 0)

    # Wait 200 milliseconds before starting the loop again.
    wait(200)

Öka och minska hastigheten med variabel och display

#!/usr/bin/env pybricks-micropython

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

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

# Set up the Touch Sensor on Port 1.  It is used to increase the speed
# of the robot.
increase_touch_sensor = TouchSensor(Port.S1)

# Set up the Touch Sensor on Port 2.  It is used to decrease the speed
# of the robot.
decrease_touch_sensor = TouchSensor(Port.S2)

# Initialize the "old_speed" variable to "None."  It is used to check
# whether the speed variable has changed.  Setting it to "None" ensures
# this check will be "True" when the speed variable is initialized with
# a value.
old_speed = None

# Initialize the speed variable to 0.
speed = 0

# This is the main part of the program.  It is a loop that repeats
# endlessly.
#
# First, increase the speed variable if Touch Sensor 1 is pressed.
# Second, decrease the speed variable if Touch Sensor 2 is pressed.
# Finally, the robot updates its speed if the speed variable was
# changed, and displays it on the screen.
#
# Then the loop starts over after a brief pause.
while True:

    # Check whether Touch Sensor 1 is pressed, and increase the speed
    # variable by 10 mm per second if it is.
    if increase_touch_sensor.pressed():
        speed += 10
    
    # Check whether Touch Sensor 2 is pressed, and decrease the speed
    # variable by 10 mm per second if it is.
    if decrease_touch_sensor.pressed():
        speed -= 10
    
    # If the speed variable has changed, update the speed of the robot
    # and display the new speed in the center of the screen.
    if speed != old_speed:
        old_speed = speed
        robot.drive(speed, 0)
        brick.display.clear()
        brick.display.text(speed, (85, 70))

    # Wait 200 milliseconds before starting the loop again.
    wait(200)

Utvidgning

Fördjupning i språkfärdighet

Alternativ 1
För att integrera utveckling i språkfärdigheter kan du låta eleverna:

  • Använda text, skisser och/eller foton för att sammanfatta designprocessen och skapa en slutrapport.
  • Skapa en film som skildrar designprocessen – från de allra första idéerna till det färdiga projektet.
  • Skapa en presentation om sina program.
  • Skapa en presentation som kopplar deras projekt till verkliga applikationer av liknande system och beskriva nya innovationer som skulle kunna göras utifrån deras modell.

Alternativ 2
I den här lektionen skapade eleverna ett gränssnitt för hastighetskontroll. Privatpersoner och organisationer samlar in fordonshastighetsdata för att rapportera trafikförhållanden och minska riskerna för trafikolyckor.
För att integrera utveckling i språkfärdigheter kan du låta eleverna:

  • Skriva ner att argument som stöder påståendet att antalet trafikolyckor minskar väsentligt om privatpersoner eller organisationer samlar in fordonshastighetsdata för att övervaka trafiksäkerheten
  • Bemöta motargumentet att datainsamlandet bryter mot regler för personuppgiftssekretess – se till att de använder specifik bevisning för att väga de olika argumenten mot varandra

Fördjupning i matematik

I den här lektionen skapade eleverna ett gränssnitt för hastighetskontroll. Mänskliga förare är skickliga på att bedöma vägförhållanden och ändra fordonets hastighet därefter. Förarlösa system måste tränas upp för att klara det.
För att integrera utveckling inom matematik, och för att undersöka den artificiella intelligens som används för förarlösa fordon, kan du låta eleverna:

  • Fundera över vilka variabler som bör undersökas för att fastställa hur olika vägförhållanden påverkar fordonets hantering och prestanda
  • Välja ut tre eller fyra variabler att inkludera i en matematisk modell av vägförhållandena, och skapa en datatabell för att organisera relationen mellan de valda variablerna och fordonets ideala hastighet
  • Påminna sig om att förarlösa fordon använder maskininlärning för att identifiera och uppdatera relationen mellan fordonshastigheten och de variabler som representerar vägförhållandena, och utifrån det identifiera variabler för torrt, vått och snöigt väglag och därefter förutsäga relationen mellan dessa variabler och säkra hastigheter (till exempel kan vägens jämnhet vara en variabel för torrt väglag)

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.

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.