Изготовление электронной шахматной доски

14

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

Я думал о том, как обнаружить фигуры на доске, и я принял решение, в котором мне не нужно распознавать, какая фигура находится: «Истина» находится в программном обеспечении, поэтому, если я перемещу фигуру из А в В программное обеспечение может выяснить, какая часть была перемещена.

Итак, у меня появилась идея просверлить два отверстия в каждом поле шахматной доски, одно в центре и одно в правом верхнем углу:

  • Один в центре будет использоваться для датчика яркости, чтобы определить, стоит ли фигура на поле или нет.
  • Один в углу будет использоваться для светодиода, показывающего, какую часть пользователь должен переместить для компьютера, чтобы реальная ситуация снова соответствовала программной ситуации.

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

Итак, в итоге я получаю 64 датчика яркости и 64 светодиода, к которым мне нужно обращаться индивидуально. Другими словами: мне нужно 64 выхода и 64 входа. И, конечно, это то, что Raspberry Pi не обрабатывает из коробки - и я думаю, что должен быть лучший способ, чем иметь 128 портов ввода / вывода.

Поскольку я считаю, что определение состояния платы является более важной задачей, я начал искать в Интернете способы обработки матрицы коммутаторов 8x8. Я нашел предложение использовать микроконтроллер, который сканирует столбцы платы последовательно, и в каждом столбце определяет, используется ли строка (= поле) или нет.

Это уменьшило бы сложность до 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, чтобы выбрать отдельные строки и столбцы:

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

Для светодиодов вы можете использовать демультиплексоры как для строк, так и для столбцов, поскольку вам нужен только один светодиод за один раз. Для датчиков я бы рекомендовал использовать демультиплексор для строк и отдельные строки для столбцов, чтобы можно было обнаружить несколько активных датчиков в одном ряду. Это приведет к необходимому количеству выводов до 17 выводов, с которыми может справиться RPi.

Дмитрий Григорьев
источник
12

Да, мультиплексирование, как вы описываете, является обычным способом решения множества задач.

Самая сложная часть будет иметь дело с аналоговой природой датчиков света. CdS LDR (светозависимые резисторы), вероятно, являются лучшими в этом случае, потому что они чувствительны, дешевы и дают большой легко измеряемый отклик в диапазоне человеческой легкости. Электрически они являются резисторами, сопротивление которых уменьшается при ярком освещении.

Это упростит мультиплексирование, если вы используете микро, который имеет 8 аналоговых входов. Это означает, что половина твоей музыки встроена в микро. Вы включаете ряд LDR и считываете 8 сигналов столбца, например, напрямую с помощью micro.

Последовательное сканирование 64 аналоговых входов может быть легко выполнено мгновенно с точки зрения человека с помощью обычных микро. Допустим, вы можете принимать новые показания каждые 100 мкс. Это "долго", даже для маленьких и дешевых микро. Это означает, что вся плата будет сканироваться каждые 6,4 мс, что намного быстрее, чем вы можете заметить задержку.

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

Вероятно, я бы посвятил одну микросхему только для управления платой ввода / вывода. Это оптимизировано для достаточного количества выводов ввода / вывода, входов A / D и тому подобного. Затем он взаимодействует с основным вычислительным механизмом через UART. Протокол будет выглядеть как «осветить квадрат 3,2» или «кусок, удаленный из квадрата 5,4». Это также позволяет в будущем полностью изменить аппаратный интерфейс, если вы сохраните протокол тем же.

Олин Латроп
источник
7

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

Здесь я предполагаю, что микроконтроллер дает достаточно высокое / низкое напряжение, чтобы вы могли соединять светодиод от одного к другому. Если это не так, вам понадобится транзистор или буфер для каждой линии. С напряжением 5 В он напряженный, учитывая, что светодиод падает примерно на 2 В, и вам нужно разумное падение напряжения на резисторе, ограничивающем ток (обратите внимание, что вам нужно устанавливать их либо в линии строк, либо в строки столбцов, а не в обе).

Если ваши выходы находятся в трех состояниях (то есть, в дополнение к логике 0 и логике 1, они могут быть установлены в состояние высокого импеданса, возможно, путем временной настройки их в качестве входов), тогда вы можете стать умнее и использовать сетку 4x8 со светодиодами. соединены в антипараллельные пары. В этой настройке важно установить неиспользуемые выходы на высокое сопротивление, иначе нежелательные светодиоды загорятся.

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


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

Вы можете использовать те же 8 рядных выходов, которые вы используете для освещения своих светодиодов, но вам понадобятся 8 входов столбцов, предназначенных для измерения. Вы, несомненно, видели схемы для таких клавиатур . Имейте в виду, что они предназначены только для одновременного нажатия одной клавиши . Если пользователь нажимает 1,3,7 и 9 вместе, клавиатура не может обнаружить, отпускает ли пользователь какую-либо одну из этих четырех клавиш, потому что все еще существует текущий путь через три других переключателя.

