Виготовлення електронної шахової дошки


14

Я хочу зробити дерев'яну шахову дошку, на яку можна грати звичайними фігурами (тобто, не зміненими фігурами, що використовують RFID-коди, магніти, ...), але це пов'язано з програмним забезпеченням, яке враховує мої кроки та виконує функції другий гравець.

Я думав над тим, як виявити шматки на дошці, і я прийняв рішення, що мені не потрібно розпізнавати, який фрагмент знаходиться де: "Істина" знаходиться в межах програмного забезпечення, тому якщо я переміщу фрагмент з А до В , програмне забезпечення здатне з’ясувати, яку частину перемістили.

Отже, у мене виникла ідея просвердлити два отвори у кожному полі шахової дошки, по одному в центрі та одному у верхньому правому куті:

  • Той, що знаходиться в центрі, буде використовуватися для датчика яскравості для виявлення, чи стоїть шматок на полі чи ні.
  • Той, що знаходиться в куті, буде використаний для світлодіодного індикатора, щоб показати, яку частину користувач повинен перемістити за комп’ютером, щоб ситуація в реальному світі знову відповідала ситуації із програмним забезпеченням.

Я хочу використовувати Raspberry Pi як апаратну основу для запуску програмного забезпечення, яке буде написано на Node.js (але це не має бути важливим для цього питання).

Отже, що я закінчую - це 64 датчики яскравості та 64 світлодіоди, які мені потрібно вирішувати окремо. Іншими словами: мені потрібно 64 виходи та 64 входи. І звичайно, це щось, що Raspberry Pi не справляється із коробки - і я думаю, що там повинен бути кращий спосіб, ніж мати 128 портів вводу / виводу.

Оскільки я думаю, що виявлення стану плати є більш важливим завданням, я почав шукати в Інтернеті, як обробити матрицю перемикачів 8х8. Я знайшов пропозицію використовувати мікроконтролер, який послідовно сканує стовпці плати, і в кожному стовпці визначається, чи використовується рядок (= поле) чи ні.

Це зменшило б складність до 8 виходів та 8 входів (щоб можна було прочитати стан плати).

З цього приводу у мене є кілька питань:

  1. Чи правильні мої думки, тобто це правильний підхід, чи є краща альтернатива, на яку я повинен слідкувати?
  2. Оскільки у мене немає досвіду роботи з мікроконтролерами, на що мені потрібно звертати увагу? Мені просто потрібен мікроконтролер з 16 контактами, який можна програмувати мовою, яку я вмію писати, або…?
  3. Хто-небудь побудував таку дошку і має якісь поради чи знає підручник, який розглядає вас через процес?

1
Ви маєте правильну ідею. Хоча це знадобиться трохи вдосконалити сенсорний додаток. Залежно від розміру та ваги шматочків ви можете використовувати схему виявлення блокування світла або тактильну кнопку. Справжнє запитання тут - як ти збираєшся сказати, який твір є? Напевно, також знадобляться спеціальні шматки. Може бути, покласти тег RFID на кожен, а потім кожен квадрат має RFID-сканер? Перебор, але думка.
mcmiln

1
Матричне сканування маршрутизації, яке ви описуєте, не зможе впоратися з наявністю 4 фрагментів на 2 ряди та 2 стовпці. Подивіться на 3-8 лінійних декодерів (74138) та екстраполюйте на 5-64
Icy

2
Початкова лінійка творів завжди однакова, тому програмне забезпечення знає, який фрагмент є де. Якщо потім перемістити фрагмент від А до В, програмне забезпечення знає, куди було переміщено куди. Звичайно, це не дозволяє починати з довільних складових, але це також можна встановити в програмному забезпеченні вручну.
Голо Роден

1
Це здається ... громіздким. Я б пішов із програмним методом відео. OpenCV і камера. І проектор.
Перехожий

2
цей посібник може бути корисним для організації датчика / детектування
user2813274

Відповіді:


5

Оскільки зображення вартує тисячі слів, ось приклад LDM-24488NI : матриця на чолі з 64

введіть тут опис зображення

Для вашої програми вам знадобиться одна така матриця для світлодіодів, а ще одна для датчиків, що вимагає всього 32 вводу-виводу. Оскільки RPI не так багато, вам доведеться використовувати 1 - 8 demux для вибору окремих рядків і стовпців:

