Всем привет! Мне с детства нравится вселенная Звездных Войн. Когда мне было 7 лет я столько раз пересматривал эпизоды 4-6, что мог в мельчайших подробностях пересказать их содержимое.
Бесспорно самые яркие впечатления от фильмов – битвы на световых мечах. Два года назад я наткнулся в интернете на краткую статью о выборе реплики светового меча в подарок, заинтересовался и изучил эту тему в подробностях.
В конце года выходит 8 эпизод, 4 Мая не за горами и в предверии международного дня Звездных Войн я решил написать эту статью.
Под катом я поделюсь информацией о производителях световых мечей и расскажу о создании бюджетного меча со звуком на базе Arduino.
Сейчас в интернете существует много коммерческих производителей реплик световых мечей, самые достойные внимания на мой взгляд:
Genesis Custom Sabers — Очень качественные реплики на заказ, цена за элитный кастомный меч со звуком варьируется в районе 1500-3000 USD.
Saber Forge – большой выбор, цены более демократичные, но и реплики не столь аутентичны как в Genesis CS. Цена на меч со звуком около 300 USD.
Ultrasabers – один из самых гуманных магазинов в отношении цен. Меч с базовым звуком стоит около 160 USD. Можно заказывать отдельные составные части для своего проекта.
The Custom Saber Shop – сайт с магазином и конструктором для сборки своего меча.
Есть и другие производители реплик, например Makoto Tsai, который делает самые яркие световые мечи на базе самодельных светодиодных лент.
Но что делать если вам не хочется тратить много денег на покупку реплики, а световой меч очень хочется? Выход один – накопить 5,000 рублей и сделать меч самому.
На момент начала своего проекта опыта программирования у меня практически небыло, познания в электронике полностью отсутствовали. Возможно я сделал что-то не лучшим образом, но продолжаю учиться и буду рад вашим советам.
В описании процесса создания меча я постараюсь описать все основные сложности.
Итак, приступим. Вот список всего что я использовал:
- Arduino Pro micro 5v ~250 рублей на Ali
- Звуковой модуль WT588D-U ~250 рублей на Ali
- Step-up 3-5В ~100 рублей на Ali
- Динамик O28мм, 8Ом, 2Вт ~40 рублей на Ali
- Акселерометр ADXL335 ~200 рублей на Ali
- N-MOSFET IRF530N x2 ~40 рублей на Амперке
- Светодиод Luxeon rebel 3Вт ~70 рублей на Ali
- Линза для светодиода 8° ~50 рублей на Ali
- Аккумулятор CR123A х2 3.7В ~400 рублей на Ali
- Батарейка Крона 9в для питания Arduino
- Держатель для аккумулятора ~15 рублей на Ali
- Антивандальная кнопка ~100 рублей на Ali
- Тумблер ~50 рублей на Ali
- Белая поликарбонатовая трубка 1” ~800 рублей в Москве (магазинов много, они есть в гугле)
- Труба ПВХ для изготовления рукояти
Вам так же понадобятся провода, винт для фиксации поликарбонатовой трубы в рукоятке и колпачок для поликарбонатовой трубки с отражателем.
Колпачок с отражателем я заказывал в Custom saber shop от стоит там 7 долларов, доставка для малогабаритных товаров стоит 14 долларов.
Еще нужно будет где-то раздобыть звуки для меча, обычно это набор из звуков включения/выключения, шума работы (hum), звуки взмахов (swing), звуки столкновений (clash).
Я покупал набор звуков на сайте Saberfont за 7 долларов, но я уверен что можно найти бесплатные звуки.
Итого по компонентам выходит около 5,000 рублей если покупать звуки, если нет, то в районе 4,000.
Существует два основных вида подсветки «лезвия» — один мощный светодиод у основания поликарбонатовой трубки, свет которого отражается колпачком на конце трубки и второй тип — самодельная сегментированая светодиодная лента. Сегменты нужны для плавного включения меча, как в фильмах.
К примеру, Makoto в своих самых ярких мечах использует несколько сегментированных лент.
Я рекомендую использовать для первого билда один мощный светодиод, это гораздо проще и достаточно ярко.
Хочу сразу сказать, что мечи на видео выглядят ярче чем в жизни, т.к. матрица камеры накапливает свет в отличие от наших глаз. Не ждите что ваш меч будет светится как в фильмах.
Предлагаю начать сборку прототипа с настройки звука.
Самое сложное в проекте было разобраться со звуком, модуль WT588D в моем случае оказался идеальным вариантом, т.к. он обеспечивает непрерывное воспроизведение звуковых файлов, для него не требуется флешка.
Перед загрузки файлов на WT, мне пришлось их немного отредактировать, для этого можно использовать бесплатную программу Audacity.
Нужно по очереди открыть каждый файл, выделить область со звуком (у меня в конце каждого файла было по несколько секунд тишины), в левом нижнем углу экрана нужно задать частоту от 16000 до 22000 Khz. Если частота более 22000, WT не даст загрузить файл. Далее Export selected – 16 bit.
Для загрузки файтлов на WT588D, вам понадобится программа для загрузки звуков от производителя модуля — Waytronic (работает только под Windows, я запускал на MAC через BootCamp).
Нужно запустить ПО и выбрать в настройках English. В WT588D существуют несколько режимов работы, я выбрал One-line mode, т.к. он требует минимума пайки, модуль обменивается данными с Arduino через один пин.
Рабочее поле разделено на 3 части, слева – список загруженных на модуль файлов, по середине – список плейлистов, справа – список файлов в плейлисте.
Для загрузки файлов нужно щелкнуть правой кнопкой мыши по списку загруженных файлов и выбрать Load – найти и выбрать обработанный в Audacity звуковой файл. Повторить для всех файлов.
Далее нужно составить плейлисты, добавив много повторяющихся звуков шума работы после звука включения и звуков взмахов/столкновений. Это нужно для того, чтобы не писать код для переключения на шум после включения/взмахов.
Номера плейлистов мы будем вызывать далее в нашем скетче. После загрузки звуков и подготовки плейлистов нужно подключить питание к WT, подключить динамик, и соединить Data пин WT c Arduino. Так же подключить к Arduino кнопку для включения/выключения света/звука и светодиод через MOSFET.
Вот моя схема подключения:
Я питаю WT от отдельного аккумулятора 3.7В через MOSFET, используя step-up до 5.5в, в таком случае получаю максимальную громкость на выходе.
Для начала нужно прописать все что будет использовано в скетче:
#define WT588D_SDA 8 //прописываем номер пина к которому подключен WT588D
//прописываем пины для акселерометра и переменные для хранения значений времени
const int xpin = A0;
const int ypin = A1;
const int zpin = A2;
int oldtime;
int newtime;
int ADXL = 3;
int BUTTON_PIN = 7; //кнопка включения и выключения меча
int LED_PIN = 9; //MOSFET светодиода
int WT_MOSFET = 6; //MOSFET WT588D
int i = 0;
byte file_count = 1;
bool saberon;
bool swingsound;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
pinMode(ADXL, OUTPUT);
pinMode(WT_MOSFET, OUTPUT);
pinMode(WT588D_SDA, OUTPUT);
digitalWrite(ADXL, LOW);
digitalWrite(LED_PIN, LOW);
digitalWrite(WT588D_SDA, HIGH);
digitalWrite(WT_MOSFET, LOW);
saberon = false;
swingsound = false;
oldtime = analogRead(xpin) + analogRead(ypin) + analogRead(zpin); //первое считывание показания акселерометра
}
Для работы WT, в скетче нужно декларировать комманду WT_Send_Command(*), для этого добавьте в конец скетча следующий код:
void WT588D_Send_Command(byte addr) {
digitalWrite(WT588D_SDA, LOW);
delay(100);
for (int i = 0; i < 9; i++) {
digitalWrite(WT588D_SDA, HIGH);
if (bitRead(addr, i)) {
delayMicroseconds(600);
digitalWrite(WT588D_SDA, LOW);
delayMicroseconds(200);
} else {
delayMicroseconds(200);
digitalWrite(WT588D_SDA, LOW);
delayMicroseconds(600);
}
}
digitalWrite(WT588D_SDA, HIGH);
delay(50);
}
Следующим шагом нужно написать код для того чтобы при нажатии кнопки, включался светодиод и проигрывался плейлист со звуком включения. При нажатии кнопки еще раз, светодиод выключался и играл плейлист выключения.
Если опыта программирования у вас нет, для лучшего понимания кода, рекоммендую ознакомиться со следующими материалами:
• Arduino If tutorial
• Arduino Boolean tutorial
• Arduino Button tutorial
Вот мой код для распознавания состояния кнопки и включения/выключения эффектов:
if (digitalRead(BUTTON_PIN) == LOW) {
if (saberon) {
WT588D_Send_Command(*номер плейлиста со звуком выключения);
delay(700);
saberon = false;
{
analogWrite(LED_PIN, LOW);
digitalWrite(WT_MOSFET, LOW);
delay(1);
}
} else {
digitalWrite(WT_MOSFET, HIGH);
delay(100);
WT588D_Send_Command(*номер плейлиста со звуком включения);
{
analogWrite(LED_PIN, HIGH);
delay(1);
}
saberon = true;
}
}
Если все сделано правильно, вы должны при нажатии кнопки слышать звук включения и шума, светодиод должен включаться. При повторном нажатии, звук выключения и светодиод должен гаснуть.
Основная часть скетча готова, теперь подключим акселерометр и заставим WT воспроизводить звуки взмахов.
ADXL335 достаточно простой в использовании, для него не нужно подключать какие-либо библиотеки. Вот схема подключения:
Для работы акселероментра мы будем делать два замера и на основе сравнения показаний проигрывать звук взмаха.
Акселерометр я рекоммендую размещать как можно ближе к одному из концов рукоятки.
newtime = analogRead(xpin) + analogRead(ypin) + analogRead(zpin);
delay (100);
if (newtime - oldtime >= 75 || newtime - oldtime <= -75)
{
if (swingsound)
{
swingsound = false;
delay (50);
}
else
{
swingsound = true;
WT588D_Send_Command(*номер плейлиста со звуком взмаха);
delay (150);
}
}
Serial.print(oldtime);
Serial.print("\t");
Serial.print(newtime);
Serial.print("\t");
Serial.print(newtime - oldtime);
Serial.println();
oldtime = newtime;
Все, прототип готов. Пора создать рукоять и поместить в нее всю начинку.
Рукоятку я делал из ПВХ трубы, вставка для лезвия диаметром: 28мм.
С рукояткой у меня возникли проблемы, в итоге первая версия оказалась слишком маленькой, сейчас делаю новую.
В изготовлении рукояти из ПВХ вы ограничены только вашей фантазией, могу лишь дать один совет — перед покраской обработайте поверхность трубы мелкой наждачкой, иначе краска будет плохо держаться.
Вот первый вариант моей рукояти, в крышке я высверлил отверстия и разместил динамик, а лезвие фиксируется в трубе четырьмя винтами:
Я не включал в свой меч эффект столкновений (clash), возможно наверстаю в следующий раз. Но если вы захотите включить clash, вам понадобится датчик вибрации или настройка акселерометра под распознавание коротких ускорений. Если у кого-то получится настроить акселерометр, не поленитесь поделиться кодом, я включу его в статью с упоминанием вас как автора.
Вот небольшой тест меча ночью на улице:
Я уверен, что Geektimes читает большое количество очень талантливых и умелых людей, прошу вас, поделитесь своим мнением, дайте совет. Возможно что благодаря коллаборации мы сможем еще больше упростить/оптимизировать процесс.
Обязательно делитесь своими результатами, очень интересно посмотреть что получится у вас!
Всем спасибо за внимание! И да пребудет с вами сила!
Комментарии (29)
Uneverse
28.03.2017 13:54+2Лучше светодиодная полоска, вель иначе в начале меч ярче и в конце тусклее.
gerahmurov
28.03.2017 21:24При использовании ленты есть опасность от ударов в поединках, что если в середине клинка в полоске что-то вырубится, то будет некрасиво.
Зато полоской можно ещё добиться красивого эффекта включения\выключения, как у официальных мечей серии Force FX.
jenga67
28.03.2017 14:00Спасибо за комментарии!
На самом деле добавить вибромотор было бы круто, по крайней мере попробовать можно.
Еще у меня в списке;
— несколько наборов звуков и возможность их смены
— rgb/rgbw светодиод с возможностью смены цвета при удержании кнопки
— эффект пульсирования «лезвия».
antstar
28.03.2017 15:22И здорово было-бы соответствие звука включения/выключения включению лезвия, а еще датчик движения, чтобы при взмахе «нативный» звук статики был
vyacheslavteplyakov
28.03.2017 15:25+2Гляньте в сторону индивидуально адресуемых WS8212b и их аналогов. Есть в виде ленты и отдельных диодов и гирлянды, много в общем. Там можно разгуляться по полной. И зажигать и гасить плавно и цвета менять и прочие не каноничные безумия добавить, если использовать библиотеки типа FastLED. Да те же всполохи при ударах можно сделать.
gerahmurov
28.03.2017 17:21+1Хочу сразу сказать, что мечи на видео выглядят ярче чем в жизни, т.к. матрица камеры накапливает свет в отличие от наших глаз. Не ждите что ваш меч будет светится как в фильмах.
Тут как владелец меча SaberForge хочу заметить, что днём его практически не видно даже в пасмурную погоду, а вечером в квартире его достаточно, чтобы всю комнату покрыть цветным светом.
А ещё не так давно SaberForge начал продавать мечи по деталям, чтобы самому собирать. Не совсем DYI, конечно.
https://saberforge.com/collections/emittersjenga67
28.03.2017 18:23А вы сами меч собирали или готовый взяли? Какая у вас модель?
Как у SaberForge с громкостью, сравнима с максимальной громкостью смартфона?
Подскажите еще пожалуйста SaberForge питается одним аккумулятором?gerahmurov
28.03.2017 19:54+1Я когда-то про выбор меча статью писал про муки выбора "Как я световую саблю покупал". Там в комментах есть фотки и видео.
У меня SaberForge старый меч, когда у них ещё деталек не было, Epoch. Сейчас модель видоизменили, вероятно, потому что у моей очень острые края были, я руки резал регулярно, пока с напильников не посидел.
Громкость мне показалась нормальной, достаточной, но, конечно, совсем не как будильник на телефоне. Проснуться не получится, наверное, а вот заснуть не даст. При драке на двух мечах звуки удара пластика слышнее, чем звуки меча. Ещё гироскоп временами запаздывает, или наоборот чрезмерно реагирует, но чувствительность настраивается. Как и режим свечения (сплошное, мерцание, быстрое мерцание).
Мой меч питается одним аккумулятором, но насколько я помню, там были опции при заказе — подешевле на батарейках, подороже на аккумуляторе встроенном.
P.S. А вот благодаря автору узнал про Genesis Custom Sabers. Спасибо!
jenga67
28.03.2017 20:10+2Я вашей статьей когда-то давно вдохновился на создание своего меча, спасибо!
fotofan
28.03.2017 18:35Если добавить гироскоп, меч будет сопротивляться взмаху, как большой и тяжёлый
w1nterfell
28.03.2017 19:13+1Одно из основных отличий светового меча от обычного — весь вес сосредоточен в рукояти, так что он не должен "сопротивляться взмаху, как большой и тяжелый"
kzerot
29.03.2017 12:33Насколько прочный получился, кстати?
У меня дома целый арсенал лежит (уже давно без дела, и в основном ultrasabers), раньше баловались этим делом.
И да, по свету — голубые мечи от ludosport еще как-то светятся в пасмурную погоду, остальные — только ближе к сумеркам или при домашнем освещении.jenga67
29.03.2017 16:03Поликарбонат очень прочный, так что само «лезвие» в полной безопасности.
Электронику я вложил в паралон, так что они тоже должны выжить при ударах.
Про яркость согласен, город засыпает, джедаи и ситхи просыпаются.
Nuwen
А если вместо обычного динамика или вместе с ним, использовать какой-нибудь вибромотор или несколько их маленьких, в лезвии? Чтобы и тактильные ощущения были, и звуковые?
MAXInator
А какие от взмаха мечом должны быть тактильные ощущения? Что вибромотором имитировать, удар по стиральной доске?
Nuwen
Ну, такое упругое гудение, как и звук же. Как будто длинной пластиковой трубкой машешь по воздуху, а она гудит в руках от сопротивления.
Вместо вибромоторчиков можно какой-нибудь электромагнитный вибратор установить, чтобы лучше передавалось именно гудение. Как неожиданный побочный эффект всего этого, это ещё можно будет использовать не по назначению.
DrPass
Пока этой штукой нельзя будет хотя бы отрубить чью-то голову (я не говорю уже об отражении выстрелов бластера или перерубании стальных балок), о реалистичных тактильных ощущениях говорить преждевременно.
LoadRunner