programas de arduino con rgb

19

Upload: maria-augusta-penaherrera-cale

Post on 23-Oct-2015

75 views

Category:

Documents


0 download

DESCRIPTION

PRACTICA DE ARDUINO CON LED RGB

TRANSCRIPT

Page 1: Programas de Arduino Con Rgb
Page 2: Programas de Arduino Con Rgb
Page 3: Programas de Arduino Con Rgb

Programa, que lee los datos del potenciómetro mediante el puerto serie (sin usar un LED) y lo muestra en el equipo.//   http://www.fibidi.com/?p=321   // void setup() {  Serial.begin(9600);     // initialize serial communication at 9600 bits per second} void loop() {  int sensorValue = analogRead(A0);   // read the input on analog pin 0  Serial.println(sensorValue);        // print out the value you read  delay(1);                           // delay in between reads for stability}  //   http://www.fibidi.com/?p=321   //

Programa, que lee los datos del potenciómetro (en el rango de 0 a 1.023), los ajusta a la gama de puertos PWM (0-255) y controla el brillo de la luz LED.

//   http://www.fibidi.com/?p=321   // int led = 6;  int i; void setup() {  Serial.begin(9600);  pinMode(led, OUTPUT);} void loop() {  int sensorValue = analogRead(A0);  i = map(sensorValue, 0, 1023, 0, 255);  Serial.println(i);  analogWrite(led, i);  delay(1); }  //   http://www.fibidi.com/?p=321   //

Page 4: Programas de Arduino Con Rgb

Programa, en el que cada uno de los colores (rojo, verde, azul) está soportado por un potenciómetro separada. Cada uno de los valores de los colores se configuran de forma independiente. Esto le permite obtener más de 16,5 millones de combinaciones de colores.

//   http://www.fibidi.com/?p=321   //int red = 6; int green = 5; int blue = 3; int i,j,k; void setup() {  Serial.begin(9600);  pinMode(red, OUTPUT);  pinMode(green, OUTPUT);  pinMode(blue, OUTPUT);} void loop() {  int sensorred = analogRead(A0);  i = map(sensorred, 0, 1023, 0, 255);  Serial.<span class="iy8p1qb696i7" id="iy8p1qb696i7_4">print</span>(i);  Serial.print(" ");  analogWrite(red, i);     int sensorgreen = analogRead(A1);  j = map(sensorgreen, 0, 1023, 0, 255);  Serial.print(j);  Serial.print(" ");  analogWrite(green, j);     int sensorblue = analogRead(A2);  k = map(sensorblue, 0, 1023, 0, 255);  Serial.print(k);  Serial.print(" ");  analogWrite(blue, k);        delay(1);     Serial.println();}

Page 5: Programas de Arduino Con Rgb

Fritzing = spiffy

Yo estaba teniendo un montón de problemas para visualizar lo que tengo que hacer para conseguir algunas de las cosas que quiero crear todo improvisado correctamente en un circuito , por no hablar de saber qué partes de lo que necesito. Encontré este sitio impresionante , Fritzing.org que realmente ayuda ! Puede descargar el programa, el cual le permite hacer diseños que buscan Super Slick visualmente ( o como un esquema , si eso es más fácil para usted !) . Así que al menos ahora puedo hacer circuitos de aspecto profesional para demostrar que ustedes , y espero que alguien me puede decir si van a hacer teh asplode robut o no! Para conseguir la caída de ella , hice un esquema para un pequeño circuito que me puse a jugar con un LED RGB .

Esquema después de la protuberancia !

Sketch Muestra Arduino

Este bosquejo pulsa los canales RGB en un LED a un ritmo diferente . Botón 1 : te permite alternar los canales dentro y fuera , y el Botón 2 cambia la intensidad máxima permitida.

Para hacer esto es necesario :

Arduino Uno

Una placa

1 RGB LED

10 cables

Cinco 330 ohm resistencias

Dos pulsadores

El diseño de su tablero como esto ( gracias Fritzing ) !

Aquí está el código para el pequeño circuito.

Page 6: Programas de Arduino Con Rgb

