Cyclus 1 - Lego Mindstorms

Cyclus 1 - Lego Mindstorms

Een sensor gebruiken

Inleiding

Voor de volgende opdrachten wordt enige bekendheid verondersteld met het werken met Lego Mindstorms EV3, in combinatie met Small Basic.

Let op: de touchsensor van de EV3 is in verschillende modi te gebruiken. Voor de volgende opdrachten wordt uitsluitend modus 0 gebruikt.

Opdracht touchsensor 1

A. Sluit de touchsensor aan op poort 1 van de EV3. Voer de volgende code in. De die beginnen met een aanhalingsteken (') zijn commentaar en hoeven niet te worden ingevoerd. Test het programma en let op de werking ervan. Lees het commentaar en probeer de code te begrijpen.

'De touchsensor wordt gekoppeld aan poort 1. De modus is 0.
'Modus 0 betekent dat na aanraking het percentage weer 0 wordt.
Sensor.SetMode(1,0)
'lamp kan aan of uit zijn
lamp = "uit"
'toestand geeft aan in welke toestand het systeem zit: 1 of 2
toestand = 1
'waarde 100 geeft aan dat de sensor ingedrukt is en bij waarde 0 is deze niet ingedrukt
waarde = 0
'De regels om het scherm te verversen moeten direct, na wijzigen van de toestand, worden uitgevoerd i.v.m. de leesbaarheid
LCD.Clear()
LCD.Write(10, 40, "Waarde = " + waarde)
LCD.Write(10, 60, "Toestand = " + toestand)
LCD.Write(10, 80, "Lamp = " + lamp)
'De While-lus wordt continu doorlopen
While "true"
  'Lees de waarde die de touchsensor aangeeft en ken deze toe aan de variabele 'waarde'
  waarde = Sensor.ReadPercent(1)
  'Controleer of de sensor is ingedrukt
  If toestand = 1 Then
    If waarde = 100 Then
      lamp = "aan"
      toestand = 2
      LCD.Clear()
      LCD.Write(10, 40, "Waarde = " + waarde)
      LCD.Write(10, 60, "Toestand = " + toestand)
      LCD.Write(10, 80, "Lamp = " + lamp)
    EndIf
  EndIf
  'Controleer of de sensor is losgelaten
  If toestand = 2 Then
    If waarde = 0 Then
      lamp = "uit"
      toestand = 1
      LCD.Clear()
      LCD.Write(10, 40, "Waarde = " + waarde)
      LCD.Write(10, 60, "Toestand = " + toestand)
      LCD.Write(10, 80, "Lamp = " + lamp)
    EndIf
  EndIf
EndWhile

B. Maak het toestandsdiagram, dat bij deze code past.

C. De  vier regels voor het schrijven naar het scherm worden vaak herhaald. Dit kan worden opgelost, door een subroutine te schrijven waardoor de totale code compacter wordt. Schrijf zo’n subroutine.

Opdracht touchsensor 2

Voor deze opdracht gebruik je dezelfde schakeling, als bij de vorige opdracht, want met deze serie opdrachten is het de bedoeling dat je ziet dat je met de computer kunt bepalen hoe er op de sensor gereageerd wordt.

Als je de sensor NIET aanraakt (indrukt) moet de tekst “Au, dit is vreemd…” verschijnen en als je hem WEL aanraakt “Dit voelt prima”.

A. Maak het hierbij behorende toestandsdiagram.

B. Pas de code aan en test je programma op de juiste werking.

Opdracht touchsensor 3

A. Voer de volgende code in. Test het programma en let op de werking ervan. Lees het commentaar en probeer de code te begrijpen.

'De touchsensor wordt gekoppeld aan poort 1. De modus is 0.
'Modus 0 betekent dat na aanraking het percentage weer 0 wordt.
Sensor.SetMode(1,0)
'lamp kan aan of uit zijn
lamp = "uit"
'toestand geeft aan in welke toestand het systeem zit: 1, 2, 3 of 4
toestand = 1
'waarde 100 geeft aan dat de sensor ingedrukt is en bij waarde 0 is deze niet ingedrukt
waarde = 0
'De regels om het scherm te verversen moeten direct, na wijzigen van de toestand, worden uitgevoerd i.v.m. de leesbaarheid
LCD.Clear()
LCD.Write(10, 40, "Waarde = " + waarde)
LCD.Write(10, 60, "Toestand = " + toestand)
LCD.Write(10, 80, "Lamp = " + lamp)
'De While-lus wordt continu doorlopen
While "true"
  'Lees de waarde die de touchsensor aangeeft en ken deze toe aan de variabele 'waarde'
  waarde = Sensor.ReadPercent(1)
  'Controleer of de sensor is ingedrukt of losgelaten
  If toestand = 1 Then
    If waarde = 100 Then
      lamp = "aan"
      toestand = 2
      LCD.Clear()
      LCD.Write(10, 40, "Waarde = " + waarde)
      LCD.Write(10, 60, "Toestand = " + toestand)
      LCD.Write(10, 80, "Lamp = " + lamp)
    EndIf
  EndIf
  If toestand = 2 Then
    If waarde = 0 Then
      lamp = "aan"
      toestand = 3
      LCD.Clear()
      LCD.Write(10, 40, "Waarde = " + waarde)
      LCD.Write(10, 60, "Toestand = " + toestand)
      LCD.Write(10, 80, "Lamp = " + lamp)
    EndIf
  EndIf
  If toestand = 3 Then
    If waarde = 100 Then
      lamp = "uit"
      toestand = 4
      LCD.Clear()
      LCD.Write(10, 40, "Waarde = " + waarde)
      LCD.Write(10, 60, "Toestand = " + toestand)
      LCD.Write(10, 80, "Lamp = " + lamp)
    EndIf
  EndIf
  If toestand = 4 Then
    If waarde = 0 Then
      lamp = "uit"
      toestand = 1
      LCD.Clear()
      LCD.Write(10, 40, "Waarde = " + waarde)
      LCD.Write(10, 60, "Toestand = " + toestand)
      LCD.Write(10, 80, "Lamp = " + lamp)
    EndIf
  EndIf
EndWhile

B. Maak het toestandsdiagram, dat bij deze code past.

C. Maak gebruik van je eerder subroutine.

Opdracht infraroodsensor

A. Veronderstel dat je niet de beschikking hebt over een aanraaksensor, maar wel over een infraroodsensor. Als je die dan gaat gebruiken, moet je dan ook iets aan de code veranderen?

B. Denk je dat de schakeling anders gaat reageren? Zo ja, op welke manier merk je dat?

Opdracht hotelschakeling 1

Je kent vast wel de wissel- of hotelschakeling. In vrijwel elk huis komt een dergelijke schakeling voor bij de trap. Zowel beneden als boven kun je de lamp aan- en uitschakelen

A. Het bijbehorende toestandsdiagram ben je al eerder tegengekomen. Zoek deze op.

B. Gebruik nu twee aanraakschakelaars en programmeer daarmee een wisselschakeling. Sluit de sensoren aan op poort 1 en 2.

Opdracht hotelschakeling 2

Gebruik dezelfde opstelling als in de vorige opdracht (Opdracht hotelschakeling 1).

A. Lees deze opdracht door en teken het toestandsdiagram.

B. Zorg er voor dat de tekst ‘Aan’ op het beeldscherm verschijnt als je eerst de sensor op poort 1 aanraakt (en weer loslaat) en daarna de sensor op poort 2.

C. Het vorige programma wordt nu uitgebreid. Zorg er daarna voor dat de tekst ‘Uit’ op het beeldscherm verschijnt als je eerst de sensor op poort 2 aanraakt en daarna de sensor op poort 1.

Opdracht hotelschakeling 3

Gebruik dezelfde opstelling als in Opdracht hotelschakeling 1. Nu komt er een melding naar het beeldscherm (als in de vorige opdrachten) én een geluidsignaal.

A. Lees deze opdracht door en teken het toestandsdiagram.

B. Wijzig het programma dusdanig dat als je de sensor van poort 1 aanraakt de tekst ‘Aan’ op het beeldscherm verschijnt en als je de sensor loslaat de tekst ‘Uit’.

C. Met de sensor van poort 2 laat je bij het indrukken ervan een geluidsignaal horen en bij het weer loslaten ervan gaat het geluid uit.

Opdracht touchsensor toetsenbord

Het is mogelijk om de EV3 te laten reageren op aanslagen van het toetsenbord van de computer. Hiervoor kun je bijvoorbeeld deze code gebruiken.

While "True"
  toetsinput=TextWindow.ReadKey()
  If toetsinput="1" Then
    ...
  ElseIf toetsinput="2" Then
    ...
  EndIf
  ...
  TextWindow.Write(toetsinput)
EndWhile

Schrijf een programma dat ‘Je hebt het cijfer 1 ingedrukt’ op het scherm zet, als je de deze toets hebt ingedrukt. Doe dit ook voor de cijfers 2, 3 en 4.

Opdracht mission accomplished

Je zult inmiddels gemerkt hebben dat de logica van het programmeren niet altijd eenvoudig is, maar dat het met een goed eindige-toestands-diagram een stuk gemakkelijker is om het programma te schrijven.
Ook de schakeling die we nu gaan maken is nog niet zo eenvoudig.
Het is de bedoeling dat je de tekst “Mission accomplished” naar het scherm stuurt als je de cijfers 1458 (exact in die volgorde) invoert zonder tussendoor andere toetsen in te drukken.
Let op: bij een verkeerde code moet je dus iedere keer weer opnieuw beginnen.
En dus beginnen we weer met het eindige-toestands-diagram.

A. Maak het programma waarmee je de genoemde tekst naar het scherm stuurt als je de cijfers 1458 in die volgorde invoert zonder tussendoor andere toetsen in te drukken. Let op: bij een verkeerd ingegeven getal moet je dus iedere keer weer opnieuw beginnen.

B. Als de code juist is, staat de tekst op het scherm. Zolang deze tekst er staat  heeft het indrukken van een toets geen effect. Zorg ervoor dat de tekst na 10 seconden weer verdwijnt. Daarna heeft het indrukken van een toets weer effect en kun je dus opnieuw de code intypen.

  • Het arrangement Cyclus 1 - Lego Mindstorms is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Laatst gewijzigd
    2019-02-07 14:52:11
    Licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding 4.0 Internationale licentie.

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld
    Studiebelasting
    4 uur en 0 minuten
  • Downloaden

    Het volledige arrangement is in de onderstaande formaten te downloaden.

    Metadata

    LTI

    Leeromgevingen die gebruik maken van LTI kunnen Wikiwijs arrangementen en toetsen afspelen en resultaten terugkoppelen. Hiervoor moet de leeromgeving wel bij Wikiwijs aangemeld zijn. Wil je gebruik maken van de LTI koppeling? Meld je aan via info@wikiwijs.nl met het verzoek om een LTI koppeling aan te gaan.

    Maak je al gebruik van LTI? Gebruik dan de onderstaande Launch URL’s.

    Arrangement

    IMSCC package

    Wil je de Launch URL’s niet los kopiëren, maar in één keer downloaden? Download dan de IMSCC package.

    Meer informatie voor ontwikkelaars

    Wikiwijs lesmateriaal kan worden gebruikt in een externe leeromgeving. Er kunnen koppelingen worden gemaakt en het lesmateriaal kan op verschillende manieren worden geëxporteerd. Meer informatie hierover kun je vinden op onze Developers Wiki.