Tutorial en arduino

18
Tutorial - Cruce de semáforos LED Objetivo: Montar un cruce de semáforos con un tiempo de espera de 6 segundos antes del cambio. La secuencia hará una espera de 4 segundos en verde ! segundos parpadeando luego "marillo # luego $o%o &6 segundos de nuevo'. El bot(n lo programaremos para )ue reinicie el contador cambiando de semáforo &similar a cuando pulsamos el bot(n para cru*ar en uno de estos'. Componentes a usar en este tutorial+ 2 x Diodo LED Red 2 x Diodo LED Yellow 2 x Diodo LED Green 6 x Resistencia 220 ohmios 1 x Resistencia 10 Kohmios 1 x Arduino UN !a"les 1 x #ulsador 

description

Código en arduino para semáforo

Transcript of Tutorial en arduino

Page 1: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 1/17

Page 2: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 2/17

En la imagen superior tenemos el diagrama del monta%e. ,odemos identificar losLEDs las resistencias # el bot(n pulsador.

amos a pasar a comentar las coneiones+

,ara conectar nuestro Arduino UNO a la protoboard o BreadBoard sacaremos uncable &cable ro%o' del PIN 5V hasta nuestra fila positiva de la protoboard &/' # uncable &cable a*ul' desde el PIN GND hasta nuestra fila &-' de la protoboard.

,ara evitarnos problemas de conei(n haremos #a el puente a mitad de laprotoboard. El cable a*ul de la imagen conecta la fila negativa para )ue todos lospines est0n unidos. 1ota+ esto no es obligado hacerlo pero suele ser 2til paraevitarnos problemas de monta%e.

 "hora )ue #a tenemos la protoboard preparada para seguir procederemos aconectar nuestro botón pulsador . Este componente está dotado de 4 terminales o

3patas3. ,odemos conectarlo como en la imagen haciendo de puente entre lasbandas verticales de la protoboard. " la pata de la i*)uierda le conectaremosla resistencia de 1 !o"#ios # la resistencia irá conectada a la fila negativa&1D' de la protoboard mediante un cable.De la pata de la derecha del pulsador saldrá un cable )ue conectara 0ste a la filapositiva de la protoboard &5'.

eguidamente procederemos a colocar los $%Ds en la protoboard. 7sando el polonegativo del LED en la *ona vertical de la protoboard # el positivo en la filanegativa de la protoboard &1D' como indica la imagen. Del polo negativo del LEDdeberá ir conectado la resistencia de && o"#ios como muestra la imagen. Es

recomendable )ue su disposici(n tambi0n haga de puente entre las columnasverticales de la protoboard.

7na ve* tenemos montados # conectados los componentes tan s(lo nosfaltaráconectar los $%Ds ' el botón a nuestro Arduino UNO. Estas coneioneslas haremos de la siguiente manera+

Los LEDs los conectaremos desde la salida de la resistencia hacia el controlador.&ver imagen'

- LED erde &derecha'+ ,81 ! del "rduino.- LED "marillo+ ,81 9 &,:M'- LED $o%o+ ,81 4- LED erde+ ,81 5- LED "marillo+ ,81 6- LED $o%o+ ,81 ;

,or 2ltimo nos faltará conectar el bot(n a nuestro controlador. La pata superiori*)uierda la conectaremos al ,81 < del "rduino 71=. Cable negro de la imagen.

Page 3: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 3/17

A"ora va'a#os al pro(ra#a:

>?

 ,rograma para un par de semaforos )ue cambian de uno

 a otro # la implementacion de un boton para terminar 

 el tiempo de la lu* verde # pasar al otro.

?>

>> Declaramos la variable para el pin del boton

const int button @ <A

void setup&' B

 >> Con un ciclo activamos los pines del ! al ; como salidas

 for &int pin @ !A pin @ ;A pin//' B

  pinMode&pin =7T,7T'A

 

 >> El pin del boton lo ponemos como entrada

 pinMode&button 81,7T'A

>> uncion para el primer semaforo # sus cambios de estado

