ARCADE FOREVER

Controlar leds con arduino uno.

« Older   Newer »
  Share  
flicki
icon1  view post Posted on 7/4/2018, 09:00     +2   +1   -1




Hola.
Hablando con el compañero Kusaro,he salido del pantano de dudas en el que me veía.

Primeramente, paso a explicar el mini-proyecto.
Tenemos una tira de leds rgb que acepta cinco voltios como máximo, en estas cosas aliexpress es lo mejor, ya que por cinco euros tienes un par de metros con conector usb, receptor y mando a distancia.
Pero se puede sustituir por los leds de encendido del pc o lectura de disco duro o cualquier led, de los que van a cinco voltios, no teneis nada que temer.Yo lo he probado en esto tambien:

Era un teclado inálambrico que me cargué (no vamos a entrar en detalles) y ahora mismo es el mejor uso que puedo darle, el led amarillo que veis se apaga y enciende durante el tiempo que yo quiera, cambiandole el codigo en arduino ide (programa para windows)y luego subiendolo a la tarjeta, se memoriza en el chip. (el mio es CH340, creo que el atmega es más divertido)

Vamos con lo que ya sabemos hoy, si conecto la tira de leds funciona perfectamente, de momento solo lo puedo hacer con uno de los leds a la vez, pero bueno ya veremos a ver si somos capaces de añadir los otros dos (verde,rojo y azul)
El led se apaga y enciende con el tiempo que yo le ponga.
Os voy a explicar la conexión tan sencilla que lleva, por si alguno quiere animarse como yo.

Para empezar, pido disculpas porque en la foto hay dos resistencias que sobran, no se utilizan( las tengo puestas porque pensaba que podría hacer el codigo para tres leds a la vez, pero solo he podido con uno)
Si os fijais en la foto de arriba, hay un pin GROUND que sale de arduino uno y a traves de un cablecito negro llega a la protoboard.
Otro vistazo más y vereis un cablecito amarillo que sale del pin 9 (digital outputs) del arduino y llega a la proto board justo para hacer contacto con la resistencia.

Si habeis entendido hasta aquí ahora queda, lo más facil, conectar la tira de leds.

Conectamos los +5voltios de la tira de leds a la otra patilla que queda libre de la resistencia (en la otra patilla quedo el pin 9 del arduino). Y uno de los tres colores al GROUND de la protoboard.
Y voila.
Nota:en teoría la resistencia, no es necesaria (220 ohmios, creo) ya que arduino lleva una resistencia en las salidas digitales y protege el dispositivo, con la resistencia el led luce un poquito menos, pero mi ignorancia se tranquiliza.
Aquí podeis ver de cerca la conexión en la protoboard

El cable amarillo que entra en una de las patillas de la resistencia,que viene del pin 9 de arduino.
El cable naranja que sale de una de las patillas de la resistencia va directamente a +5V de la tira de leds
El cable negro y rojo son GROUNDS.El cable negro viene del GROUND de arduino y el cable rojo viene de la tira de leds (en la foto de abajo viene de R de la tira de leds, o sea el red- rojo) (sorprendentemente, para mi, el led azul y rojo estan a la inversa, es decir si actuamos sobre un canal, cambia el otro)

En esta foto de abajo el ground viene del canal G (usease green- verde)

Y por ultimo, no menos importante, el ground viene del canal B o sea blue-azul (ya os he comentado de las peculiaridades de estos dos canales azul y rojo)

Y eso es todo de momento, con el codigo si os fijais en la parte, son milisegundos, cambiando estye valor podremos cambiar el tiempo de permanecer apagado y encendido del led.



CODICE
/*
Programa: Enciende un LED y lo apaga indefinidamente en una secuencia programada
Autor:  Humberto Higinio
Web:  www.humbertohiginio.com
Canal de Youtube: https://youtube.com/user/HHsolis
Video Exclusivo para mi canal de Youtube
Todos los Derechos Reservados - 2015
Codigo de Dominio Publico
Y flicki tamien ;)
*/

