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


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение