Professional Documents
Culture Documents
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:
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 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;
}
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
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.
void setup() {
pinMode(piezoPin, OUTPUT);
}
void loop() {
digitalWrite(piezoPin, LOW);
val = analogRead(photosensorPin);
val = val/2;
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);
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.
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:
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.
2. 5 Leds de colores (rojo, verde, amarillo, azul, naranja). Si no tienes de colores igual
funcionar =)
3. 1 tablero de prototipeo.
5. 1 microswitch
Circuito a montar:
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).
void loop(){
//ENCENDEMOS LOS PINES DEL 2 AL 7 CADA MEDIO SEGUNDO
for (int i= 2; i<=7; i++)
{
digitalWrite(i,HIGH);
delay(500);
}
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);
}
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.
loop bucle-).
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
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()
loop()
void loop()
delay(1000);
funcin
instruccin;
{} entre llaves
type funcion()
instrucciones;
; punto y coma
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.
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
} //termina la configuracion
}
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: en una segunda solucin la secuencia principal del programa debe estar
reproducida en una funcin a la que llamar el programa principal.
Cdigos arduino
Solucin 1
int tiempo=200;
int n;
for (n=5;n<9;n++) {
}}
void secuencia() {
for (n=5;n<9;n++) {
delay (tiempo);
delay (tiempo);
}}
void loop() {
secuencia();
Solucin 2:
int tiempo=200;
int n;
for (n=5;n<9;n++) {
}}
void secuencia() {
for (n=5;n<9;n++) {
delay (tiempo);
delay (tiempo);
}}
void loop() {
secuencia();
Solucin 3:
int n=0;
for (n=0;n<4;n++) {
}}
void secuencia() {
for (n=0;n<4;n++) {
delay (tiempo);
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)
int tiempo1=3000;
int tiempo2=500;
int n;
void setup() {
for (n=0;n<6;n++) {
pinMode (leds[n],OUTPUT);
}}
void secuencia(){
digitalWrite (leds[0],HIGH);//rojo1 on
digitalWrite (leds[5],HIGH);//verde2 on
delay (tiempo1);
digitalWrite (leds[4],HIGH);//amarillo2 on
delay (tiempo2);
digitalWrite(leds[0],LOW);//rojo1 off
digitalWrite (leds[2],HIGH);//verde1 on
digitalWrite (leds[3],HIGH);//rojo2 on
delay (tiempo1);
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
-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
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).
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)
VSS ---->GND
VDD ---->5V
A ---->5V
K ---->GND
5V (Arduino)----->protoboard (+)
D4-->Pin 9 Arduino
D5-->Pin 10 Arduino
D6-->Pin 11 Arduino
D7-->Pin 12 Arduino
Cdigo de ejemplo
#include <LiquidCrystal.h>
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);
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);
LiquidCrystal lcd(7,8,9,10,11,12);
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
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.
DataSheet