You are on page 1of 28

Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un

entorno de desarrollo, diseada para facilitar el uso de la electrnica en proyectos


multidisciplinares. Existen varios tipos, la de uso ms normal es la denominada ARDUINO UNO.

Una de las caractersticas principales de Arduino es que puede tomar informacin del entorno a
travs de sus entradas analgicas y digitales, puede controlar luces, motores y otros actuadores.
En la imagen se puede ver un esquema de sus entradas:

Terminal de referencia analgica (naranja)


Tierra digital (verde claro)
Terminales digitales 2-13 (verde)
Terminales digitales 0-1/ E/S serie - TX/RX (verde oscuro) - Estos pines no se pueden utilizar
como e/s digitales (digitalRead() y digitalWrite()) si ests utilizando comunicacin serie (por
ejemplo Serial.begin).
Botn de reinicio - S1 (azul oscuro)
Programador serie en circuito "In-circuit Serial Programmer" o "ICSP" (azul celeste)
Terminales de entrada analgica 0-5 (azul claro)
Terminales de alimentacin y tierra (alimentacin: naranja, tierras: naranja claro)
Entrada de alimentacin externa (9-12VDC) - X1 (rosa)
Selector de alimentacin externa o por USB (coloca un jumper en los dos pines ms cercanos de
la alimentacin que quieras) - SV1 (prpura). En las versiones nuevas de Arduino la seleccin de
alimentacin es automtica por lo que puede que no tengas este selector.
USB (utilizado para subir programas a la placa y para comunicaciones serie entre la placa y el
ordenador; puede utilizarse como alimentacin de la placa) (amarillo).
Esta placa tiene software propio de programacin, que se puede encontrar en la web del proyecto.
https://www.arduino.cc
Programacion Estructura de un sketch

La estructura bsica del lenguaje de programacin de Arduino es bastante simple y se compone


de al menos dos partes. Estas dos partes necesarias, o funciones, encierran bloques que
contienen declaraciones, estamentos o instrucciones.
void setup()
{

estamentos;
}

void loop()
{

estamentos;
}
En donde setup() es la parte encargada de recoger la configuracin
y loop() es la que contienen el programa que se ejecutar cclicamente (de ah el termino loop
bucle-). Ambas funciones son necesarias para que el programa trabaje.

La funcin de configuracin debe contener la declaracin de las variables. Es la primera funcin a


ejecutar en el programa, se ejecuta slo una vez, y se utiliza para configurar o inicializar pinMode
(modo de trabajo de las E/S), configuracin de la comunicacin en serie y otras.

La funcin bucle (loop) siguiente contiene el cdigo que se ejecutara continuamente (lectura de
entradas, activacin de salidas, etc) Esta funcin es el ncleo de todos los programas de
Arduino y la que realiza la mayor parte del trabajo.

setup()

La funcin setup() se invoca una sola vez cuando el programa empieza. Se utiliza para inicializar
los modos de trabajo de los pins, o el puerto serie. Debe ser incluido en un programa aunque no
haya declaracin que ejecutar. As mismo se puede utilizar para establecer el estado inicial de las
salidas de la placa.
void setup()
{
pinMode(pin, OUTPUT); // configura el 'pin' como

salida
digitalWrite(pin, HIGH); // pone el pin en estado
// HIGH

loop()

Despus de llamar a setup(), la funcin loop() hace precisamente lo que sugiere su nombre, se
ejecuta de forma cclica, lo que posibilita que el programa este respondiendo continuamente ante
los eventos que se produzcan en la placa.

void loop()
{
digitalWrite(pin, HIGH); // pone en uno (on, 5v) elpin delay(1000); // espera un segundo
(1000 ms) digitalWrite(pin, LOW); // pone en cero (off, 0v.) el delay(1000); // pin
}

funciones
Una funcin es un bloque de cdigo que tiene un nombre y un conjunto de instrucciones que son
ejecutadas cuando se llama a la funcin. Son funciones setup() y loop() de las que ya se ha
hablado. Las funciones de usuario pueden ser escritas para realizar tareas repetitivas y para
reducir el tamao de un programa. Las funciones se declaran asociadas a un tipo de valor. Este
valor ser el que devolver la funcin, por ejemplo 'int' se utilizar cuando la funcin devuelva un
dato numrico de tipo entero. Si la funcin no devuelve ningn valor entonces se colocar delante
la palabra void, que significa funcin vaca. Despus de declarar el tipo de dato que devuelve
la funcin se debe escribir el nombre de la funcin y entre parntesis se escribirn, si es
necesario, los parmetros que se deben pasar a la funcin para que se ejecute.
tipo nombreFuncin(parmetros)
{
instrucciones;
}

La funcin siguiente devuelve un nmero entero, delayVal() se utiliza para poner un valor de
retraso en un programa que lee una variable analgica de un potencimetro conectado a una
entrada de Arduino. Al principio se declara como una variable local, v recoge el valor ledo del
potencimetro que estar comprendido entre 0 y 1023, luego se divide el valor por 4 para ajustarlo
a un margen comprendido entre 0 y 255, finalmente se devuelve el valor v y se retornara al
programa principal.

int delayVal()
{
int v; // crea una variable temporal 'v' v= analogRead(pot); // lee el valor del
potencimetro v /= 4; // convierte 0-1023 a 0-255 return v; // devuelve el valor
final
}

{} entre llaves
Las llaves sirven para definir el principio y el final de un bloque de instrucciones. Se utilizan para
los bloques de programacin setup(), loop(), if.., etc.
type funcion()
{
instrucciones;
}

Una llave de apertura { siempre debe ir seguida de una llave de cierre }, si no es as el


compilador dar errores.

El entorno de programacin de Arduino incluye una herramienta de gran utilidad para comprobar
el total de llaves. Slo tienes que hacer click en el punto de insercin de una llave abierta e
inmediatamente se marca el correspondiente cierre de ese bloque (llave cerrada).

; punto y coma

El punto y coma ; se utiliza para separar instrucciones en el lenguaje de programacin de


Arduino. Tambin se utiliza para separar elementos en una instruccin de tipo bucle for.

int x = 13; // declara la variable 'x' como tipo


// entero de valor 13

Nota: Si olvidis poner fin a una lnea con un punto y coma se producir en un error de
compilacin. El texto de error puede ser obvio, y se referir a la falta de un punto y coma, o puede
que no. Si se produce un error raro y de difcil deteccin lo primero que debemos hacer es
comprobar que los puntos y comas estn colocados al final de las instrucciones.
colocados al final de las instrucciones.

/* */ bloque de comentarios
Los bloques de comentarios, o comentarios multi-lnea son reas de texto ignorados por el
programa que se utilizan para las descripciones del cdigo o comentarios que ayudan a
comprender el programa. Comienzan con / * y terminan con * / y pueden abarcar varias lneas.
/* esto es un bloque de comentario no se debe olvidar cerrar los comentarios estos deben estar
equilibrados */

Debido a que los comentarios son ignorados por el compilador y no ocupan espacio en la
memoria de Arduino pueden ser utilizados con generosidad. Tambin pueden utilizarse para
"comentar" bloques de cdigo con el propsito de anotar informaciones para depuracin y hacerlo
mas comprensible para cualquiera.

Nota: Dentro de una misma lnea de un bloque de comentarios no se puede escribir otra bloque
de comentarios (usando /*..*/).

// lnea de comentarios

Una lnea de comentario empieza con / / y terminan con la siguiente lnea de cdigo. Al igual que
los comentarios de bloque, los de lnea son ignoradas por el programa y no ocupan espacio en la
memoria.

// esto es un comentario

Una lnea de comentario se utiliza a menudo despus de una instruccin, para proporcionar ms
informacin acerca de lo que
hace esta o para recordarla ms adelante.

HARDWARE DEL ARDUINO :


// photoresistor
int photosensorPin = 0;
int piezoPin = 9;
int val = 0;

void setup() {
pinMode(piezoPin, OUTPUT);
}

void loop() {
digitalWrite(piezoPin, LOW);
val = analogRead(photosensorPin);
val = val/2;

for( int i=0; i// play it for 50 cycles


digitalWrite(piezoPin, HIGH);
delayMicroseconds(val);
digitalWrite(piezoPin, LOW);
delayMicroseconds(val);
}
}

onboard photoresistor, with 4 pins for 5V power supply,GND


power, TTL Digital output and Analog output. This light
sensor module comes with indicator for output signal and the
sensitivity is adjustable.
Main Chip: LM393, photoresistor
Working Voltage: DC 3V ~ 5V
Single-way output signal with indication (0 and 1)
Output in the form of a analog voltage
Low-level output for effective signal
Sensitivity is adjustable (potentiometer shown in blue)
Perfect for light control applications
With fixed bolt hole for easy installation
PCB Size: Approx. 30 x 16 mm
Wiring:
Vcc - +5V / 3.3V
GND - GND
D0 - Digital output (0 and 1)
A0 - Analog output

int fsrAnalogPin = 0; // FSR is connected to analog 0


int LEDpin = 11; // connect Red LED to pin 11 (PWM pin)
int fsrReading; // the analog reading from the FSR resistor divider

void setup(void) {
Serial.begin(9600); // We'll send debugging information via the Serial monitor
pinMode(LEDpin, OUTPUT);
}

void loop(void) {
fsrReading = analogRead(fsrAnalogPin);
Serial.print("Analog reading = ");
Serial.println(fsrReading);

// LED gets brighter the harder you press


analogWrite(LEDpin, fsrReading);

delay(100);
}
An SSR (Solid State Relay) is even simpler, but
usually a bit more expensive. (This one seems to
be very low priced, at USD 3.50 at Digikey.)
// Equipo formado por: Hctor Vallejos, Diego
Theriano y Rubn Roldn

#define PULSADOR 7
#define ROJO 12
#define AMARILLO 11
#define VERDE 10
#define PEATON_ROJO 8
#define PEATON_BLANCO 9
#define TIEMPO_AMARILLO 1000
#define TIEMPO_ROJO 5000
void setup() {
// initialize digital pin 13 as an output.
pinMode(ROJO, OUTPUT);
pinMode(AMARILLO, OUTPUT);
pinMode(VERDE, OUTPUT);
pinMode(PEATON_ROJO, OUTPUT);
pinMode(PEATON_BLANCO, OUTPUT);
digitalWrite(VERDE, HIGH); // turn the LED on
(HIGH is the voltage level)
digitalWrite(PEATON_ROJO, HIGH); // turn the
LED on (HIGH is the voltage level)
digitalWrite(ROJO, LOW);
digitalWrite(AMARILLO, LOW);
}
void loop() {
if(!digitalRead(PULSADOR)){
digitalWrite(AMARILLO, HIGH);
digitalWrite(VERDE, LOW);
delay(TIEMPO_AMARILLO);
digitalWrite(ROJO, HIGH);
digitalWrite(AMARILLO, LOW);
digitalWrite(PEATON_ROJO, LOW);
digitalWrite(PEATON_BLANCO, HIGH);
delay(TIEMPO_ROJO);
digitalWrite(AMARILLO, HIGH);
digitalWrite(PEATON_ROJO, HIGH);
digitalWrite(PEATON_BLANCO, LOW);
delay(TIEMPO_AMARILLO);
digitalWrite(ROJO, LOW);
digitalWrite(AMARILLO, LOW);
digitalWrite(VERDE, HIGH);
}
delay (100);
}// FIN DEL LOOP
Tutorial 02 Entradas y salidas digitales
en Arduino
junio 20, 2012Romulo BenitezDeja un comentarioGo to comments
Antes de empezar aclararemos algunos conceptos bsicos acerca del tpico. Para
conocimiento de los lectores quien les escribe no es electrnico de formacin, ya que mi
especialidad es el desarrollo y la arquitectura de software, por esa razn me pongo en los
zapatos de muchos lectores y les har la lectura lo ms sencilla posible.

Antes de iniciar con los ejercicios es recomendable que descarguen la gua Arduino
Programming Notebook (espaol) la cual est bajo la licencia Creative Commons. Aqu
encontrarn ejemplos de las funciones ms importantes de Arduino que les ayudarn a hacer
ms sencilla al comprensin.

Teora Prelimiar de Captulo:


Como les mencion en el tutorial anterior, Arduino est formado basicamente por pines de
entrada, un microcontrolador en el medio y pines de salida. Los pines de entrada sirven para
escuchar y capturar informacin del exterior, ejem: pulsadores, sensores, lectoras, etc.; el
microcontrolador sirve para procesar el programa cargado y finalmente los pines de salida
sirven para enviar informacin desde la tarjeta Arduino hacia el exterior.

Al hablar de Entradas o Salidas digitales se entiende que tanto la informacin que escuchan
como las respuestas pueden tener solamente dos estados: +5voltios o O voltios. OJO: Esto es
solamente cuando se habla de seales digitales. En la lgica Arduino las seales digitales
pueden manejar los siguientes valores o estados:

Estado digital 5 voltios 0 voltios


Opcin 1 HIGH LOW
Opcin 2 1 O
Opcin 3 TRUE FALSE
TODO programa en Arduino debe tener dos funciones bsicas: setup() y loop(). La sintaxis
(forma de escribir) es la siguiente:

void setup(){
}
void loop(){
}

La funcin setup() sirve para definir el comportamiento inicial de mi placa Arduino, es decir
cuando la a una fuente de alimentacin (pila, batera). Algunos ejemplos de uso de la
funcin setup() son: Que pines voy a utilizar, cules sern entradas y cules salidas, iniciar
alguna variable, etc
La funcin loop() sirve para definir todas las tareas que Arduino ejecutar repetidamente
mientras est conectada. Por ejemplo: Leer el valor de las entradas, escribir en los pines de
salida, enviar alertas, emitir sonidos, enviar mensajes por el puerto serial, etc.

Ejemplo 01: (descargar T01_SampleA)


Para este ejemplo montaremos el siguiente circuito y necesitaremos las sigueintes partes:

1. Una tarjeta Arduino UNO

2. 5 Leds de colores (rojo, verde, amarillo, azul, naranja). Si no tienes de colores igual
funcionar =)

