Si aún no eres usuario, puedes crear una cuenta o entrar
Video Tutorial Arduino: LED RGB y Pulsadores

Ésta semana continuamos con la segunda edición de nuestro video tutorial sobre Arduino!!

Hoy continuamos un poco sobre la linea básica, ésta vez utilizaremos un diodo LED de tres colores (RGB) junto con tres pulsadores como método de entrada.

Podremos variar la intensidad de cada color mediante los botones, por lo que manejaremos el inicio de un dispositivo de entrada por lo que nuestro montaje responde a "estimulos" exteriores y no sólo nos basamos en encender un LED.

Cómo sé que estais ansiosos, no os entretengo más y os dejo la segunda edición en video a continuación...

Cómo siempre y por supuesto, estamos también ansiosos de ver vuestros avances y por supuesto vuestras sugerencias que nos fueron llegando a kilos toda ésta semana, asi que dejar vuestros comentarios y también podeis comenzar a calentar motores ya que en la siguiente edición os daremos un poco más de caña con un proyecto algo más complejo y geek... asi que atentos!




Video Tutorial Arduino: Led RGB y Pulsadores from BricoGeek on Vimeo.

Lista de materiales y descargas

Código fuente:

/***********************************
  Tutorial Diodos LED Tricolor y Pulsadores  
  Oscar Gonzalez - Marzo 2009
  www.BricoGeek.com
  
  Debes conectar el Diodo LED RGB según los pines de configuración indicados como
  "ledRojo", "ledAzul" y "ledVerde". Lo mismo para los botones, con sus respectivas
  resistencias como indicado en el video tutorial.
  
  Básicamente se trata de enviar un valor de entre 0 y 254 a cada color mediante la función analogWrite() a la cual
  indicamos el PIN a utilizar y el valor a enviar. Podemos utilizar otros pines, pero es muy importante utilizar los pines
  indicados como "PWM" ya que de no utilizarlo, no podremos variar el color y el programa no tendrá efecto alguno.
  
  Utiliza éste código como mejor te guste ya que es totalmente libre, aunque siempr ese agradece algún comentario
  sobre el autor original! :)
  
 ************************************/

// Define los pines a utilizar para cada color
int ledRojo=3;
int ledAzul=5;
int ledVerde=6;

// Guarda los valores a signar a cada color (0-254)
int ValorRojo=254;
int ValorVerde=254;
int ValorAzul=254;

// Define los pines utilizados por los botones
int BotonSelect = 8;
int BotonReduce = 9;
int BotonIncrementa = 10;

int ledSeleccionado = 0;
 
void setup() 
{ 

  // Hay que indicar que lo pines utilizados por los botones son de ENTRADA
  pinMode(BotonSelect, INPUT);
  pinMode(BotonReduce, INPUT);
  pinMode(BotonIncrementa, INPUT);
  
  analogWrite(ledRojo, 255);  
} 
 
// Valor por defecto: Rojo
// 0= Rojo, 1=Verde, 2=Azul
int pinLed = 0;
 
