Skateboard eléctrico

Introducción

Skateboard eléctrico integrado con Arduino que controla la velocidad, iluminación y detección de obstáculos como medidas de seguridad, consecuentemente ofrece una experiencia de uso más segura y personalizada en comparación con un skateboard convencional.

Además de ajustar la velocidad según las preferencias individuales, esta integración permite incorporar características de seguridad, como la iluminación perimetral para mejorar la visibilidad y prevenir accidentes en condiciones de poca luz. Asimismo, mediante sensores integrados, el sistema puede detectar obstáculos que escapan al ojo humano, emitiendo una alerta sonora para advertir al usuario y evitar posibles tropiezos.

Índice

  1. Introducción
  2. Funcionamiento
  3. Implementación y diseño
    • Código SW del skateboard eléctricoDiseño HW del skateboard eléctrico
  4. Material necesario
    • Componentes HW necesarios
    • Fuentes de alimentación
    • Componentes mecánicos necesarios
    • Herramientas mecánicas necesarias
    • Otros
  5. Pasos
    • 63 Pasos de construcción para el skateboard eléctrico
      • 1 – Implementación SW y conexión de componentes HW
      • 2 – Instalación de la polea para el motor
      • 3 – Instalación del soporte de motor metálico
      • 4 – Instalación general de todas las partes
    • 4 Pasos de ejecución para el skateboard eléctrico
  6. Costes
  7. Problemas y soluciones
    • En el proceso de construir el skateboard eléctrico
    • En la ejeución del skateboard eléctrico
    • El mayor problema y solución pendiente
  8. Casos de uso
  9. Reparto de tareas

Funcionamiento

El funcionamiento está basado en 3 entradas para generar 3 salidas consecuentes:

  1. Entrada 1 – Señal de infrarrojos emitida por el mando a distancia y recibida por sensor IR
    • Salida 1 – Arduino envía señales al controlador, y este controla y activa la rotación del motor
  2. Entrada 2 – Señal de nivel de luz recibida por sensor fotoresistor
    • Salida 2 – Arduino envía la señal de encender los LEDs según la intensidad de luz ambiental recibida
  3. Entrada 3 – Señal de ultrasonido recibida por sensor ultrasónico
    • Salida 3 – Arduino emite un sonido de alerta por un buzzer cuando detecte obstáculos como piedras u objetos

Implementación y diseño

Código SW del skateboard eléctrico

#include "IRremote.h" // Incluye librería IRremote para comunicación por infrarrojos
#include <FastLED.h> // Incluye librería FastLED para controlar LEDs
#include "SR04.h" // Incluye librería SR04 para el sensor ultrasónico

// Define configuraciones de pines
#define LED_PIN 9
#define NUM_LEDS 273 // Número de LEDs
#define R_IS 1
#define L_IS 4
#define R_EN 2
#define L_EN 5
#define R_PWM 3
#define L_PWM 6
#define BUZZER_PIN 8
#define LDR_PIN A0
#define IR_RECEIVER_PIN 11
#define TRIG_PIN 12
#define ECHO_PIN 13

// Umbrales de luz y de distancia
const int lux_threshold = 100;
const int distance_threshold = 10;  

CRGB leds[NUM_LEDS]; // Define un array para almacenar los datos de los LEDs
IRrecv irrecv(IR_RECEIVER_PIN); // Crea una instancia del receptor de infrarrojos
SR04 sr04(ECHO_PIN, TRIG_PIN); // Crea una instancia del sensor ultrasónico

int motorSpeed = 0; // Variable para almacenar la velocidad del motor
bool buttonDetect = false; // Variable para detectar la pulsación de botón
long distance; // Variable para almacenar la distancia

void setup() {
  setupPins(); // Configura los pines de entrada y salida
  initializeSerial(); // Inicializa la comunicación serial
  enableIRReceiver(); // Habilita el receptor de infrarrojos
  initializeLEDs(); // Inicializa los LEDs
}

void loop() {
  processIRSignal(); // Procesamiento de la señal IR
  processUltrasonicSensor(); // Procesamiento del sensor ultrasónico
  processLightSensor(); // Procesamiento del sensor de luz
}

