Кубик рубика за 0.887 секунды с помощью ардуино arduino+

ARDUINO LED CUBE 8x8x8

30.10.18 CUBE_Gyver_v2: добавлена новая версия для нового видео

  • Большой светодиодный куб на Arduino и сдвиговых регистрах. 512 светодиодов, 10 режимов анимации (можете дописать свои!).
  • Куб имеет две кнопки, обеспечивающие переключение режимов вперёд/назад, удержание кнопки увеличивает и уменьшает скорость текущей анимации.
  • Проект собран на печатной плате, что позволило уменьшить трудозатраты на соединение компонентов, а также уместить всё в компактный корпус!
  • Куб использует динамическую индикацию (послойная отрисовка) и потребляет всего около 0.5 А, когда светятся все 512 светодиодов.
  • Долгий и интересный процесс пайки самого куба показан на видео ниже. Использованы длинноногие светодиоды, куб спаян только их ногами. Края соединены и усилены железной проволокой (10 линий).
  • Добавлены игры: 3D змейка и туннель

ПОДРОБНОЕ ВИДЕО ПО ПРОЕКТУ

СХЕМЫ, ПЕЧАТНЫЕ ПЛАТЫ

Схема 1

Джойстик и кнопка

МАТЕРИАЛЫ И КОМПОНЕНТЫ

Ссылки на магазины, с которых я закупаюсь уже не один год

Вам скорее всего пригодится:

  • Arduino NANO 328p – искать
    • https://ali.ski/tI7blh
    • https://ali.ski/O4yTxb
    • https://ali.ski/6_rFIS
    • https://ali.ski/gb92E-
    • Giant4 (Россия)
  • Светодиоды с длинными ногами 100 штук
    • Синие https://ali.ski/EwPQQK
    • Розовые https://ali.ski/UKge78
    • Красные https://ali.ski/rseXA
    • Зелёные https://ali.ski/suEgC
    • Жёлтые https://ali.ski/1UQZP
  • Светодиоды по 10 штук
    • Синие https://ali.ski/4J3IEE
    • Розовые https://ali.ski/WHmG7
    • Красные https://ali.ski/bWAD1r
    • Жёлтые https://ali.ski/NfCbf
    • Зелёные https://ali.ski/ZmnvJ
  • Сдвиговые регистры 74hc595n https://ali.ski/DnwaZ
  • Транзисторы bd241c https://ali.ski/H9eCm
  • Резисторы https://ali.ski/cgfwE
  • Транзисторы TIP41C (на всякий случай) https://ali.ski/I9hH_
  • Макетка 8 на 12 см https://ali.ski/e8SNm
  • Гребёнка https://ali.ski/4ujVt
  • Кнопки и стойки ищите в любых магазинах для радиолюбителей, так как у китайцев можно купить только мешок 100 штук!

ПРОШИВКА И НАСТРОЙКА

Содержимое папок в архиве

  • libraries – библиотеки проекта. Заменить имеющиеся версии
  • CUBE_Gyver – прошивка для Arduino, файл в папке открыть в Arduino IDE (инструкция)
  • schemes – схемы и печатки

Установить библиотеки (папка Libraries) в
C:Program Files (x86)Arduinolibraries (Windows x64)
C:Program FilesArduinolibraries (Windows x86)

Функция для вывода времени работы Arduino

Данная функция выводит в последовательный порт время работы платы Arduino после включения или перезагрузки в формате ЧАСЫ:МИНУТЫ:СЕКУНДЫ 00:00:00

Что такое функция millis() ?

Время работы Arduino ничем не ограничено. Этот микроконтроллер может быть включен постоянно.
Для подсчета времени с момента включения или c момента перезагрузки платы существует функция millis() .
Arduino считает количество миллисекунд, которое прошло с момента запуска платы.
Их количество можно узнать с помощью функции millis().

Например, пусть у нас есть переменная time. В случае использования строки кода time=millis(); , переменная time будет содержать некоторое количество миллисекунд.
В одной секунде содержится 1000 миллисекунд, поэтому время измеряемое в миллисекундах неудобно для восприятия человеком, но вполне понятно машинам, роботам и микросхемам.
После 50 суток работы Arduino встроенный счетчик миллисекунд обнуляется и начинает отсчет снова.

Ниже приводится код функции TimePrint, которая переводит миллисекунды в понятный человеку формат.

