Tabla de contenido:

Kit de luces para topbox de motocicleta DIY Givi V56 con señales integradas: 4 pasos (con imágenes)
Kit de luces para topbox de motocicleta DIY Givi V56 con señales integradas: 4 pasos (con imágenes)

Video: Kit de luces para topbox de motocicleta DIY Givi V56 con señales integradas: 4 pasos (con imágenes)

Video: Kit de luces para topbox de motocicleta DIY Givi V56 con señales integradas: 4 pasos (con imágenes)
Video: DIY Givi V56 Topbox Lighting Kit 2024, Noviembre
Anonim
Image
Image
Kit de luces para topbox de motocicleta DIY Givi V56 con señales integradas
Kit de luces para topbox de motocicleta DIY Givi V56 con señales integradas
Kit de luces para la caja superior de la motocicleta DIY Givi V56 con señales integradas
Kit de luces para la caja superior de la motocicleta DIY Givi V56 con señales integradas

Como motociclista, estoy muy familiarizado con que me traten como si fuera invisible en la carretera. Una cosa que siempre agrego a mis bicicletas es un baúl que generalmente tiene una luz integrada. Recientemente me actualicé a una nueva bicicleta y compré la caja Givi V56 Monokey ya que tenía mucho espacio para los artículos. Esta caja tiene un foco para un kit de iluminación de fábrica que consta de dos tiras de LED a cada lado. El problema es que este kit cuesta alrededor de $ 70 y solo tiene frenos. Hay un kit de posventa que probablemente hace cosas similares y podría ser un poco más fácil de instalar, pero su precio sube a $ 150. Siendo una persona ingeniosa y buscando una excusa para probar las tiras de LED direccionables, decidí hacer un sistema integrado que no solo tendría luces de freno, sino luces de marcha (encendidas cuando se mueva), intermitentes y luces de emergencia. Solo por el gusto de hacerlo, incluso agregué una secuencia de inicio…. porque pude. Tenga en cuenta que esto requirió mucho trabajo, aunque tenía muchas cosas que resolver. A pesar del trabajo, estoy bastante contento con el resultado. Ojalá esto termine siendo útil para alguien más.

La operación básica de cómo funciona este sistema es que la unidad Arduino busca señales en los pines: luz de freno, luz de giro a la izquierda y luz de giro a la derecha. Para leer la señal de 12 voltios de la motocicleta, utilicé optoaisladores para convertir la señal de 12 V en una señal de 5 V que Arduino puede leer. Luego, el código espera una de estas señales y luego envía los comandos a la tira de LED utilizando la biblioteca FastLED. Eso es lo básico, ahora vamos a entrar en detalles.

Suministros

Estas son las cosas que usé porque en su mayor parte ya las tenía por ahí. Obviamente, se pueden cambiar según sea necesario:

  1. Arduino: utilicé un nano por consideraciones de tamaño, pero puedes usar lo que quieras siempre que tengas cinco pines para usar.
  2. Regulador de 5 V: utilicé un L7805CV que era capaz de 1,5 amperios. Este proyecto utilizará 0,72 amperios para los LED más la potencia para el nano, por lo que 1,5 funciona muy bien para este proyecto.
  3. Condensadores: necesitará uno de 0,33 uF y uno de 0,1 uF para que el regulador de voltaje funcione correctamente.
  4. Optoaisladores 3x - para hacer la conversión de señal de 12V a 5V. Usé el tipo PC817X que solo tiene cuatro pines, que es todo lo que necesitamos.
  5. Resistencias: necesitará dos tipos, tres de cada tipo. El primero debe ser suficiente para reducir la corriente a través del LED IR del optoaislador. Necesitará al menos 600 ohmios, pero 700 sería una mejor idea para manejar los voltajes cambiantes en la motocicleta. El otro debe estar entre 10k y 20k para una señal rápida en el otro lado del optoaislador.
  6. Tablero prototipo: tenía algunos que eran lo suficientemente pequeños como para caber dentro de una caja de proyecto pequeña con una pequeña cantidad de recorte.
  7. Caja del proyecto: lo suficientemente grande para adaptarse a los componentes, pero lo suficientemente pequeña para que sea fácil de instalar.
  8. Cable: utilicé cable ethernet Cat 6 porque tenía mucho por ahí. Esto tiene ocho cables todos codificados por colores que ayudaron con todas las diferentes conexiones y era un calibre lo suficientemente grande para manejar los consumos de corriente.
  9. Enchufes: en cualquier lugar donde desee que el sistema sea fácilmente extraíble. Usé un tapón a prueba de agua para permitir que se quitara la caja superior y para manejar la lluvia o el agua que le cayera encima. También necesitaba tapones más pequeños para las tiras de LED para no tener que perforar agujeros grandes.
  10. Cremalleras y soportes adhesivos para bridas para sujetar todo en su lugar.
  11. Envoltura retráctil para ordenar las conexiones.

