브레드보드와 함께 Raspberry Pi를 사용하여 Simon 게임을 만드는 초보자 가이드

브레드보드를 ​​사용하면 납땜 없이도 회로를 만들 수 있습니다. 전자기학을 실험하기에 좋은 도구이지만, 다소 두려울 수도 있습니다. 프로젝트를 직접 만들어 보면 배우는 동안 동기를 유지하는 데 도움이 될 수 있습니다.

초보자를 위한 훌륭한 프로젝트를 만드는 데 도움이 되는 간단한 게임이 많이 있습니다. 라즈베리 파이시작할 수 있는 쉬운 게임 중 하나는 Simon입니다. Simon 게임은 메모리 게임 일련의 불빛이 무작위 순서로 깜박이며, 플레이어는 그 순서를 기억해야 합니다. 플레이어가 진행할수록 시퀀스의 길이는 점점 길어집니다.

필요한 재료

시작하려면 다음이 필요합니다.

  • 라즈베리파이 장치.
  • OS에 플래시된 microSD 카드 라즈비안 OS 그녀에.
  • 4개의 다양한 색상의 LED 조명.
  • 전기 저항기 4개(220옴에서 1k옴까지).
  • 4개의 버튼.
  • 1 x 브레드보드.
  • 모든 것을 연결하는 연결 케이블.

이 프로젝트에는 어떤 라즈베리 파이 모델이든 사용할 수 있지만, 파이 제로 모델은 납땜 없이는 브레드보드에 쉽게 연결할 수 없습니다. 어떤 모델을 사용하든 전원 공급 장치, 모니터, 키보드, 마우스가 필요합니다.

이전에 Raspberry Pi를 설정하지 않은 경우 이 튜토리얼을 위해 모든 것을 준비하는 방법을 배울 수 있습니다. 라즈베리파이 초보자 가이드.

이 튜토리얼에서는 Python 코드를 작성합니다. 어떤 텍스트 편집기를 사용해도 되지만, 더 쉬운 편집기를 찾을 수도 있습니다. 많은 편집기가 Raspberry Pi OS에 이미 설치되어 있으며, Thonny는 초보자도 쉽게 사용할 수 있도록 설계되었습니다. 어떤 편집기를 사용하든 이 튜토리얼을 따라가려면 코드를 저장하고 실행할 수 있어야 합니다.

브레드보드 시작하기

라즈베리 파이에는 두 줄의 범용 입출력(GPIO) 핀이 있습니다. 이 핀을 통해 다양한 외부 부품을 라즈베리 파이에 연결할 수 있습니다. 어떤 핀은 정보를 전송하고, 어떤 핀은 전원을 공급하며, 어떤 핀은 전자 기기를 접지합니다.

먼저 브레드보드에 LED를 추가해 보겠습니다.

먼저 GPIO 핀을 보드에 연결합니다. 전원이나 접지 핀이 아닌 GPIO 핀이라면 어떤 핀이든 상관없습니다. 위 그림은 GPIO 핀 다이어그램으로, 어떤 핀을 사용할지 결정하는 데 도움이 됩니다. 이 튜토리얼에서는 GPIO 18라고도 하는 24번 핀을 사용합니다.

이 핀은 브레드보드에 전원을 공급하고 라즈베리 파이가 보드의 구성 요소와 통신할 수 있도록 합니다. 그런 다음 라즈베리 파이의 6번 핀을 브레드보드의 접지 핀에 연결합니다. 이렇게 하면 보드가 접지되어 전기 회로가 형성됩니다.

라즈베리 파이에서 나오는 전원이 너무 높아서 LED를 직접 연결할 수 없습니다. 저항을 사용하면 전력 레벨을 낮추고 LED가 타는 것을 방지할 수 있습니다. 저항의 한쪽 끝을 GPIO 핀과 같은 선에 연결하고 다른 쪽 끝을 보드 반대편에 연결합니다. 그런 다음 LED의 양극을 저항 뒤에 배치합니다. LED의 음극은 음극에 직접 연결할 수 있습니다. 최종 결과는 위 그림과 같습니다. 배선을 꼼꼼히 확인하고 라즈베리 파이의 전원을 켜세요. LED가 켜질 것입니다.

