Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Está en la página 1/ 26
Entradas digitales 2
if (buttonState1 == LOW && buttonState2 == LOW ){
}
else if (buttonState1 == LOW ) {
}
else if (buttonState2 == LOW ) {
}
else {
}Introduccion
En esta miniunidad vamos a utilizar las entradas digitales de Arduino para simular un sistema de seguridad en una nave
industrial que tiene dos puertas de acceso. Cada puerta tiene un sensor que indica al personal de seguridad si esta abierta o
No, esta informacion se muestra en el monitor de un ordenador que hay en la sala de control de seguridad.
Para implementar este sistema mediante una placa Arduino necesitaremos estudiar tres conceptos nuevos:
4. La estructura de programacién if... else if... else
2. El operador AND.
3. La comunicacion de tipo serie entre una placa Arduino y un ordenador.
Puerta 1
Plano de la
nave industrial
Puerta 2
‘Sistema de seguridad en una nave industrial.1, Sensores para controlar la apertura de puertas y ventanas
Hay varios sensores que pueden usarse para saber si una puerta o una ventana esta abierta o cerrada. El mas usado es el
sensor magnético, también llamado interruptor reed. Esta formado por dos laminillas de hierro encerradas en un tubo de vidrio
sin aire. Al acercarle un iman 0 un electroiméin, las dos éminas se magnetizan y se atraen entre si hasta tocarse y cerrar el
Circuito. Cuando el campo magnético se aleja, as Iéminas vuelven a separarse y el citcuito se abre, Este sensor es muy
utiizado en sistemas antirrobo. Se coloca un iméin en la puerta y un interruptor reed en el marco (fijate en la ilustracién). Si un
ladron abre la puerta, el sistema antirobo recibe una seftal
s|
Interruptor reed
Tubo
de vidrio
al vacio
Interruptor Conexién con
Teed la alarma
Iman
Funcionamiento de un sensor magnético, Sistema antirrobo con sensor magnético en una puerta.1. Sensores para controlar la apertura de puertas y ventanas
‘Ademas de los sensores magnéticos, también se usan mucho los sensores de final de
carrera (foto de la derecha). Tienen una palanca que presiona un pulsador interno al tocar
la hoja de la puerta. En la practica que haremos en las paginas siguientes no usaremos
sensores magnéticos ni de final de carrera (si {os tienes, puedes usarlos también), en su
lugar usaremos pulsadores normalmente abiertos, que son mas econémicos y faciles de
encontrar. Tal y como puedes ver en la animacion de debajo, consideraremos que cada
puerta tiene un pulsador que cierra un circuito cuando la puerta esta cerrada y lo abre
cuando esta abierta. Si enviamos corriente al pulsador desde la tarjeta Arduino, podremos
comprobar si la corriente vuelve a la placa (el estado de la entrada digital a la que se
conecte el sensor sera HIGH) 0 sino vuelve (el estado de la entrada digital seré LOW),
Circuito abierto
Estado: LOW
TT
Pulsador (destacado en color rosa) instalado en una puerta
Sensor de final
de carrera,
Pulsador.
i
3
31. Sensores para controlar la apertura de puertas y ventanas
Ademas de los sensores magnéticos, también se usan mucho los sensores de final de
carrera (foto de la derecha). Tienen una palanca que presiona un pulsador interno al tocar
la hoja de la puerta. En la practica que haremos en las paginas siguientes no usaremos
sensores magnéticos ni de final de carrera (si los tienes, puedes usarlos también), en su
lugar usaremos pulsadores normaimente abiertos, que son mas econdmicos y faciles de
encontrar. Tal y como puedes ver en la animacion de debajo, consideraremos que cada
puerta tiene un pulsador que cierra un circuito cuando la puerta esta cerrada y lo abre
‘cuando esta abierta. Si enviamos corriente al pulsador desde la tarjeta Arduino, podremos
comprobar si la cortiente vuelve a la placa (el estado de la entrada digital a la que se
conecte el sensor sera HIGH) 0 sino vuelve (el estado de la entrada digital seré LOW).
Circuito cerrado
Estado: HIGH
Pulsador (destacado en color rosa) instalado en una puerta,
Sensor de final
de carrera.
F
Pulsador.2. Material necesario
Para hacer esta practica necesitaras los siguientes componentes:
~ Placa Arduino UNO y cable USB
- Protoboard,
- 2 pulsadores.
= Zresistores de 10 KA.
- 8 cables,
Cable USB
Place Arduino UNO
De 5 bandas. De 4 bandas
Resistor de 10 kA.
je Pulsador
Protoboard3. Montar el circuito
Conecta los componentes en la protoboard como se indica en esta
imagen. Antes de poner en marcha el circuito, repasa atentamente
que todo esté bien conectado,
A destacar:
- El pulsador 1 esta conectado al pin 7
de la placa, el pulsador 2 esta
conectado al pin12.
- El cable largo de color negro va
conectado al pin GND y al terminal
negativo det bus de alimentacién de
la protoboard. El cable largo de color
Tojo va conectado al pin de
alimentacién a 5 V y al terminal
positive del bus de alimentacién de la
protoboard
- Los pulsadores deben instalarse en
la protoboard con las patas arriba y
abajo, como en el dibujo de la
derecha. Si los giras y las patas
quedan en los laterales, actuaran
como si siempre estuvieran pulsados.
Patat — Pata2
Pata3 Pata
Las patas de los
pulsadores estén
conectadas
internamente. La 1
con la 3 y la 2con
la 4. En rosa se
muestra el circuito
equivalente,4. Esquema eléctrico
Debajo se muestra el esquema eléctrico del circulto. A la
derecha puedes ver como estén conectados los componentes
en las conexiones internas de la protoboard.
=I, Pulsador 1
{
Resistores
I. Pulsadtor 2 |
£
Arduino UNO
RER25R
Esquema eléctrico del circuit.
ma
/Pulsador 2 |
OM5. Diagrama de flujo
Ahora toca escribir el cédigo del programa
ara la placa Arduino, Pero antes hemos de
‘coneretar qué queremos que haga. Queremos
que se muestre un mensaje en la pantalla de
un ordenador indicando el estado de las dos
puertas. Si ambas estan abiertas, se mostraré
el mensaje "Puerta 1 y puerta 2 abiertas”, si
solo la puerta 1 esté abierta, se mostraré
"Puerta 1 abierta": si solo la puerta 2 esté
abierta, se mostraré "Puerta 2 abierta”. si
ninguna de las puertas esta abierta, se
‘mostraré "Ninguna puerta abierta". Aqui
puedes ver el diagrama de fujo que
Corresponde a este funcionamiento.
Diagrama
de flujo del
programe,
pulsadores 1 y 2
Mostrar "Puerta 1 y
puerta 2 abiertas.”
Mostrar
"Puerta 1 abierta."
Mostrar
"Puerta 2 abierta."
Mostrar "Ninguna
puerta abierta.”
Esperar 1 segundo6, Escribir el programa. Crear un nuevo archivo
Ma ~ i
sketch_march16.ino
void setup() {
}
Para empezar a escribir el cédigo de!
void loop() { programa, abre el IDE de Arduino y
crea un nuevo archivo:
}
Versién web: Sketchbook > New Sketch
- Versién de escritorio: Archivo > Nuevo
{Dénde encontrar
el IDE de Arduino?6. Escribir el programa. Variables para los pines de los pulsadores
vo
sketeh_march16 ino
const int buttonPint = 7;
const int buttonPin2
void setup() {
}
void loop) {
fi6. Escribir el programa. Variables para el estado de los pulsadores
v> sa
sketch_march16 ino
4 constint buttonPint = 7;
2 const int buttonPin2 = 12;
3 int buttonStatet
4 int buttonState2
5
6 void setup() {
7
8 }
9
10 void loop() {
1
a }
13
14
15
16
17
18
19
20
a6. Escribir el programa. Declarar dos pines como entradas
=e -E
sketch_march16 ino
const int buttonPint
const int buttonPin2
int buttonState
int buttonState:
void setup() {
pinMode (buttonPin4, INPUT )
pinMode (buttonPin2, INPUT )
}
1
2
3
4
5
6
7
8
9
10
1
12 void loop) {
B
4
5
16
7
8
19
20
}6. Escribir el programa. Iniciar la comunicacion serie
v>
sketch_march16.ino
const int buttonPint
const int buttonPin2
int buttonStatet = 0;
Int buttonState2 = 0;
void setup() {
pinMode (buttonPin1, INPUT );
pinMode (buttonPin2, INPUT);
Serial.begin (9600);
Los pines 0 y 1 no se pueden usar cuando se
utiliza la comiunicacién serie con un ordenador.
El cable USB (de Universal Serial Port)
permite transmitir informacién entre
una placa Arduino y un ordenador.
Jus,
110° Laplace envia
informacién al PC6. Escribir el programa. Detectar si los botones estan pulsados
Me
sketch_march16.ino
1
12 void toop() {
13 buttonState1 = digitalRead (buttonPin1);
14 __buttonState2 = cigitalRead (buttonPin2}
15}
16
7
18
49
2
22
23
24
25
a7
28
30
31
326, Escribir el programa. Decidir qué mensaje enviar al ordenador
Mediante las lineas 13 y 14 sabemos si os
botones estén pulsados 0 no (recuerda que si
alguno de los dos botones no esté pulsado
quiere decir que la puerta correspondiente esté
‘abierta). Ahora toca enviar esta informacion al
‘ordenador para que aparezca un mensaje en la
pantalla. Lo haremos usando la estructura
Ma
sketch_march16.ino
"1 Kl E
12 void loop() {
13 buttonState1 = digitalRead (buttonPin1);
14 buttonState2 = digitalRead (buttonPin2); Wa condicional if... else if... else.
48 (1 condicion)¢
46 —_1instruccién
7 3 Escribe en tu programa las lineas 15 a 26, las que estan destacadas en
18 Lise condicion)( « +
sketch_march16.ino
Void loop() {
buttonState1 = digitalRead (buttonPin1);
talRead (buttonPin2);
LOW && buttonState2 == LOW ){
Serial printin ("Puerta 1 y puerta 2 abiertas.
}
else if (2® condicion) {
29 instruccion
t
else if (3° condicion) {
3# instrucci6n
bse (
49 instruceion
t
t6. Esci
el programa, Decidir qué mensaje enviar al ordenador
sketch_march16.ino
void 1oop(){
buttonState1 = digitalRead (buttonPin1),
buttonState2 = digitalRead (buttonPin2);
if (buttonStatet == LOW && buttonState2 == LOW )
Serial.printin ("Puerta 1 y puerta 2 abiertas.")
}
else if (buttonStatet == LOW ) {
Serial.printin ("Puerta 1 abierta.");
else if (3* condicién) {
3° instruccién
}
else {
4° instruccion
}
}6. Escribir el programa. Decidir qué mensaje enviar al ordenador
me .
sketch_march16.ino
void loop() ¢
buttonStatet = digitalRead (buttonPint);
buttonState2 = digitalRead (buttonPin2);
if (buttonStatet == LOW && buttonState2
Setial printin ("Puerta 1 y puerta 2 abiertas."),
else if (buttonStatet == LOW ) {
Serial printin (Puerta 1 abierta.”)
}
else if (buttonState2 == LOW ){
Serial.printin ("Puerta 2 abierta.");
}
else {
4° instruccién
}
}6. Escri
4
12
13
14
18
16
7
18
19
20
2
22
23
24
25
26
7
28
29
31
32
el programa. Decidir qué mensaje enviar al ordenador
vo vx
sketch_march'6.ino
void loop() {
buttonStatet = digitalRead (buttonPint):
buttonState2 = digitalRead (buttonPin2):
it (buttonState1 == LOW && buttonState2 == LOW ){
Serial printin ("Puerta 1 y puerta 2 abiertas.");
}
else if (buttonState1 == LOW ) {
Serial printin ("Puerta 1 abierta.");
}
else if (buttonState2 == LOW ) {
Serial printin ("Puerta 2 abierta.");
else {
Serial.printin (*Ninguna puerta abierta.");
,
)6. Escribir el programa. Decidir qué mensaje enviar al ordenador
Mee ~i
sketch_march6 ino
4
12 void loop() {
13 buttonStatet = digitalRead (buttonPin1):
14 _buttonState2 = digitalRead (buttonPin2);,
15 if (buttonState1 == LOW && buttonState2 == LOW ) {
16 Serial printin ("Puerta 1 y puerta 2 abiertas.")
7}
18 else if (buttonState1 == LOW ) {
19 Serial printin ("Puerta 1 abierta.");
2}
21 else if (buttonstate2 == LOW) {
22 Serial.printin ("Puerta 2 abierta.”);
3 }
24 else (
25 Serial printin ("Ninguna puerta abierta.");
26
ar toe (1000);
2%)
29
30
34
326. Escribir el programa. Abrir el monitor de comunicaci6n serie
PORT: Arduino Uno at COM3 wees | ~
9600 baud
New line
= ‘begin (9600)
vold loop() {
buttonState:
buttonState:
if (buttonStatet
Serial printin ('
digitalRead (buttonPint),
‘igitalRead (buttonPin2)
OW && buttonState?
uerta 1 y puerta 2 abiertas."
Low ){
else if (buttonStatet == LOW ) {
Serial printin ("Puerta 1 abierta.")
}
else if (buttonState2 == LOW ) {
Serial printin ("Puerta 2 abierta.")
else
Montoy sete de fa vein Serial printin ("Ninguna puerta abierta.");
web del IDE de Arduino
}
(7\AuTOscROLL | DISCONNECT aa (1000);6. Escribir el programa. Visualizar la informacién enviada por la placa
PORT: Arduino Uno at COM3
Newline ¥ 9600baud¥
Ninguna puerta abierta
Ninguna puerta abierta
Ninguna puerta abierta,
Puerta 1 abierta
Monitor serie de la version
web del IDE de Arduino
|/\AUTOSCROLL | DISCONNECT
18
19
20
2
22
23
24
25
26
27
28
Y > Arduino uno
sketch_march16.ino
pinMode (buttonPint, INPUT j;
inMode (buttonPin2, INPUT );
Serial begin (9600);
else if (buttonStatet == LOW ) {
Serial printin ("Puerta 1 abierta.");
else if (buttonState2 == LOW ) {
Serial.printin ("Puerta 2 abierta.");
}
else {
Serial printin ("Ninguna puerta abierta.")
i bay (1000); — al6. Escribir el programa, Visualizar la informacién enviada por la placa
PORT: Arduino Uno at COM Y= Arduino uno .
sketch_marcin16.ino
Newline + 9600baud + 7 pintMode (buttonPint, INPUT );
8 —_pinMode (buttonPin2, INPUT ):
SEND 8 _Serial.begin (9600);
=—} 0}
Ninguna puerta abierta
‘Ninguna puerta abierta
Q& _Ninguna puerta abierta
Puerta 1 abierta.
Ninguna puerta abierta
ey 18 else if (buttonStatet == LOW ){
Puerta 1 y puerta 2 abiertas. emote (rd »
Nigam parts able’ eg, Sues Pues {aera
‘Ninguna puerta abierta. 21 else if (buttonState2 == LOW ){
‘Ninguna puerta abierta 2 Serial printin (‘Puerta 2 abierta."
23
24 else {
See eee 25 Sefial printin ("Ninguna puerta abierta
web del IDE de Arduino
2 =}
|/)AUTOSCROLL | DISCONNECT ye =e")Cuestionario
1. Los sensores magnéticos y los sensores de final de carrera se pueden usar para controlar
gobmo funcionan?
2. Explica el diagrama de flujo de la pagina 7
3. GEn qué consiste la comunicacién serie? {Qué cédigo tenemos que poner en el programa de una placa Arduino para que
inicie una comunicacion serie con el ordenador al que esta conectada?
4. Qué es el Monitor serie del IDE de Arduino?
5. gEn qué consiste la estructura de programacién if... else if... else? Pon un ejemplo que no salga en la miniunidad,
6. Afiade al circuito de la miniunidad un led que se encienda cuando alguna de las dos puertas esté abierta. Escribe aqui el
codigo necesario. Te sera de ayuda volver a consultar la miniunidad anterior.
7. Modifica el programa de la miniunidad para que se comporte como sigue: Al presionar los dos pulsadores se muestra: "Los
dos botones estan pulsados’, Al presionar solo el pulsador 1: “El botén 1 esta pulsado’, Al presionar solo el pulsador 2: "El
botén 2 esta pulsado”. Ningtin pulsador presionado: "Ningun botén esta pulsado". Escribe aqui el cédigo
8, Sustituye las lineas 16 a 26 del programa de la miniunidad por (,.ionStatet == LOW |j buttonState? == LOW) {
este codigo. .Qué significan las dos lineas verticales paralelas Serial printin("Hay puertas abiertas.");
después del primer LOW? gCémo funcionard este programa?
else
Sora printin("No hay puertas abiertas.");
}
ina puerta esta ablerta 0 no,