void setupPins() {
  // Configura los modos de los pines para control del motor, LDR y zumbador
  pinMode(R_IS, OUTPUT);
  pinMode(R_EN, OUTPUT);
  pinMode(R_PWM, OUTPUT);
  pinMode(L_IS, OUTPUT);
  pinMode(L_EN, OUTPUT);
  pinMode(L_PWM, OUTPUT);
  pinMode(LDR_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);

  // Inicializa los pines de control del motor
  digitalWrite(R_IS, LOW);
  digitalWrite(L_IS, LOW);
  digitalWrite(R_EN, HIGH);
  digitalWrite(L_EN, HIGH);
}

void initializeSerial() {
  // Inicializa la comunicación serial
  Serial.begin(9600);
  Serial.println("Decodificación de Botones del Receptor IR");
}

void enableIRReceiver() {
  // Habilita el receptor de infrarrojos
  irrecv.enableIRIn();
}

void initializeLEDs() {
  // Inicializa los LEDs
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
  FastLED.clear();
  FastLED.show();
}

void processIRSignal() {
  // Procesamiento de la señal IR
  if (irrecv.decode()) {
    uint32_t decodedIRData = irrecv.decodedIRData.decodedRawData;
    Serial.print("Código IR: 0x");
    Serial.println(decodedIRData, HEX);
    switch (decodedIRData) {
      case 0xF609FF00: // Botón UP  
        increaseMotorSpeed();     
        break;
      case 0xF807FF00: // Botón DOWN
        decreaseMotorSpeed();
        break;     
      case 0xBA45FF00: // Botón POWER
        turnMotorOFF(); 
        break;      
      case 0xF30CFF00: // Botón 1
       turnLEDsON();
       break;
      case 0xE916FF00: // Botón 0
        turnLEDsOFF();
        break;
      default:
        Serial.println(" otro botón ");
        break;

    }
    irrecv.resume();
  }
}

void processUltrasonicSensor() {
  // Procesamiento del sensor ultrasónico
  distance = sr04.Distance();
  Serial.print(distance);
  Serial.println("cm");

  // Zumbido si se detecta un obstáculo a menos de 10cm
  if (distance < distance_threshold && distance != 0) {
    int sound_duration = 100;
    for (int i = 0; i < 10; i++) {
      digitalWrite(BUZZER_PIN, HIGH);
      delay(sound_duration);
      digitalWrite(BUZZER_PIN, LOW);
      delay(sound_duration);
    }
  }
}

void processLightSensor() {
  // Procesamiento del sensor de luz
  int lux_input = analogRead(LDR_PIN);
  Serial.print(lux_input);
  Serial.println(" lux");

  // Ajusta el brillo de los LEDs según la intensidad de luz
  if (lux_input < lux_threshold ) {
    turnLEDsON();
  }
}

void turnLEDsON() {
  for (int i = 0; i < NUM_LEDS; i++) {
      leds[i] = CRGB(0, 255 - 4 * i, 4 * i);
      FastLED.setBrightness(2 * i);
      FastLED.show();
      delay(50);
    }
}

void turnLEDsOFF() {
  FastLED.setBrightness(0);
  FastLED.show();
}

void increaseMotorSpeed() {
   motorSpeed+=3;
   analogWrite(L_PWM, motorSpeed);
   delay(50);
}

void decreaseMotorSpeed() {
   motorSpeed-=3;
   analogWrite(L_PWM, motorSpeed);
   delay(50);
}

void turnMotorOFF() {
   analogWrite(L_PWM, 0);
   analogWrite(R_PWM, 0);
   motorSpeed = 0;
   delay(50);
}

Diseño HW del skateboard eléctrico

El diseño del circuito electrónico siguiente diseñado en TINKERCAD, disponible en el siguiente link(es necesario tener cuenta TINKERCAD), para los pines determinados en el código anterior es tal que:

Diseño en TINKERCAD correspondiente a la implementación del skateboard eléctrico

De forma que, el motor está conectado a Arduino por medio de un controlador, el JZK BTS7960B 43A

Cabe destacar, que, el controlador en el diseño no coorresponde con el control del motor el JZK BTS7960B 43A, se usó otro para poder realizar el diagrama, ya que, era el único disponible en TINKERCAD

Nótese que las conexiones VCC(en rojo) y los de tierra(en negro) son conectados mediante una motherboard que, a su vez tiene suministrado los 5V de VCC que provienen de Arduino con el cable rojo y se cierra el circuito con la Tierra que proviene de Arduino con el cable negro.

Material necesario

Antes de ejecutar los pasos del siguiente apartado, tuve que planificar el material necesario anteriormente. El material que vi que era necesario al principio fue escalando a medida que avancé con el proyecto.

Todo el material necesario para construir el skateboard eléctrico se puede dividir en cinco tipos:

Componentes HW necesarios

  • Arduino UNO
  • Sensor IR
  • Mando a distancia IR
  • Sensor fotoresistor
  • Sensor ultrasónico
  • Motor 12-24V
  • Controlador de motor JZK BTS7960B 43A
  • LEDs
  • Buzzer

Fuentes de alimentación

  • Batería 9V como fuente de alimentación del Arduino y sus componentes
  • Batería 21V como fuente de alimentación del controlador de motor y por consiguiente, del motor
  • Voltímetro para verificar el voltaje de las baterías(9V y 21V), los 5V de la motherboard y los 21V del controlador del motor, y por consiguiente, los 21V que recibe el motor

Componentes mecánicos necesarios

  • 2 Poleas con rueda síncrona 20 y 60 dientes 5 mm de diámetro
  • Soporte de motor metálico
  • 5 Tornillos de 2mm de diámetro y 5,5 mm de largo – para anclar la polea a la rueda
  • 4 Tornillos de 2mm de diámetro y 2 mm de largo – para anclar el motor y la batería
  • Una caja de plástico para que quepan los componentes hardware

Herramientas mecánicas necesarias

  • Taladradora con broca de 2mm para taladrar la polea y la tabla del skateboard, con puntas de atornillado para fijar bien los tornillos
  • Soldador para soldar los cables
  • Sierra para cortar pieza soporte de motor metálico
  • Pistola de pegamento caliente para pegar los sensores a la tabla del skateboard
  • Cables de 3mm de diámetro debido al amperaje del motor

Otros

  • Motherboard
  • Cables
  • Cinta aislante

Pasos

63 Pasos de construcción para el skateboard eléctrico

Los pasos para construir el skateboard eléctrico fueron, en total; 63, como son demasiados, los he dividido en 4 pasos genéricos:

1 – Implementación SW y conexión de componentes HW

  1. Conectar motor a la batería 21V con cables finos típicos de arduino
  2. Al ver que se quemaron los cables cambié los cambié por unos más gruesos de 3mm
  3. Comprobar el funcionamiento del motor ya que gira correctamente
  4. Conectar controlador a Arduino
  5. Conectar controlador al motor
  6. Conectar controlador a batería 21 V
  7. Conectar mando a Arduino
  8. Programar mando para que el motor acelere poco a poco y frene
  9. Comprobar que motor, sensor IR y mando imprimiendo el código de los botones pulsados y la velocidad del motor con Serial.print()
  10. Conectar sensor ultrasónico
  11. Programar sensor ultrasónico para que detecte objetos a ciertas distancias
  12. Comprobar que funciona correctamente imprimiendo los cm en los que detecta algo con Serial.print()
  13. Conectar buzzer
  14. Programar buzzer para que emita sonido recurrente cuando el sensor ultrasónico detecte objetos a menos de 10cm
  15. Comprobar que funciona correctamente escuchando el sonido emitido
  16. Conectar sensor fotoresistor
  17. Programar sensor fotoresistor para que detecte la luz ambiental
  18. Comprobar que funciona correctamente imprimiendo los lux en los que mide la luz con Serial.print()
  19. Conectar 2 tiras de LEDs de 288 LEDs en total
  20. Ver que sobran 15 LEDs, por lo que procedí a cortar esos 15 y mantener los 273 restantes
  21. Programar LEDs para que se enciendan progresivamente fotoresisitor detecta luz inferior a 100 lux
  22. Aunar toda la implementación y terminar de limpiar código mostrado en el apartado de implementación mostrado anteriormente
  23. Comprobar el funcionamiento bajando la luz y comprobando que los LEDs se encienden correctamente

2 – Instalación de la polea para el motor

  1. Una vez ya está el circuito completo, procedí a instalarlo en la tabla del skateboard
  2. Para ello, primeramente construí sobre el arduino una caja de acrílico, para protegerlo del movimiento del skateboard
  3. Meter el arduino con su caja de acrílico, el controlador, la batería de 9V y la todas las conexiones en una caja una caja de plástico de un kit de de arduino que ya tenía, y le creé agujeros por los lados para flujo de cables y abajo para luego taladrarlo a la tabla del skateboard
  4. Una vez el tema de los sensores ya estaba consolidado y comprobado, el siguiente paso fue adherir el motor a la tabla
  5. Para ello, lo primero fue tantear con ambas poleas, la pequeña del motor y la grande de la rueda para ver como alinearlas
  6. Quitar una rueda trasera de la tabla del skateboard
  7. Juntar la polea grande de la rueda a la rueda
  8. Para ello, la polea como solo tenia un agujero central, y no había forma de adherirlo a la a la rueda, decidí pedir ayuda profesional para taladrar en la polea de aluminio 5 agujeros medidos para que correspondan con la rueda
  9. Los tornillos también tenían que tener un diámetro especial para que cupiesen en las ruedas, de 2mm, y como no los hay de longitud 5,5 sino 4,5 normalmente tuve que comprar un metro en la ferretería y cortarlos comprando también las roscas fijas además de las convencionales
  10. Terminar de adherir la polea a la rueda con los tornillos, las arandelas y las tuercas de seguridad
  11. Meter la rueda con la polea grande adherida en el skateboard
  12. Fijar bien la polea pequeña al motor con los tornillos prisioneros que llevaba incorporados

3 – Instalación del soporte de motor metálico

  1. Medir donde poner el motor con su soporte en la tabla para que esté alineado con la polea de la rueda ya incorporada
  2. Ver que tiene que estar muy cerca de la polea grande porque la rueda de dientes de goma es corta
  3. Ver que choca el soporte comprado para el motor con la rueda
  4. Pedir hacer una pieza adaptada de acero inoxidable en forma de omega para que se ajustara bien el motor
  5. Ver que también choca con la rueda
  6. Cortar el soporte comprado previamente y cortar pedir que lo corten con la sierra donde choca con la rueda
  7. Atornillar el soporte al motor
  8. Medir de nuevo las dos poleas con el soporte correcto
  9. Medir donde taladrar la tabla para incorporar el motor
  10. Taladrar la tabla y atornillar el soporte con el motor y la polea pequeña a la tabla
  11. Medir donde poner la batería de 21 V 4 A para que llegue al motor de la mejor forma y al controlador del motor en la caja con el arduino y todo el cableado
  12. Medir donde poner la caja de arduino con todas sus conexiones
  13. Pedir cortar una pieza de metal que se ajuste a al motor de 21V 4A para que se adhiera a la tabla del skateboard
  14. Atornillar y fijar el motor con su pieza de soporte a la tabla del skateboard

4 – Instalación general de todas las partes

  1. Atornillar y fijar la caja de plástico que contiene el arduino, el controlador y una motherboard con las conexiones necesarias
  2. Ver donde delante de la tabla del skateboard pegar los 3 sensores: el de la señal IR, el de ultrasonido, y el sensor fotoresistor.
  3. Ver que los cables no llegan delante del todo debido a la larga longitud de la tabla del skateboard al tratarse de un skateboard de tipo long
  4. Comprar cables macho hembra para añadirlos a dichos y así prolongar su conectividad
  5. Pegar los sensores a la tabla con la pistola de pegamento caliente
  6. Pegar la tira de los 273 LEDs a la tabla del skateboard con la cinta de doble cara que llevaba ya incroporada al comprarla
  7. Terminar de fijar todo bien para que no sea propenso a deshacerse frente al movimiento del skateboard
  8. Añadiendo cinta aislante a las conexiones propensasa a desvincularse
  9. Soldando los cables del motor batería 21V y del conector para mejorar la conectividad y evitar chispas
  10. Conectar el arduino con una batería de 9V para probar todo su funcionamiento
  11. Comprar y conectar otra batería de 9V porque la que ya tenía estaba gastada y no alimentaba correctamente todos los componentes correspondientes
  12. Probar funcionamiento de todos los componentes con mando para girarel motor y encender los LEDs, sensor fotoresistor para encender los LEDs con menos de 100 lux y el sensor ultrasónico para emitir un sonido nada más detecte un objeto a menos de 10 cm
  13. Cerrar la caja de plástico con el arduino y realizar últimas pruebas para terminar de comprobar que todo funciona correctamente
  14. Dar el proyecto como terminado