введіть тут опис зображення

Для світлодіодів ви можете використовувати демультиплексори як для рядків, так і для стовпців, оскільки вам потрібен лише один світлодіод. Що стосується датчиків, я рекомендую використовувати демукс для рядків та окремі рядки для стовпців, щоб мати можливість виявляти кілька активних датчиків в одному ряду. Це призведе до необхідної кількості штифтів до 17 штифтів, з якими може працювати RPi.


12

Так, мультиплексування, як ви описуєте, є поширеним способом вирішення масивів речей.

Найскладніша частина стосуватиметься аналогового характеру світлових датчиків. CdS LDRs (світлозалежні резистори), мабуть, найкращі в цьому випадку, оскільки вони чутливі, дешеві і дають велику легко виміряну реакцію в діапазоні світла людини. Електрично вони є резисторами, опір зменшується при більш яскравому світлі.

Це спростить мультиплексування, якщо ви використовуєте мікро, який має 8 аналогових входів. Це означає, що половина вашої мукси вбудована в мікрофон. Ви вмикаєте рядок LDR і, наприклад, читаєте 8 сигналів стовпців безпосередньо з мікрофоном.

Послідовно сканування 64 аналогових входів можна легко здійснити миттєво, по-людськи, за допомогою звичайних мікросхем. Скажімо, ви можете робити нове читання кожні 100 мкс. Це "довго", навіть для невеликих і дешевих мікросхем. Це означає, що вся дошка скануватиметься кожні 6,4 мс, це набагато швидше, ніж ви можете сприймати затримку.

Мультиплексування світлодіодів ще простіше, оскільки це робиться з цифровими виходами. Багато мікросів мають понад 16 цифрових виходів, тому це не проблема. Є ще щось, що доведеться статися, і ви будете використовувати штифти швидше, ніж ви могли очікувати зараз, але 64-контактний мікрофон повинен бути справді досить хорошим, якщо не 44-контактним.

Я, мабуть, присвятив один мікрофон саме для обробки вводу / виводу плати. Це оптимізовано для того, щоб було достатньо штифтів вводу / виводу, вводу / виводу тощо. Потім він взаємодіє з основним двигуном обчислень через UART. Протокол виглядатиме як "загоріться квадрат 3,2" або "шматок, вилучений з квадрата 5,4". Це також дозволяє в майбутньому абсолютно інший апаратний інтерфейс, якщо ви зберігаєте протокол однаковим.


7

Для світлодіодів очевидний спосіб зробити це - мати вихід для кожного рядка та кожного стовпця шахової дошки: загалом 8 + 8 = 16 контактів. Аноди будуть з'єднані з дротяними рядками, а катоди - з дротом стовпчика. Для світлодіода, який ви хочете засвітити, ви зробили його анодний провід позитивним (логіка 1) і його катодний негативний провід (логіка 0), зберігаючи інші в зворотному стані (тому інші світлодіоди мають нейтральний або зворотний зміщення).

Я тут роблю припущення, що мікроконтролер дає достатньо високі / низькі напруги, щоб ви могли перевести світлодіод від одного до іншого. Якщо це не так, вам знадобиться транзистор або буфер для кожного рядка. При напрузі 5В він непростий, враховуючи, що світлодіод падає приблизно на 2 В, і ви хочете, щоб розумний перепад напруги над вашим поточним обмежувальним резистором (зауважте, що їх потрібно встановлювати лише в рядках рядків або в колонках, а не в обох.)

Якщо ваші виходи трирічні (тобто, крім логіки 0 та логіки 1, їх можна встановити на високий опір, можливо, тимчасово налаштувавши їх як входи), тоді ви можете отримати розумність та використовувати сітку 4x8, із світлодіодними з'єднані в парапаралельні пари. У цій настройці важливо встановити невикористані виходи на високий опір, інакше небажані світлодіоди загоряться.

В будь-якому випадку вам доведеться подумати про поточний розіграш , і чи прийнятно ризикувати можливістю програмної помилки, що висвітлює всі світлодіодні індикатори підряд (що, якщо не враховувати, може перевантажувати рядок рядка мікроконтролера .)


