Está en la página 1de 47

DISEO

DE PROYECTOS
BSICOS CON
ARDUINO

Vctor Santiago Manzano Villafuerte

INTRODUCCIN

DISEO DE PROYECTOS BSICOS CON ARDUINO


Vctor Santiago Manzano Villafuerte
ISBN: 978-9942-13-437-0
IEPI CERTIFICADO No QUI-042567

Impreso: Editorial "PI XH"


Telfono: 2 421806
Ambato- Noviembre -2013
Primera Edicin

Este libro est pensado para aquellas personas que siempre


han tenido un apego por la programacin de microcontroladores
pero por la complejidad en el aprendizaje de estos, quedaba
relegado todos sus deseos por incursionar en este campo.
Gracias a la nueva tecnologa que est revolucionando la
electrnica digital se presenta una solucin a este problema de
aprendizaje en cuando a la facilidad del lenguaje de
programacin y el armado de los circuitos, esta tecnologa se
llama Arduino.
Arduino se basa en hardware libre y cdigo abierto con la
posibilidad de utilizarlo sin conocimientos previos de
electrnica, permitiendo el desarrollo de proyectos electrnicos
con gran facilidad.
Adems existe gran cantidad de software para la implementacin
y simulacin de circuitos electrnicos y microcontroladores,
destacando Proteus VSMde Labcenter Electronics, el cual ofrece
la posibilidad de simular la placa de Arduino.
Por otra parte para la creacin de diagramas fsicos existe el
software Fritzing, el cual permite tener un esquema del prototipo
real a ser implementado.

DEDICATORIA
A Dios por ser mi luz y sabidura
A mis padres: Manuel y Rosita.
A mi esposa: Elizabeth, a mi hijo: Josu
A mis hermanos: Irene, Enrique, Andreita.,
a mi cuado Mauricio y a mis sobrinos.
Por todo el amor, cario y sobre todo el
apoyo incondicional.
Tambin a mis amigos por haber
compartido su tiempo y sus conocimientos.

NDICE GENERAL
CAPTULO 1

11

Programando Arduino

11

1.1 Entornodel IDEdeArduino

11

1.2 Introduccin a la programacin

15

1.2.1 Comentarios

18

1.2.2 Bloques

19

1.2.3 Tipos de datos


1.2.4 Constantes
1.2.5 Variables

19
19
20

1.2.6 Operadores aritmticos


1.2.7 Operadores

20
21

1.2.8 Funciones

21

1.2.9 Estructuras de control


1.2.9.1 Sentencias condicionales
1.2.9.2 Bucle o Estructuras de repeticin

22
22
24

1.2.9.3 Saliendo de los bucles


1.2.10 Siringo cadenas de caracteres
1.2.11 Entradas y salidas digitales y analgicas

26
27
28

1.3 Libreras
1.3.1 Otras Libreras

29
31

CAPTULO II

33

PROTEUS
2.1 Introduccin

33
33

2.2 Entorno Grfico ISIS

33

2.3 Manejo Arduino en Proteus

36

CAPTULO III

39

Proyectos
3.1 Proyectos con Leds
3.1.1-EncenderunLed
3.1.2 Encendido Progresivo y Apagado de Led

39
39
39
42

3.1.3 Secuencia de Leds con un pulsador.

44

3.1.4 Cruce de Semforos


47
3.1.5 Contador de O a 99 con dos display de 7 segmentos.. 50
3.2 Proyecto con Frecuencias

53

3.2.1 Zumbador.
3.2.2 Variacin de Frecuencias

NDICE DE FIGURAS
I ir.uuA 1.1: INTERFAZ IDEARDUINO

12

I K.IIUA 1. 2 VENTANA DE COMPILACIN

15

FIGURA 1. 3: IDEARDUINO

17

FIGURA 1. 4: FORMATO DE UNA FUNCIN


FIGURA 2. 1: IDE DE PROTEUS

22
34

FIGURA 2. 2: INTERFAZ DE ISIS PROTEUS

36

FIGURA 2.3: INTERFAZ ARDUINO MEGA2560

37

53
55

FiGURA2. 4: CONEXIN DE DISPOSITIVOS CON ARDUINO MEGA2560

37

FIGURA 2. S:CARGAR CDIGO AL ARDUINO

38

3.2.3 Sonidos
3.3 Proyectos Entradas y Salidas

57
61

FIGURA 2. 6: SIMULACIN DE PROGRAMA EN ISIS PROTEUS

38

3.3.1. Control de Temperatura

61

FIGURAS. 1: PROGRAMA ENCIENDE UN LED

40

3.3.2 Control de luz con AC

66

FIGURAS. 2: ESQUEMA DE CONEXIN ISIS PROTEUS ENCENDER UN LED.... 41

3.3.3 Control de Motores DC

69

FIGURAS. 3: ESQUEMA CONEXIN FSICA PARA ENCENDER EL LED

3.3.4Teclado
72
3.4 Transmisin serie, Protocolo de Comunicacin I2C y
Almacenamiento en la memoria EEPROM
78
3.4.1 Leer Datos desde Puerto Serie
78
3.4.2 Protocolo de Comunicacin I2C
3.4.3 Transmisin serie del valor de temperatura
utilizando el Protocolo de Comunicacin I2C y
Almacenamiento en la memoria EEEPROM
Bibliografa

81

41

FIGURAS. 4: ESQUEMA DE CONEXIN ISIS PROTEUS ENCENDER UN LED.... 43


FIGURAS. 5: ESQUEMA CONEXIN FSICA PARA ENCENDER EL LED

43

FIGURA 3.6: ESQUEMA DE CONEXIN DE LA SECUENCIA DE LEDS CON UN PULSADOR

46

FIGURA 3.7: ESQUEMA DE CONEXIN FSICA SECUENCIA DE LEDS CON UN PULSADOR 46


FIGURA 3. 8: CRUCE EN UNA INTERSECCIN

47

FIGURA 3.9: ESQUEMA DE CONEXIN EN ISIS PROTEUS CRUCE DE SEMFORES 49

84
90

FIGURAS. 10: ESQUEMA CONEXIN FSICA CRUCE SEMFOROS

49

FIGURAS. 11: ESQUEMA DE CONEXIN CONTADOR DEL O AL 99

52

FIGURAS. 12: ESQUEMA DE CONEXIN FSICA CONTADOR O AL 99

52

FIGURA 3. 13: ESQUEMA EN ISIS PROTEUS ZUMBADOR

54

FIGURA 3. 14: ESQUEMA Fsico ZUMBADOR

54

FIGURA 3.15: ESQUEMA EN ISIS PROTEUS VARIACIN DE FECUENCIAS

56

FIGURA 3.16: ESQUEMA Fsico VARIACIN DE FRECUENCIAS

56

FIGURA 3. 17: ESQUEMA EN ISIS PROTEUS SONIDOS CON LIBRERA PILCHES.H.. 60

'

FIGURA 3.18: ESQUEMA Fsico SONIDOS CON LIBRERA PITCHES.H

61

FIGURA 3. 19: ESQUEMA LM 35


FIGURA 3. 20: ESQUEMA

62

CONEXIN

ISIS

Programando Arduino

PROTEUS SENSOR

TEMPERATURA

65

FIGURA 3. 21: ESQUEMA

CONEXIN

FIGURA 3. 22: ESQUEMA

CONEXIN

FIGURA 3. 23: ESQUEMA

ISIS