void loop() 
{ 
     
   int valorLed = 0;

   if (digitalRead(BotonSelect) == HIGH) 
   {
      pinLed++;  
      
      // Para no pasarnos de vueltas
      if (pinLed > 2) { pinLed=0; }
   
      // Apagamos todos los LED ya qu eluego se mostrará sólo el led seleccionado
      analogWrite(ledRojo, 0);
      analogWrite(ledVerde, 0);
      analogWrite(ledAzul, 0);      
      
      // Esperamos a que el boton se suelte
      while (digitalRead(BotonSelect) == HIGH) {  }            
      delay(10); // Esperamos un poquito más...
   }
  
   // Comprobamos si se incrementa el valor
   if (digitalRead(BotonIncrementa) == HIGH) 
   { 
     if (pinLed == 0) { ValorRojo++; }
     if (pinLed == 1) { ValorVerde++; }
     if (pinLed == 2) { ValorAzul++; }
     
     delay(5);
    }
    
   // Comprobamos si se reduce el valor
   if (digitalRead(BotonReduce) == HIGH) 
   { 
     if (pinLed == 0) { ValorRojo--; }
     if (pinLed == 1) { ValorVerde--; }
     if (pinLed == 2) { ValorAzul--; }
     
     delay(5);
    }        
    
    // Esto para no pasarse de vueltas en el valor de salida (0-254)
    if (ValorRojo > 254) { ValorRojo=254; }
    if (ValorRojo < 0) { ValorRojo=0; }
    
    if (ValorVerde > 254) { ValorVerde=254; }
    if (ValorVerde < 0) { ValorVerde=0; }

    if (ValorAzul > 254) { ValorAzul=254; }
    if (ValorAzul < 0) { ValorAzul=0; }    

  // Actualiza el valor del color seleccionado
  if (pinLed == 0) { analogWrite(ledRojo, ValorRojo); }
  if (pinLed == 1) { analogWrite(ledVerde, ValorVerde); }
  if (pinLed == 2) { analogWrite(ledAzul, ValorAzul); }
  
}

Debes conectar el Diodo LED RGB según los pines de configuración indicados como "ledRojo", "ledAzul" y "ledVerde". Lo mismo para los botones, con sus respectivas resistencias como indicado en el video tutorial.

Básicamente se trata de enviar un valor de entre 0 y 254 a cada color mediante la función analogWrite() a la cual indicamos el PIN a utilizar y el valor a enviar. Podemos utilizar otros pines, pero es muy importante utilizar los pines indicados como "PWM" ya que de no utilizarlo, no podremos variar el color y el programa no tendrá efecto alguno.

Utiliza éste código como mejor te guste ya que es totalmente libre, aunque siempre se agradece algún comentario sobre el autor original! :)


Comparte esto con tus amigos!

Comentarios:


muma
Enviado el 07/03/2009 (21:17)
Hola, buen trabajo, la verdad es que está muy bien para engrosar los básicos, solo una cosilla, si en los siguientes podríais darle un poco más de importancia a el montaje.

Por lo demás un gran tutorial, con trabajos así da gusto trabajar.

Ramon
Enviado el 08/03/2009 (12:54)
Estupendos tutoriales, seguid así, me esta ayudando mucho a empezar con la electronica.

A ver si podeis comentar como usar algunos de los componentes que vendeis como el LCD serial 16x2 blanco sobre negro de 3 conectores que no se por ejemplo que libreria usar para el arduino. Estaria bien que incluyeseis codigos de ejemplo junto a los productos para practicar. Gracias.

Outl4w
Enviado el 08/03/2009 (15:40)
De nuevo enhorabuena por el trabajo, espero ansioso el proyecto ese más geek que comentas.
Sólo un apunte, así como me ha gustado que en éste ya colgaras el código para verlo y/o ejecutarlo creo que sería una gran idea mostrar en el video tutorial el esquema eléctrico del montaje, no hace falta que te mates que ya bastante haces con tal de que lo hagas a boli en una hoja como cuando explicas lo del interruptor llega.
Como siempre insistir en que no es ninguna exigencia(solo faltaría) sino más bien una humilde opinión por si te sirve de ayuda.
Saludo

Jubjub
Enviado el 09/03/2009 (23:50)
Gran aporte, a ver si puedo empezar a practicar en poco con mi arduino nueva, que estoy impaciente con tanto ver videotutoriales y poca accion ;P

Esperare con impaciencia ese proyecto mas geek que dices ^^


DunDI
Enviado el 13/03/2009 (17:24)
Los tutoriales están muy bien, aunque como han dicho antes, falta un poco más de atención en el montaje.

Estaría bien que explicaras el uso de timers en arduino (hacer referencias al datasheck del micro), ya que programar con poolling no es lo idóneo.

Saludos

Fernando
Enviado el 07/04/2009 (19:59)
Muy buenos estos videotutoriales, espero que continuen con una dificultad progresiva.

