Меню

Машина для сборки кубика рубика

Rubik’s Connected: умный скоростной кубик Рубика

Добрый день. Сегодня в моем обзоре я покажу вам игру, которая и в 21 веке остается очень популярной, но, как диктует нам время высоких технологических возможностей, теперь это еще более «умная головоломка».

Технические характеристики

  • Модель Rubik’s Connected
  • Встроенный модуль Bluetooth 5.0
  • Светодиодная подсветка (LED) Да
  • Материал корпуса Пластик
  • Интерфейс связи с ПК USB 2.0
  • Кабель USB в комплекте
  • Индикация Включения Да
  • Тип аккумулятора Встроенный
  • Габаритные размеры (В*Ш*Г) 57*57*57 мм
  • Вес 111 г

Упаковка и комплект

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

Упаковка качественная, кубик надежно размещается внутри, крепко зафиксирован в пластиковых блистерах и бездвижен. Внутри с кубиком производитель вложил фирменный зарядный кабель с обычным USB штекером для зарядки и руководство пользователя на 3 языках. Русскоязычную версию вы также можете найти в интернете. Зарядный кабель в резиновой оплетке гибкий, 30см.

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

Внешний вид

В моих руках очень классный подарок для любителя головоломок и новичков. Уже одна только упаковка подготавливает пользователя к тому, что внутри яркая и занимательная игра. Кубик компактных размеров, оптимальных не только для разгадывания головоломки взрослыми, он удобно разместится и в руках ребенка. Держать его приятно, т.к. грани имеют скошенные углы, а пластик и нанесенные цветные наклейки гладкие. Размеры грани 57мм*57мм. Цвета яркие, такие как в классическом кубике Рубика. Что касается внутреннего устройства, то, безусловно, перед нами не топорная пластиковая игрушка с пружинками, внутри используется целая система магнитов и пружин. Благодаря такой организации, грани поворачиваются очень легко, прокручиваются с глухим щелчком. Не стоит забывать, что это современная умная игрушка, в которой разместилось множество датчиков, отслеживающих местоположение и перемещение граней.

Немаловажным преимуществом данной модели, на мой взгляд, является удобная зарядка, которая не нарушает целостность кубика. До этого я уже пользовалась кубиками, для «перезарядки» которых необходимо разбирать одну из граней, и скажу честно, каждый раз это действие вызывает у меня панику: обязательно что-то поломаю. Новое устройство не придется разбирать, крепление для зарядки фиксируется на центральный кубик одной из граней. Крепление тугое, срабатывает со щелчком, и повода для беспокойства, что зарядка не сработает или отсоединится, не будет. Единственное, что я предусмотрела бы на месте разработчиков, это местная индикации заряда. Забегая вперед, скажу, что информацию о батарее можно узнать в приложении. К слову, кубик достаточно автономный, он оснащен энергоэффективным аккумулятором, заряда которого хватит на 60 часов непрерывной работы.

Мобильное приложение

Безусловно, передо мной не просто классическая головоломка, это умная модель, которая оснащена всевозможными датчиками и Bluetooth-модулем. Благодаря такому умному устройству, кубик хорош для и тех, кто готов обучаться, а также для профи, которые не против конкурировать, участвуя в сетевых соревнованиях.

Для этого воспользуйтесь специализированным мобильным приложением — Rubiks Connected, которое доступно для скачивания в Google Play и App Store. Приложение хорошо русифицировано c интуитивно понятным интерфейсом, крупным шрифтом, звуковыми эффектами и возможностью контролировать заряд устройства. Кстати, автономность у кубик хорошая, производитель обещает 60 часов беспрерывной работы без подзарядки. При первом запуске пользователю предлагается провести синхронизацию устройства с мобильным приложением, зарегистрироваться или войти в аккаунт. Связь с мобильным устройством устанавливается с помощью новейшей Bluetooth 5.0, и любое движение моментально считывается и оперативно отражается на экране смарт устройства.

