LEGO MINDSTORMS Education EV3 + MicroPython: ์„ฑ์ธ ์–ธ์–ด๋กœ ์–ด๋ฆฐ์ด ๊ฑด์„ค ์„ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์•ˆ๋…•, ํ•˜๋ธŒ๋ฅด! ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋งํ•œ LEGO MINDSTORMS Education EV3 ํ”Œ๋žซํผ์— ๋Œ€ํ•˜์—ฌ. ์ด ํ”Œ๋žซํผ์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•˜๊ณ , STEAM ๊ธฐ์ˆ ์„ ๊ฐœ๋ฐœํ•˜๋ฉฐ, ๊ณตํ•™์  ์‚ฌ๊ณ ๋ฅผ ํ˜•์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ญํ•™๊ณผ ๋™์—ญํ•™์„ ์—ฐ๊ตฌํ•˜๋Š” ์‹คํ—˜์‹ค ์ž‘์—…์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ๊ณ  ๋ธ”๋ก์œผ๋กœ ๋งŒ๋“  ์‹คํ—˜์‹ค ์Šคํƒ ๋“œ์™€ ๋ฐ์ดํ„ฐ ๊ธฐ๋ก ๋ฐ ์ฒ˜๋ฆฌ์šฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ์‹คํ—˜์„ ๋”์šฑ ํฅ๋ฏธ๋กญ๊ณ  ์‹œ๊ฐ์ ์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋ฉฐ, ์•„์ด๋“ค์ด ๋ฌผ๋ฆฌํ•™์„ ๋” ์ž˜ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•™์ƒ๋“ค์€ ๋…น๋Š”์  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์•ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ •๋ฆฌํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์‹œ์ž‘์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ด ํ‚คํŠธ๋ฅผ MicroPython ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์œผ๋กœ ํ™•์žฅํ•˜์—ฌ ๋กœ๋ด‡๊ณตํ•™์„ ๊ฐ€๋ฅด์น˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

LEGO MINDSTORMS Education EV3 + MicroPython: ์„ฑ์ธ ์–ธ์–ด๋กœ ์–ด๋ฆฐ์ด ๊ฑด์„ค ์„ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

EV3๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์šฐ์„ธ์š”

ํ˜„๋Œ€์˜ ํ•™์ƒ๋“ค์€ ๋‹ค์ฑ„๋กœ์šด ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ์‹ถ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์ฝ˜์†”์— ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ์ง€๋ฃจํ•ดํ•˜๊ณ , ๋‹ค์ฑ„๋กœ์šด ๊ทธ๋ž˜ํ”„์™€ ์ฐจํŠธ๋ฅผ ๋ณด๊ณ , ๋ช…๋ น์„ ๋”ฐ๋ฅด๊ณ  ์›€์ง์ด๋Š” ์‹ค์ œ ๋กœ๋ด‡์„ ๋งŒ๋“ค๊ณ  ์‹ถ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ฝ”๋“œ๋Š” ์–ด๋ฆฐ์ด์—๊ฒŒ๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•ด ๋ณด์ด๋ฏ€๋กœ, ์ข€ ๋” ์‰ฌ์šด ๊ฒƒ๋ถ€ํ„ฐ ๋ฐฐ์šฐ๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

EV3 ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์€ LabVIEW ๊ทธ๋ž˜ํ”ฝ ์–ธ์–ด์— ๊ธฐ๋ฐ˜ํ•˜๋ฉฐ, ๋กœ๋ด‡์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹œ๊ฐ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์€ ๋Œ์–ด์„œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ธ”๋ก์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

LEGO MINDSTORMS Education EV3 + MicroPython: ์„ฑ์ธ ์–ธ์–ด๋กœ ์–ด๋ฆฐ์ด ๊ฑด์„ค ์„ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ด ๋ฐฉ๋ฒ•์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ด๋–ป๊ฒŒ ๊ตฌ์ถ•๋˜๋Š”์ง€ ๋ณด์—ฌ์ค„ ๋•Œ ํšจ๊ณผ์ ์ด์ง€๋งŒ, ๋งŽ์€ ์ˆ˜์˜ ๋ธ”๋ก์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋” ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ „ํ™˜ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด ๋‹จ๊ณ„๋Š” ์–ด๋ฆฐ์ด์—๊ฒŒ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. 

