전자 체스 판 만들기


14

나는 규칙적인 조각으로 재생할 수있는 목조 체스 보드를 만들고 싶습니다 (예 : RFID 코드, 자석을 사용하는 수정 된 조각은 아니지만 ...). 두 번째 선수.

보드에서 조각을 감지하는 방법에 대해 생각하고 있으며 어떤 조각이 어디에 있는지 알 필요가 없다는 결정을 내 렸습니다. "진실"이 소프트웨어 내에 있으므로 조각을 A에서 B로 옮기면 , 소프트웨어는 어느 조각이 이동했는지 알아낼 수 있습니다.

그래서 체스 판의 각 필드에 두 개의 구멍을 뚫을 생각이있었습니다. 하나는 중앙에, 하나는 오른쪽 상단에 있습니다.

  • 중앙에있는 것은 밝기 센서가 조각이 필드 위에 서 있는지 여부를 감지하는 데 사용됩니다.
  • 모퉁이에있는 것은 실제 상황이 소프트웨어 상황과 다시 일치하도록 사용자가 컴퓨터로 이동해야하는 부분을 표시하는 LED에 사용됩니다.

Node.js로 작성 될 소프트웨어의 하드웨어 기반으로 Raspberry Pi를 사용하고 싶습니다 (하지만이 질문에는 중요하지 않습니다).

결국, 64 개의 밝기 센서와 64 개의 LED가 개별적으로 처리되어야합니다. 다시 말해, 64 개의 출력과 64 개의 입력이 필요합니다. 물론 이것은 Raspberry Pi가 즉시 처리하지 못하는 것입니다 .128 포트를 갖는 것보다 더 좋은 방법이 있어야한다고 생각합니다.

보드 상태를 감지하는 것이 더 중요한 작업이라고 생각하기 때문에 8x8 스위치 매트릭스를 처리하는 방법을 웹에서 검색하기 시작했습니다. 보드의 열을 순차적으로 스캔하는 마이크로 컨트롤러를 사용하라는 제안을 발견했으며 각 열에서 행 (= 필드)의 사용 여부를 감지했습니다.

이렇게하면 보드 상태를 읽을 수 있도록 8 개의 출력과 8 개의 입력을 갖는 복잡성이 줄어 듭니다.

이것에 대해 몇 가지 질문이 있습니다.

  1. 내 생각이 맞습니까? 즉, 이것이 올바른 접근법입니까, 아니면 조심해야 할 더 나은 대안이 있습니까?
  2. 마이크로 컨트롤러에 대한 경험이 없으므로 무엇을 찾아야합니까? 내가 쓸 수있는 언어로 프로그래밍 할 수있는 16 핀 마이크로 컨트롤러가 필요합니까?
  3. 아무도 그런 보드를 만들었고 프로세스를 안내하는 자습서에 대해 조언이나 알고 있습니까?

1
당신은 올바른 생각을 가지고 있습니다. 그래도 센싱 어플리케이션에 약간의 개선이 필요합니다. 조각의 크기와 무게에 따라 빛 차단 또는 촉각 버튼의 감지 체계를 사용할 수 있습니다. 여기서 진짜 질문은 당신이 어떤 작품인지 어떻게 말할 것입니까? 아마도 맞춤 조각이 필요할 것입니다. 각각에 RFID 태그를 넣은 다음 각 사각형에 RFID 스캐너가 있습니까? 과잉이지만 생각.
mcmiln

1
설명하는 매트릭스 스캐닝 라우팅은 2 개의 행과 2 개의 열에 4 개의 조각이 있으면 대처할 수 없습니다. 3-8 라인 디코더 (74138)를보고 5-64로 추정
Icy

2
조각의 초기 라인업은 항상 동일하므로 소프트웨어는 어느 조각이 어디에 있는지 알고 있습니다. 그런 다음 조각을 A에서 B로 이동하면 소프트웨어는 어느 조각이 어디로 이동했는지 알 수 있습니다. 물론 이것은 임의의 라인업으로 시작할 수 없지만 소프트웨어에서 수동으로 설정할 수도 있습니다.
Golo Roden