Paso 1: construcción del circuito

Construyendo el circuito
Construyendo el circuito
Construyendo el circuito
Construyendo el circuito
Construyendo el circuito
Construyendo el circuito

Obviamente, si estás siguiendo mi compilación, no tendrás que pasar por la cantidad de pruebas que hice. Lo primero que hice fue asegurarme de que mi código funcionara y de que pudiera obtener una señal de los optoaisladores y controlar adecuadamente las tiras de LED. Me tomó un momento descubrir la mejor manera de conectar los pines de señal a los aisladores, pero a través de prueba y error encontré la orientación correcta. Acabo de usar una placa prototipo estándar ya que solo estaba construyendo una y descubrir un patrón de trazado me habría llevado más tiempo del que valía. La parte superior de la placa de circuito se ve muy bien, pero la parte inferior parece un poco desordenada, pero al menos es funcional.

El diseño básico comienza con la entrada de energía de 12V desde una fuente conmutada (un cable que solo está encendido cuando la motocicleta está encendida). Un diagrama de cableado realmente puede ayudar a encontrar este cable. Este se alimenta a un lado del regulador de voltaje. Un capacitor de 0.33 uF une esta entrada a tierra en el regulador de voltaje que luego se retroalimenta a tierra en la motocicleta. La salida del regulador de voltaje tendrá un capacitor de 0.1uF conectado a tierra. Estos condensadores ayudan a suavizar el voltaje del regulador. Si no puede encontrarlos en la imagen de la placa de circuito, están debajo del regulador de voltaje. Desde allí, la línea de 5V va al Vin en el Arduino, al pin de alimentación que alimentará las tiras de LED, y dos al lado de la Fuente del optoaislador que alimentará a los pines de Arduino proporcionando la señal de 5V necesaria.

En cuanto a los optoaisladores, hay dos lados: uno con un LED IR y el otro con un transistor con detector IR. Queremos usar el lado del LED IR para medir la señal de 12V. Dado que el LED tiene un voltaje directo de 1,2 V, necesitamos una resistencia limitadora de corriente en serie. 12V - 1.2V = 10.8V y para ejecutar el LED a 18 mA (siempre me gusta ejecutar menos de 20 mA por razones de por vida), necesitará una resistencia de R = 10.8V / 0.018A = 600 ohm. Los voltajes en los vehículos también tienden a ser más altos, potencialmente hasta 14 V, por lo que es mejor planificar eso, que es de aproximadamente 710 ohmios, aunque 700 sería más que razonable. La salida para el lado del LED luego se retroalimenta a tierra. Para el lado de salida del optoaislador, la entrada usará la señal de 5V del regulador y luego la salida se conectará a otra resistencia antes de ir a tierra. Esta resistencia solo necesita ser de alrededor de 10k - 20k ohmios, al menos eso es lo que mostró mi hoja de datos. Esto proporcionará una medición rápida de la señal, ya que no estamos ante un entorno ruidoso. La salida al pin Arduino saldrá entre la resistencia y la salida del optoaislador de modo que cuando la señal esté apagada, el pin sea bajo y cuando la señal esté en el pin sea alta.

