Làm bàn cờ điện tử


14

Tôi muốn tạo một bàn cờ bằng gỗ mà bạn có thể chơi bằng các quân cờ thông thường (nghĩa là không phải các quân cờ được sửa đổi sử dụng mã RFID, nam châm, Thẻ), nhưng được kết nối với một phần mềm chú ý đến các bước di chuyển của tôi và hoạt động như người chơi thứ hai.

Tôi đã suy nghĩ về cách phát hiện các mảnh trên bảng và tôi đã đưa ra các quyết định mà tôi không cần phải nhận ra mảnh nào ở đâu: "Sự thật" nằm trong phần mềm, vì vậy nếu tôi chuyển một mảnh từ A sang B , phần mềm có thể tìm ra phần nào đã được di chuyển.

Vì vậy, tôi đã có ý tưởng khoan hai lỗ vào mỗi sân của bàn cờ, một ở trung tâm và một ở góc trên bên phải:

  • Cái ở giữa sẽ được sử dụng cho cảm biến độ sáng để phát hiện xem một mảnh có đứng trên sân hay không.
  • Cái ở góc sẽ được sử dụng cho đèn LED để hiển thị phần nào người dùng phải di chuyển cho máy tính, để tình huống trong thế giới thực khớp với tình huống phần mềm một lần nữa.

Tôi muốn sử dụng Raspberry Pi làm nền tảng phần cứng để phần mềm chạy, phần mềm này sẽ được viết bằng Node.js (nhưng điều đó không quan trọng đối với câu hỏi này).

Vì vậy, những gì tôi kết thúc là 64 cảm biến độ sáng và 64 đèn LED, mà tôi cần phải giải quyết riêng lẻ. Nói cách khác: Tôi cần 64 đầu ra và 64 đầu vào. Và tất nhiên đây là điều mà Raspberry Pi không xử lý được - và tôi nghĩ rằng phải có một cách tốt hơn là có 128 cổng I / O.

Vì tôi nghĩ rằng việc phát hiện trạng thái của hội đồng quản trị là nhiệm vụ quan trọng hơn, tôi bắt đầu tìm kiếm trên web cách xử lý ma trận công tắc 8 x 8. Tôi tìm thấy đề xuất sử dụng bộ điều khiển vi mô quét các cột của bảng một cách tuần tự và trong mỗi cột phát hiện xem một hàng (= một trường) có được sử dụng hay không.

Điều này sẽ giảm độ phức tạp khi có 8 đầu ra và 8 đầu vào (để có thể đọc trạng thái của bảng).

Về điều này, tôi có một vài câu hỏi:

  1. Là suy nghĩ của tôi đúng, tức là đây là cách tiếp cận chính xác, hoặc có một sự thay thế tốt hơn mà tôi nên đề phòng?
  2. Vì tôi không có kinh nghiệm với bộ điều khiển vi mô, tôi cần chú ý điều gì? Tôi chỉ cần một bộ điều khiển vi mô có 16 chân, có thể lập trình bằng ngôn ngữ mà tôi có thể viết, hay không?
  3. Có ai đã xây dựng một bảng như vậy và có một số lời khuyên hoặc biết về một hướng dẫn hướng dẫn bạn qua quy trình?

1
Bạn có ý tưởng đúng. Mặc dù vậy, nó sẽ có một chút tinh chỉnh trên ứng dụng cảm biến. Tùy thuộc vào kích thước và trọng lượng của các mảnh, bạn có thể sử dụng sơ đồ phát hiện nút chặn ánh sáng hoặc nút xúc giác. Câu hỏi thực sự ở đây là làm thế nào bạn sẽ nói phần nào là gì? Có lẽ sẽ cần các mảnh tùy chỉnh là tốt. Có thể đặt một thẻ RFID trên mỗi và sau đó mỗi ô vuông có một máy quét RFID? Quá mức cần thiết, nhưng một ý nghĩ.
mcmiln

1
Định tuyến quét ma trận mà bạn mô tả sẽ không thể đối phó với việc có 4 phần trên 2 hàng và 2 cột. Nhìn vào bộ giải mã 3-8 dòng (74138) và ngoại suy thành 5-64
Icy