4 Pasos de ejecución para el skateboard eléctrico

Para ejecutar el skateboard eléctrico, hay que seguir 4 pasos principales, cabe destacar que los pasos 2, 3 y 4 no tienen por qué seguir ese orden, pero los pasos seguidos normalmente fueron:

  1. Conectar fuente de alimentación, batería de 9V a la placa de Arduino
  2. Con mando de adistancia acercarlo a sensor de señal infrarrojo, pulsar botón UP para hacer girar el motor y, consecuentemente hacer girar la rueda y por tanto acelerar el skateboard
  3. Bajar luz para que el sensor fotoresistor note una lux menor a 100 lux y consecuentemente desencadene el proceso de encender los LEDs alrededor de toda la tabla skateboard
  4. Poner un objeto a menos de 10 cm de distancia frente el sensor ultrasónico para que desencadene el proceso de emitir un sonido mediante el buzzer

Costes

Motor 12-24V 4A con soporte de motor metálico para su posterior montaje27,90 €
Kit de 2 poleas con rueda síncrona 20 y 60 dientes 5 mm de diámetro12,56 €
Controlador de motor JZK BTS7960B 43A9, 49 €
2 tiras LED de 1m y 144 LEDs cada una31,98 €
Caja acrílica para Arduino UNO4,99 €
Baterías 9V6,60 €
Cables extra para Arduino8,39 €
4 cables más gruesos 2,5mm20,30 €
Cinta aislante1,20 €
Total* 103,41€

* Coste total sin añadir el material del cual ya disponía: el Kit Arduino Uno, el skateboard, la batería extraída de una taladradora, la taladradora, la pistola de pegamento caliente y cables, además de las herramientas mecánicas profesionales que ya estaban en la ferretería como la prensa o la sierra

Problemas y soluciones

Se dieron problemas tanto a la hora de construir el skateboard eléctrico, como a la hora de ponerlo en marcha una vez ya estaba construido. A continuación se muestran ambos tipos de problemas dados:

En el proceso de construir el skateboard eléctrico

En el proceso de la construcción del skateboard eléctrico, surgieron una serie de problemas inesperados, estos problemas se pueden agrupar en eléctricos y en mecánicos:

Problemas eléctricos

  1. Problema 1 – Cables finos se quemaron al conectar la batería de 21V al motor
    • Descripción: Al conectar el motor a la batería de 21V con 2 cables típicos de Arduino macho-macho de a penas 0.326 mm², estos rápidamente se quemaron cuando el motor comenzó a rotar a 21V de potencia.
    • Solución: Comprar y usar cables más gruesos, de 2,5 mm² frente a los típicos de Arduino de 0.326 mm²
  2. Problema 2 – Motor no giraba al conectarlo al controlador de motor L293D 0,6 A o con el controlador de motor L298N 2A, además de conectar estos controladores al Arduino correctamente
    • Descripción: Controlador de motor que tenía L293D soporta solo hasta 0,6 A y el siguiente que compré, el controlador de motor L298N solo hasta 2A, consecuentemente no solo permitía exprimir el máximo potencial del motor, que soporta hasta 4A, sino que, ni siquiera lo encendía
    • Solución: Comprar y probar con controlador de motor JZK BTS7960B 43A

