Académique Documents
Professionnel Documents
Culture Documents
DE PROYECTOS
BSICOS CON
ARDUINO
INTRODUCCIN
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
11
15
1.2.1 Comentarios
18
1.2.2 Bloques
19
19
19
20
20
21
1.2.8 Funciones
21
22
22
24
26
27
28
1.3 Libreras
1.3.1 Otras Libreras
29
31
CAPTULO II
33
PROTEUS
2.1 Introduccin
33
33
33
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
44
53
3.2.1 Zumbador.
3.2.2 Variacin de Frecuencias
NDICE DE FIGURAS
I ir.uuA 1.1: INTERFAZ IDEARDUINO
12
15
FIGURA 1. 3: IDEARDUINO
17
22
34
36
37
53
55
37
38
3.2.3 Sonidos
3.3 Proyectos Entradas y Salidas
57
61
38
61
40
66
69
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
43
46
47
84
90
49
52
52
54
54
56
56
'
61
62
CONEXIN
ISIS
Programando Arduino
PROTEUS SENSOR
TEMPERATURA
65
CONEXIN
CONEXIN
ISIS
FSICA
SENSOR TEMPERATURA 65
LDR
66
FSICO
SENSOR
68
DE LUZ
68
69
70
FSICO
TECLADO
SENSOR DE LUZ
71
72
73
FSICA
CONTROL
TECLADO 77
78
79
80
80
83
83
CAPITULO I
EN ISIS
DE CONEXIN
TC74A05
FSICA
84
PROTEUS
89
DE ARDUINO Y
89
10
Kciil
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
13
Done compl
C;\Uaers\Sanciago\lppData\Locil\lip\bttild3i38BlJ21441lifli?l.^
\lncende r_Led.cpp,h
Binary sketch size: 1,632
fof a
byte Miiac)
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
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
, sino existe
17
1.2.2 Hinques
I'ai a agrupar un conjunto lneas se utiliza los smbolos
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,
1.2.4 Constantes
*/
Ejemplo:
true/false
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 compuestos:
incremento/decremento de variables: ++; -- incremento/
decremento el valor de la variable.
,
1.2.8 Funciones
: e de d rue ion
inf
ilie
retum
pt,s' U fjrsc.ctr.
Sentencia switch
I >( -| >ci id icndo del valor de una variable ej ecutar un cdigo distinto
:\h (var) {
break;
Sentencia if
case 2:
// Ejecuta si var es 2
if (condicin)
break;
default:
// si nada concuerda, default
// cdigo si se cumple
// default es opcional
22
23
lentencias:
Kt ali/;ir 20 veces
Bucle for
Ilude wliile
\I ii k-( condicin ){
// sentencias;
//sentencias;
Huele do
24
25
do
{
//sentencias
Funcin
} while (condicin);
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
niihOO
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()
27
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)
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
I I I Olas Libreras
niiiiiiciilion (nctworking and protocols):
#include <,...>
engcr
SoflScriil
IVIre
vcyboiird
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
Libreras
EEPROM
Ethernet
Firmata
iliilim
MI)
XHrr
K'iinlrol
Srimlng:
( ii|iucilivc Sensing
Dvbouncc
l'uiilullis \s
Impnrn-tl LCD library
(!LCD
30
LedControl
LedDisplay
CAPITULO II
PROTEOS
.'.I Introduccin
Motores y PWM:
TLC5940
DateTime
Meto
MsTimerl
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
33
la hoja de trabajo.
34
35
p.[
f t
::J : i.
"
i UJUJU.1..1
36
37
CAPTULO lll
Proyectos
I, I l'roycctos con Leds
M I Encender un Led
QXEQIDD ; "
i .;<*
delay(5000);
El programa completo deber quedar como se indica en la
Figura 3.1
C; fi
>, *4i Wi
<
t
1
1
'I
J
' , =,{33603;
i
41
Tcjf^J.;-:
"r^?"-
voidloopQI
for(inti=0;i<255;i++){
analogWrite(ledPin,i);
delay(lOO);
}
for(inti=255;i>0;i){
analogWrite(ledPin,i);
i
delay(lOO);
43
! I , i v ( l i n i i p o ) ;
intpulsador=9;
inttiempo-20;
int n=0;
ni I . n ();n ) {
i He (lcds[n], HIGH);
.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 {
>
45
46
47
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);
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);
48
49
I..i un x l
0; xl < 7;xl++) {
|.inMKlc(displ[xl], OUTPUT);
'->
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
{ 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
'
\,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
("Km! i ();i<200;i++){
IIM I i
I. \,\\( /.S);
52
53
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);
55
t M Sonidos
ARD
'
( l i l i Ill'K.ll
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);
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);
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
\, \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
LM:
i 561
GN0
U %y<
1D
l'IN
B"BHfc
,J -"
too
1
1
/
111
analogRead(pin);
i1
1 't'"*
li
14
1'
62
Nombre y funcin
vss
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
En donde:
SMBOLO
LED+
IED~
63
}
void loop() {
sensorValue = ( 5.0 * analogRead(sensorPin) * 100.0) /
1024.0;
lcd.println(sensorValue);
delay(3000);
64
65
Vout
67
fea
vea
Figura 3.25: Diagrama de conexin CIL293D
69
intDerecha-2;
intlzquierda=3;
voidsetupO
voidloopOl
dlg
lUalWnte(Derecha,LOW),
SIS
70
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
Verificar/ Compilar
se indica a continuacin:
Aoriid? A,'ch;vo,,,
importarLbrtoa...
Figura
72
lcd.begin(16,2);
pinMode(filaPins[fila],INPUT);
digitalWrite(flaPins[fila],HIGH);
{
pinMode(columnaPins[column],OUTPUT);
digitalWrite(columnaPins[column],HIGH);
.:-.-
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("+*");
void loop(){
void setupQ
74
75
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
77
void setup()
{
Serial.begin(9600); /*Inicializa la librera
a una velocidad de 9600*/
}
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.
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
j-, t*'
79
COM2
o serie
puerco serie
jswsrt serie
pBeziSQ aerie
poertx
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
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
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
82
83
TO-220
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);
S erial.print(temperatura) ;
Serial.println("C");
\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*/
envio=0;
Wire. write(envio);
Icd.clearQ;
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);
>
88
Bibliografa
>
http://arduino.cc/es/Guide
>
http://fritzing.org
>
>
90