이제 Raspberry Pi를 사용하여 코드를 사용하여 제어할 수 있는 회로를 만들었습니다.

Python 코드를 사용하여 조명 제어

이 튜토리얼에서는 단계별로 코드를 안내하지만 언제든지 최종 코드를 참조하고 싶다면 여기에서 사용할 수 있습니다. 페이스트 빈.

현재 LED에 전원이 공급되고 있지만, LED가 켜지고 꺼지는 시점을 제어하고 싶습니다. 다음 Python 코드를 사용하면 보드와 통신할 수 있습니다.

import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) red = 18 GPIO.setup(red, GPIO.OUT) GPIO.output(red, GPIO.LOW)

처음 몇 줄은 설정 과정입니다. Raspberry Pi GPIO 라이브러리를 가져옵니다. 이를 통해 다음을 수행할 수 있습니다. GPIO로 쓰기 작업을 줄이기 위해 RPi.GPIO 변수를 GPIO로 참조합니다. GPIO 핀 모드는 다음과 같이 구성됩니다. 이 설정을 반드시 사용할 필요는 없지만 GPIO 행의 순서에 따라 핀을 참조하는 것이 더 쉬울 수 있습니다.

마지막으로, warnings를 false로 설정합니다. 이렇게 하면 불필요한 경고가 표시되지 않습니다.

마지막 세 줄은 LED를 제어합니다. 빨간색 LED는 GPIO 핀 18에 연결됩니다. 이 값을 기억하는 대신, 변수는 다음 위치에 저장됩니다. 빨간 그 장소. 그런 다음 그는 말한다 GPIO 설정 프로그램은 빨간색 핀으로 정보를 전송합니다. 마지막으로 GPIO.output을 빨간색 핀으로 설정합니다. 낮은이 프로그램이 실행 중이면 표시등이 꺼집니다. 다시 켜려면 스위치를 켜세요. GPIO.LOW 나에게 GPIO.HIGH , 프로그램을 다시 실행하세요.

코드를 저장하고 클릭하세요 고용 실제로 어떻게 동작하는지 확인해 보세요. 코드 편집기에 실행 버튼이 없다면, 원하는 이름(예: myfilename)으로 저장하고 명령을 실행해 보세요. 파이썬 myfilename.py 터미널 창에서 먼저 새 Python 파일이 있는 디렉터리로 이동해야 합니다.

LED 램프를 두 개 이상 추가하세요

Simon 게임을 만들려면 네 가지 색상의 LED가 필요합니다. 빨간색 LED를 준비할 때와 동일한 단계를 사용하여 나머지 세 개의 LED를 준비할 수 있습니다. 배선은 아래 그림과 같습니다.

코드는 다음과 같습니다.

import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) red = 18 yellow = 22 green = 24 blue = 26 GPIO.setup(red, GPIO.OUT) GPIO.setup(yellow, GPIO.OUT) GPIO.setup(green, GPIO.OUT) GPIO.setup(blue, GPIO.OUT) GPIO.output(red, GPIO.HIGH) GPIO.output(yellow, GPIO.HIGH) GPIO.output(green, GPIO.HIGH) GPIO.output(blue, GPIO.HIGH)

LED를 테스트한 후 조정하세요. GPIO 출력 على GPIO.LOW 각 LED를 다시 끕니다.

전선의 색상은 중요하지 않지만, 패널 내용을 더 쉽게 읽을 수 있도록 의미 있는 색상을 사용하는 것이 좋습니다. 예를 들어, 검은색 전선은 접지선에 자주 사용됩니다. 이 회로에서는 전선 색상을 LED 조명 색상과 일치시키는 것이 좋습니다.

버튼으로 조명을 제어하세요

먼저 보드에 버튼을 추가하세요. 버튼은 접지 커넥터와 GPIO 핀에 모두 연결해야 합니다. 회로는 다음과 같습니다.