2
Đội hình ban đầu của các mảnh luôn giống nhau, vì vậy phần mềm biết mảnh nào ở đâu. Nếu sau đó bạn di chuyển một mảnh từ A đến B, phần mềm sẽ biết mảnh nào đã được di chuyển ở đâu. Tất nhiên điều này không cho phép bắt đầu với các dòng tùy ý, nhưng điều này bạn cũng có thể thiết lập trong phần mềm theo cách thủ công.
Golo Roden

1
Điều này có vẻ ... cồng kềnh. Tôi đã đi với một phương pháp video phần mềm. OpenCV và một máy ảnh. Và một máy chiếu.
Người qua đường

2
hướng dẫn này có thể hữu ích cho đến khi tổ chức cảm biến / phát hiện
user2813274

Câu trả lời:


5

Vì một hình ảnh đáng giá cả ngàn từ, đây là một ví dụ về LDM-24488NI : ma trận 64 đầu

nhập mô tả hình ảnh ở đây

Đối với ứng dụng của bạn, bạn sẽ cần một ma trận như vậy cho đèn LED và một ma trận khác cho cảm biến, cần tổng cộng 32 chân IO. Vì RPi của bạn không có nhiều như vậy, bạn sẽ phải sử dụng demux 1 đến 8 để chọn các hàng và cột riêng lẻ:

nhập mô tả hình ảnh ở đây

Đối với đèn LED, bạn có thể sử dụng bộ tách kênh cho cả hàng và cột, vì bạn chỉ cần một đèn led mỗi lần. Đối với các cảm biến, tôi khuyên bạn nên sử dụng một demux cho các hàng và các dòng riêng lẻ cho các cột, để có thể phát hiện nhiều cảm biến hoạt động trong một hàng. Điều đó sẽ mang số lượng pin cần thiết đến 17 chân, mà RPi có thể xử lý.


12

Có, ghép kênh như bạn mô tả là một cách phổ biến để giải quyết các mảng của sự vật.

Phần khó nhất sẽ là xử lý bản chất tương tự của các cảm biến ánh sáng. CdS LDR (điện trở phụ thuộc vào ánh sáng) có lẽ là tốt nhất trong trường hợp này vì chúng nhạy cảm, rẻ tiền và tạo ra phản ứng lớn có thể đo lường dễ dàng trong phạm vi độ sáng của con người. Về mặt điện, chúng là điện trở, với điện trở giảm trong ánh sáng mạnh hơn.

Nó sẽ đơn giản hóa việc ghép kênh nếu bạn sử dụng một micro có 8 đầu vào tương tự. Điều đó có nghĩa là một nửa mux của bạn được tích hợp vào micro. Ví dụ, bạn kích hoạt một hàng LDR và ​​đọc tín hiệu 8 cột trực tiếp với micro.

Quét 64 đầu vào tương tự tuần tự có thể dễ dàng được thực hiện ngay lập tức theo thuật ngữ của con người với kính hiển vi thông thường. Giả sử bạn có thể đọc một bài đọc mới sau mỗi 100 khúc. Đó là "dài", ngay cả đối với micros nhỏ và giá rẻ. Điều đó có nghĩa là toàn bộ bảng sẽ được quét cứ sau 6,4 ms, nhanh hơn mức bạn có thể nhận thấy độ trễ.

Ghép kênh LED thậm chí còn dễ dàng hơn vì tất cả đều được thực hiện với đầu ra kỹ thuật số. Rất nhiều micros có hơn 16 đầu ra kỹ thuật số, vì vậy điều này không có vấn đề gì. Có những thứ khác sẽ phải xảy ra, và bạn sẽ sử dụng chân nhanh hơn bạn mong đợi bây giờ, nhưng một micro 64 pin thực sự đủ tốt, nếu không phải là một pin 44 pin.

Có lẽ tôi sẽ dành một micro chỉ để xử lý bảng I / O. Điều này được tối ưu hóa để có đủ chân I / O, đầu vào A / D và tương tự. Sau đó, nó giao tiếp với công cụ tính toán chính thông qua UART. Giao thức sẽ trông giống như "thắp sáng hình vuông 3,2" hoặc "mảnh bị xóa khỏi hình vuông 5,4". Điều này cũng cho phép một giao diện phần cứng hoàn toàn khác trong tương lai miễn là bạn giữ giao thức giống nhau.


7

