Ca pítulo 6
■
91
Proye ctos con luz
Digital Pin
2_ 2700
3_ 4
2700
X-
2700
rx
2700
_6_ 2700
7
.}
B
_5_ Arduino
a C a
2700
8 2700
XXX
XXX
xxx©
X~d~>
y < x » A ®
< x x ®
dp
9 2700
Figura 6-6
Manejo de más de un display de siete segmentos desde una placa Arduino.
si nuestro pin Arduino suministra 5 V, 0,6 V de esos
COMPONENTES Y EQUIPO
circularán por el circuito base/em isor del transistor,
Descripción
lo que significa que nuestra resistencia debe tener un valor de alrededor de:
Apéndice
Placa Arduino UNO o Duemilanove o similar
R = V/I DI
R = 4,4 / 2 mA = 2,2 KQ De hecho, también sería correcto si dejamos cir cular 4 mA. porque la salida digital puede aguantar casi 40 mA. Por ello, vamos a elegir el socorrido
1
Display LED siete segm. dos dígitos (ánodo común)
33
R1
Resistencia 100 KQ KQ 0,5 W
13
R4-13
Resistencia Resistencia 270 Q 0,5 W
6 7
valor estándar de 1 KQ, que nos permitirá asegurar
Resistencia 1KQ 0.5 W R2, R3 Resistencia
nos de que el transistor actuará como un interruptor
TI, T2
BC307
39
y siempre lo activará y desactivará completamente.
SI
Pulsador miniatura
48
Proyecto 15 Dado doble con display de siete segmentos En el Proyecto 9 creamos un dado utilizando siete LEDs independientes. En este proyecto vamos a usar dos displays LED de siete segmentos para crear un dado doble.
Hardware El sketch de este proyecto se muestra en la Figura 67. El módulo display LED de siete segmentos que estamos utilizando es del tipo ánodo común, lo cual significa que todos los ánodos (terminales positivos) de los segmentos LED están conectados entre sí. Por lo tanto, para activar los displays uno tras otro, debe-
92
30 Proyectos con Arduino
e
b c
+1 g
•fj 16 «I w
f a
[i i X [c¡ e
d dp e
I1'
b
]_
1
■I: í! xry®
c +2
a
270 0
*1
♦2
270 0
X_A_X
270 0
D16jArduino
012
El^[ D4j-
R1
F ;
270 0
x x V E
270 0
D5 _ 270 0
,
270 0
dp
D17_
L
B
F
B
270 0
X X X C
V x x ©
E T
C dT
®
GND
Circuito electrónico del Proyecto 15.
mos controlar la alimentación positiva, de forma
placa de prueba s puedan conectarse directamente.
secuencial, a cada uno de los dos ánodos comunes.
Como las conexiones de estas resistencias no llevan
Como vemos, esto es lo contrario a como controla
aislamiento y son relativamente largas, hay que tener
mos la alimentación al LED Luxeon del Proyecto 4,
cuidado para que no se toquen entre sí. Lo que es
donde se controlaba la alimentación por el lado de
igualmente válido para las conexiones desde los pines
masa del circuito. Y por eso vamos a utilizar otro tipo
de Arduino a cada uno de los segmentos del display.
distinto de transistor. En lugar del transistor NPN
La colocación se ha hecho así para facilitar la cone
(negativo-positivo-negativo) que utilizamos anterior
xión.
mente, vamos a utilizar un transistor PNP (positivonegativo-positivo). Para identificarlo, observe la diferente dirección de la flecha (hacia fuera o hacia dentro) en el símbolo del transistor. Si estuviéramos utilizando un display de siete seg mentos de cátodo común, entonces tendríamos que utilizar un transistor NP N, pero conec tado en la parte inferior del circuito, en lugar de hacerlo en la parte superior. El diseño y la fotografía de la placa de pruebas del proyecto se muestran en las Figuras 6-8 y 6-9. Para reducir el número de cables necesarios, hemos colocado el display cerca de la placa Arduino, para que las resistencias entre los terminales de ésta y la
Software Utilizaremos una matriz (array) que contenga los pines que se co nectan a cad a uno de los seg men tos "a" a "g" y el punto decimal. También utilizaremos
una matriz para determinar qué segmentos deben iluminarse para mostrar los distintos dígitos. Es un array de dos dimensiones, donde cada fila repre
senta un dígito (0 a 9) y cada columna un segmento (consulte el Listado del Proyecto 15).
Ca pítulo 6
l *>&y»«
Proyecto s con luz
O LO
OO
o
00
ooboo
93
ooooo ooooo
5V GND
f gsü^fre-e^éocccccocccipooppoo OÜC C C P ^ Q O O O O O O c oo o oo o pp p
Doemilacov* DFRduino
rcmsainn
■
occo occoeoiu^ccccooocoo icccccc^cocoooocoo »9p o | | ® c o o o o o o c o o filis sonco oooo oooo n
r
Figura 6-9
ooooo ooooo
o
ooc oooo
Diseño del circu ito del Proyecto 15 sobre la placa de pruebas.
Proyecto 15. Display doble de LEDs de siete segmentos.
ooé oo
o ooo o
5V GND
30 Proyectos con Arduino
94
LISTADO DE PROYECTO 15
int segm en tP in s[] = {3, 2, 19, 16, 18, 4, 5, 17}; int dis playPins [] = {10, 11}; int buttonPin = 12; byte digits[10][8] = { I I a b c d e f g { 1, 1, 1, 1, 1, 1, o, { 0, 1, 1, 0, 0, 0, o, { 1, 1, o, 1, 1, 0, i, { 1, 1, 1/ 1, 0, 0, i, { 0, 1, 1, 0, 0, 1, i, { 1, 0, 1, 1, 0, 1, i, { 1, 0, 1, 1, 1, 1, i, { 1, 1, 1, 0, 0, 0, 0,
. // 0 0} , // 1 0} , // 2 0} , // 3 0} , // 4 0} , // 5 0} , // 6 0} , // 7 0} , { 1, 1, 1, 1, 1, 1, 1, 0}, // 8 { 1, 1, 1, 1, 0, 1, 1, 0} // 9
void setup()
{ for (int i=0; i < 8; i++)
{ pinM ode(segmentPins[i ], OUTP UT);
} pinMode(displayPins[0], OUTPUT); pinMode(displayPins[0], OUTPUT); pin Mod e(butt onP in, IN PUT );
> void loop()
{ static int dicel; static int dice2; if (digitalRead(buttonPin))
{ dicel = random(1,7); dice2 = random(l,7);
} updateD isplay(dic el, dice2 );
} void updateDis play(i nt valuel, int value2)
{ dig ita lWri te(dis play Pins [0], HI GH) ; digitalWrite(displayPins[1], LOW); setSegments(valuel); delay(5); digita lWrite(displa yPins[0], LO W);
(continúa)
Ca pítulo 6
■
95
Proyecto s con luz
LISTADO DE PROYECTO 15 (continúa)
digitalWrite(displayPins[1], HIGH); setSegments(value2); delay(5);
} void setSegments(int n)
{ for (int i=0; i < 8; i++)
{ digi talW rit e(segm entP ins[i ], ! dig its [n} [i]);
} }
Para manejar ambos displays tenemos que encender los displays uno tras otro, configurando sus segmentos de forma correcta. Por lo tanto, nues tra función loop debe mantener en distintas varia bles, dicel y dice2, los valores que vayan a mostrarse en cada uno de los displays. Para “tirar” el dado, utilizaremos la función random, lo que hará que cada vez que se pulse el botón se estab lez ca un nuevo valor en dicel y en dice2. Esto significa que al “tiro del dado” también le afectará el tiempo que se tenga pulsado el botón, po r lo que no ten dre mo s que pre oc up am os de ac ti var el generador de números-aleatorios.
una sola lente, por lo que aparecen como un único pun to. De esta forma po demo s en cen de r uno o los dos LED para formar un color rojo, verde o naranja. En la Figura 6-10 se muestra el proyecto com pleto. Este proyecto utiliza una matriz de LEDs como la que acabamos de describir, y nos permitirá mostrar dibujos multicolores a través de la conexión USB. En cuanto al proyecto, en este caso emplearemos ba sta nte s co mpo ne ntes y utiliz arem os pr ác tic a mente todos los pines de la placa Arduino.
COMPONENTES Y EQUIPO Descripción
Pongamos todo junto
Placa Arduino UNO o
Cargue el sketch terminado del Proyecto 15 desde su Arduino Sketchbook y descárguelo en su placa
Duemilanove o similar
(véase el Capítulo 1).
Proyecto 16 Matriz de LEDs Si no estamos equivocados, creemos que las matri ces de LEDs son uno de esos componentes que pue den gu sta r a las me nte s más inq uietas. Con sisten en una matriz de LEDs, que en este caso es de 8 por 8. Estos dispositivos suelen tener un LED en cada una de las posiciones; sin embargo, en el dispositivo que vamos a utilizar, cada uno de estos LED son dos en realidad, uno rojo y uno verde, colocados bajo
Matriz LED 8 x 8 (2 colores) R1-16 Resis tencia 100 Q 0.5 W
Apéndice
1 34 5
IC1
C on tad or de décad as 4017
46
T1-8
2N7000
42
Placa protoboard extra larga
72 x 2
Hardware La Figura 6-11 muestra el esquema electrónico del pro yec to. Co mo era de esper ar, los LED s están organizados en filas y columnas, con todas las conexiones negativas de una determinada columna conectadas entre sí y una conexión positiva sepa