Самодельный электрический лонгборд с раиоуправлением на Arduino


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

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


Схема
Схема cамодельного электрического лонгборда с раиоуправлениием на 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.
  }

}


Ссылки
Homemade electric longboard

По теме
Как собрать электрический лонгборд с управлением при помощи телефона
Самодельный электрический самокат на Arduino
Самодельный Segway на базе Arduino
Segstick – Segway на базе Arduino
  • 0
  • 14 января 2019, 13:21
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.