산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino Uno로 만드는 LED 두더지 잡기 게임 - 조이스틱 인터랙티브 프로젝트

부품 및 소모품

Arduino UNO 1
LED (다양한 색상) 7
저항 221옴 7
아날로그 조이스틱 (범용) 1
점퍼 와이어 (범용) 8
암/수 점퍼 와이어 4

프로젝트 소개

이것은 저의 첫 Arduino 프로젝트입니다. 초기 튜토리얼에서 배운 LED와 기본 제어 지식을 바탕으로 만들었습니다.

이 "두더지 잡기" 게임은 7개의 LED와 조이스틱을 사용합니다. 4개의 "두더지"는 보드 왼쪽에서 2, 3, 4, 5번째 불빛으로 표현됩니다. 네 개 중 하나가 무작위로 켜지고, 해당하는 조이스틱 방향을 정해진 시간 안에 입력해야 합니다. 저는 왼쪽부터 조이스틱 선택을 왼쪽, 위, 아래, 오른쪽 순으로 배치했지만, 창의적으로 다른 배열을 시도해 보세요!

맨 왼쪽 두 개의 LED는 빨강과 초록으로, 틀리거나 맞음을 표시합니다. 맨 오른쪽 노란 LED는 현재 최고 점수를 깜빡이며 표시하고, 게임이 끝날 때마다(틀릴 때마다) 점수를 알려줍니다. 당연히 새로운 최고 점수가 나오면 갱신됩니다.

이 프로젝트에서 가장 복잡한 부분은 아날로그 조이스틱입니다. 양축 모두 최대값이 0과 1024(제 것은 1023)입니다. 이 값들은 시리얼 모니터로 측정할 수 있습니다. 저는 switch 문으로 x, y 입력을 단순화했습니다. 이것이 최선인지는 모르지만, 4방향(왼쪽, 오른쪽, 위, 아래)만 필요했기에 각 방향에 정수 1, 2, 3, 4를 할당했습니다.

Arduino Uno로 만드는 LED 두더지 잡기 게임 - 조이스틱 인터랙티브 프로젝트

코드에 상수로 정의된 난이도는 선택 가능한 시간(밀리초)입니다. 이 값을 조정해 난이도를 바꿀 수 있습니다. 게임 시작 시 버튼이나 조이스틱으로 난이도를 선택하게 하려 했으나, 복잡하고 사용자 친화적이지 않아 포기했습니다.

수정 및 개선 아이디어가 있으면 댓글로 알려주세요! :)

코드

WhackALED (Arduino)

// Whack a LED
// 조이스틱 변수
int sX = A0; // 조이스틱 X축, 아날로그 입력
int sY = A1; // 조이스틱 Y축, 아날로그 입력
int sSX;     // X축 읽기 값
int sSY;     // Y축 읽기 값
int sS;      // 변환된 상태

// 게임 변수
int rNum;       // 켤 LED 선택용 랜덤 숫자
int wins = 0;   // 연속 성공 횟수
int highScore = 0; // 최고 연속 성공 기록

// 난이도 상수 (반응 시간, 밀리초)
const int easy = 1000;
const int medium = 500;
const int hard = 325;
const int stupid = 250;

int ledPins[] = {5, 2, 4, 3, 6, 7, 8}; // LED 핀 배열
int pinCount = 7;

void setup() {
  Serial.begin(9600);
  pinMode(sX, INPUT);
  pinMode(sY, INPUT);
  for (int thisPin = 0; thisPin < pinCount; thisPin++) {
    pinMode(ledPins[thisPin], OUTPUT);
  }
}

void loop() {
  rNum = random(4); // 0~3 중 랜덤 선택
  delay(1000);
  digitalWrite(ledPins[rNum], HIGH); // 선택된 LED 켜기
  delay(stupid); // 난이도만큼 대기 (여기서는 stupid)

  // 조이스틱 읽기
  sSX = analogRead(sX);
  delay(100);
  sSY = analogRead(sY);

  // X, Y 입력을 4가지 경우로 변환 (0과 1023이 최대값)
  sS = 0;
  switch (sSX) {
    case 0:    sS = 1; break; // 왼쪽
    case 1023: sS = 2; break; // 오른쪽
  }
  switch (sSY) {
    case 0:    sS = 3; break; // 위
    case 1023: sS = 4; break; // 아래
  }

  digitalWrite(ledPins[rNum], LOW); // LED 끄기

  if (sS - 1 == rNum) { // 정답 확인
    wins++;
    for (int k = 0; k <= 3; k++) { // 초록 LED 깜빡임 (정답)
      digitalWrite(ledPins[4], HIGH);
      delay(50);
      digitalWrite(ledPins[4], LOW);
      delay(50);
    }
  } else {
    if (wins > highScore) { // 최고 기록 갱신
      highScore = wins;
      wins = 0;
    }
    for (int i = 0; i <= 3; i++) { // 빨강 LED 깜빡임 (오답)
      digitalWrite(ledPins[5], HIGH);
      delay(50);
      digitalWrite(ledPins[5], LOW);
      delay(50);
    }
    for (int w = 0; w < highScore; w++) { // 노란 LED로 최고 점수 표시
      digitalWrite(ledPins[6], HIGH);
      delay(200);
      digitalWrite(ledPins[6], LOW);
      delay(200);
    }
  }
}

회로도

실제 사진과 회로도가 일치하지만 조이스틱은 예외입니다. 제 조이스틱은 5핀 중 4핀을 사용했습니다: 위부터 "GND", "+5V", "VRx", "VRy". GND와 +5V는 Arduino의 GND와 5V에, VRx와 VRy는 A0, A1에 연결했습니다.

Arduino Uno로 만드는 LED 두더지 잡기 게임 - 조이스틱 인터랙티브 프로젝트
Arduino Uno로 만드는 LED 두더지 잡기 게임 - 조이스틱 인터랙티브 프로젝트

제조공정

  1. 가스 랜턴: 진화, 디자인, 현대 제조 공정
  2. 레이저 포인터: 설계, 제조, 안전성 개요
  3. 손전등: 탄생부터 현대 혁신까지
  4. 만화경: 브루스터의 과학에서 현대 디자인까지
  5. 반도체 레이저: 현대 기술을 위한 정밀 광원
  6. 사진술의 예술과 과학: 다게레오타입에서 현대 필름까지
  7. 교통신호: 공학, 역사, 미래 혁신
  8. 발광 다이오드(LED): 탄생부터 100년 수명까지
  9. LED 스트립 액세서리 마스터하기: 연결, 제어, 맞춤 설정으로 조명 완성하기
  10. 자동차 계기판 경고등 완벽 가이드: 의미와 대처법