Оглавление:
- Шаг 1. Что такое проблема распознавания фигур и как я ее решил
- Шаг 2: как все работает
- Шаг 3: Инструменты и компоненты
- Шаг 4: Схема (Fritzing)
- Шаг 5: процесс
- Шаг 6: несколько фотографий и видео с разных этапов
- Шаг 7: Исходный код
Видео: Демонстрация электронной шахматной доски 4x4 / с Arduino Mega + считыватель RFID + датчики на эффекте Холла: 7 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Привет, создатели, Я Тахир Мириев, я закончил Ближневосточный технический университет в 2018 году, Анкара / Турция. Я специализировался на прикладной математике, но мне всегда нравилось делать вещи, особенно когда это требовало ручной работы с электроникой, дизайном и программированием. Благодаря уникальному курсу прототипирования, который предлагает наш отдел промышленного дизайна, у меня появилась возможность сделать что-то действительно интересное. Проект можно рассматривать как семестр, рассчитанный на целый семестр (4 месяца). Студентам была поставлена задача найти творческий подход к проектированию уже существующих продуктов / демонстраций и реализовать свои идеи с помощью микроконтроллеров и датчиков Arduino. Я думал о шахматах, и после некоторых исследований успешных проектов я заметил, что в предыдущих проектах разработчики в основном использовали готовые шахматные движки (где все ходы каждой фигуры были запрограммированы в ядре) вместе с Raspberry Pi, некоторым MUX. светодиоды и герконы. Однако в своем проекте я решил избавиться от любого внешнего программного обеспечения в виде шахматного движка и найти творческое решение проблемы распознавания фигур, используя RFID-считыватель, датчики на эффекте Холла и Arduino Mega.
Шаг 1. Что такое проблема распознавания фигур и как я ее решил
Проще говоря, предположим, что у вас есть шахматная доска с «мозгом» = микроконтроллером, и вы должны заставить свою доску понимать, какую фигуру вы держите в руке и куда вы ее поместили. Это проблема распознавания фигуры. Решение этой проблемы тривиально, если у вас есть шахматный движок, в котором все фигуры стоят на своих исходных позициях на доске. Прежде чем я объясню, почему это так, позвольте мне сделать несколько замечаний.
Для тех, кто с энтузиазмом относится к тому, как здесь все работает, я должен пояснить, зачем нам нужны герконы (или, в моем случае, я использовал датчики на эффекте Холла): если вы поместите магнит под каждую деталь и возьмете его из квадрат на доске (при условии, что под каждым квадратом есть геркон) из-за наличия / отсутствия магнитного поля над датчиком, вы можете дать своему контроллеру понять, стоит ли на квадрате фигура. Однако он по-прежнему ничего не сообщает микроконтроллеру о том, какая часть стоит на квадрате. Это только говорит о том, что на квадрате нет фигуры. На этом этапе мы сталкиваемся с проблемой распознавания фигур, которую можно решить с помощью шахматного движка, когда все фигуры помещаются на свои исходные позиции в начале игры. Таким образом, микроконтроллер с самого начала «знает», где стоит каждая деталь, со всеми адресами, зафиксированными в памяти. Тем не менее, это накладывает на нас огромное ограничение: вы не можете выбрать, скажем, любое количество фигур, разместить их случайным образом в любом месте на доске и начать анализировать игру. Вы всегда должны начинать с самого начала, все фигуры должны быть изначально на доске, так как это единственный способ для микроконтроллера отслеживать их положение после того, как вы подняли фигуру и поместили ее на какой-либо другой квадрат. По сути, это была проблема, которую я заметил и над которой решил работать.
Мое решение было довольно простым, но творческим. Я разместил RFID-считыватель на лицевой стороне платы. Между тем, я прикрепил не только магнит к деталям, но и метку RFID, каждая деталь которой имеет уникальный идентификатор. Следовательно, прежде чем разместить фигуру на любом желаемом квадрате, вы можете сначала поднести кусок близко к считывателю RFID и позволить ему прочитать идентификатор, идентифицировать кусок, сохранить его в памяти, а затем вы можете разместить его в любом месте. Кроме того, вместо использования герконов, чтобы упростить конструкцию схемы, я использовал датчики эффекта Холла, которые работают аналогично, с той лишь разницей, что в микроконтроллер отправляется 0 или 1 в виде цифровых данных, что означает «есть». или «нет» фигуры на квадрате соответственно. Я также добавил светодиоды (к сожалению, не того же цвета, их не было), чтобы, когда вы поднимите деталь, загорятся все квадратные места, где можно разместить поднятую деталь. Думайте об этом как об образовательной практике для изучающих шахматы:)
Напоследок хотелось бы отметить, что несмотря на то, что я использовал несколько техник, проект остается простым и понятным, не глубоко проработанным и не слишком сложным. У меня не было достаточно времени, чтобы заняться шахматной доской 8x8 (также потому, что 64 датчика холла стоят в Турции дорого, я покрыл все расходы, связанные с проектом), поэтому я сделал демонстрационную версию 4x4, протестировав только две фигуры: пешку и Королева. Вместо использования шахматного движка я написал исходный код для Arduino, который генерирует все, что вы увидите на видео ниже.
Шаг 2: как все работает
Прежде чем мы перейдем к пошаговому объяснению того, как был реализован проект, я думаю, было бы лучше посмотреть иллюстративное видео и получить некоторое интуитивное представление о том, о чем я говорю.
Примечание №1: перегорел один из красных светодиодов (первый в ряду / слева направо), неважно.
Примечание № 2: хотя и широко используется, по своему опыту могу сказать, что технология RFID - не лучшая идея для использования в приложениях DIY (конечно, если у вас есть альтернативы). Прежде чем все заработало, я провел много попыток, поместив шахматные фигуры ближе к считывающему устройству и дождавшись, пока он правильно прочитает идентификатор. Для этого следует настроить последовательный порт, потому что способ считывания идентификатора считывателем RFID - это просто головная боль. Чтобы разобраться в проблеме, нужно попробовать самому. Если вам нужна дополнительная помощь, напишите мне ([email protected]) или добавьте в скайп (tahir.miriyev9r1), чтобы мы могли запланировать разговор и обсудить детали в деталях, я все подробно объясню.
Шаг 3: Инструменты и компоненты
Вот список всех инструментов, которые я использовал в проекте: Электронные компоненты:
- Макетная плата (x1)
- Всенаправленный A1126LUA-T (IC-1126 SW OMNI 3-SIP ALLEGRO) Датчики Холла (x16)
- Базовые светодиоды 5 мм (x16)
- Провода перемычки
- Считыватель RFID 125 кГц и антенна (x1)
- Arduino Mega (1 шт.)
- RFID-метки 3M (x2)
Другие материалы:
- Оргстекло
- Глянцевая бумага
- короткие доски (деревянные)
- Акриловая краска (темно-зеленая и кремовая) x2
- Картон тонкий
- Круглые магниты 10 мм (2 шт.)
- Фигуры пешки и ферзя
- Паяльник и паяльные материалы
Шаг 4: Схема (Fritzing)
Я знаю, что схемы немного сложны, но идея должна быть ясной. Я впервые использовал Fritzing (кстати, очень рекомендую), наверное, связи можно было бы нарисовать более точно. Во всяком случае, я записал все внутри схем. Примечание: я не смог найти точную модель RDIF Reader среди компонентов в базе данных Fritzing. Я использовал модель RFID-модуля 125 кГц - UART. Вы можете найти на Youtube учебные пособия о том, как установить этот модуль с Arduino.
Шаг 5: процесс
Пора объяснить, как все было сделано. Следуйте пошаговому описанию:
1. Возьмите картон 21x21 см, а также немного дополнительного картона, чтобы вырезать и склеить стенки верхней части доски, чтобы получилось 16 квадратов с пронумерованными A B C D 1 2 3 4. Поскольку картон тонкий, вы можете вставить в каждый квадрат 16 датчиков Холла с 3 ножками на каждой и 16 светодиодов на 2 ножках.
2. После того, как вы установите компоненты, вам нужно будет сделать пайку, чтобы припаять ножки датчиков Холла и светодиодов к перемычкам. На этом этапе я бы порекомендовал разумно выбирать цветные провода, чтобы вы не запутались с выводами + и - светодиодов, а также выводами VCC, GND и PIN датчиков Холла. Конечно, можно напечатать плату с датчиками и даже уже припаянными светодиодами типа WS2812, но я решил упростить проект и сделать еще немного «ручной работы». На этом этапе все, что вам нужно сделать, это подготовить шнуры и датчики, на более поздних этапах, следуя схеме Fritzing, вы можете увидеть, где вы должны прикрепить конец каждого провода. Вскоре некоторые из них будут подключаться непосредственно к контактам на Arduino Mega (на Arduino их достаточно), другие - к макетной плате, и все GND могут быть припаяны к одному куску шнура (создавая общую землю), который позже должен быть подключен к GND на плате Arduino. Одно важное замечание: датчики на эффекте Холла ВСЕНО НАПРАВЛЕННЫ, что означает, что не имеет значения, какой полюс магнита будет находиться рядом с датчиком, он отправит 0 данных, когда поблизости есть некоторое магнитное поле, и 1, когда его нет, а именно, магнит находится далеко (скажем, на расстоянии 5 см) от датчика.
3. Подготовьте аналогичный картон 21x21 см и закрепите на нем Arduino Mega и длинный макет. Вы также можете снова вырезать 4 стены любой желаемой высоты из картона и склеить их вертикально этими двумя слоями квадратных досок 21x21 см. Затем следуйте схемам Fritzing Schematics, чтобы все настроить. Вы также можете настроить считыватель RFID после того, как закончите со светодиодами и датчиками Холла.
4. Проверьте, все ли светодиоды и датчики работают, отправив сигналы с помощью основных кодов. Не избегайте этого шага, так как он позволит вам проверить, все ли работает правильно, и перейти к дальнейшему построению платы.
5. Подготовьте пешку и ферзя, прикрепив снизу два магнита радиусом 10 см, а также круглые RFID-метки. Позже вам нужно будет прочитать идентификаторы этих тегов с последовательного экрана в Arduino IDE.
6. Если все работает отлично, можете запустить основной код и попробовать все!
7 (необязательно). Вы можете поработать с деревом, что придаст вашей демонстрации более естественный вид. Это зависит от вашей воли и воображения.
Шаг 6: несколько фотографий и видео с разных этапов
Шаг 7: Исходный код
Теперь, когда мы закончили с прототипом, мы готовы воплотить его в жизнь с помощью кода Arduino ниже. Я постарался оставить как можно больше комментариев, чтобы сделать процесс анализа кода понятным. Честно говоря, логика может показаться немного сложной на первый взгляд, но если вы углубитесь в логику кода, она будет выглядеть более исчерпывающей.
Примечание: как и на настоящей шахматной доске, я абстрактно пронумеровал квадраты как A1, A2, A3, A4, B1,…, C1,…, D1,.., D4. Однако в коде использовать эту нотацию нецелесообразно. Поэтому я использовал массивы и представил квадраты как 00, 01, 02, 03, 10, 11, 12, 13,…, 32, 33 соответственно.
Спасибо за Ваше внимание! Протестируйте все и не стесняйтесь писать в комментариях о любых пропущенных мною ошибках, улучшениях, предложениях и т. Д. Будем рады услышать некоторые мнения о проекте. Если вам нужна какая-либо помощь по проекту, напишите мне (miriyevt @ gmail.com) или добавьте в скайп (tahir.miriyev9r1), чтобы мы могли запланировать беседу и обсудить детали в деталях. Удачи!