Связь устанавливается моментально, передо мной красивый интерфейс, с несколькими закладками: Обучение, Игры, страничка со статистикой — Мой кубик, Матчи – это онлайн соревнования и Таблица лидерства. Справа вверху можно заметить закладку с настройками Профиля и сведения об устройстве, слева – индикатор батареи. Стоит отметить, что обучение не только в виде пошагового текстового описания, есть и видео уроки на английском языке с русскими субтитрами. Таким образом, игрушка подойдет для самостоятельного обучения лишь читающим деткам.

Функционал приложения позволяет пройти курс обучения по сборке кубика, и только при прохождении предыдущего открывается следующий этап. Академия Rubiks Connected научит любого пользователя решать кубик Рубика за несколько шагов.

Как вы видите, с помощью приложению Rubik’s Connected можно научиться собирать кубик Рубика, совершенствовать свои навыки и следить за своим прогрессом, а также принимать участие в международных виртуальных турнирах.

Вывод

Rubik’s Connected — отличное компактное устройство для обучения решения головоломки кубика Рубика, а также для профи. Последние будут несказанно рады онлайн турнирам с соперниками, которые доступны, благодаря специализированному одноименному мобильному приложению. Приложение устанавливается на любое смартустройство с установленной Android либо IOS, которое коннектится с кубиком с помощью новейшей Bluetooth 5.0. Пройдите этап обучения с видео уроками, либо играйте офлайн, побеждайте игроков со всего мира. Интерфейс приложения яркий, интуитивно понятный, русифицирован. Качество сборки игрушки отличное, превосходные механические характеристики, эргономика на высоте: кубик оптимального размера и имеет скошенные углы граней, а они в свою очередь легко вращаются, подтверждая каждое действие пользователя щелчком. Устройство оснащено энергоэффективным аккумулятором, организация зарядки отлично реализована со специальным внешним разъемом, благодаря которому не придется нарушать конструкцию кубика.

Читайте также:  Фольксваген кадди объем масла двигателя

Мое резюме: этот гаджет, однозначно, станет желанным подарком и подростку, и любителю умных головоломок, тренируйте память и внимательность, улучшайте свои логические навыки. Берите его в путешествие, используйте в перерывах на работе, запускайте в качестве антидепрессанта. Приобретайте для себя и дарите близким. Кубик Рубика — это правильный подарок.

Головоломка для робота. Как я сделал машину для сборки кубика Рубика

Содержание статьи

Мне не хотелось повторять уже готовое изделие. Чтобы лучше понимать, как функционирует робот, и научиться чему-то новому, я решил делать все сам.

Подробно о том, как начать свою карьеру в электротехнике, читай в статье «Я у мамы инженер! Как перестать бояться паяльника и начать творить».

Выбираем платформу

Любой робот состоит из двух основных систем: механической и электронной. Для механической составляющей я рассматривал конструктор Lego, но его наборы могли оказаться очень дорогими, к тому же к нему очень сложно пристроить нестандартные части и блоки. Поэтому я остановился на проекте с сайта Otvinta.com и взял за основу их конструкцию. Ее детали можно легко распечатать на 3D-принтере.

В качестве платформы для электронного блока управления я выбрал смартфон на Android и микроконтроллер Arduino, которые связал по USB. На мой взгляд, такая платформа оптимальна для создания простых и дешевых роботов.

У современных смартфонов есть все необходимое: камера, Bluetooth, Wi-Fi, USB, GPS-датчик, сенсорный дисплей для управления, достаточно мощный процессор и большой объем памяти. Можно использовать бюджетный смартфон, чтобы уменьшить стоимость проекта.

Микроконтроллер Arduino нужен, чтобы отвечать за процессы реального времени: управлять сервоприводами, считывать информацию с внешних датчиков, получать управляющие команды со смартфона по USB и отправлять на него нужные данные.

Мой выбор остановился на смартфоне Motorola Moto G и микроконтроллере Arduino Mega 2560.

Смартфон Motorola Moto G
Микроконтроллер Arduino Mega 2560

Печатаем детали и собираем корпус