// Sobre la mayoria de tarjetas Arduino el pin 13 tiene un LED conectado
// Vamos a usar otro pin, el numero 9
// Le daremos un nombre para identificarlo
// Vamos a definir nuestra primera variable, llamada led y le damos el valor de 9
int led = 9;

// La funcion setup se ejecuta una sola vez cuando se enciende Arduino o cuando se presiona el Reset
void setup ()   {
 // Configuramos el pin digital 9 como salida
 pinMode (led, OUTPUT);
}
// La funcion Loop se ejecuta una y otra vez como un lazo cerrado
void loop ()   {
 int tiempoON = 1000;   // Declaramos una variable de tiempo Encendido
 int tiempoOFF = 1000;   // Declaramos una variable de tiempo Apagado
 digitalWrite (led, HIGH);   // Enciende el led definido sobre el pin 9
 delay (tiempoON);   // Espera un segundo
 digitalWrite (led, LOW);    // Apaga el led definido sobre el pin 9
 delay (tiempoOFF);   // Espera un segundo
}


Si intento meterle mas leds, tengo el problema en la parte del loop, no tengo ni idea de como hacerlo bien jeje,me hace falta mucha practica y leer mucho sobre codigo, pero esa parte es muy complicada.
En fin poco a poco, hoy gracias a Humberto, ya sé convertir de decimal a hexaedecimal y tambien pasar un numero a binario, (nunca sabes lo que te pueden preguntar en quien quiere ser millonario)

Edited by flicki - 9/4/2018, 02:15
 
Top
view post Posted on 7/4/2018, 11:03     +1   -1
Avatar

V.I.P.

Group:
Member
Posts:
225
Reputation:
+23

Status:


Jajajaja, guay, que velocidad, que poco has tardado en ponerte.

Mmmmm, vale, dame un momento que cojo papel y boli y te cuento XD
 
Top
view post Posted on 7/4/2018, 11:28     +1   +1   -1
Avatar

Arcade Workshop

Group:
Usuarios AFFA
Posts:
15,225
Reputation:
+674
Location:
Córdoba

Status:


Lo suyo, ya que estas liao. Es

Como puedo implementarlo con la pulsacion de botones? es mu facil, por example, que se enciendan los leds rojos cada vez que disparas, o el azul cuando saltas. Etc etc.

Aunquesupongo que tu lo estas "empezando" para el tema del pinball verdad?
 
Top
view post Posted on 7/4/2018, 12:23     +1   +1   -1
Avatar

V.I.P.

Group:
Member
Posts:
225
Reputation:
+23

Status:


Por lo que he visto la tira de leds que tienes es tal que así:
photo_2018_04_07_13_03_23
Como vez va al revés que como se suelen configurar normalmente, en vez de dar voltaje para encender el led, es todo lo contrario, tu le estas dando siempre el voltaje de 5v y cuando conectas la entrada G, B o R la tira de leds de ese color se encienden.

Ahora bien esta correspondería al trozo de la tira que has cortado:
photo_2018_04_07_13_03_20
Para unas pruebas simples, no pasa nada si haces la conexion directa de G, B y R a arduino, pero recomiendo que uses transistores, ya que puedes freir a arduino si le pones una carga de corriente muy grande ( aparte de que funcionaría al revés, cuando pongas en "high" el pin que conecta a G, B, o R, el led se apagaria, y en "low" se encenderia)

De echo, te aconsejo algo tal que asi:
photo_2018_04_07_13_03_19
De esta manera cada led no esta conectado "directamente" a arduino sino que pasa a través de un transistor, y según pongas en high o low el pin corespondiente, este se encenderá o apagará.

Dicho esto, pasemos ahora al código. Por lo que he visto, estás utilizando "digitalwrite" eso solo te sirve en caso de que quieras "encender" o "apagar" si quieres jugar con intensidades, tienes que utilizar pulsos, y para esto sería con "analogwrite".

Te escribo un ejemplo:
int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 255; // variable to store the read value

void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop()
{

analogWrite(ledPin, val);
delay(250);
val = val/2;
}

