제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
| ||||
| ||||
| ||||
|
|
안녕하세요
이 튜토리얼에서는 방문/명함을 만드는 방법을 보여 드리겠습니다. 단순한 방문 카드가 아닙니다. 이것은 PCB입니다. 하지만 일반 방문 카드처럼. EDISON SCIENCE CORNER 이름, 로고, 소셜 미디어 아이콘 및 QR 코드를 볼 수 있습니다. QR코드는 제 유튜브 채널로 연결됩니다. 그러나 반대편에는 회로가 있습니다. 이것은 틱택토입니다. 게임 회로. Tic tac toe는 2인용 게임입니다. X O 게임이라고도 함 . X 또는 O로 3x3 격자의 공간을 차례로 표시하는 두 명의 플레이어. 가로, 세로 또는 대각선 행에 세 개의 표시를 배치하는 데 성공한 플레이어가 승자가 됩니다. 대부분의 시간 게임은 무승부입니다. 여기에서 X와 O를 색상으로 대체하고 기존의 3*3도 4*4로 변경했습니다. 따라서 각 스위치는 총 16개의 LED와 16개의 스위치가 해당 LED를 나타냅니다. 플레이어 1은 녹색이고 플레이어 2는 빨간색입니다. 그게 다야.
이제 만드는 방법을 살펴보겠습니다.
이것이 제가 easyeda를 사용하여 설계한 게임 회로입니다. . 여기에서 atmega328을 사용하고 있습니다. 이 프로젝트의 핵심으로. 그런 다음 회로를 PCB로 변환했습니다. 89mm*50mm 크기의 PCB를 디자인한 이유는 이것이 명함의 표준 크기이기 때문입니다. easy의 이미지 삽입 도구를 사용하여 디자인을 만들었습니다. 이것은 당신의 아이디어로 만들 수 있는 예술에 관한 것입니다. PCB를 설계한 후 Gerber 파일을 다운로드했습니다. 그 다음 나는 jlcpcb.com에 갔다. 나는 5개의 PCB에 2$만 제공하기 때문에 JLCPCB를 선택합니다. PCB를 주문하려면 지금 주문을 클릭하고 Gerber 파일을 선택하십시오. 업로드 후 블랙 색상 0.8mm 두께를 선택하여 주문했습니다. 2주 후에 나는 PCB를 받았습니다. PCB의 두께는 0.8mm에 불과하지만 품질은 예상대로 완벽합니다.
ATMEGA328P-AU* 1
0805 커패시터 22pf *2
0805 커패시터 100nF* 2
SMD WS2812B-B*16
0805 LED SMD* 2
0805 저항 1K* 3
0805 저항10K 1
16MHz*1
마이크로 USB암*1
여기에서 BOM 다운로드
모든 구성 요소를 잡은 후 납땜을 시작했습니다.
마이크로 USB 포트로 시작했습니다. 그런 다음 다른 모든 구성 요소를 납땜했습니다. 제어 회로를 납땜한 후 네오픽셀 LED 납땜을 시작하고 완료한 후 해당 스위치를 납땜했습니다. 1시간 후에 모든 납땜을 완료했고 이제 PCB는 다음과 같이 보입니다.
납땜 완료 후 USB 케이블을 연결하여 테스트를 해보았습니다. 이제 코드를 업로드할 차례입니다. spi 핀을 isp Arduino에 연결하고 스케치를 업로드했습니다.
여기에서 코드 다운로드
이렇게 4*4 tic tac toe 게임 PCB로 명함을 만들었습니다. 링크에서 회로, 코드, 거버를 다운로드할 수 있습니다. 제 튜토리얼에서 무엇인가를 즐기고 배웠기를 바랍니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">//edison science corner#include섹션>#include #define LED_PIN 5#define NUM_LEDS 16#define LED_TYPE WS2812B#define COLOR_ORDER GBR#define BRIGHTNESS 30CRGB leds[NUM_LEDS];int player=1;int n,i,e=0,j=0;char a[16]={'1','2','3','4','5','6','7', '8','9','10','11','12','13','14','15','16'};char 키;int w=0;const 바이트 행 =4; // 4행 const 바이트 COLS =4; //4개의 열//키패드 버튼의 기호 정의char hexaKeys[ROWS][COLS] ={ {'1','2','3','A'}, {'4','5' ,'6','B'}, {'7','8','9','C'}, {'*','0','#','D'}};바이트 rowPins[ 행] ={A0,A1,A2,A3}; //키패드바이트의 행 핀아웃에 연결 colPins[COLS] ={A4,A5,2,3}; // 키패드의 열 핀아웃에 연결Keypad customKeypad =Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 무효 설정(){ Serial.begin(9600); LEDS.addLeds (LED, NUM_LEDS); FastLED.setBrightness(밝기); for(int m=0;m<3;m++) { leds[0].setRGB(0, 255, 0); leds[1].setRGB(0, 255, 0); led[2].setRGB(0, 255, 0); leds[3].setRGB(0, 255, 0); leds[4].setRGB(0, 255, 0); led[5].setRGB(0, 255, 0); leds[6].setRGB(0, 255,0); led[7].setRGB(0, 255, 0); leds[8].setRGB(0, 255, 0); led[9].setRGB(0, 255, 0); leds[10].setRGB(0, 255, 0); led[11].setRGB(0, 255, 0); led[12].setRGB(0, 255, 0); led[13].setRGB(0, 255, 0); led[14].setRGB(0, 255, 0); led[15].setRGB(0, 255, 0); FastLED.show(); 지연(500); leds[0].setRGB(0, 0, 225); leds[1].setRGB(0, 0, 225); leds[2].setRGB(0, 0, 225); leds[3].setRGB(0, 0, 225); leds[4].setRGB(0, 0, 225); leds[5].setRGB(0, 0, 225); leds[6].setRGB(0, 0, 225); led[7].setRGB(0, 0, 225); leds[8].setRGB(0, 0, 225); led[9].setRGB(0, 0, 225); led[10].setRGB(0, 0, 225); led[11].setRGB(0, 0, 225); led[12].setRGB(0, 0, 225); led[13].setRGB(0, 0, 225); led[14].setRGB(0, 0, 225); led[15].setRGB(0, 0, 225); FastLED.show(); 지연(500); } FastLED.clear(); FastLED.show();} 무효 루프(){ 키 =customKeypad.getKey(); if (키 &&플레이어==1) { Serial.println("\nP1"); Serial.println(키); n=숫자(키); Serial.println(n); leds[n].setRGB(0, 255, 0); FastLED.show(); a[n]='X'; Serial.println(a[n]); w=체크(a,n); if(w==1) { Serial.println("플레이어 1이 승리했습니다!"); 동안(1) { leds[0].setRGB(0, 255, 0); leds[1].setRGB(0, 255, 0); led[2].setRGB(0, 255, 0); leds[3].setRGB(0, 255, 0); leds[4].setRGB(0, 255, 0); led[5].setRGB(0, 255, 0); leds[6].setRGB(0, 255,0); led[7].setRGB(0, 255, 0); leds[8].setRGB(0, 255, 0); led[9].setRGB(0, 255, 0); leds[10].setRGB(0, 255, 0); led[11].setRGB(0, 255, 0); led[12].setRGB(0, 255, 0); led[13].setRGB(0, 255, 0); led[14].setRGB(0, 255, 0); led[15].setRGB(0, 255, 0); FastLED.show(); 지연(500); FastLED.clear(); FastLED.show(); 지연(500); } } 플레이어++; 지연(1000); } 지연(20); 키 =customKeypad.getKey(); if (키 &&플레이어==2) { Serial.println("\nP2"); Serial.println(키); n=숫자(키); Serial.println(n); leds[n].setRGB(0, 0, 225); FastLED.show(); a[n]='0'; Serial.println(a[n]); w=체크(a,n); if(w==2) { Serial.println("플레이어 2가 승리했습니다!"); 동안(1) { leds[0].setRGB(0, 0, 225); leds[1].setRGB(0, 0, 225); leds[2].setRGB(0, 0, 225); leds[3].setRGB(0, 0, 225); leds[4].setRGB(0, 0, 225); leds[5].setRGB(0, 0, 225); leds[6].setRGB(0, 0, 225); led[7].setRGB(0, 0, 225); leds[8].setRGB(0, 0, 225); led[9].setRGB(0, 0, 225); led[10].setRGB(0, 0, 225); led[11].setRGB(0, 0, 225); led[12].setRGB(0, 0, 225); led[13].setRGB(0, 0, 225); led[14].setRGB(0, 0, 225); led[15].setRGB(0, 0, 225); FastLED.show(); 지연(500); FastLED.clear(); FastLED.show(); 지연(500); } } e++; 플레이어--; 지연(1000); } if(e==8) { Serial.println("게임 추첨"); 동안(1) { leds[0].setRGB(255, 0, 0); leds[1].setRGB(255, 0, 0); leds[2].setRGB(255, 0, 0); led[3].setRGB(255, 0, 0); leds[4].setRGB(255, 0, 0); led[5].setRGB(255, 0, 0); leds[6].setRGB(255, 0, 0); led[7].setRGB(255, 0, 0); leds[8].setRGB(255, 0, 0); led[9].setRGB(255, 0, 0); leds[10].setRGB(255, 0, 0); led[11].setRGB(255, 0, 0); led[12].setRGB(255, 0, 0); led[13].setRGB(255, 0, 0); led[14].setRGB(255, 0, 0); led[15].setRGB(255, 0, 0); FastLED.show(); 지연(1000); FastLED.clear(); FastLED.show(); 지연(500); } } delay(20);}int number(char keyn){ if(keyn =='1') return 0; if(keyn =='2') 반환 1; if(keyn =='3') 반환 2; if(키 =='A') 반환 3; if(keyn =='4') 반환 4; if(keyn =='5') return 5; if(keyn =='6') 반환 6; if(keyn =='B') return 7; if(keyn =='7') 반환 8; if(keyn =='8') 반환 9; if(keyn =='9') 반환 10; if(keyn =='C') 반환 11; if(키 =='*') 반환 12; if(keyn =='0') 반환 13; if(keyn =='#') return 14; if(keyn =='D') return 15;}int check(char a[16],int n){ if(a[0]=='X' &&a[1]=='X' &&a[ 2]=='X' &&a[3]=='X') 반환 1; if(a[0]=='0' &&a[1]=='0' &&a[2]=='0' &&a[3]=='0') return 2; if(a[0]=='X' &&a[4]=='X' &&a[8]=='X' &&a[12]=='X') return 1; if(a[0]=='0' &&a[4]=='0' &&a[8]=='0' &&a[12]=='0') return 2; if(a[0]=='X' &&a[5]=='X' &&a[10]=='X' &&a[15]=='X') return 1; if(a[0]=='0' &&a[5]=='0' &&a[10]=='0' &&a[15]=='0') return 2; if(a[1]=='X' &&a[5]=='X' &&a[9]=='X' &&a[13]=='X') return 1; if(a[1]=='0' &&a[5]=='0' &&a[9]=='0' &&a[13]=='0') return 2; if(a[2]=='X' &&a[6]=='X' &&a[10]=='X' &&a[14]=='X') return 1; if(a[2]=='0' &&a[6]=='0' &&a[10]=='0' &&a[14]=='0') return 2; if(a[3]=='X' &&a[7]=='X' &&a[11]=='X' &&a[15]=='X') return 1; if(a[3]=='0' &&a[7]=='0' &&a[11]=='0' &&a[15]=='0') return 2; if(a[3]=='X' &&a[6]=='X' &&a[9]=='X' &&a[12]=='X') return 1; if(a[3]=='0' &&a[6]=='0' &&a[9]=='0' &&a[12]=='0') return 2; if(a[4]=='X' &&a[5]=='X' &&a[6]=='X' &&a[7]=='X') return 1; if(a[4]=='0' &&a[5]=='0' &&a[6]=='0' &&a[7]=='0') return 2; if(a[8]=='X' &&a[9]=='X' &&a[10]=='X' &&a[11]=='X') return 1; if(a[8]=='0' &&a[9]=='0' &&a[10]=='0' &&a[11]=='0') return 2; if(a[12]=='X' &&a[13]=='X' &&a[14]=='X' &&a[15]=='X') return 1; if(a[12]=='0' &&a[13]=='0' &&a[14]=='0' &&a[15]=='0') return 2;}
제조공정
구성품 및 소모품 Arduino UNO × 1 이 프로젝트 정보 github에서 진행 상황 보기 회로도 논리 분석기 모든 코드는 여기에 있습니다https://github.com/aster94/logic-analyzer
구성품 및 소모품 Arduino UNO × 1 Adafruit RGB 백라이트 LCD - 16x2 × 1 브레드보드(일반) × 1 저항 220옴 × 1 SparkFun 푸시버튼 스위치 12mm × 1 점퍼 와이어(일반) × 1 USB-A-B 케이블 × 1 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 필요한 부품은 위의 그림과