메인
home
소프트웨어
home
🛝

티처블머신 AI 연동 (1)

연동사이트

티처블 머신 연동 코드

main.py
from machine import Pin, PWM import sys import uselect from time import sleep # 서보모터를 GP3 (수평)GP5 (수직)에 초기화 servo_horiz = PWM(Pin(3)) # 수평 방향 서보모터 servo_vert = PWM(Pin(5)) # 수직 방향 서보모터 # 서보모터의 주파수를 50Hz로 설정 (표준 서보모터 주파수) servo_horiz.freq(50) servo_vert.freq(50) # 최소 및 최대 듀티 사이클 값 정의 (0도와 180도에 해당) min_duty = 1638 # 0도에 해당하는 듀티 사이클 (1ms 펄스 폭) max_duty = 8192 # 180도에 해당하는 듀티 사이클 (2ms 펄스 폭) def angle_to_duty(angle): # 주어진 각도(0~180)를 듀티 사이클 값으로 변환하는 함수 return int(min_duty + (max_duty - min_duty) * angle / 180) # 초기 각도를 90도로 설정 (중앙 위치) angle_horiz = 90 # 수평 방향 초기 각도 angle_vert = 90 # 수직 방향 초기 각도 # 서보모터를 초기 위치로 설정 servo_horiz.duty_u16(angle_to_duty(angle_horiz)) servo_vert.duty_u16(angle_to_duty(angle_vert)) # 비차단(non-blocking) 입력을 위한 폴링 객체 설정 poll = uselect.poll() poll.register(sys.stdin, uselect.POLLIN) print("서보모터 제어: 시리얼 통신으로 'class a' 또는 'class b'를 포함한 메시지를 보내세요. 종료하려면 Ctrl+C를 누르세요.") try: while True: # 입력 이벤트가 있는지 확인 events = poll.poll(0) if events: cmd = sys.stdin.readline().strip() # 빈 명령은 무시 if not cmd: continue if '1' in cmd: # 수평 서보모터를 10도로 이동했다가 90도로 복귀 angle_horiz = 10 servo_horiz.duty_u16(angle_to_duty(angle_horiz)) print(f"수평 서보모터를 {angle_horiz}도로 이동합니다") sleep(1) # 1초 대기 angle_horiz = 90 servo_horiz.duty_u16(angle_to_duty(angle_horiz)) print(f"수평 서보모터를 {angle_horiz}도로 복귀합니다") elif '2' in cmd: # 수직 서보모터를 10도로 이동했다가 90도로 복귀 angle_vert = 10 servo_vert.duty_u16(angle_to_duty(angle_vert)) print(f"수직 서보모터를 {angle_vert}도로 이동합니다") sleep(1) # 1초 대기 angle_vert = 90 servo_vert.duty_u16(angle_to_duty(angle_vert)) print(f"수직 서보모터를 {angle_vert}도로 복귀합니다") else: # 유효하지 않은 명령 처리 print("잘못된 명령입니다. 'class a' 또는 'class b'를 포함한 메시지를 보내세요.") sleep(0.1) # CPU 사용량을 줄이기 위한 짧은 지연 except KeyboardInterrupt: # 프로그램 종료 시 서보모터 비활성화 servo_horiz.deinit() servo_vert.deinit() print("\n서보모터를 비활성화하고 프로그램을 종료합니다.")
C
복사