Con esto, el led deberia de empezar encendido a tope, y cada 1/4 de segundo irá disminuyendo su intensidad, hasta empezar a parpadear y finalmente apagarse.
 
Top
flicki
view post Posted on 7/4/2018, 14:01     +1   -1




CITAZIONE (Kusaro @ 7/4/2018, 12:03) 
Jajajaja, guay, que velocidad, que poco has tardado en ponerte.

Mmmmm, vale, dame un momento que cojo papel y boli y te cuento XD

Tu me dices de plutonio y yo te lo compro, ahora...los transistores, ni idea y los mosfets pal lunes ¿que valor tendrían que ser esos transistores?
Estas cosas me ponen a mi muy contento :rolleyes: , p
Me gusta mucho más que un caramelo :wub:


Jeje, así que lo he puesto todo al reves eh?pues seguro que lo tengo así por que al reves no me funcionaba jajjajaj.
Ahora que me has puesto la imagen lo he visto claro, lo tengo al revés.
No entremos en cuantos años me harían falta para darme cuenta del fallo, ¿es obligatorío lo de los transistores? joer es que no sé ni lo que son jajaja.
¿no sé que determina la intensidad? tenemos cinco voltios y los leds solo pueden sacar medio vatio me parece, con es potencia tan bajita ¿no puede haber muchos amperios no?
jo dime porfis que se puede sin transis joooo alaaaa