Данная функция выводит в последовательный порт время работы платы Arduino после включения или перезагрузки в формате часы:минуты:секунды ( 00:00:00 ).
Вызывается в вашем коде, как TimePrint();
Использует встроенную функцию millis(). Обратите внимание, что счетчик функции millis() сбрасывается после 50 дней работы.
Полезна для отладки и тестирования различных датчиков и сенсоров.

Логика расчета секунд, минут и часов при пересчете из миллисекунд.
Как пересчитывать секунды, минуты, часы и дни в Arduino.

Чтобы узнать общее количество секунд, значение функции millis() необходимо разделить на 1000.
Чтобы количество секунд перевести в минуты, делим их значение на 60. Остаток от целочисленного деления – точные секунды ( от 0 до 59 ).
Чтобы количество минут перевести в часы, делим их значение на 60. Остаток от целочисленного деления – точные минуты ( от 0 до 59 ).
Таким образом получаем значение времени работы платы Arduino в обычном понятном формате.

В данной программе расчет идет несколько в другом порядке.

Переводим в секунды, теперь их значение содержит переменная time.

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

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

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

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

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

Любой робот состоит из двух основных систем: механической и электронной. Для механической составляющей я рассматривал конструктор 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», чтобы читать все материалы на сайте

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

LED Cube 8x8x8 на Arduino с RTC

Введение

LED Кубы появились уже давно, есть множество примеров их изготовления. На просторах интернета можно найти различные, начиная от 3х3х3 одноцветных, заканчивая большими объемными 3D LED экранами. Наиболее оптимальный размер с которого можно начать освоение их построения и программирования для начинающих это 8х8х8 (512 светодиодов), кубы меньших величин, не столь явно показывают световые эффекты, а кубы начиная уже с 16х16х16, довольно сложны в изготовлении начинающим.

В этой статье я хочу поведать создание LED Куба, размером 8х8х8, с использованием в качестве управляющего микроконтроллера, платы Arduino Pro Mini. Данная модель куба, может работать в двух режимах: световых эффектов и режим часов. Это стало возможным, благодаря интеграции в схему модуля RTC.

Принцип действия

Управление световым кубом из 512 светодиодов осуществляется посредством MOSFET-транзисторов, 64 транзистора отвечают за подачу положительного напряжения на столбцы, и 8 транзисторов за подачу отрицательного напряжения на слои. Ток (соответственно яркость) светодиода регулируется по средством 64 резисторов (R011-R641) стоящих после выхода транзисторов на столбцах. Открытие и закрытие транзисторов осуществляется при помощи сдвиговых регистров, которые в свою очередь управляются по двум линиям (отдельно столбцы и слои) платой Arduino.

Вся конструкция куба разделена на части:

  • Схема №1 или главная плата, на которой установлен сам микроконтроллер (плата Arduino), RTC модуль, SD модуль, сдвиговый регистр и MOSFET-транзисторов, отвечающие за слои;
  • Схема №2 или плата контактов, которая отвечает за крепления самого куба и открытия подачи положительного напряжения на столбцы;
  • Схема №3 или пульт, отвечает за кнопочные команды устройству;
  • Блок питания 5V (15A в данной конструкции применён такой, но поддержка такого тока не обязательна, всё зависит от тока светодиодов, смотрите ниже расчёт);
  • Сам Куб 8х8х8 из 512 светодиодов.

Блок питания подбирается из учёта питания светодиодов, так как одновременно возможно свечение только одного слоя, то есть это 64 светодиода. Если принять ток одного светодиода равным 30мА, то получаем: 30мА*64=1920мА, то есть будет достаточно 3А блока питания, для питания всей конструкции.

Схемотехника

И так, главная плата, представляет собой в основном коммутационный характер, сопряжение всех модулей и управление слоями. Для наглядности, разделим на две части: коммутационная и управление слоями.

Схема №1, главная управляющая плата:

Коммутационная часть, осуществляет ввод основного питания на устройство (J6). Для прошивки платы Arduino Pro Mini, служит модуль USB to TTL, который подключается через J6-1, контакты J6-J1 и J6-J2, служат для подключения питания на плату Arduino от модуля (данное питание необходимо для прошивки, если не используется блок питания). Разъем J4, служит для подключения SD карты, а J5 для подключения модуля RTC. Плата Arduino Pro Mini, подключается через, группу разъемов J1 (1-1, 1-3, 1-4). Группы разъемов J2 и J3, служат для подключения сигнальных линий для управления платами контроля питания столбцов (Схема 2), и подачи питания. Группа разъемов J7, служит для подключения клавиатуры (Схема 3). И наконец группа J8, отвечает за подключение второй части Схемы 1 (управление слоями):