void semaphore=ne&' B

 digital:rite&! F8F'A

 int count @ GA

 Hhile &count 9G' B

  >> El ciclo esta en espera mientras el boton no es presionado

  if &digital$ead&button' @@ true' B

  breaIA

 

  count//A

Page 4: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 4/17

  dela#&!GG'A

 

 >> ,rogramamos el cambio entre semaforos. Cuando el LED tiene la posicion L=: estara

apagado mientras )ue si esta en posicion F8F estada encendido.

 digital:rite&! L=:'A dela#&5GG'A

 digital:rite&! F8F'A

 dela#&5GG'A

 digital:rite&! L=:'A

 dela#&5GG'A

 digital:rite&! F8F'A

 dela#&5GG'A

 digital:rite&! L=:'A

 dela#&5GG'A

 digital:rite&! F8F'A

 dela#&5GG'A

 digital:rite&! L=:'A

 dela#&5GG'A

 digital:rite&! F8F'A

 dela#&5GG'A

 digital:rite&! L=:'A

 digital:rite&9 F8F'A

 dela#&!5GG'A

 digital:rite&9 L=:'A

 digital:rite&4 F8F'A

 digital:rite&; L=:'A

 >> Mandamos a llamar al otro semaforo

 semaphoreTHo&'A

>> uncion para el segundo semaforo # sus cambios de estado

void semaphoreTHo&' B

 digital:rite&5 F8F'A

 int count @ GA

 Hhile &count 9G' B

  if &digital$ead&button' @@ true' B

  breaIA

 

  count//A

  dela#&!GG'A

 

 digital:rite&5 L=:'A

 dela#&5GG'A

 digital:rite&5 F8F'A

Page 5: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 5/17

 dela#&5GG'A

 digital:rite&5 L=:'A

 dela#&5GG'A

 digital:rite&5 F8F'A

 dela#&5GG'A digital:rite&5 L=:'A

 dela#&5GG'A

 digital:rite&5 F8F'A

 dela#&5GG'A

 digital:rite&5 L=:'A

 dela#&5GG'A

 digital:rite&5 F8F'A

 dela#&5GG'A

 digital:rite&5 L=:'A

 digital:rite&6 F8F'A

 dela#&!5GG'A

 digital:rite&6 L=:'A

 digital:rite&; F8F'A

 digital:rite&4 L=:'A

 >> Mandamos a llamar al otro semaforo

 semaphore=ne&'A

>> 8niciamos nuestro semaforo

void loop&' B

 >> Cambiamos el estado de todos los leds para

 >> )ue esten apagados todos al inicio

 for &int pin @ !A pin @ ;A pin//' B

  digital:rite&pin L=:'A

 

 >> ,rendemos el verde de un semaforo # el

 >> ro%o del otro semaforo

 digital:rite&! F8F'A

 digital:rite&; F8F'A

 >> 8niciamos el primer semaforo

 semaphore=ne&'A

>?uente+ http+>>ramon-g**.blogspot.m>!GJ!>G4>semaforo-con-arduino-uno.html

Page 6: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 6/17

Secuencias de Luces

En éste tutorial reproducimos diferentes secuencias de luces. Para cambiar a la siguiente secuencia

presionamos el pulsador.

El programa utiliza estructuras switch anidadas, la de más afuera sirve para rotar entre las

secuencias y las de adentro para rotar entre los estados de cada secuencia. Antes de eso evaluamossi se ha presionado el pulsador y le dejamos de hacer caso dehabilitándolo por un rato. sto es

por!ue de lo contrario las secuencias rotar"an unas miles de veces entre !ue presionamos y

soltamos el pulsador. En éste caso no podemos poner un simple delay para esperar a soltarlo

por!ue las secuencias tienen diferentes tiempos y se basan en !ue todo el programa se va a repetir

constantemente. #inalmente el cambio de estado dentro de la secuencia se eval$a al %nal del

programa.

 

Hardware Requerido

• Arduino &no

• Protoboard

• ' (E)s

• ' resistencias de **+

• -esistencia de +/

• Pulsador

 

Page 7: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 7/17

Circuito

 

Page 8: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 8/17

Esquemático

Código:/*

  Secuencias de Luces

 

Con este programa rotamos diferentes secuencias de luces al presionar 

  un pulsador.

 */ 