Ayer tuve que hacer un hola mundo tambien (jajaj cada vez que conecto el arduino al usb,me sale el monitor en serie (que pasa coooo!!!!!!) :woot:

CITAZIONE (Xtob @ 7/4/2018, 12:28) 
Lo suyo, ya que estas liao. Es

Como puedo implementarlo con la pulsacion de botones? es mu facil, por example, que se enciendan los leds rojos cada vez que disparas, o el azul cuando saltas. Etc etc.

Aunquesupongo que tu lo estas "empezando" para el tema del pinball verdad?

Si tengo en mente, pinball, pero esto más bien es para todo en general, si dios quiere y reparte suerte (ole ole y ole :D ) lo haré funcionar con mala para...no sé, eso que dices de los botones mola mucho, pero tenía pensado un desvanecimiento selectivo de 2500 ms del rojo pasión al azul turquesa durante la selección del juego en nintendo virtual boy (estoy flipando, no me hagas ni p..caso, esto no creo que se pueda hacer, pero tampoco me extrañaria que si se pudiera) pero si que se ponga de color verde cuando ejecuto el emulador de mame y luego vuelva al cambio de colores cuando salga del emulador.

Yo le meto un credito y que haga un par de flashes

No me toques las palmas que me conozco, xtob

EDITO: Despues de fregar los platos me he dao un golpe en la cabeza (otro más macho) y lo he visto claro, tios..necesitamos un potenciometro rectificador del voltaje de ground hacia los cinco voltios, para dejarlo más del lado de ground que de los cinco voltios y así todo esta seguro.
No quería comentarlo..pero ayer hubo momentos de calentura de cables (bastante además)gracias a mis vastos conocimientos y tambien jajajaj los conecte primero a 7,5 voltios (esto ya sin arduino eh ?)y viendo que iluminaban mucho más, los metía doce voltios hasta que vi humo :D y no creo que lo vuelva a hacer, joer estas cosas aguantan eh ? joer los chinos macho :D :D :D :D
 
Top
view post Posted on 7/4/2018, 15:03     +1   -1
Avatar

V.I.P.

Group:
Member
Posts:
225
Reputation:
+23

Status:


Vamos por partes XD

QUOTE (flicki @ 7/4/2018, 15:01) 
jo dime porfis que se puede sin transis joooo alaaaa

Nope, para una tira de leds es tecnicamente obligatorio. Eso si si es para realizar pruebas con solo 3 leds, no habria problemas...

QUOTE
¿no sé que determina la intensidad? tenemos cinco voltios y los leds solo pueden sacar medio vatio me parece, con es potencia tan bajita ¿no puede haber muchos amperios no?

Ahi creo que te estas liando, de echo si pruebas el ejemplo de codigo que te he pasado ahi tienes tu respuesta.
En todo caso te lo aclaro:
El como determinar cuando un led luce a tope y cuando luce a medio gas, no se hace regulando la intensidad, se realiza enviando "pulsos" de corriente a diferentes velociades.
Me explico, imagínate que eres Flash y te pones a encender y apagar la luz de tu habitación muy muy rápido, ¿notarias que se ha apagado?, Nope. Ahora bien, lo vuelves a hacer pero no tan rápido, lo justo para que de la impresión de que luze con menos intensidad pero que en ningun momento notarías que se ha apagado.
Por eso necesitas usar el "analogwrite", envias pulsos con un ancho diferente de 0 a 255.

QUOTE
Tu me dices de plutonio y yo te lo compro, ahora...los transistores, ni idea y los mosfets pal lunes ¿que valor tendrían que ser esos transistores?

Los mosfet no dejan de ser transistores, esos del video te sirven... no necesitas compar más
A ver un transistor como ya te he comentado piensa en el como en un interruptor... o mejor como un guardia de tráfico:
Tu tienes tu carretera que va desde los 5v, pasando por la resistencia, por el led hasta llegar a tierra, y entre el led y la tierra tienes el guardia de trafico (el transistor) que recibe ordenes de arduino. Entondes cuando arduino dice adelante, el guardia permite el flujo de trafico, y cuando dice para, lo detiene. Se entiende ¿no?

Yo los que he dibujado son un transistor bipolar npn (bjt npn) y los que has visto en el video, los mosfet, sus siglas significan "transistor de efecto de campo metal-oxido-semiconductor" ambos son completamente válidos se basan en fundamentos diferentes, pero en este caso realizan la misma función.
 
Top
flicki
view post Posted on 7/4/2018, 16:53     +1   -1




joer como me cabrea lo de las partituras y los esquemas electricos.
Lo primero no sirve para absolutamente nada y lo segundo para joderme la vida. :D :D
No me digais nada!!! me voy a ir a dar una vuelta y cuando vuelva lo voy a hacer, no sé como, pero lo voya hacer, mecagon to los pines que se menean analogicamente hablando

EDITO:lo voy a hacer con potenciometros 100 kiloohmios pero kusaro recomienda hacerlo con mosfets canal n IRF530

Edited by flicki - 9/4/2018, 02:31
 
Top
flicki
view post Posted on 7/4/2018, 17:22     +1   -1




edito:vale, ya lo he hecho. empieza con un encendido del led (supongo que eso lo hace siempre, no tiene que ver con el codigo) y luego va disminiuyendo a pasitos hasta apagarse por completo, si actuo sobre el potenciometro disminuye notablemente la intensidad luminica del dispositivo, pero tengo que apagar y encender para que lo haga una vez.

Joer, pero en codigo voy peor que en electronica, muchas preguntas me surgen ¿como hacer para que sea un loop? (me gustan los circulos viciosos) ¿como me he pegao tol dia sin comer? bueno luego seguimos
Un saludo y muchas gracias por la ayuda, sin ti no lo hubiese hecho Kusaro, te lo agradezco mucho
Aqui va un video, no se me dan muy bien :D



Edited by flicki - 7/4/2018, 19:05
 
Top
flicki
view post Posted on 7/4/2018, 19:14     +1   -1




Ya empiezo con mis hilos kilométricos, voy a intentar ser más serio, chavales.

He estado cacharreando con el nuevo juguetito y se me presentan varias dudas (calculo que lo de implementarlo en mala tardará algún tiempo)
Mi nuevo codigo para añadir el led verde a la vez con el led rojo
CODICE
int ledPin = 9; // LED connected to digital pin 9
int ledPinflicki = 8; // LES conestao al digital pin 8
int analogPin = 3; // potentiometer connected to analog pin 3
int analogPinflicki = 4; //potencia to lo que es la zona del analog pin 4, mayormente
int val = 255; // variable to store the read value

void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
pinMode(ledPinflicki, OUTPUT); // coloca el pin como salida,no es lo mismo estar colocao con una salida que estar en la salida con un colacao, flicki said
}

void loop()
{

analogWrite(ledPin, val);
delay(250);
val = val/2;
analogWrite(ledPinflicki, val);
delay(250);
val = val/2;
}


Yo de informático ibais a flipar con el efecto 2000 (no sucedió ¿no? pues eso..)
Los problemas que tengo ahora es que por tema de como esta hecha la tira de leds no puedo hacer esto mismo con el led rojo y el azul (es como si estuvieran casados el led rojo y el azul y el verde estuviera tol dia fumao, no se si mexplico). A ver si puedo implementar los tres colores a la vez y ya veremos los siguiente.
Saludos!
 
Top
view post Posted on 7/4/2018, 19:50     +1   +1   -1
Avatar

V.I.P.

Group:
Member
Posts:
225
Reputation:
+23

Status:


A ver, te echo un cable...
Lo acabo de hacer ahora mismo asi que no se si tirará, supongo que quieres algo tal que asi:

con este codigo los leds te deberian de ir cambiando de intensidad a lo largo del tiempo continuamente

HTML
int rojo = 9; // LED connected to digital pin 9
int verde = 6; // LES conestao al digital pin 6
int azul = 5; // LES conestao al digital pin 5
//int boton = 2;

int valrojo = 255; // variable to store the read value
int valverde = 122; // variable to store the read value
int valazul = 0; // variable to store the read value

void setup()
{
pinMode(rojo, OUTPUT); // sets the pin as output
pinMode(verde, OUTPUT);
pinMode(azul, OUTPUT);
//pinMode(boton, INPUT);

}

void loop()
{
//if (boton == HIGH) {
analogWrite(rojo, valrojo);
analogWrite(verde, valverde);
analogWrite(azul, valazul);
delay(250);
valrojo = (valrojo+50)%255;
valverde = (valverde+45)%255;
valazul = (valazul+40)%255;
//}


}


y si conectas un boton tal que asi:

arduino-pulsador-4

y descomentas la parte del codigo referente al botón (todo lo que esta al comienzo de linea con //) lo que hará es que solo cambia de color cuando el boton esta pulsado o sin pulsar (segun lo pongas como pull-up o pull-down)
 
Top
flicki
view post Posted on 7/4/2018, 21:34     +1   -1




jiji que guay! ya tengo más para probar, eres el mejor kusaro.

He estado probando y ya tengo los tres colores funcionando y con loop (no te creas.. que el codigo de abajo me ha costado hacer que funcionara)

CODICE
int ledPin = 9; // LED connected to digital pin 9
int ledPinflicki = 8; // LES conestao al digital pin 8
int ledPinelias = 10; // LES coneztao al digital pin 10, aunque me llame manoli
int analogPin = 3; // potentiometer connected to analog pin 3
int analogPinflicki = 4; //potencia to lo que es la zona del analog pin 4, mayormente
int analogPinelias = 2; //eze cuerpo eza potencia y de deverda to zale de deporte en la vida de verda, mas, mas, mas, a romper la pierna, mas
int val = 255; // variable to store the read value

void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
pinMode(ledPinflicki, OUTPUT); // coloca el pin como salida,no es lo mismo estar colocao con una salida que estar en la salida con un colacao, flicki said
pinMode(ledPinelias, OUTPUT); // QUE BIEN SE ME DA COPIAR CHAVALES, ah si..esto es poner el ledpinelias como una salida del arduino oki?poseso co
}

void loop() {
 for (int i=0; i<=150; i++)
 {
analogWrite(ledPin,i);
delay(10);
 }

 for (int i=150; i<=250; i++)
 {
analogWrite(ledPinflicki,i);
delay(10);
 }

 for (int i=250; i>=0; i--)
 {
analogWrite(ledPinelias,i);
delay(10);
 }
}