Đối với đèn LED , cách rõ ràng để làm điều này là có một đầu ra cho mỗi hàng và mỗi cột của bàn cờ: tổng cộng 8 + 8 = 16 chân. Cực dương sẽ được kết nối với dây hàng và cực âm với dây cột. Đối với đèn LED bạn muốn phát sáng, bạn sẽ làm cho dây cực dương của nó dương (logic 1) và dây cực âm của nó âm (logic 0), trong khi vẫn duy trì các đèn khác ở trạng thái ngược (vì vậy các đèn LED còn lại có độ lệch trung tính hoặc đảo ngược.)

Tôi đang đưa ra một giả định ở đây rằng vi điều khiển cung cấp điện áp cao / thấp cho bạn để có thể kết nối một đèn LED từ cái này sang cái khác. Nếu đó không phải là trường hợp bạn sẽ cần một bóng bán dẫn hoặc bộ đệm cho mỗi dòng. Với nguồn cung cấp 5V rất chặt chẽ, xem xét đèn LED giảm khoảng 2V và bạn muốn giảm điện áp hợp lý so với điện trở giới hạn hiện tại của mình (lưu ý bạn chỉ cần cài đặt các đèn này ở cả hai hàng hoặc các dòng cột, không phải cả hai.)

Nếu đầu ra của bạn là trạng thái tri (nghĩa là ngoài logic 0 và logic 1, chúng có thể được đặt ở trạng thái trở kháng cao, có thể bằng cách tạm thời định cấu hình chúng làm đầu vào), bạn có thể thông minh và sử dụng lưới 4x8, với đèn LED kết nối theo cặp phản song song. Điều quan trọng là đặt đầu ra không sử dụng thành trở kháng cao trong thiết lập này, nếu không, đèn LED không mong muốn sẽ sáng lên.

Trong cả hai trường hợp, bạn sẽ phải suy nghĩ về trận hòa hiện tại và liệu có thể chấp nhận rủi ro về khả năng xảy ra lỗi phần mềm chiếu sáng tất cả các đèn LED liên tiếp không (nếu không tính đến, có thể vượt quá dòng hàng vi điều khiển đó không? .)


Trường hợp của các cảm biến phức tạp hơn. Tôi sẽ giả sử bạn sử dụng các cảm biến điện trở, mặc dù các phototransistors không nhất thiết được đảm bảo chỉ dẫn theo một hướng.

Bạn có thể sử dụng cùng 8 đầu ra hàng mà bạn sử dụng để chiếu sáng đèn LED của mình, nhưng bạn sẽ cần 8 đầu vào cột dành riêng cho cảm biến. Bạn chắc chắn sẽ thấy các mạch cho bàn phím như thế này. Hãy nhớ rằng chúng chỉ được thiết kế để có một phím được nhấn tại một thời điểm . Nếu người dùng nhấn 1,3,7 và 9 cùng nhau, bàn phím không thể phát hiện nếu người dùng nhả bất kỳ một trong bốn phím này vì vẫn tồn tại một đường dẫn hiện tại thông qua ba công tắc khác.

Một giải pháp được sử dụng trên bàn phím âm nhạc (được thiết kế để có nhiều hơn một yếu tố của ma trận tiến hành tại một thời điểm) là có một diode nối tiếp với mỗi công tắc.

Một giải pháp khác là mua bốn IC giải mã 4 đến 16 với đầu ra của bộ thu mở (hoặc mở cống nếu sử dụng IC MOSFET) như thế này: http://www.unicornelectronics.com/ftp/Data%20Sheets/74159.pdf Bộ sưu tập mở có nghĩa là các đầu ra của IC sẽ chỉ chìm hiện tại chứ không phải nguồn. Do đó, bạn có thể kết nối 16 cảm biến với 16 đầu ra của chip và phổ biến các đầu còn lại cùng với một điện trở pullup (bạn cũng sẽ kết nối ADC của mình ở đây). Bạn đưa một đầu ra ở mức thấp (dẫn) và 15 đầu còn lại vẫn ở mức cao (không dẫn điện.) Điều này trái ngược với đầu ra logic tiêu chuẩn, trong đó 15 đầu ra khác sẽ đổ dòng vào điểm chung.

