Это машина, которая бросает три кубика в лоток с помощью шагового двигателя, а затем считывает результаты с помощью OpenCV. Всё программирование выполнено на Python, код в основном скопирован из более старых проектов и ChatGPT.
Код работает с помощью обнаружения пятен для поиска точек на кубиках и алгоритма dbscan для их группировки в отдельные кубики. Для этого необходимы "разделители" в лотке.
Использованное оборудование включает обычный шаговый двигатель и драйвер DRV8825, Raspberry Pi 4 и камеру Pi 3. За исключением нескольких винтов M4/M2.5, большинство других деталей напечатаны на 3D-принтере с использованием PLA и PETG.
Шаговый двигатель.
Я использую биполярный шаговый двигатель NEMA 17. Он рассчитан на ток в 1,5 А, но я ограничиваю его до 500 мА с помощью DRV8825. Схема управления питается от 12 В.
Строительство.
Я выбрал эту версию в качестве финальной машины, так как она работает быстрее и дает лучшие результаты, чем другие машины, которые я построил. Она не требует никаких специальных деталей, таких как стекло или подшипники.
Машина собирается с помощью клея CA и термоклее на куске доски для книжной полки.
Необходимо внести улучшения.
-
Камере нужен немного более широкий угол обзора, как у Pi Camera 3 Wide.
-
Чтобы снизить уровень шума, в лотке следует использовать резиновую подкладку.
-
Лист указывает, в какой полосе он расположен.
Генерация случайных чисел.
Чтобы получить хорошие случайные числа от бросков костей, дающие значение от 1 до 6, вы можете использовать операцию модуло, но есть вещи, которых следует избегать. Если вам нужно случайное значение от 0 до 27, вы должны бросить три кости (d1-d3) в определённом порядке и выполнить следующие действия:
(d1 - 1) * 36 + (d2 - 1) * 6 + (d3 - 1) * 1Если значение превышает 196, бросьте кости ещё раз и удалите цифры, иначе в результатах будет присутствовать модульное искажение. После этого вы делите число на 28. Пример:
-
Первый брошенный кубик: 4
-
Второй брошенный кубик: 3
-
Третий брошенный кубик: 2
121 по модулю 28 = 9
Tags
Modellquelle