Корпус датчиків складніший. Я припускаю, що ви використовуєте резистивні датчики, хоча фототранзистори не обов'язково гарантовано ведуть лише в одному напрямку.

Ви можете використовувати ті ж 8-ти рядкових виходів, які використовуєте для освітлення світлодіодів, але вам знадобиться 8 стовпчастих входів, призначених для зондування. Ви, без сумніву, бачили подібні схеми для клавіатур . Майте на увазі, що вони розроблені лише для одночасного натискання однієї клавіші . Якщо користувач натискає 1,3,7 та 9 разом, клавіатура не в змозі виявити, чи користувач відпустить якусь із цих чотирьох клавіш, оскільки все ще існує поточний шлях через інші три комутатори.

Рішення, що використовується на музичних клавіатурах (які розроблені таким чином, щоб мати більше одного елемента матриці, що веде одночасно), - це діод послідовно з кожним перемикачем.

Іншим рішенням буде придбання чотирьох ІМ-кодів декодера 4 до 16 з відкритими колекторними виходами (або відкритим зливом, якщо використовуються мікросхеми MOSFET), такі як: http://www.unicornelectronics.com/ftp/Data%20Sheets/74159.pdf Відкритий колектор означає, що виходи ІС будуть тонути тільки струмом, а не джерелом. Таким чином, ви можете підключити 16 датчиків до 16 виходів мікросхеми, а спільні інші кінці разом з резистором, що підтягується (ви б тут також підключили свій АЦП). Ви наближаєте один вихід низьким (провідним), а інші 15 залишаються високими (непровідними.) Це на відміну від стандартного логічного виходу, де інші 15 виходів подаватимуть струм у загальну точку.

Вхід до цих ІС є 4-бітовим двійковим для вибору одного з 16 виходів, але вони також мають додатковий вхід для включення / відключення мікросхеми. Таким чином, ви могли потенційно мати масив із 64 раковин відкритого колектора, підключених до 64 датчиків, а інші кінці датчиків об'єднані в один резистор, що піднімається, і аналоговий цифровий перетворювач. Для цього вам знадобиться загалом 8 виходів на мікроконтролері: чотири для прийому сигналів вибору 4 - 16 (загальні для всіх чотирьох мікросхем) і чотири для прийому сигналів включення (по одному для кожної мікросхеми.)

EDIT: 3 - 8 декодерів (також звані 1 з 8 = 1 рядок з 8) здаються більш доступними, ніж 4-16, але 8 ІМС набагато брудніше, ніж 4. Інший тип СК, який може бути корисним, - це восьмеричний лічильник (і його більш розповсюджений кузен лічильник десятиліття , який можна налаштувати як восьмеричний лічильник, з'єднавши його дев'ятий вихід до лінії скидання.) Для цього потрібен послідовний імпульс для просування з одного виходу на інший, тому знадобиться менше Штифти вводу / виводу на мікроконтролері, ніж ІС декодера. Зазвичай вони мають додаткові входи для скидання та включення. Існують також звані регістри зсуву ІС , які доступні двох типів: один для перетворення рядів у паралельний, другий для перетворення паралельних у ряд. Нарешті, єбуфери , які ви можете помістити між вашим Rasberry Pi і вашою шаховою дошкою, щоб Pi не руйнувався у разі перенапруги. Все це може бути корисно в схемах мультиплексування.


1
Ви згадуєте зсувні регістри - їх можна використовувати і для світлодіодних виходів. Ще один лічильник плюс 8-бітний регістр зсуву, який може тристати, може запускати весь масив ледь більше, ніж два-три штирі, якщо вони досить швидкі, щоб уникнути видимого мерехтіння.
панночки

@hobbs Я не думаю, що мерехтіння - це проблема, оскільки ОП хоче лише засвітити один або два світлодіоди одночасно. Навіть tristate насправді не потрібен, якщо для керування світлодіодами у вас просто один прямий та інвертуючий лічильник десятиліть / восьмигранний лічильник / зсув. 3 штифта цілком досяжні: загальний скидання, просування стовпців, попереднє пересування рядків. Це може бути шлях - збережіть усі інші штифти для більш важкої проблеми датчиків.
Рівень р. Св.