Đầu vào của các IC này là nhị phân 4 bit để chọn một trong 16 đầu ra, nhưng chúng cũng có thêm đầu vào để bật / tắt chip. Do đó, bạn có khả năng có một dãy gồm 64 bồn thu mở, được kết nối với 64 cảm biến, với các đầu cảm biến khác đều được sử dụng chung cho một điện trở pullup duy nhất và tương tự với bộ chuyển đổi kỹ thuật số. Bạn sẽ cần tổng cộng 8 đầu ra trên vi điều khiển của mình cho việc này: bốn để nhận tín hiệu chọn 4 đến 16 (chung cho cả bốn chip) và bốn để nhận tín hiệu cho phép (một cho mỗi chip.)

EDIT: 3 đến 8 bộ giải mã (còn được gọi là 1 trên 8 = 1 trong số 8) dường như có sẵn hơn 4 đến 16, nhưng 8 IC lại lộn xộn hơn rất nhiều so với 4. Một loại IC khác có thể hữu ích là bộ đếm bát phân (và người anh em họ phổ biến hơn của đếm thập kỷ , có thể được cấu hình như bộ đếm bát phân bằng cách kết nối thông số thứ chín của nó với dòng đặt lại.) Chúng yêu cầu một xung nối tiếp để chuyển từ đầu ra này sang đầu ra tiếp theo, do đó sẽ cần ít hơn Các chân I / O trên vi điều khiển hơn các IC giải mã. Họ thường có thêm đầu vào để thiết lập lại và kích hoạt. Ngoài ra còn có các thanh ghi dịch chuyển của IC , có hai loại: một loại để chuyển đổi chuỗi thành song song, loại còn lại để chuyển đổi song song sang chuỗi. Cuối cùng, cóbộ đệm , mà bạn có thể đặt giữa Rasberry Pi và bàn cờ của mình để Pi không bị phá hủy trong trường hợp quá dòng. Tất cả những thứ này có thể hữu ích trong các mạch ghép kênh.


1
Bạn đề cập đến các thanh ghi thay đổi - chúng cũng có thể được sử dụng cho các đầu ra LED. Một bộ đếm khác cộng với thanh ghi dịch chuyển 8 bit có thể xoắn có thể điều khiển toàn bộ mảng chỉ với hơn hai hoặc ba chân, nếu chúng đủ nhanh để tránh hiện tượng nhấp nháy.
hobbs

@hobbs Tôi không nghĩ nhấp nháy là một vấn đề vì OP chỉ muốn bật một hoặc hai đèn LED cùng một lúc. Ngay cả tristate cũng không thực sự cần thiết nếu bạn chỉ có một thanh ghi chuyển đổi / bộ đếm thập kỷ / bát phân đảo ngược để điều khiển đèn LED. 3 chân là hoàn toàn có thể đạt được: thiết lập lại chung, tiến cột, tiến hàng. Đó có thể là cách để đi - lưu tất cả các chân khác cho vấn đề khó khăn hơn của các cảm biến.
Cấp sông St

Đối với đèn LED, Trình điều khiển LED MAX7219 / 7221 cũng có thể được sử dụng. Điều này sẽ giảm số lượng đầu vào xuống 3 - đồng hồ, dữ liệu, chốt.
jnovacho

4

Ghép kênh thực sự là một thực tế phổ biến.

Có một số cách bạn có thể tận dụng được nhiều hơn từ chân pi mâm xôi

Một là sử dụng một con chip để thực hiện một số công việc nặng nhọc cho bạn. Ví dụ: nếu bạn có 8 đầu vào và 8 đầu ra để đọc trạng thái của bảng, bạn có thể sử dụng bộ đếm, để tăng 8 đầu vào cùng một lúc. Bạn sẽ cần 2 chân trên Arduino cho việc này - một để đặt lại về chân đầu tiên và một để "đi đến hàng tiếp theo". Bạn vừa lưu 6 chân!

Lưu 6 chân có thể là không đủ - hãy xem chúng ta có thể đi đâu từ đây: Nếu bạn sắp xếp lại lưới 8x8 của mình thành lưới 16x4, bạn có thể sử dụng một cái gì đó như http://www.instructables.com/id/16-Stage -Decade-Counter-Chain-Sử dụng-hai-4017-Chi /? ALLSTEPS (bỏ qua nửa trên cùng, hai dòng từ trên xuống dưới là "thiết lập lại" của bạn, đến từ trên cùng bên trái và " đi đến hàng tiếp theo ", được gọi là CLK, cho đồng hồ, ở đây). Bây giờ bạn có thể đếm số 8 ở nửa bên trái của bảng, tiếp theo là số 8 ở nửa bên phải của bảng; kết nối cột A và E, B và F, C và G, và D và H với nhau.

