Оглавление:

Умная электронная гавайская гитара DIY с Arduino: 14 шагов (с изображениями)
Умная электронная гавайская гитара DIY с Arduino: 14 шагов (с изображениями)

Видео: Умная электронная гавайская гитара DIY с Arduino: 14 шагов (с изображениями)

Видео: Умная электронная гавайская гитара DIY с Arduino: 14 шагов (с изображениями)
Видео: 🔧 Мои китайские инструменты 🛠 Распаковка посылок из Китая ✉️ 2024, Ноябрь
Anonim
DIY умная электронная гавайская гитара с Arduino
DIY умная электронная гавайская гитара с Arduino

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

Для этого необходимо купить комплект укулеле.

Мы собираемся объяснить, как собрать инструмент, и решить различные проблемы, которые могут возникнуть.

Шаг 1: материалы

Материалы
Материалы
Материалы
Материалы

Материалы конструкции:

Монтажный комплект для укелеле своими руками (это может быть другой комплект), состоящий из:

1- Тело.

2 шеи.

3-седло

4-канатная опора

5-мост

6-струнная гайка.

7-Фиксирующее кольцо для головки машины (4 шт.).

8 головок машин (x4).

9-Крепежные винты для головок машины (x8).

10-Крепежные винты для моста машины (x2).

11-Заглушки для винтов крепления перемычки (2 шт.).

12 струн (x4).

Электронные материалы:

  • NANO Arduino.
  • Колесо светодиодов WS2812.
  • Акселерометр BMA220 (опция).
  • Разъем аккумулятора.
  • Батарея 9В.
  • Выключатель.

Другие

  • Лак для дерева.
  • Липучка.
  • Паяльное олово.
  • Защитный пластик для лакировки.
  • Силикон-расплав.

Инструменты:

  • Лазерная гравировка.
  • Наждачная бумага
  • Отвертка звездообразная.
  • Кисть.
  • Пистолет-расплав.
  • Паяльник оловянный.

Шаг 2. Настройте укулеле

Настройте укулеле
Настройте укулеле
Настройте укулеле
Настройте укулеле
Настройте укулеле
Настройте укулеле

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

Картинка, которую мы выбрали, появляется первой.

Прежде всего, мы должны разработать шаблон чертежа для гравировки.

Для этого мы будем использовать программное обеспечение под названием Inkscape, которое мы можем получить по этой ссылке:

Чтобы использовать его, мы должны настроить изображение, которое мы хотим использовать, как на втором изображении. Вы можете посмотреть, что мы повернули исходное изображение, чтобы можно было совместить цикл руки с кругом инструмента. Как мы уже говорили, вы можете разместить любое изображение.

Шаг 3. Векторизация изображения с помощью Inkscape

Векторизация изображения с помощью Inkscape
Векторизация изображения с помощью Inkscape
Векторизация изображения с помощью Inkscape
Векторизация изображения с помощью Inkscape
Векторизация изображения с помощью Inkscape
Векторизация изображения с помощью Inkscape
Векторизация изображения с помощью Inkscape
Векторизация изображения с помощью Inkscape

Мы увидим, как создать векторный файл из растрового изображения (jpg, png, любой растровый формат, который может открывать Inkscape).

Inkscape Inkscape - это редактор векторной графики с открытым исходным кодом, и, как следует из названия, это инструмент, который я буду использовать для векторизации логотипов. Шаги векторизации Эти шаги являются общими для любой векторизации, которую мы можем захотеть сделать.

  1. Откройте изображение в Inkscape
  2. Откройте инструмент Trace Bitmap Tool Path-> Trace Bitmap.
  3. Поэкспериментируйте с параметрами трассировки растрового изображения
  4. Запустите трассировку
  5. Очистите результаты (при необходимости)

Обратите внимание на «игру вокруг». Я не специалист по трассировке, поэтому отношусь к этому инструменту как к черному ящику с ручками и лампочками, которые крутятся и меняются, пока не добьюсь наилучшего результата.

Шаг 4: гравировка логотипа

