개발/Arduino

[Arduino] 조이스틱 터틀 그림판 (+파이썬)

Hyunsun 2021. 12. 17. 14:30
728x90

조이스틱을 활용한 터틀 그림판을 만들어 보았습니다.

Python turtle 이란
터틀(거북이) 그래픽은 아이들에게 프로그래밍을 소개하는 데 널리 사용되던 방법입니다.
거북이가 들고 다니는 펜은 활성화하거나, 색상을 설정하거나, 너비를 설정하여 제어할 수도 있습니다.

사용 센서
사용된 센서는 총 3가지로 INPUT 센서 2가지 OUTPUT 센서 1가지 입니다.

INPUT 센서는 조이스틱과 스위치 센서 2개 입니다.
조이스틱은 거북이를 움직이고 조이스틱 스위치는 그림판을 초기화 합니다.
스위치 1개는 거북이 펜 활성화 버튼, 나머지 1개는 펜 색상 변경 버튼 입니다.

OUTPUT센서는 RGB LED를 사용하였습니다.
버튼을 눌러 색상을 변경할 때 RGB LED에 색상을 출력해줍니다.


회로도
조이스틱 센서가 없어서 그림으로 그려넣었습니다.


연결 사진

 

 

[Arduino] 파이썬에서 아두이노 LED 제어

파이썬, 아두이노 설치 방법 [Python] 파이썬 설치하기 파이썬 설치 파이썬 홈페이지 접속 후 다운로드 클릭 (https://www.python.org/) Welcome to Python.org The official home of the Python Programming Lang..

hyunsun99.tistory.com

저번에 했던 포스팅을 참고하여 prototype을 실행해줌

 

업로드 완료 후 파이썬을 실행함


코드 설명


코드

from Arduino import Arduino
import time
import turtle as t

board = Arduino('115200')

JOY_Y = 0
JOY_X = 1
JOY_SW = 2

BUTTON_A = 3
BUTTON_B = 4

RED = 9
GREEN = 10
BLUE = 11

board.pinMode(JOY_X, "INPUT")
board.pinMode(JOY_Y, "INPUT")
board.pinMode(JOY_SW, "INPUT")

board.digitalWrite(JOY_SW, "HIGH")

board.pinMode(BUTTON_A, "INPUT")
board.pinMode(BUTTON_B, "INPUT")

board.pinMode(RED, "OUTPUT")
board.pinMode(GREEN, "OUTPUT")
board.pinMode(BLUE, "OUTPUT")


t.title("turtle")
t.shape("turtle")
t.speed(0)
t.penup()

r = 0
g = 0
b = 0
cnt1 = 0
cnt2 = 0

while True:
    # 초기화 #################################
    if (board.digitalRead(JOY_SW)==0):
        t.clear()
        t.goto(0,0)
        t.penup()
        t.color("black")
        board.digitalWrite(RED, "LOW")
        board.digitalWrite(GREEN, "LOW")
        board.digitalWrite(BLUE, "LOW")
        
    # 방향 ###################################
    if (board.analogRead(JOY_X)<=10):
        t.left(10)
    elif (board.analogRead(JOY_X)>=1000):
        t.right(10)
    if (board.analogRead(JOY_Y)<=10):
        t.backward(10)
    elif (board.analogRead(JOY_Y)>=1000):
        t.forward(10)
        
    # 펜 #####################################
    if (board.digitalRead(BUTTON_A)):
        cnt1 += 1
        time.sleep(0.2)
        if (cnt1 % 2 == 0):
            t.penup()
        elif (cnt1 % 2 == 1):
            t.pendown()

    # 색상 ###################################
    if (board.digitalRead(BUTTON_B)):
        cnt2 += 1
        time.sleep(0.2)
        if (cnt2 % 4 == 0):
            t.color("black")
            board.digitalWrite(RED, "LOW")
            board.digitalWrite(GREEN, "LOW")
            board.digitalWrite(BLUE, "LOW")
        elif (cnt2 % 4 == 1):
            t.color("red")
            board.digitalWrite(RED, "HIGH")
            board.digitalWrite(GREEN, "LOW")
            board.digitalWrite(BLUE, "LOW")
        elif (cnt2 % 4 == 2):
            t.color("green")
            board.digitalWrite(RED, "LOW")
            board.digitalWrite(GREEN, "HIGH")
            board.digitalWrite(BLUE, "LOW")
        elif (cnt2 % 4 == 3):
            t.color("blue")
            board.digitalWrite(RED, "LOW")
            board.digitalWrite(GREEN, "LOW")
            board.digitalWrite(BLUE, "HIGH")


결과


참고
https://docs.python.org/ko/dev/library/turtle.html

 

turtle — 터틀 그래픽 — Python 3.11.0a0 문서

turtle — 터틀 그래픽 소스 코드: Lib/turtle.py 소개 터틀(거북이) 그래픽은 아이들에게 프로그래밍을 소개하는 데 널리 사용되는 방법입니다. 1967년 Wally Feurzeig, Seymour Papert 및 Cynthia Solomon이 개발한

docs.python.org

 

728x90