1
번거로운 것 같습니다. 소프트웨어 비디오 방법을 사용했을 것입니다. OpenCV와 카메라. 그리고 프로젝터.
통행인

2
이 가이드 는 센서 / 감지 조직에
한해

답변:


5

이미지는 천 단어의 가치가 있기 때문에 LDM-24488NI 의 예는 다음 과 같습니다 . 64-led matrix

여기에 이미지 설명을 입력하십시오

어플리케이션에는 LED 용 매트릭스와 센서 용 매트릭스가 필요하며 총 32 개의 IO 핀이 필요합니다. RPi에는 그 수가 많지 않으므로 1-8 대 demux 를 사용하여 개별 행과 열을 선택해야합니다.

여기에 이미지 설명을 입력하십시오

LED의 경우 한 번에 하나의 LED 만 필요하므로 행과 열 모두에 디멀티플렉서를 사용할 수 있습니다. 센서의 경우 한 행에서 여러 개의 활성 센서를 감지 할 수 있도록 행에 대한 디 먹스와 열에 대한 개별 라인을 사용하는 것이 좋습니다. 그러면 필요한 핀 수를 17 핀으로 가져와 RPi에서 처리 할 수 ​​있습니다.


12

예, 설명하는대로 멀티플렉싱하는 것은 여러 가지 문제를 해결하는 일반적인 방법입니다.

가장 까다로운 부분은 광 센서의 아날로그 특성을 다루는 것입니다. CdS LDR (light-dependent resistors)은 민감하고 저렴하며 사람의 가벼움 범위에서 쉽게 측정 할 수있는 큰 응답을 생성하기 때문에이 경우 가장 적합 할 것입니다. 전기적으로 저항은 더 밝아 질수록 저항이 감소하는 저항입니다.

8 개의 아날로그 입력이있는 마이크로를 사용하면 멀티플렉싱이 간단 해집니다. 그것은 당신의 mux의 절반이 마이크로에 내장되어 있다는 것을 의미합니다. 예를 들어 한 행의 LDR을 활성화하고 8 개의 열 신호를 마이크로로 직접 읽습니다.

64 개의 아날로그 입력을 순차적으로 스캔하는 것은 일반 마이크로로 인간의 관점에서 쉽게 순간적으로 수행 할 수 있습니다. 100µs마다 새로운 값을 읽을 수 있다고 가정 해 봅시다. 작고 저렴한 마이크로 인 경우에도 "길다"입니다. 즉, 전체 보드가 6.4ms마다 스캔되므로 지연을 감지하는 것보다 훨씬 빠릅니다.

LED 멀티플렉싱은 디지털 출력으로 이루어지기 때문에 훨씬 더 쉽습니다. 다수의 마이크로는 16 개 이상의 디지털 출력을 가지고 있으므로 아무런 문제가 없습니다. 일어날 다른 것들이 있으며, 지금보다 더 빨리 핀을 사용하지만, 44 핀이 아니라면 64 핀 마이크로가 충분할 것입니다.

아마도 보드 I / O를 처리하는 데 하나의 마이크로를 바칠 것입니다. 이는 충분한 I / O 핀, A / D 입력 등을 갖도록 최적화되어 있습니다. 그런 다음 UART를 통해 주 계산 엔진과 인터페이스합니다. 프로토콜은 "스퀘어 라이트 3,2"또는 "스퀘어 5,4에서 제거 된 조각"처럼 보입니다. 또한 프로토콜을 동일하게 유지하는 한 향후 완전히 다른 하드웨어 인터페이스를 허용합니다.


7

