Cyclus 2 - Lego Mindstorms

Cyclus 2 - Lego Mindstorms

Lego Mindstorms - Bewegingssensoren

In dit deel ga je een bewegingssensor aansluiten op de Lego Mindstorms.

Opdracht PIR-sensor aansluiten

1. HiTechnic heeft sensoren voor Lego Mindstorms in het assortiment.


A. Ga naar (http://modernroboticsinc.com) en zoek daarin op HiTechnic.

Er is een aantal infraroodsensoren, bijvoorbeeld een PIR-sensor. (http://modernroboticsinc.com/hitechnic-nxt-pir-sensor).
B. Zoek de gegevens van deze sensor op.
C. Wat verandert er bij het detecteren van een beweging?
D. Kun je iets instellen aan deze sensor? Zo ja, wat dan?
E. Wat is de hoek waaronder de PIR-sensor beweging kan detecteren?
F. Wat is de afstand waarbinnen nog beweging gedetecteerd kan worden?


Een van de andere sensoren is de HiTechnic NXT IRSeeker V2.
G. Zoek de gegevens van deze sensor op.
H. Welke toepassing heeft deze sensor?
I.  Leg duidelijk uit hoe deze sensor werkt.
J. Wat is de overeenkomst en wat het verschil met de vorige sensor(en)?


2. Koppel de infraroodsensor aan poort 4 van de EV3-robot. Geen infraroodsensor? Daar is een oplossing voor. Zie hierna.

Programmeren

Voordat we aan de code voor de PIR-sensor beginnen moeten we eerst het toestandsdiagram maken. In feite is dat vrij simpel aangezien de PIR-sensor veel zaken al intern regelt. Laten we de PIR sensor beschouwen als een bewegingsmelder van een lamp. In dat geval moet er dus bij beweging een lampje aangaan. Bij de EV3 maken we daarvoor in de plaats gebruik van de display.
We krijgen dus de volgende toestanden:

  1. Er wordt geen beweging gedetecteerd dus op de display komt ‘uit’ te staan.
  2. Er wordt beweging gedetecteerd: op de display komt ‘aan’ te staan.

Op sommige PIR’s kun je de gevoeligheid en de vertraging instellen. Dit laten we nu nog buiten beschouwing.
Het eenvoudige toestandsdiagram zal er dan zo uitzien.

Als er geen PIR aanwezig is, kunnen we voor het maken van een bewegingssensor ook gebruik maken van een touch-sensor om het gedrag van de PIR-sensor te simuleren.

Opdracht touch sensor

Als er geen PIR aanwezig is, kunnen we voor het maken van een bewegingssensor ook gebruik maken van een touch-sensor om het gedrag van de PIR-sensor te simuleren.

  • Waarom maakt dit voor deze opdracht geen verschil?

Opdracht EV3 programmeren

Gebruik het onderstaande programma om de bewegingssensor te kunnen gebruiken. Test je programma.
De bijbehorende code (op het display wordt niet alleen ‘aan’ of ‘uit’ aangegeven, maar ook de waarde die de sensor heeft en de toestand waarin het programma zit):

'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 uit of aan 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

 

Opdracht toestandsdiagram timer

De bedoeling is dat het 'lampje' niet onmiddellijk uit gaat als er na een beweging geen beweging meer wordt gedetecteerd.
Laten we er van uit gaan dat er 30 seconden moeten verstrijken voor het licht uitgaat. En mocht tijdens die 30 seconden toch weer een beweging gedetecteerd worden dan blijft het programma in toestand 2 en begint, als er daarna opnieuw geen beweging is, de timer opnieuw te lopen.
Je zou kunnen kiezen voor 3 toestanden.

 

  1. Er wordt geen beweging gedetecteerd: uit
  2. Er wordt beweging gedetecteerd: van uit naar aan
  3. Er wordt geen beweging meer gedetecteerd en de timer gaat lopen.

Als de timer (zonder gedetecteerde beweging) 30 seconden gelopen heeft dan naar toestand 1 maar als er binnen die 30 seconden opnieuw beweging wordt gedetecteerd dan terug naar toestand 2

  • Teken het toestandsdiagram

Opdracht tijd

Met Clock.ElapsedMilliseconds is het mogelijk om de tijd te bepalen die er verstreken is sinds 1900. Als je deze code op verschillende momenten uitleest is het mogelijk  om de tijd tussen die twee momenten te meten… Je kunt een constante ‘tijd’ opnemen in je programma die je de waarde van 30.000 ms geeft.

  • Waar zou je dit doen?

Opdracht timer

De code voor de 'timer' ziet er als volgt uit:

If toestand = 3 Then
  If waarde = 0 Then
    T2 = Clock.ElapsedMilliseconds
    'Alleen wanneer de tijd verstreken is moet de lamp worden uitgezet
    If T2-T1 > tijd 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
Endif
If toestand = 3 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
  • Pas nu de code aan zodat de timer ook goed gaat werken. Vergeet de constante niet. Ook elders in het programma moet je nog het een en ander aanpassen.

Vragen bij bewegingssensor

A. Had je de vertraging bij het uitgaan ook simpelweg in kunnen stellen door Program.Delay(30000) te gebruiken in je code? Dat had namelijk heel wat code gescheeld! Deze regel kun je invoegen in het eerste programma (2 toestanden).

B. Waar zou je dat moeten doen? Probeer dit uit en kijk wat de gevolgen zijn.

De actieve sensor / infrarood sensor

Opdracht HiTechnic NXT EOPD

Objecten kunnen gedetecteerd worden met de HiTechnic NXT EOPD.

A. Zoek de gegevens van deze sensor op.
B. Welke toepassing heeft deze sensor?
C. Wat betekenen de laatste vier letters?
D. Leg duidelijk uit hoe deze sensor werkt.
E. Wat is de overeenkomst en wat het verschil met een actieve infrarood-sensor?

Opdracht IR-sensor

De IR-sensor van Lego Mindstorms (nr. 45509) wordt meegeleverd met de ‘home-editie (niet met de educatieve set).

A. Zoek de eigenschappen en de toepassing op.
B. Zou je deze sensor kunnen gebruiken om voorwerpen of mensen/dieren te detecteren?
C. Waarom wel of waarom niet?

Opdracht infrarood baken

Lego Mindstorms heeft een infrarood baken (nr. 45508).

A. Is dit een sensor?
B. Leg uit waarom wel of waarom niet.
C. Noem twee manieren waarop deze kan worden gebruikt.

 

Opdracht toegangspoort

Je kent ze ongetwijfeld. Van die poortjes bij een supermarkt of bouwmarkt. Je kunt er wel in maar moet via de kassa weer naar buiten. Vaak werkt zo’n poortje met een actieve infrarood sensor. Zodra je je in de straal bevindt gaat het poortje korte tijd open.

Afbeelding: Toegangspoorten (met toestemming van Alrecar B.V. Sprang-Capelle)

Je hebt actieve infrarood sensoren waarbij aan één kant van de doorgang zich de zender bevindt die dus het infrarode licht uitzendt en er tegenover zit dan de ontvanger. Zodra de ontvanger geen infrarood licht ontvangt kan op die veranderde situatie gereageerd worden.
De infrarood sensor van Mindstorms is iets simpeler. De zender en de ontvanger zitten naast elkaar. Het infrarode licht wordt uitgezonden en wanneer er dan iemand of iets zich in die lichtstraal bevindt wordt deze teruggekaatst, opgevangen door de ontvanger en kan er een reactie plaatsvinden.
Wij zullen ons in verband met de eenvoud alleen bezig houden met een infrarood sensor zoals die van Lego (of de HiTechnic NXT EOPD)

Het poortje simuleren we met de Lego-robot. In plaats het openen van een poort laten we de robot kort achteruit rijden, namelijk precies één omwenteling van de voorwielen. Voor het openen van een poort zou je ook een motor gebruiken en deze een korte slag laten maken. Ook zorg je ervoor dat de afstand van de ‘persoon’ (of de poort) tot de IR-sensor op het scherm wordt getoond. Voor dit laatste kun je deze code gebruiken.

'connect IR sensor to port 4
Sensor.SetMode(4,0)  'Set port 4 to mode 0: distance in cm
While "True"
  LCD.StopUpdate() 'to prevent flickering, don't update LCD until text is ready
  LCD.Clear()
  LCD.Text(1,45,55,2,Sensor.ReadRawValue(4,0)+" cm")
  LCD.Update()
EndWhile

Met het voorbeeld van de PIR sensor moet het nu niet zo heel moeilijk meer zijn om het toestandsdiagram te tekenen en daarna de code voor deze schakeling te schrijven.

A. Teken het toestandsdiagram en schrijf het programma.
B. Als de infraroodstraal niet meer wordt onderbroken, hoe lang duurt het dan voordat de sensor dit signaleert?
C. Zorg er in het toestandsdiagram en in de code voor dat de robot  daarna 5 seconden wacht en dan terugrijdt naar zijn eerste positie.
D. Onderzoek wat het effect is van het wijzigen van de sensormodus in 1, resp. 2.

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

    Laatst gewijzigd
    2019-05-07 23:17:14
    Licentie
    CC Naamsvermelding 4.0 Internationale 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