You are on page 1of 18

QU ES ARDUINO?

Arduino es en realidad tres cosas:

Una placa hardware libre que incorpora un microcontrolador reprogramable y una serie de
pines-hembra que permiten conectar all de forma muy sencilla diferentes sensores y
actuadores.

Un software (entorno de desarrollo) gratis, libre y multiplataforma, que nos permite


escribir, verificar y guardar (cargar) en la memoria del microcontrolador el conjunto de
instrucciones que deseamos que este empiece a ejecutar.
Un lenguaje de programacin libre. Por lenguaje de programacin se entiende cualquier
idioma artificial diseado para expresar instrucciones (siguiendo unas determinadas reglas
sintcticas) que pueden ser llevadas a cabo por mquinas.
CARACTERSTICAS DEL MICRO DE LA PLACA ARDUINO UNO

El encapsulado fsico del microcontrolador incorporado: puede ser en formato DIP (Dual In-
line Package) y en formato SMD (Surface Mount Device).

1
El modelo del microcontrolador.

El microcontrolador que lleva la placa Arduino UNO es el modelo ATmega328P de la marca


Atmel. La P del final significa Picopower, la cual permite un consumo elctrico
sensiblemente menor comparndolo con un modelo equivalente.
El ATmega328P tiene una arquitectura de tipo AVR.
La figura siguiente muestra esta disposicin en el encapsulado de tipo DIP.

LAS MEMORIAS DEL MICROCONTROLADOR


En el caso del ATmega328P tenemos:

- Memoria Flash
Memoria permanente donde se almacena el programa que ejecuta el microcontrolador
(hasta una nueva reescritura si se da el caso). En el caso del ATmega328P tiene una
capacidad de 32KB.
En los microcontroladores de la placa Arduino no se usa toda la capacidad de la memoria
Flash porque existen 512 bytes (bootloader block) ocupados por un cdigo
preprogramado de fbrica (el llamado bootloader o gestor de arranque), el cual nos
permite usar la placa Arduino de una forma sencilla y cmoda.
- Memoria SRAM
Memoria voltil donde se alojan los datos que en ese instante el programa necesita crear
o manipular para su correcto funcionamiento. Independientemente del tipo de dato, su
valor siempre ser eliminado cuando se deje de alimentar elctricamente al
microcontrolador. En el caso del ATmega328P esta memoria tiene una capacidad de
2KB.

2
- Memoria EEPROM
Memoria permanente donde se almacenan datos que se desea que permanezcan
grabados una vez apagado el microcontrolador para poderlos usar posteriormente en
siguientes reinicios. En el caso del ATmega328P esta memoria tiene una capacidad de 1
KB.
LOS REGISTROS DEL MICROCONTROLADOR.

Los registros son espacios de memoria existentes dentro de la propia CPU de un


microcontrolador. Sirven para albergar los datos (cargados previamente desde la memoria
SRAM o EEPROM) necesarios para la ejecucin de las instrucciones; sirven tambin para
almacenar temporalmente los resultados de las instrucciones recientemente ejecutadas y
sirven adems para alojar las propias instrucciones que en ese mismo momento estn
ejecutndose. El chip ATmega328P es de 8 bits.
LOS PROTOCOLOS DE COMUNICACIN I2C/TWI Y SPI.

Como ya vimos, la transmisin de un conjunto de datos desde un componente electrnico a


otro, puede ser:

Comunicacin serie; en este tipo de comunicacin la informacin es transmitida bit a


bit (uno tras otro) por un nico canal, enviando por tanto un solo bit en cada momento.
Comunicacin paralela, en la cual se envan varios bits simultneamente, cada uno
por un canal separado y sincronizado con el resto.

El microcontrolador, a travs de algunos de sus pines de E/S, utiliza el sistema de


comunicacin serie para transmitir y recibir rdenes y datos hacia/desde otros componentes
electrnicos.
Los estndares ms importantes, para este tipo de comunicacin son:

I2C (Inter-Integrated Circuit, o -TWI Two-WIre, dos cables). Su principal caracterstica


es que utiliza dos lneas para transmitir la informacin: una sirve para transferir los datos
(SDA) y otra que sirve para enviar la seal de reloj (SCL). Tambin se necesitan dos
lneas ms: la de alimentacin y la de tierra.
Seal de reloj (CLK): seal binaria de una frecuencia peridica que sirve para coordinar
y sincronizar los elementos integrantes de una comunicacin (emisores y receptores) de
forma que todos sepan cundo empieza, cunto dura y cundo acaba la transferencia de
informacin.
Cada dispositivo conectado al bus IC tiene una direccin nica que lo identifica uno del
otro, y puede estar configurado como maestro o esclavo. Un dispositivo maestro es el
que inicia la transmisin de datos y genera la seal de reloj (no necesariamente es as).

3
Para funcionar correctamente SDA y SCL necesitan estar conectadas mediante una
resistencia pull-up a la fuente de alimentacin comn.
SPI (Serial Peripheral Interface): Permite controlar (a cortas distancias) casi cualquier
dispositivo electrnico digital que acepte un flujo de bits serie sincronizado (regulado por
un reloj).
Un dispositivo conectado al bus SPI puede ser maestro o esclavo, donde el primero
es el que inicia la transmisin de datos y genera la seal de reloj (no siempre es as) y el
segundo se limita a responder.
Requiere de cuatro lneas. Una lnea enva a todos los dispositivos la seal de reloj
generada por el maestro (SCLK); otra es la utilizada por el maestro para elegir con qu
dispositivo esclavo se quiere comunicar; ya que solo puede transferir datos con un solo
esclavo a la vez (SS); otra es la lnea utilizada para enviar los datos (0s y 1s) desde el
maestro hacia el esclavo elegido (MOSI); y la otra es la utilizada para enviar la respuesta
del esclavo al maestro (MISO).
La transmisin de informacin es full duplex, es decir, que la informacin puede ser
transportada en ambos sentidos a la vez.

4
Para el caso de la existencia de varios esclavos es necesario utilizar una lnea SS
diferente por cada uno de ellos, ya que esta lnea es la que sirve para activar el esclavo
concreto que en cada momento el maestro desee utilizar (el esclavo que reciba por su
lnea SS un valor de voltaje BAJO ser el que est seleccionado en ese momento por el
maestro, y los que reciban el valor ALTO no lo estarn).
LA ALIMENTACION.

El voltaje de funcionamiento de la placa Arduino es de 5 V y podemos obtener esta


alimentacin de varias maneras:

a) Conectando la placa Arduino a una fuente externa: Para el primer caso, la placa
dispone de un zcalo donde se puede enchufar una clavija de 2.1 mm de tipo jack.
Para el segundo, los cables salientes de los bornes de la pila se pueden conectar a los
pines-hembra marcados como Vin y Gnd. En ambos casos, la placa est preparada
en teora para recibir una alimentacin de 6 a 12 V.
b) Conectando la placa Arduino a nuestro computador mediante un cable USB. La
alimentacin recibida de esta manera es de 5 V y ofrece un mximo de hasta 500 mA.
ZONA ETIQUETADA POWER.

GND: pines-hembra conectados a tierra.


Vin: este pin-hembra se puede utilizar para dos cosas diferentes:
1. Si la placa est conectada mediante el jack, podemos conectar a este pin-hembra
cualquier componente electrnico para alimentarlo directamente con el nivel de
voltaje que est aportando la fuente en ese momento.
Si la placa est alimentada mediante USB, entonces ese pin-hembra aportar 5 V.
2. Tambin podemos usar este pin para alimentar la propia placa directamente desde
alguna fuente de alimentacin externa sin utilizar el jack o el cable USB. Esto se
hace conectndole el borne positivo de la fuente y conectando el borne negativo al
pin de tierra. Si se usa este montaje, el regulador de tensin que incorpora la placa
reducir el voltaje recibido al voltaje de trabajo de la placa (5 V).

5
5 V: Si la placa est alimentada mediante el cable USB o si est alimentada por una
fuente externa, podemos conectar a este pin cualquier componente que pueda recibir
5 V, con una corriente mxima de 40 mA. Pero tambin podemos usar este pin para
alimentar la propia placa desde una fuente de alimentacin externa previamente
regulada a 5 V.
3,3 V: Este pin ofrece un voltaje de 3.3 V. El cual se obtiene a travs del cable USB
o del jack por un circuito especfico incorporado en la placa: el LP2985. Con una
corriente mxima de 50 mA. Al igual que con los pines anteriores, podremos usar este
pin para alimentar componentes.

SEALES DIGITALES.

Una seal digital es aquella que solo tiene un nmero finito de valores posibles (valores
discretos).

Un ejemplo es la seal binaria, donde el nmero de valores posibles solo es 2. El valor 0 o


BAJO indica la ausencia de voltaje; el valor 1 o ALTO

El valor de voltaje concreto que se corresponda con el estado ALTO o 1 ser diferente segn
los dispositivos electrnicos utilizados en cada momento.
Adems de los niveles ALTO y BAJO, en una seal binaria existen las transiciones entre
estos niveles (de ALTO a BAJO y de BAJO a ALTO), denominadas flanco de bajada y de
subida, respectivamente.
ENTRADAS DIGITALES.

El Arduino UNO dispone de 14 pines de entradas o salidas digitales, numeradas desde la 0


hasta la 13. Todos estos pines funcionan a 5 V, pueden proveer o recibir un mximo de
40mA, disponen de una resistencia pull-up interna de entre 20 K y 50 K que inicialmente
est desconectada.

6
LAS RESISTENCIAS PULL-UP Y PULL-DOWN.

Son resistencias normales, que sirven para asumir un valor definido de la seal recibida en la
entrada del circuito, cuando por ella no est conectada.

En las resistencias pull-up el valor que se asume en la entrada es ALTO y en las pull-
down es el valor BAJO. La diferencia entre unas y otras est en su ubicacin dentro del
circuito: las resistencias pull-up se conectan directamente a la fuente de seal externa y las
pull-down directamente a tierra.

pull-down pull-up
ENTRADAS ANALGICAS.

Arduino UNO dispone de 6 entradas analgicas (desde A0 hasta A5) que pueden recibir
voltajes dentro de un rango de valores continuos de entre 0 y 5 V.

Cada entrada cuenta con un convertidor anlogo-digital, y cada uno de ellos disponen de 10
bits (bits de resolucin) para guardar el valor del voltaje convertido digitalmente.

La cantidad de bits de resolucin, determina el grado de precisin. Por ejemplo, en el caso


del convertidor incorporado en la placa Arduino, si contamos el nmero de combinaciones de
0s y 1s que se pueden obtener con 10 posiciones, vemos que hay un mximo de 210= 1024
valores diferentes posibles.

Por ejemplo si tenemos un rango de 5V y lo dividimos entre 1024 valores disponibles,


tendremos que cada valor digital corresponde aproximadamente 5mV.
SALIDAS ANALGICAS (PWM).

Arduino no dispone de pines de salida analgica propiamente dichos, sino que utiliza algunos
pines digitales para simular un comportamiento analgico. Los pines digitales que son
capaces trabajar en este modo son los marcados con la etiqueta PWM. Para el modelo
Arduino UNO son los pines nmero: 3, 5, 6, 9, 10 y 11.

7
Las siglas PWM vienen de Pulse Width Modulation (Modulacin de Ancho de Pulso). Lo
que hace este tipo de seal es emitir una seal cuadrada formada por pulsos de frecuencia
constante (490 Hz aprox.). La gracia est en que al variar la duracin de estos pulsos,
estaremos variando proporcionalmente el voltaje promedio resultante. Es decir: cuanto ms
cortos sean los pulsos y ms distantes entre s en el tiempo, menor ser el voltaje promedio
de salida, y cuanto ms anchos sean los pulsos y por lo tanto ms juntos en el tiempo estn,
mayor ser dicho voltaje.

Cada pin PWM tiene una resolucin de 8 bits. Esto quiere decir que se pueden obtener un
mximo de 28 = 256 valores diferentes posibles.

La diferencia de voltaje analgico existente entre dos valores promedio contiguos (por
ejemplo el valor nmero 123 y el 124) se puede calcular mediante la divisin:
rango_voltaje_salida/nmero_valores_promedio. En nuestro caso, sera (5 V 0 V)/256
19,5 mV. Es decir, cada valor promedio est distanciado 19,5 mV.

8
OTROS USOS DE LOS PINES.

Pin 0 (RX) y 1 (TX): posibilitan la comunicacin sin intermediarios de dispositivos externos


con el receptor / transmisor serie que incorpora el microcontrolador.

Pines 2 y 3: se pueden usar, con la ayuda de programacin software, para gestionar


interrupciones.

Pines 10 (SS), 11 (MOSI), 12 (MISO) y 13 (SCK): se pueden usar para conectar algn
dispositivo con el que se quiera llevar a cabo comunicaciones mediante el protocolo SPI.
Pin 13: este pin est conectado directamente a un LED incrustado en la placa.
Pines A4 (SDA) y A5 (SCL): se pueden usar para conectar algn dispositivo con el que se
quiera llevar a cabo comunicaciones mediante el protocolo I2C/TWI.

Pin AREF: ofrece un voltaje de referencia externo para poder aumentar la precisin de las
entradas analgicas.
Pin RESET: si el voltaje de este pin se establece a valor BAJO (LOW), el microcontrolador se
reiniciar y se pondr en marcha el bootloader.

Pin IOREF: es una duplicacin regulada del pin Vin. Su funcin es indicar a las placas
supletorias, el voltaje al que trabajan los pines de entrada/salida de la placa arduino, y que
stas se adapten a ese voltaje de trabajo.

SOFTWARE ARDUINO
QU ES UN IDE?

Un programa (sketch en el mundo de Arduino) es un conjunto concreto de instrucciones,


ordenadas y agrupadas de forma adecuada y sin ambigedades que pretende obtener un
resultado determinado.

Las siglas IDE vienen de Integrated Development Environment, lo que traducido significa
Entorno de Desarrollo Integrado.

Arduino utiliza el lenguaje de programacin C, aunque eliminando parte de su complejidad. C


es un lenguaje fcil de aprender, que se compila en un eficiente "cdigo mquina" y que
requiere poco espacio en la memoria.

El entorno de desarrollo Arduino, utiliza algo llamado un compilador, el cual convierte la


secuencia de comandos en cdigo mquina, que ser el que se ejecutar en el
microcontrolador.

9
Estructura Bsica de los Programas Escritos en Arduino.

Descripcin del programa:

1. Lneas de Comentarios. Inician con /*, y terminan con */. Se usan para dar una
explicacin general del programa.
2. Comentarios en una sola lnea. Si se coloca // en cualquier lnea, el compilador ignora
el texto despus de estos smbolos en la misma lnea.
3. Declaracin de Variables. Una Variable es un lugar en la memoria del Arduino, que
guarda informacin.

10
4. Funcin void setup() {.}. Una Funcin es una parte del cdigo que hace una tarea
especfica. El cdigo dentro de las llaves de la funcin setup(), es ejecutado una vez al
iniciar el programa, por ejemplo: direccionar puertos, establecer las interfaces de
comunicacin, etc.
5. Los pines digitales de Arduino pueden funcionar como entradas o salidas. Para
configurarlos usamos el comando pinMode(). Este comando tiene 2 argumentos. El
1er argumento de pinMode, determina sobre cual pin se va a direccionar. El 2do
argumento establece la direccin del pin como INPUT o OUTPUT.
Un Argumento da informacin de las instrucciones sobre cmo stas deben operar.
6. Funcin void loop() {.}. Esta funcin se repite continuamente siempre que el
Arduino este encendido.
7. (9) digitalWrite().Es usada para establecer el estado de una salida. El 1er argumento
de esta instruccin es el pin que se quiere controlar. El 2do argumento es el valor a
establecer sobre el pin, HIGH (5v) o LOW (0v).
8. (10) Funcin delay(). Retardo de tiempo en milisgundos. Con esta instruccin Arduino
se detiene de hacer cualquier proceso segn el tiempo especificado

Declaracin e inicializacin de una variable.


La sintaxis general de una declaracin es siempre una lnea escrita as: tipoVariable
nombreVariable;. Tambin es posible declarar todas en una misma lnea genricamente, as:
tipoVariable nombreVariable1, nombreVariable2;.

A la vez que se declara la variable, se le puede establecer un valor inicial: a esto se le llama
inicializar una variable. La sintaxis general de una inicializacin es siempre una lnea escrita
as: tipoVariable nombreVariable = valorInicialVariable;.

mbito de una Variable.

Una variable global, es aquella que puede ser utilizada y manipulada desde cualquier punto
del sketch. Se declaran al principio de nuestro sketch; es decir, antes de las secciones void
setup() y void loop().

Una variable local, es aquella que solo puede ser utilizada y manipulada por las
instrucciones escritas dentro de la misma seccin donde se ha declarado. Se declara en el
interior de alguna de las secciones de nuestro sketch (dentro de void setup() o de void
loop() o de otras que puedan existir).

11
Tipos de Variables.

Tipo Memoria Rango Notas


(byte)
boolean 1 TRUE o FALSE (1 o 0)
char 1 -128 a +128 Se utiliza para representar un
cdigo de carcter ASCII (A
se representa como 65).
Normalmente, sus nmeros
negativos no se utilizan.
byte 1 0 a 255
int 2 -32,768 a + 32,768
unsigned int 2 0 a 65,536 Se pueden utilizar para
disponer de precisin extra,
cuando no se necesitan
nmeros negativos. Deben
utilizarse con cuidado ya que
las operaciones aritmticas
con ints pueden producir
resultados inesperados.
long 4 -2,147,483,648 a Slo se necesitan para
+2,147,483,647 representar nmeros muy
grandes.
unsigned long 4 0 a 4,294,967,295 Ver unsigned int.
float 4 -3.4028235E+38 a
+ 3.4028235E+38
doubl 4 igual que float Normalmente, esto seran 8
bytes y mayor precisin que
los valores float, con un
rango superior. Sin embargo,
en Arduino son iguales a
float.

12
BLOQUES CONDICIONALES.

Los bloques if y if/else. Un bloque if sirve para comprobar si una condicin


determinada es cierta (true,1) o falsa (false,0). Si la condicin es cierta, se ejecutarn las
instrucciones escritas en su interior (dentro de las llaves de apertura y cierre). Si no se
cumple, puede no pasar nada, o bien, si existe tras el bloque if un bloque else (opcional),
se ejecutarn las instrucciones escritas en el interior de ese bloque else.
La sintaxis del bloque if/else es:
if (condicin) {
// Instrucciones una o ms que se ejecutan si la condicin es cierta true,1
} else {
// Instrucciones una o ms que se ejecutan si la condicin es falsa false,0
}
El bloque else es opcional. Si no lo escribimos, el if quedara as:
if (condicin) {
//Instrucciones una o ms que se ejecutan si la condicin es cierta true,1
}
Tambin existe la posibilidad de incluir una o varias secciones else if, siendo en este caso
tambin opcional el bloque else final. Esta construccin tendra la siguiente sintaxis (puede
haber todos los else if que se deseen):
if (condicin) {
// Instrucciones una o ms que se ejecutan si la condicin es cierta
} else if (otra_condicin) {
/* Instrucciones una o ms que se ejecutan si la condicin del anterior if es
falsa pero la actual es cierta */
} else if (otra_condicin) {
/*Instrucciones una o ms que se ejecutan si la condicin del anterior if es
falsa pero la actual es cierta */
} else {
//Instruccin(es) que se ejecutan si todas las condiciones anteriores eran falsas
}

13
Para escribir correctamente las condiciones, necesitamos utilizar los operadores de
comparacin:
== Comparacin de igualdad
!= Comparacin de diferencia
> Comparacin de mayor que
>= Comparacin de mayor o igual que
< Comparacin de menor que
<= Comparacin de menor o igual que

Adems de los operadores de comparacin, tambin se pueden utilizar los operadores


booleanos (tambin llamados lgicos), usados para encadenar dos o ms comprobaciones
dentro de una condicin.

o && Comprueba que las dos condiciones sean ciertas (Operador AND)
o || Comprueba que, al menos, una de dos condiciones sea cierta (Operador OR)
o ! Comprueba que no se cumpla la condicin a la que precede (Operador NOT)

El lenguaje Arduino tambin dispone de operadores aritmticos, que son:

o + Operador suma
o - Operador resta
o * Operador multiplicacin
o / Operador divisin
o % Operador mdulo
BLOQUES REPETITIVOS (BUCLES)
El bloque while

Es un bloque que i repite la ejecucin de las instrucciones que estn dentro de sus llaves de
apertura y cierre. Cuntas veces? No hay un nmero fijo: se repetirn mientras la condicin
especificada entre sus parntesis sea cierta (true,1). Su sintaxis es muy sencilla:
while (condicin) {
//Instrucciones que se repetirn mientras la condicin sea cierta true,1
}

14
El bloque do
El bloque do tiene la siguiente sintaxis:
do {
//Instrucciones que se repetirn mientras la condicin sea cierta true,1
} while (condicin)
El bucle do funciona igual que el bucle while, con la excepcin de que la condicin es
evaluada despus de ejecutar las instrucciones escritas dentro de las llaves.
El bloque for

La diferencia entre un bucle while (o do) y un bucle for est en que en el primero el
nmero de iteraciones realizadas depende del estado de la condicin definida, pero en un
bucle for el nmero de iteraciones se puede fijar a un valor exacto. Por tanto, se usar esta
instruccin para ejecutar un conjunto de instrucciones un nmero concreto de veces. La
sintaxis general del bucle for es la siguiente:
for (valor_inicial_contador;condicion_final;incremento){
//Instrucciones que se repetirn un nmero determinado de veces
}
Tal como se observa, entre parntesis se deben escribir tres partes diferentes, separadas por
puntos y coma. Estas tres partes son opcionales (pueden omitirse cualquiera de ellas) y son
las siguientes:

- Valor inicial del contador: Se asigna el valor inicial de una variable entera que se
utilizar como contador en las iteraciones del bucle.
Por ejemplo, si all escribimos x=0 , se fijar la variable x a cero al inicio del bucle. A
partir de entonces, a cada repeticin del bucle, esta variable x ir aumentando (o
disminuyendo) progresivamente de valor.
- Condicin final del bucle: Se especifica una condicin. Antes de cada iteracin se
comprueba que sea cierta para pasar a ejecutar el grupo de sentencias internas. Si la
condicin se evala como falsa, se finaliza el bucle for, continuando el programa tras
su llave de cierre. Por ejemplo, si all escribimos x<10, el grupo interior de sentencias
se ejecutar nicamente cuando la variable x valga menos de 10.
- Incremento del contador: Se indica el cambio de valor que sufrir al inicio de cada
iteracin del bucle la variable usada como contador. Por ejemplo, la sentencia x=x+1,
es un contador que aumenta de uno en uno a cada repeticin. Este cambio se efecta
antes de comprobar la condicin de final del bucle.

15
Para facilitar la escritura del cdigo, de una manera compacta y rpida se hace uso de
operadores compuestos:
x++ Equivale a x=x+1 (Al operador ++ se le llama operador incremento)
x- - Equivale a x=x-1 (Al operador -- se le llama operador decremento)
x+=3 Equivale a x=x+3
x-=3 Equivale a x=x-3
x*=3 Equivale a x=x*3
x/=3 Equivale a x=x/3
LA COMUNICACIN SERIE CON LA PLACA ARDUINO

En el lenguaje de Arduino para que la placa pueda comunicarse con otros dispositivos, para
as poder transferir datos entre ambos, se hace uso de la instruccin Serial, la cual a travs
de nuestro sketch hacemos uso de un conjunto de instrucciones disponibles para manipular
la comunicacin serial.
La sintaxis de la funcin Serial:

- Serial.begin(): abre el canal serie para que pueda empezar la comunicacin por l. Se
suele escribir dentro de la seccin void setup(). Adems, mediante su nico
parmetro se especifica la velocidad en bits/s a la que se producir la transferencia
serie de los datos.
- Serial.print(): enva a travs del canal serie un dato (de cualquier tipo) desde el
microcontrolador hacia el exterior. Los caracteres se han de escribir entre comillas
simples y las cadenas entre comillas dobles.
- Serial.println(): hace exactamente lo mismo que Serial.print(), pero al final de la
ejecucin de Serial.println() se efecta un salto de lnea.
- Serial.available(): devuelve el nmero de bytes caracteres disponibles para ser
ledos que provienen del exterior a travs del canal serie (va USB o va pines TX/RX).
- Serial.parseInt(): lee del buffer de entrada (eliminndolos de all) todos los datos
hasta que se encuentre con un nmero entero.

El Serial monitor es una ventana del IDE que nos permite desde nuestra computadora
enviar y recibir datos textuales a la placa Arduino usando el cable USB.

16
Ejemplo 1:

Ejemplo2:

Ejemplo 3:

17
Ejemplo 4:

Ejemplo 5:

Ejemplo 7:

18

You might also like