LED의 경우 ,이를 수행하는 확실한 방법은 체스 판의 각 행과 각 열에 대해 총 8 + 8 = 16 개의 핀을 출력하는 것입니다. 양극은 행 와이어에 연결되고 음극은 열 와이어에 연결된다. LED를 켜려면 양극 와이어를 양극 (논리 1)과 음극 와이어를 음 (논리 0)으로 만들고 나머지는 반대 상태로 유지합니다 (따라서 나머지 LED는 중립 또는 역방향 바이어스를 갖습니다).

여기서 마이크로 컨트롤러는 LED를 서로 연결할 수 있도록 충분히 높거나 낮은 전압을 제공한다고 가정합니다. 그렇지 않은 경우 각 라인마다 트랜지스터 또는 버퍼가 필요합니다. 5V 전원 공급 장치를 사용하면 LED가 2V 정도 떨어지고 전류 제한 저항보다 합리적인 전압 강하를 원한다는 점을 감안하면 단단합니다 (둘 다가 아니라 행 라인 또는 열 라인에만 설치하면 됨).

출력이 3 상태 인 경우 (즉, 로직 0 및 로직 1 외에 입력을 일시적으로 입력으로 구성하여 높은 임피던스 상태로 설정할 수있는 경우) LED가있는 4x8 그리드를 영리하게 사용할 수 있습니다. 반 평행 쌍으로 연결됩니다. 이 설정에서 사용하지 않는 출력을 높은 임피던스로 설정하는 것이 중요합니다. 그렇지 않으면 원치 않는 LED가 켜집니다.

두 경우 모두 전류 소모 에 대해 고려해야 하며 소프트웨어 오류로 인해 한 번에 모든 LED가 한 번에 한 줄에 점등 될 가능성 이 있는지 여부를 고려해야합니다. .)


센서의 경우가 더 복잡합니다. 포토 트랜지스터가 반드시 한 방향으로 만 작동한다고 보장 할 수는 없지만 저항 센서를 사용한다고 가정하겠습니다.

LED 조명에 사용하는 것과 동일한 8 행 출력을 사용할 수 있지만 감지 전용 열 입력 8 개가 필요합니다. 의심 할 여지없이, 이와 같은 키패드 회로를 보았을 것입니다. 이것들은 한 번에 하나의 키만 누르도록 설계되었습니다 . 사용자가 1,3,7 및 9를 함께 누르면 다른 세 개의 스위치를 통한 전류 경로가 여전히 존재하기 때문에 키패드가 사용자가이 4 개의 키 중 하나를 놓았는지 감지 할 수 없습니다.

음악 키보드에 사용되는 솔루션 (한 번에 하나 이상의 매트릭스 요소를 수행하도록 설계됨)은 각 스위치와 직렬로 다이오드를 갖는 것입니다.

또 다른 해결책은 다음 과 같은 개방형 컬렉터 출력 (또는 MOSFET IC를 사용하는 경우 개방 드레인) 이있는 4 개의 4 ~ 16 디코더 IC 를 구입하는 것입니다 . 오픈 컬렉터는 IC의 출력이 전류를 싱킹하지 않고 싱킹한다는 것을 의미합니다. 따라서 16 개의 센서를 16 개의 칩 출력에 연결할 수 있고 다른 쪽 끝을 풀업 저항과 함께 사용할 수 있습니다 (ADC도 여기에 연결). 하나의 출력을 낮게 (전도) 가져오고 다른 15 개를 높게 (비전도) 유지합니다. 이는 다른 15 개의 출력이 공통점에 전류를 쏟아내는 표준 논리 출력과 대조됩니다.

이 IC에 대한 입력은 16 비트 출력 중 하나를 선택하기 위해 4 비트 바이너리이지만 칩을 활성화 / 비활성화하기위한 추가 입력이 있습니다. 따라서 64 개의 센서에 연결된 64 개의 개방형 수집기 싱크 배열을 가질 수 있으며 센서의 다른 쪽 끝은 모두 단일 풀업 저항 및 아날로그-디지털 변환기와 공통입니다. 이를 위해서는 마이크로 컨트롤러에 총 8 개의 출력이 필요합니다. 4 개에서 16 개까지의 선택 신호 (4 개 칩 모두에 공통)를 사용하려면 4 개, 인 에이블 신호 (각 칩당 1 개)를 사용하려면 4 개가 필요합니다.

