Обычный лонгборд можно легко превратить в электрический. Для этого понадобятся: бесколлекторный двигатель, электронный регулятор хода (ESC — Electronic Speed Controller) для управления двигателем, батарейный блок, блок радиоуправления и контроллер Arduino Nano.
Электронные компоненты крепятся под доской в двух корпусах: в переднем отсеке находится батарея, а в заднем — регулятор хода, контроллер и радиоприёмник.
Схема

Код для 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.
}
}
Ссылки
Homemade electric longboard
По теме
Как собрать электрический лонгборд с управлением при помощи телефона
Самодельный электрический самокат на Arduino
Самодельный Segway на базе Arduino
Segstick – Segway на базе Arduino