Las tiras de luces LED tienen tres cables asociados: energía, tierra y datos. La potencia debe ser de 5 V. Este proyecto usa 12 LED en total (aunque tengo más LED en las tiras, pero solo uso cada tercer LED) y cada uno toma 60 mA cuando la luz blanca se usa con el brillo máximo. Esto da un total de 720 mA. Estamos dentro de la potencia de salida del regulador de voltaje, así que estamos bien. Solo asegúrese de que el cable sea de un calibre lo suficientemente grande para manejar la energía, utilicé un cable ethernet Cat 6 de calibre 24. El cable Ethernet era algo que tenía sentado y tiene 8 cables codificados por colores, por lo que funcionó bien para este proyecto. Los únicos cables que luego deben ir a la caja superior son la alimentación y la tierra (que se dividen entre las tiras) y dos líneas de datos (una para cada tira).

El resto del cableado se conecta a los pines del arduino y lo alimenta. Los pines que se utilizaron para este proyecto fueron los siguientes:

  1. Vin - conectado a 5V
  2. Gnd - conectado a tierra
  3. Pin2 - conectado a la línea de datos de la tira izquierda
  4. Pin3 - conectado a la línea de datos de la tira derecha
  5. Pin4 - conectado a la señal de freno del optoaislador
  6. Pin5 - conectado a la señal de giro a la izquierda del optoaislador
  7. Pin6 - conectado a la señal de giro a la derecha del optoaislador

Paso 2: cableado e instalación

Cableado e instalación
Cableado e instalación
Cableado e instalación
Cableado e instalación
Cableado e instalación
Cableado e instalación

Una vez que se construye el circuito, llega el momento de conectarlo en su lugar. Usando su esquema de cableado para su bicicleta, deberá ubicar lo siguiente:

  • Fuente de alimentación conmutada
  • Suelo
  • Señal de freno en
  • Señal de giro a la izquierda en
  • Señal de giro a la derecha en

Para el mío, había un solo enchufe que tenía todos estos, así que solo lo usé. Con el tiempo suficiente, podría haber podido encontrar el mismo estilo de enchufe y simplemente hacer un módulo de enchufe, pero no lo hice, así que simplemente quité el aislamiento en algunos lugares y le soldé el nuevo cable. Usé enchufes en estas conexiones empalmadas para poder quitar el resto si alguna vez lo necesitara en el futuro. Desde allí coloqué el Arduino, que ahora está en una caja de proyecto sellada, debajo del asiento donde lo adjunté. Luego, el cable de salida corre a lo largo del marco del bastidor hasta un enchufe impermeable, luego ingresa a la caja y corre a lo largo de la parte posterior hasta la tapa donde se divide para cada lado. Los cables corren a lo largo del interior de la tapa hasta el punto donde están las conexiones para los LED. El cable se ayuda en su lugar usando bridas unidas a soportes de bridas para exteriores con un respaldo adhesivo. Puede encontrarlos en la sección de instalación de cables en una tienda de mejoras para el hogar.

Usé dos enchufes mini JST en las tiras de LED porque necesitaba un enchufe lo suficientemente pequeño como para pasar por un orificio de diámetro mínimo y porque quería asegurarme de que hubiera suficiente cable para manejar los requisitos actuales. Una vez más, puede haber sido una exageración y no tenía enchufes pequeños con tres cables a mano. El orificio en la caja para que pasen los cables de la tira de luz se selló para mantener el agua fuera. En cuanto al posicionamiento de las tiras de LED, debido a que hay un ligero desajuste en el espaciado (había una diferencia de aproximadamente 1 - 1,5 mm en el espaciado entre los orificios del reflector y los LED), los coloqué de modo que dividieran la diferencia entre el LED y el agujero tanto como sea posible. Luego utilicé pegamento caliente para pegarlos en su lugar y sellador para sellar completamente el área. Las tiras de LED son impermeables, por lo que no hay problema si se mojan. Aunque parece mucho para instalar, esto hace que el sistema sea más fácil de quitar en el futuro o se necesitan partes reemplazadas porque podría suceder.

Paso 3: el código

Mi código fuente debe estar al comienzo de este Instructable. Siempre comento mucho mi código para que sea más fácil de entender más adelante. Descargo de responsabilidad: no soy un escritor de código profesional. El código fue escrito en un método que fue más fácil de poner en marcha primero y se hicieron algunas mejoras, pero sé que podría ser más refinado. También estoy usando una gran cantidad de la función delay () para medir el tiempo, lo que no es tan ideal. Sin embargo, las señales que está recibiendo la unidad no son señales rápidas en comparación, por lo que todavía me sentí justificado para mantenerlas usando algo como millis (). También soy un padre y esposo muy ocupado, por lo que dedicar tiempo a mejorar algo que finalmente no cambiará la función no es una prioridad en la lista.

Para este proyecto, solo se requiere una biblioteca que es la biblioteca FastLED. Tiene todo el código para controlar las tiras de LED tipo WS2811 / WS2812B. A partir de ahí, cubriré las funciones básicas que se utilizarán.

La primera, además de las definiciones estándar, es declarar sus dos tiras. Utilizará el siguiente código para cada tira:

FastLED.addLeds (leds [0], NUM_LEDS);

Esta línea de código configura el Pin 2 define esta tira como la tira 0 con el número de LED definido por la constante NUM_LEDS, que en mi caso se establece en 16. Para definir la segunda tira, el 2 se convertirá en 3 (para el pin3) y la tira se etiquetará como tira 1.

La siguiente línea que será importante es la definición del color.

leds [0] [1] = Color_high CRGB (r, g, b);

Esta línea de código se usa aunque en diferentes aspectos (la mayoría de mi uso es una constante). Básicamente, este código envía un valor a cada uno de los canales LED (rojo, verde, azul) que define cada brillo. El valor de brillo se puede definir con un número de 0 a 255. Al cambiar el nivel de brillo de cada canal, puede definir diferentes colores. Para este proyecto, quiero un color blanco para mantener la luz lo más brillante posible. Entonces, los únicos cambios que hago es establecer el mismo nivel de brillo en los tres canales.

El siguiente conjunto de códigos se utiliza para iluminar individualmente cada luz. Tenga en cuenta que para cada tira, cada LED tiene una dirección que comienza en 0 para el más cercano a la conexión de la línea de datos hasta el número más alto de LED que tiene menos 1. Ejemplo, estas son 16 tiras de LED, por lo que el más alto es 16 - 1 = 15. La razón de esto es que el primer LED está etiquetado como 0.