Problemas mecánicos

  1. Problema 1 – Polea comprada no tenía los agujeros necesarios para juntar bien la polea a rueda
    • Descripción: La rueda presenta 5 agujeros principales mientras que la polea solo uno central, que, correspondería con el eje de la rueda, pero ni eso porque el eje era de un diámetro mucho mayor, lo cual hacía incluso más complicado poder acoplar la polea a la rueda
    • Solución: Taladrar la polea grande de aluminio, haciendo 5 agujeros acorde a los de la rueda además de agrandar el agujero central que ya presentaba
  2. Problema 2Soporte motor metálico choca con la rueda
    • Descripción:
    • Solución: ya que la rueda y el motor deben de estar muy cerca debido a la corta distancia de la cinta dentada que une ambas poles y es responsable de transmitir la energía cinética de rotación entre la polea pequeña del motor y la polea grande de la rueda.
  3. Problema 3 – Correa de poleas se estropeó
    • Descripción: dentada se agrandó por lo que, al detectar mayor peso y al no estar, por tanto, lo suficientemente tensada, esta deja de transmitir a energía cinética de rotación entre la polea pequeña del motor y la polea grande de la rueda
    • Solución:

En la ejecución del skateboard eléctrico

  1. Problema 1 – Ninguno o alguno/s de los componentes funcionaban
    • Descripción: La batería 9V no tenía suficiente voltaje, con tener 7V por ejemplo, ya dejaba de funcionar correctamente todo
    • Solución: Comprar más baterías de 9V y usar esas
    • Solucion mejorada: La solución mejorada hubiera sido comprar una batería de 9V, recargable
  2. Problema 2 – Sensor IR no detectaba las señales del mando
    • Descripción: Al alargar los cables del sensor IR añadiendo otros a estos para que el sensor llegase delante del todo de la tabla, se perdía alguna conexión
    • Solución: Al conectar ambos cables para alargarlos, añadir cinta aislante e incluso pegamento con la pistola de pegamento caliente
  3. Problema 3 – El motor no gira tras pulsar el botón UP del mando
    • Descripción: Al no tener correctamente conectado el motor, el controlador o el arduino, debido al movimientoel motor no se ejecutaba correctamente
    • Solución: Asegurar que cada componente está bien conectado
  4. Problema 4 – Los LEDs no se encendían tras bajar suficientemente el nivel de luz o pulsar el botón 1 del mando
    • Descripción: Al alargar los cables del sensor fotoresistor añadiendo otros a estos para que el sensor llegase delante del todo de la tabla, se perdía alguna conexión
    • Solución: Al conectar ambos cables para alargarlos, añadir cinta aislante e incluso pegamento con la pistola de pegamento caliente
  5. Problema 5 – El buzzer no sonaba tras acercar un objeto lo bastantemente cerca como para que el sensor ultrasónico detecte una señal a menos de 10cm de distancia
    • Descripción: Al alargar los cables del sensor ultrasónico añadiendo otros a estos para que el sensor llegase delante del todo de la tabla, se perdía alguna conexión
    • Solución: Al conectar ambos cables para alargarlos, añadir cinta aislante e incluso pegamento con la pistola de pegamento caliente

El mayor problema y solución pendiente

El mayor problema fue detectar que el skate eléctrico, a pesar de girar correctamente la rueda gracias al motor y las poleas, que al subirme, por el peso añadido, la rueda empezó a dar con el motor, y por consiguiente, el motor no es capaz de hacer la rueda girar, a pesar de darle la potencia necesariamente alta.

Además la rueda de las poleas se ensanchó, por lo que, las soluciones serían:

  1. Comprar una rueda de goma dentada más larga entre ambas poleas
  2. Desinstalar el motor con su soporte e instalarlo de nuevo más lejos de la rueda, siendo la rueda dentada más larga. Esto impediría que la rueda chocara con el motor, y por tanto, el motor sí podría transferir su energía de rotación a la rueda correctamente

Casos de uso

Reparto de tareas

El proyecto ha sido realizado por Deborah Israel Villanueva Vassileva, la integrante del grupo 21 de Sistemas Empotrados y de Tiempo Real (2023-2024) GIS campus de Móstoles.

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *