LEGO MINDSTORMS Education EV3 + MicroPython: programmeer de kinderspeelgoed met een volwassentaal

Hallo, Habr! We zijn al twee jaar geleden verteld, en in november 2018 gebeurde er een zeer interessante (wat betreft beveiliging) gebeurtenis. Kort samengevat, het team van CyberArk Software Ltd. slaagde erin het te hacken: ze kregen de mogelijkheid om commando's buiten de containers uit te voeren, d.w.z. op het host-systeem. Een prachtige illustratie van het beveiligingsprobleem in Docker, nietwaar? Over alle details van wat er gebeurde, lees je over het LEGO MINDSTORMS Education EV3-platform. De belangrijkste doelen van dit platform zijn leren door praktische voorbeelden, het ontwikkelen van STEAM-vaardigheden en het vormgeven van een ingenieursmentaliteit. Hiermee kunnen laboratoriumexperimenten worden uitgevoerd om mechanica en dynamica te bestuderen. De laboratoriumopstellingen van LEGO-blokken en de utilities voor het registreren en verwerken van gegevens maken experimenten nog interessanter en visueler, en helpen kinderen de natuurkunde beter te begrijpen. Bijvoorbeeld, leerlingen kunnen gegevens over de smelt temperatuur verzamelen en met behulp van een applicatie deze systematiseren en presenteren in de vorm van een grafiek. Maar dit is nog maar het begin: vandaag vertellen we hoe we deze set kunnen aanvullen met de programmeeromgeving MicroPython en deze kunnen gebruiken voor het leren van robotica.

LEGO MINDSTORMS Education EV3 + MicroPython: programmeer de kinderspeelgoed met een volwassentaal

We leren programmeren met EV3

Moderne leerlingen willen een kleurrijk resultaat zien. Ja, ze vinden het saai als het programma cijfers in de console opstelt, en ze willen kleurrijke grafieken, diagrammen bekijken en echte robots bouwen die bewegen en commando's uitvoeren. Gewone code lijkt kinderen ook te ingewikkeld, dus is het beter om met iets eenvoudigers te beginnen.

De basis programmeeromgeving van EV3 is gemaakt op basis van de grafische taal LabVIEW en stelt je in staat om algoritmes voor de robot visueel vast te stellen: de opdrachten worden weergegeven in de vorm van blokken die je kunt verslepen en verbinden.

LEGO MINDSTORMS Education EV3 + MicroPython: programmeer de kinderspeelgoed met een volwassentaal

Deze methode werkt goed als je wilt laten zien hoe algoritmes worden opgebouwd, maar het is niet geschikt voor programma's met een groot aantal blokken. Bij het ingewikkelder maken van scenario's moet men overstappen op het programmeren met code, maar kinderen vinden het moeilijk om deze stap te maken. 

Hier zijn verschillende trucs, waarvan er één is om te laten zien dat de code dezelfde taken uitvoert als de blokken. In de EV3-omgeving kan dit worden gedaan dankzij de integratie met MicroPython: kinderen creëren hetzelfde programma in de basis programmeeromgeving met behulp van blokken en in de programmeertaal Python in Visual Studio Code van Microsoft. Ze zien dat beide methodes hetzelfde werken, maar het is handiger om complexe taken met code op te lossen.

We stappen over op MicroPython

De EV3-omgeving is gebouwd op een ARM9-processor en de ontwikkelaars hebben de architectuur bewust open gelaten. Deze oplossing maakt het mogelijk om alternatieve firmware te installeren, waaronder een afbeelding voor gebruik met MicroPython. Dit stelt ons in staat om Python te gebruiken voor het programmeren van de EV3, waardoor het werken met de set dichter bij echte levensproblemen komt. 

Om te beginnen, moet je de EV3 MicroPython-afbeelding op een microSD-kaart downloaden, deze in de EV3-microcomputer plaatsen en inschakelen. Vervolgens moet je de gratis uitbreiding voor Visual Studio installeren. Dan kun je aan de slag. 

We programmeren de eerste robot met MycroPython

LEGO MINDSTORMS Education EV3 + MicroPython: programmeer de kinderspeelgoed met een volwassentaal

Op onze website zijn er verschillende lessen om de basisprincipes van robotica te leren. De modellen op de EV3 introduceren kinderen in de fundamenten die worden gebruikt in zelfrijdende auto's, fabrieksrobots en CNC-machines. 

We nemen bijvoorbeeld een tekenmachine die we kunnen leren om patronen en geometrische figuren te tekenen. Deze case is een vereenvoudigde versie van grotere lasrobots of frezen en laat zien hoe je de EV3 samen met MicroPython kunt gebruiken om studenten te onderwijzen. Bovendien kan de tekenmachine gaten in een printplaat markeren voor papa, maar dat is al een ander niveau dat wiskundige berekeningen vereist.

Voor het werk hebben we nodig:

  • de basisset LEGO MINDSTORMS Education EV3; 
  • een groot vel geruit papier;
  • gekleurde markeringen. 

De assemblage van de robot staat in de handleiding,, maar we zullen een voorbeeld van programmeren bekijken.

We initialiseren eerst de EV3-modulebibliotheek:

#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor, GyroSensor)
from pybricks.parameters import Port, Stop, Direction, Color, ImageFile
from pybricks.tools import wait