/*This lets you mess with an RGB LED and Two buttons.It is curently set up so that the brightness fluctuatesCycles through the colors of a RGB LED

Based on RGB_LED_Color_Fade_Cycle.pdeWritten for SparkFun Arduino Inventor's Kit CIRC-RGB

*//* VERBOSE? Prints to serial monitor */const boolean VERBOSE = true;// LED leads connected to PWM pinsconst int RED_LED_PIN = 3;const int GREEN_LED_PIN = 5;const int BLUE_LED_PIN = 6;/* Button pins */const int BTN_1_PIN = 8;const int BTN_2_PIN = 9;

Page 7: Programas de Arduino Con Rgb

/* Thresholds for intensity of LED */

const int MAX_INTENSITY = 255; //Full brightnessconst int MIN_INTENSITY = 5; //Minimum Brightness

// Used to store the current intensity level of the individual LEDsint redIntensity = 0;int greenIntensity = 0;int blueIntensity = 0;// All of those levels are controlled by this one. See the loop code.int intensity = 255;//Channel on/off state - 0 = off, 1 = onint redState = 1;int greenState = 1;int blueState = 1;//The bounced the master intensity between MIN_ and MAX_INTENSITYint dir = -1;//This variables represents time - +1 each tick. Used for Trig.int t = 0;

// Length of time we spend showing each colorconst int DISPLAY_TIME = 50; // In milliseconds

/* States to toggle thru RGB on/off */int states[6][3] = {{0,0,1},{0,1,0},{0,1,1},{1,0,0},{1,0,1},{1,1,1}};int currState = 5; //Set to the one above, all colors on.int numStates =6;

//Used to cause the button to make an action once each time it is pressed.boolean btn1_DOWN = false;//SETUP THE BUTTONSvoid setup() {Serial.begin(9600);pinMode(BTN_1_PIN, INPUT);pinMode(BTN_2_PIN, INPUT);}

void loop() {int btn1 = digitalRead(BTN_1_PIN);int btn2 = digitalRead(BTN_2_PIN);

/*Change active colorsOnly do this once each time the button is pressed and released*/if(btn1 == LOW) {btn1_DOWN = true;

Page 8: Programas de Arduino Con Rgb

} else if(btn1 == HIGH){

if(btn1_DOWN == true) {

btn1_DOWN = false;

currState++;

if (currState == numStates) {currState = 0;}

redState = states[currState][0];greenState = states[currState][1];blueState = states[currState][2];

if (VERBOSE) {Serial.print("::: redState ");Serial.print(redState);Serial.print(" greenState ");Serial.print(greenState);Serial.print(" blueState ");Serial.print(blueState);Serial.println();}}}/*CHANGE INTENSITYChanged continuously while button is pressed.*/if(btn2 == LOW) {if (dir == -1) {intensity-=5;if(intensity <= MIN_INTENSITY) {intensity = MIN_INTENSITY;dir = 1;}} else {intensity+=5;if(intensity >= MAX_INTENSITY) {intensity = MAX_INTENSITY;dir = -1;}}if (VERBOSE) {Serial.print(" INTENSITY::");Serial.print(intensity);Serial.println();}}//Use trig functions to make the channels pulse at different rates.redIntensity = abs(int(intensity * sin(t*0.01)));

Page 9: Programas de Arduino Con Rgb

greenIntensity = abs(int(intensity * cos(t*0.02)));blueIntensity = abs(int(intensity * sin(t*0.03)));analogWrite(RED_LED_PIN, redIntensity * redState);analogWrite(GREEN_LED_PIN, greenIntensity * greenState);analogWrite(BLUE_LED_PIN, blueIntensity * blueState);

delay(DISPLAY_TIME);t++;

}

.

Led RGB I

En esta nueva práctica vamos a trabajar con un led RGB, mediante el cual vamos a explicar las entradas

digitales. Además, jugaremos con él en programación, introduciendo las estructuras de control if y for

Existen dos tipos de led RGB: los de dos patas que llevan integrado un circuito de control y los

de cuatro patas. Nosotros trabajaremos con los últimos.

Estos led RGB son, en realidad, como si hubiéramos metido tres leds en una misma cápsula, uno rojo (red),