Вторая часть Схемы 1, предельно проста: сдвиговый регистр, дает команды MOSFET-транзисторам ( 1-открыть транзистор, 0-закрыть), сдвиговый регистр, получает через линию данных команды от первой части Схемы 1.

Рассмотрим, Схему 2, она разделена на две одинаковые части, для контроля по 32 столбца каждая. Так как они абсолютно идентичны, рассмотрим только одну:

Так же как и в предыдущей схеме, сдвиговый регистр даёт команды (которые получает через линию данных от платы Arduino Pro Mini), MOSFET-транзисторам (за исключением теперь, 0-открывает транзистор, а 1-закрывает). Так же тут присутствуют на выходе с транзистора, резисторы по 250 Ом, они служат для контроля тока светодиода, и могут быть заменены на номинал более подходящий для не совсем яркого свечения (в зависимости от используемых светодиодов).

И завершающая, Схема 3, плата кнопок, где всё предельно просто:

Платы Схема 1 и Схема 2:

Проверка каждого слоя перед их спайкой:

Прошивка платы Arduino Pro Mini (sketch)

Скетч занимает более 500 строк, он будет приложен в конце статьи, а здесь постараюсь коротко его описать.

Есть две основные функции управления сдвиговыми регистрами (“column” – заполнение столбцов и “layer_column” – выбор слоя и вызов функции “column”), обе они реализованы через функцию shiftOut. Это самый легкий способ управления регистрами, но возможно не самый быстрый. Следом идет основная функция закрашивания всего куба “cube”, смысл функции заключается в том, что она последовательно и по циклу (цикл получается само собой) закрашивает каждый слой куба. В веду такой реализации происходит мерцание куба, оно ели заметное из-за быстрого микропроцессора.

Существует два режима работы куба: “Демонстрация световых эффектов” и “Отображение времени”. Смена осуществляется при помощи кнопки “Mode”. При первом режиме, происходит последовательное считывание с SD карты данных, далее передача выше указанным функциям. Второй режим реализован гораздо сложнее, так как все данные этого режима вшиты в микропроцессор (этим и объясняется количество строк кода). Если коротко, то данные с RTC модуля считываются и исходя из этого, опять же, выше указанным функциям отправляются соответствующие битовые переменные, для отображения на светодиодах. Так же реализована возможность настройки часов, при помощи кнопок управления, для этого достаточно в режиме часов нажать кнопку “Setup”, далее при помощи кнопки “Change” менять режим (часы, минуты, дни и т.д.) и настраивать при помощи кнопок “Up” и “Down”. В конце нажав на кнопку “Reset”, можно сохранить настройки.

Расположение кнопок, согласно Схемы 3:

Программа создания световых эффектов (C++ Builder 6)

Чтобы создание эффектов сделать упрощенным и функциональным, а так же просмотреть заранее спроецированные эффекты, перед их записью на SD, было решено написать программу на C++, с использованием Open GL.

Исходный код для Borland C++ Builder 6, приложен к статье.

Заключение

Постарался изложить информацию касательно схемы реализации проекта, его электрической части. Программная часть проекта довольно большая и всё можно найти в исходных файлах. Если будут вопросы – пишите, обсудим.

Сам проект задумывался, для небольшой практики, работы с микроконтроллерами, в ходе реализации было выяснено:

  1. Электрическая часть, не представляет сложности в реализации;
  2. Спайка куба, освещена во многих других статьях, по этому я не останавливался на этом, но спаять могу сказать довольно не простое занятие (т.е. больше 1000 точек припоя);
  3. Внедрение RTC модуля, не оправдало мои ожидания, так как показ времени не совсем разборчив, это можно наблюдать на видео, единственное если сделать белый матовый корпус, тогда цифры хорошо отличимы.

Источники:

http://robotday.ru/2014/04/22/%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F-%D0%B4%D0%BB%D1%8F-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0-%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-arduino/

http://xakep.ru/2019/01/29/rubiks-cube/

http://cxem.net/arduino/arduino210.php

http://ru.hexlet.io/blog/posts/kakoy-php-freymvork-vybrat-sravnivaem-symphony-laravel-i-yii2

Ссылка на основную публикацию