3. 1 tablero de prototipeo.

4. cables para puentes.

5. 1 microswitch

6. 5 resistencias de 220 , 1 resistencia de 10 k.

Circuito a montar:

Primero ingresamos el cdigo en nuestro Sketch. El lenguaje de Arduino est basado en


Processing que es una lenguaje muy parecido al C++ y al mismo Java. Lo puedo afirmar ya
que programo en ambos lenguajes. A mi modesto parecer este se ha simplificado para que
ser facilmente aplicable.
Lo primero que encontramos es la funcin setup() donde se definen los parmetros iniciales
de la aplicacin. El comando void significa que la funcin no devuelve nada, esto lo
veremos en el siguiente tutorial. Luego encontramos la palabra setup() que viene a ser el
nombre de la funcin. Los parntesis () son obligatorios y en un futuro colocaremos valores
dentro de ellos llamados argumentos. Seguidamente encontramos las llaves {}, las cuales
nos indican el inicio y el fin de la funcin. Dentro de las llaves colocamos los comandos que
queremos que se ejecuten dentro de la funcin. En el ejemplo usamos pinMode( numero de
pin [valor entero], tipo [HIGH/LOW]) la cual defne el comportamiento del pin Arduino

void setup(){
//Configuramos los pines como salidas.
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}

La siguiente funcin es loop() la cual se ejecuta continuamente cientos de veces por segundo,
por lo tanto es importante saber como controlar este proceso repetitivo en favor nuestro. La
primera instruccin o comando es digitalWrite( numero de pin [valor entero], tipo
[HIGH/LOW] ). Este comando lo que hace enviar un valor al pin de salida el cual puede ser
O 5 voltios. De esta manera se explica cmo es que un pin puede mandar el voltaje
necesario para encender un Led.

Primero encendemos el pin 2 con el valor HIGH, luego con la funcin delay(500) creamos un
retardo de medio segundo. Con la funcin delay() hay que tener mucho cuidado ya que cada
vez que se llama detiene la ejecucin del bloque loop(), dejando como en un estado
suspendido a Arduino. En otro tutorial veremos otras formas de reemplazar a delay() sin
necesidad de detener la ejecucin de Arduino.

void loop(){
//ENCENDEMOS LOS PINES DEL 2 AL 7 CADA MEDIO SEGUNDO
digitalWrite(2,HIGH);
delay(500);
digitalWrite(3,HIGH);
delay(500);
....

Finalmente volvemos a llamar a la funcin digitalWrite(pin, LOW) para apagar los pines. El
parmetro LOW indica que se enviar un nivel bajo al pin, es decir O voltios. Ntese que se
dejan apagados por 1 segundo con el comando delay(1000).

//APAGAMOS LOS PINES DEL 2 AL 7


digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
//LOS MANTENEMOS APAGADOS POR 1 SEGUNDO
delay(1000);
}

Teora instruccin For:


La instruccin for() es un contador y ejecuta una tarea repetitiva el nmero de veces que se le
indique. Tiene tres partes separadas por (;) y la sintaxis es la siguiente:

for (inicializacin; condicin; expresin)


{
Instrucciones
}
En la prctica sera algo as:
for (int x=0; x<10; x++)
{
digitalWrite(2,HIGH);
delay(500);
digitalWrite(2,HIGH);
delay(500);
}

Ejemplo 02: (descargar T02_SampleB)


Ahora optimizaremos un poco el cdigo del programa usando los bucles. Si lo notas escribir
7 veces pinMode() y 7 veces digitalWrite() puede parecer un poco ocioso. Para esto
podemos utilizar la instruccin for() como un contador de pines del 2 al 7. Veamos el
cdigo:

void loop(){
//ENCENDEMOS LOS PINES DEL 2 AL 7 CADA MEDIO SEGUNDO
for (int i= 2; i<=7; i++)
{
digitalWrite(i,HIGH);
delay(500);
}

En la lnea for (int i= 2; i<=7; i++) se define lo siguiente:


Inicializacin: Se declara una variable de tipo entero llamada i (int i) con el valor 2.
Condicin: el contador ir desde 2 (valor asignado en la Inicializacin) hasta 7.
Expresin: i++ indica que el valor incrementar de 1 en 1, es decir tomar los valores
2,3,4,5,6,7. Si se colocara i+=2 el contador incrementar de 2 en 2 y tomara los valores
2,4,6; no llegara a 8 puesto que la condicin dice que debe ser <=7.
Finalmente apagamos los pines 2,3,4,5,6,7 usando nuevamente la instruccin for(). Esta vez
pasamos el valor O en lugar de LOW ya que como dijimos al principio en Arduino LOW,
FALSE y O tiene el mismo valor al escribir una salida.

for (int i= 2; i<=7; i++)


{
digitalWrite(i,0);
}
//LOS MANTENEMOS APAGADOS POR 1 SEGUNDO
delay(1000);
}

Ejemplo 03: Agregando una entrada digital (descargar T02_SampleC)


En este ejemplo haremos que la secuencia funcione slo mientras tengamos un pulsador
presionado. Para leer una entrada digital usamos el funcin digitalRead(# de pin) la cual
devolver dos valores posibles: HIGH o LOW. Ser HIGH cuando se inserten 5 voltios en
el pin; mientras que ser LOW cuando el pin est conectado a tierra (GND).

Armamos el siguiente circuito:

Veamos los cambios en la funcin setup()

void setup(){
for (int i=2; i<=7;i++){
pinMode(i, OUTPUT);
}
//Nueva linea. Le indica a Arduino que se van a leer seales digitales por la entrada 12.
pinMode(12,INPUT); }

Ahora veamos los cambios en la funcin loop(). Lo primero que se puede apreciar es la
aparicin de la funcin if-else. Esta es una condicional que evala una condici[on y
dependiendo del resultado ejecuta una u otra accin. En nuestro caso la condicin a evaluar
ser: Si al iniciar loop() Arduino sensa 5 voltios (HIGH) en el pin 12, entonces Arduino
ejecutar la tarea de secuenciar el encendido de los leds.
Nota: En este ejemplo una vez que pasa la validacin if ya no se puede detener la ejecucin
del programa hasta que se inicie el nuevo ciclo loop().

void loop(){
//SI LEE UNA SEAL ALTA EN EL PIN 12
if (digitalRead(12)==HIGH){
//ENCENDEMOS LOS PINES DEL 2 AL 7 CADA MEDIO SEGUNDO
for (int i= 2; i<=7; i++)
{
digitalWrite(i,HIGH);
delay(500);
}

//APAGAMOS LOS PINES DEL 2 AL 7


for (int i= 2; i<=7; i++)
{
digitalWrite(i,LOW);
}
} //FIN DEL BLOQUE IF.
}

Una vez que apaga los leds Arduino estar a la espera que presionemos el pulsador para
nuevamente iniciar el encendido secuencial de los leds.

Espero este tutorial les haya servido. Nos vemos pronto. No olvide aportar con sus
comentarios. En la parte proyectos ver un trabajo aplicando lo aprendido en este tutorial.

Estructura de un programa en Arduino : La estructura bsica del lenguaje de programacin


de Arduino se compone de al menos dos partes. Estas dos partes necesarias, llamadas
funciones, encierran bloques que contienen declaraciones e instrucciones.

setup() es la funcin encargada de establecer la configuracin y se ejecutar una nica


vez al comienzo del programa

loop() es la que contiene el programa que se ejecutar cclicamente (de ah el trmino

loop bucle-).

Ambas funciones son necesarias para que el programa trabaje.

La funcin de configuracin (setup) es la primera funcin a ejecutar en el programa, se


ejecuta slo una vez, y se utiliza para:

D
eclaracin de las variables a utilizar por el programa
C
onfigurar e inicializar los pines como entrada o salida (pinMode)

C
onfiguracin de la comunicacin en serie

Otras acciones que deban ejecutarse solo una vez y al comienzo

La funcin bucle (loop) siguiente contiene el cdigo que se ejecutar continuamente


(lectura de entradas, activacin de salidas, etc). sta funcin es el ncleo de todos los
programas de Arduino y la que realiza la mayor parte del trabajo.

setup()

La funcin setup() se invoca una sola vez cuando el programa empieza. Se utiliza para
inicializar los modos de trabajo de los pins, o el puerto serie. Debe ser incluido en un
programa aunque no haya declaracin que ejecutar. As mismo se puede utilizar para
establecer el estado inicial de las salidas de la placa.

void setup()

pinMode(pin, OUTPUT); // configura el 'pin' como salida

digitalWrite(pin, HIGH); // pone el pin en estado HIGH

loop()

Despus de llamar a setup(), la funcin loop() hace precisamente lo que sugiere su


nombre, se ejecuta de forma cclica, lo que posibilita que el programa est respondiendo
continuamente ante los eventos que se produzcan en la placa.

void loop()

digitalWrite(pin, HIGH); // pone en uno (on, 5v) el 'pin'

delay(1000); // espera un segundo (1000 ms)

digitalWrite(pin, LOW); // pone en cero (off, 0v.) el 'pin'

delay(1000);

funcin

Una funcin es un bloque de cdigo que tiene un nombre y un conjunto de instrucciones


que son ejecutadas cuando se llama a la funcin. Son funciones setup() y loop() de las que
ya se ha hablado. Las funciones de usuario pueden ser escritas para realizar tareas

repetitivas y para reducir el tamao de un programa.


type nombreFuncin(parmetros)

instruccin;

{} entre llaves

Las llaves sirven para definir el principio y el final de un bloque de instrucciones. Se


utilizan para los bloques de programacin setup(),

loop(), if.., etc.

type funcion()

instrucciones;

Una llave de apertura { siempre debe ir seguida de una llave de cierre }, si no es as el


programa dar errores. El entorno de programacin incluye una herramienta para
comprobar el total de llaves. Slo tienes que hacer click en el punto de insercin de una
llave abierta e inmediatamente se marca el correspondiente cierre del bloque (llave
cerrada).

; punto y coma

El punto y coma ; se utiliza para separar instrucciones en el lenguaje de programacin de


Arduino.

int x = 13; /* declara la variable 'x' como tipo entero de valor 13 */

Nota: Es muy comn que la omisin del ; al final de una instruccin genere errores de
compilacin que no siempre son tan fciles de detectar.El texto de error puede ser obvio, y
se referir a la falta de un punto y coma, o puede que no. Si se produce un error raro y de
difcil deteccin lo primero que debemos hacer es comprobar que los puntos y comas estn
colocados al final de las instrucciones.

/* */ bloque de comentarios
Los bloques de comentarios, o comentarios multi-lnea son reas de texto ignorados por el
programa que se utilizan para las descripciones del cdigo o comentarios que ayudan a
comprender el programa. Comienzan con /* y terminan con */ y pueden abarcar varias
lneas.

/* esto es un bloque de comentario no se debe olvidar cerrar los comentarios estos


deben estar equilibrados */

Debido a que los comentarios son ignorados por el compilador y no ocupan espacio en la
memoria de Arduino pueden ser utilizados con generosidad. Tambin pueden utilizarse
para "comentar" bloques de cdigo con el propsito de anotar informaciones extra y
hacerlo ms comprensible para cualquiera.

// lnea de comentarios

Una lnea de comentario empieza con // y terminan con la siguiente lnea de cdigo. Al
igual que los comentarios de bloque, los de lnea son ignoradas por el programa y no
ocupan espacio en la memoria. Una lnea de comentario se utiliza a menudo despus de
una instruccin, para proporcionar ms informacin acerca de lo que hace sta o para
recordarla ms adelante.

//led programa 1

void setup() { //comienza la configuracion

pinMode(13, OUTPUT); //configura el pin 13 como de salida

} //termina la configuracion

void loop() { //comienza el bucle principal del programa

digitalWrite(13, HIGH); //envia 5V al pin (salida) 13

delay (500); //espera 500 ms pin 13 con 5V

digitalWrite(13, LOW); //envia 0V al pin (salida) 13

delay (100); //espera 100 ms pin 13 con 0V

}
Nota 1: Es importante tomar en cuenta que el pin13 de nuestra placa Aruino
UNO posee una resistencia interna lo que hace posible conectar nuestro
led directamente a la placa, si nosotros por ejemplo utilizramos otro pin en
vez del pin13, se hubiese tenido que conectar en serie una
resistencia de 220 ohm para no quemar el led ya que la
tensin (Voltaje) es de 5 Volts y la resistencia del led es
prcticamente nula (casi 0 ohm) por lo que es
prcticamente como tener un cortocircuito y esto lo debemos
evitar a toda costa. Esto lo pueden saber conociendo la Ley de Ohm

Nota 2: Deben conectar correctamente el LED, este tiene un lado positivo y


otro negativo, la tierra (GND) debe ir conectada al lado que tiene una parte recta,
ademas esa parte recta esta del lado que tiene la pata mas corta del led. del
lado que tiene la pata mas larga el led se conecta el lado positivo (5 Volts).

Secuencia de LEDs : Se trata de encender y apagar 4 leds


secuencialmente. Los leds deben estar conectados a los pines 5,6,7 y 8.
Se deben encender y posteriormente apagar los leds desde el pin 5 al 8, con un tiempo de
duracin de encendido y apagado de 200 ms (0,2 Seg).

Nota: en una segunda solucin la secuencia principal del programa debe estar
reproducida en una funcin a la que llamar el programa principal.

Circuito en Fritzing : En la imagen siguiente se muestra como conectar el circuito


correctamente, asegrense de tener bien conectados los LEDs para no tenerlos
polarizados inversamente,

Cdigos arduino

Solucin 1

int tiempo=200;

int n;

void setup() { //comienza la configuracion

for (n=5;n<9;n++) {

pinMode (n, OUTPUT);

}}

void secuencia() {
for (n=5;n<9;n++) {

digitalWrite (n, HIGH);

delay (tiempo);

digitalWrite (n, LOW);

delay (tiempo);

}}

void loop() {

secuencia();

Solucin 2:

int tiempo=200;

int n;

void setup() { //comienza la configuracion

for (n=5;n<9;n++) {

pinMode (n, OUTPUT);

}}

void secuencia() {

for (n=5;n<9;n++) {

digitalWrite (n, HIGH);

delay (tiempo);

digitalWrite (n, LOW);

delay (tiempo);

}}

void loop() {

secuencia();

Solucin 3:

int leds[]={5,6,7,8};// Declara variables tipo lista de valores


int tiempo=200;

int n=0;

void setup() { //comienza la configuracion

for (n=0;n<4;n++) {

pinMode (leds[n], OUTPUT);

}}

void secuencia() {

for (n=0;n<4;n++) {

digitalWrite (leds[n], HIGH);

delay (tiempo);

digitalWrite (leds[n], LOW);

delay (tiempo);

}}

void loop() {

secuencia();

Este tutorial trata de un cruce de semforos controlado por arduino, para ello utilizaremos
en el primer semforo los pines 3 (led rojo), 4 (led amarillo), 5 (led verde), en el segundo
semforo utilizaremos los pines 6 (led rojo), 7 (led amarillo) y 8 (led verde). La secuencia
de funcionamiento sera :

Rojo1+Verde2(3 seg)

Rojo1+Amarillo2(500ms)

Verde1+Rojo2(3seg)

Amarillo1+Rojo2(500ms)

Circuito en Fritzing: Lo ideal es que implementen este


circuito ya que los led soportan una corriente
mxima, siempre se conectan los leds con resistencias de
220 ohm para no quemarlos, si fuera de menos
resistencia lo mas probable es que se quemen los led o
disminuya su vida til. si nos ponemos en el caso
contrario y le ponemos una resistencia mayor a 220 ohm comenzara a decrecer la
luminosidad del led.

Cdigo para arduino

int leds[]={3,4,5,6,7,8};//semaforo 1 y 2 (rojo, amarillo, verde)

int tiempo1=3000;

int tiempo2=500;

int n;

void setup() {

for (n=0;n<6;n++) {

pinMode (leds[n],OUTPUT);

}}

void secuencia(){

digitalWrite (leds[1],LOW);//amarillo1 off

digitalWrite (leds[0],HIGH);//rojo1 on

digitalWrite (leds[3],LOW);//rojo2 off

digitalWrite (leds[5],HIGH);//verde2 on

delay (tiempo1);

digitalWrite (leds[5],LOW);//verde2 off

digitalWrite (leds[4],HIGH);//amarillo2 on

delay (tiempo2);

digitalWrite(leds[0],LOW);//rojo1 off

digitalWrite (leds[2],HIGH);//verde1 on

digitalWrite (leds[4],LOW);//amarillo2 off

digitalWrite (leds[3],HIGH);//rojo2 on
delay (tiempo1);

digitalWrite (leds[2],LOW);//verde1 off

digitalWrite(leds[1],HIGH);//amarillo on

delay (tiempo2);

void loop () {

secuencia();

En el cdigo que se muestra puede modificar el tiempo, lo pueden modificar cambiando "int
tiempo1=5000;" "int tiempo2=1500;" por otros valores que deseen por ejemplo para que
sea mas realista lo pueden configurar con un tiempo1=20000 (20 seg) y tiempo2=5000 (5
segundos).La idea del programa es que el tiempo de luz verde + amarillo del semforo 1
sea igual al tiempo de rojo del semforo 2, y de la misma manera que el tiempo de rojo del
semforo 1 sea igual al tiempo del verde + amarillo del semforo 2

En resumen
Verde1+Amarillo1=Rojo2
Rojo1=Verde2+Amarillo2

En este tutorial se muestra como conectar la pantalla LCD 2x16 a una placa arduino UNO.
Esta Pantalla LCD es fcil de programas y solo usa 6 pines del controlador, por lo cual es
una buena opcin cuando se usan pocas entradas/salidas en tu arduino, ademas tiene
unas funciones muy interesantes a las que se le pueden sacar buen partido, como por
ejemplo crear caracteres, deslizar el texto.Aprender a conectar una pantalla LCD 2x16
(modelo LCD 1602A) a un Arduino UNO Conocer la programacin de una pantalla LCD
2x16 implementar en cualquier proyecto con arduino Aprender a usar libreras en Arduino

Pines de alimentacin

VSS: Pin para conectar la pantalla LCD a tierra (GND)

VDD: Pin de alimentacin principal pantalla LCD (5 Volts)

-Regulacin de contraste

V0: Pin para regular contraste de la pantalla, se debe conectar al pin central de un
potencimetro de 10kohm, el cual a su vez debe estar conectado por medio de sus pines
exteriores a la alimentacin y tierra), de manera que al regular el potencimetro se
podr regular el contraste de la pantalla.

-Pines de control

Estos pines deben ser conectados a pines digitales de la placa arduino.

RS: Selector de registro, por medio de este pin la LCD le dice al microcontrolador si lo que
se desea hacer es mostrar caracteres o enviar comandos de control (como cambiar
la posicin del cursor o borrar la pantalla por ejemplo). Cuando RS esta en LOW recibe
datos en modo comando y si esta en HIGH, los datos recibidos sern de texto para mostrar
en pantalla.

RW: Pin de lectura o escritura, sirve para enviar datos al LCD o recibir datos de la LCD.
Para enviar datos al LCD RW debe estar en LOW, para recibir datos de la LCD RW debe
estar en HIGH; en nuestro caso conectaremos RW a tierra de manera que estar siempre
en LOW.

E: Enable, es el pin que habilita la pantalla para comenzar a recibir informacin, sirve para
advertir a la LCD que el microcontrolador va a enviar datos (pueden ser de control
o informacin)

-Pines de informacin

Estos pines se deben conectar a los pines digitales del arduino. Se usan para
estableces lineas de comunicacin en paralelo por donde se transfieren datos y comandos
de control del arduino hacia la LCD. Hay que tomar en cuenta que una LCD de 8 bits
puede funcionar perfectamente con solo 4 bits (cables de datos), pero funcionar con una
menor velocidad.

Los pines de datos D0, D1,D2 y D3 son opcionales, si se omiten en la programacin del
arduino solo se utilizarn D4, D5, D6 y D7

D0, D1, D2, D3: no sern utilizados para esta configuracin de la pantalla, solo se utilizan
cuando se trabaja con 8 bits (son opcionales).

D4, D5, D6, D7: Solo utilizaremos 4 bits para la comunicacin entre la pantalla y
el microcontrolador, por lo que usaremos los pines D4, D5, D6 y D7 (son obligatorios).

-Pines para el circuito de luz de fondo

Como todo LED se le debe conectar una resistencia de 220 ohm para regular su corriente,
no necesariamente tiene que ser una resistencia de ese valor puede ser menor,pero esto
depender siempre de la corriente mxima que pueda aguantar el led. (Revisar Ley de
Ohm)

A: pin de la luz del fondo de la pantalla (anodo), se conecta 4 o 5V

K: pin de la luz del fondo de la pantalla (catodo), se conecta a GND.


Circuito Arduino - Pantalla LCD (Fritzing)

Lo primero que deben conectar son los


cables azul, rojo y morado que se ven en
la imagen, finalmente conectan los cables
de color naranjo y con eso esta lista para
la programacin.

Primero debemos conectar los pines


de alimentacin de la pantalla LCD para
probar si la pantalla enciende
correctamente.

VSS ---->GND

VDD ---->5V

A ---->5V

K ---->GND

Ahora conectamos el circuito a los 5V del Arduino y tambin el GND, si se enciende la


pantalla entonces vamos bien :)

5V (Arduino)----->protoboard (+)

GND (Arduino)-->protoboard (-)

Seguido de esto regulamos el contraste de la pantalla por medio de un potencimetro de


10kohm

Pin 1 potenciometro (izquierda) ---> 5V

Pin 2 potenciometro (centro) ---> V0 (Pantalla LCD)

Pin 3 potenciometro (derecha) ---> GND


Ahora conectamos los pines:

Pantalla LCD RS --> Pin 7 Arduino

Pantalla LCD RW--> GND

Pantalla LCD E --> Pin 8 Arduino

Finalmente solo nos resta conectar los


pines de informacin D4, D5, D6 y D7

D4-->Pin 9 Arduino

D5-->Pin 10 Arduino

D6-->Pin 11 Arduino

D7-->Pin 12 Arduino

Cdigo de ejemplo

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);

void setup() {

lcd.begin(16, 2);

lcd.setCursor(0,0);

lcd.write("Seba Electronic");

lcd.setCursor(6,1);

lcd.write("Labs");

void loop() { }

Librera LiquidCrystal
Esta es una librera oficial de Arduino por lo que todas las versiones de Arduino IDE la
tienen en su software. Para poder utilizarla solo basta con llamarla en el sketch con el
comando #include

#include <LiquidCrystal.h>

Para poder utilizarla tenemos que declarar una variable global con el nombre LiquidCrystal,
la cual en el skecth representa el objeto LCD. En nuestro caso, a esta variable-objeto la
llamaremos "lcd".

LiquidCrystal lcd(RS,RW,ENABLE,D1,D2,D3,D4,D5,D6,D7);

RS: numero de pin de arduino se conecta al pin RS de la pantalla LCD

RW: numero de pin de arduino se conecta al pin RW de la pantalla LCD

ENABLE: numero de pin de arduino se conecta al pin ENABLE (E) de la pantalla LCD

D0...D7: numero de los pines de arduino que van conectados a los pines correspondientes
de la pantalla LCD (D0...D7)

En nuestro caso usaremos 4 bits (solo los pines D4, D5, D6 y D7) y tampoco se utilizar
RW (conectado a GND), de modo que la configuracion ser:

LiquidCrystal lcd(RS,ENABLE,D4,D5,D6,D7);

Un ejemplo de configuracin es el siguiente, donde se usan 4 bits y no se utiliza RW.

LiquidCrystal lcd(7,8,9,10,11,12);

Pin 7: Pin 7 de arduino se conecta a RS de la pantalla LCD

Pin 8: Pin 8 de arduino se conecta a ENABLE de la pantalla LCD

Pin 9: Pin 9 de arduino se conecta a D4 de la pantalla LCD

Pin 10: Pin 10 de arduino se conecta a D5 de la pantalla LCD

Pin 11: Pin 11 de arduino se conecta a D6 de la pantalla LCD

Pin 12: Pin 12 de arduino se conecta a D7 de la pantalla LCD

El que programa la pantalla LCD puede escoger que pines de Arduino utilizar siguiendo el
orden que se muestra anteriormente, no necesariamente tiene que ser 7,8,9,10,11,12
como escog yo en el ejemplo. Otros ejemplos pueden ser los siguientes:

LiquidCrystal lcd(12,11,10,9,8,7);

LiquidCrystal lcd(8,9,10,11,12,13);

Una vez creado el objeto "lcd" es obligatorio establecer el tamao de la pantalla para poder
trabajar con ella. Esto se hace mediante la siguiente funcin.

lcd.begin(16,2);
Donde el primer numero indica las columnas y el segundo la cantidad de filas de la pantalla
LCD

Funciones para controlar la pantalla LCD

Como no quiero hacer mas largo el tutorial dejare esto ultimo, las funciones de la pantalla,
para el proximo tutorial ([Librerias Arduino] Libreria LiquidCrystal) donde hablar de la
librera de la pantalla LCD y sus funciones para la programacin.

[Librerias Arduino 01] Libreria LiquidCrystal

DataSheet

Specifications for LCD Module 1602A-1

User Manual Liquid Crystal Module 1602A Serial

You might also like