Для світлодіодів також можна використовувати світлодіодний драйвер MAX7219 / 7221. Це зменшить кількість входів до 3-х годин, даних, засувок.
jnovacho

4

Мультиплексування справді є звичайною практикою.

Є кілька способів, як ви можете отримати більше від своїх малинових шпильок

Перший - використовувати чіп, щоб зробити якийсь важкий підйом для вас. Наприклад, якщо у вас є 8 входів і 8 виходів для читання стану плати, ви можете використовувати лічильник, щоб підняти 8 входів один за одним. Для цього вам знадобляться 2 шпильки на Arduino - один для скидання назад до першого штифта, а один для "переходу до наступного ряду". Ви щойно зберегли 6 шпильок!

Збереження 6 штифтів може бути недостатньо - давайте подивимось, куди ми можемо піти звідси: Якщо ви переставите сітку 8х8 у сітку 16х4, ви можете використовувати щось на зразок 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 разом.

Вітаємо, тепер у вас є два вихідних штифта (скидання та годинник) та 4 вхідних штифта, загалом 6 - що економить 10 контактів! Зауважте, що малиновий пі не має аналогових цифрових перетворювачів, тому для цього вам знадобиться додаткова робота.

Тепер про світлодіоди. У вас вже є керований блок живлення (лічильники двох десятиліть) - давайте повторно використовувати їх. Поставте свої 64 світлодіоди зі своїх 16 штифтів живлення через резистор (у кожного світлодіода ОБОВ'ЯЗКОВО свій резистор!), На 4 інші рейки (такий же макет, як вище: AE, BF, CG і DH). Підключіть ці 4 рейки за допомогою 4 транзисторів до 4-х штирів і поставте всі штирі на "високу" - оскільки обидві сторони світлодіода зараз на 5 вольт, світлодіоди будуть вимкнено. Потім, коли ви хочете запалити світлодіод, переконайтесь, що ваші два десятиліття знаходяться у правильному положенні (як би ви читали датчик на цьому квадраті), встановіть одну з 4 рейок у низький. Струм зараз повинен протікати від "високого" від лічильника десятиліття до "низького" в цій конкретній залізниці. Гей престо, запалиться світло! Дайте трохи затримки, а потім вимкніть її, перш ніж знову змінити лічильник десятиліття.

Якщо ви хочете більше контролю, ви можете використовувати щось на зразок чіпа TLC5940 - http://playground.arduino.cc/Learning/TLC5940 - кожен чіп може встановити 16 світлодіодів (тож вам знадобиться 4 з них) до рівня яскравості від 0 (вимкнено) до 1024 (увімкнено повністю), тож ви можете зникати окремі світлодіодні індикатори з великим контролем. З пам’яті їм потрібно близько 4-х контактів, і вони можуть бути приковані до ромашок, тому 4 цифрових штифта (один з яких повинен бути ШІМ - у них символ «~» поруч із шпилькою) контролюватиме будь-яку кількість світлодіодів.

Удачі!


Це RPi, а не Arduino.
Дмитро Григор’єв

Вибачте, ви праві. Майже все, що я сказав, все ще стосується, тому я вніс невеликі зміни, щоб це працювало
AMADANON Inc.

0

Я не думаю, що вам знадобиться світлодіод у верхньому правому куті. Датчик посередині, як ви згадуєте, буде достатньо. Підступна частина буде кодом для шахової дошки. Уявіть, у вас шахова дошка. Рядок буде позначено як "алфавіт", а стовпець - як "число".

Отже, спочатку вам потрібна програма для програмування типу твору в початковій позиції. Пізніше, коли ви переміщуєте шматки, код генерує початкове розташування фрагмента до кінцевого місця. Це зменшить ваш внесок удвічі.


5
Можливо, я не пояснив колодязь ... світлодіоди не призначені для читання в поточному стані, вони призначені для показу, яким ходом комп'ютер хоче зробити. Отже, користувач робить хід: Датчики яскравості повідомляють програмному забезпеченню, що робив використаний. Програмне забезпечення обчислює наступний хід і блимає двома світлодіодами, користувач переміщує шматок, і тоді знову черга людини.
Голо Роден
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.