์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์š”๋ น์ด ์žˆ๋Š”๋ฐ, ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋ธ”๋ก๊ณผ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. EV3 ํ™˜๊ฒฝ์€ MicroPython๊ณผ์˜ ํ†ตํ•ฉ ๋•๋ถ„์— ์ด๋Ÿฌํ•œ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์–ด๋ฆฐ์ด๋“ค์€ ๊ธฐ๋ณธ ๋ธ”๋ก ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ๊ณผ Microsoft Visual Studio Code์˜ Python์—์„œ ๋™์ผํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ, ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ๋Š” ์ฝ”๋“œ๊ฐ€ ๋” ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

MicroPython์œผ๋กœ ์ „ํ™˜

EV3 ํ™˜๊ฒฝ์€ ARM9 ํ”„๋กœ์„ธ์„œ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž๋“ค์€ ์˜๋„์ ์œผ๋กœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐœ๋ฐฉํ˜•์œผ๋กœ ๋‚จ๊ฒจ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์†”๋ฃจ์…˜์„ ํ†ตํ•ด ๋Œ€์ฒด ํŽŒ์›จ์–ด๋ฅผ ์ถœ์‹œํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ MicroPython์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฏธ์ง€์˜€์Šต๋‹ˆ๋‹ค. Python์„ ์‚ฌ์šฉํ•˜์—ฌ EV3๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ‚คํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์ด ์‹ค์ œ ์ž‘์—…์— ๋”์šฑ ๊ฐ€๊นŒ์›Œ์ง‘๋‹ˆ๋‹ค. 

์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. EV3 MicroPython ์ด๋ฏธ์ง€ ๋ชจ๋“  microSD ์นด๋“œ์— EV3 ๋ธŒ๋ฆญ์„ ์„ค์น˜ํ•˜๊ณ  ์ „์›์„ ์ผญ๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ์—๋Š” ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ ํ™•์žฅ Visual Studio์šฉ. ๊ทธ๋ฆฌ๊ณ  ์ผ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

MycroPython์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ๋กœ๋ด‡ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ

LEGO MINDSTORMS Education EV3 + MicroPython: ์„ฑ์ธ ์–ธ์–ด๋กœ ์–ด๋ฆฐ์ด ๊ฑด์„ค ์„ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์šฐ๋ฆฌ์— ์˜จ๋ผ์ธ์œผ๋กœ ๋กœ๋ด‡๊ณตํ•™์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ตํžˆ๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ˆ˜์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. EV3 ๋ชจ๋ธ์€ ์–ด๋ฆฐ์ด์—๊ฒŒ ์ž์œจ์ฃผํ–‰ ์ž๋™์ฐจ, ๊ณต์žฅ ์กฐ๋ฆฝ ๋กœ๋ด‡, CNC ๊ธฐ๊ณ„์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. 

ํŒจํ„ด๊ณผ ๊ธฐํ•˜ํ•™์  ๋ชจ์–‘์„ ๊ทธ๋ฆฌ๋„๋ก ๊ฐ€๋ฅด์น  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๋Š” ๊ธฐ๊ณ„๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์ผ€์ด์Šค๋Š” ์„ฑ์ธ์šฉ ๋กœ๋ด‡ ์šฉ์ ‘๊ธฐ๋‚˜ ๋ฐ€๋ง ๋จธ์‹ ์˜ ๋‹จ์ˆœํ™”๋œ ๋ฒ„์ „์ด๋ฉฐ, EV3๋ฅผ MicroPython๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์ƒ๋“ค์—๊ฒŒ ๊ฐ€๋ฅด์น˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๋Š” ๊ธฐ๊ณ„๋Š” ์•„๋น ๋ฅผ ์œ„ํ•ด ์ธ์‡„ ํšŒ๋กœ ๊ธฐํŒ์— ๊ตฌ๋ฉ์„ ํ‘œ์‹œํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ์ˆ˜ํ•™์  ๊ณ„์‚ฐ์ด ํ•„์š”ํ•œ ๋˜ ๋‹ค๋ฅธ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.