Image
Image
Гравировка логотипа
Гравировка логотипа
Гравировка логотипа
Гравировка логотипа

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

Для гравировки воспользуемся программой T2Laser. Мы могли получить это программное обеспечение по адресу:

После того, как мы открыли программное обеспечение, мы должны загрузить изображение, которое мы создали на последнем шаге. Затем нажмите кнопку «Управление лазером», и появится элемент управления ЧПУ. На двух фотографиях показан процесс и результат гравировки с помощью нашего лазерного резака.

Шаг 5: шлифовка и лакировка

Шлифовка и лакировка
Шлифовка и лакировка
Шлифовка и лакировка
Шлифовка и лакировка
Шлифовка и лакировка
Шлифовка и лакировка
Шлифовка и лакировка
Шлифовка и лакировка

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

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

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

** МЕРЫ ПРЕДОСТОРОЖНОСТИ: лак является химическим продуктом, поэтому необходимо проводить этот процесс в проветриваемом месте, носить маску, чтобы не вдыхать запахи, и защитные очки.

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

Шаг 6: Оборудование

Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение

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

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

Шаг 7: Программное обеспечение

Программное обеспечение
Программное обеспечение
Программное обеспечение
Программное обеспечение
Программное обеспечение
Программное обеспечение

Чтобы придать особенное украшение нашей гавайской гитаре, мы можем добавить световые эффекты благодаря колесу светодиодов. Мы собираемся использовать WS2812, но вы можете использовать любой другой, следуя инструкциям в таблице данных. Мы также будем использовать акселерометр (BMA220), который позволяет нам влиять на силу тяжести.

Фактически, у нас будет 4 игры света, включенные в компьютерную библиотеку под названием Adafruit Arduino. Для этого мы должны правильно соединить три компонента: Arduino NANO, WS2812 и BMA220, как показано на первом изображении.

Красные провода предназначены для питания, черный GND и остальные - необходимые соединения для правильной работы. Код, который мы использовали для светового комплекта, прикреплен в файле с именем "play_of_light_v0.ino". Убедитесь, что вы включили необходимые библиотеки для корректной работы программы. Батарея, которую мы добавляем вне схемы, должна иметь минимальное напряжение 9 В, и мы должны убедиться, что она способна выдавать минимальный ток, необходимый для питания всей схемы.

// Переменные contador e interrupciónint counter; // Переменные Ejemplo gravedad #include #include #include #define NUMBER_OF_LEDS_ON_RING 16 #define NEOPIXEL_RING_DATA_PIN 9

байт Версия [3];

int8_t x_data; int8_t y_data; int8_t z_data; байтовый диапазон = 0x00; float divi = 16; float x, y, z; float pi = 3,14159265359; float nx, ny, angle; int led, previousLed; QueueList ledQueue; Adafruit_NeoPixel neoring = Adafruit_NeoPixel (NUMBER_OF_LEDS_ON_RING, NEOPIXEL_RING_DATA_PIN, NEO_GRB + NEO_KHZ800);

// Переменные Luces arcoiris

#include #ifdef _AVR_ #include #endif #define PIN 9 // Параметр 1 = количество пикселей в полосе // Параметр 2 = номер вывода Arduino (большинство из них действительны) // Параметр 3 = флаги типа пикселей, при необходимости сложите вместе: // NEO_KHZ800 800 кГц битовый поток (большинство продуктов NeoPixel со светодиодами WS2812) // NEO_KHZ400 400 кГц (классический 'v1' (не v2) пиксели FLORA, драйверы WS2811) // NEO_GRB пиксели подключены для битового потока GRB (большинство продуктов NeoPixel) / / NEO_RGB Пиксели связаны для битового потока RGB (пиксели FLORA v1, а не v2) // Пиксели NEO_RGBW связаны для битового потока RGBW (продукты NeoPixel RGBW) Adafruit_NeoPixel strip = Adafruit_NeoPixel (16, PIN, NEO_GRB + NEO_KHZ800); // ВАЖНО: чтобы снизить риск выгорания NeoPixel, добавьте конденсатор емкостью 1000 мкФ // к выводам питания пикселя, добавьте резистор 300–500 Ом на ввод данных // первого пикселя и минимизируйте расстояние между Arduino и первым пикселем. Избегайте подключения // в цепи под напряжением … если необходимо, сначала подключите GND.

