Está en la página 1de 6

148 30 Proyectos con A rd u in o

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

Figura 9 -4 Proyecto 27. Cerradura magnética.

Cuando esté alimentado, el solenoide atraerá Hardware


fuertemente la pieza metálica del centro, colocándola El esquema electrónico (véase la Figura 9-5) y el di­
en su sitio. Cuando se quita la alimentación, ésta seño de la placa de pruebas (véase la Figura 9-6) son
vuelve a su sitio libremente. prácticamente los mismos que los del Proyecto 10,
pero con algunos componentes adicionales.

Figura 9-5 Esquema electrónico del Proyecto 27.


150 30 Proyectos con A rd uino

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

Diseño del circuito del Proyecto 27 sobre la placa de pruebas.

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>

char* secretCode = "1234";


int position = 0;
boolean locked = true;

const byte rows = 4;


const byte cois = 3;
char keys[rows][cois] = {
{'1V2 V3'},
{'4','5','6'},
*-r-'

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

LISTADO DE PROYECTO 27 (continúa)

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cois);

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

LISTADO DE PROYECTO 27 (continúa)

{
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,

— • •••

Figura 9-7 Proyecto 28. Mando a distancia por infrarrojos

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).

También podría gustarte