편집 : 3 ~ 8 디코더 ( 8 of 1 = 8 중 1 라인이라고도 함)는 4 ~ 16보다 더 많은 것으로 보이지만 8 IC는 4보다 훨씬 더 지저분합니다. 유용 할 수있는 또 다른 유형의 IC는 8 진 카운터 (그리고 10 번째 카운터를 9 번째 출력을 리셋 라인에 연결하여 8 진 카운터로 구성 할 수있는 가장 일반적인 사촌 카운터 ) 디코더 IC보다 마이크로 컨트롤러의 I / O 핀. 일반적으로 재설정 및 활성화를위한 추가 입력이 있습니다. 시프트 레지스터 라고하는 IC도 있는데 , 하나는 직렬을 병렬로 변환하기위한 것이고 다른 하나는 병렬을 직렬로 변환하기위한 것입니다. 마지막으로buffers 는 Rasberry Pi와 체스 판 사이에 놓을 수있어 과전류로 인해 Pi가 파괴되지 않습니다. 이들 모두는 멀티플렉싱 회로에 유용 할 수 있습니다.


1
시프트 레지스터를 언급하면 ​​LED 출력에도 사용할 수 있습니다. 또 다른 카운터와 8 비트 쉬프트 레지스터는 3 상태가되어 눈에 띄는 깜박 거림을 피하기에 충분히 빠르면 전체 어레이를 2 개 또는 3 개 이상의 핀으로 구동 할 수 있습니다.
hobbs December

@ hobbs OP는 한 번에 하나 또는 두 개의 LED 만 켜고 싶기 때문에 깜박임이 문제라고 생각하지 않습니다. LED를 구동하기 위해 하나의 직선 및 하나의 반전 10 년 / 8 진수 카운터 / 시프트 레지스터가 있다면 3 상태조차 실제로 필요하지 않습니다. 공통 재설정, 열 진행, 행 진행과 같은 3 개의 핀을 완벽하게 달성 할 수 있습니다. 센서의 더 어려운 문제를 해결하기 위해 다른 모든 핀을 저장하십시오.
Level River St

LED의 경우 MAX7219 / 7221 LED 드라이버도 사용할 수 있습니다. 이것은 입력 수를 3-클럭, 데이터, 래치로 줄입니다.
jnovacho

4

멀티플렉싱은 실제로 일반적인 관행입니다.

라즈베리 파이 핀에서 더 많은 것을 얻을 수있는 몇 가지 방법이 있습니다

하나는 칩을 사용하여 무거운 물건을 들어 올리는 것입니다. 예를 들어 보드의 상태를 읽기 위해 8 개의 입력과 8 개의 출력이있는 경우 카운터를 사용하여 8 개의 입력을 한 번에 하나씩 올릴 수 있습니다. 이를 위해 Arduino에 2 개의 핀이 필요합니다. 하나는 첫 번째 핀으로 재설정하고 다른 하나는 "다음 행으로 이동"합니다. 당신은 6 핀을 저장했습니다!

6 개의 핀을 저장하는 것만으로는 충분하지 않을 수 있습니다. 여기서 어디로 갈 수 있는지 살펴보십시오. 8x8 그리드를 16x4 그리드로 재배 열하는 경우 http://www.instructables.com/id/16-Stage 와 같은 것을 사용할 수 있습니다 -Decade-Counter-Chain-Using-two-4017-Chi /? ALLSTEPS ( 상반부를 무시하고, 상단에서 하단으로 내려 오는 두 줄은 "재설정", 왼쪽 상단에서, " 다음 행으로 이동하십시오 "(시계는 여기에서 CLK라고 함). 이제 보드 왼쪽 절반에 8을 세고 보드 오른쪽 절반에 8을 세십시오. 열 A와 E, B와 F, C와 G, D와 H를 함께 연결하십시오.