FIGURA 3. 24: ESQUEMA

FSICA

SENSOR TEMPERATURA 65

LDR

66

PROTEUS SENSOR DE Luz

FSICO

SENSOR

68

DE LUZ

68

FIGURA 3. 25: DIAGRAMA DE CONEXIN CIL293D

69

FIGURA 3. 26: ESQUEMA

70

ISIS PROTEUS SENSOR DE Luz

FIGURA 3. 27: ESQUEMA

FSICO

FIGURA 3. 28: ESQUEMA

TECLADO

SENSOR DE LUZ

71
72

FIGURA 3. 29: INSERTAR LIBRERA KEYPAD . H


FIGURA 3. 30: ESQUEMA
FIGURA 3. 31: ESQUEMA

73

ISIS PROTEUS CONTROL POR TECLADO.... 77


DE CONEXIN

FSICA

CONTROL

TECLADO 77

FIGURA 3. 32: VIRTUAL SERIAL PORT DRIVER

78

FIGURA 3.33: ESQUEMA DE CONEXIN PUERTO SERIE ISIS PROTEUS

79

FIGURA 3. 34: SALIDA DEL PUERTO COM2

80

FIGURA 3. 35: ESQUEMA FSICO DE CONEXIN PUERTO SERIE

80

FIGURAS. 36: ESQUEMA CONEXIN DEL SENSOR CON ARDUINO

83

FIGURAS. 37: ESQUEMA DE CONEXIN FSICA DEL SENSOR Y ARDUINO

83

FIGURAS. 38: ESQUEMA CONEXIN ICTC74


FIGURA 3. 39: ESQUEMA CONEXIN
FIGURA 3. 40: ESQUEMA

CAPITULO I

EN ISIS

DE CONEXIN

TC74A05

FSICA

84
PROTEUS

89

DE ARDUINO Y
89

10

I . I Entorno del IDE de Arduino


lil Entorno de Programacin Integrado (IDE) de Arduino, es un
11)1 i multiplaforma, disponible para descargar directamente para
Windows, Linux y Mac OS. Es una aplicacin gratuita desarrollada
en Java y deriva del IDE de Processing y Wiring, sencilla de
instalar y a la vez muy fcil de utilizar.
I la sido diseado teniendo en mente que sus usuarios no son
expertos desarrolladores y sean capaces de familiarizarse con l
de una manera intuitiva.
Incluye un editor de cdigo que resalta la sintaxis, esto es
resaltando las palabras claves y funciones de otro color, adems
permite ver si estn bien emparejadas las llaves de las funciones
de condicin y ciclos de repeticin.
Adems el entorno incluye todo lo necesario para compilar gracias
;il compilador (avr-gcc), que trasforma el cdigo legible por el
ser humano a instrucciones legibles para la mquina (llamados
lleneros objeto), el proceso de compilacin es transparente para
el usuario. Todo lo que tiene que hacer es pulsar un botn. Si
existen errores en el cdigo de programacin, el compilador
mostrar un mensaje de error en la parte inferior del IDE y
resaltar la lnea de cdigo que parece tener el problema.
11

El cdigo que se desarrolla es C/C++, aunque las funciones que


gobiernan el programa son setupQ y loop().

Kciil

Copy for Discourse : Copia el cdigo con un


formato para incluirlo en foro.

Los archivos se guardan con la extensin .ino.


El IDE de arduino consta de cinco mens: File, Edit, Sketch,
Tools, Help y una barra de herramientas que permite verificar el
proceso de carga, creacin, apertura y guardado de programas,
adems de la monitorizacin serie (ver Figura 1.1).

Copy as HTML: Copia el cdigo con un


formato HTML para incrustarlo en una pgina
Web.
Sketch
Verify/Compile: Comprueba errores en el
cdigo.

< i > 1.!- 1

Import Library: Inserta una librera al


programa, incluyendo la sentencia #include en
el cdigo.
Show Sketch Folder: Muestra la carpeta en
donde se almacenan los programas
Add File...: Inserta un archivo fuente al
programa.
Tools
Auto Format: ordena en cdigo.

Figura 1.1: //le/faz IDE Arduino

1.- Barra de Mens: Son cinco mens: File, Edit, Sketch, Tools,
Help. Los mens se activan cuando existe una tarea que se pueda
realizar en este.
12

Board: Selecciona la versin de arduino que


se est usando.
Serial Port: En este men se presentan los
puertos serie real o virtual.

13

Burn Bootloader: Graba un gestor de


arranque en el arduino.
2. Barra de Herramientas: Con este men se permite
verificar, cargar y controlar el funcionamiento del
programa.

Done compl
C;\Uaers\Sanciago\lppData\Locil\lip\bttild3i38BlJ21441lifli?l.^
\lncende r_Led.cpp,h
Binary sketch size: 1,632
fof a
byte Miiac)

Comprueba los errores del cdigo.


Compila el cdigo y lo vuelca en la placa E/S de
Arduino.
Crea un nuevo archivo.
Muestra todos los programas que se encuentran
en el "Sketchbook"

Figura 1. 2 Ventana de Compilacin.

Guarda el programa.
Permite comprobar el funcionamiento del cdigo
por medio del puerto de Serie.
3. Editor de cdigo: En este espacio se escribe el cdigo.
4. rea de mensajes: Espacio en donde se indica si la
compilacin del programa fue exitosa o indica la lnea en
donde puede existir un error.
5. Consola: rea en donde se presenta el lugar en el que se
guard el programa compilado. En el caso de existir
errores en el cdigo del programa muestra las posibles
causas de ste (ver Figura 1.2).
14

1.2 Introduccin a la programacin


I ,a estructura bsica del lenguaje de programacin de Arduino se
compone de dos partes. Estas dos funciones son vitales para el
liincionamiento del programa.
void setupQ

sentencias;

15

void loopQ

"

MI hjullUJl! Arruino

rtib

l-Qi

sentencias;

Curacin
En donde setupQ es la parte encargada de recoger la configu..^*^*
y loopQ es la que contienen el programa que se ejecutar
cclicamente.
Ambas funciones son necesarias para que el programa trabaje.
La funcin de configuracin setup() debe contener la declaracin
de las variables, establecer el estado de los pins, inicializar libreras,
etc. Es la primera funcin a ejecutar en el programa, se ejecuta
slo una vez, y se utiliza para la configuracin de la comunicacin
de entrada/salida y serie entre otras.
La funcin bucle (loop) contiene el cdigo que se ejecutar
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.
Para realizar la programacin se abre el IDE de Arduino, que
por defecto abre un archivo en blanco (ver figura 1.3)

Figura 1. 3: IDEarduino

I'nra compilar el programa pulsar en el botn

, sino existe

errores deber presentar en la parte inferior un mensaje de


Done Compiling.
I n la consola indica la direccin en la cual se guard el archivo
compilado con la extensin .hex y el tamao del fichero. Copie
16

17

este archivo en una carpeta en donde se tenga el proyecto a


desarrollar; en el caso de que no se visualice esta direccin dirijase
a File->Preferences y activar la opcin compilation.
En este captulo se describirn los elementos ms bsicos y
esenciales para comenzar a programar.

1.2.2 Hinques
I'ai a agrupar un conjunto lneas se utiliza los smbolos

1.2.3 Tipos de datos


I n la programacin de arduino existen diferentes tipos de datos:

1.2.1 Comentarios
Los comentarios no son considerados como lneas de cdigo en
el programa, sirve para documentar ciertos aspectos importantes.
Existen 2 tipos de comentarios:
El comentario de bloque, abarca todas las lneas contenidas entre
los smbolos /* y */, Ejemplo:
/* Hola aqu se comenta acerca del programa,

Hyte. Almacena 8 bits.

Int. Almacena 16 bits.

I ,ong. Almacena 32 bits.

Float. Almacenado 32 bits.

Arrays Alamecena varios valores de un mismo tipo, el


primer valor se encuentra en ndice O

y del proceso que realiza cada lnea.

1.2.4 Constantes

*/

Lnea de comentario: con los smbolos // se comenta una lnea.

Son variables a las que no se puede modificar el valor. Ejemplos:

Ejemplo:

true/false

// Comentario para una lnea.

HIGH/LOW
INPUT/OUTPUT

18

19

Ejemplos:

1.2.5 Variables
Es una porcin de memoria que almacena valores de acuerdo al
tipo de declaracin y que es conocido en el programa por un
determinado identificador y por lo tanto puede variar en el
recorrido del programa.
Una variable puede tomar una infinidad de valores pero en un
momento particular tendr uno solo.
Ejemplo:
int p; // variable p disponible para todo el programa
void setup() {

void loop() {
for (int i=0; i<20;) // variable i puede utilizarse solo en el bucle

I,

.I/?;

W :.-'--.

' .

i- h%3;

1.2.7 Operadores

Operadores Booleanos: && (Y), || ( O ), ! (NO)

Operadores de acceso a punteros: *, & acceso a


memoria.

Operadores de bits: &, |, A, ~, ,

Operadores compuestos:
incremento/decremento de variables: ++; -- incremento/
decremento el valor de la variable.
,

Asignacin y operacin: +=, -=, *=, /=, &=, |=

float f; //variable f puede utilizarse nicamente en la funcin


loop()

1.2.8 Funciones

1.2.6 Operadores aritmticos


Se puede realizar las operaciones +, -, *, /, % (mdulo, el resto
de la divisin entre los valores)
20

I Ina funcin es un bloque de cdigo identificado por un nombre


y que es ejecutado cuando la funcin es llamada. La declaracin
de una funcin incluye en primer lugar el tipo de datos que
devuelve la funcin. Despus del tipo de datos se especifica el
nombre de la funcin y los parmetros de la misma Ejemplo
(ver Figura 1.4):
21

: e de d rue ion

inf

P.,' ,s,'r,*4r 25 ... vivr.'.ik:

ilie

(Int Ont y){


// cdigo si no se cumple

retum

pt,s' U fjrsc.ctr.

Figura 1. 4: Formato de una funcin

1.2.9 Estructuras de control

Sentencia switch
I >( -| >ci id icndo del valor de una variable ej ecutar un cdigo distinto
:\h (var) {

Son aquellas estructuras que permiten modificar el flujo de


ejecucin del programa, es decir, el orden en el que se ejecutan
las sentencias.

1.2.9.1 Sentencias condicionales

//I ij ce uta si var es 1

break;

Sentencia if

case 2:

Ejecuta un cdigo si se cumple la condicin y otro distinto si no


se cumple

// Ejecuta si var es 2

if (condicin)

break;
default:
// si nada concuerda, default

// cdigo si se cumple

// default es opcional

22

23

1.2.9.2 Bucle o Estructuras de repeticin


Una estructura de repeticin indica que se va a realizar varias
veces un mismo proceso existiendo varias maneras de representar
una estructura de repeticin dependiendo mucho de 3 parmetros
principales como son: el iniciar un contador, tener un nmero
tope de repeticiones de proceso, parmetro modificador de uno
de los parmetros anteriores los mismos que debern actuar como
elementos para comparacin o condicin.

) l . i ondu-in vu el ve a ser comprobada de nuevo. Si la condicin


i". l.il;;:i, el bucle termina.
l'"i i lemplo:
li ( M I ! i ();i<20;i++) {

lentencias:

Existen 3 tipos de bucles:

Kt ali/;ir 20 veces

Bucle for

Ilude wliile

La declaracin for es usada para repetir un bloque encerrado


entre llaves. Un incremento de un contador, es usado
normalmente para aumentar y terminar con el bucle. La estructura
for es muy til para la mayora de las operaciones repetitivas, y
habitualmente se usa para operaciones con vectores, para operar
sobre conjuntos de datos/pines.

I I l u u - l r while ejecutar las sentencias de su bloque mientras


pie l.i condicin inicial se cumpla.

El bucle for tiene tres partes o argumentos en su inicializacin:

\I ii k-( condicin ){
// sentencias;

for (inicializacin ; condicin ; incremento) {

Si l;i condicin no se cumple inicialmente no se realizar ninguna


Iteracin.

//sentencias;

Huele do

La inicializacin, se produce slo la primera vez. Cada vez que


se va a repetir el bucle, se revisa la condicin: si es cierta, el
bloque de funciones (y el incremento del contador) se ejecutan,

24

I ; n osle bucle la comprobacin se hace despus de la iteracin,


por lo que se garantiza que al menos se ejecutar una vez la
Iteracin.

25

1 . 2 . 1 O Siring o cadenas de caracteres

do

l'nni l a r i l i l a r e l trabajo concadenas de caracteres, existe laclase


Sli ni) 1 ,. Tiene los siguientes mtodos

{
//sentencias

Funcin

} while (condicin);

1.2.9.3 Saliendo de los bucles


Se puede salir de un ciclo usando las siguientes instrucciones:
break // sale del bucle

comprelo])
concat()
rnilsWilhO

cijiialsf)
t'(|ii;ils]',ii0rcCase()

Detalle
Compara dos cadenas
Concatena
Comprueba si termina por...
Comprueba si son iguales
Comprueba igualdad ignorando maysculas y
minsculas

continu // salta el paso actual del bucle


return // sale de la funcin

niihOO

gotolabel //salta a la etiqueta label

lastlndexOfO

for(inti=0;i<10;i++)

{
if(bsalto>0)
continu; // Se salta el cdigo del resto de la iteracin
else

IcnglhO
i'cplacc()
slartsWilhO
siibslringO
ltiLowcrCase()
!ollppcrCase()
!iiin()

Devuelve la primera posicin del carcter que


se pasa como argumento
Devuelve la ltima posicin del carcter que le
pasamos
Longitud de la cadena
Reemplaza
Comprueba si empieza por
Devuelve un fragmento de la cadena original
Convierte a minsculas
Convierte a maysculas
Elimina los espacios iniciales y finales

break; //sale del bucle

27

1.2.11 Entradas y salidas digitales y analgicas


Fundn
pinMode(pin, mode)

digitalRead(pin)

digitalWrite(pin, valu)

analogRead(pin)

analogWrite(pin, valu)

Detalle
Configurar un pin para comportarse como
entrada (INPUT) o salida(OUTPUT).
Esta funcin se utiliza dentro de setup(), por
defecto en arduino todos los pines estn como
salidas.
Ejemplo
pinMode(pin, OUTPUT);
Devuelve un valor en alto (HIGH) o en bajo
(LOW), de un ping digital determinado.
Ejemplo:
= digitalRead(Pin);
Introduce un nivel alto (HIGH) o bajo (LOW)
en el pin digital especificado.
Ejemplo:
digitalWrite(pin,HIGH);
Devuelve un valor desde el pin analgic
sealado con una resolucin de 10 bits. Esta
funcin solo funciona en los pines analgicos
El valor resultante es un entero de O a 1023
Los pines analgicos, a diferencia de los
digitales no necesitan declararse previamente
como INPUT o OUTPUT.
Ejemplo:
= digitalRead(Pin);
sta funcin solo puede ser usada en pines
analgico. Escribe un dato pseudo-analgico
utilizando PWM, el dato est en el rango O 255, el O genera O V y el 255 genera 5 V en la
salida del pin especificado.
Ejemplo:
analogWrite(pin, v);

28

ni)

mlllliO0
i.y), max(x,y)

Funciones de tiempo y matemticas


Permite realiza una pausa en el programa,
especificando en tiempo en milisegundo.
Existe un error en esta funcin, ya que cuando
se ejecuta esta instancia produce que el
programa se detenga (excepto las
interrupciones) con lo cual no lee sensores, ni
!?/>' .'ii'> v'j- realiza clculos en el tiempo especificado.
Para tiempos mayores a decenas de
milisegundos no se recomienda esta funcin.
Retorna un valor en milisegundos que Arduino
se encuentra ejecutando el programa.
Retorna el mnimo y el mximo entre sus
parmetros.

Funciones de generacin aleatoria


Determina un valor de inicio como el punto de
partida para la funcin randomQ.
Entrega un valor aleatorio entre el rango
u ), i:iiidom(min, max)
indicado.
nl(jirrd)

nl.bi'Hn(rate)
iil.println(data)
ul.readQ
iil.availableO

Puerto serie
Permite el uso del puerto serie y determina la
velocidad de transmisin.
Permite enviar datos al puerto serie
Lee los datos del puerto serie.
Devuelve el nmero de caracteres presentes en
el puerto serie.

l.:i Libreras
I 1 1 1 , 1 1 1 hrcra no es ms que un conjunto de cdigos empaquetados
v .1 los c|iie podemos llamar desde nuestro programa, facilitando
t i desarrollo del programa, puesto que aprovecha un cdigo ya
ixiltente.
29

Para usar se tiene que importar a nuestro cdigo con la palabra


reservada

I I I Olas Libreras
niiiiiiciilion (nctworking and protocols):

#include <,...>

engcr

Si se requiere instalar una librera hay que descargarla y copiarla


en la carpeta "libraries" del directorio, donde se guardan nuestros
sketches de arduino.

SoflScriil
IVIre

Procesa mensajes de texto provenientes del


PC.
Versin mejorada de SoftwareSerial.
Permite la comunicacin con dispositivos de
Dallas (fabricante de dispositivos electrnicos)
que usan este protocolo.

vcyboiird

Lee caracteres desde un teclado PS2.

ilc lyicssiigc System


llIJMobllc

Enviar mensajes entre arduino y el PC.


Enva mensajes de texto y email desde el
mvil (va comandos AT).
Servidor web para usar con arduino Ethernet.
Enva seales del protocolo XI 0 usando los
cables elctricos domsticos.
Comunicaciones XBees en modo API.
Control remoto de otros Arduinos por medio
de comunicaciones serie

Libreras bsicas

LiquidCrystal
SD
Servo

Detalles
Permite leer y escribir en almacenamiento
permanente
Permite conectar a internet.
Comunicaciones usando un protocolo
concreto.
Permite el manejo de LCD.
Lectura y escritura en tarjetas SD.
Control de Servos.

SPI
SoftwareSerial
Stepper
Wire

Comunicaciones con dispositivos usando SPI.


Permite comunicaciones serie por otros pines.
Control de motores paso a paso.
comunicaciones I2C

Libreras
EEPROM
Ethernet
Firmata

iliilim
MI)
XHrr