// Переменные Rueda de colores

// Простой эскиз NeoPixel Ring (c) 2013 Shae Erisson // выпущен под лицензией GPLv3, чтобы соответствовать остальной части библиотеки AdaFruit NeoPixel

#включают

#ifdef _AVR_ #include #endif

// Какой вывод на Arduino подключен к NeoPixels?

// На Брелке или Джемме мы предлагаем изменить это на 1 #define PIN 9

// Сколько NeoPixels подключено к Arduino?

#define ЧИСЛО 16

// Когда мы настраиваем библиотеку NeoPixel, мы сообщаем ей, сколько пикселей и какой вывод использовать для отправки сигналов.

// Обратите внимание, что для более старых полос NeoPixel вам может потребоваться изменить третий параметр - см. Пример // strandtest для получения дополнительной информации о возможных значениях. Adafruit_NeoPixel пикселей = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int delayval = 50; // задержка на 50 мс

// Переменные цвета aleatorios

#include #ifdef _AVR_ #include #endif

#define PIN 9

#define NUM_LEDS 16

#define ЯРКОСТЬ 200

// Полоса Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

byte neopix_gamma = {

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101, 102, 104, 105, 107, 109, 110, 112, 114, 115, 117, 119, 120, 122, 124, 126, 127, 129, 131, 133, 135, 137, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 167, 169, 171, 173, 175, 177, 180, 182, 184, 186, 189, 191, 193, 196, 198, 200, 203, 205, 208, 210, 213, 215, 218, 220, 223, 225, 228, 231, 233, 236, 239, 241, 244, 247, 249, 252, 255 }; /////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////

/ НАСТРОЙКА МЕТОДА

void setup () {// Código: Dirección de la gravedad neoring.begin (); neoring.setBrightness (200); Serial.begin (9600); Wire.begin (); Wire.beginTransmission (0x0A); // адрес акселерометра // настройки диапазона Wire.write (0x22); // регистрируем адрес Wire.write (диапазон); // может быть установлено в "0x00" "0x01" "0x02" "0x03", см. Даташхет в вики // фильтр нижних частот Wire.write (0x20); // регистрируем адрес Wire.write (0x05); // может быть установлено на «0x05» «0x04» …… «0x01» «0x00», см. Даташхет в вики Wire.endTransmission ();

// Codigo; Люс Аркуарис

// Это для Trinket 5V 16MHz, вы можете удалить эти три строки, если не используете Trinket #if defined (_AVR_ATtiny85_) if (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Конец специального кода брелка strip.begin (); strip.show (); // Инициализируем все пиксели в положение "выключено"

// Código Rueda de colores

// Это для Trinket 5V 16MHz, вы можете удалить эти три строки, если не используете Trinket #if defined (_AVR_ATtiny85_) if (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Конец специального кода брелка

pixel.begin (); // Это инициализирует библиотеку NeoPixel.

// Codigo Interrupcion

counter = 1;

// Codigo Colores varios

// Это для Trinket 5V 16MHz, вы можете удалить эти три строки, если не используете Trinket #if defined (_AVR_ATtiny85_) if (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Конец специального кода брелка strip.setBrightness (ЯРКОСТЬ); strip.begin (); strip.show (); // Инициализируем все пиксели как "выключено"}

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/ Bucle Infinito

void loop () {// Случай 1: Juego de luces de la gravedad; if (counter == 1) {for (int i = 0; i 0.0) {if (nx 0.0) angle + = 180; иначе угол + = 360; } // конец иначе if (angle == 360.0) angle = 0.0; led = округлить (угол / (360 / NUMBER_OF_LEDS_ON_RING)); // сделать движение светодиода плавным if (previousLed == led) {// нечего делать} else if (counterClockwiseDistanceBetweenLeds (previousLed, led) <= 8) led = loopize (previousLed + 1); иначе led = расслоение (предыдущий светодиод - 1); ledQueue.push (светодиод); makeLightShow (); previousLed = светодиод; задержка (25); } counter = 2; } // End if counter == 1 // Caso 2: Codigo del juego de luces del arcoiris else if (counter == 2) {for (int j = 0; j <5; j ++) {// Некоторые примеры процедур, показывающих как отобразить в пикселях: colorWipe1 (strip. Color (255, 0, 0), 50); // Красный colorWipe1 (strip. Color (0, 255, 0), 50); // Зеленый colorWipe1 (strip. Color (0, 0, 255), 50); // Синий colorWipe1 (strip. Color (0, 0, 0, 255), 50); // Белый RGBW // Отправляем погоню за пикселями театра в… TheaterChase (strip. Color (127, 127, 127), 50); // Белый цвет TheaterChase (strip. Color (127, 0, 0), 50); // Красный TheaterChase (strip. Color (0, 0, 127), 50); // Синий

радуга (5);

rainbowCycle (5); TheaterChaseRainbow (5); } counter = 3; } // Конец, если counter == 2 // Caso 3: Luces Aleatorias else if (counter == 3) {for (int k = 0; k <50; k ++) {// Для набора NeoPixels первым NeoPixel является 0, секунда - 1, вплоть до количества пикселей минус один. int a = случайный (255); int b = случайный (255); int c = случайный (255); для (int i = 0; i

// пикселей. Цвет принимает значения RGB от 0, 0, 0 до 255, 255, 255

pixel.setPixelColor (i, pixels. Color (a, b, c)); // Умеренно ярко-зеленый цвет.

pixel.show (); // Это отправляет обновленный цвет пикселя на оборудование.

задержка (delayval); // Задержка на время (в миллисекундах).

} а = случайный (255); b = случайный (255); c = случайный (255); for (int i = NUMPIXELS; i> 0; i -) {

// пикселей. Цвет принимает значения RGB от 0, 0, 0 до 255, 255, 255

pixel.setPixelColor (i, pixels. Color (a, b, c)); // Умеренно ярко-зеленый цвет.

pixel.show (); // Это отправляет обновленный цвет пикселя на оборудование.

задержка (delayval); // Задержка на время (в миллисекундах).

}} counter = 4; } else if (counter == 4) {for (int g = 0; g <= 6; g ++) {// Некоторые примеры процедур, показывающих, как отображать пиксели: colorWipe (strip. Color (255, 0, 0), 50); // Красный colorWipe (strip. Color (0, 255, 0), 50); // Зеленый colorWipe (strip. Color (0, 0, 255), 50); // Синий colorWipe (strip. Color (0, 0, 0, 255), 50); // Белый whiteOverRainbow (20, 75, 5); PulseWhite (5); // fullWhite (); // задержка (2000); rainbowFade2White (3, 3, 1);

}

counter = 1; }} //////////////////////////////////////////////// /////////////////////////////////// /////////////// ////////////////////////////////////////////////// ///////////////////

/ Metodos del Ejemplo de la gravedad