// Le damos nombre a los pines del arduino para poder entender mejor 

// su funcion en el programa:

int led1 = 3;

int led2 = 5;

int led3 = 6;

int led4 = 9;

int led5 = 10;

int pinPulsador = A0; // Pin donde leemos el valor del potenciometro

// Variables

int estado_pulsador = 0; // Almacena el valor del potenciometro

int secuencias = 5;  // Cantidad de secuencias programadas

int espera_pulsador = 500; // Tiempo en milisegundos ue se espera antes

  // de !acer una nueva lectura al pulsador 

int conteo_pulsador = 0; // Contador ue se compara con espera pusador 

int intensidad = 0; // "ntensidad de iluminacion

boolean habilitar_pulsador = false; // "ndica si el pulsador se debe leer 

Page 9: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 9/17

boolean aumentando_intensidad = true; // "ndica si la intensidad esta

aumentando

int tiempo = 100; // Tiempo base en milisegundos para cada iteracion

int secuencia = 1; // Secuencia actual en la ue nos encontramos

int estado_secuencia = 1; // #stado de la secuencia actual en el ue nos

encontramos

int estados = 1; // #stados por secuencia

oid setup!" # 

// "niciali$amos los pines de los leds como salidas

  pin$ode!led1% &'(P'(";

  pin$ode!led2% &'(P'(";

  pin$ode!led3% &'(P'(";

  pin$ode!led4% &'(P'(";

  pin$ode!led5% &'(P'(";

  // Asignamos los valores iniciales a los leds %apagados&

  di)ital*rite!led1% +&*";

  di)ital*rite!led2% +&*";

  di)ital*rite!led3% +&*";  di)ital*rite!led4% +&*";

  di)ital*rite!led5% +&*";

,

oid loop!" #

  // Leemos el estado del pulsador ' lo alamacenamos

  estado_pulsador = di)ital-ead!pinPulsador";

  // Si el pulsador esta !abilitado ' lo presionamos( cambiamos de secuencia

  if !habilitar_pulsador .. estado_pulsador == //" #

  // )otamos la secuencia.

  if !secuencia == secuencias" #

  secuencia = 1;

  , else #

  secuencia = secuencia  1;

  ,

  estado_secuencia = 1;

  habilitar_pulsador = false;

  ,

  // Si el pulsador esta des!abilitado( evaluaremos el conteo de espera antes

de volver 

  // a !abilitarlo.

  if !habilitar_pulsador == false" #

  // Si el conteo llega a esperapulsador o se deja de presionar el

 pulsador( lo !abilitamos

  if !conteo_pulsador = espera_pulsador  estado_pulsador == +&*" #  habilitar_pulsador = true;

  conteo_pulsador = 0;

  , else #

  conteo_pulsador = conteo_pulsador  tiempo;

  ,

  ,

  // #valuamos la secuencia actual

sitch!secuencia" #

  case 1

  // Secuencia +: alterna encendido de L#,s

  tiempo = 100;

  estados = 4;

  sitch!estado_secuencia" #  case 1

Page 10: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 10/17

  di)ital*rite!led1% +&*";

  di)ital*rite!led2% //";

  di)ital*rite!led3% +&*";

  di)ital*rite!led4% //";

  di)ital*rite!led5% +&*";

  brea7;

  case 3  di)ital*rite!led1% //";

  di)ital*rite!led2% +&*";

  di)ital*rite!led3% //";

  di)ital*rite!led4% +&*";

  di)ital*rite!led5% //";

  brea7;

  ,

  brea7;

  case 2

  // Secuencia -: mantiene todos los L#,s encendidos

  tiempo = 100;

  estados = 1;

  di)ital*rite!led1% //";  di)ital*rite!led2% //";

  di)ital*rite!led3% //";

  di)ital*rite!led4% //";

  di)ital*rite!led5% //";

  brea7;

  case 3

  // Secuencia : enciende ' apaga todos los L#,s

  tiempo = 100;

  estados = 2;

  sitch!estado_secuencia" #

  case 1

  di)ital*rite!led1% //";

  di)ital*rite!led2% //";

  di)ital*rite!led3% //";

  di)ital*rite!led4% //";

  di)ital*rite!led5% //";

  brea7;

  case 9

  di)ital*rite!led1% +&*";

  di)ital*rite!led2% +&*";

  di)ital*rite!led3% +&*";

  di)ital*rite!led4% +&*";

  di)ital*rite!led5% +&*";

  brea7;

  ,  estados = 18;

  brea7;

  case 4

  // Secuencia : enciende ' apaga todos los L#,s con atenuacion

  estados = 15;

  sitch !estado_secuencia" #

  case 1

  // 0ajamos el tiempo a 1ms porue la atenuacion reuiere

  // ue se incremente la intensidad de a pocos.

  tiempo = 5; 