Kingfalo
Enviado el 23/05/2009 (19:09)
Enhorabuena por el tutorial, me he quedao con ganas de más, ja. Ayer (que recibí mi arduino) para practicar hice el led parpadeante, el coche fantástico y alguna cosita más.

PD, cuando lo maneje mejor ya subiré algo!!

luis
Enviado el 26/06/2009 (21:15)
Hola gracias por el tutorial. lo único es que no podemos ver cómo van exactamente las resistencias del led.


Saludos

Wilson
Enviado el 04/09/2009 (02:54)
Hola somo unos estudiantes de ing civil en informatica y vimos tu gran tutorial sobre la intesidad de los led. Devido a tu tutorial nos motivamos a crear un ascensor a escala que vaya a un nivel solicitado dependiendo del pulsador presionado, logramos hacer correr el motor programando a travez de la arduino, pero no sabemos en que lugar colocar los pulsadores a la arduino y como programarlos para que el motor de tantas revoluciones en cierta direccion y luego detenerse despues de cierto tiempo.

Si no seria mucho pedir, nos podrias enviar un esquema o video donde nos expliques como poder lograr nuestro proyecto.

Gracias de antemano.

P.D: Estamos utilizando la arduino atmega328 (Duemilanove)

Atte:

Wilson

dani agenjo
Enviado el 04/01/2010 (19:03)
se puede hacer que se encienda con 2 colores a la vez ybajar la intensidad?
ejemplo lila= rojo + azul


CARLOS LOPEZ
Enviado el 10/02/2010 (01:49)
hola no tienes algun kid que genere video con una matrix de diodos led tricolor asi sea vaja resolucion pero que se vea algo de video ,


francisco antonio maldonado rubi
Enviado el 09/10/2010 (13:07)
Una duda vamos a ver en los manuales e visto que lo que hace falta asignar en el void setup con las salidas porque los pines del arduino vienes de base como entradas entonces, porque en este caso se ponen las entradas y las salidas no se ponen un saludo

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 11/10/2010 (09:43)
Hola Francisco,
Siempre es recomendable establecer los pines de la forma correcta (INPUT o OUTPUT) en función de para qué los vas a utilizar. Es mejor hacerlo uno mismo en lugar de presuponer que lo hace el compilador (que a veces no es así).

Saludos!

francisco antonio maldonado rubi
Enviado el 11/10/2010 (14:32)
Buenas soy nuevo en este tipo de programación yo programo automatas y es un poco diferente, recientemente he hecho este programa y quisiera saber si tiene algo mal o se puede hacer de una forma mas simple, se trata de un conmutador como el de las habitaciones que tienen dos pulsadores de luz, si le damos a uno de los dos se enciende la luz y luego si le damos a uno de los dos se apaga y asi sucesivamente espero vuestra ayuda un saludo:
int LED = 13;
int FirstBoton = 8;
int SecondBoton = 9;

void setup()
{
pinMode(LED, OUTPUT);
pinMode(FirstBoton, INPUT);
pinMode(SecondBoton, INPUT);
}