Модели всех деталей для корпуса робота можно скачать и распечатать на 3D-принтере (ZIP). Лучше печатать с максимальной точностью. Я этот момент не учел, поэтому детали потом пришлось подправлять с помощью наждачной бумаги.

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

Сервоприводы советую брать оригинальные, они лучше подходят по конструкции и должны работать надежнее.

Крепеж я купил на строительном рынке. Корпус собирал по инструкции, это оказалось несложно.

Также роботу нужны два блока питания: на 12 В для Arduino и на 5 В для питания сервоприводов.

Механическая часть робота

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

Робот собственной персоной

Сервоприводы подключаем к микроконтроллеру и подаем на них питание. Теперь, когда механическая часть робота собрана, мы готовы приступить к написанию программ, которые будут управлять нашим устройством.

Управление сервоприводами

Управлять сервоприводами у нас будет микроконтроллер Arduino Mega 2560. Чтобы написать для него программу, понадобится средство разработки. Arduino IDE свободно распространяется в интернете и работает на любой современной ОС. После ее установки создаем новый скетч для написания исходного кода. Язык программирования похож на C, что сильно облегчит нашу работу.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Машина для сборки кубика Рубика на основе системы FAC

Не так давно мы вместе с Wilbert Swinkels закончили работу над машиной, собирающей кубик Рубика. Про нас написали в официальном блоге Raspberry Pi и мы получили массу восторженных отзывов. Тем не менее, в русскоязычном сегменте сети проект как-то остался незамеченным. Так что я решил исправить это упущение, разместив здесь переведенную и дополненную версию оригинального поста.

Под катом речь пойдет (в основном) о софтверной части этой машины, о механической части можно почитать на официальной страничке проекта (да-да, мы знаем, что она немного «олдскульна»)

Вступление

Началось все с того, что в мае этого года я совершенно случайно познакомился с Wilbert Swinkels. Я был просто потрясен, когда увидел его творения: каждый из этих механизмов, от мала до велика, можно с уверенностью назвать произведением искусства. И чем ближе рассматриваешь их устройство, тем больше поражаешься их красотой.

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

Опыта программирования под Raspberry Pi и Arduino у меня не было совсем, но в целом задача показалась мне довольно несложной. Конечно же, я ошибался 🙂

Hardware

Сама машина построена с помощью модульной системы FAC. Это что-то вроде советского конструктора, но созданного для прототипирования серьезных и сложных механизмов. Во второй половине прошлого века ее очень активно использовали в лабораториях Philips и других компаний и университетов.

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

Читайте также:  Двигатели однофазные двигатель 220в схема подключения

Микроконтроллер

Первым делом мы решили использовать Raspberry Pi вместо Arduino. Главным образом это связано с тем, что «умные» алгоритмы решения кубика Рубика требуют значительного объема памяти и процессорных мощностей. В предыдущих попытках использовался примитивный трехслойный алгоритм, но в этот раз мы решили использовать алгоритм Коцембы. Кроме того, мне не очень хотелось писать все на С (хотя частично все же пришлось).

В стандартной версии Raspberry Pi нам не хватило пинов, чтобы подключить все имеющиеся моторы, поэтому мы заказали Development Kit. Кстати, очень советую: пинов не только больше, но и расставлены они, на мой взгляд, более логично. К тому же, на этой плате два разъема для камеры вместо одного.

Первая версия сканера

Для считывания начальной конфигурации кубика нужно было сканирующее устройство. Идея очень проста: по очереди освещаем поверхность кубика тремя светодиодами: красным, зеленым и синим. Каждый раз замеряем отраженный свет при помощи фоточувствительного резистора. Теоретически, мы должны получить RGB-значения, которые можно использовать для распознавания цвета квадратика. От предыдущих программистов у нас остался proof-of-concept код для Arduino, который, казалось бы, даже работал при определенных условиях.

Первой проблемой, с которой мы столкнулись, было несоответствие напряжения. Как известно, логическая единица на пинах Arduino составляет 5В, в то время как у Raspberry Pi это 3.3В. К счастью, контроллеры шаговых двигателей (stepper motor driver), которые мы использовали, продолжили работать, несмотря на изменение амплитуды импульсов.

Гораздо более критичным оказалось то, что в Raspberry Pi нет аналоговых входов. Из-за этого на Raspberry нельзя просто взять и считать напряжение на фоторезисторе. Это, наверное, очевидно для тех, кто хоть раз с таким сталкивался, но я поначалу об этом даже не задумывался. Порыскав в сети в поисках решения, мы наткнулись на эту статью. В двух словах, мы добавляем в цепь конденсатор, и замеряем время, за которое он зарядится от нуля до логической единицы (это мы можем задетектить с помощью цифрового пина). Время зарядки будет пропорционально сопротивлению фоторезистора, поэтому мы можем судить о количестве света.

Этот подход не только ужасно ненадежен (считать время в питоновском скрипте на Linux с кучей фоновых процессов — неблагодарное дело), но и до невозможности долог. Для того, чтобы сгладить случайные отклонения в показаниях, приходилось производить считывание несколько раз, избавляться от выбросов, и усреднять оставшиеся значения. Тем не менее, нам-таки удалось заставить этот сканер работать:

Вторая (финальная) версия сканера

Сканер на конденсаторах работал довольно неплохо, но был уж очень медленным. На сканирование всего кубика Рубика уходило около двух минут, и к моменту завершения сканирования у зрителя уже пропадал всякий интерес. Поэтому мы решили все-таки вернуться к Arduino и купили маленькую Arduino Mini специально для управления сканером.

Подружить Arduino с Raspberry Pi оказалось невероятно просто: два провода, конвертер напряжения между ними, и вуаля — у нас есть Serial-интерфейс. А если прикрутить сверху простенький протокол Min, то и программировать это дело — одно удовольствие.

Я перенес всю логику управления сканером на Arduino. Скорость сканирования значительно возросла. Благодаря аналоговым входам, мы можем считывать напряжение напрямую с фоторезисторов, и эти значения очень точны. К тому же, так как Arduino смонтирован непосредственно на сканере, нам нужно гораздо меньше проводов от сканера к Raspberry Pi!

Алгоритм сборки

Сборка кубика Рубика с точки зрения математики — довольно трудоемкая задача. Конечно, речь идет о нахождении оптимального решения, а не «какого-нибудь». Я был удивлен, когда узнал, что число Бога (точная нижняя граница для количества ходов, необходимых для решения произвольного кубика) было найдено лишь в 2010.

В этом проекте мы хотели сократить суммарное время, необходимое для просчета решения и сборки, поэтому нам не подходили ни простой трехслойный алгоритм (он работает быстро, но выдает решения длиной в сотню ходов), ни оптимальный алгоритм (решения короткие, но процесс просчета на Raspberry Pi занимал бы вечность). В результате мы остановились на великолепном «двухфазном» алгоритме немецкого математика Herbert Kociemba. Он способен выдавать субоптимальные решения (в среднем 20 ходов), укладываясь при этом в разумное время.

На сайте автора можно найти реализацию алгоритма на Java. Первым делом я перевел этот код на Python. Это было совсем не сложно, поскольку большая часть программы — это математические операции и перебор вариантов. Однако, я не учел, что алгоритм требует действительно много ресурсов. Нахождение решения при первом запуске заняло более минуты (!) на моем ноутбуке.

Под PyPy с включенным JIT решение заняло 1 секунду на ноутбуке, но на Raspberry Pi все еще требовало порядка минуты. После нескольких попыток ускорить работу питоновской программы (numpy, multiprocessing), я решил все же переписать алгоритм на C. Теперь решение занимает 1-2 секунды даже на Raspberry.

Обе реализации алгоритма я выложил на GitHub.

Управление машиной

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

Читайте также:  Сборка мотора ваз 21213

Помимо основной программы, я сделал интерактивный шелл, который сэкономил мне кучу времени при отладке. В целом, в этой части не было ничего необычного с точки зрения программирования. Для отладки сканирования я генерировал результаты в виде картинок.

Сканирование и распознавание цветов

До этого момента все было интересно, но не сложно. Спустя две недели после начала работы, машина уже могла собирать кубик из заданного состояния. Оставалось только научиться считывать начальную конфигурацию кубика при помощи сканера. У нас уже была «рабочая» программа для Arduino, так что мы не ожидали никаких сюрпризов. Тем не менее, эта часть проекта оказалась самой сложной, и отняла у нас еще 2 месяца трудов.

Показания фоторезисторов

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

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

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

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

Как я уже говорил, сканер на конденсаторах заработал, но был очень медленным. Когда мы заменили его другим, со встроенной Arduino, показания стали гораздо «кучнее» (интерактивная версия тут):

Калибровка и кластеризация показаний

Теперь, когда у нас были «сырые» RGB-показания с фоторезисторов, нужно было собственно идентифицировать цвета, чтобы подать конфигурацию кубика на вход алгоритму сборки. Здесь сразу напрашивались два различных подхода: использование цветовых интервалов и алгоритма кластеризации.

Первый подход — это решение «в лоб»: можно было экспериментальным путем определить интервалы значений для каждой стороны кубика (по сути, разбить пространство цвета на непересекающиеся области), и затем просто объединять значения по принадлежности определенному интервалу. При этом, каждую из 9 возможных позиций на грани кубика следует рассматривать отдельно. Такой метод очень просто запрограммировать, но у него есть два существенных недостатка. Во-первых, он привязывает нас к конкретным цветам, а значит мы сможем собирать только строго определенный кубик Рубика. А во-вторых, интервалы возможных значений очень сильно зависят от внешнего освещения. Более того, мы обнаружили, что, в зависимости от внешнего освещения, одно и то же показание может отвечать различным цветам.

Второй подход требует предварительной калибровки значений, чтобы один и тот же цвет давал одинаковые результаты во всех 9 позициях на грани кубика. В этом случае мы можем использовать алгоритм кластеризации для объединения значений в 6 групп. При этом нам не важно, в какие именно цвета раскрашен кубик, лишь бы они были различными. К сожалению, этот метод тоже пришлось «забраковать» из-за вероятностной природы алгоритмов кластеризации: они могут выдать «хороший» результат, но не гарантируют его точность.

Оба подхода имеют свои плюсы и минусы, так что в результате мы использовали нечто среднее:

  1. первым делом мы делаем искусственную калибровку показаний сканера для нормализации значений. Коэффициенты получены экспериментальным путем.
  2. конвертируем полученные RGB значения в HSV
  3. находим квадратики белого цвета, на основе компоненты S (насыщенность)
  4. искусственно увеличиваем насыщенность всех остальных квадратиков
  5. проводим простую кластеризацию оставшихся цветов, сравнивая значения с центральными квадратиками.

Борьба с внешним освещением

Даже с хорошим алгоритмом кластеризации сканирование часто заканчивалось неудачей из-за внешних условий. Алгоритм, откалиброванный в темной комнате, не справлялся с задачей в дневных условиях, и наоборот. Более того, если внешнее освещение было очень ярким (прямой солнечный свет), сканер вообще переставал работать, так как влияние светодиодов становилось едва заметным. Вилберт проделал очень кропотливую работу над изоляцией сканера от внешнего освещения. Пришлось пройти 3 итерации: каждый раз мы думали, что этого будет достаточно, и каждый раз обнаруживалась очередная щель, через которую внешнее освещение попадало на фоторезистор.

Заключение

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

Как бы то ни было, эта машина — всего лишь прототип. Мы не задавались целью побить рекорд скорости, и уж точно мы не реализовали весь потенциал механических частей. Но мы обязательно постараемся сделать это в следующей версии машины, над которой мы уже начали работу. Там для сканирования мы собираемся использовать камеру, а конструкция манипуляторов претерпела значительные изменения. Ну и конечно, если у вас есть какие-либо вопросы, предложения или советы — буду рад услышать их в комментариях.

Adblock
detector