์ผ์„ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • LEGO MINDSTORMS Education EV3 ๊ธฐ๋ณธ ์„ธํŠธ; 
  • ํฐ ์ •์‚ฌ๊ฐํ˜• ์ข…์ด ํ•œ ์žฅ;
  • ์ƒ‰๊น”์žˆ๋Š” ๋งˆ์ปค. 

๋กœ๋ด‡ ์ž์ฒด์˜ ์กฐ๋ฆฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ช…๋ น, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ €, EV3 Brick Library๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

#!/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-XNUMX๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

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>

์šฐ๋ฆฌ๊ฐ€ ์–ป์€ ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋ฐœ์‚ฌํ•˜์—ฌ ๋กœ๋ด‡ ์„ค๊ณ„์ž๊ฐ€ ์‹ค์ œ๋กœ ํ™œ๋™ํ•˜๋Š” ๋ชจ์Šต์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

์ด๋Ÿฐ ์˜ˆ๋“ค์€ ๋ฌด์—‡์„ ๋ณด์—ฌ์ฃผ๋‚˜์š”?

LEGO MINDSTORMS Education EV3 + MicroPython: ์„ฑ์ธ ์–ธ์–ด๋กœ ์–ด๋ฆฐ์ด ๊ฑด์„ค ์„ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

EV3๋Š” STEM ๋ถ„์•ผ ์ง„๋กœ ์ƒ๋‹ด ๋„๊ตฌ์ด์ž ์—”์ง€๋‹ˆ์–ด๋ง ๋ถ„์•ผ ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ฆฐ์ด๋Š” ๊ธฐ์ˆ  ๊ฐœ๋ฐœ๊ณผ ์‚ฐ์—…์šฉ ๋กœ๋ด‡ ์ œ์ž‘์— ๋Œ€ํ•œ ๊ฒฝํ—˜์„ ์–ป๊ณ , ์‹ค์ œ ์ƒํ™ฉ์„ ๋ชจ๋ธ๋งํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์„ ์ดํ•ดํ•˜๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ถ„์„ํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์šฐ๋ฉฐ, ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ์กฐ๋ฅผ ์ˆ™๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

MicroPython ์ง€์›์œผ๋กœ EV3 ํ”Œ๋žซํผ์€ ๊ณ ๋“ฑํ•™๊ต ๊ต์œก์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํ•™์ƒ๋“ค์€ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํ˜„๋Œ€ ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋˜์–ด ๋ณด๊ณ , ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์—”์ง€๋‹ˆ์–ด๋ง ์„ค๊ณ„์™€ ๊ด€๋ จ๋œ ์ง์—…์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. EV3 ํ‚คํŠธ๋Š” ์ฝ”๋”ฉ์ด ๋ฌด์„ญ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ณ , ์–ด๋ฆฐ์ด๋“ค์ด ์‹ฌ๊ฐํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ๊ณผ์ œ์— ๋Œ€๋น„ํ•˜๋„๋ก ๋•๊ณ , ๊ธฐ์ˆ  ์ „๋ฌธ ๋ถ„์•ผ๋ฅผ ์Šต๋“ํ•˜๊ธฐ ์œ„ํ•œ ์ฒซ ๊ฑธ์Œ์„ ๋‚ด๋”›๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•™๊ต์—์„œ ์ผํ•˜๊ณ  ๊ต์œก๊ณผ ๊ด€๋ จ๋œ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์—… ํ”„๋กœ๊ทธ๋žจ ๋ฐ ๊ต์œก ์ž๋ฃŒ. ๊ทธ๋“ค์€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์–ด๋–ค ๊ธฐ์ˆ ์ด ๊ฐœ๋ฐœ๋˜๋Š”์ง€, ์Šต๋“ํ•œ ๊ธฐ์ˆ ์ด ํ•™์Šต ๊ธฐ์ค€๊ณผ ์–ด๋–ป๊ฒŒ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster