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

전자 체스판(4x4 데모 프로토타입)

구성품 및 소모품

홀 효과 센서
× 16
무납땜 브레드보드 전체 크기
× 1
LED(일반)
× 16
RFID 리더(일반)
125kHz RFID 리더 및 안테나
× 1
Arduino Mega 2560
× 1
RFID 태그 3M
× 2

필요한 도구 및 기계

플렉시 유리
광택지
나무 판자
아크릴 페인트(짙은 녹색 및 크림색) x2
10mm 원형 자석
폰 및 퀸 체스 말
납땜 인두 및 납땜 재료

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

안녕하세요.

저는 터키 앙카라에 있는 Middle East Technical University에서 2018년 졸업생인 Tahir Miriyev입니다. 저는 응용수학을 전공했지만, 특히 전자공학, 디자인, 프로그래밍과 관련된 수작업을 할 때 항상 무언가를 만드는 것을 좋아했습니다. 우리 산업 디자인 부서에서 제공하는 독특한 프로토타이핑 과정 덕분에 정말 흥미로운 것을 만들 수 있는 기회를 얻었습니다. 프로젝트는 전체 학기(4개월) 동안 지속되는 텀 프로젝트로 처리될 수 있습니다. 학생들은 이미 존재하는 제품/데모를 설계하는 창의적인 접근 방식을 찾고 Arduino 마이크로컨트롤러와 센서를 사용하여 아이디어를 실현하는 과제를 받았습니다. 나는 체스에 대해 생각하고 있었고 성공적인 프로젝트에 대한 약간의 연구를 한 후 이전 프로젝트에서 제작자는 기본적으로 Raspberry Pi와 함께 기성 체스 엔진(각 그림의 모든 움직임이 코어에 프로그래밍됨)을 사용한다는 것을 알았습니다. , LED 및 리드 스위치. 하지만 내 프로젝트에서는 체스 엔진과 관련된 외부 소프트웨어를 없애고 RFID 리더, 홀 효과 센서 및 Arduino Mega를 사용하여 도형 인식 문제에 대한 창의적인 솔루션을 찾기로 결정했습니다.

간단히 말해서, "뇌"=마이크로컨트롤러가 있는 체스판이 있고 보드가 손에 들고 있는 그림과 위치를 이해하도록 해야 한다고 가정합니다. 이것이 도형 인식의 문제입니다. 이 문제에 대한 해결책은 모든 말들이 보드의 초기 위치에 서 있는 체스 엔진이 있을 때 간단합니다. 그 이유를 설명하기 전에 몇 가지 설명을 드리겠습니다.

여기에서 작동 방식에 대해 열광적인 사람들을 위해 리드 스위치가 필요한 이유를 설명해야 합니다(제 경우에는 홀 효과 센서를 사용했습니다). 각 부품 아래에 자석을 놓고 센서 위의 자기장의 유무로 인해 보드의 사각형(모든 사각형 아래에 리드 스위치가 있다고 가정)을 사용하면 컨트롤러가 사각형에 조각이 있는지 없는지 여부를 이해할 수 있습니다. 그러나 여전히 정확히 어떤 조각이 정사각형에 서 있는지에 대해 마이크로 컨트롤러에 아무 것도 알려주지 않습니다. 정사각형에 조각이 있음/없음만 알려줍니다. 이 시점에서 우리는 체스 게임이 시작될 때 모든 조각이 초기 위치에 놓이는 체스 엔진을 사용하여 해결할 수 있는 Figure Recognition 문제에 직면해 있습니다. 이런 식으로 마이크로컨트롤러는 모든 주소가 메모리에 고정된 상태에서 처음부터 모든 조각이 어디에 있는지 "알고" 있습니다. 그럼에도 불구하고 이것은 우리에게 큰 한계를 안겨줍니다. 예를 들어 원하는 수의 조각을 선택하여 보드의 아무 곳에나 무작위로 놓고 게임 분석을 시작할 수는 없습니다. 항상 처음부터 시작해야 합니다. 모든 조각은 원래 보드에 있어야 합니다. 조각을 들어 올려 다른 사각형에 놓으면 마이크로 컨트롤러가 위치를 추적할 수 있는 유일한 방법이기 때문입니다. 본질적으로 이것이 내가 발견하고 해결하기로 결정한 문제였습니다.

내 솔루션은 창의적이기는 하지만 매우 간단했습니다. 보드 전면에 RFID 리더기를 배치했습니다. 한편, 조각 아래에 자석뿐만 아니라 RFID 태그를 부착하여 각 조각에 고유한 ID를 부여했습니다. 따라서 원하는 사각형에 그림을 배치하기 전에 먼저 조각을 RFID 리더기에 가까이 대고 ID를 읽고 조각을 식별하고 메모리에 저장한 다음 원하는 곳에 배치할 수 있습니다. 또한 리드 스위치를 사용하는 대신 회로 설계를 단순화하기 위해 유사하게 작동하는 홀 효과 센서를 사용했습니다. 0 또는 1을 디지털 데이터로 마이크로 컨트롤러에 보내는 유일한 차이점은 "있다" 또는 정사각형에 "없다"는 조각이 있습니다. LED도 추가했는데(불행히도 같은 색상이 아니고 LED가 없음) 조각을 들어 올릴 때 들어 올린 조각을 놓을 수 있는 모든 사각형 위치가 켜집니다. 체스 학습자를 위한 교육 실습이라고 생각하세요:)

마지막으로 여러 기술을 사용했음에도 불구하고 프로젝트가 복잡하거나 복잡하지 않고 간단하고 이해할 수 있다는 점에 주목하고 싶습니다. 저는 8x8 체스판을 진행할 시간이 없었습니다(터키에서는 64개의 홀 효과 센서가 비싸기 때문에 프로젝트와 관련된 모든 비용을 충당했습니다). 그래서 4x4 데모 버전을 테스트한 두 부분만 테스트했습니다:Pawn 및 Queen . 체스 엔진을 사용하는 대신 모든 것을 생성하는 Arduino용 소스 코드를 작성했습니다.

단계별 단계로 넘어가기 전에 프로젝트 수행 방법에 대한 설명을 보려면 설명 동영상을 보고 내가 말하는 내용에 대한 직관적인 아이디어를 얻는 것이 좋습니다.

참고 #1:빨간색 LED 중 하나(행의 첫 번째/왼쪽에서 오른쪽으로)가 끊어졌습니다. 신경 쓰지 마세요.

참고 2:널리 사용되지만 내 경험에 따르면 RFID 기술은 DIY 애플리케이션에 사용하기에 가장 좋은 아이디어는 아닙니다(물론 대안이 있는 경우). 모든 것이 작동하기 전에 체스 말을 판독기에 가까이 놓고 ID를 올바르게 읽을 때까지 기다리는 여러 시도를 했습니다. RFID 리더가 ID를 읽는 방식이 골칫거리일 뿐이므로 직렬 포트를 설정해야 합니다. 문제를 이해하려면 스스로 시도해야 합니다.

다음은 모든 도구 목록입니다. 나는 프로젝트에 사용:

전자 부품:

<울>
  • 브레드보드(x1)
  • <울>
  • 전방향 A1126LUA-T(IC-1126 SW OMNI 3-SIP ALLEGRO) 홀 효과 센서(x16)
  • <울>
  • 기본 5mm LED(x16)
  • <울>
  • 점퍼 와이어
  • <울>
  • 125kHz RFID 리더 및 안테나(x1)
  • <울>
  • Arduino 메가(x1)
  • <울>
  • RFID 3M 태그(x2)
  • 기타 자료:

    <울>
  • 플렉시 유리
  • <울>
  • 광택지
  • <울>
  • 짧은 판자(나무)
  • <울>
  • 아크릴 물감(짙은 녹색 및 크림색) x2
  • <울>
  • 얇은 판지
  • <울>
  • 10mm 원형 자석(x2)
  • <울>
  • 폰과 퀸 조각
  • <울>
  • 납땜 인두 및 납땜 재료
  • 물건이 어떻게 만들어졌는지 설명할 시간입니다. 단계별 설명을 따르십시오.

    1. A B C D 1 2 3 4 열거된 16개의 정사각형을 만들기 위해 21x21cm 판지와 보드 상단의 벽을 자르고 붙일 여분의 판지를 가져옵니다. 판지가 얇기 때문에 각 정사각형에 16개의 홀 효과 센서를 붙일 수 있습니다. 각각 3개의 다리와 16개의 LED와 2개의 다리가 있습니다.

    2. 구성 요소를 설정한 후 홀 효과 센서 및 LED의 다리를 점퍼 와이어에 납땜하기 위해 약간의 납땜을 수행해야 합니다. 이 시점에서 LED의 + 및 - 다리와 홀 효과 센서의 VCC, GND 및 PIN 다리와 혼동하지 않도록 색상 전선을 현명하게 선택하는 것이 좋습니다. 물론 센서와 WS2812 유형의 LED가 이미 납땜된 PCB를 인쇄할 수도 있지만 프로젝트를 단순하게 유지하고 "수작업"을 더 하기로 결정했습니다. 이 시점에서 코드와 센서를 준비하기만 하면 됩니다. Fritzing 방식 이후의 나중 단계에서 각 와이어의 끝 부분을 부착해야 하는 위치를 확인할 수 있습니다. 곧, 그들 중 일부는 Arduino Mega의 PIN으로 직접 이동하고(Arduino에는 충분함), 다른 일부는 브레드보드로 이동하며 모든 GND는 나중에 단일 코드 조각에 납땜될 수 있습니다(공통 접지 만들기). Arduino 보드의 GND에 연결해야 합니다. 여기서 한 가지 중요한 참고 사항:홀 효과 센서는 OMNIDIRECTIONAL입니다. 즉, 자석의 어느 극이 센서에 가깝게 유지되는지는 중요하지 않으며 근처에 자기장이 있는 동안 0 데이터를 보내고 자기장이 없을 때 1을 보냅니다. 즉, 자석이 센서에서 멀리 떨어져 있습니다(5sm 이상).

    3. 비슷한 21x21cm 판지를 준비하고 Arduino Mega와 긴 브레드보드를 ​​그 위에 고정합니다. 골판지에서 원하는 높이의 벽 4개를 다시 자르고 21x21cm 정사각형 보드의 두 층으로 수직으로 붙일 수도 있습니다. 그런 다음 Fritzing Schematics를 따라 설정하십시오. LED 및 홀 효과 센서를 사용한 후 RFID 리더를 설정할 수도 있습니다.

    4. 기본 코드를 사용하여 신호를 보내 모든 LED와 센서가 작동하는지 테스트합니다. 이 단계를 수행하면 모든 것이 제대로 작동하는지 테스트하고 보드를 추가로 구성할 수 있으므로 이 단계를 피하지 마십시오.

    5. 아래에 반지름 10cm의 자석 2개와 원형 RFID 태그를 부착하여 폰과 퀸을 준비합니다. 나중에 Arduino IDE의 직렬 화면에서 해당 태그의 ID를 읽어야 합니다.

    6. 모든 것이 잘 작동한다면 메인 코드를 시작하고 시도해 볼 수 있습니다!

    7(선택 사항). 데모를 보다 자연스럽게 볼 수 있도록 나무로 예술적인 작업을 할 수 있습니다. 그것은 당신의 의지와 상상에 달려 있습니다.

    다음은 여러 단계의 동영상과 사진입니다.

    관심을 가져주셔서 감사합니다! 모든 것을 테스트하고 내가 놓친 실수, 개선 사항, 제안 등에 대한 의견을 자유롭게 작성하십시오. 프로젝트에 대한 의견을 기다리겠습니다. 프로젝트에 도움이 필요하면 저에게 메일을 보내주십시오(miriyevt@gmail .com) 또는 Skype(tahir.miriyev9r1)에 추가하면 대화 일정을 잡고 세부적으로 논의할 수 있습니다. 행운을 빕니다!

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

    코드

    <울>
  • thinK_code.ino
  • thinK_code.ino아두이노
    코드 분석 과정을 이해하기 쉽게 하기 위해 최대한 많은 댓글을 남기려고 노력했습니다. 솔직히 로직은 언뜻 보기에 다소 복잡해 보일 수 있지만 코드의 로직을 더 깊이 파고들면 더 포괄적으로 보일 것입니다.

    참고:실제 체스판과 유사하게 A1, A2, A3, A4, B1, ..., C1, ... ,D1,.., D4로 사각형을 추상적으로 계산했습니다. 그러나 코드에서 이 표기법을 사용하는 것은 실용적이지 않습니다. 따라서 배열을 사용하고 정사각형을 각각 00, 01, 02, 03,10,11,12,13,..., 32,33으로 표현했습니다.
    #include SoftwareSerial RFID(11, 12);//------------------------------------------------- ------------ 시작 ------------------------------------- -------------------------------------------------- ------int empty_pos[2];int 그림_pos[2][2]; //그림 위치를 3개의 항목(x pos, y pos 및 값 1(queen), 2(pawn)int new_id[14] ={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};int id_type_matrix[4][4] ={{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}; 정수 임시 =0; 정수 여왕 ID[14] ={2, 53, 65, 48, 48, 56, 51, 49, 55, 70, 65, 51, 52, 3};int pawn_id[14] ={2, 53, 65, 48, 48, 56, 51, 56, 67, 49, 56, 52, 68, 3};int temp_vect[2];int count =0;int ID =0;int yeni_id[14]; //홀 효과 센서의 초기 배열 행렬int hes_bool_matrix[4][4];// 홀 효과 목록 Arduino의 센서 핀 2개const int hes_00 =44;const int hes_01 =45;const int hes_02 =46;const int hes_03 =47;const int hes_10 =48;const int hes_11 =49;const int hes_;const int hes_12;const int hes_20 =3;const int hes_21 =4;const int hes_22 =5;const int hes_23 =6;const int hes_30 =7;const int hes_31 =8;const int hes_32 =9;const int =hes_pin_matrix[4][4] ={ {hes_00, 그는 leds_01, hes_02, hes_03}, {hes_10, hes_11, hes_12, hes_13}, {hes_20, hes_21, hes_22, hes_23}, {hes_30, hes_31, hes_32, hes_33} 핀 =23; const int led_02 =24; const int led_03 =25; const int led_10 =26; const int led_11 =27; const int led_12 =28; const int led_13 =29; const int led_20 =30;const; const int led_22 =32, const int led_23 =33, const int led_30 =34, const int led_31 =35, const int led_32 =36, const int led_33 =37, int led_matrix[4][4] ={ {led_0 led_01, led_02, led_03}, {led_10, led_11, led_12, led_13}, {led_20, led_21, led_22, led_23}, {led_30, led_31, led_32, led_33}};//---------- ------------------------------------------- 설정 영역 ----- -------------------------------------------------- -------------------------- 무효 setup() { RFID.begin(9600); Serial.begin(9600); //홀 효과 센서의 읽기(입력) 모드 pinMode(hes_01, INPUT); 핀모드(hes_02, 입력); 핀모드(hes_03, 입력); 핀모드(hes_00, 입력); 핀모드(hes_10, 입력); 핀모드(hes_11, 입력); 핀모드(hes_12, 입력); 핀모드(hes_13, 입력); 핀모드(hes_20, 입력); 핀모드(hes_21, 입력); 핀모드(hes_22, 입력); 핀모드(hes_23, 입력); 핀모드(hes_30, 입력); 핀모드(hes_31, 입력); 핀모드(hes_32, 입력); 핀모드(hes_33, 입력); //LED 핀에 대한 쓰기(출력) 모드 pinMode(led_00, OUTPUT); 핀모드(LED_01, 출력); 핀모드(LED_02, 출력); 핀모드(LED_03, 출력); 핀모드(LED_10, 출력); 핀모드(LED_11, 출력); 핀모드(LED_12, 출력); 핀모드(LED_13, 출력); 핀모드(LED_20, 출력); 핀모드(LED_21, 출력); 핀모드(LED_22, 출력); 핀모드(LED_23, 출력); 핀모드(LED_30, 출력); 핀모드(LED_31, 출력); 핀모드(LED_32, 출력); 핀모드(LED_33, 출력); read_tags(); 지연(1000); first_Figure(); 지연(1000); Serial.end(); RFID.end(); 지연(5000); Serial.begin(9600); 지연(1000); RFID.begin(9600); 지연(1000); read_tags(); 지연(5000); //RFID.플러시(); // 다중 읽기 중지 second_Figure(); 지연(1000);// id_type_matrix[0][2] =2;// id_type_matrix[2][1] =1;}//------------------ ----------------------------------기능 영역--------------- ----------------------------------------------------------//--- --------------------------------------RFID ID 추적 및 피규어 인식 ------- ---------------------------------------- 부울 비교_ID(int aa[14], int bb[14]){ 부울 ff =거짓; 정수 fg =0; for (int cc =0; cc <14; cc++) { if (aa[cc] ==bb[cc]) { fg++; } } if (fg ==14) { ff =true; } return ff;}int read_tags(){ Serial.println("그림을 RFID 리더기에 가까이 놓으십시오"); 지연(5000); RFID.flush(); // 다중 읽기 중지 if (RFID.available()> 0) { delay(300); (int z =0; z <14; z++) { ID =RFID.read(); new_id[z] =아이디; Serial.println(new_id[z], DEC); 지연(500); } } Serial.println("아이디 읽기가 완료되었습니다. "); ++카운트; 지연(5000); //그림을 보드에 놓고 두 번째 그림을 RFID 리더 앞에 놓을 시간return new_id;}void first_Figure() { if (compare_ID(new_id, queen_id) ==true) { Serial.println("QUEEN IS DETECTED" ); for (int s =0; s <=3; s++) { for (int t =0; t <=3; t++) { if (digitalRead(hes_pin_matrix[s][t]) ==0) { id_type_matrix[s ][t] =1; temp_vect[0] =s; temp_vect[1] =t; Serial.print("여왕은 다음에 위치합니다:"); Serial.print(들); Serial.println(t); digitalWrite(led_matrix[s][t],HIGH); 지연(1000); digitalWrite(led_matrix[s][t],LOW); } } } } else if (compare_ID(new_id, pawn_id) ==true) { Serial.println("폰이 감지됨"); for (int s =0; s <=3; s++) { for (int t =0; t <=3; t++) { if (digitalRead(hes_pin_matrix[s][t]) ==0) { id_type_matrix[s ][t] =2; temp_vect[0] =s; temp_vect[1] =t; Serial.print("폰은 다음에 위치합니다:"); Serial.print(들); Serial.println(t); digitalWrite(led_matrix[s][t],HIGH); 지연(1000); digitalWrite(led_matrix[s][t],LOW); } } } } else { Serial.println("정의되지 않은 숫자 "); }} 무효 second_Figure() { if (compare_ID(new_id, queen_id) ==true) { Serial.println("QUEEN IS DETECTED"); for (int s =0; s <=3; s++) { for (int t =0; t <=3; t++) { if (digitalRead(hes_pin_matrix[s][t]) ==0 &&(s !=temp_vect[0] || t !=temp_vect[1])) { id_type_matrix[s][t] =1; Serial.print("여왕은 다음에 위치합니다:"); Serial.print(들); Serial.println(t); digitalWrite(led_matrix[s][t],HIGH); 지연(1000); digitalWrite(led_matrix[s][t],LOW); } } } } else if (compare_ID(new_id, pawn_id) ==true) { Serial.println("폰이 감지됨"); for (int s =0; s <=3; s++) { for (int t =0; t <=3; t++) { if (digitalRead(hes_pin_matrix[s][t]) ==0 &&(s !=temp_vect[0] || t !=temp_vect[1])) { id_type_matrix[s][t] =2; Serial.print("폰은 다음에 위치합니다:"); Serial.print(들); Serial.println(t); digitalWrite(led_matrix[s][t],HIGH); 지연(1000); digitalWrite(led_matrix[s][t],LOW); } } } }}//------------------------------------------- ---- 그림 찾기-------------------------------------------------------- ------------------------------ // 그림을 boardvoid leds_off()에 다시 배치할 때만 LED를 끄는 추가 기능 { int i, j; for (i =0, i <=3, i++) { for (j =0, j <=3, j++) { digitalWrite(led_matrix[i][j], LOW); } }}//--------------------------------------------- ----움직이는 여왕-------------------------------------------- -------------------------------------------------- --void move_queen() { int i, j; for (i =empty_pos[0]; 나는 <3;) { digitalWrite(led_matrix[++i][empty_pos[1]], HIGH); //수직선을 따라 조명 } for (i =empty_pos[0]; i> 0;) { digitalWrite(led_matrix[--i][empty_pos[1]], HIGH); } for (i =empty_pos[1], i <3;) { digitalWrite(led_matrix[empty_pos[0]][++i], HIGH); //수평선을 따라 조명 } for (i =empty_pos[1]; i> 0;) { digitalWrite(led_matrix[empty_pos[0]][--i], HIGH); } 나는 =empty_pos[0]; j =empty_pos[1]; for (i =i - 3, j =j - 3; i <=3, j <=3; i++, j++) { if (i>=0 &&j>=0 &&i !=empty_pos[0]) { Serial.print(i); Serial.println(j); digitalWrite(led_matrix[i][j], HIGH); } } 나는 =empty_pos[0]; j =empty_pos[1]; for (i =i + 3, j =j - 3; i>=0, j <=3; i--, j++) { if (i>=0 &&i <=3 &&j>=0 &&j <=3 &&i !=empty_pos[0]) { Serial.print(i); Serial.println(j); digitalWrite(led_matrix[i][j], HIGH); } } }//------------------------------------- 숫자 읽기 시작 및 위치 저장 각각에 대해--------------------------void figure_reading() { // 루프의 모든 위치를 읽어 폰의 위치를 ​​감지합니다. int i, j, found_Figure =0; 시작:found_Figure =0; //보드의 모든 점유(0) 및 빈(1) 위치 읽기 // 0(=빈 사각형), 1(=점유 사각형)을 변수에 할당 hes_bool_matrix[0][0] =digitalRead(hes_00); hes_bool_matrix[0][1] =digitalRead(hes_01); hes_bool_matrix[0][2] =digitalRead(hes_02); hes_bool_matrix[0][3] =digitalRead(hes_03); hes_bool_matrix[1][0] =digitalRead(hes_10); hes_bool_matrix[1][1] =digitalRead(hes_11); hes_bool_matrix[1][2] =digitalRead(hes_12); hes_bool_matrix[1][3] =digitalRead(hes_13); hes_bool_matrix[2][0] =digitalRead(hes_20); hes_bool_matrix[2][1] =digitalRead(hes_21); hes_bool_matrix[2][2] =digitalRead(hes_22); hes_bool_matrix[2][3] =digitalRead(hes_23); hes_bool_matrix[3][0] =digitalRead(hes_30); hes_bool_matrix[3][1] =digitalRead(hes_31); hes_bool_matrix[3][2] =digitalRead(hes_32); hes_bool_matrix[3][3] =digitalRead(hes_33); for (i =0; i <=3; i++) { for (j =0; j <=3; j++) { if (hes_bool_matrix[i][j] ==0) { found_Figure++; if (found_Figure ==1) { if (id_type_matrix[i][j] ==0) { id_type_matrix[i][j] =임시; 온도 =0; } if(id_type_matrix[i][j]==1){ Serial.print("여왕이 서 있습니다:"); Serial.print(i); Serial.println(j); Figure_pos[0][0] =나; Figure_pos[0][1] =j; } else if(id_type_matrix[i][j]==2){ Serial.print("폰이 서 있습니다:"); Serial.print(i); Serial.println(j); Figure_pos[0][0] =나; Figure_pos[0][1] =j; //if (id_type_matrix[i][j] ==0) { //id_type_matrix[i][j] =임시; //온도 =0; }} } } else if (found_Figure ==2) { if (id_type_matrix[i][j] ==0) { id_type_matrix[i][j] =임시; 온도 =0; } if(id_type_matrix[i][j]==1){ Serial.print("여왕이 서 있습니다:"); Serial.print(i); Serial.println(j); Figure_pos[1][0] =나; Figure_pos[1][1] =j; //if (id_type_matrix[i][j] ==0) { //id_type_matrix[i][j] =임시; //온도 =0; } } else if(id_type_matrix[i][j]==2){Serial.print("폰이 서 있습니다:"); Serial.print(i); Serial.println(j); Figure_pos[1][0] =나; Figure_pos[1][1] =j;// if (id_type_matrix[i][j] ==0) {// id_type_matrix[i][j] =temp;// temp =0; } //나가기; } } } }} out:if (found_Figure ==0 || found_Figure ==1) { goto start; } else if (found_Figure ==2) { leds_off(); } //---------------------------------------------- 우리 어떤 그림을 고를지 선택 ------------------------------------------ -------------------- empty_pos[0] =-1; 지연(2000); if (digitalRead(hes_pin_matrix[Figure_pos[0][0]][Figure_pos[0][1]]) ==1) { empty_pos[0] =figure_pos[0][0]; empty_pos[1] =그림_pos[0][1]; 임시 =id_type_matrix[empty_pos[0]][empty_pos[1]]; id_type_matrix[empty_pos[0]][empty_pos[1]] =0; } else if (digitalRead(hes_pin_matrix[Figure_pos[1][0]][Figure_pos[1][1]]) ==1) { empty_pos[0] =figure_pos[1][0]; empty_pos[1] =그림_pos[1][1]; 임시 =id_type_matrix[empty_pos[0]][empty_pos[1]]; id_type_matrix[empty_pos[0]][empty_pos[1]] =0; } //--------------------------------------------------------- 이동하는 Pawn 또는 QUEEN -------------------------------------------------- -------------------------------------------------- if(temp==1){ if ( empty_pos[0] !=-1) { move_queen(); 고토 시작; } } else if(temp==2){if (empty_pos[0] !=-1) { if (empty_pos[0] <2) { digitalWrite(led_matrix[empty_pos[0] + 1][empty_pos[1]] , 높은); digitalWrite(led_matrix[empty_pos[0] + 2][empty_pos[1]], HIGH); } else if (empty_pos[0] ==2) { digitalWrite(led_matrix[empty_pos[0] + 1][empty_pos[1]], HIGH); } 또 다른; } delay(100);} figure_reading();}//------------------------------------ ---------------------------------- 루프 시작 -------------- -------------------------------------------------- ------------------- 무효 루프() { figure_reading();}

    회로도

    회로도는 약간 복잡하지만 아이디어는 명확해야 합니다. Fritzing을 사용한 것은 이번이 처음이었습니다. 어쨌든, 나는 회로도 안에 모든 것을 기록했습니다.

    참고:Fritzing 데이터베이스의 구성 요소 중 RDIF Reader의 정확한 모델을 찾지 못했습니다. 제가 사용한 모델은 125Khz RFID 모듈인 UART입니다. Arduino로 이 모듈을 설정하는 방법에 대한 자습서는 Youtube에서 찾을 수 있습니다. 4x4demo_q0nvG3T3nS.fzz

    제조공정

    1. 시제품에 대한 찬가
    2. 전자 잉크
    3. Raspoulette 프로토타입
    4. 프로토타입 사출 금형 대 생산 사출 금형
    5. 전자 피부는 통증에 반응합니다
    6. PCB 프로토타입 제작 회사를 선택하는 방법
    7. 중요 프로토타입 PCB 정의:2부
    8. 프로토타이핑이란 무엇입니까?
    9. 전자 펌프 소개
    10. 전자 점화 시스템의 작동 이해