We stellen het platform in dat de pen draait als een motor op poort B. We definiëren de overbrengverhouding van de tweestaps tandwieloverbrenging met respectievelijk 20-12-28 tanden.

turntable_motor = Motor(Port.B, Direction.CLOCKWISE, [20, 12, 28])

We stellen de hefmechanisme voor de pen in als een motor op poort C:

seesaw_motor = Motor(Port.C)

We stellen de gyroscoop in, die de kanteling van de pen meet, op poort 2:

gyro_sensor = GyroSensor(Port.S2)

We stellen de kleuren sensor in op poort 3. De sensor wordt gebruikt om papier onder de tekenmachine te detecteren:

color_sensor = ColorSensor(Port.S3)

We stellen de aanraking sensor in op poort 4. De robot begint te tekenen wanneer de sensor wordt ingedrukt:

touch_sensor = TouchSensor(Port.S4)

We definiëren functies die de pen omhoog en omlaag brengen:

def pen_holder_raise():
  seesaw_motor.run_target(50, 25, Stop.HOLD)
  wait(1000)

def pen_holder_lower():
  seesaw_motor.run_target(50, 0, Stop.HOLD)
  wait(1000)

We definiëren een functie om de penhouder naar een bepaalde hoek of tot een bepaalde hoek te draaien:

def pen_holder_turn_to(target_angle):
  if target_angle > gyro_sensor.angle():

Als de doelhoek groter is dan de huidige hoek van de gyroscoop sensor, blijven we met positieve snelheid met de klok mee draaien:

    turntable_motor.run(70)
	
while gyro_sensor.angle() < target_angle:
	
pass
	elif target_angle < gyro_sensor.angle():

Als de doelhoek kleiner is dan de huidige gyroscoop sensor hoek, draaien we tegen de klok in:

    turntable_motor.run(-70)
	
while gyro_sensor.angle() > target_angle:
	
pass

We stoppen het draaiende platform wanneer de doelhoek is bereikt:

  turntable_motor.stop(Stop.BRAKE)

We stellen de beginpositie van de pen in op de hoogste positie:

pen_holder_raise()

Nu komt het belangrijkste deel van het programma — een oneindige lus. Eerst wacht de EV3 totdat de kleurensensor wit papier of een blauwe startcel detecteert, en de aanrakingssensor wordt ingedrukt. Dan tekent hij een patroon, gaat terug naar de beginpositie en herhaalt alles opnieuw.

Wanneer het apparaat niet klaar is, kleuren de LED's op de controller rood en wordt op het LCD-scherm het beeld 'duim omlaag' weergegeven:

while True:
  brick.light(Color.RED)
  brick.display.image(ImageFile.THUMBS_DOWN)

We wachten totdat de kleurensensor blauw of wit ziet, zetten de LED-kleur op groen, tonen het beeld 'duim omhoog' op het LCD-scherm en geven aan dat het apparaat klaar is voor gebruik:

  while color_sensor.color() not in (Color.BLUE, Color.WHITE):
	
wait(10)
  brick.light(Color.GREEN)
  brick.display.image(ImageFile.THUMBS_UP)

We wachten tot de aanrakingssensor is ingedrukt, stellen de gyroscoop sensor in op een hoek van 0 en beginnen met tekenen:

  while not touch_sensor.pressed():
	
wait(10)
  gyro_sensor.reset_angle(0)
  pen_holder_turn_to(15)
  pen_holder_lower()
  pen_holder_turn_to(30)
  pen_holder_raise()
  pen_holder_turn_to(45)
  pen_holder_lower()
  pen_holder_turn_to(60)

We verhogen de penhouder en brengen deze terug naar de beginpositie:

  pen_holder_raise()
  pen_holder_turn_to(0)</i>

Dit is het eenvoudige programma dat we hebben gemaakt. Laten we het nu starten en kijken naar de tekenrobot in actie. 

Wat leveren dergelijke voorbeelden op?

LEGO MINDSTORMS Education EV3 + MicroPython: programmeer de kinderspeelgoed met een volwassentaal

EV3 is een instrument voor beroepsoriëntatie binnen STEM-beroepen en een toegangspunt tot technische specialisaties. Aangezien hiermee praktische taken kunnen worden uitgevoerd, verwerven kinderen ervaring met technische ontwikkeling en het bouwen van industriële robots, leren ze realistische situaties te modelleren, programma's te begrijpen en algoritmes te analyseren, en verkrijgen ze basiskennis van programmeerconstructies.

De ondersteuning van MicroPython maakt het EV3-platform geschikt voor onderwijs in de bovenbouw. Leerlingen kunnen zich uitproberen als programmeurs in een van de meest populaire moderne programmeertalen en kennismaken met beroepen die verband houden met programmeren en technisch ontwerpen. De EV3-kits laten zien dat coderen niet eng is, bereiden voor op serieuze technische uitdagingen en helpen bij de eerste stappen in technische beroepen. Voor degenen die in het onderwijs werken, hebben we lesprogramma's en opleidingsmaterialen voorbereid. Deze bevatten gedetailleerde informatie over welke vaardigheden worden ontwikkeld bij het uitvoeren van specifieke taken en hoe deze vaardigheden zich verhouden tot de onderwijsnormen.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster