Manual de Arduino (2)
Manual de Arduino (2)
El manual ha sido confeccionado por Raúl Diosdado usando para ello la siguient e
información y recursos:
Frit zing (Elaboración de esquemát icos y mont ajes) ht t p:/ / frit zing.org
Est á permit ida la impresión, dist ribución y modificación de est e manual siempre que se
reconozca a su aut or y las fuent es de las que se ext rajo su información.
Est e manual est a bajo licencia Creat ive Commons Reconocimient o-NoComercial-Compart irIgual
1. Estructura de un programa
1.1 Funciones
1.1.1 Set up()
1.1.2 Loop()
1.2 Llaves {}
2. Variables
3. Constantes
4. Operadores
5. Estructuras de control
5.1 Condicionales
5.1.1 If (si...)
5.1.2 If...else (si... si no...)
5.2 Bucles
5.2.1 For
5.2.2 While
5.2.3 Do... w hile
6.2 E/ S Analógicas
6.2.1 Lect ura de ent radas analógicas (analogRead)
6.2.2 Escrit ura de salidas analógicas (analogWrit e)
7. Puerto serie
8.3 M illis ()
8.4 M in(x,y)
8.5 M ax(x,y)
ANEXO
1. Estructura de un programa
La est ruct ura de un programa en Arduino puede llegar a ser muy diferent e en función
de la complejidad de la aplicación que queramos crear, pero como en la mayoría de
lenguajes de programación est a est ruct ura est á formada por funciones, sent encias,
bucles y ot ros element os que conforman la est ruct ura de programa.
1.1 Funciones
Una función es un bloque de código con un nombre y un conjunt o de est ament os que
son ejecut ados cuando se llama a dicha función. Las funciones de usuario se crean para
realizar t areas repet it ivas reduciendo de esa manera el t amaño del programa.
Las funciones est án asociadas a un t ipo de valor " t ype" , est e es el valor que devolverá
la función una vez t ermine su ejecución.
Ejemplo de función:
/ * Define la función " mult iplicar" a la que se le pasarán los 2 números que
se deseen mult iplicar devolviendo un valor ent ero (int ). * /
Para hacer uso de la función ant erior, t an solo habrá que llamarla desde
cualquier part e del programa. Est a llamada a la función se realiza de la siguient e
manera:
void loop()
{
int i =2;
1
M anual de Arduino
Programación y concept os básicos
int j =3;
int k;
1.1.1 Set up ()
La función set up() se invoca una sola vez al comienzo del programa. Est a función
se usa para realizar la configuración inicial, dent ro de est a configuración
podemos est ablecer el modo de t rabajo de los pines o inicializar la comunicación
serie ent re ot ras cosas.
void setup()
{
Est ament os o inst rucciones;
}
1.1.2 Loop ()
void loop()
{
Est ament os o inst rucciones;
}
Además de las funciones principales, exist en ot ros element os de la est ruct ura de
programa que ayudan a definir, delimit ar, est ruct urar y a hacer más claro el
cont enido del programa.
1.2 Llaves {}
Las llaves definen el principio y el final de un bloque de inst rucciones. Se usan para
delimit ar el inicio y fin de funciones como set up()o para delimit ar el alcance de los
bucles y condicionales del programa.
2
M anual de Arduino
Programación y concept os básicos
funcion()
{
Est ament os o inst rucciones;
}
El punt o y coma " ;" se ut iliza para definir el final de una inst rucción y separarla de
la siguient e. Si no colocamos punt o y coma, el programa va a int erpret ar mal las
inst rucciones y se va a producir un error de compilación.
El error más común a la hora de programar suele ser olvidar poner punt o y coma
al final de la inst rucción.
Los bloques de coment arios son áreas de t ext o que nos ayudan a describir o
coment ar un programa, est os bloques serán ignorados a la hora de compilar el
programa en nuest ro Arduino.
Se pueden int roducir t odas las líneas de t ext o que se deseen siempre que se
encuent ren ent re los caract eres / * ...* / .
La línea de coment arios t ienen la misma función que los bloques de coment arios,
la única diferencia es que las líneas de coment arios suelen usarse para coment ar
inst rucciones ya que solo afect an a una línea.
int x = 10; / / declara la variable 'x' como t ipo ent ero de valor 13
3
M anual de Arduino
Programación y concept os básicos
2. Variables
Las variables son element os donde se almacenan valores numéricos que serán usados
por el programa. Como su nombre indica, las variables van a cambiar de valor con la
evolución del programa y nos van a permit ir crear la lógica del programa en función de
est os cambios.
Una variable debe ser declarada y opcionalment e asignarle un valor ant es de ser usada
por el programa, si no hemos declarado la variable o lo hemos hecho con post erioridad
a su uso va a dar un error al compilar el programa.
Una variable global es aquella que puede ser vist a y ut ilizada por cualquier función
yest ament o de un programa. Las variables globales se declaran al comienzo del
programa, ant es de la función set up().
Una variable local es aquella que se define dent ro de una función o como part e de
un bucle. Solo será visible y podrá ut ilizarse dent ro de la función o bucle donde es
declarada.
4
M anual de Arduino
Programación y concept os básicos
int led = 10; / / " led" es una variable global visible para cualquier función
void setup()
{
pinM ode (led, OUTPUT); / / est ablece el pin " led" como salida
}
void loop ()
{
float valor; / / " valor" es una variable local solo visible dent ro de " loop"
for (int i=0; i<20; i++) / / " i" es una variable local usada por el bucle for
{
digit alWrit e (led, HIGH); / / uso de la variable global " led"
}
}
A la hora de usar una variable dent ro del programa debemos de pararnos a pensar
que información o qué t ipo de operaciones vamos a aplicar a est as variables y en
función de est o asignarle un t ipo u ot ro. Debemos de asegurarnos que el t ipo de
variable que est emos usando t iene rango suficient e para almacenar los dat os sin
llegar a ser desproporcionada, ya que usar variables grandes va a consumir más
recursos de memoria.
* char: el t ipo " char" se ut iliza para almacenar caract eres en format o ASCII
* float : el t ipo " float " se ut iliza para dat os con decimales, aunque cuent a con 32bit 's, t an
solo t iene una precisión de 7 dígit os en sus decimales.
3. Constantes
La diferencia fundament al ent re una variable y una const ant e es que la const ant e va a
ser un valor de solo lect ura que no va a poder ser modificado con la evolución del
programa.
5
M anual de Arduino
Programación y concept os básicos
Si queremos definir una const ant e, podemos hacerlo de manera muy similar a como
definíamos las variables, t an solo hay que indicar al programa que se t rat a de un valor
" no modificable" , para ello hay que añadir ant es del " t ipo" la palabra " const " , que va a
hacer que la variable sea de solo lect ura.
const float pi = 3.1415; / / crea una const ant e de t ipo " float " y le asigna el valor 3.1415
Es posible crear const ant es usando #define, est a sent encia va a nombrar las const ant es
ant es de ser compiladas por Arduino. Las const ant es creadas de est a manera no van a
ocupar memoria de programa, ya que el compilador va a remplazar est as const ant es
con el valor definido en el moment o de compilar.
#define pi 3.1415 / / crea una const ant e usando #define a la que le asigna el valor 3.1415
Hay que t ener cuidado a la hora de usar #define, ya que la sint axis es diferent e, no hay
que poner el operador de asignación " =" ni cerrar sent encia con el punt o y coma " ;" .
Usar #define puede ser problemát ico, ya que si exist e en cualquier part e del programa
alguna const ant e o variable con el mismo nombre que t engamos asignado en #define,
el programa lo va a sust it uir con el valor que t engamos asignado a est a const ant e, por
ello se debe t ener cuidado a la hora de asignar const ant es con #define y no crear
const ant es muy genéricas como #define x 10,ya que " x" es muy común usarlo como
variable dent ro de alguna función o bucle.
4. Operadores
Los operadores son los element os con los que vamos t ransformar las variables del
programa, hacer comparaciones, cont ar un número det erminado de event os… .Los
operadores se pueden considerar como uno de los element os más import ant es junt o
con las est ruct uras de cont rol. Dent ro de los operadores, podemos encont rarlos de
varios t ipos.
Los operadores arit mét icos son operadores que nos van a permit ir realizar
operaciones básicas como sumar, rest ar, dividir, mult iplicar...
6
M anual de Arduino
Programación y concept os básicos
Hay que t ener en cuent a el t ipo de variable que est amos usando a la hora de
realizar operaciones, ya que si vamos a efect uar una operación que da como
result ado un numero con decimales y hemos definido est as variables como int
(ent ero), el result ado no va a most rar la part e decimal (10 / 3 va a devolver 3 en
lugar de 3.33).
Las asignaciones compuest as combinan una operación arit mét ica con una variable
asignada. Est as asignaciones son usadas comúnment e en bucles.
x == y; / / x es igual a y
x != y; / / x es dist int o de y
x < y; / / x es menor que y
x > y; / / x es mayor que y
x <= y; / / x es menor o igual que y
x >=y; / / x es mayor o igual que y
Son operadores lógicos que se usan para comparar 2 o más expresiones y que no
devuelven un valor, sino que dan un est ado de “ verdadero” (si se cumple la
expresión) o “ falso” (si no se cumple). Exist en 3 operadores lógicos, AND " & & " , OR
" | | " y NOT " !" .
7
M anual de Arduino
Programación y concept os básicos
5. Estructuras de control
Dent ro de las est ruct uras de cont rol se engloban t odos los est ament os que sirven para
guiar al programa en una u en ot ra dirección en función de si se cumplen o no las
condiciones que le marquemos al programa. Dent ro de est as est ruct uras podemos
encont rar condicionales, bucles o element os de cont rol de flujo.
5.1 Condicionales
Los condicionales son element os que chequean un est ado o condición y si est a
condición se cumple se pasa a ejecut ar las sent encias englobadas dent ro de la
condición.
5.1.1 If (si...)
Est e condicional puede ir precedido de ot ras est ruct uras condicionales del
mismo t ipo, anidando unas dent ro de ot ras y haciendo que sean
mut uament e excluyent es.
8
M anual de Arduino
Programación y concept os básicos
if (valor < 100) / / Si valor es menor que 100 ejecut a la inst rucción
{
ejecut a inst rucciones;
}
else if (valor >=500) / / Si valor es mayor o igual que 500 ejecut a la inst rucción
{
ejecut a inst rucciones;
}
else / / si no se cumplen las condiciones ant eriores, ejecut a est a inst rucción
{
ejecut a inst rucciones;
}
5.2 Bucles
Los bucles son element os que hacen que el programa ent re en un ciclo de
repet ición mient ras se cumplan las condiciones del bucle.
5.2.1 For
El buche for est á formado por 3 part es, la inicialización, la condición del
bucle y una expresión (la expresión no es necesaria o puede ponerse dent ro
de las sent encias del bucle).
Ejemplo de bucle for :
5.2.2 While
El bucle w hile es un bucle que se repet irá const ant ement e mient ras se
cumpla la expresión del bucle. Dent ro de la expresión del bucle se pueden
9
M anual de Arduino
Programación y concept os básicos
usar variables que cambien dent ro del propio bucle o que t omen el valor de
alguna de las ent radas de Arduino que podemos t ener asociadas a sensores
u ot ros element os.
w hile (sensor < 150) / / ejecut a el bucle mient ras " sensor" sea menor a 150
{
ejecut a inst rucciones;
}
El bucle do... w hile funciona de la misma manera que w hile, con la única
diferencia de que va a ejecut ar al menos 1 vez el bucle, ya que la condición
del mismo se comprueba al final.
do
{
sensor = analogRead (1); / / asigna a " sensor" el valor de la ent rada analógica 1
}w hile (sensor < 150) / / repit e el bucle mient ras " sensor" sea menor que 150
5.3.1 Got o
Est a sent encia realiza un salt o a cualquier part e del programa que est e
marcada con la et iquet a correspondient e, la posición desde la que
realicemos el salt o quedará almacenada en la pila del programa para que
podamos regresar al lugar desde donde realicemos el salt o.
if (x == 110)
{
got o marca1; / / salt a a la et iquet a " marca1"
}
10
M anual de Arduino
Programación y concept os básicos
Los salt os que podemos realizar con Arduino est án limit ados a la pila de
programa, no pueden ser infinit os, por lo que no es recomendable anidar
bucles y salt os, ya que podemos romper el flujo de programa
Est a sent encia se usa para volver de un salt o got o . En el moment o que es
leída por el programa, se cargará la ult ima dirección almacenada en la pila
de programa, est o hará que se regrese a la posición desde la que se realizó el
últ imo salt o.
5.3.3 Break
La sent encia break es una sent encia que se debe de evit ar a t oda cost a, t an
solo debemos usarla cuando sea t ot alment e necesario. Est a sent encia
rompe la it eración del bucle donde se encuent re, haciendo salir al programa
del bucle sin t ener en cuent a que se cumplan las condiciones para salir del
mismo.
6. Entradas y salidas E/ S
Arduino es una plat aforma de desarrollo Hardw are que cuent a con pines E/ S para
comunicarse con el ext erior. Est os pines E/ S t ienen caract eríst icas especiales que los
hacen propicios para una u ot ra t area en función del t ipo de pin. Est as E/ S pueden
englobarse en 3 t ipos básicos, E/ S analógicas, E/ S digit ales y E/ S para la comunicación
serie. Exist en t ambién pines de propósit o especiales como salidas de reloj u
osciladores y pines de aliment ación con los que podemos suminist rar diferent es
t ensiones a placas ext ernas
11
M anual de Arduino
Programación y concept os básicos
Ant es de empezar a t rabajar con Arduino, deben de ser configurados los pines de la
placa que vayan a ser usados, asignándolos como ent radas o como salidas. En ningún
caso un mismo pin podrá hacer de ent rada y de salida al mismo t iempo.
La configuración de los pines se hará dent ro de la función set up(), est ableciendo el
modo de t rabajo del pin como ent rada o como salida.
La inst rucción que se ut iliza para realizar la configuración de los pines es pinM ode,
donde habrá que asignarle el pin que queremos configurar y si queremos que act úe
como ent rada (INPUT) o como salida (OUTPUT).
void setup()
{
pinM ode (10, OUTPUT); / / configura el pin 10 como salida
}
Los pines de Arduino est án configurados por defect o como ent radas, por lo que no es
necesario indicarles el modo de t rabajo si vamos a t rabajar con ellos como ent radas.
La razón de t ener los pines configurados por defect o como ent radas, es que las
ent radas se encuent ran en un est ado de alt a impedancia, lo que va a evit ar en muchos
casos que dañemos la placa al realizar una mala conexión. Si est ablecemos un pin
como salida y por error ent ra corrient e por dicho pin lo más seguro es que dañemos el
microcont rolador de manera irreversible.
12
M anual de Arduino
Programación y concept os básicos
Los pines que t engamos configurados como salida (OUTPUT) van a suminist rar una
corrient e máxima de 40mA por separado, sin que la corrient e t ot al de las salidas pueda
superar los 200mA. Est a corrient e es suficient e para hacer brillar un led, pero
insuficient e para act ivar element os de mayor pot encia.
6.1 E/ S Digitales
Los pines asignados a E/ S digit ales, son pines que t rabajan con dos est ados HIGH
(alt o) o LOW (BAJO). Según el modelo de Arduino que est emos usando, va a t omar
el est ado HIGH (alt o) como 5v o como 3.3v, el est ado LOW (bajo) est á asociado a
un nivel de volt aje 0.
Al hacer una lect ura digit al, vamos a leer el valor de un pin almacenando el
result ado como HIGH (alt o o 1) o como LOW (bajo o 0).
valor = digit alRead (pin); / / la variable " valor" t oma el est ado asociado al pin
Cuando hacemos una escrit ura digit al vamos a mandar al pin definido
previament e como salida el valor HIGH o LOW. El valor HIGH se va a t raducir
(en función del t ipo de Arduino) por una señal de 5 o 3.3 volt ios.
digit alWrit e (pin, HIGH); / / Est ablece el pin en est ado alt o (5 o 3.3v)
Ejemplo E/ S digit al
void setup()
{
pinM ode (led, OUTPUT); / / est ablece led (pin 13) como salida
pinM ode (pulsador, INPUT); / / est ablece pulsador (pin 7) como ent rada
}
13
M anual de Arduino
Programación y concept os básicos
void loop()
{
valor = digit alRead (pulsador); / / lee el est ado del pulsador y lo asigna a valor
digit alWrit e (led, valor); / / asigna a led el est ado de la variable valor
}
6.2 E/ S Analógicas
Vivimos en un mundo analógico, y en muchas ocasiones, para poder int eract uar
con el ent ono no nos es suficient e con det ect ar o no una señal o poder act ivar o
desact ivar cosas, sino que necesit amos cuant ificar el valor de magnit udes reales y
responder en proporción.
Para poder leer y escribir valores analógicos, Arduino cuent a con una serie de E/ S
dest inadas a est e fin, con las que podremos leer y escribir niveles de t ensión que
irán de 0 a 5 o 3.3v (dependiendo del modelo de Arduino que est emos usando).
La función analogRead realizará una lect ura del pin analógico que se le
indique, almacenando el valor leído en un regist ro de 10bit 's. Almacenar
est e valor en un regist ro de 10 bit 's va a implicar que t engamos un rango de
valores que va de 0 a 1023, asignándole el 0 a un nivel de 0 volt ios y el 1024
a un nivel de 5 volt ios, lo que va a det erminar la resolución que podemos
obt ener al hacer lect uras analógicas.
valor = analoRead (pin); / / la variable valor t oma el nivel del pin analógico
Los pines de ent rada analógicos no necesit an ser declarados como ent rada
(INPUT), ya que son siempre ent radas.
Las salidas analógicas est án asociadas a los pines PWM (Pulse Widt h
M odult at ion) o modulación por ancho de pulso, est os pines, son pines
digit ales, pero con la part icularidad de poseer el PWM , y es que realment e
Arduino no ent rega a la salida una señal analógica pura, sino que consigue
un nivel de t ensión det erminado por medio de la modulación del ancho de
pulso.
14
M anual de Arduino
Programación y concept os básicos
El nivel de t ensión que t endremos a la salida del pin, va a ser igual al nivel de
t ensión promedio proporcional al ancho de los pulsos.
Las salidas analógicas t rabajan con regist ros de 8bit 's, o lo que es lo mismo,
pueden t omar valores comprendidos ent re 0 y 255, correspondiendo el 0 a
un nivel de 0 volt ios y el 255 al máximo volt aje (5 o 3.3 volt ios dependiendo
de la placa que est emos usando).
analogWrit e (pin, valor); / / saca por el pin el nivel de t ensión equivalent e a valor
Cuando t rabajemos con ent radas y salidas analógicas hay que t ener en
cuent a que al realizar una lect ura analógica el result ado se guarda en una
variable de 10 bit 's, pero la escrit ura se hace con una variable de 8 bit 's, por
lo que si queremos usar el valor leído para escribir en algún pin, primero
deberemos de adapt ar la variable de 10 a 8 bit 's, si no hacemos est o, el valor
que escribamos va a est ar fuera de rango y no va a most rar el nivel de
t ensión correct o.
15
M anual de Arduino
Programación y concept os básicos
7. Puerto serie
Arduino cuent a con una serie de pines que t ienen la capacidad de comunicarse con
ot ros disposit ivos usando la comunicación serie para ello. Con est a comunicación serie
se puede realizar t ambién una comunicación con el ordenador a t ravés del USB gracias
al chip FDTI que incorpora la placa y que realiza la conversión USB-serie.
La capacidad de comunicarse con ot ros disposit ivos, hace de Arduino una herramient a
muy pot ent e, ya que se pueden crear proyect os muy complejos con mult it ud de
disposit ivos que se comuniquen e int eract úen ent re sí, pero cuando se empieza a
programar, es mucho más int eresant e el poder est ablecer una comunicación ent re
nuest ro ordenador y Arduino, ya que de est a forma podemos int ercambiar
información con la placa, pudiendo ver cómo evolucionan las variables del sist ema y de
est a forma poder det ect ar posibles problemas de programación.
Para poder ut ilizar el puert o serie hay que inicializarlo est ableciendo la velocidad
de la conexión. Est a inicialización se hace siempre dent ro de la función set up() .
void setup()
{
Serial.begin (9600); / / abre el puert o serie est ableciendo la velocidad en 9600
} / / baudios
Según el modelo de Arduino que est emos usando, puede t ener 1 o más puert os
para la comunicación serie, est os puert os est arán numerados y deberán de abrirse
de manera independient e según los que queramos usar.
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
Serial2.begin(9600);
Serial3.begin(9600);
}
16
M anual de Arduino
Programación y concept os básicos
Si queremos que Arduino muest re información a t ravés del puert o serie, debemos
de usar inst rucciones que " impriman" en pant alla dicha información.
Para imprimir est os dat os se usa el comando Serial.print , que mandará a t ravés del
puert o serie el dat o o la cadena de caract eres que le indiquemos. Est a inst rucción
t iene algunas variant es, que veremos a cont inuación.
Est a es la inst rucción más común a la hora de enviar dat os a t ravés del puert o
serie, t an solo hay que indicar el dat o que queremos enviar y el format o en el que
queremos que muest re dicho dat o.
El " t ipo de dat o" puede t omar los valores BIN (binario), OCT (oct al), DEC (decimal)
y HEX (hexadecimal). En versiones ant iguas de Arduino, t ambién est aba disponible
el sacar los dat os en format o " BYTE" , pero est e format o fue eliminado, si
queremos sacar un byt e en pant alla, podemos ut ilizar la función
Serial.w rit e(valor) .
Si est amos t rabajando con dat os que t ienen decimales (float ) y queremos
most rar un número concret o de ellos, podemos hacerlo poniendo en t ipo de
dat o el número de decimales que queremos most rar. Por defect o most rará dos
decimales.
Serial.print ln(1.23456, 0); / / manda por el puert o serie el valor " 1"
Serial.print ln(1.23456, 1); / / manda por el puert o serie el valor " 1.2"
Serial.print ln(1.23456, 2); / / manda por el puert o serie el valor " 1.23"
Serial.print ln(1.23456, 3); / / manda por el puert o serie el valor " 1.234"
Serial.print ln(1.23456, 4); / / manda por el puert o serie el valor " 1.2346"
17
M anual de Arduino
Programación y concept os básicos
Además de most rar dat os en pant alla, t ambién es posible mandar cadenas de
caract eres, para ello t an solo hay que encerrar el t ext o que queramos most rar
ent re comillas.
Serial.print (" Hola mundo" ); / / muest ra en pant alla " hola mundo"
Cuando mandamos dat os a t ravés del puert o serie y queremos visualizar est os
dat os en pant alla, es recomendable int roducir espacios y salt os de línea, ya que si
no lo hacemos los dat os nos van a aparecer de manera cont inua y no vamos a
poder diferenciar unos de ot ros. Para ordenar est os dat os, podemos int roducir
t abulaciones o salt os de línea con los siguient es comandos:
Serial.print (" \ t " ); / / int roduce una t abulación ent re los dat os
Serial.print (" \ n" ); / / int roduce un salt o de línea
Si queremos crear dat os en líneas diferent es, se puede opt ar por una variant e del
Serial.print que int roduce aut omát icament e un salt o de línea, haciendo que el
siguient e dat o que se vaya a escribir aparezca en la siguient e línea.
Como en el caso ant erior, el t ipo de dat o será un campo opcional, si no se rellena
est e campo, el dat o aparecerán en format o decimal.
La inst rucción Serial.read es una inst rucción que va a leer dat os ent rant es del
puert o serie. Est os dat os deben de ser almacenados en variables para poder
t rabajar con ellos.
Si hacemos uso de las inst rucciones ant eriores, vamos a est ar const ant ement e
leyendo el puert o serie, pero quizás no haya nada que leer y el dat o que est emos
almacenando en la variable " valor" sea un dat o erróneo. Para evit ar est os
problemas y opt imizar el programa, exist e la inst rucción Serial.available() .
18
M anual de Arduino
Programación y concept os básicos
Est a inst rucción se usa para comprobar si hay caract eres disponibles para leer en
el puert o serie. Serial.available va a t omar un valor ent ero con el número de byt es
disponibles para leer que est án almacenados en el buffer del puert o serie. Si no
hay ningún dat o disponible Serial.avaible va a valer 0, por lo que es muy fácil el
uso de est a función combinada con el condicional if.
Arduino t iene un buffer que puede almacenar como máximo 64 byt es, una vez
sobrepasada est a capacidad se empezaran a escribir los dat os uno encima de ot ro,
perdiendo la información.
Aquí voy a most rar algunas de las inst rucciones que Arduino t rae por defect o, pero no
son las únicas, ya que se pueden cargar librerías muy int eresant es (como la librería de
mat emát icas) que añaden funciones con las que podemos realizar t areas complejas de
manera muy sencilla.
8.1 Delay(ms)
Est a inst rucción det iene la ejecución del programa un t iempo det erminado. El
t iempo habrá que indicarlo ent re parént esis en milisegundos (1 segundo = 1000
milisegundos).
Hay que t ener mucho cuidado cuando se usa est a función, ya que se t rat a de una
función bloqueant e. Est a función va a det ener el flujo de programa, haciendo que
durant e est e t iempo no se det ect en event os como pueden ser presionar un
pulsador o la act ivación de un sensor, est o puede ocasionar graves problemas en
la aplicación, por lo que siempre que se pueda hay que evit ar usar la inst rucción
delay().
19
M anual de Arduino
Programación y concept os básicos
La inst rucción delay () es muy út il cuando ejecut amos t areas que requieren un
t iempo mínimo para dicha ejecución, como por ejemplo, para leer memorias
ext ernas o comunicarnos con algunos disposit ivos vamos a necesit ar un t iempo
mínimo para acceder a la memoria o est ablecer la comunicación, est e t iempo lo
obt enemos det eniendo el programa los milisegundos suficient es para realizar
dichas acciones.
La inst rucción delayM icroseconds() funciona igual que delay(), con la diferencia de
realizar las t emporizaciones usando microsegundos (µs) en lugar de milisegundos
(ms).
8.3 M illis ()
t iempo = millis(); / / la variable " t iempo" t oma el valor del t iempo t ranscurrido
#define led 11
#define puls 10
boolean pulsador;
unsigned long t iempo;
void setup()
{
pinM ode(led, OUTPUT);
20
M anual de Arduino
Programación y concept os básicos
void loop()
{
pulsador = digit alRead(puls);
if(pulsador == HIGH)
{
t iempo = millis() + 5000;
digit alWrit e(led, HIGH);
}
8.4 M in(x,y)
dat o = min(sensor, 100); / / dat o t oma el valor más pequeño ent re " sensor" o 100
En el ejemplo ant erior " dat o" va a t omar el valor del sensor siempre que est e
valga menos de 100, si es mayor t omará el valor 100. Esa inst rucción puede usarse
para limit ar superiorment e el valor de " dat o" .
8.5 M ax (x, y)
Est a inst rucción funciona igual que min(x, y), la diferencia es que va a ent rega el
mayor de los dos números, est o puede ser ut ilizado para inferiorment e el valor
que t omará la variable " dat o" .
21
M anual de Arduino
Programación y concept os básicos
22
M anual de Arduino
Programación y concept os básicos
ANEXO
CONEXIONADO DE ENTRADAS Y SALIDAS EN ARDUINO
23
M anual de Arduino
Programación y concept os básicos
Arduino es una plat aforma de desarrollo hardw are que funciona con 5 o 3.3 volt ios
(dependiendo de la placa Arduino que usemos) y que t an solo puede ent regar 40mA
(miliamperios) a las salidas de sus pines de manera independient e sin que se superen
los 200mA en conjunt o. Debido a est as caract eríst icas, podemos considerar a Arduino
como el " cerebro" de nuest ro sist ema, ya que va a realizar t oda la lógica de cont rol
pero no será capaz de cont rolar disposit ivos por sí mismo.
Para realizar el cont rol de est os disposit ivos necesit amos " músculos" que ent reguen la
pot encia que Arduino no puede suminist rar o que adapt en los diferent es niveles de
volt aje, para ello ya exist en una gran cant idad de shields que dan funcionalidad a
Arduino, haciendo posible el cont rol de element os de pot encia, la det ección de señales
ext ernas y la comunicación con ot ros disposit ivos.
Arduino puede t rabajar con señales de hast a 40mA, est a corrient e va a ser
suficient e para encender un LED o para est ablecer la comunicación con la mayoría
de disposit ivos digit ales.
24
M anual de Arduino
Programación y concept os básicos
Arduino funciona con niveles de volt aje que van de 0 a 5 o 3.3 volt ios
(dependiendo de la placa que est emos usando). Por lo que solo va a poder
manejar señales que est én dent ro de est e rango.
Si la señal con la que est amos t rabajando est a dent ro del rango que puede
soport ar Arduino, no vamos a t ener ningún problema al cualquier t ipo de señal, ya
sea digit al o analógica.
Es muy común en Arduino usar pulsadores o int errupt ores que conmut en la
ent rada de los pines ent re los niveles ALTO (señal) y BAJO (sin señal) y para
ello hay dos maneras posibles de realizar el conexionado, usando
resist encias de PullUp o de PullDow n.
Conexión en PullUp
Al conect ar el circuit o mediant e una resist encia de PullUp, la ent rada del pin
va a est ar a nivel ALTO siempre que el pulsador o int errupt or se encuent re
abiert o. Cuando se sierre el pulsador o int errupt or, se va a conect ar el pin
direct ament e a GND, cambiando el est ado del pin de ALTO a BAJO.
Conexión en PullDow n
La conexión en PullDow n es t ot alment e opuest a a la conexión en PullUp,
est a va a poner el pin en est ado BAJO mient ras el int errupt or o pulsador se
encuent ren en reposo (abiert o), pasando a un est ado ALTO al cerrarse el
pulsador o int errupt or.
25
M anual de Arduino
Programación y concept os básicos
26
M anual de Arduino
Programación y concept os básicos
La mayoría de las veces t endremos que cont rolar element os que requieren más de
los 40mA que es capaz de suminist rar cada pin como máximo, para ello debemos
de colocar un " driver" que suminist re la pot encia necesaria con el nivel de t ensión
adecuado.
M osfet de potencia
Los mosfet de pot encia se han popularizado mucho en los últ imos años, ya que
permit en el cont rol de grandes corrient es y velocidades de conmut ación muy
alt as, est o los hace muy adecuados para su uso en fuent es de aliment ación y en
reguladores de pot encia. Ot ra caract eríst ica muy import ant e es que no t ienen
consumo de corrient e en la puert a (se act ivan por t ensión), haciendo que el pin de
Arduino no t enga que suminist rar corrient e.
Los mosfet se comport an como int errupt ores, cuando se aplica una t ensión a la
puert a permit en el paso de corrient e a t ravés de él.
Los mosfet son muy usados junt o con los pines PWM , ya que est o va a permit ir
t ener un cont rol de la pot encia que se ent rega a la carga, pudiendo pudiéndose
adapt ar a las necesidades de cada moment o cambiando el ciclo de t rabajo.
27
M anual de Arduino
Programación y concept os básicos
Relés
Los relés son int errupt ores mecánicos act ivados por corrient e. Est a corrient e de
act ivación suele superar la corrient e que es capaz de suminist rar Arduino, además
la bobina de relé crea flujos de corrient e peligrosos para la placa, por lo que en
cualquier caso hay que aislar la act ivación de la bobina de la placa Arduino usando
para ello opt oacopladores o t ransist ores en configuración darlingt on.
Los relés suelen usarse para cont rolar cargas de t odo t ipo, ya que es muy amplio el
cat alogo de relés que exist e. La única limit ación que t ienen los relés frent e a los
mosfet de pot encia es el ciclo de t rabajo, los relés no est án pensados para
conmut ar a mucha velocidad, ni para funcionar como reguladores con el PWM .
Los relés se ut ilizan para act ivar o desact ivar cargas de t odo t ipo siempre que los
ciclos de conmut ación no sean demasiado elevados.
28
M anual de Arduino
Programación y concept os básicos
29
M anual de Arduino
Programación y concept os básicos
Para empezar hay que ir a la página oficial de Arduino (ht t p:/ / w w w .arduino.cc)
donde podemos descargar las últ imas versiones del soft w are. Según nuest ro
sist ema operat ivo, t endremos que descargar una versión u ot ra, y dent ro de la
opción de Window s, podemos hacer la descarga como un archivo ejecut able o
como un archivo ZIP.
Dent ro del archivo ejecut able, se encuent ra t ant o el ent orno de desarrollo para
Arduino, como los driver necesarios para que el disposit ivo sea reconocido por
nuest ro ordenador.
Al conect ar Arduino mediant e USB al PC, veremos cómo se enciende un LED verde,
est o nos indica que la placa est á siendo aliment ada correct ament e. Al moment o
30
M anual de Arduino
Programación y concept os básicos
En el asist ent e de la inst alación le diremos que no se conect e a int ernet para
buscar los drivers y en la siguient e pant alla, que los inst alaremos desde una
localización especifica, que se encont rará dent ro de la carpet a que hemos
descargado ant eriorment e, en nuest ro caso será la carpet a " drivers" que se
encuent ra dent ro de la carpet a arduino-1.0.5 (la que hemos descargado).
31
M anual de Arduino
Programación y concept os básicos
32
M anual de Arduino
Programación y concept os básicos
Ahora que nuest ro ordenador reconoce perfect ament e nuest ra placa, es hora de
abrir el ent orno de t rabajo donde programaremos nuest ras aplicaciones. El
ent orno de programación de Arduino no necesit a inst alación, t an solo t endremos
que ir a la carpet a que descargamos y hacer doble clic sobre el icono que pone
" arduino" .(Recomiendo guardar la carpet a de Arduino en algún lugar de nuest ro
disco donde creamos que est e segura y crear un acceso direct o en el escrit orio.)
Al hacer est o nos aparecerá la pant alla principal el Sket ch, donde podemos
diferenciar las siguient es part es:
• Área de t rabajo: Est a será el área donde vamos a escribir el programa que
queremos ejecut ar en Arduino.
• Verificación: Cuando redact emos nuest ro programa, podemos verificar que la
sint axis del mismo es correct a y que no hemos comet ido ningún error
pulsando sobre est e icono, si hay algún error, no podremos cargar el
programa en Arduino.
• Carga de programa: Cuando t engamos list o nuest ro programa y no t enga
ningún error, lo cargaremos en Arduino pulsando sobre est e bot ón.
• Archivo nuevo: Abrirá una nueva área de t rabajo.
• Abrir un programa: Al pulsar sobre est e bot ón, t endremos la opción de abrir
un archivo desde una ubicación especifica o cargar en nuest ra área de t rabajo
una serie de programas o librerías ya creadas y que t iene Arduino por defect o.
• Guardar programa: Guardara en una ubicación especificada por el usuario el
cont enido del área de t rabajo
33
M anual de Arduino
Programación y concept os básicos
Cuando t engamos abiert o el ent orno de t rabajo, lo primero que debemos hacer es
seleccionar el t ipo de placa Arduino que est emos usando y el puert o USB al que la
t enemos conect ada. Est as opciones las podemos encont rar dent ro de la pest aña
" herramient as"
34