버튼을 LED로 제어하려면 코드에 코드를 추가해야 합니다. 버튼 설정은 LED 설정과 유사하지만, GPIO 핀이 출력이 아닌 입력으로 설정됩니다. 이 코드는 또한 라즈베리 파이의 내부 풀업 저항을 설정하는데, 이는 버튼이 제대로 작동하는 데 필수적입니다.

GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP)

이제 버튼이 눌렸는지 확인하는 코드가 필요합니다.

game = True while game: redButtonState = GPIO.input(32) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) time.sleep(1) GPIO.output(red, GPIO.LOW)

버튼이 눌렸는지 계속 확인하는 프로그램을 만들고 싶으므로 repeat 명령을 사용해야 합니다. 동안반복은 결코 거짓이 되지 않으므로, 코드는 우리가 정지 버튼을 누르거나 키보드 단축키를 사용하여 프로그램을 수동으로 종료할 때까지 계속 실행되고 버튼을 확인합니다. Ctrl + C.

다음으로 GPIO 핀이 보내는 입력을 더 쉽게 참조할 수 있도록 이 정보를 변수에 저장합니다. redButtonState버튼 입력이 0으로 바뀌면 버튼이 눌렸다는 것을 알 수 있습니다.

버튼을 누르면 빨간색 LED가 켜집니다. 그리고 1초 후에 LED가 꺼집니다. 이 시간을 추가하려면 다음 함수를 사용합니다. 시간.수면 (1)이 작업을 수행하려면 코드 상단에 있는 time 라이브러리를 가져와야 합니다.

버튼 하나를 활성화하면 각 LED에 하나씩, 총 세 개의 버튼을 추가할 수 있습니다. 코드는 다음과 같습니다.

import random, import time, import RPi.GPIO as GPIO, GPIO.setmode(GPIO.BOARD), GPIO.setwarnings(False), red = 18, yellow = 22, green = 24, blue = 26, GPIO.setup(red, GPIO.OUT), GPIO.setup(yellow, GPIO.OUT), GPIO.setup(green, GPIO.OUT), GPIO.setup(blue, GPIO.OUT), GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP), GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP), GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_UP), GPIO.setup(40, GPIO.IN, pull_up_down=GPIO.PUD_UP), game = True 게임 중: redButtonState = GPIO.input(32) redButtonState가 0이면 GPIO.output(red, GPIO.HIGH)를 출력하고 1분 동안 대기한 후 GPIO.output(red, GPIO.LOW)를 출력합니다. yellowButtonState = GPIO.input(36) yellowButtonState가 0이면 GPIO.output(yellow, GPIO.HIGH)를 출력하고 GPIO.input(40)를 출력합니다. blueButtonState가 0이면 GPIO.output(blue, GPIO.HIGH)를 출력하고 1분 동안 대기한 후 GPIO.output(blue, GPIO.LOW)를 출력합니다.

브레드보드는 다음 그림과 같아야 합니다.

이제 모든 전자 장치가 준비되었습니다. 문제가 있으면 코드에 오류가 있는지 확인하세요. 전체 코드는 다음에서 다운로드할 수 있습니다. 페이스트 빈 문제가 생기면!

게임을 만들어 보세요

이 프로젝트에서는 브레드보드를 ​​시작하는 데 필요한 모든 기본 사항을 다루었지만, 이러한 기술을 게임으로 만들면 여러분의 능력을 실제로 보여줄 수 있을 것입니다!

Simon에서 플레이어는 일련의 깜빡이는 불빛을 보고 그 패턴을 기억해야 합니다. 처음에는 불빛 하나로 쉽게 시작할 수 있습니다. 하지만 각 레벨마다 패턴에 무작위 불빛이 추가되어 게임을 더욱 어렵게 만듭니다.

패턴을 만듭니다

이 단계는 매우 간단합니다. 하나의 매트릭스가 조명 패턴을 유지합니다(무늬). 두 번째 배열은 LED의 GPIO 핀을 저장합니다(조명). 게임이 반복될 때마다 패턴 배열 끝에 새로운 무작위 조명이 추가됩니다. 다음 함수를 사용합니다. 랜덤.randint() 0~3 사이의 숫자를 선택하면 4개의 LED가 켜집니다.