void AccelerometerInit () {Wire.beginTransmission (0x0A); // адрес акселерометра // сбросить акселерометр Wire.write (0x04); // X данные Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // запрашиваем 6 байтов у ведомого устройства №2 while (Wire.available ()) // ведомое устройство может отправить меньше запрошенного {Version [0] = Wire.read (); // получаем байт как символ} x_data = (int8_t) Version [0] >> 2; Wire.beginTransmission (0x0A); // адрес акселерометра // сбросить акселерометр Wire.write (0x06); // Y данные Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // запрашиваем 6 байтов от ведомого устройства №2 while (Wire.available ()) // ведомое устройство может отправить меньше запрошенного {Version [1] = Wire.read (); // получаем байт как символ} y_data = (int8_t) Version [1] >> 2; Wire.beginTransmission (0x0A); // адрес акселерометра // сбросить акселерометр Wire.write (0x08); // Z данные Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // запрашиваем 6 байтов от ведомого устройства №2 while (Wire.available ()) // ведомое устройство может отправить меньше запрошенного {Version [2] = Wire.read (); // получаем байт как символ} z_data = (int8_t) Version [2] >> 2; x = (с плавающей запятой) x_data / divi; y = (float) y_data / divi; z = (с плавающей точкой) z_data / divi; Serial.print ("X ="); Serial.print (x); // выводим символ Serial.print (""); Serial.print ("Y ="); Serial.print (y); // выводим символ Serial.print (""); Serial.print ("Z ="); // выводим символ Serial.println (z); }

int roundize (int pos) {

if (pos> = NUMBER_OF_LEDS_ON_RING) return (pos - NUMBER_OF_LEDS_ON_RING); иначе, если (pos <0) return (pos + NUMBER_OF_LEDS_ON_RING); иначе return (pos); }

int расстояние;

int counterClockwiseDistanceBetweenLeds (int prevPos, int nextPos) {distance = nextPos - prevPos; если (расстояние <0) расстояние + = NUMBER_OF_LEDS_ON_RING; возврат (расстояние); }

int ledPosition, currentQueueSize;

#define NUMBER_OF_LEDS_TO_SHINE 10 int BrightnessStep = 255 / NUMBER_OF_LEDS_TO_SHINE;

void makeLightShow () {

для (int j = 0; j <NUMBER_OF_LEDS_ON_RING; j ++) neoring.setPixelColor (j, 0, 0, 0); currentQueueSize = ledQueue.count (); для (int k = 0; k <currentQueueSize; k ++) {ledPosition = ledQueue.pop (); neoring.setPixelColor (ledPosition, 0, (яркостьStep * k), 0); if ((k == 0 && currentQueueSize 0) ledQueue.push (ledPosition);} neoring.show ();}

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/ Metodos del juego de luces del arcoiris

// Заливаем точки одну за другой цветом void colorWipe (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i

пустая радуга (uint8_t wait) {

uint16_t i, j;

for (j = 0; j <256; j ++) {for (i = 0; i

// Слегка отличается, поэтому радуга равномерно распределяется по

void rainbowCycle (uint8_t wait) {uint16_t i, j;

for (j = 0; j <256 * 5; j ++) {// 5 циклов всех цветов на колесе for (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); задержка (ждать); }}

// Ползущие огни в театральном стиле.

void TheaterChase (uint32_t c, uint8_t wait) {for (int j = 0; j <10; j ++) {// делаем 10 циклов погони за (int q = 0; q <3; q ++) {for (uint16_t i = 0; я <strip.numPixels (); я = я + 3) {strip.setPixelColor (я + q, c); // включаем каждый третий пиксель} strip.show ();

задержка (ждать);

для (uint16_t я = 0; я <strip.numPixels (); я = я + 3) {strip.setPixelColor (я + q, 0); // выключаем каждый третий пиксель}}}}

// Ползущие огни в театральном стиле с эффектом радуги

void TheaterChaseRainbow (uint8_t wait) {for (int j = 0; j <256; j ++) {// цикл всех 256 цветов в колесе for (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i + 3) {strip.setPixelColor (i + q, Wheel ((i + j)% 255)); // включаем каждый третий пиксель} strip.show ();

задержка (ждать);

для (uint16_t я = 0; я <strip.numPixels (); я = я + 3) {strip.setPixelColor (я + q, 0); // выключаем каждый третий пиксель}}}}

// Введите значение от 0 до 255, чтобы получить значение цвета.

// Цвета представляют собой переход r - g - b - обратно к r. uint32_t Wheel (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos - = 85; возвратная полоса. Color (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos - = 170; возвратная полоса. Цвет (WheelPos * 3, 255 - WheelPos * 3, 0); }

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/ Metodos Rueda de colores

// int elegirColor = random (0x000000, 0xffffff); // Выбираем альтернативное средство для перехода к цветовой гамме 0x000000 y 0xFFFFFF

// CylonEyeColor = HtmlColor (elegirColor); // int elegirColor = random (1, 7); // Podemos elegir aleatoriamente entre los 7 colores que hay debajo0xf0ffff // if (elegirColor == 1) CylonEyeColor = HtmlColor (0xff0000); // Rojo // if (elegirColor == 2) CylonEyeColor = HtmlColor (0x00ff00); // Verde // if (elegirColor == 3) CylonEyeColor = HtmlColor (0x0000ff); // Azul // if (elegirColor == 4) CylonEyeColor = HtmlColor (0xffarillo); // if (elegirColor == 5) CylonEyeColor = HtmlColor (0x200020); // Morado // if (elegirColor == 6) CylonEyeColor = HtmlColor (0x00ffff); // Azul Claro // if (elegirColor == 7) CylonEyeColor = HtmlColor (0x100010); // Роза // CylonEyeColor = HtmlColor (0x000000);

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/ Metodos luces varias

// Заливаем точки одну за другой цветом

void colorWipe1 (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i

void pulseWhite (uint8_t wait) {

for (int j = 0; j <256; j ++) {for (uint16_t i = 0; i

for (int j = 255; j> = 0; j -) {

для (uint16_t i = 0; i

void rainbowFade2White (uint8_t wait, int rainbowLoops, int whiteLoops) {

float fadeMax = 100.0; int fadeVal = 0; uint32_t wheelVal; int redVal, greenVal, blueVal;

for (int k = 0; k <rainbowLoops; k ++) {for (int j = 0; j <256; j ++) {// 5 циклов всех цветов на колесе

for (int i = 0; i <strip.numPixels (); i ++) {

wheelVal = Колесо (((i * 256 / strip.numPixels ()) + j) & 255);

redVal = красный (wheelVal) * float (fadeVal / fadeMax);

greenVal = зеленый (wheelVal) * float (fadeVal / fadeMax); blueVal = blue (wheelVal) * float (fadeVal / fadeMax);

strip.setPixelColor (i, strip. Color (redVal, greenVal, blueVal));

}

// Первый цикл, переход!

если (k == 0 && fadeVal <fadeMax-1) {fadeVal ++; }

// Последний цикл, исчезновение!

иначе, если (k == rainbowLoops - 1 && j> 255 - fadeMax) {fadeVal--; }

strip.show ();

задержка (ждать); }}

задержка (500);

for (int k = 0; k <whiteLoops; k ++) {

for (int j = 0; j <256; j ++) {

for (uint16_t i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0, neopix_gamma [j])); } strip.show (); }

задержка (2000);

for (int j = 255; j> = 0; j -) {

for (uint16_t i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0, neopix_gamma [j])); } strip.show (); }}

задержка (500);

}

void whiteOverRainbow (uint8_t wait, uint8_t whiteSpeed, uint8_t whiteLength) {

если (whiteLength> = strip.numPixels ()) whiteLength = strip.numPixels () - 1;

int head = whiteLength - 1;

int tail = 0;

int loops = 3;

int loopNum = 0;

статический беззнаковый длинный lastTime = 0;

while (true) {

for (int j = 0; j <256; j ++) {for (uint16_t i = 0; i = tail && i head && i> = tail) || (хвост> голова && я <= голова)) {strip.setPixelColor (i, strip. Color (0, 0, 0, 255)); } else {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); }}

if (millis () - lastTime> whiteSpeed) {

голова ++; хвост ++; если (голова == strip.numPixels ()) {loopNum ++; } lastTime = millis (); }

если (loopNum == петли) return;

head% = strip.numPixels (); хвост% = strip.numPixels (); strip.show (); задержка (ждать); }}} void fullWhite () {for (uint16_t i = 0; i

// Слегка отличается, поэтому радуга равномерно распределяется по

void rainbowCycle1 (uint8_t wait) {uint16_t i, j;

for (j = 0; j <256 * 5; j ++) {// 5 циклов всех цветов на колесе for (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); задержка (ждать); }}

void rainbow1 (uint8_t wait) {

uint16_t i, j;

for (j = 0; j <256; j ++) {for (i = 0; i

// Введите значение от 0 до 255, чтобы получить значение цвета.

// Цвета представляют собой переход r - g - b - обратно к r. uint32_t Wheel1 (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0); } if (WheelPos <170) {WheelPos - = 85; возвратная полоса. Color (0, WheelPos * 3, 255 - WheelPos * 3, 0); } WheelPos - = 170; возвратная полоса. Цвет (WheelPos * 3, 255 - WheelPos * 3, 0, 0); }

uint8_t red (uint32_t c) {

возврат (c >> 16); } uint8_t зеленый (uint32_t c) {возврат (c >> 8); } uint8_t синий (uint32_t c) {return (c); }

Шаг 8: 3D-дизайн

3D дизайн
3D дизайн
3D дизайн
3D дизайн
3D дизайн
3D дизайн

Во-первых, вы должны определить размер ваших аппаратных компонентов, чтобы быть уверенным в правильности. Если они такие же, как у нас, вы можете использовать те же файлы, которые мы вам одалживаем.

Обе опоры были разработаны с использованием 3D-принтера, которые также входят в комплект:

ukelele_support_arduino_v0.stl: https://www.tinkercad.com/things/1aAGZ1xFptA-ukel… ukelele_support_WS2812_v0.stl:

Наконец, свет будет как на двух последних картинках.

Шаг 9: Установка шеи

Монтаж шеи
Монтаж шеи
Монтаж шеи
Монтаж шеи

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

То же самое касается отверстий, где винты крепят шейку к корпусу инструмента. Делать их не обязательно, так как шурупов для этого крепления нет, но если бы мы захотели это сделать, не было бы проблем.

ВАЖНО: оставьте 5 мм зазора между началом мачты и началом камертона, потому что в это отверстие будет помещена гайка.

Склеиваем гайку клеем, в направлении, указанном на рисунке.

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

Шаг 10: Установка Birdge

Установка Birdge
Установка Birdge
Установка Birdge
Установка Birdge

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

Нанесем клей на соединение двух компонентов. Две детали аккуратно фиксируем с помощью стяжного винта до высыхания стыка. Проделаем два отверстия для шурупов сверлом по дереву 1,5 мм. Закрепите мост двумя длинными винтами в корпусе. И, наконец, на головки саморезов надеваем защитные колпачки.

Шаг 11: Сборка корпуса и шеи

Сборка тела и шеи
Сборка тела и шеи
Сборка тела и шеи
Сборка тела и шеи

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

Шаг 12: наденьте струны для укулеле

Image
Image
Наденьте струны для укулеле
Наденьте струны для укулеле
Наденьте струны для укулеле
Наденьте струны для укулеле

Наконец, нам нужно разместить струны так, чтобы наш инструмент был готов.

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

Затем мы разместим строки таким образом, чтобы:

• Первая позиция: струна G (вторая самая толстая струна).

• Вторая позиция: струна C (более толстая струна).

• Третья позиция: струна E (вторая более тонкая струна).

• Четвертая позиция: струна (более тонкая струна).

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

Если у вас есть какие-либо сомнения относительно того, как это сделать, вы можете прочитать ту инструкцию, в которой объясняется, как правильно ставить строки.

Шаг 13: тестирование

Тестирование
Тестирование
Тестирование
Тестирование

Наконец, мы должны проверить, правильно ли собрана укулеле таким образом, чтобы идеальное расстояние на первом ладу составляло 0,1 мм, а на двенадцатом - примерно 1,2 мм.

Необходимо настроить струны укулеле. Я рекомендую вам это приложение: GuitarTuna

Шаг 14: наслаждайтесь

Теперь вам остается только наслаждаться укулеле.

Если вы хотите узнать о нас больше информации, вы можете найти нас в:

Twitter: @Innovart_cc

Facebook: @Innovartcc

Instagram: @Innovart_cc

Веб: Innovart.cc

Рекомендуемые: