PyMODI는 럭스로보의 교구인 MODI 사용을 위한 파이썬 API입니다. MODI 모듈은 CAN 프로토콜을 사용하여 작동하는 전자 모듈이며, PyMODI 패키지를 이용하여 간단한 파이썬 코딩만으로 모듈을 작동시킬 수 있습니다. PyMODI를 사용하여 당신만의 MODI 크리에이션을 만들거나 리스트에 있는 여러 크리에이션들을 체험해보세요!
PyMODI로 갤러그 게임을 즐겨보세요!
이 크리에이션은 MODI의 자이로 모듈을 사용하여 갤러그 제트기를 직접 조종하는 경험을 할 수 있습니다.
소스코드를 보고싶다면 여기를 클릭하세요!
PyMODI로 닷지 게임을 즐겨보세요!
이 크리에이션은 자이로모듈을 활용하여 직접 케릭터를 움직여 떨어지는 박스들을 피하는 TUI 게임을 제공합니다.
소스코드를 보고싶다면 여기를 클릭하세요!
원하는 색을 추출해보세요!
MODI 의 환경모듈과 머신러닝을 함께 활용하면 RGB 데이터를 이용하여 어떤 색이든 추출할 수 있는 크리에이션을 만들 수 있습니다.
소스코드를 보고싶다면 여기를 클릭하세요!
새로운 PyMODI 크리에이션을 만들어 주세요!
Examples 폴더에 당신의 작품을 넣고 PR을 보내주세요!
기발한 작품은 새로운 크리에이션 리스트에 추가될 것입니다 :)
모듈 분류 | 설정(Setup) 모듈 |
---|---|
모듈 설명 |
네트워크 모듈은 유선 또는 무선으로 이용할 수 있습니다. 유선연결은 USB를 이용해 PC와 네트워크 모듈을 연결합니다. 무선연결은 블루투스나 Wi-FI를 이용한 연결이나 모바일 장치와 연결할 때 사용합니다. |
주요 기능 | 1. 모듈과 PC 연결 2. 모듈과 스마트폰 연결 모드 (MODI Play Application) 3. 모듈과 모듈간 연결 모드 |
모듈 크기 | 23.8*47.8*16.1(mm) |
모듈 중량 | 12g |
통신 사양 | 블루투스(BLE)버전 4.1v 와이파이 통신 대기 802.11n(2.4GHz),up to 150 Mbps |
모듈 단자 | Micro-B USB port X1 Magnetic connector X3 |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'network'라는 변수에 모듈 객체를 저장합니다.
network = bundle.networks[0]
"""
계속하기 전에 BLE 연결을 통해 MODI Play를 사용하여 네트워크 모듈을 모바일 장치와
페어링했는지 확인하십시오.
"""
# MODI Play 버튼의 누름 여부를 반환합니다. 눌렸다면 True를 반환합니다.
network_button_pressed = network.button_pressed
print('network_button_pressed:', network_button_pressed)
# MODI Play 다이얼 의 값을 0 ~ 100 사이의 값으로 환산하여 반환합니다.
network_dial = network.dial
print('network_dial:', network_dial)
# 조이스틱의 버튼을 눌렀을때 각각 '위' , '아래' , '왼쪽' , '오른쪽'으로 표현해줍니다.
# 눌리지 않을경우 None을 반환합니다.
network_joystick = network.joystick
print('network_joystick:', network_joystick)
# MODI Play의 왼쪽 슬라이더 값을 0 ~ 100 사이의 값으로 환산하여 반환합니다.
network_left_slider = network.left_slider
print('network_left_slider:', network_left_slider)
# MODI Play의 오른쪽 슬라이더 값을 0 ~ 100 사이의 값으로 환산하여 반환합니다.
network_right_slider = network.right_slider
print('network_right_slider:', network_right_slider)
# MODI Play의 타이머가 끝났을 경우 True를 반환합니다.
network_timer = network.timer
print('network_timer:', network_timer)
# MODI Play의 버저를 울립니다.
network.buzzer_on()
# 2초동안 버저를 울립니다.
time.sleep(2)
# MODI Play 버저의 전원을 끕니다.
network.buzzer_off()
# MODI Play 카메라를 활용하여 사진을 찍습니다.
network.take_picture()
모듈 분류 | 입력(Input) 모듈 |
---|---|
모듈 설명 | 버튼 모듈은 버튼의 눌림을 감지합니다. 한 번 클릭, 두 번 클릭, 눌려져 있는 상태를 알 수 있으며, 토글을 사용해 ON 상태 또는 OFF 상태가 유지되도록 할 수 있습니다. |
주요 기능 | 1. 한 번 클릭 감지 2. 두 번 클릭 감지 3. 눌려져 있는 상태 감지 4. 눌릴 때마다 상태 전환 (ON/OFF) |
모듈 크기 | 23.8*47.8*16.1(mm) |
모듈 중량 | 12g |
연결 단자 | Magnetic connector X4 |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'button'라는 변수에 모듈 객체를 저장합니다.
button = bundle.buttons[0]
# 버튼의 눌림 여부를 True / False로 반환하여 알려줍니다.
button_clicked = button.clicked
print('button_clicked:', button_clicked)
# 버튼이 연속으로 두 번 눌렸을 경우, True를 반환합니다.
button_double_clicked = button.double_clicked
print('button_double_clicked:', button_double_clicked)
# 버튼이 눌렸을 때 True를 반환합니다.
button_pressed = button.pressed
print('button_pressed:', button_pressed)
# 버튼을 누를 때마다 반환할 True / False 의 상태가 바뀝니다.
button_toggled = button.toggled
print('button_toggled:', button_toggled)
모듈 분류 | 입력(Input) 모듈 |
---|---|
모듈 설명 |
다이얼 모듈은 모듈 손잡이의 회전을 이용합니다. 회전한 각도를 측정하거나 회전하는 속도를 측정합니다. |
주요 기능 | 1. 회전 각도 측정 2. 회전 속도 측정 |
모듈 크기 | 23.8*23.8*24.0(mm) |
모듈 중량 | 13g |
모듈 단자 | Magnetic connector X4 |
센서 사양 | 동작범위 0° ~ 235° (± 5°) |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'dial'라는 변수에 모듈 객체를 저장합니다.
dial = bundle.dials[0]
# 다이얼의 각도를 0 ~ 100 사이의 값으로 환산하여 반환합니다.
dial_degree = dial.degree
print('dial_degree:', dial_degree)
# 다이얼의 회전 속도를 -100 ~ 100 사이의 값으로 환산하여 반환합니다.
dial_turnspeed = dial.turnspeed
print('dial_turnspeed:', dial_turnspeed)
모듈 분류 | 입력(Input) 모듈 |
---|---|
모듈 설명 | 환경 모듈은 반도체 센서를 사용하여 주변 물리 변화와 색을 감지합니다. 주변 물리 변화 값인 온도, 습도, 조도 그리고 색 감지를 위한 3원색 (R, G, B)을 측정합니다. |
주요 기능 | 1. 온도 측정 2. 습도 측정 3. 조도 측정 4. 3원색(R, G, B) 측정 |
모듈 크기 | 23.8*23.8*16.1(mm) |
모듈 중량 | 12g |
모듈 단자 | Magnetic connector X4 |
센서 사양 |
온도 -10℃ ~ 85℃ 습도 0 ~ 90% RH 조도 0 ~ 40,000 Lux 색상 0 ~ 40,000 Lux *일부 값의 경우 체감도가 낮아 %로 표기될 수 있습니다. *제품과 센서가 붙어있어 측정 시 측정 하려는 물체와 모듈의 적절한 거리가 요구 됩니다. |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'env'라는 변수에 모듈 객체를 저장합니다.
env = bundle.envs[0]
# 주변환경의 명도를 0 ~ 100 사이의 값으로 환산하여 반환합니다.
env_brightness = env.brightness
print('env_brightness:', env_brightness)
# 주변환경의 습도를 0 ~ 100 사이의 값으로 환산하여 반환합니다.
env_humidity = env.humidity
print('env_humidity:', env_humidity)
# 주변환경의 온도를 0 ~ 100 사이의 값으로 환산하여 반환합니다.
env_temperature = env.temperature
print('env_temperature:', env_temperature)
# 주변 빛의 red 비율을 0 ~ 100 사이의 값으로 환산하여 반환합니다.
env_red = env.red
print('env_red:', env_red)
# 주변 빛의 green 비율을 0 ~ 100 사이의 값으로 환산하여 반환합니다.
env_green = env.green
print('env_green:', env_green)
# 주변 빛의 blue 비율을 0 ~ 100 사이의 값으로 환산하여 반환합니다.
env_blue = env.blue
print('env_blue:', env_blue)
모듈 분류 | 입력(Input)모듈 |
---|---|
모듈 설명 | 자이로 모듈은 지자기 중력 가속도를 이용합니다. 모듈 내 센서의 기울기 각도, 진동량, 그리고 각 축에 대한 가속도와 각속도를 측정합니다. |
주요 기능 | 1. 회전 각도 측정 (Roll, Pitch, Yaw) 2. 가속도 측정 (X, Y, Z codeinates) 3. 각속도 측정 (X, Y, Z codeinates) 4. 진동 량 측정 |
모듈 크기 | 23.8*23.8*16.1(mm) |
모듈 중량 | 12g |
모듈 단자 | Magnetic connector X4 |
센서 사양 |
측정 가능 범위 (X, Y, Z): -180° ~ 180° (± 5°) Z 축의 경우 센서의 특성상 자성에 의해 오차가 발생할 수 있습니다. |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'gyro'라는 변수에 모듈 객체를 저장합니다.
gyro = bundle.gyros[0]
# 횡축을 중심으로 회전하는 정도의 값을 -180 ~ 180 사이로 환산하여 반환합니다.
gyro_pitch = gyro.pitch
print('gyro_pitch:', gyro_pitch)
# 종축을 중심으로 회전하는 정도의 값을 -180 ~ 180 사이로 환산하여 반환합니다.
gyro_roll = gyro.roll
print('gyro_roll:', gyro_roll)
# 수직축을 중심으로 회전하는 정도의 값을 -180 ~ 180 사이로 환산하여 반환합니다.
gyro_yaw = gyro.yaw
print('gyro_yaw:', gyro_yaw)
# x축의 각속도 값을 -100 ~ 100 사이로 환산하여 반환합니다.
gyro_angular_vel_x = gyro.angular_vel_x
print('gyro_angular_vel_x:', gyro_angular_vel_x)
# y축의 각속도 값을 -100 ~ 100 사이로 환산하여 반환합니다.
gyro_angular_vel_y = gyro.angular_vel_y
print('gyro_angular_vel_y:', gyro_angular_vel_y)
# z축의 각속도 값을 -100 ~ 100 사이로 환산하여 반환합니다.
gyro_angular_vel_z = gyro.angular_vel_z
print('gyro_angular_vel_z :', gyro_angular_vel_z)
# x축의 가속도 값을 -100 ~ 100 사이로 환산하여 반환합니다.
gyro_acceleration_x = gyro.acceleration_x
print('gyro_acceleration_x:', gyro_acceleration_x)
# y축의 가속도 값을 -100 ~ 100 사이로 환산하여 반환합니다.
gyro_acceleration_y = gyro.acceleration_y
print('gyro_acceleration_y :', gyro_acceleration_y)
# z축의 가속도 값을 -100 ~ 100 사이로 환산하여 반환합니다.
gyro_acceleration_z = gyro.acceleration_z
print('gyro_acceleration_z:', gyro_acceleration_z)
# 진동하는 정도를 0 ~ 100 사이의 값으로 환산하여 반환합니다.
gyro_vibration = gyro.vibration
print('gyro_vibration:', gyro_vibration)
모듈 분류 | 입력(Input) 모듈 |
---|---|
모듈 설명 | 적외선 모듈은 모듈에서 방사한 적외선이 반사되어 돌아오는 양을 감지합니다. 반사된 적외선 양에 따라 근접도를 측정합니다. |
주요 기능 |
1. 근접도 측정 |
모듈 크기 | 23.8*23.8*21.5(mm) |
모듈 중량 | 12g |
모듈 단자 | Magnetic connector X2 |
센서 사양 |
측정 가능 범위 약 4 ~ 30cm 이내 (백색 종이 기준). *빛의 특성상 반사면의 굴곡이나 반사율, 색상에 따라 측정 량이 다를 수 있습니다. |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'ir'라는 변수에 모듈 객체를 저장합니다.
ir = bundle.irs[0]
# 측정된 근접도 값을 0 ~ 100 사이로 환산하여 반환합니다.
ir_proximity = ir.proximity
print('ir_proximity:', ir_proximity)
모듈 분류 | 입력(Input) 모듈 |
---|---|
모듈 설명 | 마이크 모듈은 소리에 의한 공기 압력변화를 이용합니다. 주변의 소리의 크기나 주파수를 측정합니다. |
주요 기능 | 1. 소리 크기 측정 2. 소리 주파수 측정 |
모듈 크기 | 23.8*23.8*16.4(mm) |
모듈 중량 | 11g |
모듈 단자 | Magnetic connector X4 |
센서 사양 |
측정 가능 볼륨 0 ~ 100% 측정 가능 진동수 50 ~ 400 Hz |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'mic'라는 변수에 모듈 객체를 저장합니다.
mic = bundle.mics[0]
# 주변 소리의 주파수를 float값으로 반환합니다.
mic_frequency = mic.frequency
print('mic_frequency:', mic_frequency)
# 주변 소리의 크기를 0 ~ 100 사이의 값으로 환산하여 반환합니다.
mic_volume = mic.volume
print('mic_volume:', mic_volume)
모듈 분류 | 입력(Input) 모듈 |
---|---|
모듈 설명 | 초음파 모듈은 사람이 들을 수 없는 20KHz이상의 초음파를 이용합니다. 모듈에서 방사한 고주파 소리가 물체에 반사되어 돌아오는 시간을 측정해 거리를 계산합니다. |
주요 기능 | 1. 거리 측정 |
모듈 크기 | 23.8*47.8*18.3(mm) |
모듈 중량 | 18g |
모듈 단자 | Magnetic connector X3 |
센서 사양 |
측정 가능 범위 50 ~ 450 cm *방사형 센서이기 때문에 센서로부터 직각거리에 있는 거리를 측정하거나 측정에 방해되는 물체가 측정하려는 거리 내에서 간섭하면 오차가 발생할 수 있습니다. *물체 감지가 안 될 정도의 작은 물체를 거리를 측정할 경우 오차가 발생할수 있습니다. |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'ultrasonic'라는 변수에 모듈 객체를 저장합니다.
ultrasonic = bundle.ultrasonics[0]
# 대상과의 거리를 측정한 값을 0 ~ 100 사이로 환산하여 반환합니다.
ultrasonic_distance = ultrasonic.distance
print('ultrasonic_distance:', ultrasonic_distance)
모듈 분류 | 출력(Output) 모듈 |
---|---|
모듈 설명 | 디스플레이 모듈은 사용자에게 그림, 글자와 같은 다양한 정보를 화면으로 전달합니다. 사용자가 그린 그림이나, 글자 또는 모듈 정보 등을 화면에 표시할 수 있습니다. |
주요 기능 | 1. 픽셀 단위의 그림 표현 2. 연결된 모듈의 정보 표현 |
모듈 크기 | 23.8*23.8*16.1(mm) |
모듈 중량 | 12g |
모듈 단자 | Magnetic connector X3 |
출력 범위 |
해상도 64 * 48 (pixel) |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'display'라는 변수에 모듈 객체를 저장합니다.
display = bundle.displays[0]
# 원하는 문자 혹은 문자열을 디스플레이 모듈에 출력시킵니다.
display.text = 'Hello MODI!'
"""
변수 값을 좌표상의 (pos_x, pos_y) 의 위치에 출력시킵니다.
pos_x, pos_y 의 값은 0 ~ 255 사이의 값을 출력시킬 수 있습니다.
파라미터 :
변수(variable): 출력시킬 숫자
position_x(pos_x): x축 좌표
position_y(pos_y): y축 좌표
"""
pos_x = 20
pos_y = 30
display.show_variable(0, pos_x, pos_y)
# 디스플레이 모듈에서 출력중인 모든 데이터를 지웁니다.
display.clear()
모듈 분류 | 출력(Output) 모듈 |
---|---|
모듈 설명 |
LED 모듈은 전기 신호를 빛으로 바꿔주는 반도체 소자입니다. 빛의 3원색인 R, G, B를 조합하여 65,000 여가지 색상의 빛을 만들어 냅니다. |
주요 기능 |
1. 4가지 색 표현 (빨,초,파,흰,꺼짐) 2. 빨강, 초록, 파랑 조합을 통한 65,000여개의 색상 표현 |
모듈 크기 | 23.8*23.8*16.1(mm) |
모듈 중량 | 11g |
모듈 단자 | Magnetic connector X4 |
센서 사양 |
밝기(R, G, B) 180, 50, 120 mcd (2.5V 기준) *시력에 손상을 줄 수 있으니 사람의 눈에 LED를 직접 비추지 마십시오. |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'led'라는 변수에 모듈 객체를 저장합니다.
led = bundle.leds[0]
# led모듈의 red값을 0 ~ 100 사이의 값으로 설정하여 출력합니다.
led.red = 100
# led모듈의 green값을 0 ~ 100 사이의 값으로 설정하여 출력합니다.
led.green = 100
# led모듈의 blue값을 0 ~ 100 사이의 값으로 설정하여 출력합니다.
led.blue = 100
# 모듈의 전체 rgb값을 설정하여 출력합니다.
led.rgb = 10, 0, 60
# rgb값을 모두 100으로 설정한 상태에서 출력합니다.
led.turn_on()
# rgb값을 모두 0으로 설정합니다.
led.turn_off()
모듈 분류 | 출력(Output) 모듈 |
---|---|
모듈 설명 | 모터 모듈은 전기 신호를 모터 모듈로 보내서 회전 운동을 시켜주는 모듈입니다. 모터가 회전하는 속도, 각도 그리고 토크를 설정할 수 있습니다. |
주요 기능 | 1. 회전각도 출력 2. 속도 출력 3. 토크 출력 |
모듈 크기 | 23.8*23.8*16.1(mm) |
모듈 중량 | 12g |
모듈 단자 |
Magnetic connector X3 6핀 Port X2 |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'motor'라는 변수에 모듈 객체를 저장합니다.
motor = bundle.motors[0]
# 두 채널의 모터가 돌아가는 정도를 0 ~ 100 사이의 값으로 설정하여 동작시킵니다.
motor.degree = 30, 90
# 첫번째 채널의 모터가 돌아가는 정도를 0 ~ 100 사이의 값으로 설정하여 동작시킵니다.
motor.first_degree = 30
# 두번째 채널의 모터가 돌아가는 정도를 0 ~ 100 사이의 값으로 설정하여 동작시킵니다.
motor.second_degree = 90
# 두 채널의 모터가 돌아가는 속도를 -100 ~ 100 사이의 값으로 설정합니다.
# 설정 값이 -일 경우, 역으로 회전합니다.
motor.speed = 50, 100
# 첫번째 채널의 모터가 돌아가는 속도를 -100 ~ 100 사이의 값으로 설정합니다.
motor.first_speed = 50
# 두번째 채널의 모터가 돌아가는 속도를 -100 ~ 100 사이의 값으로 설정합니다.
motor.second_speed = 10
모듈 분류 | 출력(Output) 모듈 |
---|---|
모듈 설명 | 스피커 모듈은 전기 신호를 소리 신호로 변환 해줍니다. 피아노 건반 UI를 사용해 음을 선택하거나 원하는 주파수를 직접 입력하여 소리를 낼 수 있습니다. |
주요 기능 | 1. 주파수에 해당하는 소리 출력 |
모듈 크기 | 23.8*23.8*16.1(mm) |
모듈 중량 | 12g |
모듈 단자 | Magnetic connector X4 |
센서 사양 | 출력 가능 진동수 17 ~ 10,000 Hz |
import modi
import time
# MODI 모듈의 번들을 연결하기 위해, MODI 객체를 인스턴스화합니다.
bundle = modi.MODI()
# 'speaker'라는 변수에 모듈 객체를 저장합니다.
speaker = bundle.speakers[0]
# 스피커의 주파수와 볼륨 크기를 0 ~ 100 사이의 값으로 설정하여 출력합니다.
# 220Hz 의 주파수와 100의 볼륨크기로 설정하여 스피커를 출력시킵니다.
speaker.tune = 220, 100
# 스피커의 주파수를 임의의 값으로 설정한 후, 출력합니다.
speaker.frequency = 550
# 스피커의 볼륨을 0 ~ 100 사이의 값으로 설정하여 출력합니다.
speaker.volume = 100
# 스피커의 동작을 정지합니다.
speaker.turn_off()