Programar luces LED y encenderlas desde tu RC

Programando luces LED

Es momento de hacer un sistema de luces que se puedan controlar desde el radio control, para ello vamos a necesitar una tarjeta de Arduino o alguna parecida que podamos programar para interpretar las señales de nuestro receptor y accionar tareas, en este caso encender y apagar luces o ejecutar una secuencia de luces.

En este video se muestra el proceso y el resultado final en funcionamiento.

Para lograr esto debemos tener conocimientos de Arduino y lo básico en programación con Arduino IDE, para mantener el proyecto liviano vamos a usar una tarjeta de Arduino nano o la pro mini, toma en cuenta que para programar la “pro mini” necesitas un FTDI y también es recomendable usar la versión de 5V y no la de 3.3V.

//PWM_luces_drones_V1.1
//Este proyecto fue desarrollado como parte de una serie de videos del canal de YouTube de Joyplanes RC
//para ver el video puedes visitarlo en el siguiente enlace, https://youtu.be/9SAZXZqZvb4
//más información sobre este código se puede ver en el post 
//dedicado a este proyecto: https://joyplanes.com/programar-luces-led-arduino-drones/
//Este código fue creado por Joyvel Osorio (principiante de programación y electrónica) y es de distribución gratuita
//si se encuentran errores o formas para mejorar este programa por favor hágalo para ayudar a la comunidad y 
//notifique de los cambios a box@joyplanes.com

/*pwm read*/
/*lectura de pwm (cambiar pines acorde a tu configuracion)*/
int pwm = 3;
int pwm2 = 5;
/*mode and mode2 hold the pwm and pwm2 values*/
/*mode y mode2 contienen los valores de pwm y pwm2*/
unsigned long mode;
unsigned long mode2;

/*led ports*/
/*Puertos luces LED*/
int led1 = 13;
int led2 = 11; /*led2 es el led potente principal (usa PWM para el fade)*/
int led3 = 12;

/* fade int's */
/*fadeamount o cantidad de difuminacion es el valor que se suma en cada ciclo
mayor numero significa un cambio mas rapido de 0 a 255, brigness debe dejarse en 0*/
int brightness = 0;    // how bright the LED is - inicializando
int fadeAmount = 15;    // how many points to fade the LED by - por cuantos puntos se hace el fade

/*conditions for different modes (change the range or create more as needed)*/
/*condiciones de los diferentes modos (cambia los rangos o crea nuevos como sea necesario)*/
#define caso0 mode <= 1000 && mode2 <= 1000
#define caso1 mode2 <= 1000 && mode >= 1900
#define caso2 mode2 >= 1390 && mode2 <= 1500 && mode >= 1900
#define caso3 mode >= 1900 && mode2 >= 1900
#define caso4 mode2 >= 1900 && mode <= 1000 
#define caso5 mode2 >= 1390 && mode2 <= 1500 && mode <= 1000

void setup() 
{

  // set the digital pins as output for leds and pwm as input.
  // Inicializa los pines led como salidas y los pwm como entrada.
  pinMode(pwm,INPUT);
  pinMode(pwm2,INPUT);
  pinMode(led1, OUTPUT);      
  pinMode(led2, OUTPUT);  
  pinMode(led3, OUTPUT);

  /*quitar barras diagonales a la linea de abajo para activar el 
   debug y ver resultados en el ordenador*/
  //Serial.begin(9600);

  /*indicador de inicializacion*/
  /*esto genera un flash lento de luz indicando que se ha iniciado con éxito*/
  int a;
 for(a = 0; a <= 255; a = a + 35) { 
analogWrite(led2, a); // set the brightness of pin 9: // escribe el brillo del led 
delay(30); // wait for 30 milliseconds to see the dimming effect // transcurren 30 millisegundos entre cada cambio 
} 
for(a = 255; a >= 0; a = a - 15)
  {
     analogWrite(led2, a); // set the brightness of led2 pin: // escribe el brillo del led2   
     delay(30);   // wait for 30 milliseconds to see the dimming effect // transcurren 30 millisegundos entre cada cambio                         
  }
  /*fin de iniciacion*/

}

void loop()
{
mode = pulseIn(pwm, HIGH); /*mode es igual a la lectura de sñal pwm y pwm2*/
mode2 = pulseIn(pwm2, HIGH);

/*quitar barras diagonales a las lineas de abajo para activar
debuging y ver los valores de "mode" y "mode2" en el ordenador*/
//Serial.println(mode);
//Serial.println(mode2);

if (caso0) {

 digitalWrite(led1,LOW);
 digitalWrite(led2,LOW);
 digitalWrite(led3,LOW);
}

/*mode2*/

if (caso1) {

 digitalWrite(led1,LOW);
 digitalWrite(led2,HIGH);
 delay(20);
 digitalWrite(led2,LOW);
 delay(80);
 digitalWrite(led2,HIGH);
 delay(20);
 digitalWrite(led2,LOW);
 delay(80);
 digitalWrite(led2,HIGH);
 delay(20);
 digitalWrite(led2,LOW);
 delay(700);
 digitalWrite(led1,HIGH);
 digitalWrite(led3,HIGH);
 delay(50);
 digitalWrite(led1,LOW);
 digitalWrite(led3,LOW);
 delay(100);
 digitalWrite(led1,HIGH);
 delay(50);
 digitalWrite(led1,LOW);
 digitalWrite(led2,HIGH);
 delay(50);
 digitalWrite(led2,LOW);

 delay(700);

  }    

/*mode3*/

if (caso2) {

    analogWrite(led2, brightness);

    // change the brightness for next time through the loop:
    brightness = brightness + fadeAmount;

   // reverse the direction of the fading at the ends of the fade:
    if (brightness <= 0 || brightness >= 200) {
    fadeAmount = -fadeAmount;
    }

  }

/*mode4*/

  if (caso3) {
  digitalWrite(led2,HIGH);
  digitalWrite(led1,LOW);
  digitalWrite(led3,LOW);
    }

 /*mode5*/

 if(caso4){
  digitalWrite(led2,LOW);
  digitalWrite(led3,LOW);
  digitalWrite(led1,HIGH);
 }

 /*mode6*/

 if(caso5){
  digitalWrite(led1,LOW);
  digitalWrite(led3,LOW);
  digitalWrite(led2,HIGH);
  delay(20);
  digitalWrite(led2,LOW);
  delay(400);
 }

}
Escribe un comentario