패턴 = [] 조명 = [빨강, 노랑, 초록, 파랑] 게임 중: 패턴에 무작위 정수(0,3)를 추가합니다.

다음으로, 패턴을 보여주기 위해 조명을 켜야 합니다.

게임 중: 패턴에 무작위 정수(0,3)를 추가합니다. 패턴의 x에 대해 GPIO.output(lights[x], GPIO.HIGH)를 출력합니다. 1분 동안 대기합니다. GPIO.output(lights[x], GPIO.LOW)를 출력합니다. 0.5분 동안 대기합니다.

두 조명 사이에 잠시 멈추는 것이 중요합니다. 이렇게 하면 패턴에서 같은 조명이 연속적으로 사용되는지 더 쉽게 확인할 수 있습니다.

플레이어 입력 받기

다음으로, 게임은 플레이어가 빛의 순서를 추측할 때까지 기다려야 합니다. 프로그램은 패턴에 있는 각 빛을 검사하고 플레이어가 버튼을 누를 때까지 기다려야 합니다. 이를 위해 중첩된 반복이 필요합니다.

time.sleep(1) 동안 GPIO.output(red, GPIO.LOW)를 출력합니다. yellowButtonState가 0이면 GPIO.output(yellow, GPIO.HIGH)를 출력하고, waitingForInput을 False로 설정합니다. time.sleep(1) 동안 GPIO.output(yellow, GPIO.LOW)를 출력합니다. greenButtonState가 0이면 GPIO.output(green, GPIO.HIGH)를 출력하고, waitingForInput을 False로 설정합니다. time.sleep(1) 동안 GPIO.output(green, GPIO.LOW)를 출력합니다. blueButtonState가 0이면 GPIO.output(blue, GPIO.HIGH)를 출력하고, waitingForInput을 False로 설정합니다. time.sleep(1) 동안 GPIO.output(blue, GPIO.LOW)를 출력합니다.

위의 코드 대부분은 버튼을 테스트하기 위해 작성한 코드를 재사용한 것입니다.

플레이어 입력 확인

여기에서 플레이어가 올바른 패턴을 입력했는지 매우 쉽게 확인할 수 있습니다. 버튼을 누를 때마다 게임은 해당 버튼이 올바른지 확인할 수 있습니다. 이를 위해 다음 문장을 추가합니다. if 버튼 항목당 기타:

redButtonState가 0이면 GPIO.output(red, GPIO.HIGH)를 출력하고, waitingForInput을 False로 설정합니다. x가 0이 아니면 게임을 False로 설정하고 1분 동안 대기한 후 GPIO.output(red, GPIO.LOW)를 출력합니다.

변하기 쉬운 x 반복으로부터 을 통한 다음 표시등 번호가 있습니다. 빨간색 LED는 0번 위치, 즉 0번에 있습니다. 패턴에 XNUMX이 있을 때 플레이어가 빨간색 LED 버튼을 누르면 정답입니다! 그렇지 않으면 게임에서 집니다. 변수 구성은 다음과 같습니다. 경기 على 그릇된 게임 루프를 멈추고 프로그램을 종료합니다.

축하합니다! 게임을 처음부터 만들어냈어요!

게임을 만들면 단순히 LED와 버튼을 추가하는 것보다 더 많은 코드가 프로젝트에 추가됩니다. 친구와 가족에게 보여줄 수 있는 최종 프로젝트를 목표로 하면 동기를 유지하는 데 도움이 될 수 있습니다.

이 게임은 꽤 간단합니다. 기본 디자인을 개선해 보세요. 플레이어가 졌을 때 불빛을 깜빡이게 할 수도 있고, 게임에 사운드를 추가하는 것도 도전해 볼 수 있습니다. 여러분의 상상력만이 한계입니다!

글쎄요, 당신의 상상력과 당신이 사용할 장비들. 이제 확인해 보세요 Raspberry Pi를 사용하여 스마트 TV를 만드는 최고의 프로젝트

맨 위로 이동 버튼