Xin chúc mừng, bây giờ bạn có hai chân đầu ra (đặt lại và đồng hồ) và 4 chân đầu vào, với tổng số 6 - tiết kiệm được 10 chân! Lưu ý rằng raspberry pi không có bộ chuyển đổi tương tự sang kỹ thuật số, vì vậy bạn sẽ cần một số công việc bổ sung cho việc đó.

Bây giờ cho đèn LED. Bạn đã có một nguồn cung cấp năng lượng được kiểm soát (bộ đếm hai thập kỷ) - cho phép tái sử dụng chúng. Đặt 64 đèn LED của bạn từ 16 chân cung cấp của bạn, thông qua một điện trở (mỗi đèn LED PHẢI có điện trở riêng!), Đến 4 đường ray khác (bố trí tương tự như trên: AE, BF, CG và DH). Kết nối 4 đường ray này qua 4 bóng bán dẫn đến 4 chân và đặt tất cả các chân lên "cao" - vì cả hai bên của đèn LED hiện ở mức 5 volt, đèn LED sẽ tắt. Sau đó, khi bạn muốn bật đèn LED, đảm bảo hai thập kỷ của bạn ở đúng vị trí (như thể bạn đang đọc cảm biến trên hình vuông đó), đặt một trong 4 đường ray xuống thấp. Hiện tại nên chảy từ "cao" từ bộ đếm thập kỷ, đến "thấp" trong đường sắt cụ thể đó. Này, đèn bật sáng! Hãy trì hoãn một chút, sau đó tắt nó lại trước khi bạn thay đổi bộ đếm thập kỷ một lần nữa.

Nếu bạn muốn kiểm soát nhiều hơn, bạn có thể sử dụng một cái gì đó như chip TLC5940 - http://playground.arduino.cc/Learning/TLC5940 - mỗi chip có thể đặt 16 đèn LED (vì vậy bạn cần 4 đèn LED) ở mức độ sáng từ 0 (tắt) đến 1024 (bật đầy đủ), do đó bạn có thể làm mờ dần các đèn LED riêng lẻ trong và ngoài, với khả năng kiểm soát tuyệt vời. Từ bộ nhớ, chúng cần khoảng 4 chân và chúng có thể được nối xích, vì vậy 4 chân kỹ thuật số (một trong số đó phải là PWM - chúng có ký hiệu "~" bên cạnh chân) sẽ điều khiển bất kỳ số lượng đèn LED nào.

Chúc may mắn!


Đó là RPi, không phải Arduino.
Dmitry Grigoryev

Tôi xin lỗi, bạn nói đúng. Hầu như tất cả mọi thứ tôi nói vẫn áp dụng, vì vậy tôi đã thực hiện một số chỉnh sửa nhỏ, để làm cho nó hoạt động
AMADANON Inc.

0

Tôi không nghĩ bạn sẽ cần một đèn LED ở góc trên bên phải. Một cảm biến ở giữa như bạn đề cập sẽ là đủ. Phần Tricky sẽ là mã cho bàn cờ. Hãy tưởng tượng bạn có một bàn cờ. Hàng sẽ được chỉ định là 'bảng chữ cái' và cột được chỉ định là 'số'.

Vì vậy, trước tiên bạn cần một chương trình để lập trình loại mảnh ở vị trí ban đầu. Sau này, khi bạn di chuyển các mảnh của mình, mã sẽ tạo ra vị trí ban đầu của mảnh đến vị trí cuối cùng. Điều đó sẽ giảm một nửa đầu vào của bạn.


5
Có lẽ tôi đã không giải thích rõ về các đèn LED, đèn LED không có nghĩa là để đọc ở trạng thái hiện tại, chúng có nghĩa là để hiển thị chuyển động mà máy tính muốn thực hiện. Vì vậy, người dùng thực hiện di chuyển: Cảm biến độ sáng cho phần mềm biết những gì đã sử dụng. Phần mềm tính toán bước di chuyển tiếp theo của nó và nhấp nháy hai đèn LED, người dùng di chuyển mảnh và sau đó đến lượt con người.
Golo Roden
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.