void loop()
{
if (digitalRead(FirstBoton) == HIGH)
{
if (digitalRead(LED) == HIGH)
{
digitalWrite(LED, LOW);
}
else (digitalRead(LED) == LOW)
{
digitalWrite(LED, HIGH);
}
while (digitalRead(FirstBoton) { }
}
if (digitalRead(SecondBoton) == HIGH)
{
if (digitalRead(LED) == HIGH)
{
digitalWrite(LED, LOW);
}
else (digitalRead(LED, LOW)
{
digitalWrite(LED, HIGH)
}
while (digitalRead(SecondBoton){ }
}
}

Manuel Jesús Ramos Pérez
Enviado el 11/10/2010 (18:38)
Saludos, Francisco.
Que quede claro que tampoco yo tengo mucha idea, pero quizás sea más apropiado algo del tipo:

int LED = 13;
int FirstBoton = 8;
int SecondBoton = 9;
int estado = 0; // Estado inicial del led

void setup()
{
pinMode(LED, OUTPUT);
pinMode(FirstBoton, INPUT);
pinMode(SecondBoton, INPUT);
}

void loop()
{
// Esperamos a que se pulse algo:
while (digitalRead(FirstBoton) == LOW && digitalRead(SecondBoton) == LOW) { }
// Si se ha pulsado algo (me es igual qué botón) cambia el estado:
if (estado == 0) {
estado = 1;
digitalWrite(LED, HIGH);
}
else {
estado = 0;
digitalWrite(LED, LOW);
}
}

Pero te advierto una cosilla: los tiempos de ejecución son muy rápidos, por lo que es posible que mientras tú pulsas, el micro cambie el estado del led 3 ó 4 veces (o más), por lo que no verás nada.
Lo puedes resolver colocando un delay detrás del if...else, no es muy profesional, pero igual te vale.


Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 11/10/2010 (18:52)
Hola,
Para evitar los rebotes del botón, se suele utilizar un bebounce. Aqui un ejemplo:

http://www.arduino.cc/en/Tutorial/Debounce

francisco antonio maldonado rubi
Enviado el 11/10/2010 (22:41)
mm una cosa la funcion millis no termino de entenderla alguien podria explicarme en que consiste exactamente perdon si estoy siendo muy pesado ...

Manuel Jesús Ramos Pérez
Enviado el 12/10/2010 (06:31)
La función millis() devuelve un entero largo sin signo (32 bits, un valor desde 0 a 2^32-1), que representa el tiempo en milisegundos transcurridos desde que comenzó la ejecución del programa actual.
Más info en: http://arduino.cc/en/Reference/Millis

francisco antonio maldonado rubi
Enviado el 13/10/2010 (00:35)
Buenas he estado mirando algunas cosas que se pueden hacer con matrices de led pero no he conseguido encontar ningun manual en español que explique la filosofia que se ha de seguir para poder programarlo y quisiera saber si alguno sabe de alguna pagina o enlace donde pudiera ver algun manual de como programar una matriz de led

Alberto Franco Martín
Enviado el 07/02/2011 (20:01)
Hola, retomo la pregunta que hizo dani agenjo:
"se puede hacer que se encienda con 2 colores a la vez y bajar la intensidad?
ejemplo lila= rojo + azul"
Seria interesante conseguir diferentes colores mezclando los básicos.
Muy buen tutorial y gracias de antemano

Ricardo Monge
Enviado el 14/02/2012 (22:36)
Bueno, me estreno por BricoGeek aportado algo de ayuda.
Tratando de reproducir este brico de led RGB he echado de menos, como algunos por aquí, un plano de montaje.

Como al final he conseguido hacerlo os dejo el plano por si ayuda a alguien que llegue aquí empezando con Arduiono.
El plano está aquí:
http://www.flickr.com/photos/76669383@N06/6877579431/in/photostream/lightbox/


Enviar comentario

Debes disponer de una cuenta de usuario para publicar un comentario.

Si aún no dispones de una cuenta, únete a la comunidad de BricoGeek.com y registrate ahora, te llevará tan solo un minuto y es gratis. También puedes identificate si ya dispones de una cuenta de usuario.
rss

Conecta con BricoGeek.com

Canales sociales

Nos gusta mucho estar en contacto con nuestros lectores y saber más acerca de sus proyecto e inventos.


También puedes sugerir una noticia en el blog
Tienda de Electrónica DIY y Arduino

Lo que se cuece...

Comentarios recientes Más comentado Top noticias
Feed de novedades

Tienda BricoGeek.com

Electrónica para tus proyectos!

Estás preparando un proyecto o quieres iniciarte en la electrónica? Encuentra todo lo que necesitas en la tienda.

Visita la tienda BricoGeek!

La familia de BricoGeek.com

Conoce toda la gente que hace que BricoGeek.com sea posible cada día:

Alejandro Mallo
Colaborador
Puedes hacer click sobre un autor para ver todas sus noticias


Etiquetas más populares:

Descubre todo el contenido de bricogeek.com con las etiquetas más populares:


© BricoGeek.com 2005-2014

Demuestra lo que sabes hacer!