Роликовая доска с электроприводом своими руками
Приветствую всех на сайте «В гостях у Самоделкина». В этой статье предлагаю Вам рассмотреть, как сделать свой собственный электрический лонгборд с мощным бесколлекторным двигателем в качестве привода. В этом уроке мы увидим, как собрать все вместе, однако давайте сначала определим, что же вообще такое лонгборд:
Лонгборд (англ. Longboard) — более длинная версия обычного скейтборда. Традиционные лонгборды имеют длину от 68 до 150 см. Благодаря своей конструкции лонгборд позволяет достигать гораздо более высоких скоростей, чем обычный скейтборд. Из основных отличий от скейтборда стоит отметить увеличенную колёсную базу и длину самой доски, а так же более мягкие колёса как правило большего размера. Такие изменения позволяют развивать большие скорости, увеличить стабильность и улучшить удержание равновесия, при этом двигаться мягко, снижая заметность мелких дефектов асфальта при движении. В отличие от классических роликовых досок, деки для лонгборда выполняются в более свободном дизайне формы и профиля, а подвески имеют некоторый выбор по ширине колёсной базы и их конструкции. Ну с понятием разобрались, можно переходить к сборке.
ЧАСТЬ 1 — Необходимые детали
Прежде всего, давайте посмотрим, что нам нужно для этого проекта. Автор хотел установить два двигателя, два регулятора хода и так далее, но, так как он получил сам лонгборд уже после того, как заказал остальные компоненты, то не рассчитал, что детали не в полной мере подойдут (два двигателя попросту не влезли по размеру). В любом случае, основными деталями являются батарея 6S, регулятор хода, бесколекторный мотор, радиопередатчик и приемник, моторама и сам лонгборд.
Некоторыми дополнительными деталями являются индикатор уровня заряда батареи, чтобы можно было контролировать, когда необходимо произвести подзарядку, включатель регулятора хода и еще один выключатель для всей сети питания. Также некоторые разъемы для батареи, провода и корпус для всех компонентов. Позже автор напечатает хороший корпус для этого проекта на трехмерном принтере.
Список необходимого:
1 х Arduino NANO
1 х Двигатель N5065 400 KV (оборот на вольт, не путать с киловольтами) 1820W
1 х Регулятор хода 120A для бесколлекторного двигателя, любой
1 х Двухканальный пульт дистанционного управления с приемником, автор использовал такой.
1 х Комплект крепления двигателя
1 х Переключатель ВКЛ/ВЫКЛ
1 x 6S Индикатор уровня заряда батареи 6S
1 x 6S аккумуляторная батарея, покупная или самодельная (читай статью)
1 x Сам Longboard
1 x Комплект больших колес
1 x Штекерный разъем для аккумулятора
1 x Толстый провод (для подачи питания на регулятор и с него на двигатель, так как токи там не маленькие)
ЧАСТЬ 2 — схема
Как только у Вас будут все детали, внимательно изучите схему. Как Вы можете видеть ниже, батарея подключается ко всей схеме в разрыв через выключатель. К батарее также подключается разъем, при помощи которого будет осуществляться её зарядка. Далее параллельно подключаются регулятор хода и индикатор заряда батареи. Практически все регуляторы хода имеют встроенный стабилизатор напряжения на 5 вольт, эти 5 вольт будут использоваться для питания платы Arduino и радиоприемника. Для включения регулятора хода к нему припаивается дополнительная кнопка, однако не все регуляторы имеют такую функцию, имейте это ввиду. Бесколлекторный двигатель подключается к регулятору, это и вся схема. Также понадобится радиопередатчик с радиоприемником.
ЧАСТЬ 3 — батарея
Для данного проекта автор решил собрать батарею самостоятельно из литиевых элементов формфактора 18650. Для этого первым делом необходимо определиться, какое напряжение необходимо получить на выходе батареи. Регулятор хода и мотор, которые использовал автор рассчитаны на напряжение 26 вольт. Каждый из этих аккумуляторов имеет номинальное напряжение 3,7 В и максимальное напряжение при полном заряде 4,2 вольта. Итак, если нужно около 26 В, при напряжении 4,2В с банки необходимо последовательно соединить шесть аккумуляторов для получения максимального напряжение 25,2 В.
Однако, при таком включении суммируются только напряжения банок, емкость всего аккумулятора и возможный отдаваемый ток по-прежнему будут равны емкости отдельно взятого аккумулятора, то есть 3000 мА ч в данном случае. С целью увеличения емкости автор добавляет к каждой из банок ещё две параллельно, таким образом аккумулятор имеет параметры с напряжением 25,2 В и емкостью 9000 мА ч.
Сварка аккумуляторов производилась специальным точечным сварочным аппаратом для этих элементов, с использованием никелевой ленты. При отсутствии такого станка с некой долей успеха его можно заменить мощным свинцовым аккумулятором.
Далее согласно схеме припаивается регулятор заряда с функцией балансировки.
И вся батарея упаковывается.
ЧАСТЬ 4 — Arduino код
Если мы подключим радиоприемник напрямую к регулятору хода, это вызовет проблемы, так как двигатель стартует очень резко. Такой рывок, по понятным причинам, приведет к падению с доски при начале движения. Чтобы избежать этого сначала мы читаем ШИМ-сигнал от радиоприемника с помощью Arduino, а затем создаем собственный ШИМ-сигнал с учетом необходимых задержек и уже его отправляем на регулятор. Скачать код Вы сможете архивом в конце статьи или просмотреть ниже, развернув спойлер.
Скетч/* Code for electric longboard PWM code * Tutorial webpage: https://www.electronoobs.com/eng_robotica_tut12.php * Schematic: https://www.electronoobs.com/eng_robotica_tut12_sch1.php * Part list: https://www.electronoobs.com/eng_robotica_tut12_parts1.php */ #include <Servo.h>; //We need this library for the PWm signal Servo motor; //We create the servo pin, later attach to D3 //We create variables for the time width values of each PWM input signal unsigned long counter_1, current_count; //We create 4 variables to stopre the previous value of the input signal (if LOW or HIGH) byte last_CH1_state; int THROTTLE = 1500; int LAST_THROTTLE = 1500; int PWM_VALUE = 1500; int THROTTLE_MAPED = 0; void setup() { motor.attach(3); motor.writeMicroseconds(1505); //The range of this ESC is 1000us to 1500 for CW and 1500 to 2000us for CCW PCICR |= (1 << PCIE0); //enable PCMSK0 scan PCMSK0 |= (1 << PCINT0); //Set pin D8 trigger an interrupt on state change. Serial.begin(250000); delay(500); } void loop() { /*My ESC has ranges from 1500 to 2100 for forward adn from 1500 to 1000 for backwards*/ THROTTLE_MAPED = map(THROTTLE,1085,2100,1000,2000); //Change the range here. THROTTLE_MAPED = THROTTLE_MAPED — 50; if(THROTTLE_MAPED > 1480) { if(THROTTLE_MAPED > PWM_VALUE) { PWM_VALUE = PWM_VALUE + 1; delay(7); LAST_THROTTLE = THROTTLE_MAPED; } if(THROTTLE_MAPED < PWM_VALUE) { PWM_VALUE = PWM_VALUE — 1; delay(7); LAST_THROTTLE = THROTTLE_MAPED; } PWM_VALUE = constrain(PWM_VALUE,1505,2100); } if(THROTTLE_MAPED < 1450) { if(THROTTLE_MAPED < PWM_VALUE) { PWM_VALUE = PWM_VALUE — 1; delayMicroseconds(2000); LAST_THROTTLE = THROTTLE_MAPED; } PWM_VALUE = constrain(PWM_VALUE,1350,2100); } motor.writeMicroseconds(PWM_VALUE); //Finally write the PWM signal on pin D3 } ISR(PCINT0_vect){ //First we take the current count value in micro seconds using the micros() function current_count = micros(); ///////////////////////////////////////PWM input from receiver on D8 if(PINB & B00000001){ //We make an AND with the pin state register, We verify if pin 8 is HIGH??? if(last_CH1_state == 0){ //If the last state was 0, then we have a state change… last_CH1_state = 1; //Store the current state into the last state for the next loop counter_1 = current_count; //Set counter_1 to current value. } } else if(last_CH1_state == 1){ //If pin 8 is LOW and the last state was HIGH then we have a state change last_CH1_state = 0; //Store the current state into the last state for the next loop THROTTLE = current_count — counter_1; //We make the time difference. Channel 1 is current_time — timer_1. } }
В приведенном выше видео хорошо видна разница между использованием непосредственно ШИМ-сигнала от радиоприемника и использованием обработанного сигнала с Arduino, а также небольшую задержку. Таким образом, кататься на лонгборде намного безопаснее. Загрузите код в Arduino и коммутируйте всё согласно вышеизложенной схеме.Стоит сказать по поводу самой аппаратуры. Собрать простую двухканальную аппаратуру, тем более дискретную, очень легко можно при помощи той же платы ардуино и радиомодулей NRF24l01. При чем в силу того, что расстояние между приемником и передатчиком в принципе не будет превышать нескольких метров — допустимо использовать «микро» версии этих модулей, что в совокупности с платой Arduino Pro Mini или даже Digispark, если будет достаточно его памяти, позволит выполнить передатчик и приемник очень компактных размеров, ничем не уступающие заводскому решению. Автор же использовал вот такой вот передатчик с приемником:
ЧАСТЬ 5 — Корпус для электроники
Корпус должен быть тонким и не касаться земли при езде, что само собой понятно. Так же он не должен покрывать всю нижнюю площадь лонгборда, так как при езде доска должна несколько изгибаться, выполняя тем самым роль амортизатора. Кроме того, в нем должно быть место для кнопок и разъемов для зарядки аккумулятора. Ниже представлены файлы STL для этого проекта. Для печати большого корпуса вам потребуется принтер с областью печати более 28 см. Автор использовал свой Creality CR10 для этой работы с областью печати 300 на 300 мм. Скачать файлы STL Вы сможете тем же архивом в конце статьи. Разумеется корпус можно изготовить и из листового пластика, склеив его дихлорэтаном, эпоксидной смолой или цианоакрилатным клеем, склеить его из тонкой фанеры или даже согнуть из жести, ничего хитрого в изготовлении квадратной коробки нет.
При печати автор использовал сопло 0,4 мм и высоту слоя 0,3 мм. В качестве материала применен PLA пластик, заполнение — 15%, потребовалось около 25 часов, чтобы напечатать все детали.
ЧАСТЬ 6 — Последние шаги
Сделайте разметку для отверстий просверлите их, используя сверло 3 мм. Используйте винты с головкой впотай. Установите корпус на место и соедините всё согласно схеме. Прикрутите крышку, используя те же винты 3 мм и готово!
Видео сборки и работы можно посмотреть здесь:
Скачать прошивку ардуино здесь:
Файлы для печати в формате STL здесь:
Ну а на этом всё и всем удачи в творчестве!