Documentos de Académico
Documentos de Profesional
Documentos de Cultura
L IS T A D O D E P R O Y E C T O 26 (c o n tin ú a )
Para probar el detector de mentiras, necesita
poder probarlo con alguien, ya que necesitará una
int gsr = analogRead(sensorPin); mano libre para ajustar el mando.
int pot = analogRead(potPin);
Primero, haga que la persona coloque dos dedos
if (gsr > pot + band)
adyacentes encima de las chinchetas metálicas. A
{
setColor(red);
continuación, gire el mando del potenciómetro hasta
beep(); que el LED se vuelva verde.
} Ahora puede interrogar a su víctima. Si el LED
else if (gsr < pot - band) cambia a rojo o azul, debe ajustar de nuevo el mando
{ hasta que cambie de nuevo a verde y luego continuar
setColor(blue);
el interrogatorio.
}
else
{
setColor(green); Proyecto 27
} Cerradura m agnética
} Este proyecto (Figura 9-4) se basa en el Proyecto 10,
pero lo amplía para que cuando se introduzca el có
digo correcto, encienda un LED verde, además de
void setColor(long rgb)
activar un pequeño solenoide. El sketch también se
{
int red = rgb » 16; ha mejorado para que el código secreto pueda ser
int green = (rgb » 8) & OxFF; cambiado sin tener que modificar e instalar una
int blue = rgb & OxFF; nueva secuencia de comandos. El código secreto se
analogWrite(redPin, 255 - red); almacena en la memoria EEPROM , así que si se
analogWrite(greenPin, 255 - green);
desconecta de la alimentación, éste no se perderá.
analogWrite(bluePin, 255 - blue);
>
COMPONENTES Y EQUIPO
void beep()
{ Descripción Apéndice
// 5 Khz para l/5th de segundo
Placa Arduino UNO o
for (int i = 0; i < 1000; i++)
Duemilanove o clon 1
{
digitalWrite(buzzerPin, HIGH); DI LED rojo 5 mm 23
delayMicroseconds(100); D2 LED verde 5 mm 25
digitalWrite(buzzerPin, LOW);
R1-3 Resistencia 270 O, 0,5 W 6
delayMicroseconds(100);
K1 Teclado m atricial 4 x 3 54
}
} Tira pines de 2,5 mm de paso 55
TI BC548 40
Solenoide 5V (< 100 mA) 66
D3 1N4004 38
C apítulo 9 ■ P royectos varios 1 49
0GC000 o o c c o o c c o o c c o c c o o c c c
o c o o o o g g g g g ig tg g o c c c o c g c g g
ocococccccoocococcoccoooco
oocooo oooócooooo ocooooooco
OOO O O OOO O O O OO O O OOO O O 5V
OOOOO O O O O O O OOOO OOOOO GND
Al igual que los relés, el solenoide es una carga más potente, sería mejor utilizar un transistor
inductiva y, por tanto, susceptible de generar una BD139.
fuerza contraelectrom otriz. que es contra lo que Sería aconsejable que el solenoide se pudiese co
protege el diodo D3. El solenoide es controlado por nectar directamente a la placa de pruebas; si no es
TI . así que asegúrese de seleccionar uno que no con así. tendrá que añadirle unos cables para conectarlo.
suma más de 100 mA, que es la com ente máxima
del colector del transistor. Software
Estamos utilizando un solenoide de muy baja po El software de este proyecto es, como era de espe
tencia, y esto no sería suficiente para mantener a los rar, similar al del Proyecto 10 (véase el Listado del
intrusos fuera de nuestro cuarto. Si va a utilizar uno Proyecto 27).
L IS T A D O D E L P R O Y E C T O 27
#include <Keypad.h>
#include <EEPR0M.h>
00
r-
r * v o v # ' }
};
byte rowPins[rows] = {2, 7, 6, 4};
byte colPinsfcols] = {3, 1, 5};
(continúa)
C apítulo 9 ■ Proyectos varios 151
int redPin = 9;
int greenPin = 8;
int solenoidPin = 10;
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
loadCode();
flash();
updateOutputs();
}
void loop()
{
char key = keypad.getKey();
if (key — && ! locked)
{
// desbloqueado y pulsado *, así que cambia el código
position = 0;
getNewCode();
updateOutputs();
}
if (key == ’#')
{
locked = true;
position = 0;
updateOutputs();
}
if (key == secretCode[position])
{
position ++;
}
if (position == 4)
{
locked = false;
updateOutputs();
}
delay(lOO);
void updateOutputs()
{
if (locked)
{
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
digitalWrite(solenoidPin, HIGH);
}
else
(continúa)
152 30 Proyectos con A rd uino
{
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
digitalWrite(solenoidPin, LO W);
}
void getNewCode()
{
flash();
for (int i = 0; i < 4; i++ )
{
char key;
key = keypad.getKey();
while (key == 0)
{
key = keypad.getKey();
}
flash();
secretCode[i ] = key;
}
saveCode();
flash();flash();
void loadCode()
{
if (EEPROM.read(0) == 1)
{
secretCode[0] = EEPROM.read(1);
secretCode[1] = EEPROM.read(2);
secretCode [2 ] = EEPROM-.read (3);
secretCode[3] = EEPROM.read(4);
}
>
void saveCode()
{
EEPROM.write(1, secretCode[0]);
EEPROM.write(2, secretCode[1]);
EEPROM.write(3, secretCode[2]);
EEPROM.write(4, secretCode[3]);
EEPROM.write(0, 1);
>
void flash()
{
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, HIGH);
delay(500);
digitalWrite(redPin, L O W );
digitalWrite(greenPin, LOW);
}
Capítulo 9 ■ Proyectos varios 153
Como ahora podemos cambiar el código secreto, Lamentablemente, si olvida su código secreto, en
hemos cambiado la función loop para que si se pulsa cender y apagar la alimentación del proyecto no lo
la tecla * mientras la cerradura está desbloqueada, reiniciará a 1234. En su lugar, tendrá que convertir en
las siguientes cuatro teclas pulsadas se conviertan en comentario (//) la línea:
el nuevo código.
Puesto que cada carácter tiene exactamente un loadCode();
byte de longitud, el código se puede almacenar di
rectamente en la memoria EEPROM. Utilizamos el de la función setup, para que aparezca como se
primer byte de la EEPROM para indicar si se ha fi muestra aquí:
jado el código. Si no se ha definido, el código por
defecto será 1234. Una vez que se ha configurado el // loadCode();
código, al primer byte de la EEPROM se le dará el
valor de 1. Ahora, reinstale el sketch y el código secreto vol
verá a ser 1234. Recuerde cambiar de nuevo su des
Pongamos todo junto pués de ajustar el código a algo que pueda recordar.
Cargue el esquema terminado del Proyecto 27 desde
su Arduino Sketchbook y descárguelo en su placa Proyecto 28
(véase el Capítulo 1).
Podemos comprobar que todo funciona conec Mando a distancia por infra
tando la alimentación e introduciendo el código rrojos
1234, en cuyo momento el LED verde debe encen Este proyecto (véase la Figura 9-7) permite controlar
derse y liberarse el solenoide. Podemos cambiar el directamente desde el ordenador cualquier aparato del
código a uno no tan predecible pulsando la tecla * y, hogar que se maneje con un mando a distancia por in
a continuación, introduciendo cuatro dígitos para el frarrojos. Con él, se puede grabar un mensaje de infra
nuevo código. La cerradura se mantendrá abierta rrojos desde algún mando a distancia existente y luego
hasta que pulsemos la tecla #. reproducirlo desde el ordenador.
i k)9 8 / o 5 4 3
1 1 D ig ital
5 ¿
a S a
S ° aS a
S *
5 ;> ■- — -
F.r0 0 d u in o Vr » r#fnin ■ a va n n n * sil
ü * IIM ffMft'R aa8aitk**aKffR«Hn«A*-‘
X28922
m « ■ t f i ií « i i n « n ( • ii i> ii n m i i) i! H n 4,
iSSm I * ■ ii R *1« U H tt (I n i*« n ir n « m« n r a « i
' >J O T H W TI»»
liiiifiitifiiCfrfrrriidiiiri
■U i i t t M M i t l | i * r r t r > r i i l « H l i
• t ■ t • ■ i i i i t i i i r rr i t r i i i i > r r,
— • •••
Nota del revisor: Puede apreciarse que no hay ninguna contradicción con el esquema de la Figura 9.8, pues aunque en
éste la resistencia R l va conectada al pin3 y aquí se ve conectada a masa, al estar en serie RJ y el LED, da igual en qué
orden se conecten, siempre que la pata más larga del LED (ánodo o +) quede conectada al positivo (D3).