Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diseno y Proyectos Basicos Arduino S Manzano
Diseno y Proyectos Basicos Arduino S Manzano
DE PROYECTOS
BÁSICOS CON
ARDUINO
Programando Arduino 11
1.1 Entornodel IDEdeArduino 11
1.2 Introducción a la programación 15
1.2.1 Comentarios 18
1.2.2 Bloques 19
1.2.3 Tipos de datos 19
1.2.4 Constantes 19
1.2.5 Variables 20
1.2.6 Operadores aritméticos 20
1.2.7 Operadores 21
1.2.8 Funciones 21
1.2.9 Estructuras de control 22
1.2.9.1 Sentencias condicionales 22
1.2.9.2 Bucle o Estructuras de repetición 24
1.2.9.3 Saliendo de los bucles 26
1.2.10 Siringo cadenas de caracteres 27
1.2.11 Entradas y salidas digitales y analógicas 28
1.3 Librerías 29
1.3.1 Otras Librerías 31
CAPÍTULO II 33
PROTEUS 33
2.1 Introducción 33
2.2 Entorno Gráfico ISIS 33
2.3 Manejo Arduino en Proteus 36
CAPÍTULO III 39 ÍNDICE DE FIGURAS
Proyectos 39
I ir.uuA 1.1: INTERFAZ IDEARDUINO 12
3.1 Proyectos con Leds 39
I K.IIUA 1. 2 VENTANA DE COMPILACIÓN 15
3.1.1-EncenderunLed 39
FIGURA 1. 3: IDEARDUINO 17
3.1.2 Encendido Progresivo y Apagado de Led 42
FIGURA 1. 4: FORMATO DE UNA FUNCIÓN 22
3.1.3 Secuencia de Leds con un pulsador. 44
3.1.4 Cruce de Semáforos 47
FIGURA 2. 1: IDE DE PROTEUS 34
3.1.5 Contador de O a 99 con dos display de 7 segmentos.. 50
FIGURA 2. 2: INTERFAZ DE ISIS PROTEUS 36
3.2 Proyecto con Frecuencias 53 FIGURA 2.3: INTERFAZ ARDUINO MEGA2560 37
3.2.1 Zumbador. 53 FiGURA2. 4: CONEXIÓN DE DISPOSITIVOS CON ARDUINO MEGA2560 37
3.2.2 Variación de Frecuencias 55 FIGURA 2. S:CARGAR CÓDIGO AL ARDUINO 38
3.2.3 Sonidos 57 FIGURA 2. 6: SIMULACIÓN DE PROGRAMA EN ISIS PROTEUS 38
3.3 Proyectos Entradas y Salidas 61
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 CONEXIÓN ISIS PROTEUS ENCENDER UN LED.... 41
3.3.3 Control de Motores DC 69 FIGURAS. 3: ESQUEMA CONEXIÓN FÍSICA PARA ENCENDER EL LED 41
3.3.4Teclado 72 FIGURAS. 4: ESQUEMA DE CONEXIÓN ISIS PROTEUS ENCENDER UN LED.... 43
3.4 Transmisión serie, Protocolo de Comunicación I2C y FIGURAS. 5: ESQUEMA CONEXIÓN FÍSICA PARA ENCENDER EL LED 43
Almacenamiento en la memoria EEPROM 78 FIGURA 3.6: ESQUEMA DE CONEXIÓN DE LA SECUENCIA DE LEDS CON UN PULSADOR 46
FIGURA 3.7: ESQUEMA DE CONEXIÓN FÍSICA SECUENCIA DE LEDS CON UN PULSADOR 46
3.4.1 Leer Datos desde Puerto Serie 78
FIGURA 3. 8: CRUCE EN UNA INTERSECCIÓN 47
3.4.2 Protocolo de Comunicación I2C 81
FIGURA 3.9: ESQUEMA DE CONEXIÓN EN ISIS PROTEUS CRUCE DE SEMÁFORES 49
3.4.3 Transmisión serie del valor de temperatura
FIGURAS. 10: ESQUEMA CONEXIÓN FÍSICA CRUCE SEMÁFOROS 49
utilizando el Protocolo de Comunicación I2C y
FIGURAS. 11: ESQUEMA DE CONEXIÓN CONTADOR DEL O AL 99 52
Almacenamiento en la memoria EEEPROM 84
FIGURAS. 12: ESQUEMA DE CONEXIÓN FÍSICA CONTADOR O AL 99 52
Bibliografía 90 FIGURA 3. 13: ESQUEMA EN ISIS PROTEUS ZUMBADOR 54
FIGURA 3. 14: ESQUEMA Físico ZUMBADOR 54
FIGURA 3.15: ESQUEMA EN ISIS PROTEUS VARIACIÓN DE FECUENCIAS 56
FIGURA 3.16: ESQUEMA Físico VARIACIÓN DE FRECUENCIAS 56
FIGURA 3. 17: ESQUEMA EN ISIS PROTEUS SONIDOS CON LIBRERÍA PILCHES.H.. 60
'
FIGURA 3.18: ESQUEMA Físico SONIDOS CON LIBRERÍA PITCHES.H 61 CAPITULO I
FIGURA 3. 19: ESQUEMA LM 35 62
FIGURA 3. 20: ESQUEMA CONEXIÓN ISIS PROTEUS SENSOR Programando Arduino
TEMPERATURA 65
FIGURA 3. 21: ESQUEMA CONEXIÓN FÍSICA SENSOR TEMPERATURA 65
I . I Entorno del IDE de Arduino
FIGURA 3. 22: ESQUEMA CONEXIÓN LDR 66
FIGURA 3. 23: ESQUEMA ISIS PROTEUS SENSOR DE Luz 68
lil Entorno de Programación Integrado (IDE) de Arduino, es un
FIGURA 3. 24: ESQUEMA FÍSICO SENSOR DE LUZ 68
11)1 i multiplaforma, disponible para descargar directamente para
FIGURA 3. 25: DIAGRAMA DE CONEXIÓN CIL293D 69
Windows, Linux y Mac OS. Es una aplicación gratuita desarrollada
FIGURA 3. 26: ESQUEMA ISIS PROTEUS SENSOR DE Luz 70
FIGURA 3. 27: ESQUEMA FÍSICO SENSOR DE LUZ 71
en Java y deriva del IDE de Processing y Wiring, sencilla de
FIGURA 3. 28: ESQUEMA TECLADO 72 instalar y a la vez muy fácil de utilizar.
FIGURA 3. 29: INSERTAR LIBRERÍA KEYPAD . H 73
I la sido diseñado teniendo en mente que sus usuarios no son
FIGURA 3. 30: ESQUEMA ISIS PROTEUS CONTROL POR TECLADO.... 77
expertos desarrolladores y sean capaces de familiarizarse con él
FIGURA 3. 31: ESQUEMA DE CONEXIÓN FÍSICA CONTROL TECLADO 77
FIGURA 3. 32: VIRTUAL SERIAL PORT DRIVER 78 de una manera intuitiva.
FIGURA 3.33: ESQUEMA DE CONEXIÓN PUERTO SERIE ISIS PROTEUS 79
Incluye un editor de código que resalta la sintaxis, esto es
FIGURA 3. 34: SALIDA DEL PUERTO COM2 80
resaltando las palabras claves y funciones de otro color, además
FIGURA 3. 35: ESQUEMA FÍSICO DE CONEXIÓN PUERTO SERIE 80
FIGURAS. 36: ESQUEMA CONEXIÓN DEL SENSOR CON ARDUINO 83
permite ver si están bien emparejadas las llaves de las funciones
FIGURAS. 37: ESQUEMA DE CONEXIÓN FÍSICA DEL SENSOR Y ARDUINO 83
de condición y ciclos de repetición.
FIGURAS. 38: ESQUEMA CONEXIÓN ICTC74 84
Además el entorno incluye todo lo necesario para compilar gracias
FIGURA 3. 39: ESQUEMA CONEXIÓN EN ISIS PROTEUS 89
FIGURA 3. 40: ESQUEMA DE CONEXIÓN FÍSICA DE ARDUINO Y
;il compilador (avr-gcc), que trasforma el código legible por el
TC74A05 89 ser humano a instrucciones legibles para la máquina (llamados
lleneros objeto), el proceso de compilación es transparente para
el usuario. Todo lo que tiene que hacer es pulsar un botón. Si
existen errores en el código de programación, el compilador
mostrará un mensaje de error en la parte inferior del IDE y
resaltará la línea de código que parece tener el problema.
10 11
El código que se desarrolla es C/C++, aunque las funciones que Kciil
gobiernan el programa son setupQ y loop().
Copy for Discourse : Copia el código con un
Los archivos se guardan con la extensión .ino. formato para incluirlo en foro.
El IDE de arduino consta de cinco menús: File, Edit, Sketch, Copy as HTML: Copia el código con un
formato HTML para incrustarlo en una página
Tools, Help y una barra de herramientas que permite verificar el
Web.
proceso de carga, creación, apertura y guardado de programas,
además de la monitorización serie (ver Figura 1.1). Sketch
Guarda el programa.
sentencias;
Curación
En donde setupQ es la parte encargada de recoger la configu..^*^*
y loopQ es la que contienen el programa que se ejecutará
cíclicamente.
Los comentarios no son considerados como líneas de código en • Hyte. Almacena 8 bits.
el programa, sirve para documentar ciertos aspectos importantes.
• Int. Almacena 16 bits.
Existen 2 tipos de comentarios:
• I ,ong. Almacena 32 bits.
El comentario de bloque, abarca todas las líneas contenidas entre
• Float. Almacenado 32 bits.
los símbolos /* y */, Ejemplo:
• Arrays Alamecena varios valores de un mismo tipo, el
/* Hola aquí se comenta acerca del programa,
primer valor se encuentra en índice O
y del proceso que realiza cada línea.
1.2.4 Constantes
*/
Línea de comentario: con los símbolos // se comenta una línea. Son variables a las que no se puede modificar el valor. Ejemplos:
Ejemplo: true/false
// Comentario para una línea. HIGH/LOW
INPUT/OUTPUT
18 19
1.2.5 Variables Ejemplos:
• Operadores compuestos:
void loop() {
• incremento/decremento de variables: ++; -- incremento/
for (int i=0; i<20;) // variable i puede utilizarse solo en el bucle decremento el valor de la variable. ,
Sentencia if case 2:
22 23
1.2.9.2 Bucle o Estructuras de repetición ) l . i « ondu-ión vu el ve a ser comprobada de nuevo. Si la condición
i". l.il;;:i, el bucle termina.
Una estructura de repetición indica que se va a realizar varias
veces un mismo proceso existiendo varias maneras de representar l'"i i lemplo:
una estructura de repetición dependiendo mucho de 3 parámetros
l»i ( M I ! i ();i<20;i++) {
principales como son: el iniciar un contador, tener un número
tope de repeticiones de proceso, parámetro modificador de uno lentencias:
de los parámetros anteriores los mismos que deberán actuar como
elementos para comparación o condición.
Ilude wliile
Bucle for
La declaración for es usada para repetir un bloque encerrado I I l u u - l r while ejecutará las sentencias de su bloque mientras
entre llaves. Un incremento de un contador, es usado • pie l.i condición inicial se cumpla.
normalmente para aumentar y terminar con el bucle. La estructura \I ii k-( condición ){
for es muy útil para la mayoría de las operaciones repetitivas, y
habitualmente se usa para operaciones con vectores, para operar // sentencias;
sobre conjuntos de datos/pines.
//sentencias; Huele do
24 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 métodos
//sentencias
•return // sale de la función niihOÍO Devuelve la primera posición del carácter que
se pasa como argumento
•gotolabel //salta a la etiqueta label lastlndexOfO Devuelve la última posición del carácter que le
pasamos
for(inti=0;i<10;i++)
IcnglhO Longitud de la cadena
{ i'cplacc() Reemplaza
slartsWilhO Comprueba si empieza por
if(bsalto>0)
siibslringO Devuelve un fragmento de la cadena original
continué; // Se salta el código del resto de la iteración ltiLowcrCase() Convierte a minúsculas
!ollppcrCase() Convierte a mayúsculas
else !iiin() Elimina los espacios iniciales y finales
break; //sale del bucle
27
Funciones de tiempo y matemáticas
1.2.11 Entradas y salidas digitales y analógicas ni») Permite realiza una pausa en el programa,
especificando en tiempo en milisegundo.
Existe un error en esta función, ya que cuando
se ejecuta esta instancia produce que el
Fundón Detalle programa se detenga (excepto las
pinMode(pin, mode) Configurar un pin para comportarse como interrupciones) con lo cual no lee sensores, ni
entrada (INPUT) o salida(OUTPUT). !?/£>' •.•'ii'> v'j- realiza cálculos en el tiempo especificado.
Esta función se utiliza dentro de setup(), por Para tiempos mayores a decenas de
defecto en arduino todos los pines están como milisegundos no se recomienda esta función.
salidas. mlllliO0 Retorna un valor en milisegundos que Arduino
se encuentra ejecutando el programa.
Ejemplo Retorna el mínimo y el máximo entre sus
i.y), max(x,y)
pinMode(pin, OUTPUT); parámetros.
digitalRead(pin) Devuelve un valor en alto (HIGH) o en bajo
(LOW), de un ping digital determinado.
Ejemplo:
= digitalRead(Pin); Funciones de generación aleatoria
nl(jirrd) Determina un valor de inicio como el punto de
digitalWrite(pin, valué) Introduce un nivel alto (HIGH) o bajo (LOW) partida para la función randomQ.
en el pin digital especificado. u» ), i:iiidom(min, max) Entrega un valor aleatorio entre el rango
Ejemplo: indicado.
digitalWrite(pin,HIGH);
analogRead(pin) Devuelve un valor desde el pin analógic
señalado con una resolución de 10 bits. Esta
función solo funciona en los pines analógicos Puerto serie
El valor resultante es un entero de O a 1023 nl.bi'H¡n(rate) Permite el uso del puerto serie y determina la
Los pines analógicos, a diferencia de los velocidad de transmisión.
digitales no necesitan declararse previamente iil.println(data) Permite enviar datos al puerto serie
como INPUT o OUTPUT. ul.readQ Lee los datos del puerto serie.
Ejemplo:
= digitalRead(Pin); iil.availableO Devuelve el número de caracteres presentes en
Ésta función solo puede ser usada en pines el puerto serie.
analogWrite(pin, valué)
analógico. Escribe un dato pseudo-analógico
utilizando PWM, el dato está en el rango O - l.:i Librerías
255, el O genera O V y el 255 genera 5 V en la
salida del pin especificado. I 1 1 1 , 1 1 1 hrcría no es más que un conjunto de códigos empaquetados
Ejemplo:
analogWrite(pin, v); v .1 los c|iie podemos llamar desde nuestro programa, facilitando
t i desarrollo del programa, puesto que aprovecha un código ya
ixiltente.
29
28
Para usar se tiene que importar a nuestro código con la palabra I I I Olías Librerías
reservada niiiiiiciilion (nctworking and protocols):
#include <,...> engcr Procesa mensajes de texto provenientes del
PC.
Si se requiere instalar una librería hay que descargarla y copiarla SoflScriil Versión mejorada de SoftwareSerial.
en la carpeta "libraries" del directorio, donde se guardan nuestros IVIre Permite la comunicación con dispositivos de
sketches de arduino. Dallas (fabricante de dispositivos electrónicos)
que usan este protocolo.
Librerías básicas
vcyboiird Lee caracteres desde un teclado PS2.
Librerías Detalles
EEPROM Permite leer y escribir en almacenamiento ilc lyicssiigc System Enviar mensajes entre arduino y el PC.
permanente llIJMobllc Envía mensajes de texto y email desde el
Ethernet Permite conectar a internet. móvil (vía comandos AT).
Firmata Comunicaciones usando un protocolo iliilim Servidor web para usar con arduino Ethernet.
concreto. MI) Envía señales del protocolo XI 0 usando los
LiquidCrystal Permite el manejo de LCD. cables eléctricos domésticos.
SD Lectura y escritura en tarjetas SD. XHrr Comunicaciones XBees en modo API.
Servo Control de Servos. K'iinlrol Control remoto de otros Arduinos por medio
de comunicaciones serie
SPI Comunicaciones con dispositivos usando SPI.
SoftwareSerial Permite comunicaciones serie por otros pines.
Control de motores paso a paso. Srimlng:
Stepper
comunicaciones I2C ( ii|iucilivc Sensing Permite usar dos entradas como sensors
Wire
capacitivos.
Dvbouncc Permite usar anti-rebote en entradas
l'uiilullíis \s
Impnrn-tl LCD library Mejora la librería LCD library
33
32
En este libro se explicará de manera rápida sobre la utilización I,- VKINTANA DE VISTA PREVIA: vista previa del circuito o
de esta herramienta, así como la colocación de componentes en • li los elementos del diseño.
la hoja de trabajo. i, SULKCTOR DE OBJETOS: en esta ventana aparecerán
Para comenzar se debe abrir el programa Proteus desde el icono l« >:; componentes y otros elementos disponibles, dependiendo
ISIS, presentándose una ventana con un entorno de trabajo como < l e | modo seleccionado, y desde allí podremos elegirlos para
el que se indica en figura 2.1, conformado por varias barras de colocarlos en el diseño.
herramientas. 1. lt( >KI)E DE HOJA: la línea de color azul determina el límite
de la hoja de trabajo; debemos colocar el circuito dentro de
34 35
2.3 Manejo Arduino en Proteus
p.[» f t _
líirtft, t „ -fe»* i^^Mt
Para la simulación abrimos el ISIS de Proteus, el cual muestra s«i».(feu« ««'¿i,;?
una pantalla como la que se indica en la figura 2.2
1 ::J : i.
"
i UJUJU.1..1
M I Encender un Led
intpinled=13;
pmMode(pinled,OUTPUT);
»•>, *«4íi« Wi
<• Í
t
1
/•/«•«/i 3. 2: Esquema de conexión ISIS Proteus encender un Led
1
'I
J
„' , =,{33603;
i
intledPin=9;
void setup () {
pinMode(ledPin,OUTPUT);
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 conexión física para encender el led
43
3.1.3 Secuencia de Leds con un pulsador dlgltalWrlte (leds[n], HIGH);
El programa enciende los leds de manera secuencial, como si 1 ' i m i - ( i i ;illo el l'ucrto en la posición n
se tratara de las luces del auto fantástico, siempre que se
• I. l , i \ ( i i u n p o ) ; //tiempo de pausa
presione el pulsador.
inttiempo-20;
int n=0;
ni I . n • ();n — ) {
void setupQ {//comienza la configuración
i He (lcds[n], HIGH);
for (n=0;n<4;n++) {// Determina el vector como salida.
} . I
for (n=0;n<4;n++) {
44 45
I I < Hice de Semáforos
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++)
pinMode(x[n],OUTPUT);
con un pulsador
46 47
I ii « - I pioicus insertamos las librerías de arduino mega2560 y el
void loop() ( M i l u - hj'JUs.
{
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 conexión en ISIS Proteus Cruce de Semáfores
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);
{ 1, 1, 1, 1,0, 1, 1, 0} II 9
\,l.\r
M'lil
Figura 3.11: Esquema de conexión Contador del O al 99
("Km! i ();i<200;i++){
IIM I i
• I. \,\\( /.S);
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 Físico Zumbador
54 55
t M Sonidos
ARDÍ
'
i n .u'ion de sonidos con nota musicales por medio de la librería
( l i l i Ill'K.ll
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
ARÜt
Figura 3.18: Esquema Físico Sonidos con librería pitches.h
\, \s Entradas y Salidas
IM)"C = ISOOmV
Figura 3.17: Esquema en ISIS Proteos Sonidos
con librería pitches.h 40°C = -400mV
60 61
TO-220 \r analógico de tensión.
Plástic Pacfcage*
\ i, i Id)', icad = lectura analógica de tensión.
LM:
I "• l o 210, valor binario de 10 dígitos binarios.
i 561
#include <LiquidCrystal.h>
int sensorValue = 0;
void setup() {
lcd.begin(16,2);
/ i\inia 3.20: Esquema conexión ISIS Proteus Sensor Temperatura
}
void loop() {
sensorValue = ( 5.0 * analogRead(sensorPin) * 100.0) /
1024.0;
lcd.println(sensorValue);
delay(3000);
64 65
I iste sensor está configurado para funcionar cuando no exista la
3.3.2 Control de luz con AC presencia de luz, el cual envía una señal al micro y este prende
una lámpara de HOv.
El programa consiste en utilizar un sensor LDR para controlar
l ; ,l sensor está conectado a la entrada analógica Al de arduino.
un foco de HOv.
I ,;i salida se produce en el ping 13, salida digital, con la ayuda de
El LDR es un componente electrónico cuya resistencia disminuye un transistor para amplificar la señal y disparar un relay que
con el aumento de intensidad de luz incidente. funciona a 5v, el cual activa el paso de la corriente ac para
encender la lámpara.
Al utilizar el LDR como resistencia inferior del divisor de tensión, nil sensorPin = Al;
se obtiene la tensión máxima cuando se tenga el LDR en plena
oscuridad, ya que opondrá el máximo de su resistencia al paso int sensorValue = 0;
de la corriente derivándose esta por Vout. Si se utiliza como int Foco=13;
resistencia superior, el resultado será el inverso, la tensión será void setup() {
máxima cuando esté completamente iluminado, ya que se
pinMode(Foco,OUTPUT);
comportará prácticamente como un cortocircuito, con una
resistencia de 50Q o 100 Q
void loopQ {
inferior
sensorValue = ( 5.0 * analogRead(sensorPin) * 100.0) /1024.0;
/* Valores leídos Max=499 en ausencia de luz
Min=166 iluminado completamente
Vout */
11 "(sensorValué >= 495)
(1i gitalWrite(Foco,HIGH);
dse
il¡gitalWrite(Foco,LOW);
fea
vea
voidloopOl
lUalWnte(Derecha,LOW),
dlg
Reiniciar el IDE del arduino y la barra de menú insertar esta #include <Keypad.h>
librería al programa, como se indica en la figura 3.29. #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 número de filas y columnas en el LCD:
const byte numFilas = 4;
lcd.begin(16,2);
const byte numColumnas = 3;
//Matriz que contiene los números del teclado for (int fila = 0; fila < numFilas; fila++)
lcd.setCursor(0, 1); ;
//Crear el teclado
Keypad keypad = Keypad(makeKeymap (teclas), filaPins, lcd.príntln("+*"); :
columnaPins, numFilas, numColumnas);
Stringingreso="";
} . v ' • ' • ' •••••• • ' ' . '
void loop(){
void setupQ
74 75
char key = keypad.getKeyQ;
icd.clear();
. Serial.println(key);
lcd.println(key);
í).íSí|
ingreso += key; 9
if(key = '*'){
if(ingreso=="1234*"){
Icd.clearQ;
lcd.println("Puerta Abierta");
Figura 3.30: Esquema ISIS Proteus Contro p
ingreso=""; <or Teclado
}
else{
Icd.clearQ;
lcd.println("Clave Incorrecta");
ingreso="";
j-, ít*' ,
nata »urs di pon» ae doiod
#include <Wire.h>
int dirección = 0; //dirección: la localización 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 físico de conexión Puerto serie
81
80
SWR
jj.'¿SSÜÍÍÍ!Í!
void setupQ {
Wire.begin();//Inicializa la librería Wire
}
void loopQ {
//sensor de temperatura
Wire.beginTransmission(direccion_sensor);/*Comienzala
transmisión al dispositivo I2C esclavo con la Q:¡;|';.;^^:ij!l¡||.^|
A.SK.
dirección */ ípe :«
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 conexión del sensor con arduino
Maestro*/
Wire.endTransmission();//Finaliza una transmisión a un esclavo
Wire.requestFrom(direccion_sensor,l);/*Solicitabytes de otro
dispositivo, se pone 1 para
pedir al sensor de temperatura que envíe
los datos*/
while(Wire.available()==0); //Devuelve el número de bytes
disponibles para recuperar
temperatura=Wire.read(); //Lee los byte que fueron
transmitidos
D friuras.»!.
83
82
En las líneas de comunicación se conectan resistencias con una
3.4.3 Transmisión serie del valor de temperatura configuración pull-up de 10KÚ , con lo que provoca que en el
utilizando el Protocolo de Comunicación I2C y momentos que no exista comunicación con los dispositivos de la
Almacenamiento en la memoria EEPROM red se mantenga la línea de comunicación con una tensión de 5
voltios.
En el proyecto se utiliza un sensor de temperatura que permite la
comunicación con Arduino por medio del protocolo I2C. Para el En proteus se hizo la simulación del puerto serial com 3 por
medio del programa Configure Virtual Serial Port Driver, el cual
almacenamiento de los datos adquiridos se utiliza la memoria permite la simulación de un puerto serie en el caso que la
EEPROM de Arduino y además se realiza la transmisión de los computadora no disponga de éste.
datos por medio del puerto serial. Para control del almacenamiento de los datos se usa un switch el
El sensor de temperatura I2C utilizado es el TC74A5 que tiene cual cuando está desactivado guarda los datos en la memoria
EEPROM, mostrando la temperatura en el LCD y enviando los
una dirección por defecto de 77 en decimal, ésta dirección permite datos al puerto serial com3.
conectarse por medio del protocolo I2C que posee Arduino mega
(Ver figura 3.38) Cuando está activado lee los datos de la memoria EEPROM de
arduino, mostrando en el LCD y enviando los datos al puerto
serial com3.
84 85
Wire.requestFrom(direccion_sensor,l);/*Solicita bytes de
int temperatura=0; otro dispositivo, se pone 1 para pedir al sensor de
byte envio=0; temperatura que envíe los datos*/
while(Wire . available()=0) ;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
/*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 transmisión
S erial.print(temperatura) ;
Wire.begin();//Inicializa la librería Wire
Serial.println("C");
Serial.println("Inicio del programa");
delay(SOO);
\d loopQ {
dirección = dirección + 1 ;
if (dirección == 512) dirección = 0; delay(lOO);
//sensor de temperatura EEPROM.write(direccion, temperatura);
Wire.beginTransmission(direccion_sensor);
//Guarda los datos leídos
/* Comienza la transmisión al dispositivo I2C esclavo con
if(digitalRead(pinlectura)!= HIGH ) {
la dirección*/
//Comprueba el estado del switch
envio=0;
Wire. write(envio); Icd.clearQ;
/^Escribe datos desde un dispositivo esclavo en respuesta lcd.println(temperatura,DEC) ;
a una solicitud de un maestro*/
lcd.print("C");
Wire. endTransmissionQ;
delay(SOO);
lcd.clear();
int valor = EEPROM.read(direccion);
lcd.print(direccion);
lcd.print("\t");
lcd.print(valor, DEC);
Figura 3.39: Esquema conexión en ISIS Prote>>us
Icd.printlnQ;
dirección = dirección + 1;
//incrementa la dirección de memoria
if (dirección = 512)
dirección = 0;
delay(SOO);
}
Icd.displayQ;
delay(SOO);
> http://arduino.cc/es/Guide
> http://fritzing.org
90