otro verde (green) y otro azul (blue). Poseen 4 patillas, pudiendo tener 3 ánodos para los tres colores (rojo,

azul y verde) y un cátodo común, o bien, 3 cátodos para cada color y un ánodo común, usaremos los

primeros. Combinando los tres colores (adicción), en sus diferentes luminosidades, podemos obtener una

Page 10: Programas de Arduino Con Rgb

gran gama de colores. Para variar la luminosidad hay que jugar con la intensidad, pero eso lo veremos en la

siguiente práctica. De momento nos conformaremos con los tres colores primarios y sus combinaciones.

Vamos a programar la siguiente sucesión:

1. Rojo – Verde – Azul x5

2. (R+V=Amarillo) – (R+A=Magenta) – (V+A=Cían) x5

3. (R+V+A=Blanco)

/*Led RGBRealiza una sucesión de color mediante un led RGB.*/ int ledRojo  =  9; //Declaro pin para cátodo del rojoint ledVerde = 10; //Declaro pin para cátodo <span class="g9vju6nv4p" id="g9vju6nv4p_6">del verde</span>int ledAzul  = 11; //Declaro pin para cátodo del azul void setup() {pinMode(ledRojo, OUTPUT);  //Configuro el pin 9 como salidapinMode(ledVerde, OUTPUT); //Configuro el pin 10 como salidapinMode(ledAzul, OUTPUT);  //Configuro el pin 11 como salida} void loop() {for(int i=0;i<6;i++){         //Bucle de 5 repeticionesdigitalWrite(ledRojo, HIGH);  //Enciendo led rojodelay(200);                   //Espero 200msdigitalWrite(ledRojo, LOW);   //Apago led rojodigitalWrite(ledVerde, HIGH); //Enciendo led verdedelay(200);                   //Espero 200msdigitalWrite(ledVerde, LOW);  //Apago led verdedigitalWrite(ledAzul, HIGH);  //Enciendo <span class="g9vju6nv4p" id="g9vju6nv4p_2">led azul</span>delay(200);                   //Espero 200msdigitalWrite(ledAzul, LOW);   //Apago led azul}for(int i=0;i<6;i++){         //Bucle de 5 repeticionesdigitalWrite(ledRojo, HIGH);  //Enciendo led rojodigitalWrite(ledVerde, HIGH); //Enciendo led verdedelay(200);                   //Espero 200msdigitalWrite(ledRojo, LOW);   //Apago led rojodigitalWrite(ledVerde, LOW);  //Apago led verdedigitalWrite(ledRojo, HIGH);  //Enciendo led rojodigitalWrite(ledAzul, HIGH);  //Enciendo led azuldelay(200);                   //Espero 200msdigitalWrite(ledRojo, LOW);   //Apago led rojodigitalWrite(ledAzul, LOW);   //Apago led azuldigitalWrite(ledVerde, HIGH); //Enciendo led verdedigitalWrite(ledAzul, HIGH);  //Enciendo led azuldelay(200);                   //Espero 200ms

Page 11: Programas de Arduino Con Rgb

digitalWrite(ledVerde, LOW);  //Apago led verdedigitalWrite(ledAzul, LOW);   //Apago led azul}digitalWrite(ledRojo, HIGH);  //Enciendo led rojodigitalWrite(ledVerde, HIGH); //Enciendo led verdedigitalWrite(ledAzul, HIGH);  //Enciendo led azuldelay(3000);                  //Espero 3segdigitalWrite(ledRojo, LOW);   //Apago led rojodigitalWrite(ledVerde, LOW);  //Apago led verdedigitalWrite(ledAzul, LOW);   //Apago led azul}

Lo único nuevo que hay en este programa son los bucles for. Se usan para repetir un conjunto de sentencias

encerradas entre llaves un número determinado de veces.

Este tipo de bucle posee tres partes: for (iniciación; condición; incremento){…}. La iniciación solo se ejecuta la

primera vez, y es donde se declara el valor de la variable que va ha hacer de contador. Antes de ejecutar el

bloque, revisa si se cumple la condición, si se cumple, lo ejecuta, si no, no. Y cada vez que se ejecuta

el bloque, incrementa un valor determinado (incremento) a la variable contador.

Ahora vamos a realizar la siguiente variante:

