Красивая подсветка скейтборда на основе Ардуино

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

Комплектующие

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

  • Teensy 3.2 × 1
  • Понижающий преобразователь  × 1
  • Arduino UNO × 1
  • Кабель USB-A к B × 1
  • NeoPixels лента (на выбор)
  • Кабель Micro-USB к USB (общий) × 1
  • Разъемы XT60 и термоусадка × 1
  • Перемычки × 1

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

  • Arduino IDE
  • Arduino Web Editor (онлайн-редактор)

Ручные инструменты:

  • Паяльник (универсальный)
  • Горячий клеевой пистолет (универсальный)

По сути, самая важная вещь - это ленты NeoPixels и некоторая плата типа Arduino. Проект изначально начинался с Arduino Uno, после чего был сделан переход на Teensy 3.2. Чем меньше плата, тем меньше вес, о котором нужно беспокоиться. Вам понадобятся базовые знания в области макетирования и некоторые приличные навыки пайки, так как контакты в нашем деле имеют тенденцию быть довольно маленькими.

Кроме того, рекомендуется для проекта иметь в наличии электрический скейтборд. Очевидно, что этот проект применим не только к электрическим скейтбордам.

Начальная настройка

Итак, когда у вас есть все необходимые детали или, по крайней мере, вы их заказали, вы можете приступить к настройке всего проекта. Во-первых, выясните, сколько блоков NeoPixels вы хотите и где вы хотите их разместить. В данном проекте подсветки скейтборда используется 21 пиксель на ленту и 2 ленты от NeoPixels, которые размещены по направлению к задней части основания скейта. Таким образом, когда доска ускоряется подсветка выглядит очень круто.

Схема соединения выглядит таким образом:

Первая задача - это прикинуть всё на деке скейтборда, т.е. всё собрать, подключить и разместить так, как вы хотите. Пока не припаивайте всё к Arduino (или аналогу), достаточно припаять один конец соединительных кабелей к полосам NeoPixel (5 В, Земля, Данные - 5V, Ground, Data).

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

Код

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

#include <Adafruit_NeoPixel.h> //Make sure to include the Adafruit library in order to enable controlling of the Neopixels
#ifdef __AVR__
 #include <avr/power.h>
#endif
#define PIN            12 //This is where the data line of your Neopixels will connect to. It can be any number pin really, I just chose 12.
#define NUMPIXELS      21 //This is where we determine the number of pixels. I am only using 21 for each strip on the actual skateboard, so that's what I chose.
#define STRING_LENGTH0   21 //If you want to be able to control individual pixels in a "moving" string of neopixels, making different stringlengths from the maximum down to 1 is important.
#define STRING_LENGTH   20
#define STRING_LENGTH2   19
#define STRING_LENGTH3   18
#define STRING_LENGTH4   17
#define STRING_LENGTH5   16
#define STRING_LENGTH6   15
#define STRING_LENGTH7   14
#define STRING_LENGTH8   13
#define STRING_LENGTH9  12
#define STRING_LENGTH10  10
#define STRING_LENGTH11  9
#define STRING_LENGTH12  8
#define STRING_LENGTH13  7
#define STRING_LENGTH14  6
#define STRING_LENGTH15  5
#define STRING_LENGTH16  4
#define STRING_LENGTH17  3
#define STRING_LENGTH18  2
#define STRING_LENGTH19  1
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 5000/100; //100 = 1 second, and this will control how "fast" your string of Neopixels "moves"
void setup() {
 pixels.begin();
}
void loop() {
 int i=0;
 while(true) {
   // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
   pixels.setPixelColor(i-STRING_LENGTH, pixels.Color(255,0,0));    
   pixels.setPixelColor(i-STRING_LENGTH2, pixels.Color(240,0,0));  
   pixels.setPixelColor(i-STRING_LENGTH3, pixels.Color(250,110,0));   
   pixels.setPixelColor(i-STRING_LENGTH4, pixels.Color(255,165,0));
   pixels.setPixelColor(i-STRING_LENGTH5, pixels.Color(255,190,0));
   pixels.setPixelColor(i-STRING_LENGTH6, pixels.Color(255,220,0));
   pixels.setPixelColor(i-STRING_LENGTH7, pixels.Color(255,255,0));
   pixels.setPixelColor(i-STRING_LENGTH8, pixels.Color(150,210,0));
   pixels.setPixelColor(i-STRING_LENGTH9, pixels.Color(90,170,0));
   pixels.setPixelColor(i-STRING_LENGTH10, pixels.Color(0,128,0));
   pixels.setPixelColor(i-STRING_LENGTH11, pixels.Color(0,70,90));
   pixels.setPixelColor(i-STRING_LENGTH12, pixels.Color(0,30,175));
   pixels.setPixelColor(i-STRING_LENGTH13, pixels.Color(0,0,255));
   pixels.setPixelColor(i-STRING_LENGTH14, pixels.Color(25,0,200));
   pixels.setPixelColor(i-STRING_LENGTH15, pixels.Color(50,0,170));
   pixels.setPixelColor(i-STRING_LENGTH16, pixels.Color(75,0,120));
   pixels.setPixelColor(i-STRING_LENGTH17, pixels.Color(130,40,160));
   pixels.setPixelColor(i-STRING_LENGTH18, pixels.Color(190,85,100));
   pixels.setPixelColor(i-STRING_LENGTH19, pixels.Color(238,20,20));
   pixels.show(); // This sends the updated pixel color to the hardware.
   delay(delayval); 
   i = (i+1) % (NUMPIXELS + STRING_LENGTH);
 }
}

Самый простой способ запустить код для новичка - это скопировать и вставить его в вашу Arduino IDE. Вы можете спокойно менять код, используя различные строки (которые управляют отдельными NeoPixels), можете изменять значения RGB так, как вы этого хотите.

Вы также можете изменить значение задержки (англ. - delay), чтобы изменить скорость перемещения NeoPixels. Перед загрузкой протестируйте всё и убедитесь, что вам понравился ваш шаблон, прежде чем двигаться дальше.

Питание батареи

На этом шаге, после того как мы завершили работу с кодом, мы перешли на Teensy 3.2. Причина банальная - плата меньше по размерам  и ее гораздо легче разместить на нижней части деки скейтборда. При переходе на новую плату важно было помнить, что если используется внешний источник питания, он должен питаться через отдельные контакты заземления и 5 В, а не через "хакнутый" кабель microusb.

Что касается фактического энергопотребления, мы взяли преобразователь напряжения 24 В в 5 В и подключили его прямо к выходу батареи на скейтборде. От него легко подключить выходную сторону 5 В к входу 5 В и заземлению Teensy. Также на данном этапе мы начинаем пайку и рекомендуем использовать разъемы XT90, чтобы все было красиво и модульно. Также мы приклеиваем понижающий преобразователь к нижней части корпуса контроллера скорости, а NeoPixels - к нижней части деки.

Итоговый результат

Для одновременного питания обеих полос NeoPixel мы использовали разные 3В и заземляющие контакты, доступные на Teensy. Единственный контакт, который необходимо подключить к обеим полосам, - это контакт 12, поскольку его нельзя продублировать. Будьте внимательны при пайке, потому что, хотя есть возможность соединить выводы 3 В и заземления параллельно для обеих полос, контакты очень малы и будет целесообразным разделить их.

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

31.03.2019 | Уроки | Теги статьи
Ардуино+