Un pequeño video. (las conexiones son exactamente las mismas que he explicado en el anterior video, solo añadimos un par de potenciometros mas y el color azul y verde)
Es curioso que actuando sobre el cable azul cambiamos el led rojo y si actuamos sobre el cable del canal rojo entonces cambiamos el led azul, el canal verde va a su bola.
¿que os parece el utilizar un analogico del gamepad cadaver como potenciometro y resistencia variable? es muy cuñao, pero en el desguace no había nada mejor.
Voy a probar lo que me pasa kusaro.

Saludos
 
Top
view post Posted on 7/4/2018, 22:10     +1   -1
Avatar

V.I.P.

Group:
Member
Posts:
225
Reputation:
+23

Status:


QUOTE (flicki @ 7/4/2018, 22:34) 
jiji que guay! ya tengo más para probar, eres el mejor kusaro.

Nada, ya ves, porque no tengo el arduino y el ordenador a mano, sino te podía pasar algo más elaborado...

Ánimo, a un poco mas que experimentes con ello, ya verás que no es tan difícil.
 
Top
flicki
view post Posted on 7/4/2018, 22:15     +1   -1




CITAZIONE (Kusaro @ 7/4/2018, 23:10) 
Nada, ya ves, porque no tengo el arduino y el ordenador a mano, sino te podía pasar algo más elaborado...

Ánimo, a un poco mas que experimentes con ello, ya verás que no es tan difícil.

Me entran sudores frios como el xtob con el karni0 :D .
Yo sigo probando cosas y ya te preguntaré ya :rolleyes:

Estoy intentando el que me has puesto antes,a ver si me entero :( :blink:
Ya saldrá ya.. :ph34r: :alienff:

Edito:dame una hora y lo tengo, no sé porque se me había metido entre ceja y ceja una tontería de meter una resistencia o no se que tonteria, ahora veo el esquema que me has puesto y lo comprendo, me cuesta un poco pero al final, cachis bustamante.. :wacko:

Edited by flicki - 8/4/2018, 00:59
 
Top
view post Posted on 7/4/2018, 23:04     +1   -1
Avatar

V.I.P.

Group:
Member
Posts:
225
Reputation:
+23

Status:


QUOTE (flicki @ 7/4/2018, 23:15) 
Estoy intentando el que me has puesto antes,a ver si me entero :( :blink:
Ya saldrá ya.. :ph34r: :alienff:

No funciona?
La idea era cambiar la intensidad de los tres leds a diferentes velocidades, por eso pongo que cada 250ms, se asigne un nuevo valor a cada led.
Como los pulsos sólo pueden ser de 0 a 255, para asegurarme que no me paso cuando voy sumado sobre cada variable, calculo el resto de 255.
Ejemplo de cómo cambiarían un valor en cada loop:
(Pongamos de comienzo 125 y se le va a sumar suelte 45)
(125+45)%255=170
(170+45)%255=210
(210+45)%255=0
(0+45)%45=45
....
 
Top
flicki
view post Posted on 7/4/2018, 23:08     +1   -1




Si funciona.
Pero el botón me estoy tirando de los pelos ^_^
¿la fuente de los cinco voltios es externa y por eso el boton 2 es un input?
no me entero de como conectar el botón ni a la de tres.
Tengo que tener más paciencia, supongo.
Si mola mucho además, el ciclo es perfecto para la pantalla de espera de pulsar start despues de darle a un credito, parece que he metido una tragaperras en casa jajaja, mola mucho, es lo que yo quería, pero el botón de encendido y apagado no soy capaz de meterselo.
Será cuestión de paciencia (ya se me ha pasado por la cabeza probar algun bat con mala, pero no quiero empezar la casa por el tejado, debo aprobar la eso en arduino jeje)
Edito:con el codigo que me has pasado,los leds empiezan a subir intensidad hasta el maximo y luego vuelve a empezar, pero lo hace muy bien, los tiempos de subir intensidad me gustan bastante..yo no me he acercado ni de coña a esa simetría tan bonita jajaj
 
Top
115 replies since 7/4/2018, 09:00   1139 views
  Share