K'iinlrol

Srimlng:
( ii|iucilivc Sensing
Dvbouncc
l'uiilullis \s
Impnrn-tl LCD library
(!LCD

30

Permite usar dos entradas como sensors


capacitivos.
Permite usar anti-rebote en entradas
Mejora la librera LCD library
Permite manejar LCDs grficas basadas en el
chip KS0108 o equivalente.
31

LedControl

LedDisplay

CAPITULO II

Maneja matrices de leds con chips MAX7221


oMAX7219.
Controla pantallas basadas en HCMS-29xx
con scroll.

PROTEOS
.'.I Introduccin

Motores y PWM:
TLC5940

Permite el uso del chip TLC594016 canales

con PWM de 12 bit PWM.

Manejo del tiempo:

DateTime
Meto
MsTimerl

Ayuda con el trabajar con fechas y horas.


Ayuda a medir intervalos temporales fijos
Permite ejecutar tareas cada N milisegundos
(usa2temporizadores).

Librera Servo
Permite controlar hasta 12 servos en un arduino UNO y 48 en un arduino Mega
Conecta el objeto servo con el pin dado.
attach(pin)
Establece la posicin del servo.
write(angulo)
Devuelve la posicin del servo.
readO
Comprueba si est conectado.
attachedO
Desconecta el pin del servo.
detachO

32

l ' i o i r u s es un software para el diseo de circuitos elctricos y


Irr i milicos con los cuales se puede realizar proyectos completos
un sle mbito. Proteus es desarrollado por Labcenter Electronics
i | i n - ronsta de los dos programas principales: Ares e Isis.
\' I ' S (Advanced Routing and Editing Software) es la herramienta
di rumiado, ubicacin y edicin de componentes, se utiliza para
ln I , i l n icacin de placas de circuito impreso.
I ' . I' i (1111 c 11 i gent Schematic Input System) permite disear el plano
l< 11 iro del circuito que se desea realizar con componentes muy
v (iii,idos.

I u.i de las prestaciones de Proteus, integrada con ISIS, es VSM


i Vn 11 uil System Modeling), con la cual se puede simular en tiempo
i r a l lelas las caractersticas de varias familias de
mu u n oniroladores, as como la simulacin de arduino.
/ . 1 I nIonio Grfico ISIS
I u i ',1.1 herramienta se pueden crear diseos de circuitos
li i i i o i i i i os y se puede probar su funcionamiento gracias a la
m m l i u ion.

33

En este libro se explicar de manera rpida sobre la utilizacin


de esta herramienta, as como la colocacin de componentes en

I,- VKINTANA DE VISTA PREVIA: vista previa del circuito o


li los elementos del diseo.

la hoja de trabajo.

i, SULKCTOR DE OBJETOS: en esta ventana aparecern


l >:; componentes y otros elementos disponibles, dependiendo
< l e | modo seleccionado, y desde all podremos elegirlos para
colocarlos en el diseo.

Para comenzar se debe abrir el programa Proteus desde el icono


ISIS, presentndose una ventana con un entorno de trabajo como
el que se indica en figura 2.1, conformado por varias barras de
herramientas.

1. lt( >KI)E DE HOJA: la lnea de color azul determina el lmite


de la hoja de trabajo; debemos colocar el circuito dentro de

I VENTANADE EDICIN: es la ventana donde dibujaremos


lo:, circuitos electrnicos colocando los componentes,
11 iin conectndolos, y agregando tambin otros instrumentos
v herramientas.
J

11A K RA DE ESTADO: aqu aparece informacin til de lo


i|iic tengamos seleccionado o del elemento sobre el cual se
encuentre el cursor del mouse en ese momento.

i . ItAKRA DE COORDENADAS: en esta barra podemos ver


l.is coordenadas donde se encuentra el cursor en todo
i noinento, mientras lo desplazamos por la ventana de edicin.
/

SIMULACIN: aqu podemos encontrar los controles de


simulacin

Figura 2.1: IDE DE PROTEUS

34

35

2.3 Manejo Arduino en Proteus

p.[

Para la simulacin abrimos el ISIS de Proteus, el cual muestra


una pantalla como la que se indica en la figura 2.2

f t

lirtft, t -fe* i^^Mt


si.(feu
'i,;?

::J : i.

Figura 2.3: Interfaz Arduino MEGA 2560

I >< I.' misma forma como se aadi el arduino, se tiene que


Idlcionar los diferentes dispositivos a utilizar en el circuito, como
II indica la figura 2. 4.

"
i UJUJU.1..1

Figura 2.2: Interfaz de ISIS Proteus

En la paleta de dispositivos, agregar el microprocesador a utilizar,


en este caso es el arduino MEGA2560, como indica en lafigura|
2.3
Figura 2.4: Conexin de dispositivos con Arduino MEGA2560

36

37

CAPTULO lll

Cargue el programa en el micro, haciendo doble click sobre el


micro de arduino y seleccionar el archivo.

Proyectos
I, I l'roycctos con Leds
M I Encender un Led

I I ptoycclo enciende un led durante un tiempo de 5 segundos


\) se apaga un tiempo de 3 segundos.
l'.n.i qm.1 cumpla con el proyecto enunciado anteriormente, se
( u n dr ic L ;ilizar los siguientes pasos:
Figura 2.5: Cargar Cdigo al Arduino

Para comprobar el funcionamiento del programa pulsar play


>?!

1 Declarar una variable de tipo entero y asignarle


un nmero de puerto para que sea la salida que
encienda el led.
intpinled=13;
2

Declarar la funcin void Setup( ), y dentro de


esta la funcin pinMode, que sirve para indicar
el puerto como salida
pmMode(pinled,OUTPUT);

QXEQIDD ; "

i .;<*

Figura 2.6: Simulacin de Programa en ISIS Proteus

3 Declarar la funcin loop( ), para que el programa


se repita en un bucle infinito y dentro de esta
utilice la funcin digitalWrite, para indicar si la
salida ser un 1 lgico o un O lgico, para establecer
39

una pausa en este estado se utiliza la funcin delay


la cual espera la cantidad de milisegundos indicado.

' ' "iliieimi de conexin del circuito en ISIS Proteus se muestra


ngura 3.2 y la conexin fsica se nuestra en la figura 3.3

delay(5000);
El programa completo deber quedar como se indica en la
Figura 3.1
C; fi

,Li t feih-,a 1 " -S

>, *4i Wi
<

t
1

///i 3. 2: Esquema de conexin ISIS Proteus encender un Led

1
'I
J
' , =,{33603;
i

Figura 3.1: Programa enciende un Led


Figura 3. 3 Esquema conexin fsica para encender el led
40

41

Tcjf^J.;-:

"r^?"-

3.1.2 Encendido Progresivo y Apagado de Led


El programa va encendiendo progresivamente un led y luego lo
va apagando poco a poco.
El cdigo del programa queda de esta manera:
intledPin=9;
void setup () {
pinMode(ledPin,OUTPUT);

lO..I3_i > "":-' ",LJ.*(

Figura 3.4: Esquema de conexin ISIS Proteus encender un Led

voidloopQI
for(inti=0;i<255;i++){
analogWrite(ledPin,i);
delay(lOO);

}
for(inti=255;i>0;i){
analogWrite(ledPin,i);
i

delay(lOO);

Figura 3,5: Esquema conexin fsica para encender el led

43

dlgltalWrlte (leds[n], HIGH);

3.1.3 Secuencia de Leds con un pulsador


El programa enciende los leds de manera secuencial, como si
se tratara de las luces del auto fantstico, siempre que se
presione el pulsador.

1 ' i m i - ( i i ;illo el l'ucrto en la posicin n


I. l , i \ ( i i u n p o ) ; //tiempo de pausa
dlgllIWrte(leds[n],LOW);

El cdigo para su funcionamiento es el siguiente:

l ' n i i i - m bajo el Puerto en la posicin n

int leds[]={5,6,7,8}; // Vector de puertos de salida

! I , i v ( l i n i i p o ) ;

intpulsador=9;
inttiempo-20;

int n=0;
ni I . n ();n ) {

void setupQ {//comienza la configuracin

i He (lcds[n], HIGH);

for (n=0;n<4;n++) {// Determina el vector como salida.


pinMode (leds[n], OUTPUT);

.lii'H.ilWiilc(lcds[n],LOW);

}
pinMode (pulsador, INPUT); //Determina el Puerto 9 como Salida
}

Ji L i s ( l i r i n p o ) ;

void loopQ {

>

if(digitalRead (pulsador) == HIGH ) { //Espera que presione el


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

45

I I < Hice de Semforos


l pioi'.raina controla los semforos para el cruce en una
iel seccin.

Figura 3.6: Esquema de conexin de la Secuencia de leds


con un pulsador
~\ 3.7: Esquema de conexin fsica Secuencia de leds
Figura 3.8: Cruce en una interseccin

I I i-cligo para su funcionamiento es el siguiente:


MU x 1 1 ={2,3,4,5,6,7};
mi !irmpo=3000;
mi ln.'inpol=500;
\ t i i d setup(){
l>r(intn=0;n<6;n++)
I
pinMode(x[n],OUTPUT);
con un pulsador

46

47

I ii - I pioicus insertamos las libreras de arduino mega2560 y el


( M i l u - hj'JUs.

void loop()
{
digitalWrite(x[0],HIGH);
digitalWrite(x[3] ,HIGH);
delay(tiempo);
digitalWrite(x[3],LOW);
digitalWrite(x[4],HIGH);
delay(tiempol);
digitalWrite(x[4],LOW);

I luura 3.9: Esquema de conexin en ISIS Proteus Cruce de Semfores

digitalWrite(x[5],HIGH);
digitalWrite(x[0],LOW);
digitalWrite(x[2],HIGH);
delay(tiempo);
digitalWrite(x[2],LOW);
digitalWrite(x[l],HIGH);
delay(tiempol);
digitalWrite(x[l],LOW);
digitalWrite(x[5],LOW);

Figura 3.10: Esquema conexin fsica Cruce Semforos

48

49

3.1.5 Contador de O a 99 con dos display de 7 segmentos


El programa cuenta del O al 99 utilizado dos displays de 7
segmentos.
El cdigo para su funcionamiento es el siguiente:

I..i un x l

0; xl < 7;xl++) {

|.inMKlc(displ[xl], OUTPUT);

'->

int disp[] = {2, 3,4, 5, 6,7,8};


int displ[] = {22,23,24,25,26,27,28};
bytedigits[10][8]= {
//abcdefg.
{ 1, 1, 1, 1, 1, 1, O, 0}, // O

m i l lonpQ {

l ' H i m l 11 0;jl<10;jl++){
lu ( m i decenas = 0; decenas < 7; decenas++) {
1111 11; 11 Write(disp 1 [decenas] ,digits[j 1 ] [decenas]);

{ O, 1, 1, O, O, O, O, 0}, // 1
{ 1, 1,0, 1, 1,0, l , 0 } , / / 2
{ 1, 1, 1, 1,0,0, 1, 0 } , / / 3
{ O, 1, 1, 0,0, 1, 1, O},// 4

lu ( i n t unidades=0; unidades < 7; unidades++)

{ 1, O, 1, 1, O, 1, 1, O},// 5
{ 1,0, 1, 1, 1, 1, 1, 0 } , / / 6

<ligitalWrite(disp[unidades],digits[j][unidades]);

{1,1, 1, O, O, O, O, 0}, // 7
{ 1, 1, 1, 1, 1, 1, 1, 0 } , / / 8

delay(300);

{ 1, 1, 1, 1,0, 1, 1, 0} II 9

void setupQ {

delay(300);

for(intx = 0;x<7;x++) {
pinMode(disp[x], OUTPUT);
50

51

'

Proyecto con Frecuencias

\,l.\r
I I pioj'.iima consiste en generar un tono, como una seal de
i INO.
! n i-;;U- programa se utiliza la funcin tone ( ), en la cual se
> i il ilrcc el pin de salida, la frecuencia y la duracin de esta.
ij'.o para su funcionamiento es el siguiente:
M'lil

Figura 3.11: Esquema de conexin Contador del O al 99

("Km! i ();i<200;i++){
IIM I i

...... >(<>, (.60, 100);

I. \,\\( /.S);

Figura 3.12 Esquema de conexin fsica Contador O al 99

52

53

i .'.' Variacin de Frecuencias


u .1 un Bucle de Reproduccin de sonidos, en el que la
l u iii-ncia sea cada vez menor y aumente la longitud, es decir:

I1 -11. ( I ' i n, I recuencia_baj a,longitud_aumenta)


|| i ><li;;o para su funcionamiento es el siguiente:
n i l 1'mSonido =11;
> i i i d :,ckip() {

I ni iMode(PinSonido,OUTPUT);
!
\| loopQ {
Figura 3.13: Esquema en ISIS Proteos Zumbador

mi liccuencia = 4978;
mi longitud = 30;
\ \ l n l e (frecuencia > 31)
!
lone(PinSonido, frecuencia, longitud);
dclay(longitud);
liccuencia = frecuencia - 95;
longitud = longitud +10;
!
hoTonc(PinSonido);
diluy(2000);

Figura 3.14: Esquema Fsico Zumbador


54

55

t M Sonidos
ARD

i n .u'ion de sonidos con nota musicales por medio de la librera

'

( l i l i Ill'K.ll

i 1 1 1 n l i j ' o para su funcionamiento es el siguiente:


'hu l u i k - "pitches.h"
n i - i . - : ; in the melody:
mi m.-lt)dy[]= {
NOTE_DO, NOTE RE, NOTE_MI, NOTE_FA,
N< > I l < SOL, NTENLA, NOTli SI};
nolc durations: 4 = quartcr nolc, 8 = eighth note, etc.
lu nolcDurations[] = {4,8 };
Figura 3.15: Esquema

en ISIS Proteus Variacin de Frecuencias

M i u l setupQ
I
mi pausa_entre_notas

(1000/8) * 1.30;

|)inMode(10, O U T M I I ) ;
pinMode(ll, O U T I H I I );
(ligitalWrite(10,HI(ill);
lbr(inti=l;i<4; i )
i
luiie(ll,NOTEJvVS);
ilclay(pausa_entrc noiiis);
lone(ll,NOTE_l)0,X),
Figura 3.16: Esquema Fsico Variacin de Frecuencias

56

57

i ..... ( I I . N ( ) l l ; I ( 'A,S);
delay(pausa_entre_notas);
tone(ll,NOTE_FA,8);
delay(pausa_entre_notas);
tone(ll,NOTE_SOL,8);
delay(pausa_entre_notas);
tone(ll,NOTE_LA,8);
delay(pausa_entre_notas);
tone(ll,NOTE_LA,8);
delay(p ausa_entr e_notas);

i l . l , i , i |i.ni.'.,i mire notas);


lilil i I I .NOTI M I , 8);
I' l.r, (p.nisii cnlrcjiotas);
i ..... i I I.N()Tl_RE,8);
I. l . i \ ( | ) ; u i s a cntre_notas);
Illliol I I.NOTE_DO,8);
d> lny(pausa_entre_notas);
I . . M . ( I I,N()TE_SOL,8);
ikl,n ( pausa_entre_notas);

tone(ll,NOTE_SOL,8);
delay(pausa_entre_notas);
tone(ll,NOTE_SI,8);
delay(pausa_entre_notas);
tone(ll,NOTE_LA,8);
delay(pausa_entre_notas);
tone(ll,NOTE_SOL,8);
delay(pausa_entre_notas);
tone(ll,NOTE_FA,8);

..... .-(II,NOTE_SOL,8);
i l !iislpausa_entre__notas);
lMiif(ll,NOTE_DO,8);
i|clnv(pausa_entre_notas);
| M I I , ( I1,NOTE_DO,8);
1 1 r I a v ( pausa_entre_notas) ;
ii.n.-(ll,NOTE_RE,8);
id luy(pausa_entre_notas);

delay(pausa_entr e_notas);
tone(ll,NOTE_FA,8);
delay(pausa_entre_notas);

< Ir lny( pausa_entre_notas);


inii l -(ll,NOTE_FA,8);

59

delay(pausa_entre_notas);
tone(ll,NOTE_FA,8);
delay(pausa_entre_notas);

}
noTone(ll);
digitalWrite(10,LOW);

}
void loop() {
// Loop significa el bucle a repetir, siempre

ARt

Figura 3.18: Esquema Fsico Sonidos con librera pitches.h

\, \s Entradas y Salidas
V \, I . < 'ontrol de Temperatura
! I | u o)-.rama consiste en tomar la temperatura del sensor LM35
\ IM sentar este dato en un LCD.
I I I M 5 es un sensor de temperatura con una precisin calibrada
i!' I " < ' . Su rango de medicin abarca desde -55C hasta 150C.
I ,i '.alida es lineal y cada grado centgrado equivale a lOmV, por
l i > I,mo:
IM)"C = ISOOmV
Figura 3.17: Esquema en ISIS Proteos Sonidos
con librera pitches.h

60

40C = -400mV

61

TO-220
Plstic Pacfcage*

\r analgico de tensin.
\ i, i Id)', icad = lectura analgica de tensin.
I un 1 1 Resolucin de lectura en microsegundos.
I " l o

210, valor binario de 10 dgitos binarios.

LM:

i 561

I n* mdulos LCD se encuentran en diferentes presentaciones,


I ..... n inplo 2x16 (2 lneas de 16 caracteres), 2x20, 4x20, 4x40,
a continuacin describe en detalle los pines del mdulo
S

GN0

U %y<

1D
l'IN

Figura 3.19: Esquema LM 35

Arduino proporciona varias patillas con capacidad para leer valores


analgicos. Cuando se lee un valor se tiene una resolucin de 10
bits, lo que quiere decir que podremos obtener valores entre O y
1023.

B"BHfc

,J -"
too

1
1
/

Para leer estos valores se utiliza la funcin:

111

analogRead(pin);

i1

Para calibrar el valor ledo del sensor se utiliza el siguienti


algoritmo:
sensorValue = ( 5.0 * analogRead(sensorPin) * 100.0) / 1024.0;

1 't'"*

li
14
1'

62

Nombre y funcin

vss

b:; ( re ira ?v)

VDD

Al imer.t ac i . n -r T-V
Ar.:.-'te del : _ r - i t - i Gi-le- :i>-n DATO ^IITF "L
I- ~' la o eocii*~ r-i -i L"'D

vo

RSff

RW
E
DL
Di
D2
D3
D4
D5
D6
D7

r. -,' il-tac r.
D rit ner. c. ' i ' . f i r s r i v
D
D2
D3
D4
D5
D6
D7 bit ms sigificativo

nodo de LED backlight


Ctodo de LED backlight
uta; # significa negado.
1 1')

En donde:

SMBOLO

LED+
IED~

63

El cdigo para el funcionamiento del programa quedara de la


siguiente manera:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensorPin = AO;
int sensorValue = 0;
void setup() {
lcd.begin(16,2);
/ i\inia 3.20: Esquema conexin ISIS Proteus Sensor Temperatura

}
void loop() {
sensorValue = ( 5.0 * analogRead(sensorPin) * 100.0) /
1024.0;
lcd.println(sensorValue);
delay(3000);

Figura 3.21: Esquema conexin fsica Sensor Temperatura

64

65

3.3.2 Control de luz con AC


El programa consiste en utilizar un sensor LDR para controlar
un foco de HOv.
El LDR es un componente electrnico cuya resistencia disminuye
con el aumento de intensidad de luz incidente.
Al utilizar el LDR como resistencia inferior del divisor de tensin,
se obtiene la tensin mxima cuando se tenga el LDR en plena
oscuridad, ya que opondr el mximo de su resistencia al paso
de la corriente derivndose esta por Vout. Si se utiliza como
resistencia superior, el resultado ser el inverso, la tensin ser
mxima cuando est completamente iluminado, ya que se
comportar prcticamente como un cortocircuito, con una

I iste sensor est configurado para funcionar cuando no exista la


presencia de luz, el cual enva una seal al micro y este prende
una lmpara de HOv.
l ; ,l sensor est conectado a la entrada analgica Al de arduino.
I ,;i salida se produce en el ping 13, salida digital, con la ayuda de
un transistor para amplificar la seal y disparar un relay que
funciona a 5v, el cual activa el paso de la corriente ac para
encender la lmpara.
nil sensorPin = Al;
int sensorValue = 0;
int Foco=13;
void setup() {
pinMode(Foco,OUTPUT);

resistencia de 50Q o 100 Q


void loopQ {
inferior

sensorValue = ( 5.0 * analogRead(sensorPin) * 100.0) /1024.0;


/* Valores ledos Max=499 en ausencia de luz
Min=166 iluminado completamente
*/

Vout

11 "(sensorValu >= 495)


(1i gitalWrite(Foco,HIGH);
dse
ilgitalWrite(Foco,LOW);
Figura 3.22: Esquema conexin LDR
66

67

3.3.3 Control de Motores DC


I n este proyecto se controlar el giro de un motor de comente
directa (DC).
Para realizar el control de giro se utiliza el circuito integrado
1,293D, el cual posee un Puente H para cumplir con su cometido.

fea

Figura 3.23: Esquema ISIS Proteos Sensor de Luz

vea
Figura 3.25: Diagrama de conexin CIL293D

13.24: Esquema fsico Sensor de luz


68

69

intDerecha-2;
intlzquierda=3;
voidsetupO

voidloopOl
dlg
lUalWnte(Derecha,LOW),

Figura 3.27: Esquema fsico Sensor de luz

SIS

Figura 3.26: Esquema

70

Proteus Sensor de Luz

71

3.3.4 Teclado
En este proyecto se utilizar un teclado 3 X 4, de 12 teclas (09,*,#) para el control de acceso por clave. El esquema del teclado

Archivo tdter Sscn Hciramientas Ayuda


Ctri*R

Verificar/ Compilar

Mostrar la Carpeta de Sketch Ctri*K

se indica a continuacin:

Aoriid? A,'ch;vo,,,
importarLbrtoa...

Figura

3. 28: Esquema Teclado

Figura 3.29: Insertar Librera Keypad.h

Para realizar este programa se utilizar la librera <Keypad.h >,


la cual permite leer los datos de un teclado matricial. Esta librera
hay que descargar desde el sitio http://playground.arduino.cc y
guardarla en la carpeta libraries del IDE de arduino.
Reiniciar el IDE del arduino y la barra de men insertar esta
librera al programa, como se indica en la figura 3.29.

El cdigo para el funcionamiento de la aplicacin es el siguiente:


#include <Keypad.h>
#include <LiquidCrystal.h>
73

72

// initialize the library with me numbers of the interface pins


Serial.begin(9600);

LiquidCrystal lcd(12, 11, 25, 24, 23, 22);

// Establece el nmero de filas y columnas en el LCD:

const byte numFilas = 4;

lcd.begin(16,2);

const byte numColumnas = 3;

for (int fila = 0; fila < numFilas; fila++)

//Matriz que contiene los nmeros del teclado

const char teclas [numFilas] [numColumnas] = {

pinMode(filaPins[fila],INPUT);

{'!', '2', '3' } ,

digitalWrite(flaPins[fila],HIGH);

{'4', '5', '6' } ,


}

{'7', '8', '9' } ,

for (int column = 0; column < numColumnas; column++)

{ '*', 'O', '#' }

{
pinMode(columnaPins[column],OUTPUT);
digitalWrite(columnaPins[column],HIGH);

//Fines de entrada para la Filas y columnas


}

byte filaPins [numFilas] = { 2, 3, 4, 5 };


byte columnaPins [numColumnas] = { 6 , 7 , 8 } ;

.:-.-

lcd.setCursor(0,0);

1'^

lcd.println("Ingrese la Clave");

//Crear el teclado
Keypad keypad = Keypad(makeKeymap (teclas), filaPins,
columnaPins, numFilas, numColumnas);
Stringingreso="";

lcd.setCursor(0, 1);

lcd.prntln("+*");

v ' ' ' ' ' . '

void loop(){

void setupQ
74

75

char key = keypad.getKeyQ;

icd.clear();
. Serial.println(key);
lcd.println(key);

).S|

ingreso += key;

if(key = '*'){
if(ingreso=="1234*"){
Icd.clearQ;
lcd.println("Puerta Abierta");
Figura 3.30: Esquema ISIS Proteus Contro p
<or Teclado

ingreso="";
}
else{
Icd.clearQ;
lcd.println("Clave Incorrecta");
ingreso="";

76

Figura 3.31: Esquema de conexin fsica Contro, Teclado

77

3.4 Transmisin serie, Protocolo de Comunicacin I2C


y Almacenamiento en la memoria EEPROM
3.4.1 Leer Datos desde Puerto Serie

void setup()

La velocidad de comunicacin a travs del puerto serie son: 300,


1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o
115200. Siendo la velocidad estndar para la transmisin de 9600.

{
Serial.begin(9600); /*Inicializa la librera
a una velocidad de 9600*/

Arduino Mega2560 dispone de 4 puertos serie


Serial.begin(speed);

}
inti=0;

Serial 1 .begin(speed);

voidloop(){

Serial2.begin(speed);
S eria!3 .begin(speed);
En el caso de no tener ningn puerto serie disponible en la pe se
puede simular uno con el programa Virtual Serial Porl Driver.

Serial.Print("Pmeba del puerto serie "); // imprime un texto


Senal.println(i); /* imprime el valor de i
y salta a la siguiente lnea*/

VTI Serta! o: Drwer 6.9 by Elttma Softvwrir

Pod acc*i tiit


5$ Virtual Serial Port DHer
Jdl Physcal ports
t Virtual pocts

Cuitoin piirioyl

VSPObjr Efeft**c*i res .tual aerial port wdd .i^y nmnei AXJ likf
soyoi* 9f&fK5^T*se"31^ ~Of-U name1) of>t>' Hvievw., plicfl^*; nrake
$&&& ^-a! KIS^^TS i-Vjrg wh hese porte 8njp(>Grt cudom oo't riar^ie

' COM
* <Q COKC

Rntit:

COM3
MtJ par

COM4

^ Other virtual pots

j-, t*'

nata urs di pon ae doiod

F/gura 3.32: Virtual Serial Port Drver


78

F/gi/ra 3.33: Esquema de conexin puerto serie ISIS Proteus

79

COM2

3.4.2 Protocolo de Comunicacin I2C


El protocolo de comunicacin I2C consta de las siguientes
caractersticas:

o serie
puerco serie
jswsrt serie

Bus de comunicaciones en serie.


Velocidad de lOOKbits por segundo en el modo estndar.

pBeziSQ aerie
poertx

Dos lneas de comunicacin bidireccionales

13O
rto serie

feotei
Rwtsstea ptierto
stelwsl&a puerto
PxKudba purtx>
PxtMdMk poerto
ppKaseilB* srto
| gjAutoswe*

SDA(SignalData)

s*ri*
a.rie
trie
sfeZ-le
sri* 137

SCL (Signal Clock)


Comunicacin Master Slave.
^lS^SfeS..^^ :9?O>

Figuro 3.34: So/ido del Puerto comZ

librera Wire permite comunicar con dispositivos I2C y


Arduino.
Para la lectura de datos desde el sensor al arduino se presenta
el siguiente programa:
#include <Wire.h>
int direccin = 0; //direccin: la localizacin en donde escribir,
desde O a 511 (int)
int pinlectura=l 3;
int direccion_sensor=77;
int temperatura=0;
byte envio=0;

Figura 3.35: Esquema fsico de conexin Puerto serie

80

81

SWR

jj.'SS!!

void setupQ {
Wire.begin();//Inicializa la librera Wire
}
void loopQ {
//sensor de temperatura
Wire.beginTransmission(direccion_sensor);/*Comienzala
transmisin al dispositivo I2C esclavo con la

Q:;|';.;^^:ij!l||.^|
A.SK.

pe :

direccin */
fl:t:F--i'+

envio=0;
Wire.write(envio);/*Escribe datos desde un dispositivo esclavo
en respuesta a una solicitud de un

Figura 3.36: Esquema conexin del sensor con arduino

Maestro*/
Wire.endTransmission();//Finaliza una transmisin a un esclavo
Wire.requestFrom(direccion_sensor,l);/*Solicitabytes de otro
dispositivo, se pone 1 para
pedir al sensor de temperatura que enve
los datos*/
while(Wire.available()==0); //Devuelve el nmero de bytes
disponibles para recuperar
temperatura=Wire.read();
transmitidos

//Lee los byte que fueron


D friuras.!.

Figura 3.37: Esquema de conexin fsica del sensor y arduino

82

83

3.4.3 Transmisin serie del valor de temperatura


utilizando el Protocolo de Comunicacin I2C y
Almacenamiento en la memoria EEPROM

En las lneas de comunicacin se conectan resistencias con una


configuracin pull-up de 10K , con lo que provoca que en el
momentos que no exista comunicacin con los dispositivos de la
red se mantenga la lnea de comunicacin con una tensin de 5
voltios.

En el proyecto se utiliza un sensor de temperatura que permite la


comunicacin con Arduino por medio del protocolo I2C. Para el
almacenamiento de los datos adquiridos se utiliza la memoria
EEPROM de Arduino y adems se realiza la transmisin de los
datos por medio del puerto serial.

En proteus se hizo la simulacin del puerto serial com 3 por


medio del programa Configure Virtual Serial Port Driver, el cual
permite la simulacin de un puerto serie en el caso que la
computadora no disponga de ste.

El sensor de temperatura I2C utilizado es el TC74A5 que tiene


una direccin por defecto de 77 en decimal, sta direccin permite
conectarse por medio del protocolo I2C que posee Arduino mega
(Ver figura 3.38)

TO-220

Para control del almacenamiento de los datos se usa un switch el


cual cuando est desactivado guarda los datos en la memoria
EEPROM, mostrando la temperatura en el LCD y enviando los
datos al puerto serial com3.
Cuando est activado lee los datos de la memoria EEPROM de
arduino, mostrando en el LCD y enviando los datos al puerto
serial com3.
El cdigo para el funcionamiento de la aplicacin es el
siguiente:
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <Wire.h>
// la direccin actual en la EEPROM // (p.e. cual es el
siguiente byte a escribir)
int direccin = 0; //direccin: la localizacin en donde
escribir, desde O a 511 (int)
int pinlectura= 13;

Figura 3.38: Esquema conexin IC TC74

84

int direccion_sensor=77;
85

Wire.requestFrom(direccion_sensor,l);/*Solicita bytes de
otro dispositivo, se pone 1 para pedir al sensor de
temperatura que enve los datos*/

int temperatura=0;
byte envio=0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

while(Wire . available()=0) ;
/*Devuelve el numero de bytes disponibles para recuperar*/

void setupQ {

temperatura=Wire.read();

lcd.begin(16, 2);

//Lee los byte que fueron transmitidos

Serial.begin(9600);//Establece la velocidad de transmisin


Wire.begin();//Inicializa la librera Wire

S erial.print(temperatura) ;
Serial.println("C");

Serial.println("Inicio del programa");


delay(SOO);

\d loopQ {

direccin = direccin + 1 ;
if (direccin == 512) direccin = 0; delay(lOO);

//sensor de temperatura

EEPROM.write(direccion, temperatura);

Wire.beginTransmission(direccion_sensor);
/* Comienza la transmisin al dispositivo I2C esclavo con
la direccin*/

//Guarda los datos ledos


if(digitalRead(pinlectura)!= HIGH ) {
//Comprueba el estado del switch

envio=0;
Wire. write(envio);

Icd.clearQ;

/^Escribe datos desde un dispositivo esclavo en respuesta


a una solicitud de un maestro*/

lcd.println(temperatura,DEC) ;
lcd.print("C");

Wire. endTransmissionQ;
//Finaliza una transmisin a un esclavo
86

87

else{
Icd.clearQ;
lcd.println("Lectura de Datos");
delay(SOO);
lcd.clear();
int valor = EEPROM.read(direccion);
lcd.print(direccion);
lcd.print("\t");
lcd.print(valor, DEC);
Figura 3.39: Esquema conexin en ISIS Prote>>us

Icd.printlnQ;
direccin = direccin + 1;
//incrementa la direccin de memoria
if (direccin = 512)
direccin = 0;
delay(SOO);
}
Icd.displayQ;
delay(SOO);
>

Esquema de conexin fsica de Arduino y TC74A05

88

Bibliografa

>

http://arduino.cc/es/Guide

>

http://fritzing.org

>

Garca Breijo Eduardo. (2008). COMPILADOR C CCS Y


SIMULADOR PROTEUS PARA MICROCONTROLADORES PIC.
MXICO. ALFAOMEGA.

>

Grupo Sabika. (2010). EJERCICIOS DE ARDUINO RESUELTOS,


[en lnea].

90