Arduino определяет порядок объектов
Я пытаюсь найти способ обнаружения блоков, размещенных на сетке на столе. На столе будут фиксированные места, где вы можете размещать блоки, но пользователю разрешено размещать блоки в любом свободном слоте. Я хотел бы, чтобы Arduino опрашивал слоты на столе и сообщал мне, какие блоки где расположены.
Я собираюсь разработать блоки с магнитными соединениями сверху и снизу, чтобы создать цепь, как только они будут размещены.
Какие чипы можно использовать, чтобы ардуино выдавало мне топологию блоков при размещении?
@Guus Baggermans, 👍-1
Обсуждение1 ответ
Лучший ответ:
Вам нужно отслеживать уникальные объекты в сетке слотов 8x8? Сколько уникальных объектов?
Если общее количество объектов не превышает 112, вы можете присвоить каждому уникальный адрес I2C.
Вы бы добавили 4 круглых электрических контакта в конфигурации «бычий глаз» сверху и снизу каждого объекта, чтобы все контакты I2C подключались независимо от ориентации. Все объекты в одном стеке будут соединены вместе на шине I2C этого стека.
У вас будет мультиплексор 8x8 для подключения к шине I2C по очереди для каждой из 64 позиций сетки и опроса этой шины для каждого из возможных адресов I2C. (Отправьте ping для каждого адреса и найдите ACK
.)
Кроме того, вы можете присвоить каждому объекту уникальный вес, варьирующийся в степени двойки. (первый объект весит 1000 грамм. Второй весит 1001 грамм (1000+2^0)) третий объект весит 1002 грамма (1000+2^1). Четвертый объект весит 1004 грамма (1000+2^2). и др.)
Затем на каждую подушечку нужно поставить шкалу. Взвесьте предметы по модулю 1000 грамм. Этот результат в двоичном виде даст вам флаги для каждого объекта на этой площадке.
Или 2 круглых электрических контакта сверху и снизу каждого объекта с резисторами, которые имеют уникальное сопротивление, равное степени двойки, на каждом из них, как предлагает Джурай в своем комментарии. Измерьте сопротивление, и вы сможете выяснить, какой набор объектов присутствует.
Математика была бы проще, если бы вы подстроили объекты так, чтобы они образовывали последовательную цепь через все присутствующие объекты (поместите сверху нормально замкнутый переключатель, который закорачивает верхние контакты этого объекта через его резистор, если сверху нет объекта). из него. Если есть объект, переключатель размыкается, а объекты сверху замыкают цепь.)
Или вам нужно знать, где расположены объекты сверху вниз в каждом стеке?, @Duncan C
Спасибо @Duncan! К счастью, мне не нужно знать порядок объектов, пока у меня есть счет для каждого стека. Я собираюсь сначала попробовать ваш подход I2C, так как я предпочитаю «программное» решение физическому решению, такому как вес и сопротивление., @Guus Baggermans
Сколько уникальных объектов вам нужно иметь дело? Это меньше, чем 112 уникальных объектов, которые поддерживает I2C?, @Duncan C
@GuusBaggermans, я удалил свой комментарий о решении с резисторами, потому что оно не будет обнаруживать отдельные объекты, а только количество в каждом стеке. Решение I2C не является программным решением. Вам нужно поместить чип с питанием с адресом I2C в каждый блок, и вы все равно не обнаружите порядок. Таким образом, резистор намного проще и требует только двух взаимозаменяемых контактов с каждой стороны взаимозаменяемой стороны., @Juraj
- Лазерный датчик ToF (VL53L0X) не работает
- Могу ли я соединить вместе несколько плат Arduino Nano ?
- Параллельная связь между несколькими Ардуино
- Multiple Wire.write() не работает для Arduino Nano I2C
- Как использовать I2C от Arduino Uno, когда у меня установлен GSM-shield?
- Главный считыватель/ведомый передатчик с датчиком расстояния
- Отправка 4 аналоговых значений от одного arduino к другому с помощью I2C
- Увеличение скорости датчиков Vl6180x
Вам нужно ограничить вашу проблему дальше. Например, если Arduino отслеживает размещение блоков, порядок стека можно определить, проверив историю активации датчика. Однако, если Arduino нужно определить порядок без истории - тогда проблема усложняется., @st2000
Интересный подход к использованию тайминга/истории. Однако я даже не уверен, как вообще обнаружить блоки на данный момент. Я не знаю, какие чипы интегрировать в стол или блоки, чтобы иметь возможность их обнаруживать., @Guus Baggermans
Это ситуация, когда ПЗУ OneWire с уникальными серийными номерами были бы хороши., @Majenko
«Прошивки OneWire», мне придется погуглить. На противоположном конце спектра вы можете пометить блоки (отрезать угол), чтобы обеспечить их ориентацию по отношению к столу, и разместить магниты в уникальных местах для каждого типа. Затем используйте устройства с эффектом Холла, чтобы почувствовать их., @st2000
исправление ориентации, безусловно, шаг в правильном направлении @st2000!, @Guus Baggermans
Я изучил решение OneWire для arduino. Оказывается, вы можете «сканировать» подключенные устройства на OneWire, но, похоже, сложно использовать более 1 контакта arduino. Я предполагаю, что мне потребуется 1 Arduino на каждую ячейку размещения таблицы @Majenko?, @Guus Baggermans
Не должно быть сложно иметь более одного вывода — просто используйте более одного объекта OneWire, каждый с другим выводом. Сколько позиций плитки вы хотите иметь?, @Majenko
@Majenko это будет похоже на шахматную доску, всего 64 позиции. Стеки объектов могут быть до 8 в высоту., @Guus Baggermans
Это довольно много выводов для шин OneWire. Я бы предложил разделить проект на разделы. Может быть, сделать одну полосу из 8, управляемую небольшим Arduino (нано, микро или что-то в этом роде), затем соединить 8 из них вместе и заставить их общаться с мастером., @Majenko
"64 позиции. Стеки объектов могут достигать 8" Итак... Ух ты, 512 объектов. Я думаю, вы только что покинули мир Arduino и вошли в Raspberry Pi, используя камеру и OpenCV. Вы сказали, что хотите полностью программно-определяемое решение. Хорошо проверьте [OpenCV](https://opencv.org/). Вы можете посмотреть такие проекты, как [этот](https://classes.engineering.wustl.edu/ese205/core/index.php?title=CV_Chess) и [этот](https://answers.opencv.org/question /62078/обнаружение-объекта-внутри-квадратного-стола-использованием-findchessboardcorners/) для идей., @st2000