for (int i = NUM_LEDS-1; i> -1; i = i - 3) {// Esto cambiará la luz por cada tercer LED pasando del último al primero. leds [0] = Color_bajo; // Establece el color de la tira 0 LED en el color elegido. leds [1] = Color_low; // Establece el color de la tira 1 LED en el color elegido. FastLED.show (); // Muestra los colores establecidos. leds [0] = CRGB:: Negro; // Desactive el color establecido en la preparación para el siguiente color. leds [1] = CRGB:: Negro; retraso (150); } FastLED.show (); // Muestra los colores establecidos.

La forma en que funciona este código es que se usa una variable (i) dentro de un bucle for como la dirección de LED que luego se referencia al número total de LED (NUM_LEDS). La razón de esto es que quiero que las luces comiencen al final de la tira en lugar de al principio. La configuración se envía a ambas tiras (leds [0] y leds [1]) y luego se emite un comando para mostrar el cambio. Después de eso, esta luz se apaga (CRGB:: Black) y la siguiente luz se enciende. La referencia negra es un color específico en la biblioteca FastLED, por lo que no tengo que emitir 0, 0, 0 para cada canal, aunque harían lo mismo. El bucle For avanza 3 LED a la vez (i = i-3) ya que solo estoy usando todos los demás LED. Al final de este bucle, la secuencia de luces pasará de un LED al siguiente con solo uno encendido por tira, una especie de efecto de Knight Rider. Si desea mantener cada luz encendida para que la barra se acumule, simplemente debe eliminar las líneas que apagan los LED, lo que sucede en el siguiente conjunto de código en el programa.

for (int i = 0; i <dim; i ++) {// Desvanece rápidamente las luces al nivel de luz corriente. rt = rt + 1; gt = gt + 1; bt = bt + 1; for (int i = 9; i <NUM_LEDS; i = i +3) {// Esto encenderá las últimas tres luces de la luz de posición. leds [0] = CRGB (rt, gt, bt); // Establece el color de la tira 0 LED en el color elegido. leds [1] = CRGB (rt, gt, bt); // Establece el color de la tira 1 LED en el color elegido. } FastLED.show (); retraso (3); }

El último ejemplo de código que utilizo para los LED es un bucle de desvanecimiento. Aquí, utilizo ranuras temporales para el brillo de cada canal (rt, gt, bt) y las incremento en 1 con un retraso entre cada muestra para lograr la apariencia que quiero. También tenga en cuenta que este código solo cambia los últimos tres LED, ya que se desvanecen en las luces de marcha, por lo que comienza en 9 en lugar de 0.

El resto del código LED son iteraciones de estos. Todo lo demás se centra en buscar una señal en los tres cables diferentes. El área Loop () del código busca luces de freno, que destellarán una vez antes de permanecer encendidas (esto es ajustable si se desea) o buscar señales de giro. Para este código, debido a que no podía asumir que las luces de giro a la izquierda y a la derecha se encenderían exactamente al mismo tiempo para detectar peligros, primero hago que el código busque cualquiera, luego, después de un pequeño retraso, verifico si ambos están encendidos indicando las luces de emergencia están encendidas. La única parte complicada que tuve fueron las señales de giro porque la luz se apagará por un período de tiempo, entonces, ¿cómo puedo saber la diferencia entre la señal aún encendida pero en el período apagado y una señal cancelada? Lo que se me ocurrió fue implementar un bucle de retardo que está configurado para continuar más tiempo que el retardo entre destellos de señal. Si la señal de giro aún está encendida, el bucle de señal continuará. Si la señal no vuelve a activarse cuando finaliza el retardo, vuelve al inicio del bucle (). Para ajustar la duración del retardo, cambie el número de lightDelay constante recordando por cada 1 en lightDelay el retardo cambia en 100ms.

while (digitalRead (leftTurn) == LOW) {for (int i = 0; i <lightDelay; i ++) {leftTurnCheck (); if (digitalRead (leftTurn) == HIGH) {leftTurnLight (); } retraso (100); } for (int i = 0; i <NUM_LEDS; i = i +3) {// Esto cambiará la luz por cada tercer LED pasando del último al primero. leds [0] = CRGB (0, 0, 0); // Establece el color de la tira 0 LED en el color elegido. } for (int i = 9; i <NUM_LEDS; i = i +3) {// Esto configurará las luces de marcha que solo usan las últimas tres. leds [0] = Color_bajo; // Establece el color de la tira 0 LED en el color elegido. } FastLED.show (); // Retorno de la configuración de salida; // Una vez que la señal de giro ya no esté encendida, regrese al bucle. }

Con suerte, el resto del código se explica por sí mismo. Es solo un conjunto repetido de verificar y actuar sobre las señales.

Paso 4: resultados

Resultados
Resultados

Lo sorprendente fue que este sistema funcionó la primera vez que lo conecté a la bicicleta. Ahora, para ser justos, lo probé mucho en el banco antes de esto, pero aún esperaba tener un problema o un ajuste. Resulta que no necesitaba hacer ningún ajuste en el código ni en las conexiones. Como puede ver en el video, el sistema pasa por la secuencia de inicio (que no es necesario que tenga), luego se activa de manera predeterminada en luces de marcha. Después de eso, busca los frenos, en cuyo caso iluminará todos los LED a su máximo brillo y los destellará una vez antes de permanecer encendidos hasta que se suelten los frenos. Cuando se usa una señal de giro, hice un efecto de desplazamiento para el lado en el que se indica el giro y el otro lado será luces de marcha o luz de freno si está encendida. Las luces de emergencia simplemente parpadearán al mismo tiempo que las otras luces.

Con suerte, con estas luces adicionales, seré más visible para otras personas. Por lo menos, es una buena adición para hacer que mi caja se destaque un poco más que otras mientras brinda utilidad. Espero que este proyecto también sea útil para otra persona, incluso si no está trabajando con la iluminación de la caja superior de una motocicleta. ¡Gracias!

Recomendado: