ืฉืืื, ืืืจ! ืื ืื ื ืืืจ ืืื ืืืืืช ืคืืืคืืจืืช LEGO MINDSTORMS Education EV3. ืืืืจืืช ืืขืืงืจืืืช ืฉื ืคืืืคืืจืื ืื ืื ืืืืื ืืืืฆืขืืช ืืืืืืืช ืืขืฉืืืช, ืคืืชืื ืืืืื ืืืืช STEAM ืืขืืฆืื ืืฉืืื ืื ืืกืืช. ื ืืชื ืืืฉืชืืฉ ืื ืืืืฆืืข ืขืืืืืช ืืขืืื ืขื ืืืืื ืืื ืืงื ืืืื ืืืงื. ืืขืืื ืืขืืื ืขืฉืืืื ืืืื ื LEGO ืืืืื ืืจืืฉืื ืืขืืืื ื ืชืื ืื ืืืคืืื ืืช ืื ืืกืืืื ืืืขื ืืื ืื ืืืืืืืืื ืขืื ืืืชืจ ืืขืืืจืื ืืืืืื ืืืืื ืืื ืืืชืจ ืืช ืืคืืืืงื. ืืืืืื, ืชืืืืื ืืืช ืกืคืจ ืืืืืื ืืืกืืฃ ื ืชืื ืื ืขื ื ืงืืืช ืืชืื ืืืืฉืชืืฉ ืืืคืืืงืฆืื ืืื ืืกืืจ ืืืชื ืืืืฆืื ืืืชื ืืืจืฃ. ืืื ืื ืจืง ืืืชืืื: ืืืื ื ืกืคืจ ืืื ืืืฆื ืืืฉืืื ืืช ืืกื ืืื ืขื ืกืืืืช ืืชืื ืืช MicroPython ืืืืฉืชืืฉ ืื ืืื ืืืื ืจืืืืืืงื.

ืืื ืชืื ืืช ืขื EV3
ืชืืืืื ืืืช ืกืคืจ ืืืืจื ืืื ืจืืฆืื ืืจืืืช ืชืืฆืื ืฆืืขืื ืืช. ืื, ืื ืืฉืชืขืืืื ืื ืืชืืื ืืช ืืืฆืืื ืืกืคืจืื ืืงืื ืกืืื, ืืื ืจืืฆืื ืืืกืชืื ืขื ืืจืคืื ืฆืืขืื ืืื, ืืืืืจืืืช ืืืืฆืืจ ืจืืืืืื ืืืืชืืื ืฉื ืขืื ืืืืฆืขืื ืคืงืืืืช. ืงืื ืจืืื ื ืจืื ืื ืืกืืื ืืื ืขืืืจ ืืืืื, ืืืื ืขืืืฃ ืืืชืืื ืืืืื ืขื ืืฉืื ืงื ืืืชืจ.
ืกืืืืช ืืชืื ืืช ืืืกืืกืืช ืฉื EV3 ืืืืกืกืช ืขื ืืฉืคื ืืืจืคืืช LabVIEW ืืืืคืฉืจืช ืื ืืืืืืจ ืืืืืจืืชืืื ืืจืืืื ืืืืคื ืืืืืืื: ืคืงืืืืช ืืืฆืืืช ืืืืืงืื ืฉื ืืชื ืืืจืืจ ืืืืืจ.

ืฉืืื ืื ืขืืืืช ืืืื ืืืฉืจ ืฆืจืื ืืืจืืืช ืืืฆื ืื ืืืื ืืืืืจืืชืืื, ืื ืืื ืืื ื ืืชืืืื ืืชืืื ืืืช ืขื ืืกืคืจ ืจื ืฉื ืืืืงืื. ืืื ืฉืืชืจืืืฉืื ืืืคืืื ืืืจืืืื ืืืชืจ, ืฆืจืื ืืขืืืจ ืืชืื ืืช ืขื ืงืื, ืื ืืืืื ืืชืงืฉืื ืืฉืื ืื.
ืืฉ ืืื ืืจืืงืื ืืื, ืืื ืืื ืืื ืืืจืืืช ืฉืงืื ืขืืฉื ืืช ืืืชื ืืืืจ ืืื ืืืืงืื. ืกืืืืช EV3 ืขืืฉื ืืืช ืืืืฆืขืืช ืืื ืืืจืฆืื ืขื MicroPython: ืืืืื ืืืฆืจืื ืืช ืืืชื ืชืืื ืืช ืืกืืืืช ืืชืื ืืช ืืืกืืกืืช ืืืืฆืขืืช ืืืืงืื ืื-Python ื-Visual Studio Code ืฉื ืืืงืจืืกืืคื. ืื ืจืืืื ืฉืฉืชื ืืืจืืื ืขืืืืืช ืืืืชื ืืืคื, ืืื ืงืื ืืื ืืืชืจ ืืคืชืจืื ืืขืืืช ืืืจืืืืช.
ืืขืืจ ืืืืงืจืืคืืืชืื
ืกืืืืช EV3 ืื ืืื ืขื ืืขืื ARM9, ืืืืคืชืืื ืืฉืืืจื ืืืืืื ืืช ืืืจืืืืงืืืจื ืคืชืืื. ืืืืื ืื ืืคืฉืจื ืืชืงื ื ืฉื ืงืืฉืื ืืืืคืืช, ืฉืืืช ืืื ืืืืชื ืชืืื ื ืืขืืืื ืขื MicroPython. ืืื ืืืคืฉืจืช ืฉืืืืฉ ืืคืืืชืื ืืชืื ืืช EV3, ืื ืฉืืืคื ืืช ืืขืืืื ืขื ืืขืจืื ืืงืจืืื ืขืื ืืืชืจ ืืืฉืืืืช ืืืืชืืืช.
ืืื ืืืชืืื ืืขืืื, ืขืืื ืืืืจืื ืืื ืืจืืืก microSD, ืืชืงื ืืืชื ืืชืื EV3 ืืืคืขื ืืืชื. ืืืืจ ืืื ืขืืื ืืืชืงืื ืขืืืจ Visual Studio. ืืืชื ืืืื ืืืชืืื ืืขืืื.
ืชืื ืืช ืืจืืืื ืืจืืฉืื ื-MycroPython

ืขื ืฉืื ื ืืฉื ื ืืกืคืจ ืฉืืขืืจืื ืืฉืืืื ืืืืฉืืื ืืืกืืกืืื ืฉื ืจืืืืืืงื. ืืืืืื ืขื EV3 ืืฆืืืื ืืืืืื ืืช ืืืกืืืืช ืืืฉืืฉืื ืืืืื ืืืช ืืืืื ืืืืืช, ืจืืืืื ืืจืืื ืืืคืขืืื ืืืืื ืืช CNC.
ื ืืงื ืืืืืื ืืืื ืช ืฆืืืจ ืฉื ืืชื ืืืื ืืืชื ืืฆืืืจ ืืืืืืืช ืืฆืืจืืช ืืืืืืืจืืืช. ืืงืจื ืื ืืื ืืจืกื ืคืฉืืื ืฉื ืจืืืืืื ืืจืืชืื ืื ืืจืกืื ืืืืืืจืื ืืืจืื ืืืฆื ื ืืชื ืืืฉืชืืฉ ื-EV3 ืืื ืขื MicroPython ืืื ืืืื ืชืืืืื ืืืช ืกืคืจ. ืืืื ืช ืืฆืืืจ ืืืืื ืื ืืกืื ืืืจืื ืืืขืื ืืืืคืก ืขืืืจ ืืื, ืืื ืื ืจืื ืืืจืช ืืืืจืฉืช ืืืฉืืืื ืืชืืืืื.
ืืขืืืื ื ืฆืืจื:
- ืกื ืืกืืกื ืฉื LEGO MINDSTORMS Education EV3;
- ืืฃ ื ืืืจ ืืจืืืข ืืืื;
- ืกืื ืื ืฆืืขืื ืืื.
ืืจืืืช ืืจืืืื ืขืฆืื ื ืืฆืืช ื , ืื ืืื ืืืืืช ืชืื ืืช.
ืจืืฉืืช, ืืืื ื ืืชืื ืืช ืกืคืจืืืช ืืืื ืื ืฉื EV3:
#!/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
ืืงืื ื ืืช ืืคืืืคืืจืื ืฉืืกืืืืช ืืช ืืืืืช ืืื ืืข ืืืฆืืื B. ืงืืขื ื ืืช ืืืก ืืืืืืืื ืฉื ืชืืืช ืืืืืืืื ืืื-ืฉืืืืช ืขื ืืกืคืจ ืืฉืื ืืื 20-12-28 ืืืชืืื.
turntable_motor = Motor(Port.B, Direction.CLOCKWISE, [20, 12, 28])
ืืฆืื ื ืืช ืื ืื ืื ืืืจืื ืฉื ืืืืืช ืืื ืืข ืืืฆืืื C:
seesaw_motor = Motor(Port.C)
ืืฆืื ื ืืช ืื'ืืจืืกืงืืค ืฉืืืื ืืช ืืืืืช ืืืืื ืฉื ืืกืืืง ืืืฆืืื 2:
gyro_sensor = GyroSensor(Port.S2)
ืืชืงื ื ืืช ืืืืฉื ืืฆืืข ืืคืืจื 3. ืืืืืฉื ืืฉืืฉ ืืืืืื ื ืืืจ ืืื ืืชืืช ืืืืื ืช ืืฉืจืืื:
color_sensor = ColorSensor(Port.S3)
ืืชืงื ื ืืช ืืืืฉื ืืืืข ืืืฆืืื 4. ืืจืืืื ืืชืืื ืืฆืืืจ ืืืฉืจ ืืืืืฉื ื ืืืฅ:
touch_sensor = TouchSensor(Port.S4)
ืื ื ืืืืืจืื ืืช ืืคืื ืงืฆืืืช ืฉืืขืืื ืืืืจืืืื ืืช ืืืืืช:
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)
ืื ื ืืืืืจืื ืคืื ืงืฆืื ืืกืืืื ืืืืืช ืืืืืืช ื ืชืื ื ืื ืืืืืืช ืืกืืืืช:
def pen_holder_turn_to(target_angle):
if target_angle > gyro_sensor.angle():
ืื ืืืืืช ืืืืจื ืืืืื ืืืืืืช ืืืืฉื ืื'ืืจื ืื ืืืืืช, ืืืฉื ืื ืืข ืขื ืืืืื ืืฉืขืื ืืืืืจืืช ืืืืืืช:
turntable_motor.run(70)
while gyro_sensor.angle() < target_angle:
pass
elif target_angle < gyro_sensor.angle():
ืื ืืืืืช ืืืืจื ืงืื ื ืืืืืืช ืืืืฉื ืื'ืืจืืกืงืืค ืื ืืืืืช, ืืื ืื ื ื ืขืื ื ืื ืืืืื ืืฉืขืื:
turntable_motor.run(-70)
while gyro_sensor.angle() > target_angle:
pass
ืขืฆืืจ ืืช ืืคืืืคืืจืื ืืืกืชืืืืช ืืืฉืจ ืืืืขืื ืืืืืืช ืืืขื:
turntable_motor.stop(Stop.BRAKE)
ืื ื ืงืืืขืื ืืช ืืืืงืื ืืืชืืืชื ืฉื ืืืืืช ืืืืงืื ืืขืืืื:
pen_holder_raise()
ืขืืฉืื ืืืืข ืืืืง ืืขืืงืจื ืฉื ืืชืืื ืืช - ืืืืื ืืื ืกืืคืืช. ืจืืฉืืช, ื-EV3 ืืืชืื ืฉืืืืืฉื ืืฆืืขืื ื ืืืื ื ืืืจ ืืื ืื ืจืืืืข ืืชืืื ืืืื, ืืืืืฉื ืืืืข ืืืืืฅ. ืืืืจ ืืื ืืื ืืฆืืืจ ืชืื ืืช, ืืืืจ ืืืฆื ืืืชืืื ืืืืืจ ืขื ืขืฆืื ืฉืื ืืืืชืืื.
ืืืฉืจ ืืืืฉืืจ ืืื ื ืืืื, ื ืืจืืืช ื-LED ืืืงืจ ืืืคืืืช ืืืืืืืช ืืกืื "ืืืืื ืืืื" ืืืฆื ืขื ืืกื ื-LCD:
while True:
brick.light(Color.RED)
brick.display.image(ImageFile.THUMBS_DOWN)
ืื ื ืืืชืื ืื ืขื ืฉืืืืฉื ืืฆืืข ืืืื ืืืื ืื ืืื, ืืืืืจืื ืืช ืฆืืข ื ืืจืืืช ื-LED ืืืจืืง, ืืฆืืืื ืืช ืชืืื ืช ื"ืืืืื ืืืขืื" ืขื ืืกื ื-LCD ืืืืืืืื ืฉืืืืฉืืจ ืืืื ืืคืขืืื:
while color_sensor.color() not in (Color.BLUE, Color.WHITE):
wait(10)
brick.light(Color.GREEN)
brick.display.image(ImageFile.THUMBS_UP)
ืื ื ืืืชืื ืื ืืืืืฆื ืขื ืืืืฉื ืืืืข, ืืงืฆืื ืืืืืฉื ืืืืจืืกืงืืคื ืขืจื ืืืืืช ืฉื 0 ืืืชืืืืื ืืฆืืืจ:
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)
ืื ื ืืจืืืื ืืช ืืืืืง ืืขื ืืืืืืจืื ืืืชื ืืืงืืื ืืืงืืจื:
pen_holder_raise()
pen_holder_turn_to(0)</i>
ืืืื ืืชืืื ื ืืคืฉืืื ืฉืงืืืื ื. ืขืืฉืื ืืืื ื ืคืขืื ืืืชื ืื ืฆืคื ืืจืืืื ืืฉืจืื ืืคืขืืื.
ืื ืืืืืืืช ืืืื ื ืืชื ืืช?

EV3 ืืื ืืื ืืืืื ื ืืงืฆืืขืืช ืืืงืฆืืขืืช STEM ืื ืงืืืช ืื ืืกื ืืืชืืืืืืช ืื ืืกืืืช. ืืืืืื ืฉืืื ืืืื ืืคืชืืจ ืืขืืืช ืืขืฉืืืช, ืืืืื ืฆืืืจืื ื ืืกืืื ืืคืืชืืืื ืืื ืืื ืืืืฆืืจืช ืจืืืืืื ืชืขืฉืืืชืืื, ืืืืืื ืืืื ืืฆืืื ืืืืชืืื, ืืืืื ืชืืื ืืืช ืืื ืชื ืืืืืจืืชืืื, ืืืฉืืื ืืืื ื ืชืื ืืช ืืกืืกืืื.
ืชืืืืช MicroPython ืืืคืืช ืืช ืคืืืคืืจืืช EV3 ืืืชืืืื ืืืื ืื ืชืืืื ื. ืชืืืืืื ืืืืืื ืื ืกืืช ืืช ืขืฆืื ืืชืคืงืื ืืชืื ืชืื ืืืืช ืืฉืคืืช ืืืืืจื ืืืช ืืคืืคืืืจืืืช ืืืืชืจ, ืืืืืจ ืืงืฆืืขืืช ืืงืฉืืจืื ืืชืื ืืช ืืขืืฆืื ืื ืืกื. ืขืจืืืช EV3 ืืจืืืช ืฉืืชืืืช ืงืื ืืื ื ืืคืืืื, ืืชืืื ื ืืช ืืืฉืืืืช ืื ืืกืืืช ืจืฆืื ืืืช ืืขืืืจืืช ืืขืฉืืช ืืช ืืฆืขื ืืจืืฉืื ืืงืจืืช ืฉืืืื ืืืชืืืืืืช ืืื ืืืช. ืืืื ืฉืขืืื ืืืชื ืกืคืจ ืืงืฉืืจืื ืืืื ืื, ืืื ื... ืืืืืจื ืืืจืื. ืื ืืชืืจืื ืืคืืจืื ืืืื ืืืืื ืืืืช ืืคืืชืืืช ืืขืช ืืืฆืืข ืืฉืืืืช ืืกืืืืืช, ืืืืฆื ืืืืืื ืืืืช ืื ืจืืฉืืช ืงืฉืืจืืช ืืชืงื ื ืืืืจืื.
ืืงืืจ: www.habr.com