if !aumentando_intensidad" #

  intensidad = intensidad  1;

  if !intensidad = 255" #  intensidad = 255;

Page 11: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 11/17

  aumentando_intensidad = false;

  , else #

  estado_secuencia = 0; // Para uedarnos en el estado +

  ,

  , else # 

intensidad = intensidad  1;

  if !intensidad := 0" #  intensidad = 0;

  aumentando_intensidad = true;

  , else #

  estado_secuencia = 0; // Para uedarnos en el estado +

  ,

  ,

  analo)*rite!led1% intensidad";

  analo)*rite!led2% intensidad";

  analo)*rite!led3% intensidad";

  analo)*rite!led4% intensidad";

  analo)*rite!led5% intensidad";

  brea7;

  case 2  // )egresamos el tiempo a +22ms porue 'a no necesitamos

  //

tiempo = 100;

  brea7;

  ,

  brea7;

  case 5

  // Secuencia 1: alterna encendido de L#,s con atenuacion

  estados = 15;

  sitch !estado_secuencia" #

  case 1

  // 0ajamos el tiempo a 1ms porue la atenuacion reuiere

  // ue se incremente la intensidad de a pocos

  tiempo = 5;

  if !aumentando_intensidad" #

  intensidad = intensidad  1;

  if !intensidad = 255" #

  intensidad = 255;

  aumentando_intensidad = false;

  , else #

  estado_secuencia = 0; // Para uedarnos en el estado +

  ,

  , else # 

intensidad = intensidad  1;

  if !intensidad := 0" #  intensidad = 0;

  aumentando_intensidad = true;

  , else #

  estado_secuencia = 0; // Para uedarnos en el estado +

  ,

  ,

  analo)*rite!led1% intensidad";

  analo)*rite!led2% 255intensidad";

  analo)*rite!led3% intensidad";

  analo)*rite!led4% 255intensidad";

  analo)*rite!led5% intensidad";

  brea7;

  case 2  tiempo = 100;

Page 12: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 12/17

  brea7;

  ,

  brea7;

  ,

  // #valuamos si llegamos al estado final

  if ! estado_secuencia == estados " #

  estado_secuencia = 1;  , else #

  estado_secuencia = estado_secuencia  1;

  ,

  // #speramos 3tiempo3 milisegundos

  dela!tiempo";

,

Page 13: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 13/17

Hace un tiempo compre una placa de Arduino pero por falta de tiempo, había hecho algunos

ejemplos pero quería al menos documentar como funciona de una manera sencilla (para

dummies), ademas que acabando de cursar una materia de la Universidad llamada

Microprocesadores en la cual se aprendió bastante pero tambin miraba que todo lo

que hacíamos en las pr!cticas se me facilitaría la vida si usara mi placa de Arduino (adem!sque aunque los pic"s son baratos tocaba comprar quemador de pic"s) # bueno de ahi surgío

este peque$o ejemplo, espero que les guste # cualquier cosa no duden en preguntar o

colaborar en el aprendi%aje de esta gran placa&

Materiales

' laca de arduino

' rotoboard

*eds (cualquier color)

resistencias de ++ -

' resistencia de ' . -

' pulsador

/able Utp

' 0l programa consiste en que al presionar el pulsador los leds cambien de secuencia, las

secuencias son las siguientes (') *eds 0ncendidos () *eds apagado1

a)

'

'

'

&

&

'

b)

' '

' ' ' '

' ' ' ' ' '

' ' ' ' ' ' ' '

c)

'

' '

' ' '

&

&

' ' ' ' ' ' ' '

Page 14: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 14/17

d)

' ' ' '

' ' ' '

&

&

+& /omo sabemos los leds tiene un anodo (2) # un catodo (3), de un lado conectaremos todos

los /atodos a las resistencias de ++ - # estas a 456 # de los anodos conectaremos a los

pines del + al 7, las resistencias se colocan con el 8n que no quemar los leds&

9& /onectamos el pulsador de la siguiente manera de un lado a :; # del otro conectamos una

resistencia a tierra # tambien un cable al pin A que sera el que nos permita cambiar de

secuencia cada ve% que lo presionemos, <e coloca la resistencia de ' = - porque haria un

puente entre 456 # el pin A de esta manera la lectura de entrada sera siempre , al

presionar el pulsador lo que hace es hacer puente entre :; # A, de esta manera

conseguimos el valor de ' con esto los valores de entrada unicamente seran ' # &

Aquí muestro el montaje reali%ado en un soft>are llamado ?rit%ing ; &@& de licencia 45U

4* v9 el cual lo pueden conseguir en http1>>>&frit%ing&org

Montaje en rotoboard

Page 15: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 15/17

0squema ro#ecto

B& /argar el siguiente código, esta eCplicado&

int saltarDE ;ariable que indica el numero de la secuencia a ejecutarse

void setup() F

pinMode(A, G5U)E indicamos el pin de entrada

for(int iD+EiID7Ei22)F indicamos los pines de salida

pinMode(i, JUU)E

K

K

void loop() F

if (digitalLead(A)DDHG4H)F Al presionar el pulsador

saltar22E /ambia de secuencia

if (saltar9)F <olo ha# B secuencias ,',+ # 9 al ser 9 & &

saltarDE ;uelve a secuencia

K

>hile (digitalLead(A)DDHG4H)FK Mientras se pulsa no haga nada mas

K

if(saltarDD)F <i es ' inicie funcion de secuencia'

secuencia'()E

K

if(saltarDD')F <i es + inicie funcion de secuencia+

secuencia+()E

K

Page 16: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 16/17

if(saltarDD+)F <i es 9 inicie funcion de secuencia9

secuencia9()E

K

if(saltarDD9)F <i es B inicie funcion de secuenciaB

secuenciaB()EK

K

void secuencia'()F

for (int iD+E iID7E i22)F in + al 7

digitalNrite(i, HG4H)E renda pin actual

digitalNrite(i3',*JN)E Apage el Anterior

dela#(:)E retardo entre prender # apagar

Kfor (int iD7E iD+E i33)F Al contrario de la

digitalNrite(i, *JN)E anterior secuencia va de 7 a +

digitalNrite(i3',HG4H)E

dela#(:)E

K

K

void secuencia+()F

int =D''E iniciali%o una variable auCiliar . 

for(int iDOE iID7Ei22)F leo de O a 7

digitalNrite(i, HG4H)E prendo pin actual

digitalNrite(=3i, HG4H)E prendo pin de la diferencia ''3O D :

dela#(:)E retardo

K

for(int iD7E iD+Ei33)F Al contrario de lo anterior

digitalNrite(i, *JN)E

digitalNrite(=3i, *JN)E

dela#(:)E

K

K

void secuencia9()F

for(int iD+E iID7E i22)F

digitalNrite(i,HG4H)E

dela#(:)E

K

for(int iD7E iD+Ei33)F

digitalNrite(i,*JN)E

dela#(:)E

Page 17: Tutorial en arduino

7/21/2019 Tutorial en arduino

http://slidepdf.com/reader/full/tutorial-en-arduino 17/17

K

K

void secuenciaB()F

int =D''Efor(int iD+E iID:Ei22)F

digitalNrite(i,HG4H)E

digitalNrite(=3i,*JN)E

K

dela#(':)E

for(int iD+E iID:Ei22)F

digitalNrite(i,*JN)E

digitalNrite(=3i,HG4H)E

Kdela#(':)E

K

Ahi los dejo con una imagenes # un video de lo que hace&