Con este nuevo montaje vamos a introducir las entradas digitales y un concepto asociado a ellas, las

resistencias Pull-Down. Para ello vamos a añadir tres pulsadores al montaje anterior, cada uno de ellos va a

encender un color cuando se pulse.

Los pines del 1 al 13 se pueden configurar como entradas (INPUT) o como salidas (OUTPUT) con pinMode.

Arduino interpreta las entradas de la siguiente manera:

+5V → 1 (lógico) = HIGH

Page 12: Programas de Arduino Con Rgb

 0V  → 0 (lógico) = LOW

Es decir, si estamos aplicando una tensión de +5V  a una entrada, lo interpreta como 1 (high) y si la llega 0V

lo interpreta como 0 (low). Sin embargo, aunque dejemos de aplicar tensión a una entrada, es posible que la

llegue ruido y no lo interprete como 0 (low). Para ello se añade una resistencia entre la entrada y tierra (GND)

que absorbe los posibles ruidos, esta resistencia se llama Pull-Down.

Como se puede observar, hemos colocado tres resistencia pull-down de 10KΩ junto con los tres pulsadores.

Veamos como se leen las entradas digitales:

/*Led RGBControla cada color del led RGB con un pulsador.*/ //Variables estáticasint ledRojo  =  9; //Declaro pin para cátodo del rojoint ledVerde = 10; //Declaro pin para cátodo del verdeint ledAzul  = 11; //Declaro pin para cátodo del azulint pulsador1 = 5; //Declaro pin para el pulsador1int pulsador2 = 6; //Declaro pin para el pulsador2int pulsador3 = 7; //Declaro pin para el pulsador3//Variables dinámicasint estado1; //Inicializo la variable de estado1int estado2; //Inicializo la variable de estado2int estado3; //Inicializo la variable de estado3 void setup() {pinMode(ledRojo, OUTPUT);  //Configuro el pin 9 como <span class="g9vju6nv4p" id="g9vju6nv4p_12">salida</span>pinMode(ledVerde, OUTPUT); //Configuro el pin 10 como salidapinMode(ledAzul, OUTPUT);  //Configuro el pin 11 como salidapinMode(pulsador1, INPUT); //Configuro el pin 5 como entradapinMode(pulsador2, INPUT); //Configuro el pin 6 como entradapinMode(pulsador3, INPUT); //Configuro el pin 7 como entrada} void loop() {  estado1 = digitalRead(pulsador1); //Lee el estado del pin5 y lo almacena  estado2 = digitalRead(pulsador2); //Lee el estado del pin6 y lo almacena  estado3 = digitalRead(pulsador3); //Lee el estado del pin7 y lo almacena   if(estado1 == HIGH){              //Si el pulsador1 está pulsado    digitalWrite(ledRojo, HIGH);    //Enciende led rojo  }  else{                             //Si no está pulsado    digitalWrite(ledRojo, LOW);     //Apaga led rojo  }   if(estado2 == HIGH){              //Si el pulsador2 está pulsado    digitalWrite(ledVerde, HIGH);   //Enciende led verde

