본문 바로가기

대학교 과제/[마프] 과제

[마프] 11주차 과제: 조이스틱 제어 회로/프로그래밍 보고서

반응형

[11주차 과제]

주제

라즈베리파이에 조이스틱 연결하여 제어하기

 

목표

조이스틱의 위치를 받아낼수 있다.

 

사용 물품(부품)

라즈베리파이 4B, MCP3002 핀, 조이스틱, 빵판

 

실험 과정

1. 빵판으로 라즈베리와 조이스틱을 연결한다.

너무 복잡하다..

2. 라즈베리에서 파이썬으로 'spidev' 패키지를 사용한다.

3. 조이스틱의 위치를 파악하여 tkinter 패키지로 그래픽으로 시각화 한다.

 

실험 코드

import spidev
import time
import tkinter as tk

spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 1000000
spi.bits_per_word = 8

window = tk.Tk()
circle_size = 10
canvas = tk.Canvas(window, width = 512, height = 512)
canvas.pack()
circle = canvas.create_oval(0-circle_size,
                            255-circle_size,
                            0+circle_size,
                            255+circle_size,
                            fill = 'black')

def measure_ch0():
    msg = [0b01100000, 0b00000000]
    digit_byte = spi.xfer2(msg)
    digit_in = (digit_byte[0] << 8) + digit_byte[1]
    return digit_in
def measure_ch1():
    msg = [0b01110000, 0b00000000]
    digit_byte = spi.xfer2(msg)
    digit_in = (digit_byte[0] << 8) + digit_byte[1]
    return digit_in
def measure_XY():
    mes0 = measure_ch0()/2
    mes1 = measure_ch1()/2
    return [mes0, mes1]

def draw():
    pos = measure_XY()
    print("pos : ", pos)
    
    canvas.coords(circle,
                  pos[0]-circle_size,
                  pos[1]-circle_size,
                  pos[0]+circle_size,
                  pos[1]+circle_size)
    window.after(500,draw)
    
draw()

window.mainloop()
    
spi.close()

 

결과 사진 및 동작 설명

spidev 패키지로 ch0, ch1의 신호를 받아 조이스틱의 위치를 출력하여 그래픽으로 어떻게 동작하는지 알수 있는 프로그램이다.

조이스틱 밑부분이 너무 따가워요
그래도 잘 움직이니 만족스럽다.

 

분석 및 토의

점점 프로그램을 만들수록 어려운 프로그램들을 만들어서 너무나 좋았지만,전선이 고정이 힘들어 조금만 건드려도 조이스틱의 위치를 받지 않는 경우가 있었습니다.

반응형