Решение, используемое на музыкальных клавиатурах (которые рассчитаны на одновременное использование более одного элемента матрицы), состоит в том, чтобы последовательно соединить диод с каждым выключателем.

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

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

РЕДАКТИРОВАТЬ: от 3 до 8 декодеров (также называемых 1 из 8 = 1 строка из 8) кажутся более доступными, чем от 4 до 16, но 8 микросхем намного более грязные, чем 4. Другой тип микросхем, который может быть полезен, это восьмеричный счетчик (и его более распространенный кузен счетчик десятилетий , который можно настроить как восьмеричный счетчик, подключив его девятый выходной сигнал к линии сброса.) Для этого требуется последовательный импульс для перехода от одного выхода к следующему, поэтому потребуется меньше Выводы ввода / вывода на микроконтроллере, чем на микросхемах декодера. Обычно они имеют дополнительные входы для сброса и включения. Существуют также микросхемы, называемые сдвиговыми регистрами , которые доступны в двух типах: один для преобразования последовательных в параллельные, другой для преобразования параллельных в последовательные. Наконец, естьбуферы , которые вы можете поместить между Rasberry Pi и вашей шахматной доской, чтобы Pi не разрушался в случае перегрузки по току. Все это может быть полезно в схемах мультиплексирования.

Уровень реки St
источник
1
Вы упомянули сдвиговые регистры - их можно использовать и для светодиодных выходов. Другой счетчик плюс 8-битный сдвиговый регистр, который может состоять из трех состояний, может управлять целым массивом с чуть более чем двумя или тремя выводами, если они достаточно быстрые, чтобы избежать видимого мерцания.
Хоббс
@hobbs Я не думаю, что мерцание является проблемой, так как OP хочет зажечь только один или два светодиода одновременно. Даже тристат не является действительно необходимым, если у вас есть только один прямой и один инвертирующий дека / восьмеричный счетчик / регистр сдвига для управления светодиодами. Совершенно достижимы 3 пина: общий сброс, продвижение столбца, продвижение строки. Это может быть путь - сохранить все остальные контакты для более сложной проблемы датчиков.
Уровень Река St
Для светодиодов также может использоваться драйвер светодиодов MAX7219 / 7221. Это позволит сократить количество входов до 3 - такт, данные, защелки.
Jnovacho
4

Мультиплексирование действительно распространенная практика.

Есть несколько способов получить больше от ваших малиновых пи-булавок

Одним из них является использование чипа, чтобы сделать часть тяжелой работы за вас. Например, если у вас есть 8 входов и 8 выходов для чтения состояния платы, вы можете использовать счетчик, чтобы поднять 8 входов по одному. Для этого вам понадобятся 2 контакта на Arduino - один для возврата к первому контакту и один для «перехода к следующему ряду». Вы только что сохранили 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 вместе.

Поздравляем, теперь у вас есть два выходных контакта (сброс и тактирование) и 4 входных контакта, всего 6 - это экономит 10 контактов! Обратите внимание, что Raspberry Pi не имеет аналогово-цифровых преобразователей, поэтому вам потребуется дополнительная работа для этого.

Теперь о светодиодах. У вас уже есть управляемый источник питания (счетчики на два десятилетия) - давайте использовать его повторно. Поместите свои 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 цифровых контакта (один из которых должен быть ШИМ - они имеют символ «~» рядом с контактом) будут управлять любым количеством светодиодов.

Удачи!

AMADANON Inc.
источник
Это RPi, а не Arduino.
Дмитрий Григорьев
Мои извинения, вы правы. Практически все, что я сказал, по-прежнему применимо, поэтому я внес небольшие правки, чтобы заставить его работать
AMADANON Inc.
0

Я не думаю, что вам понадобится светодиод в правом верхнем углу. Датчик в середине, как вы упоминаете, будет достаточно. Сложная часть будет кодом для шахматной доски. Представь, что у тебя есть шахматная доска. Строка будет обозначена как «алфавит», а столбец - как «номер».

Итак, сначала вам нужна программа для программирования типа фигуры в начальной позиции. Позже, когда вы переместите свои части, код сгенерирует начальное местоположение части в конечное местоположение. Это уменьшит ваш вклад вдвое.

Брэндон Лок
источник
5
Может быть, я не очень хорошо объяснил ... Светодиоды не предназначены для чтения в текущем состоянии, они предназначены для того, чтобы показать, какой ход хочет сделать компьютер. Итак, пользователь делает ход: датчики яркости сообщают программному обеспечению, что использовалось. Программное обеспечение рассчитывает его следующий ход и мигает двумя светодиодами, пользователь перемещает фигуру, а затем снова очередь за человеком.
Голо Роден