축하합니다. 이제 2 개의 출력 핀 (리셋 및 클럭)과 4 개의 입력 핀이있어 총 6 개가되어 10 개의 핀을 절약 할 수 있습니다! 라즈베리 파이에는 아날로그-디지털 변환기가 없으므로 추가 작업이 필요합니다.

이제 LED가 있습니다. 제어 전원 공급 장치 (20 년 카운터)가 이미 있습니다.이를 재사용 할 수 있습니다. 16 개의 공급 핀에서 64 개의 LED를 저항 (각 LED에 반드시 자체 저항이 있어야 함)을 통해 4 개의 다른 레일 (위와 같은 레이아웃 : AE, BF, CG 및 DH)에 배치하십시오. 이 4 개의 레일을 4 개의 트랜지스터를 통해 4 핀에 연결하고 모든 핀을 "높음"에 놓으십시오. LED의 양쪽이 5 볼트이므로 LED가 꺼집니다. 그런 다음 LED를 켜려면 20 년이 정사각형의 센서를 읽는 것처럼 올바른 위치에 있는지 확인하고 4 개의 레일 중 하나를 낮게 설정하십시오. 현재는 10 년 카운터에서 "고"에서 특정 레일의 "저"로 흐릅니다. 이봐, 조명이 켜졌 어! 10 분 카운터를 다시 변경하기 전에 약간의 지연을 준 다음 다시 끄십시오.

- 당신이 더 많은 제어를 원하는 경우, 당신은 TLC5940 칩 같은 것을 사용할 수 있습니다 http://playground.arduino.cc/Learning/TLC5940 - 밝기 레벨 (당신은이 중 4 필요할 것 때문에) 16 개 LED를 설정할 수 있습니다 각 칩 0 (끄기)에서 1024 (풀 켜기)까지 제어 할 수 있으므로 개별 LED를 페이드 인 / 아웃 할 수 있습니다. 메모리에서 약 4 개의 핀이 필요하며 데이지 체인 연결이 가능하므로 4 개의 디지털 핀 (하나는 PWM이어야 함-핀 옆에 "~"기호가 있음)은 여러 LED를 제어합니다.

행운을 빕니다!


Arduino가 아니라 RPi입니다.
Dmitry Grigoryev

사과합니다, 당신 말이 맞아요 나는 약간의 편집을 한 그것을 작동하도록, 그래서 내가 말한 거의 모든 여전히 적용
AMADANON 사

0

오른쪽 상단에 LED가 필요하다고 생각하지 않습니다. 언급 한대로 중간에 센서면 충분합니다. 까다로운 부분은 체스 보드의 코드입니다. 체스 판이 있다고 상상해보십시오. 행은 '알파벳'으로 표시되고 열은 '숫자'로 표시됩니다.

따라서 처음에는 조각 유형을 프로그래밍하는 프로그램이 필요합니다. 나중에 조각을 이동할 때 코드는 조각 초기 위치를 최종 위치로 생성합니다. 입력이 절반으로 줄어 듭니다.


5
어쩌면 내가 잘 설명하지 못했을 수도 있습니다 ... LED는 현재 상태에서 읽기위한 것이 아니며 컴퓨터가 어떤 움직임을 만들고 싶은지를 보여주기위한 것입니다. 따라서 사용자는 움직입니다. 밝기 센서는 사용 된 작업을 소프트웨어에 알려줍니다. 소프트웨어는 다음 움직임을 계산하고 두 개의 LED를 깜박이고 사용자가 조각을 움직 인 다음 다시 사람의 차례입니다.
Golo Roden
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.