Page 13: Programas de Arduino Con Rgb

  }  else{                             //Si no está pulsado    digitalWrite(ledVerde, LOW);    //Apaga led verde  }   if(estado3 == HIGH){              //Si el pulsador3 está pulsado    digitalWrite(ledAzul, HIGH);    //Enciende led azul  }  else{                             //Si no está pulsado    digitalWrite(ledAzul, LOW);     //Apaga led azul  }}

La primera novedad que nos encontramos son las variables dinámicas. En ellas vamos a almacenar el estado

de los pulsadores, es decir, HIGH o LOW. Es recomendable inicializar todas las variables que se vayan a

usar. Como están declaradas fuera de los módulos (setup y loop) van a ser variables globales y las vamos a

poder usar en cualquier módulo.

La segunda novedad es la configuración de un pin como entrada digital mediante pinMode(pin, INPUT). Para

leerla utilizamos digitalRead(pin) y en este caso hemos almacenado el resultado de la lectura en una variable

para su posterior uso.

Por último nos encontramos con la sentencia condicional if(condición){…}else{…}. Si se cumple la condición

que está entre paréntesis se ejecutará un bloque, si no se cumple, se ejecutará otro. En nuestro caso, la

condición era comprobar si el estado del pulsador, que habíamos almacenado en una variable, era HIGH, es

decir, estaba pulsado. Si es cierto, se enciende el led, si no, no.

Con esto terminamos la segunda práctica!

Practica 2 – LED RGB controlado con 3 pulsadores

Page 14: Programas de Arduino Con Rgb

Para esta practica voy a usar un poco de la practica anterior para poder ver los valores del LED por la pantalla LCD.

La idea fundamental es la de poder controlar el LED RGB  con tres pulsadores, cada uno destinado al Rojo, Verde y Azul.

El material que hemos usado son :

1 placa de prototipado ( en mi caso dos) 1 Arduino 1 led RGB 3 pulsadores 1 potenciómetro 3 resistencias de 220Ω 1 resistencia de 10KΩ Nos vamos a centrar en dos partes que son la conexión del led y la

interconexion de los pulsadores. Para la conexión del led he usado este esquema: (NOTA: se que el esquema no es correcto pero ese tema lo tratare en otro

post) He conectado la resistencia a masa y luego cada pata de color a los pines

de conexión 9, 10 y 11 para R, G, y B respectivamente

Page 15: Programas de Arduino Con Rgb

Luego para controlar la intensidad de cada colo he puesto un interruptor paracada patilla:

Page 16: Programas de Arduino Con Rgb

/* * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You don't receive a copy of the GNU General Public License along with this * program. You can download it from:<http://www.gnu.org/licenses/gpl-3.0.html> . * If not, see <http://www.gnu.org/licenses/>. */

#include <LiquidCrystal.h>

LiquidCrystal lcd( 5, 6, 7, 8, 12, 13);const int boton1 = 2;  //Se declara el pulsador para el Rojoconst int boton2 = 3; //Se declara el pulsador para el Verdeconst int boton3 = 4; //Se declara el pulsador para el Azulconst int ledR = 9; //Declaramos la pata Roja del ledconst int ledG = 10; //Declaramos la pata Verde del ledconst int ledB = 11; //Declaramos la pata Azul del ledint R=0; //Iniciamos la variable Rojo a 0int G=0; //Iniciamos la variable Rojo a 0int B=0; //Iniciamos la variable Rojo a 0

Page 17: Programas de Arduino Con Rgb

void setup() { pinMode(boton1, INPUT); //Iniciamos pin como entrada pinMode(boton2, INPUT); //Iniciamos pin como entrada pinMode(boton3, INPUT); //Iniciamos pin como entrada pinMode(ledR, OUTPUT); //Iniciamos pin como salida pinMode(ledG, OUTPUT); //Iniciamos pin como salida pinMode(ledB, OUTPUT); //Iniciamos pin como salida lcd.begin(16, 2); //Iniciamos el tamaño:

}

void loop() { if(digitalRead(boton1)==HIGH){ //añade +10 a Rojo R=R+10; if (R>255){R=0;} //reinicio de la variable } if(digitalRead(boton2)==HIGH){ //añade +10 a Rojo G=G+10; if (G>255){G=0;} //reinicio de la variable } if(digitalRead(boton3)==HIGH){ //añade +10 a Rojo B=B+10; if (B>255){B=0;} //reinicio de la variable }

analogWrite(ledR,R); //Escritura en el pin ledR analogWrite(ledG,G); //Escritura en el pin ledG analogWrite(ledB,B); //Escritura en el pin ledB lcd.clear(); // Borramos el LCD lcd.setCursor(0, 0); // Situamos el cursos en la primera linea lcd.print("R->"); // Escribimos el texto lcd.print(R); // Escribimos el valor de R lcd.print("    G->"); // Escribimos el texto lcd.print(G); // Escribimos el valor de G lcd.setCursor(0, 1); // Situamos el cursor en la segunda linea lcd.print("B->"); // Escribimos el texto lcd.print(B); // Escribimos el valor de B delay(250);}

BIBLIO

http://robocodes.guiskas.com/20 10/07/practica-2-led-rgb-controlado-con-3-pulsadores/