В отличии от реализации реквизита в фильмах Джорджа Лукаса, где использовалась работа аниматоров и компьютерная графика ( мечи в первых фильмах были из самых разных материалов ), современные средства позволяют создавать очень реалистичную имитацию меча без профессиональных навыков проектирования и конструирования электронных устройств. Все, что требуется, как оказалось, - базовые знания схемотехники, программирования на С или С++, запас терпения и аккуратности. Ну и ловкость рук и никакого волшебства :)
P.S. Автор не отвечает за косяки людей, которые руководствуясь данным постом только все сломали. У автора есть на руках рабочий меч и сданный курсовой проект. Автор желает удачи всем тем, кто сейчас собирает что-либо на ардуино или только думает об этом.
*** Кое-что об Arduino Nano ***
В этом конечно же в первую очередь поможет контроллер Arduino NANO.
Платформа ардуино позволяет облегчить жизнь разработчику самоделок, упрощая этапы аппаратной реализации устройства. Начать работать с ней по силам даже абсолютным новичкам, которые никогда не занимались электроникой и последний раз изучали что-то еще в школе на физике.
Arduino NANO в отличии от своего супер популярного брата Arduino UNO обладает гораздо меньшими размерами, но почти не уступает ему в характеристиках. В качестве возможных замен можно использовать arduino micro и arduino mini, однако в случае arduino mini придется поработать с программатором, но это не слишком подходит для новичков, гораздо удобнее пользоваться usb разъемом. Поэтому решено было остановится на arduino nano.
Хотя у arduino nano v.3 уже не популярный разъем mini type b, на сайтах на подобии Aliexpress можно найти аналоги arduino nano с разъемом micro usb, в остальном по характеристикам они ничем не отличаются и стоят гораздо дешевле. Так что если у вас есть время подождать, то можете заказать несколько таких штук.
*** Схема меча ***
Для разработки схемы устройства, по которой позднее оно будет собрано, использовалась программа Fritzing. Главное ее преимущество в том, что принципиальная схема устройства генерируется автоматически по схеме устройства , собранной на плате беспаечной макетной плате, или breadbord.
Создаем схему меча на монтажной плате и дублируем ее в Fritzing.
Так как Fritzing и имеет очень большую библиотеку встроенных и огромное количество пользовательских элементов, однако на данный момент не покрывает все необходимые, в представленной схеме усилитель PAM8302a заменен на усилитель на базе PAM8403, который позволяет подключить 2 динамика и не имеет входа отключения SD. В данном случае, с небольшими изменения по имеющейся комплектации, принципиальная схема устройства выглядит так:
Световому мечу понадобится:
Датчик акселерометр-гироскоп MPU6050 - для распознавания взмахов и ударов
Светодиодная лента ws2811 на 30 или 60 диодов, от количества диодов зависит итоговая яркость меча.
Динамик на 1,5 Вт и 8 Ом и полярный конденсатор на 47мкФ ( который будет использоваться как фильтр высоких частот, а также снижать нагрев небольшого динамика ) или 3 Вт и 4 Ом, диаметром не более 40 мм.
Arduino Nano на базе Atmega328p.
XM1584 понижающий DC-DC преобразователь.
Стерео аудио усилитель 2х3W D-класса на базе PAM8403
Макетная плата для пайки 3*7 см
Кнопка питания на 12 В, обычная кнопка на 12 В
Слот для micro sd, работающий по протоколу SPI
3 аккумуляторные батареи 18650 с защитой или с контроллером питания ( схему подключения можно будет посмотреть далее).
Разъем питания и зарядки, а также сам блок питания на 12 В.
Трубка ПВХ для создания рукоятки меча, диаметр трубки 40 мм.
Заглушка для ПВХ трубы диаметром 32 мм.
Трубка поликарбонатная или ее аналог, длиной от 50 до 80 см.
Небольшой светодиод любого цвета, который вам по душе, примерные характеристики 2 В и 20 мА.
2 резистора на 220 Ом, резистор на 51 кОм и 100 кОм.
3 шлейфа с разъемами на 3 пина.
Монтажные провода для пайки платы и аккумуляторов (лучше с изоляцией из фторопласта), термоусадки подходящего для проводов и контактов кнопок диаметра.
Акриловая эмаль и/или аэрозольная краска желаемого цвета.
Всякая всячина для декорирования по вашему желанию ( у меня был черный коврик для мышки и пластиковая крышка)
Разберем каждый элемент по порядку.
Естественно к Vin входу arduino Nano подключается + цепи батарей, а к Gnd соответственно -.
Для подключения датчика акселерометра- гироскопа необходимо подключить соответствующие выходы элемента к входам ардуино:
Vcc к 3v3
Gnd к A1
Sda к A4
Scl к A6
Таким образом, контроллер будет показания о положении и угловом ускорении устройства.
Эти показания будут обрабатываться каждые 300мс и в соответствии с ними будет вызываться проигрывание звука взмаха и удара различной силы. То, как это происходит я опишу далее в пункте о прошивке устройства.
! В моем случае, датчик был установлен прямо на плату, поэтому пороговые значения для ускорений вышли довольно маленькими из-за чего иногда, но случаются ложные срабатывания меча. Рекомендую установить датчик также через шлейф и подключить его к верхней части трубки, чтобы этой проблемы постараться избежать. Ниже приложу картинку внешнего вида датчика MPU6050. !
Чтобы подключить модуль sd карты подключаем пины модуля к приведенным ниже входам arduino:
Gnd к A0
Vcc к 3v3
Cs к D8
Mosi к D11
Sck к D13
Miso к D12
Хочу предупредить, что модули для подключения Sd и MicroSd карты существуют различные и подключение их к плате ардуино может отличаться. Бывают и просто разъемы для sd карт, не имеющие на плате ничего, такие модули не подойдут для прямого подключения к ардуино.
Также, чтобы использовать карту необходима, чтобы она была отформатирована в FAT16 или FAT32, а также была менее 4 ГБ.
Ленту ws2811 без защиты от влаги можно увидеть ниже.
Для подключения ленты необходимо соединить следующие пины:
Din с D4 через гасящий резистор на 220 Ом
Gnd к землей батарей
+12 к питанию батарей
Понижайка подключается к питанию и земле батарей, усилитель подключается к выходам понижайки, а его информационный вход к D9.
Контрольная кнопка для переключения цветов меча, диод и резистор на 220 Ом подключаются последовательно к входам D4 и D3, как показано на схеме.
К выходам усилителя подключается динамик через конденсатор ( конденсатор подключается + к + усилителя), если он на 1,5 Вт и 8 Ом или напрямую, если она на 3 Вт и 4 или 8 Ом.
Лучше всего использовать батареи с защитой ( облегчить себе жизнь ), в зависимости от размера их можно разместить три вместе или пару и 1 отдельно. Если же вы приобретете батареи с защитой в виде контроллера, то в зависимости от размера их можно установить как они есть, либо подключить 1 батарею отдельно. Важно! Если будете подключать батареи при помощи проводов, то лучше всего скрутить их между собой. В зависимости от качества ваших проводов может случиться такое, что выходное напряжение будет ниже, чем необходимо, потому что на проводах, подключенных к питанию могут происходить наводки ( вики - наводки - "возникновение электрического потенциала, тока от внешнего воздействия электромагнитных полей" )
Ниже приложу фото подключения батарей к контроллеру питания.
Как можно заметить, к А6 пину контроллера подводится питание через делитель напряжения ( резистор на 51 кОм подключен к земле и А6, а резистор на 100кОм подключен к А6 и питанию). Таким образом максимальное питание, поступающее на А6 пин равняется 12 В / 3 = 4В. Назначение его в контроле уровня заряда батареи. Про проверку уровня заряда расскажу подробнее в пункте о прошивке. В принципе не обязательно придерживаться именно этих величин резисторов, важно лишь, чтобы сопротивления резисторов были высокими ( более 10кОм).
*** Пайка на плате ***
Наибольшее затруднение конечно же вызывает пайка платы. Для того, чтобы это было немного проще рекомендую использовать хорошие теплостойкие монтажные провода. Чтобы максимально компактно уместить все устройства на плате пришлось кончено немного потрудится с выбором их расположения. Конечно, можно и не утруждать себя так и установить все устройства в несколько уровней на одной стороне платы. Но легких путей я не ищу.
Кроме того, рекомендую подключать ленту, динамик и кнопку через разъемы, так соединения периферийных элементов, которые не находятся непосредственно на плате и подключаются к контроллеру через провода, будет гораздо надежнее.
Так что ниже прилагаю часть фото моей пайки платы.
*** Прошивка Firmware ***
Теперь пару слов о прошивке для контроллера.
Как уже было сказано ранее, для прошивки ардуино можно использовать язык С++ и создавать классы для работы с различными устройствами ( например, класс Sound - для работы со звуком, класс Sensor - для работы с датчиком и т.д). Главными функция являются setup и loop.
Setup - функция, которая выполняется 1 раз во время запуска устройства. В ней необходимо проинициализировать все глобальные объекты и переменные, установить настройки для библиотек и т.д.
Loop - тело бесконечного цикла, который будет выполняться во время работы меча. Основными функциями, которые исполняются в этом цикле будут ( в последовательном порядке исполнения):
lightEffect() - отображение световых эффектов
checkSensorState() - проверка показаний с датчиков
on_off() - анимация изменение состояния меча и сохранение нового состояния
buttonOp() - исполнение операций по нажатию на кнопку
blow() - анимация и звук удара
swing() - анимация и звук взмаха
! Коротко о данной последовательности. Можно незначительно поменять ее, но важно, чтобы проверка и исполнение анимации взмаха происходили после прохождения функции удара, т.к. удар имеет больший приоритет перед взмахом. Проверка показаний с датчиков естественно не должна быть между функциями blow и swing по понятным причинам. Проверку показаний с датчиков также необходимо производить до исполнения этих функций. !
Нажатиями на контрольную кнопку не только можно включать или выключать меч, также можно изменять цвет меча или в перпективе - фоновые звуки меча.
Для работы со светодиодной лентой я использую библиотеку FastLED. В качестве краткого совета хочу сказать о том, что во время установки и настройки работы библиотеки, в качестве количества LED необходимо указывать не количество непосредственно светодиодов, а количество микросхем, управляющих их работой. Например для 2х метров ленты ws2811 на 30 диодов/метр их будет 20.
В прошивке это будет выглядеть так
FastLED.addLeds<WS2811, LED_PIN, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ),
где NUM_LEDS - количество микросхем .
Также используются библиотеки MPU6050, Wire для работы с датчиком акселерометра-гироскопа, TMRpcm и SD для работы со звуком.
А сейчас наконец расскажу про проверку уровня заряда.
Для того, чтобы удостовериться, что батареи еще имеют заряд достаточный для работы ( условно можно считать, что это уровень заряда более 10 % или около 3,5 В для батарей 18650), необходимо получить значения напряжения в цепи питания. Т.к. значения напряжения в различные промежутки времени могут колебаться, необходимо последовательно считать величину напряжения n раз. Чем больше n, тем выше точность. Но чтобы не тратить на проверку уровня заряда много времени можно остановиться на n равным от 5 до 10. Значения, которые приходят на пин A6, подключенный к цепи питания через делитель напряжения мы и будем считывать.
Код для расчета уровня заряда приведу ниже:
byte voltage() {
float volts = 0;
float k = 5;
for (int i = 0; i < 5; i++)
{
volts += ((float)analogRead(VOLT_PIN)) * k / 1024 * ((R1 + R2) / R2);
//получаем сумму 5 последовательных измерений уровня напряжения в цепи питания
}
int measure = 100 * (volts / (3*5)) ;
//получаем значение заряда для одной батареи, а также умножаем его на 100, для того, чтобы работать с целыми числами вместо цифр с плавающей запятой с 2 цифрами после запятой
if (measure > 380) //полный заряд
return map(measure, 420, 380, 100, 80);
else if ((measure <= 380) && (measure > 375) )
return map(measure, 380, 375, 80, 50);
else if ((measure <= 375) && (measure > 360)
return map(measure, 375, 360, 50, 25);
else if ((measure <= 360) && (measure > 340) )
//уровень заряда, когда уже нужна зарядка
return map(measure, 360, 340, 25, 8);
else //полностью разряжен, до такого лучше не доводить
return map(measure, 340, 260, 8, 0);
}
Таким образом, по полученному проценту уровня заряда можно ограничивать возможность включения устройства или делать индикацию при помощи мигания диодом на контрольной кнопке. Ниже, для интересующихся, добавляю фото графика разряда батарей 18650 при помощи которых определялись значения measure.
*** Результаты ***
Наконец последнее, но самое главное и интересное. Фото сборки корпуса и результатов)
Спасибо всем, кто дошел до этого места, а особенно тем, кто даже дочитал мой "кратенький" обзор-DIY-самоделку светового меча.