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

Breadboard to PCB Part 1 - Simon Says 게임 만들기

구성품 및 소모품

Arduino UNO
× 1
무납땜 브레드보드 전체 크기
× 1
LED(일반)
× 4
SparkFun 푸시버튼 스위치 12mm
× 4
부저
× 1
점퍼 와이어(일반)
× 12
저항 10k 옴
× 4
저항 330옴
× 4
USB-A-B 케이블
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

소개

우리 모두는 올바른 조명 순서에 해당하는 버튼을 눌러 조명 순서를 복사하려고 하는 오래된 Simon Says 게임을 보았습니다. Hackster Live의 경우 Upverter라는 PCB 설계 도구를 선보였습니다. 이것은 PCB를 만들고 바꾸는 재미있고 간단한 프로젝트입니다. 다음은 하드웨어와 코드로 완성된 게임 제작을 보여주는 기본 프로젝트입니다.

이 프로젝트 시리즈에는 세 부분이 있습니다.

<울>
  • 1부: Simon Says 게임 만들기
  • <울>
  • 2부: Upverter를 사용하여 Simon Says 게임을 기반으로 PCB 설계
  • <울>
  • 3부: Upverter에서 만든 디자인에서 나만의 PCB 밀링
  • 이 시리즈에서 배울 내용

    <울>
  • 브레드보드에 기본 프로젝트를 배치하는 방법
  • <울>
  • Upverter에서 PCB를 레이아웃하는 방법
  • <울>
  • CNC 기계를 사용하여 자신의 PCB를 밀링하는 방법
  • 소프트웨어

    Arduino에 코드를 작성하고 업로드하기 위한 Arduino IDE가 없는 경우 여기에서 운영 체제의 최신 버전을 다운로드하십시오.

    하드웨어 설정

    Sparkfun의 Inventor 's Kit 예제를 하드웨어 설정에 대한 영감으로 사용하고 약간 조정했습니다. 아래 Fritzing 다이어그램을 확인하십시오.

    코드

    이 게임의 재미있는 점은 다양한 변형이 가능하다는 것입니다. 위에서 언급했듯이 Sparkfun의 예제를 하드웨어 설정의 시작점으로 사용하고 코드를 처음부터 작성했습니다. 자신의 코드를 작성하는 것이 관심 있는 것이 아닌 경우 아래의 코드를 사용하거나 위에서 언급한 예제에서 Sparkfun의 코드를 약간 조정하여 사용하거나 다른 Simon이 하드웨어 설정에서 작동하는 게임/코드를 검색할 수 있습니다. .

    게임이 실행되는 동안 직렬 모니터에서 무슨 일이 일어나는지 볼 수 있도록 자세한 설명과 디버깅 직렬 인쇄 라인을 내 코드에 포함했습니다. 아래에서 Simon Says 게임 실행 동영상을 확인하세요!

    Simon은 게임 비디오를 말합니다.

    *참고:이 영상에서는 이기기 위해 필요한 연속 조명 수를 5개로 설정했습니다. 게임을 더 어렵게 만들기 위해 변경할 수 있지만 상대적으로 영상을 짧게 유지하고 싶었습니다 :).

    이제 브레드보드를 ​​PCB로 만들 준비가 되었습니다! Breadboard to PCB Part 2 - Upverter를 사용하여 PCB 설계에서 방법을 알아보세요.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • Simon이 말하는 Arduino 코드
  • Simon이 말하는 Arduino 코드Arduino
     int ledArray[] ={12, 9, 5, 2};// ledArray[0]은 녹색, ledArray[1]은 빨간색, ledArray[2]는 노란색, ledArray[3]은 파란색입니다. int buttonArray[] ={13, 10, 6, 3};// buttonArray[0]은 녹색, buttonArray[1]은 빨간색, buttonArray[2]는 노란색, buttonArray[3]은 파란색입니다. 정수 핀 수 =4; // ledArray와 buttonArray는 모두 같은 pinCount를 가집니다 --> 버튼과 led 모두에 이것을 사용합니다 int buzzer =8; 정수 ledState =0; int 게임 상태 =0; #define NUMBERTOWIN 5 //이기기 위해 매치해야 하는 조명의 수 --> 이 숫자를 변경하여 게임에서 승리하기가 다소 어렵게 만들 수 있습니다. int gameValues[NUMBERTOWIN]; 정수 roundNum =0; unsigned long previousMillis =0; //지연 없이 불빛을 깜박이는 게임 전 상태에 필요 --> 지연을 사용하면 게임을 시작하기 위해 버튼을 누르는 것이 감지되지 않을 수 있습니다. unsigned long interval1 =500; // 깜박임 사이에 시간이 필요함 // 함수 선언void setLed(int ledNum);void displayClue(int roundNum);boolean waitForInput(int buttonNum); 무효 설정 () {Serial.begin(9600);Serial.println("설정"); for(int Pin =0; Pin  function setLed()는 ledNum이 <0이면 led가 LOW임을 나타냅니다. setLed(-1); // 라운드 번호를 0으로 설정하여 첫 번째 라운드에서 시작하도록 합니다. roundNum =0; 지연(1000); // gameState를 1로 설정 gameState =1; } } if (gameState ==1) { gamePlay(); } if (gameState ==2) { //당신이 이겼습니다!! - 승리하는 소리를 재생하고 LED(winDisplay)를 3번 스크롤한 다음 좋은 전환을 위해 디스플레이를 한 번 잃습니다. //플레이어에게 버튼 누름을 놓을 시간을 주기 위해 지연 시간을 제공한 후 승리한 사운드가 재생됩니다. delay(500); win_sound(); 윈디스플레이(); 윈디스플레이(); 윈디스플레이(); 분실디스플레이(); Serial.println("윈디스플레이"); // pre_game을 실행하기 전에 잠시 지연합니다. delay (1000); // pre_game을 호출하기 위해 gameState를 0으로 재설정 gameState =0; } if (gameState ==3) { //당신은 잃습니다 :( - 좋은 전환을 위해 손실된 사운드를 재생하고 LED(loseDisplay)를 3번 깜박입니다. // 플레이어가 사운드를 잃기 전에 버튼 누름을 해제할 시간을 주기 위해 지연 재생 지연(500);losing_sound();losDisplay();losDisplay();losDisplay(); Serial.println("loseDisplay"); //pre_game delay(1000)를 실행하기 전에 잠시 지연; // pre_game을 호출하기 위해 gameState를 0으로 재설정 gameState =0; } }//pre_gamevoid pre_game(){ //부호 없는 LED를 켜는 LED 사이에 충분한 시간이 경과했는지 확인합니다. ledState ==0) { Serial.println("전 녹색"); setLed(0); ledState =1; } else if (ledState ==1) { Serial.println("전 빨간색"); setLed(1); ledState =2; } else if (ledState ==2) { Serial.println("전 노란색"); setLed(2); ledState =3; } else if (ledState ==3) { Serial.println("전 파란색 "); setLed(3); ledState =0; } //시간 재설정 previousMillis =currentMillis; }}//게임이 재생되는 동안에 대한 함수 무효 gamePlay(){ Serial.println("gamePlay"); // 게임을 위한 난수 배열을 미리 로드합니다. for ( int i=0; i 버튼이 눌려지면 나머지 코드로 이동 if (!button0 || !button1 || !button2 || !button3) { //버튼을 두 번 계산하는 것을 방지하기 위해 잠시 지연 버튼 누름 지연( 250); //버튼을 눌렀을 때 해당 LED를 켭니다. if (buttonNum ==0) { digitalWrite(ledArray[0], HIGH); 지연(250); digitalWrite(ledArray[0], LOW); } else if (buttonNum ==1) { digitalWrite(ledArray[1], HIGH); 지연(250); digitalWrite(ledArray[1], LOW); } else if (buttonNum ==2) { digitalWrite(ledArray[2], HIGH); 지연(250); digitalWrite(ledArray[2], LOW); } else if (buttonNum ==3) { digitalWrite(ledArray[3], HIGH); 지연(250); digitalWrite(ledArray[3], LOW); } // 올바른 버튼을 눌렀는지 확인 if (buttonNum ==0 &&button0 ==0) { Serial.println("0 Pressed"); true를 반환합니다. } else if (buttonNum ==1 &&button1 ==0) { Serial.println("1 누름"); true를 반환합니다. } else if (buttonNum ==2 &&button2 ==0) { Serial.println("2 누름"); true를 반환합니다. } else if (buttonNum ==3 &&button3 ==0) { Serial.println("3 누름"); true를 반환합니다. } else { false를 반환합니다. } } }}//승리 후 - 조명이 빠르게 스크롤됩니다.void winDisplay(){digitalWrite(ledArray[0], HIGH);delay(75);digitalWrite(ledArray[0], LOW);delay(75);digitalWrite(ledArray [1], HIGH);delay(75);digitalWrite(ledArray[1], LOW);delay(75);digitalWrite(ledArray[2], HIGH);delay(75);digitalWrite(ledArray[2], LOW );delay(75);digitalWrite(ledArray[3], HIGH);delay(75);digitalWrite(ledArray[3], LOW);delay(75);digitalWrite(ledArray[2], HIGH);delay(75) );digitalWrite(ledArray[2], LOW);delay(75);digitalWrite(ledArray[1], HIGH);delay(75);digitalWrite(ledArray[1], LOW);delay(75);digitalWrite(ledArray [0], HIGH);delay(75);digitalWrite(ledArray[0], LOW);delay(75);}void win_sound(void){ //tone(핀 번호, 주파수 - 찾기 위해 온라인에서 찾았습니다. 내가 원하는 음표의 주파수, 조정 시간) Serial.println("buzzer1"); 톤(부저, 294, 250); 지연(200); 톤(부저, 294, 250); 지연(200); 톤(부저, 294, 250); 지연(200); 톤(부저, 392, 500); 지연(500); Serial.println("초 392"); 톤(부저, 392, 250); 지연(200); 톤(부저, 440, 250); 지연(200); 톤(부저, 392, 250); 지연(200); 톤(부저, 440, 250); 지연(200); 톤(부저, 494, 500);}무효 손실 표시(){ digitalWrite(ledArray[0], HIGH); digitalWrite(ledArray[1], HIGH); digitalWrite(ledArray[2], HIGH); digitalWrite(ledArray[3], HIGH); 지연(200); digitalWrite(ledArray[0], LOW); digitalWrite(ledArray[1], LOW); digitalWrite(ledArray[2], LOW); digitalWrite(ledArray[3], LOW); delay(200);}무효 손실_사운드(무효){ Serial.println("losing_sound"); 톤(부저, 98, 250); 지연(250); 톤(부저, 93, 250); 지연(250); 톤(부저, 87, 250); 지연(250);}

    회로도

    simon_says_fritzing_Yb8EdKPqD4.fzz

    제조공정

    1. MPU-6050을 사용한 Arduino 자이로스코프 게임
    2. Arduino 디지털 주사위
    3. DIY 37 LED 룰렛 게임
    4. Arduino 게임 컨트롤러
    5. 조이스틱 게임
    6. 휴대용 거리 감지기
    7. 픽셀 체이서 게임
    8. 구리로 전기도금
    9. 제조 101:항공우주 산업의 일부가 됨
    10. 4층 PCB 제조에 ​​관련된 공정 – 2부