b a r
v
O
i '4 p s is ? - u n * /ir
s /^
2O *U i 2*
> oz
O
H
AN ALO C I N J N W ^ wn
<<<<<<
+ *+
C o n stru ya y p ro g ra m e sus p ro p io s p ro yecto s de A rd u in o C o m p a tib le con m ú ltip le s p la ta fo rm a s ; Mac, W in d o w s y Linux Un c o m p le to lib ro sobre A rdu ino ; con ilu stracio n es, esquem as, fo to g ra fía s , e ilu stracio n es paso a paso
S IM O N E
d ito rial
M Ü N K Estr
ibo r
30 Projectos con Arduino"
11010
+
3 0 Projectos con Arduino"'
Simón Monk
Revisión técnica en español: JAVIER POMPA Prof. IES Tecnología y FP en Electrónica
Editorial Estribor
A
'A rduino” es una marca comercial y registrada del equipo Arduino.
30 PROYECTOS CON ARDUINO™, Ia Edición No está permitida la reproducción total o parcial de esta publicación, ni su tratamiento informático, ni la transmisión de ninguna forma o por cualquier medio, ya sea electrónico, mecánico, por fotocopia, por registro u otros métodos, sin el permiso previo y por escrito del editor. DERECHOS RESERVADOS © 2012, respecto a la edición en español por: EDITORIAL ESTRIBOR, S.L. c/ Alba, 6B 28043 Madrid ESPAÑA Traducido bajo licencia de McGraw-Hill, Inc. de la edición en inglés de: 30 ARDUINO™ PRO JECTS FOR THE EVIL GENIUS™ Copyright versión original © MMX, por McGraw-Hill, Inc.
v
(ISBN-13 978-0-07-174133-0). Todos los derechos reservados. Copyright versión en español © MMXII, por Editorial Estribor, S.L. Todos los derechos reservados. ISBN: 978-84-940030-0-4 Depósito legal: M-10999-2012
Diseño de portada Francisco Luque Ulloa Maquetación e impresión Montesinos Artes Gráficas (Madrid)
Foto de portada Javier Pompa Adaptación gráficos y fotos (ver pág. ix) Javier Pompa
IMPRESO EN ESPAÑA - PRINTED IN SPAIN
La información ha sido obtenida por la Editorial de fuentes que se creen que son fiables. No obstante, debido a la posibilidad de error humano o mecánico por parte de las fuentes de información utilizadas en la elaboración del libro. Editorial Estribor no garantiza la exactitud, adecuación o integridad de la información y no se hace responsable de los errores u om isiones o los resultados obtenidos con el uso de dicha información. El libro se proporciona “tal cual".
difunto padre, Hugh Monk, de quién herede' el amor por la electrónica. Él se habría divertido mucho con todo esto.
Acerca del Autor Dr. S im ón M onk es titulado en C ib ern ética y en Inform ática y D octor en Ingeniería de S o ftw are. H a pasado varios años com o profesor universitario antes de reg resar al sector industrial. Es co fundador de la em presa de softw are m óvil M o m o te, L td. Es aficionado activo a la electrónica desde sus días de escuela y colabora ocasionalm ente con revistas de electró n ica para aficionados.
A cerca del revisor técnico en español: J a v ier P om p a es L icenciado en F ísica y P rofesor de IES de T ecnología y FP en E lectrónica. Es un en am o rad o de la electró n ica y de la en señ an za y en la actualidad se en cu en tra preparando una am biciosa serie de libros sobre electrónica.
Tabla de Contenido
Lista de F ig u ra s .........................................................................................................................
ix
P r e f a c io .......................................................................................................................................
xiii
A g ra d e c im ie n to s......................................................................................................................
xvii
In tro d u cció n ................................................................................................................................
xix
1 Arrranque rápido...........................................................................
2
1
E n c e n d id o .................................................................................................................................. Instalación del S o f tw a r e ........................................................................................................ C onfiguración del entorno A rd u in o ..................................................................................... D escarga del software del p royecto..................................................................................... P ro y ec to 1 LED in term iten te............................................................................................... Placa de pruebas de inserción de com ponentes (protoboard) ...................................... R esum en .......................................................................................................................................
1 1 6 6 8 II 13
Un recorrido por Arduino............................................................
15
M icro c o n tro lad o res.................................................................................................................. ¿Q ué hay en una placa A rd u in o ?.......................................................................................... La fam ilia A rduino.................................................................................................................... El lenguaje C ............................................................................................................................. R esum en .......................................................................................................................................
15 15 20 21 25
3 Proyectos con L E D s ......................................................................
27
P ro y ecto 2 Interm itente S.O.S. de código M o r s e ......................................................... Loops (b u c le s). . .•.................................................................................................................... A rrays (m atric es)...................................................................................................................... P ro y ec to 3 Traductor de código M o r s e ............................................................................ P ro y ecto 4 Traductor de código M orse de gran in ten sid ad ........................................ R esum en.......................................................................................................................................
27 29 30 31 35 40
4 Más proyectos con LEDs................................................................
41
Entradas y salidas d ig ita le s ................................................................................................... P ro y ecto 5 M odelo de s e m á f o r o ....................................................................................... P ro y ecto 6 Luz E stro b o sc ó p ic a .......................................................................................... P ro y ecto 7 Luz para el T .A .E ............................................................................................... P royecto 8 Luz estroboscópica de alta p o te n c ia ........................................................... G eneración de núm eros aleatorios....................................................................................... P ro y ecto 9 Dado de L E D s ................................................................................................... R esum en......................................................................
41 41 44 47 52 55 55 59
5 Proyectos con sensores...............................................................
61
P ro y ecto 10 C ódigo de seguridad con el t e c l a d o ......................................................... C odificadores giratorios.......................................................................................................... P ro y ecto 11 M odelo de sem áforo basado en codificador g ira to rio .......................... D etección de la l u z .................................................................................................................
61 67 68 72
viii
30 Proyectos con A rd u in o
6
P ro y ecto 12 M onitor de p u ls a c io n e s ................................................................................ M edición de la tem p eratu ra................................................................................................... P ro y ecto 13 R egistrador de tem peraturas U S B ............................................................. R esum en......................................................................................................................................
73 77 77 83
Proyectos de l u z ............................................................................
85
P ro v ecto 14 LED m u ltic o lo r.............................................................................................. LEDs de siete segm entos................................................................................................ * . . . P ro y ec to 15 Dado doble con display de siete s e g m e n to s ........................................... P ro y ecto 16 M atriz de L E D s ............................................................................................. Displays L C D ........................................................................................................................... P ro y ecto 17 Placa de m ensajes U S B ................................................................................ R esum en......................................................................................................................................
85 89 91 95 101 102 105
7 Proyectos de sonido........................................................................107 P ro y ecto 18 O s c ilo s c o p io ................................................................................................... G eneración de s o n i d o ............................................................................................................ P ro y ecto 19 R eproductor de m ú s ic a ............................................................................... P ro y ecto 20 Arpa de l u z .................................................................................................... P ro y ecto 21 M edidor V U .................................................................................................... R esum en......................................................................................................................................
107 111 112 117 120 124
8 Proyectos de energía e lé c tric a ..................................................... 125 P ro y ecto 22 Term ostato L C D .......................................................................................... P ro y ecto 23 Ventilador controlado por ordenador....................................................... C ontroladores de puente H ................................................................................................... P ro y ec to 24 H ip n o tiz a d o r................................................................................................... S erv o m o to res............................................................................................................................. P ro y ecto 25 Láser se rv o -c o n tro la d o ................................................................................ R esum en....................
125 132 134 134 138 138 142
9 Proyectos v a rio s .............................................................................. 145 P ro y ec to 26 D etector de m e n tira s ................................................................................... P ro y ec to 27 C erradura m a g n é tic a ................................................................................... P ro y ecto 28 M ando a distancia por in fra rro jo s............................................................ P ro y ecto 29 Reloj L ily p a d .................................................................................................. P ro y ecto 30 Tem porizador de cuenta a t r á s ................................................................... R esum en......................................................................................................................................
10
145 148 153 159 163 168
Sus Proyectos.................................................................................... 169 C ircu ito s...................................................................................................................................... C o m p o n e n te s............................................................................................................................. H e rra m ie n ta s............................................................................................................................. Ideas para p r o y e c to s ...............................................................................................................
169 171 175 179
Apéndice: Componentes y suministros..................................
181
P ro v e e d o re s............................................................................................................................... K it de com ponentes para p rin c ip ia n te s ..............................................................................
181 185
I n d e x ...........................................................................................................................................
187
Lista de figuras Figura 1-1 Figura 1-2 Figura 1-3 Figura 1-4 Figura 1-5 Figura 1-6 Figura 1-7 Figura 1-8 Figura 1-9 Figura 1-10
Placa A rduino UNO alim entada y con el LED encendido. D escarga del softw are de Arduino para W indows. * Extracción del softw are de Arduino en W indow s. La opción de m enú Extraer todo en W indows. Establecer el directorio para la extracción. * Asistente de N uevo Hardware Encontrado de W indows. * Establecer la ubicación de los controladores USB. * Inicio del softw are Arduino desde W indow s. * Instalación del softw are A rduino en M ac OS X.
Figura 1-11 Figura 1-12 Figura 1-13 Figura 1-14 Figura 1-15 Figura 1-16 Figura 1-17 Figura 1-18 Figura 1-19 Figura 1-20 Figura 2-1 Figura 2-2 Figura 2-3 Figura 2-4 Figura 2-5
C om ponentes de una placa A rduino. * La ley de O hm . * LED y resistencia en serie. * Diagram a de bloques del A tm ega328. Placa A rduino Lilypad.
Figura 3-1 Figura 3-2
Traductor de código M orse. * Ejecución de Serial M onitor. *
Figura 3-3 Figura 3-4 Figura 3-5
La ventana de Serial M onitor. * Funcionam iento de un transistor bipolar NPN. * Esquem a electrónico del m anejo de un LED de gran potencia. *
Figura 3-6 Figura 3-7 Figura 3-8 Figura 3-9
D iseño de la placa de pruebas del Proyecto 4. C onexión de cables sin soldadura en el LED Luxeon Fotografía de una placa de pruebas com pleta para el Proyecto 4.
Figura Figura Figura Figura
Protoshield en form a de kit. 3-10 Parte inferior de la Protoshield. 3-11 M ontaje de Protoshield básico. 3-12 Diseño de Protoshield del Proyecto 4. * 3-13 Shield Luxeon com pleta conectada a una placa Arduino.
ix
30 Proyectos con A rd u in o
Figura 4-1 Figura 4-2 Figura 4-3 Figura 4-4 Figura 4-5 Figura 4-6 Figura 4-7 Figura 4-8 Figura 4-9 Figura 4-10 Figura 4-11 Figura 4-12 Figura 4-13 Figura 4-14 Figura 4-15 Figura Figura Figura Figura
5-1 5-2 5-3 5-4
Figura 5-5 Figura Figura Figura Figura
5-6 5-7 5-8 5-9
Figura 5-10 5-11
Figura Figura Figura Figura Figura Figura Figura Figura
5-12 5-13 5-14 5-15 5-16 5-17 5-18
Figura 5-19 Figura 5-20 Figura 5-21
Esquem a electrónico del Proyecto 5. Proyecto 5 . M odelo de sem áforo. Diseño de la placa de pruebas del Proyecto 5 Esquem a electrónico del Proyecto 6. * Funcionam iento interno de un potencióm etro. D iseño de la placa de pruebas del Proyecto 6. D iseño de la Protoshield para el Proyecto 6. * M ontaje de un cable para alim entación externa con pila. Esquem a electrónico del Proyecto 7. * Proyecto 7. M ontaje de luz de gran potencia. Distribución de la placa perforada. * Proyecto 7. Luz para el T.A.E. Esquem a electrónico del Proyecto 9. * Distribución de la placa de pruebas para el Proyecto 9. Proyecto 9. Dado de LEDs. Esquem a electrónico del Proyecto 10. * Teclado m atricial de 12 botones Soldadura de pines al teclado. C om probación de las conexiones del teclado. Diseño de la placa de pruebas del Proyecto 10. Proyecto 10. C ódigo de seguridad con teclado Instalación de la biblioteca para W indow s. Instalación de la biblioteca para M ac. Pulsos de un codificador giratorio. Esquem a electrónico del Proyecto 1 1 . * D isposición de com ponentes del Proyecto 11 en la placa de pruebas. U tilización de una LDR para m edir la luz. Esquem a electrónico del Proyecto 12. * Tubo sensor para el m onitor cardíaco. Disposición de los com ponentes en la placa de pruebas del Proyecto 12. Proyecto 12. M onitor de pulsaciones. Datos de prueba del m onitor cardíaco en una hoja de cálculo. C ircuito electrónico del Proyecto 13. Placa Arduino alim entada con el LED encendido. Em isión de com andos a través del Serial M onitor. D atos a copiar y pegar en una hoja de cálculo.
Figura 5-22
Datos de tem peratura im portados en una hoja de cálculo.
Figura 6-1
C ircuito electrónico del Proyecto 14. *
Figura 6-2 Figura 6-3 Figura 6-4
D iseño del circuito del Proyecto 14 sobre la placa de pruebas. Proyecto 14. Led multicolor. Display de siete segm entos.
Intro d u cció n
Figura 6-5 Figura 6-6 Figura 6-7 Figura 6-8 Figura 6-9 Figura 6-10 Figura 6-11 Figura 6-12 Figura 6-13 Figura 6-14 Figura 6-15 Figura Figura Figura Figura Figura Figura Figura Figura
Placa A rduino m anejando un display de siete segm entos. Manejo de más de un display de siete segmentos desde una placa Arduino. Circuito electrónico del Proyecto 15. Diseño del circuito del Proyecto 15 sobre la placa de pruebas. Proyecto 15. Display doble de LEDs de siete segm entos. Proyecto 16. M atriz de LEDs. C ircuito electrónico del Proyecto 16. D iseño del circuito del Proyecto 16 sobre la placa de pruebas. M ódulo LCD de 2 por 16 caracteres. C ircuito electrónico del Proyecto 17. * D iseño del circuito del Proyecto 17 sobre la placa de pruebas.
7-1
R uido de una señal de 50-H z en un osciloscopio. *
7-2 7-3
E squem a electrónico del Proyecto 18. * D iseño del circuito del Proyecto 18 sobre la placa de pruebas. *
7-4
Proyecto 18. O sciloscopio. O ndas cuadradas y senoidales.
7-5 7-6 7-7 7-8
Figura 7-9 Figura 7-10 Figura 7-11 Figura 7-12 Figura 7-13 Figura 7-14 Figura 7-15 Figura 8-1 Figura 8-2 Figura 8-3 Figura 8-4 Figura 8-5 Figura 8-6 Figura 8-7 Figura 8-8 Figura 8-9 Figura 8-10 Figura 8-11 Figura 8-12 Figura 8-13 Figura 8-14 Figura 8-15
C D A utilizando una escalera R-2R. * Esquem a electrónico del Proyecto 19. D iseño del circuito del Proyecto 19 sobre la placa de pruebas. R epresentación gráfica del array sin 16. Esquem a electrónico del Proyecto 20. D iseño del circuito del Proyecto 20 sobre la placa de pruebas. Proyecto 20. Arpa de luz. Proyecto 21. M edidor VU. Esquem a electrónico del Proyecto 2 1 . D iseño del circuito del Proyecto 21 sobre la placa de pruebas. E squem a electrónico del Proyecto 22. * Diseño del circuito del Proyecto 22 sobre la placa de pruebas. La histéresis en los sistem as de control. * Proyecto 22. Term ostato LCD. Proyecto 23. Ventilador controlado por ordenador. Esquem a electrónico del Proyecto 23. * Diseño del circuito del Proyecto 23 sobre la placa de pruebas. Un puente H. Proyecto 24. H ipnotizador. Esquem a electrónico del Proyecto 24. * Diseño del circuito del Proyecto 24 sobre la placa de pruebas. Espiral para el hipnotizador. Proyecto 25. Láser servo-controlado. Esquem a electrónico del Proyecto 25. * M ontaje del servo y del láser.
30 Proyectos con A rd uino
Figura 8-16
Escritura de la letra A con el láser.
Figura 8-17
Shield servo láser.
Figura 8-18
Lado inferior del shield servo láser.
Figura 9-1
Proyecto 26. D etector de m entiras. *
Figura 9-2
Esquem a electrónico del Proyecto 26.
Figura 9-3
Diseño del circuito del Proyecto 26 sobre la placa de pruebas.
Figura 9-4
Proyecto 27. C erradura m agnética.
Figura 9-5
Esquem a electrónico del Proyecto 27. *
Figura 9-6
Diseño del circuito del Proyecto 27 sobre la placa de pruebas.
Figura 9-7
Proyecto 28. M ando a distancia por infrarrojos. * (Ver nota pág. XX)
Figura 9-8
Esquem a electrónico del Proyecto 28. *
Figura 9-9
Diseño del circuito del Proyecto 28 sobre la placa de pruebas.
Figura 9-10
C ódigo de infrarrojos en el osciloscopio.
Figura 9-11
Proyecto 29. Reloj binario con Lilypad.
Figura 9-12
Esquem a electrónico del Proyecto 29.
Figura 9-13
Prim er plano de LED conectado a una resistencia.
Figura 9-14
Lado inferior de la placa Lilypad.
Figura 9-15
Proyecto 30. Tem porizador de cuenta atrás.
Figura 9-16
Esquem a electrónico del Proyecto 30. *
Figura 9-17
Placa Arduino alim entada con el LED encendido.
Figura 10-1
Ejem plo de esquem a eléctrico. *
Figura 10-2
Ejem plo de diseño de placa de pruebas.
Figura 10-3
Sím bolos electrónicos.
Figura 10-4
C ódigo de colores para resistencias. *
Figura 10-5
C ircuito de conm utación básico de un transistor. *
Figura 10-6
Alicates de corte y alicates de punta fina.
Figura 10-7
Soldador y m aterial de soldadura.
Figura 10-8
Polím etro.
Figura 10-9
M edición de corriente.
Figura 10-10 O sciloscopio.
* N ota: Las Figuras que aparecen con un * al final de la descripción han sido
adaptadas o modificadas de algún modo para la versión en español por el revisor técnico.
Prefacio
Es
u n a r e a l id a d
que el m undo tecnológico está liderado por el m undo de habla inglesa, y sobre todo por
Estados Unidos. Esto es obvio. En sus universidades y centros de investigación se desarrolla lo más avanzado e innovador de la tecnología actual. M uchos de sus centros de posgrado son, sencillam ente, de quitarse el som brero. Y. en gran m edida, lo son porque en ellos desarrollan su actividad m uchos de los m ejores profe sionales del m undo en su cam po. El acceso a todos los textos y docum entación que producen estos autores y estos centros de excelencia supone, no hace falta decirlo, una ventaja com petitiva para todo el m undo que com parte esa m ism a lengua, el inglés. Y, por la m ism a razón, una desventaja para el resto de los idiomas. R ecientem ente escuchaba en un vídeo a David C uartielles, ingeniero español y uno de los fundadores del equipo A rduino. decir que. en su opinión, en tem as de tecnología, España y Latinoam érica llevan un retraso de 5 años sobre el m undo anglosajón, por la falta de libros traducidos al español. O bviam ente, es difícil cuantificar el “daño” , pero éste, sin duda, existe. D esafortunadam ente, eso hace que nos estem os perdiendo cosas im portantes. Por poner un ejem plo sencillo, pensem os en el m undo de la literatura. Im aginem os que no se hubiera tra ducido a Balzac. a Stendhal, a G oethe, D ostoievski, Faulkner, C a n etti..., a Roth o a C oetzee. ¡A Shakespeare! o a tantos y tantos otros clásicos de la literatura. ¡Cuánto m ás pobres seríamos! Pues eso, desgraciadam ente, es lo que ocurre, entre otros, en el sector de la tecnología. ¡Cuántas obras im portantes nos estam os perdiendo! Aunque no sean clásicos de la literatura, m uchas de estas obras, cada una en su cam po, tam bién son “clásicos” u obras de referencia en su sector: en inform ática, en robótica, en elec trónica. Obras que en m uchas ocasiones van por la 8a o la 10a edición, y que aquí seguim os sin poder disfru tar y aprender de ellas porque, sim plem ente, no están traducidas a nuestro idioma. Ser conscientes de esa carencia ha sido, sin duda, una de nuestras principales m otivaciones al iniciar este apasionante viaje que supone poner en m archa un proyecto editorial. Y. para nosotros es apasionante por m uchas razones: porque se trata de libros (da igual el form ato, papel o digital), de inform ación, de cultura, de diálogo entre autores y lectores e, incluso, a veces, de ayudar a despertar una inspiración o un interés en los más jóvenes. Aunque nuestra posible aportación sólo pueda suponer apenas nada ante la m agnitud de la tarea, el reto creem os que m erece la pena: intentar ayudar a hacer que ese hueco entre lo que se publica cada año en inglés y lo que llega en español a nuestros alum nos, profesores, profesionales o aficionados sea un poco más pequeño. Ese es nuestro Reto y nuestro C om prom iso.
xiv
30 Proyectos con A rd uino
N uestro in terés, nuestro foco, p o r tan to , será ra strear el m ercado internacional en busca de obras que creem o s no d eb erían fa lta r en n inguna b ib lio teca técn ic a. A fo rtu n ad am en te, eso . en esto s tiem po s de la globalización y de Internet, es una labor relativam ente sencilla. Ver qué libros de estudio y de referencia están utilizando en Carnegie M ellon, en Stanford, en B erkeley, o en el M IT , resulta hoy por hoy de lo m ás viable. Por eso las referencias son perfectam ente conocidas. La barrera del idiom a no debería im pedir que podam os aprender y conozcam os a autores com o D. K nuth, com o W. Stallings, com o Aho, H opcroft, Silberschatz o Tanenbaum . por sólo citar a algunos “clásicos” de la tecnología y de la inform ática. Porque eso, com o hem os com entado, nos hace más pobres. T hom as W oll. en su clásico libro sobre el m undo editorial, m enciona que la aspiración últim a de cualquier proyecto editorial es conseguir C redibilidad. Y dice que ningún proyecto podrá funcionar sin lo que él deno m ina la C 3: C om prom iso, C oherencia y C redibilidad. Casi con toda seguridad, el C om prom iso y la C oherencia son dos atributos que pueden partir de uno m ism o. Sin em bargo, la C redibilidad, com o la confianza, es algo que uno se gana con el tiem po; algo que a uno le confieren los dem ás. En este caso, ustedes, los lectores. Ya hem os hablado de nuestro C om prom iso. La C oherencia pretendem os conseguirla centrándonos en dos aspectos. Prim ero, focalizando nuestra atención en un nicho concreto: libros técnicos de referencia, norm al m ente procedentes del m undo anglosajón, que no han sido traducidos a nuestro idioma. Segundo, procurando planificar nuestras tareas para que las cosas que decim os que vam os a hacer, se hagan, en tiem po y en form a, com o hem os dicho que las haríam os. Y eso incluye publicar un determ inado núm ero de libros al año. de estos tem as concretos. Y com o m enciona W oll, cuando se trabaja duro y de m anera honesta en el C om prom iso y en la C oherencia, la Credibilidad suele llegar con el tiem po. Para este prim er título, hem os apostado por el libro que tienen en sus manos: 30 Proyectos con A rduino, del Dr. Sim ón M onk. sobre un tem a que se está convirtiendo en un cierto fenóm eno a nivel m undial: el m undo A rduino. C om o m uchos de ustedes ya saben, A rduino es una tecnología sencilla y asequible que perm ite hacer m uchas cosas en el m undo de la electrónica y la robótica. Es una m agnífica herram ienta de enseñanza en esos cam pos. Perm ite, tanto a profesores, alum nos y profesionales com o a aficionados que no tienen por qué saber nada de tecnología para sus quehaceres, com o artistas o diseñadores m ultim edia, crear dispositivos y entor nos interactivos. En el m undo de la enseñanza, sin duda, tiene tam bién un papel de prim era m agnitud. Su enorm e versati lidad, su facilidad de uso, su softw are abierto, el precio de los com ponentes y la gran com unidad de personas que ya trabajan con esta pequeña gran plataform a tecnológica la convierten en una herram ienta básica para profesores y alum nos y para todos aquellos que se inician en el aprendizaje de la electrónica y la robótica. Un libro es un diálogo abierto entre m uchas personas, desde el autor o todos los que participam os en su elaboración, hasta ustedes, a quiénes va dirigido. Y lo es m ás, si cabe, cuando se trata de tecnología. Cam bian rápidam ente las versiones, surgen nuevos avances, etc.
In tro d u cció n
xv
Para esta prim era edición en español hem os realizado una im portante labor de revisión y, en parte, de adap tación a nuestro entorno y a nuestro idioma. Eso quiere decir que se han m odificado algunas fotos, algunos gráficos y se han tenido en cuenta los com entarios aportados en la w eb. hasta el m om ento, por otros lectores de la versión inglesa. El autor, asim ism o, tiene abierta tam bién una página web (w w w .arduinoevilgenius.com ) donde va colocando las actualizaciones y las cosas que m encionan los lectores que pueden corregirse. El libro, por supuesto, no es perfecto. Ningún libro, en cuanto diálogo abierto, lo es. Sí, en cam bio, hemos puesto todo nuestro em peño en que sea lo m ejor posible. Para finalizar, deseam os recordar de nuevo las palabras de T. Woll: C om prom iso, C oherencia y C redibilidad. ¡En eso estamos! ¡Sean bienvenidos!
M adrid, abril de 2012
Agradecimientos Me gustaría dar las gracias a mis hijos. Stephen y M athew M onk, por su interés y el ánim o que me han infundado m ientras escribía este libro, por sus útiles sugerencias y por las pruebas de cam po que han realizado de los proyectos. Tam poco habría podido escribir este libro sin la paciencia y el apoyo de Linda. Agradezco a Chris Fitzer el préstam o de su osciloscopio y el talante con el que se to m ó ... ¡que lo rom piera! Tam bién quiero dar las gracias a todos los “frikies” de M om ote por su interés en el proyecto y por su apoyo. Finalm ente, quiero agradecer a Roger Stewart y a Joya Anthony, de M cG racw -H ill, por su enorm e apoyo y entusiasm o, y con los que ha resultado un placer trabajar.
Introducción a s p l a c a s d e i n t e r f a z a r d u i n o proporcionan una tecnología de bajo coste y fácil de usar para crear
L
proyectos. En la actualidad pueden construirse toda una nueva generación de proyectos que pueden con trolarse desde un ordenador. En poco tiem po podrá
Llegados a este punto, puede que algunos estén pen sando en qué organización gubernam ental "top secret" tienen que colarse para adquirir una de estas placas. Sin em bargo, afortunadam ente, no es nece sario hacer nada especial para obtener uno de estos
disp o n er, entre o tro s, de un láser co n tro lad o m ediante un servo y m anejado por el ordenador, de
dispositivos. Ni siquiera tendrá que separarse de su
modo que los más traviesos ¡podrán poner el m undo
nentes electrónicos online. Puesto que A rduino es
a sus pies!
un diseño de hardw are de código abierto, cualquier persona es libre de tom ar los diseños y crear sus
Este libro le m ostrará cóm o conectar una placa Arduino a su ordenador, para program arla, y para
buscador favorito o de su distribuidor de com po
propios “clones” de Arduino y venderlos, por lo
que pueda conectarle todo tipo de com ponentes
que el m ercado de las placas es bastante com peti
electrónicos para crear proyectos, incluyendo el láser controlado por ordenador, m encionado ante riorm ente, un ventilador controlado por U SB , un
tivo. Una placa Arduino oficial cuesta alrededor de 23 € , y las llam adas "clon" suelen costar menos de 20 € .
arpa de luz, un registrador de tem peraturas U SB , un
El nom bre A rduino está reservado por los crea
osciloscopio para sonidos, y m ucho más. Con cada proyecto se proporciona el esquem a
dores originales. Sin em bargo, los diseños “clones” de A rduino con frecuencia llevan el nom bre duino
electrónico com pleto y detalles para su construc ción. La m ayoría se puede m ontar sin necesidad de
al final de su nom bre, com o por ejem p lo , Freeduino o D FR duino. El software para program ar Arduino es fácil de
soldar y sin herram ientas especiales. No obstante, los aficionados más avanzados tal
usar e igualm ente está disponible librem ente para
vez deseen transferir los proyectos desde la placa de
equipos W indow s. M ac y Linux sin coste alguno.
pruebas de inserción de com ponentes (protoboard) a una placa de circuito im preso definitiva, para lo
Arduino
que tam bién se proporcionan las instrucciones ade cuadas.
Aunque Arduino es un diseño de código abierto
Entonces, ¿qué es Arduino?
para una placa interfaz de m icrocontrolador, en rea lidad es más que eso, ya que abarca tanto las herra m ientas de d esarro llo de softw are que son
Bueno, A rduino es una pequeña placa de m icro-
necesarias para program ar la placa A rduino, com o
controlador con un puerto USB para conectar al
la propia placa. Existe una gran com unidad de afi
ordenador y diversos zócalos de conexión que se pueden conectar m ediante cableado a todo tipo de
cionados al m ontaje, program ación, electrónica e incluso de aficionados al arte dispuestos a com par tir sus conocim ientos y experiencia en Internet.
com ponentes electrónicos externos, com o m otores, relés, sensores de luz, diodos láser, altavoces, m icrófonos, etc. Se puede alim entar m ediante la
a la página oficial de Arduino (w w w .arduino.ee) (en
conexión USB del ordenador o con una pila de 9 V.
inglés) o a la página en español, w tvw .arduino.cc/.es
La placa se puede controlar directam ente desde el ordenador o program arla con éste y posteriorm ente
y descargue el software para M ac, PC o LINUX.
desconectarla para trabajar de form a autónom a.
Para com enzar a utilizar A rduino, vaya prim ero
Podrá incluso com prar una placa Arduino haciendo clic en el botón C om prar una placa A rduino o
xix
xx
3 0 Proyectos con A rd u in o
pasar algún tiem po con su buscador favorito o en
En las antiguas placas D iecim ila, había un
algún sitio de subastas en línea para encontrar opciones más económ icas. En el siguiente capítulo se proporcionan instrucciones paso a paso para la
puente ju m p er justo debajo del conector USB. Con el puente colocado en los dos pines superiores, la
instalación del software sobre las tres plataform as.
placa recibirá la alim entación eléctrica de la conexión USB. Si se conecta entre los dos pines
De hecho, existen diferentes diseños de placas
inferiores, la placa será alim entada por la fuente de
A rduino destinados a diferentes tipos de aplicacio nes. Todas las placas se pueden program ar desde el m ism o software de desarrollo de Arduino y, en general, los program as que funcionan en una placa,
alim entación externa conectada al conector de ali m entación inferior. En las placas más recientes
funcionan en todas. En este libro usam os indistintam ente las placas Arduino U N O y A rduino D uem ilanove, siendo
U N O y D uem ilanove, no existe este puente y la ali m entación cam bia autom áticam ente desde el USB al conector de 9 V cuando introducim os éste. La fuente de alim entación puede ser de cualquier tensión entre 7 y 12 voltios. Por lo tanto, una
cada una de ellas una actualización de las populares
pequeña pila de 9 V funcionará perfectam ente para
placas anteriores (la placa Diecim ila). La idea es
las aplicaciones portátiles. N orm alm ente, m ientras
resaltar que todas son com patibles y que para la eje
esté m ontando su proyecto, probablem ente la ali
cución de ios proyectos del libro pueden utilizarse indistintam ente cual-quiera de ellas. Duem ilanove
m ente desde el USB por razones de com odidad. C uando esté listo para cortar el "cordón um bilical" (desconectar el cable U SB ), seguram ente desee ali m entar la placa de form a independiente. Esto puede
significa 2009 en italiano, el año de su lanzam iento. UN O es la últim a versión publicada. El nom bre de referencia a las prim eras 10.000 placas que se habían fabricado. Las placas clones más com pati
hacerse con un adaptador o fuente de alim entación externa, o sim plem ente con una pila de 9 V conec tada a un cable adaptado al conector de alim enta
bles, com o las Freeduino, se han basado en los diseños originales (U N O , D uem ilanove, D iecim ila.
ción. En los bordes de la placa hay dos filas de conec-
etc.). La m ayoría de los proyectos de este libro fun
tores. La fila de la parte superior son en su m ayoría pines digitales (on/off), aunque cualquier pin m ar
cionan tanto con las placas o rig in ales U N O ,
cado con PW M puede ser utilizado tam bién com o
D uem ilanove o D iecim ila, com o con sus clones de
salida analógica. La fila inferior de conectores dis pone en su lado izquierdo de unos pines muy útiles
las antiguas Diecim ila (10.000 en italiano) hacía
diseño, aparte de un proyecto que utiliza la Arduino L ilypad. C uando esté realizando proyectos con una
con diferentes tensiones de alim entación, y entra
A rduino, necesitará descargar program as en la placa utilizando un cable USB entre su ordenador y la
das analógicas en el lado derecho. Los conectores están organizados de este modo para que las llam adas placas shields puedan enchu
A rduino. Ésta es una de las cosas más prácticas de
farse a la placa base de form a superpuesta. Pueden
la utilización de A rduino. M uchas placas m icrocontroladoras usan un hardw are específico de pro
adquirirse shields ya m ontadas para m uchos propó sitos diferentes, incluyendo: • C onexión a redes Ethernet • D isplays LCD y pantallas táctiles • X Bee (com unicaciones de datos inalám bricas)
gram ación para d escargar los program as al m icrocontrolador. En el caso de A rduino, todo está incluido en la propia placa. Esto tam bién tiene la pasar datos en un sentido y en otro entre la placa
• •
Sonido Control de m otores
A rduino y su equipo. Por ejem plo, se puede conec tar un sensor de tem peratura a la A rduino y hacer
• •
Seguim iento por GPS Y m uchas más
ventaja de que puede utilizar la conexión USB para
que
su
o rd en ad o r
le
diga
la
tem peratura.
In tro d u cció n
xxi
crear sus propios diseños de shields específicos.
desde el ordenador. La m ayoría de los proyectos de este libro se
Nosotros utilizarem os estas Protoshields en algunos
pueden construir sin necesidad de soldar; en su lugar,
de nuestros proyectos. Las shields suelen tener
utilizamos una placa de pruebas protoboard. Las
conectores que permiten
que las placas se puedan
placas protoboard consisten en un bloque de plástico
conectar unas encim a de otras. Por ejem plo, un
con agujeros y láminas m etálicas de conexión por
diseño podría tener tres capas: una placa Arduino en
detrás. Los componentes electrónicos se insertan en
la parte inferior, una shieid GPS conectada encim a,
los orificios de la parte superior. Además, no son caras. En el Apéndice hemos incluido una placa de
También puede usar placas shields básicas para
y una shieid display LCD en la parte superior.
pruebas que sirve para los propósitos de este libro.
Los proyectos Los proyectos de este libro son bastante diversos.
Sin em bargo, si desea m ontar sus diseños para que resulten perm anentes, el libro le muestra también
Com enzamos con algunos ejem plos simples con
cóm o hacerlo, utilizando una placa de circuito
LEDs estándar y con LEDs ultra brillantes Luxeon.
impreso para prototipos.
En el Capítulo 5 verem os diversos proyectos de
En el apéndice se han incluido fuentes de sum i
sensores para registrar la temperatura y medir la luz y la presión. La conexión USB a la placa Arduino
nistro de los com ponentes utilizados, junto con los n° de referencia de catálogo de algunos proveedores
sensor de estos proyectos y se las pasemos al ordena
especialm ente útiles. Lo único que necesitará además de estos com ponentes son una placa Arduino, un
dor, donde se pueden importar a una hoja de cálculo
ordenador, algunos cables y una placa de pruebas. El
hace posible que podam os tom ar las lecturas del
y obtener gráficos de los datos. A continuación, nos ocupamos de varios proyec tos que utilizan diversos tipos de displays de diferen tes tecnologías, incluyendo un panel alfanum érico
software para todos los proyectos puede descargarlo de la siguiente dirección web del autor: w w w ^rduinoevilgenius.com.
LCD de mensajes (de nuevo utilizando el USB para
Sin más preámbulos
trasm itir los mensajes desde el ordenador), así com o
Las personas a quienes les pierde la curiosidad no se suelen distinguir precisamente por su paciencia, por
LEDs multicolores y displays de siete segmentos. El Capítulo 7 contiene cuatro proyectos que utili
lo que en el próximo capítulo les mostraremos cóm o
zan el sonido, así com o un simple osciloscopio.
em pezar con Arduino lo antes posible. Este capítulo contiene las instrucciones para la instalación del soft
Tenemos un proyecto que hace sonar m elodías por un tono y el volumen del sonido cuando se desplaza la
ware y para program ar la placa Arduino, incluida la descarga del software de los proyectos, por lo que
mano sobre los sensores de luz. Esto produce un
tendrá que leerlo antes de poder em barcarse en los
efecto bastante parecido al fam oso sintetizador
mismos.
altavoz, y construim os un arpa de luz que cam bia el
Therem in. El proyecto final de este capítulo utiliza
En el Capítulo 2 echarem os un vistazo a algunos
un m icrófono como entrada de sonido. Se trata de un
de los conocim ientos esenciales que le ayudarán a
vúmetro o medidor de VU, que muestra la intensidad
crear los proyectos que se describen en este libro y para que pueda continuar desarrollando los suyos propios. La mayoría de la teoría que contiene el libro
del sonido en un display. Los últimos capítulos contienen una m ezcla de utiliza la placa Arduino Lilvpad y que indica la hora
está contenida en este capítulo, así es que si es del tipo de personas que sólo desea realizar los proyectos
de una extraña forma binaria que sólo podrán leer las
y, posteriorm ente, averiguar cóm o funcionan, quizá
proyectos. Entre otros, un original reloj binario que
mentes más brillantes, un detector de m entiras, un
prefiera, tras leer el Capítulo 1, elegir un proyecto y
disco giratorio para hipnotizar controlado por motor
com enzar su montaje. Y si se queda atascado siempre
y, por supuesto, el láser servo-guiado controlado
podrá utilizar el índice o leer algunos de los capítulos anteriores.
C A P Í T U L O
1
Arranque rápido
para las m entes curiosas más
placa reciba la alim entación de la conexión USB.
im pacientes. Ya tiene en sus m anos su nueva placa
Las nuevas placas A rduino U N O o D uem ilanove no
A rduino y está ansioso por ponerla a funcionar.
tienen este puente y seleccionan la fuente de ali
E
s t e es un c a p ít u l o
Por tanto, sin más dilación...
m entación autom áticam ente. Si todo funciona bien, el LED de la placa debe
Puesta en marcha
parpadear una vez cada dos segundos. La razón por
C uando se com pra una placa A rduino UNO o
gram a B fin k (parpadeo) ya instalado es para verifi
D uem ilanove, por lo general suelen venir con un
car que la placa funciona. Si la placa no com ienza a
program a Blink de m uestra preinstalado que hará
parpadear cuando se conecta, com pruebe la posi
parpadear el pequeño LED que trae integrado. La
ción del puente de alim entación (si lo tiene) y
Figura 1-1 m uestra una placa Arduino UNO con el
pruebe con otra entrada USB, si es posible en otro
LED encendido.
ordenador diferente, ya que algunas conexiones
la cual las nuevas placas Arduino tienen este pro
El LED (diodo em isor de luz) m arcado con una
USB sum inistran m ás corriente que otras. A dem ás,
L está conectado a uno de los zócalos de entrada-
si se hace clic en el botón Reset (reinicio) el LED
salida digitales de la placa. En concreto, está conec
debería parpadear m om entáneam ente. Si al pulsar
tado al pin digital 13, lo cual lim ita que éste sólo
Reset el LED no parpadea, puede ser tam bién que
pueda utilizarse com o salida, pero com o el LED
la placa no tenga preinstalado el program a Blink:
sólo utiliza una pequeña cantidad de corriente, toda
no se desespere, ya que, en cualquier caso, una vez
vía podem os conectar otras cosas en ese conector.
que esté todo preparado, vam os a instalar y m odifi
Todo lo que necesita hacer para que su A rduino
car ese program a en nuestro prim er proyecto.
funcione es proporcionarle la alim entación. La m anera más fácil de alim entarla es conectarla al puerto USB
(Bus Serie Universal) del ordenador.
N ecesitará un cable USB de conexión de tipo A a tipo B. Este es el cable que norm alm ente se utiliza para conectar un ordenador a una im presora.
Instalación del software A hora que ya tenem os la placa A rduino funcio nando, vam os a instalar el software para que poda mos m odificar el program a Blink (parpadeo) y en v iarlo a la placa. El proced im ien to exacto
Si está utilizando la placa antigua de A rduino, la
depende del sistem a operativo que esté utilizando
D iecim ila, asegúrese de que el puente (jum per) de
en su ordenador. Pero el principio básico es el
alim entación está en la posición USB. El puente
m ism o para todos.
debe conectar los dos pines superiores para que la 1
2
30 Proyectos con A rd uino
Instale el controlador USB que perm ite al orde
Seleccione la opción G uardar del diálogo, y
nador com unicarse con el puerto USB de la placa
guarde el archivo zip en su equipo. La carpeta con
Arduino. Este lo utiliza para la program ación y para
tenida en el archivo Zip se convertirá en su directo
enviar m ensajes.
rio
Instale el entorno de desarrollo A rduino, que es el program a que se ejecuta en el ordenador y que per
principal
A rduino,
así que
ahora
puede
descom prim ir (unzip) el archivo en C :\A rchivos de program a\A rduino.
mite crear los program as y descargarlos en la placa.
En W indows XP puede hacer esto haciendo clic
La página web de Arduino, www.arduino.cc/es para
con el botón secundario en el archivo zip para m os
la versión en español y www .arduino.ee ( inglés)
trar el menú de la Figura 1-3 y seleccionar la opción
contiene la últim a versión del software.
E xtraer
tod o.
Esto
abrirá
el
A sisten te
E xtracción, com o se m uestra en la Figura 1-4.
Instalación en W indows En la página web de Arduino (w w w .arduino.ee/es),
Descarga de archivos
vaya a la pestaña D escarga y seleccione la descarga para W indows. Esto iniciará la descarga del archivo zip que contiene el software de A rduino. tal com o se m uestra en la Figura 1-2. El softw are de Arduino no distingue entre las distintas versiones de W indows. La descarga debe funcionar para todas las versiones de W indows,
Aunque los « d n v o t procedente de Internet pueden set útiles, algixws arch-ca pueden leg a a dañar el equipo Si no confia en el ongen. no abra n guarde erte archivo ¿Cuáleselneaoo'?
desde XP en adelante. Las instrucciones que m os tram os son para W indows XP. Figura 1-2
Descarga el Software de Arduino para W indows
de
C apítulo 1
■
A rranque R ápido
3
Haga clic en Siguiente y, a continuación, m odi fique la carpeta para extraer los archivos en: C :\A rch ivos de p rogram a\A rd u in o com o se m uestra en la Figura 1-5. A continuación, haga clic otra vez en Siguiente. Esto creará un nuevo directorio para esta versión de Arduino (en este caso, la Arduino 1.0) en la car peta C:\Archivos de program a\A rduino-1.0. Esto le permite tener varias versiones de Arduino instala das al m ismo tiem po, cada una en su propia carpeta. Las actualizaciones de Arduino son bastante poco frecuentes e históricam ente siem pre se ha m antenido la com patibilidad con las versiones anteriores del software. Así que, a menos que exista una nueva característica del software que desea utilizar, o si
Figura 1-4
está teniendo problem as, no es en absoluto esencial
La o p ció n de m enú Extraer todo en W indow s.
m antenerse al día con la versión más reciente. ÉT Carpeta y opciones de extracción
Ahora que ya tenem os la carpeta Arduino en el lugar correcto, necesitam os instalar los controlado-
General
Avanzado
Carpeta de destino (si no existe, te cieetál
Modo acluatea»
Disco local |C I O ÍAVG ü O Archivos de programa
(♦) Extraer y reemplazar los ficheros O Extrae* v actualiza* los licheros
■S O W4221a93ffad44b33d7 $ £ 3 BANDEJA E ¡3 Document: and Settmgs üb Intel
O Actualizar sólo ficheros existentes Modo sobrescriba 0
Conftmar $obtescr#u»a
®
Open
O Omrtí ios ficheros existentes O Renombrar automáticamente
arduin
Search... Explore
Va»ios j ¡ Extrae* en subcarpetas □
Conserva tos ficheros dáñalos
í 1Mostrar ficheros en el Explorador
Extract All.
Guvdar opciones
Open With Send To Cut Copy
Si ^ du
ProgramFées WINDOWS WTablet ACER DATA (D:| Unidad DVD-RAM (E l 'S i i-¿) Documentos compartidos Documentos de JAVIER Mis sibos de red CURSO OCTUBRE 2010
31 LfcJ a £ -¿3 [
Figura 1-5
MSOCache
&o PIA
O S obre sa lir sin confirmación
Ace ptar
Ayuda
Establecer el d ire c to rio para la extracción.
res USB. Si está usando una placa Arduino U N O , solo necesita inform ar a W indows sobre el nuevo
Create Shortcut
hardware. A sí es que conecte la placa A rduino y
Delete
espere hasta que W indows com ience el proceso de
Rename
instalación del driver. D espués de un tiem po el pro ceso fallará y W indows anunciará que no se puede
Properties
instalar el driver. Luego pulse Inicio/Panel de controI/Sistem a/H ardw are, y abra el A dm inistrador de dispositivos de W indows.
— Figura 1-3
B usque O tros d sip ositivos/U S B d eviee. H aga E xtracción del so ftw a re de A rd u in o en W indow s.
click con el botón derecho sobre Arduino UNO
4
30 Proyectos con A rd uino
Asistente pora a c tu a liz a c ió n de hardw are
A sistente p ara a c tu a liz a c ió n de hardw are
Elija tus opciones de búsqueda e instalación
Asistente para actualización de hardware E ste a s ie n te le ajudaié a nsíaJar software para
© B u s c a r el ccrtrolador más adecuado en estas ubicaciones
U?e las agientes casias de vesicación paca imitar o e*pandf ‘a búsqueda predeterminada, la cual n d uye rutas locales y medns exiiaíbtes. Se instalará el mejor controlador que se encuentre
USB Oevice
O Buscar en medios ertbaibte lásqude. CO-ROM.. | .•)
Si tu hardware viene con un CD o disquete de instalación, insértelo ahora
0 Incluir esta ubicación en la butqueda ¡C XAichivos de proyamaXardur» 1 OXarduino 1 OXdrivets
¿Qué desea gue haga el asistente? 0
v
[
Enammai
)
O No buscar Setecconaré el controlador que se va a instaiar
Instalar automáticamente el sollwafe (recomendado)
Medante esta opción podrá seleccionar de una fcla el contioiadcx del dwpotrtrvo. W n d o w j no puede garanlear que el controlador que e fe sea el más apresado para su hardware
O Ind-alar desde in a ista o ubicación específica (avanzado)
Haga cic en Siguiente para continuar
^ S g i a ii t e > J
Figura 1-6
[
Cancelar
|
]
Figura 1-7
Asistente de Nuevo Hardware
Cancelar
|
E stab le ce r la u b ic a c ió n de los c o n tro la d o re s USB.
Encontrado de W indow s.
(Com xx) y elija actualizar controlador. Elija
En el caso de las placas más antiguas, siga las
Instalar desde una lista específica y le saldrá el
instrucciones específicas para cada m odelo que se
directorio donde está instalado A rduino, que debe
indican en w w w .arduino.ee/es.
ser algo parecido a C:\A rchivos de programaX
Observe que no hay un acceso directo creado
arduino-l.OXarduino-l.OXdrivers. C uando esté en
para el program a Arduino. por lo que, si lo desea,
la
archivo
puede seleccionar el icono de program a A rduino.
'A rd u in o U N O .in f\c o n lo que W indows finalizará
hacer clic con el botón secundario y crear un acceso
la instalación del driver.
directo que luego puede arrastrar a su escritorio.
carp eta
d rivers
seleccione
el
a rd u in o 1 .0 A rc h iv o
Edición
A trá s
Ver
-
F a vorfco» j^
y
H e rra m ie n ta s 1 B úsqueda
Ayuda C a rp e ta s
-
D ire cció n [ ¿ 3 C :\A rc h iv o s d e p ro g ra rn a \a rd u ln o -l.Q \a rd u in o -l.Q
T a r e a s d e a r c h iv o y c a r p e t a J
P
C re a r n u e v a c a rp e ta
d riv e rs
Publicar e s ta c a rp e ta e n W e b exam ples
C o m p a rtir e s ta c a rp e ta
O t r o s s it io s
i)
arduino-1.0 1 .0 Mts documentos
re fe re n c e
D o cu m e n to s c o m p a rtid o s ^
^
Mi PC Mis sitio s d e re d
a rd u in o .e x e
cy g ic o n v -2 .d fl
hbusb0.dll 0 . 1. 12.1 LibU SB-W in32 - DLL
c y g w ln l .dll 1 0 0 5 .2 3 .0 .0 C y g w in ® P Q 5IX E m ulation DLL
revislons.txt D o cu m e n to d e te x to 28 KB
rx tx S e rid .d ll
3,67 MB
15 o b je to s
Figura 1-8
Inicio del software Arduino desde Windows.
C apítulo 1
Las dos secciones siguientes describen este m ism o procedim iento para la instalación en equipos
«n O
■
A rranque Rápido
5
■ ¡ ■ ■ ■ Í H Í L - í Arduino 3 ítems. 91 MB avallablí
X
M ac y Linux, por lo que, si es usuario de W indow s, puede om itir estas secciones.
Instalación en Mac OS X
Arduino
El proceso para instalar el softw are Arduino en M ac es m ucho más fácil que en el PC. C om o antes, el prim er paso es descargar el archivo. En el caso del M ac, se trata de un archivo de imagen de disco. U na vez descargado, m ontará la imagen del disco y abrirá una ventana F inder, com o se m uestra en la Figura 1-9. La propia aplicación Arduino se instala de la form a habitual de M ac, arrastrándola desde la imagen de disco a la carpeta A plicaciones. La im agen de disco tam bién contiene dos paquetes de instalación de los controladores USB (consulte la Figura 1-10). Asegúrese de selec cionar el paquete para la arquitectura de su sistem a. A m enos que esté usando un M ac construido antes de m arzo de 2006, tendrá que usar la versión Intel en lugar de la versión PPC. C uando ejecuta el instalador, puede sim plem ente hacer clic en C ontinuar hasta llegar a la pantalla Seleccionar disco, donde debe seleccionar el disco duro antes de hacer clic en Continuar. C om o el softw are instala una extensión de kem el, le pedirá
^
-^0
^
FTDI Drivers for PPC Macs (2_l_10)pkg
Figura 1-9
FTDI Drtvers ío r Intel Macs (2_2_10l pkg
Instalación del s o ftw a re A rd u in o en Mac OS X.
que introduzca su contraseña antes de com pletar la instalación. A hora puede buscar e iniciar el softw are Arduino en la carpeta A plicaciones. Com o se va a utilizar con frecuencia, si lo desea, puede hacer clic con el botón secundario en su icono en el dock y configurarlo para G uardar en Dock. A hora puede pasar por alto la siguiente subsección, que es para la instalación de LINUX.
Instad FTDfUSBSerialDriver Kemel Extensión W elcom e to th e FTD IU S B S erialD river Kernel Extensión In s ta lle r
You will be guided through the steps necessary to install this software.
Go Back
(
Continué ^
//. Figura 1-10
Instalación de los controladores USB en Mac OS X.
6
30 Proyectos con A rd uino
Instalación en LINUX Hay m uchas versiones diferentes de LIN U X , por lo que, para obtener la inform ación más reciente, con sulte la página web de A rduino. Sin em bargo, para la m ayoría de las versiones de LIN U X , la instala ción es muy sencilla. Probablem ente LINUX ya tendrá instalados los controladores USB, las biblio tecas A V R -G C C y el entorno Java que necesita el softw are A rduino. Así es que, si tiene suerte, todo lo que necesita hacer es descargar el archivo TG Z para el software A rduino desde la página web de A rduino http://w w w .arduino.cc/es/, extraerlo, y ese será su directorio de trabajo A rduino. Si, por otro lado, no tiene tanta suerte, com o usuario de LIN UX probablem ente ya estará habi tuado a buscar apoyo de la com unidad de LINUX para configurar el sistem a. Los pre-requisitos que necesitará instalar son Java runtim e 5 o posterior y las últim as bibliotecas A V R -G C C . Introduciendo en Google la frase "Installing A rduino on SUSE LINUX" ("Instalar arduino en SUSE LIN U X ") o cualquiera que sea su versión de LIN UX encontrará, sin duda, m ucho material de * ayuda.
Configuración del entorno Arduino Sea cual fuere el tipo de ordenador que utiliza, ya debe tener el softw are Arduino instalado en el m ism o. A hora debem os realizar algunos ajustes. Tenem os que especificar el nom bre del sistem a ope rativo que está conectado al puerto USB para com unicarse con la placa A rduino, y tenem os que especificar el tipo de placa que estam os utilizando. Pero, prim ero, es necesario conectar A rduino al equipo m ediante el puerto USB o no podrá selec cionar el puerto serie.
Arduino
File
Edit
Sketch
El puerto serie se establece desde el menú H erram ientas, com o se m uestra en la Figura 1-11 para M ac y en la Figura 1-12 para W indows; la lista de puertos para LINUX es sim ilar a la de Mac. Si utiliza m uchos dispositivos USB o Bluetooth con M ac, es probable que tenga bastantes opciones en esta lista. Seleccione el elem ento de la lista que com ienza con dev/tty.usbserial. En W indow s, el puerto serie se puede configurar a C O M 3. Desde el menú Tools. podem os seleccionar la placa que vam os a utilizar, com o se m uestra en la Figura 1-13. Probablem ente será la placa UNO pero si estuviera utilizando alguna de las placas más anti guas, seleccione la opción correspondiente.
Descarga del software del proyecto El software de los sketches de este libro se puede descargar de la página web del libro. La descarga es m enor de un m egabyte. por lo que tiene sentido des cargar el software para todos los proyectos, incluso si tiene intención de utilizar sólo algunos de ellos. P ara d escarg arlo s, vaya a la página web "w w w .arduinoevilgenius.com " (en inglés) y haga clic en D ow nloads en la parte superior de la panta lla. Haga clic en el enlace evil_genius.z¡p para des cargar un archivo Zip con todos los proyectos. Si está utilizando W indows, descom prim ir el archivo en M is DocumentosXArduino. En M ac o Linux, debería descom prim irlo en D ocum entos/A rduino en el directorio local. Una vez que los archivos están instalados, podrá acceder a los m ism os desde el m enú F ile I Sketchbook del software A rduino.
Help Auto Format Archive Sketch Fix Encoding & Reload Board Serial Port Burn Bootloader
Figura 1-11
Configuración del puerto serie del Mac.
/dev/tty.K610i-SerialPort-l
/dev/cu.K 610i-SerialPort-l /dev/tty.Bluetooth-PDA-Sync /dev/cu.Bluetooth-PDA-Sync /dev/tty.Bluetooth-M odem /dev/cu.Bluetooth-M odem
«sBQ
0 * >ketch_oc(28a | Arduino 0017 | File
Edit
Sketch Ctrl+T
Auto Format
@ ©
Archive Sketch Fl*
E n c o d r i9
81 R e lo a d
Board
► COM3
Burn 8ootloader
Figura 1-12
Selección de p u e rto en W in do w s con placas D uem ilanove y versión de so ftw a re 17 o 19.
Serial Port
► •
Burn Bootloader
►
Arduino Mega Arduino Mlni Arduino BT lilyPad Ardumo w / ATmega328 lilyPad Arduino w / ATmegal68 Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328 Arduino Pro or Pro Mini (3.3V, 3 MHz) w / ATmegal68 Arduino NG or older w / ATmegal68 Arduino NG or older w / ATmegaS
Figura 1-13
Selección de placa en W in do w s para placas D uem ilanove o anteriores.
7
8
30 Proyectos con A rd uino
incluye com o ejem plo al in stalar el en torno
Proyecto 1
Arduino. Así que podem os cargarlo usando el menú
LED intermitente
File, com o se m uestra en la Figura 1-14.
Una vez com probado que hem os instalado correcta
La m ayor parte del texto de este sketch es en
mente el softw are, ¡por fin podem os em pezar con
form a de com entarios. Los com entarios no son real
nuestro prim er proyecto! En realidad, no es tan
mente parte del program a pero explican lo que está
em ocionante, pero tenem os que em pezar por algún
haciendo el program a a cualquiera que lo lea.
sitio, y con éste nos aseguram os que tenem os todo
Los com entarios pueden ser com entarios de una
configurado correctam ente y listo para utilizar nues
sola línea que com ienzan tras // y continúan hasta el
tra placa Arduino.
final de la línea, o pueden ser com entarios de varias
Vamos a m odificar el esquem a Blink de ejem plo que viene con Arduino. Vamos a aum entar la fre
líneas que com ienzan con /* y finalizan algunas líneas más abajo con */.
cuencia de interm itencia y, a continuación, instalar
Si se elim inaran todos los com entarios de un
el sketch (program a) m odificado en nuestra placa
sketch, éste seguiría funcionando exactam ente del
A rduino. En vez de parpadear lentam ente, nuestra
m ism o m odo, pero la
placa hará parpadear el LED rápidam ente. Luego,
perm ite explicar qué es lo que hace el program a en
adelantarem os un paso más utilizando un LED y
cada m om ento.
resistencia externos de m ayor tam año que el que viene incorporado en la placa.
utilización de com entarios
A ntes de em pezar, son necesarios algunos com entarios sobre el vocabulario. La com unidad Arduino utiliza la palabra sketch en lugar de "pro gram a", así que, de ahora en adelante, voy a refe
Software
rirm e
a
nuestros
program as
A rduino
com o
En prim er lugar, tenem os que cargar el sketch
sk etch es. En ocasio n es, puede que lo llam e
Blink en el softw are A rduino. El sketch Blink se
"código". Código es el térm ino em pleado por los program adores para referirse a una sección de un
COMPONENTES Y EQUIPO
program a o incluso com o térm ino genérico de lo
Descripción
que se escribe cuando se crea un program a. Por eso,
Apéndice
alguien podría decir: "He escrito un programa para
Placa A rd u in o UNO o D uem ilanove o sim ilar DI
LED rojo de 5 m m
R1
Resistencia de 270 O 0,5W
1 23 6
hacer eso ", o podría decir: "He escrito un código para hacer eso". Para m odificar la velocidad a la que parpadea el LED , tenem os que cam biar el valor del retardo
■
■ ■
De hecho, pueden servir prácticamente cualquier LED y resistencia de 270 Q que haya disponibles. No hacen falta más herramientas que un par de alicates o cortacables. El número que aparece en la columna de la derecha en Apéndice se refiere al listado de componentes del Apéndice, que enumera las referencias de pieza de varios distribuidores.
(delay), de m anera que en los dos lugares del sketch donde tenem os:
delay(lOOO);
Capítulo 1
Arduino
| Edit
Sketch
Tools
3€N New Open... 330 Sketchbook ► Examples ► 3€W Cióse Save 03€S Save As... &U Upload to l/O Board
B lin k
I 1 Analog Communication Control ¡
&P
By D a v id C u a r t i e l l e s h t t p : / / a r d u i n o . c c / e n / T u t o r i a l / B 1 i nk b a se d on an o r g i n a l by H. B arragan f o r t h e W irtn g i / o
le d P ín =
13;
Figura 1-14
9
Help h
C r e a te d 1 Oune 2 0 0 5
in t
A rranque R ápido
8 i Arduino 0017
The c i r c u t t :
Page Setup Print
■
BlinkWithoutDelay Button Debounce Melody StateChangeDetection
Display Sensors Stubs EEPROM Ethernet Firmata LiquidCrystal Matrix Servo Stepper Wire
P
/ , / LED c o n n e c te d t o d i g i t a l p in 13
Carga del esquem a Blink de ejem plo.
cam biar el valor entre paréntesis a 200 para que
botón U pload (cargar) en Arduino. Esto se m uestra
aparezca:
en la Figura 1-15. Si todo es correcto, habrá una breve pausa y luego los dos LED de color rojo de la placa com enzarán a parpadear rápidam ente una vez
del ay (200);
que el sketch se haya cargado en la placa. Esto debe tardar de 5 a 10 segundos.
Esto cam biará el retardo (delay) entre encender
Si esto no ocurre, com pruebe los parám etros
y apagar el LED desde 1000 m ilisegundos (1
puerto serie y tipo de placa com o se ha descrito en
segundo) a 200 m ilisegundos (1/5 de un segundo).
las secciones anteriores.
En el C apítulo 3 explorarem os este sketch con más detalle, pero, por ahora, vam os a cam biar el retardo y a descargar el nuevo sketch en la placa Arduino. Con la placa conectada a su equipo, haga clic en el
^
Figura 1-15
Arduino
File
Edit
Sketch
Carga del sketch en la placa Arduino.
C uando se haya instalado el sketch com pleto, la placa se reiniciará autom áticam ente y, si todo ha funcionado, verá el LED del puerto digital 13 p ar padear m ucho más rápidam ente que antes.
Tools
Help
10
30 Proyectos con A rd u in o
Hardware Por el m om ento, esto no parece realm ente electró nica, ya que el hardware va todo incluido en la placa Arduino. En esta sección, vam os a agregar un LED externo a la placa. Los LED no se pueden conectar directam ente a la alim entación sin más; deben tener conectado una resistencia que limite la corriente. Am bos com po nentes están disponibles en cualquier distribuidor de com ponentes electrónicos. Los códigos de pedido de algunos com ponentes para diversos proveedores se detallan en el A péndice. Los conectores de la placa Arduino están dise ñados para que se le conecten directam ente encim a las llam adas placas shieid. Sin em bargo, para hacer m ontajes de prueba no definitivos tam bién se pueden insertar directam ente en los zócalos los cables o las patillas de contacto de los com ponentes electrónicos. La Figura 1-16 m uestra el esquem a electrónico de un LED conectado a la placa Arduino. Este tipo de diagram a o esquem a electrónico utiliza sím bolos especiales para representar los com ponentes electrónicos. C om o vem os, el del LED se parece bastante a una flecha, lo que indica que los diodos em isores de luz (LED ), al igual que el resto de los diodos, sólo perm iten que la com ente
fluya en una dirección. Las flechas pequeñas que aparecen al lado del sím bolo de diodo LED indican que em ite luz. Las resistencias se representan com o un rectán gulo. Las resistencias se dibujan tam bién a m enudo com o una línea en zigzag. El resto de las líneas del diagram a representan las conexiones eléctricas entre los com ponentes. Estas conexiones pueden ser trozos de cable o pistas conductoras en una placa de circuito im preso. En este caso, éstas serán los ter m inales o patitas de los com ponentes. P odem os conectar los com ponentes d irecta mente a los zócalos de Arduino entre el pin digital 12 y el pin G N D , pero prim ero tenem os que conec tar una de las patillas del LED a la otra patilla de la resistencia. No im porta cuál de las patillas de la resistencia se conecta al LED; sin em bargo, el LED debe conectarse de modo correcto. El LED tendrá una pata ligeram ente más larga que la otra. La pata más larga es la que debe conectarse al pin digital 12 y la más corta se conecta a la resistencia. En el caso de los LEDs y otros com ponentes se utiliza la conven ción de que el term inal más largo es el positivo. Para conectar la resistencia al term inal o pata más corta del LED, separar con cuidado las dos patitas y liar la más corta alrededor de una de las patas de la resistencia, com o se m uestra en la Figura 1-17.
Digital Pin 12
A continuación, introducir la pata más larga del LED (+) en el pin digital 12 y la patilla libre de la
LED Rojo R12
Arduino UNO
GND Figura 1-16
Esquema e lé c tric o de un LED co n e cta d o a la placa Arduino.
Figura 1-17
Un LED c o n e cta d o en serie con una resistencia.
C apítulo 1
■
A rranque Rápido
POWER
Figura 1-18
11
A.NALOC
El LED co n e cta d o d ire cta m e n te a la placa A rduino.
resistencia en uno de los dos zócalos m arcados G N D . Esto se m uestra en la Figura 1-18. A veces ayuda doblar ligeram ente el extrem o del conductor de m anera que entre más firm em ente en los zócalos. Ahora podem os m odificar nuestro sketch para utilizar el LED externo que acabam os de conectar. Todo lo que tenem os que hacer es cam biar el sketch para que utilice para el LED el pin digital 12 en lugar del 13. Para ello, debem os cam biar la línea:
int ledPin = 1 3 ; // LED conectado al pin digital 13 para que indique: int ledPin = 12; // LED conectado al pin digital 12
A hora cargue el sketch haciendo clic en el botón Upload To lO Board (cargar en tarjeta de E/S) de la m ism a form a que lo hizo cuando m odificó la velocidad de los destellos.
Placa de pruebas de inserción de componentes (protoboard) Em palm ar com ponentes retorciendo entre sí los ter m inales de los m ism os sólo es práctico cuando se trata de conectar un único LED . Las placas o m ódulos de prueba, tam bién llam adas placas de inserción de com ponentes o protoboard , nos perm i ten construir com plicados circuitos sin necesidad de soldaduras. De hecho, es una buena idea construir prim ero todos los circuitos en una placa de pruebas hasta conseguir que funcione como queremos, y, posteriorm ente, pasarlo a una placa de circuito im preso soldada una vez que el m ontaje es defini tivo. Un m ódulo protoboard está form ado por un bloque de plástico con agujeros en la parte superior y lám inas m etálicas de conexión en la parte inferior. Los com ponentes electrónicos se insertan a través de los orificios de la parte superior. Por debajo de los orificios de la placa de pruebas hay tiras de conectores, de form a que todos los agu-
12
3 0 P royectos con A rd uino
' • l ** DIGITAL(PW M— )* 3
- •• „ m
(SO(y.SQ)wB
. n « M
A R D O íN O
4 ir»» AWUOW.CC
t Z :■í 'i - «
Figura 1-19
• I l i l i l í ■t * « > ■- » r,* I t I
,
— I t
K *
*
^ • N I I I I I 9 t a' IV«II«I«I
•
'
9 9 3 ift 8 • K l l l t l l l l l l t i v l t BBI » I • aI lllilllllllllliiiilliilii i
l
» » •
i
t
i
» » ■ i
> i
> » « r
« < i
•
i
> «
-4A0C XN i i ALT
• • • ■m • f • • • mmmww • a • a ■
POW ER ftKALOCIH^U Uj ' ® r- Nn t en1** < < < « « <
B I B I
I • ■ B
P royecto 1 en la placa de pruebas.
jeros de una m ism a tira están conectados entre sí.
zontales. Las conexiones de la parte de atrás de
Las tiras están separadas por un espacio que dis
estas tiras largas discurren perpendiculares a las
curre entre ellas para que los circuitos integrados
tiras de conexiones norm ales (verticales) y se utili
que vienen en form ato dual-in-line se puedan inser
zan para sum inistrar la tensión de alim entación a los
tar sin que los contactos que se encuentren en la
com ponentes de la placa de pruebas. N orm alm ente,
m ism a fila se cortocircuiten entre sí.
hay una para tierra (0 V o G N D ) y una para el sum i
Podem os m ontar este proyecto en una placa de
nistro de voltaje positivo (generalm ente 5 V). Como
pruebas en lugar de em palm ar los com ponentes
las tiras horizontales para la alim entación sólo
m ediante retorcim iento de sus patillas. En la Figura
llegan hasta el centro de la placa, hem os puesto
1-19 se puede v e rla placa protoboard con los com
unos cables de unión con la otra m itad para que la
ponentes insertados. La Figura 1-20 perm ite ver con
alim entación tam bién llegue a la otra mitad de la
claridad el conexionado interno de la placa de prue
placa.
bas y la posición de los com ponentes.
Adem ás de la placa de pruebas, necesitará algu
N otará que en los bordes de la placa de pruebas
nos cables de hilo rígido y unos pelacables o alica
(parte superior e inferior), hay dos largas tiras hori
tes para cortar y elim inar el m aterial aislante de los extrem os del cable. Es una buena idea tener al
; - BBBBBSir
}—' “
W í ajg’t ■*
OFDtSuino
*■ •
f‘ ^ 53 t í £ Íís¿jj sjí < fem I M ¡ —
s—
>0000 ooooo ooooo ooooo ooooo OOOOO OOOOO OOOOO o o o o o
*
OCCCOOCí. . • ^ . l O O C C O C O O C C C C O O O C ot
:: Ye»‘
OOOOOOO
8 Í O 0 O O O O O O O O O O Ó O O G OOOOOOOCl
¡OCOCOCCCCCCCOOOCOCOOCOCOO ¡ C O O O C O O O O C O O O O O C O O O O O --------lOOOOOCOOO OOOOOOCOGO 0 0 ¡OCOOOCCOO OOOOOOCOOO o c o c o o o c o o n c o o o o o c c o o ooc
H it
5V
GND
'_ , m.í l o - ■ o o o o o o c d g o o o c c o o o o o o o # | » H l l l i m : O C G O u 2 n . O O C j J o | O C C O O O G C O O Q O O O O O r ------------
J-
OuMilanov*1* -' «5*
..
r
ooooB OOOO'
000000 COOOOOO OO O O O O o )OCCOÓO
a
> 000 OOOOO OÉbckOO OOOOO OOOOO «OOOO OOOOO OOOOO OOOOO OOOOO i o o o o o o o o o oodfcbo 0 0 0 0 0 o o o o * — # o o o o o o o o o o o o o o o o o o o o o o o o a s m
m
Diseño de la placa de pruebas del P royecto 1.
5V GND
C apítulo 1
■
A rranque R ápido
13
m enos tres colores diferentes: rojo para los cables
Lo m ejor es usar una placa de pruebas de un tam año
conectados en el lado positivo de la alim entación,
razonable y ponerle encim a la placa A rduino. Si no
negro para el negativo, y algunos otros colores
quiere que esta conexión sea perm anente utilice un
(naranja o am arillo) para el resto de conexiones.
poco
Esto hace que sea m ucho más fácil entender el
em bargo, puede que le resulte más fácil dedicar una
de
m asilla
ad h esiv a
para
pegarla.
Sin
diseño del circuito. También puede com prar un
placa Arduino para que sea su placa de diseño y
estuche de cables de hilo rígido en diversos colores
quiera dejarla conectada perm anentem ente a la
ya preparados. Tenga en cuenta que no es aconseja
placa de pruebas.
ble utilizar cable flexible, ya que tenderá a abrirse cuando intente m eterlos en los agujeros de la placa de pruebas. En el Apéndice se incluyen posibles com ercios donde adquirir estos m ateriales. Podem os enderezar las patitas del LED y de la resistencia y conectarlos en una placa de pruebas.
Resumen Hemos creado nuestro prim er proyecto, aunque sea m uy sim ple. En el siguiente capítulo obtendrem os un poco m ás de inform ación sobre A rduino antes de pasar a otros interesantes proyectos.
C A P Í T U L O
2
Un recorrido por Arduino
nos fijarem os en el hardw are de
datos, unos cuantos kilobytes de m em oria EPRO M
la placa Arduino y del m icrocontrolador que con
(ROM program able borrable) o de m em oria Flash
tiene en su corazón. De hecho, la placa básicam ente
para contener nuestros program as, y tiene pines de
sólo presta apoyo al m icrocontrolador, extendiendo
entrada y salida. Estos pines de entrada/salida son
los pines de los conectores para que pueda conectar
los que conectan el m icrocontrolador con el resto de
hardw are en ellos y proporcionar un enlace USB
nuestra electrónica.
En
e s t e c a p ít u l o ,
para descargar'sketches, etc.
Las entradas pueden leer señales digitales (¿el
Tam bién aprenderem os algunas cosas sobre el
interruptor está abierto o cerrado?) y analógicas
lenguaje C usado para program ar la placa A rduino,
(¿cuál es la tensión en un pin?). Esto nos permite
algo sobre lo que profundizarem os en capítulos pos
conectar innum erables tipos de sensores de luz,
teriores cuando com encem os algunos proyectos de
tem peratura, sonido, etc.
trabajo práctico. A unque este capítulo en algunos m om entos
Las salidas tam bién pueden ser analógicas o digitales. A sí, se puede establecer que un pin esté
pueda resultar un poco teórico, le ayudará a enten
activado o desactivado (5 V o 0 V) y esto puede
d er el fu n cionam iento ‘de los proyectos. Sin
encender o apagar los LED directam ente, o se puede
em bargo, si lo que prefiere es avanzar con sus pro
usar la salida para controlar dispositivos m ás poten
yectos, puede sólo echarle un vistazo.
tes, com o m otores. También pueden proporcionar tensión de salida analógica. Es decir, se puede fijar
Microcontroladores
la salida de un pin a una determ inada tensión, lo que
El corazón de A rduino es un m icrocontrolador. En
permite controlar la velocidad de un m otor o el
realidad, el resto de la placa se ocupa de facilitar la
brillo de una bom billa, por ejem plo, en lugar de solo
alim entación y perm itir que se com unique con el
encenderlo o apagarlo.
ordenador al que está conectado. cuando com pram os uno de estos pequeños equipos
¿Qué hay en una placa Arduino?
para utilizar en nuestros proyectos?
En la Figura 2-1 se m uestra uno de los tipos de placa
E ntonces, ¿exactam ente qué es lo que nos dan
La respuesta es que lo que recibim os es un
A rduino, en este caso una placa A rduino UNO.
pequeño ordenador en un chip. Tiene todo y más de
Echem os un vistazo rápido a los diversos com po
lo que contenían los prim eros ordenadores dom ésti
nentes de la placa.
cos. D ispone de un procesador, un kilobyte de RAM (m em oria de acceso aleatorio) para contener
15
16
30 P royectos con A rd uino
Fuente de alim entación
cual, 5 V se convirtió en el estándar de tensión en
D irectam ente debajo del conector USB se encuen
electrónica digital.
tra el regulador de tensión de 5 V. Regula a 5 V
En nuestros días, el tipo de puertas lógicas utili
estabilizados cualquier tensión (entre 7 y 12 voltios)
zado en los chips ha cam biado y ahora son m ucho
que se sum inistre desde eJ conector de alim enta
más tolerantes con las diferentes tensiones.
ción.
El chip regulador de tensión de 5 V de nuestra
5 V (junto con 3 V, 6 V, 9 V y 12 V) es una de las
placa es bastante grande para ser un com ponente de
tensiones estándar en electrónica. 3, 6 y 9 V son
m ontaje en superficie. Esto es así para que pueda
estándar debido a que la tensión que se obtiene de
disipar el calor necesario para regular la tensión a
una sola pila alcalina es 1,5 V, y todos ellos son
una corriente razonablem ente alta, que sirva para
prácticos m últiplos de 1,5 V, que es lo que se
controlar los com ponentes electrónicos conectados a la placa.
obtiene cuando se colocan en "batería" o en serie dos, tres, seis u ocho pilas de 1.5 V. Si es así, se preguntará ¿entonces, por qué 5 V?
Conexiones eléctricas
Esa cifra no se puede conseguir utilizando pilas de
A continuación, veam os los conectores de la parte
1,5 V. Pues bien, la respuesta se debe al hecho de
inferior de la Figura 2-1. C om o puede ver, cada
que en los prim eros días de la inform ática, se crea
patilla está identificada con su nom bre impreso
ron un conjunto de chips, cada uno de los cuales
junto a cada uno de los pines.
contenía puertas lógicas. Estos chips usaban una
El prim ero es Reset (reiniciar). Esto hace la
llam ada T T L (T ran sisto r-T ran sisto r
m ism a función que presionar el botón Reset en
Logic, lógica transistor-transistor), que era un poco delicada en cuanto a sus requisitos de tensión y
A rduino. Bastante parecido a reiniciar un PC, reinicia el m icrocontrolador, haciendo que com ience su
requería una tensión entre 4.5 V y 5.5 V. Con lo
program a desde el principio. El pin Reset perm ite
tecn o lo g ía
Capítulo 2
reiniciar el m icrocontrolador m om entáneam ente estableciendo este pin alto (conectándolo a +5V). El resto de los pines de esta sección proporcio nan distintas tensiones (3.3 V, 5 V, G N D , y 9 V), tal
■
Un re co rrid o p o r A rd u in o
17
■ La altu ra del agua (o si se p re fiere , la presión generada por la bom ba). Esto sería com o la tensión o voltaje en electrónica. ■ La resistencia al flujo de agua ofrecida por la
com o aparece indicado. G N D , o tierra, significa
constricción de la tubería.
cero voltios. Es la tensión de referencia con la que
C uanto m ás potente sea la bom ba, m ás alto
se com paran de form a relativa el resto de tensiones
podrá bom bearse el agua y m ayor será la corriente
de la placa.
que fluye a través del sistem a. Por otro lado,
Y, llegados a este punto, sería conveniente recor
cuanto m ayor sea la resistencia de las tuberías,
dar al lector la diferencia entre tensión y corriente.
m enor será la corriente.
No existe una analogía perfecta para explicar el com portam iento de los electrones en un cable, pero
En el lado derecho de la Figura 2-2, podem os ver el equivalente electrónico de nuestras tuberías.
el autor cree que lo más parecido a esto es el símil
En este caso, la corriente es en realidad una
hidráulico, especialm ente apropiado para explicar
m edida de cuántos electrones fluyen por un punto
los conceptos de tensión, corriente y resistencia. La
por segundo. Y sí, la resistencia es la resistencia u
relación entre estos tres parám etros se llam a Ley de
oposición al flujo de los electrones. En lugar de altura o presión, tenem os el co n
O hm . La Figura 2-2 resum e la relación entre tensión,
cepto de tensión. La parte inferior del diagram a se
corriente y resistencia. La parte izquierda del
encuentra a 0 V, o tierra, y hem os indicado que la
dibujo m uestra un circuito de tuberías, donde la
parte superior del diagram a está a 5 V. Por lo que
parte superior está m ás alta que la parte inferior. Por lo que, naturalm ente, el agua ñ u irá desde esa
la corriente que fluye (I) será la diferencia de ten sión (5) dividida po r la resistencia R.
parte superior a la parte inferior. Dos factores
La Ley de O hm usualm ente se escribe com o
determ inan la cantidad de agua (la corriente) que
V = 1 x R. N orm alm ente, sabem os lo que vale V e intenta
p asa p o r c u a lq u ie r punto del circ u ito en un
m os calcular R o l , por lo que podem os hacer una pequeña reorganización para presentarlo de form a
m om ento dado:
Intensidad
5 metros
t
Intensidad (I)
Resistencia al paso de comente
t Figura 2-2
5V
Resistencia (R)
l La ley de Ohm
0 metros
ov
18
30 Proyectos con A rd u in o
más conveniente: I = V /R
y R = V/i,
A sí es que, volviendo a los pines de alim enta ción de A rduino, podem os ver que la placa nos pro porciona útiles tensiones de alim entación de 3.3 V, 5 V y 9 V. Podem os utilizar cualquiera de estas ten siones para obtener corriente, siem pre y cuando ten
salida, se comportan de forma bastante parecida a las tensiones de alimentación de las que hemos hablado antes, salvo que todas son de 5 V y se pueden activar o desactivar desde nuestro sketch. Por tanto, si los activamos desde nuestro sketch tendrán 5 V y si los desactivam os, tendrán 0 V. Al igual que con los pines de alim entación, debemos tener cuidado de no exce der su m áxima capacidad de corriente. Estas conexiones pueden sum inistrar 40 mA a 5 V. Eso es más que suficiente para encender un LED estándar, pero no para m anejar directam ente un m otor eléctrico. C om o ejem plo, veamos cóm o conectaríam os un
gam os cuidado de no cortocircuitarlas (resistencia cero al paso de corriente), lo que podría provocar un exceso de corriente que podría causar daños. En otras palabras, tenem os que asegurarnos de que cualquier cosa que se conecte a la alim entación tiene suficiente resistencia para evitar que fluya dem asiada corriente. Adem ás de sum inistrar una determ inada tensión, cada una de las conexiones de
LED a una de estas conexiones digitales. De hecho, volvam os al Proyecto 1 del C apítulo 1. C om o recordatorio, la Figura 2-3 m uestra el esquem a eléctrico para m anejar el LED que se uti lizó por prim era vez en el capítulo anterior. Si no utilizam os una resistencia con nuestro LED , sino que sim plem ente conectam os el LED entre el pin 12 y G N D . cuando activem os el pin de salida digital
alim entación tiene un lím ite de corriente m áxim a que puede sum inistrar. Estas corrientes son 50 mA (m ilésim as de am perio) para la alim entación de 3.3 V y, aunque no está concretado en las especificacio nes de A rduino, probablem ente alrededor de 300 mA para los 5 V.
12 (5 V ), podríam os quem ar el LED . destruyéndolo. Esto se debe a que los LEDs tienen una resis tencia muy baja, lo que hace que fluya por ellos una corriente muy alta, a m enos que sean protegidos conectándoles una resistencia para lim itar el flujo de corriente. Un LED necesita unos 10 mA para iluminarse razonablem ente. La placa Arduino puede sum inis trar 50 m A, por lo que en este aspecto no hay
Es muy im portante hacer unos cuantos cálculos usando la Ley de Ohm cuando se conectan cosas a A rduino, o la placa podría resultar dañada si se le pide que proporcione dem asiada corriente. No obs tante, en general, las placas A rduino son bastante tolerantes con los abusos accidentales.
Entradas analógicas La siguiente sección de conexiones analógicas, ANA LO G IN , está m arcada con los núm eros 0 a 5. Estos seis pines se pueden utilizar para m edir la ten sión o voltaje que se les ha conectado, de form a que el valor se pueda utilizar en los sketches. Observe que miden una tensión y no una corriente. Por ellos
Digital Pin 12
LED Rojo
sólo fluirá una pequeña corriente que luego irá a m asa, debido a su gran resistencia interna. Si bien aparecen etiquetadas com o entradas ana lógicas, estas conexiones pueden utilizarse tam bién com o entradas o salidas digitales, aunque, por defecto, son entradas analógicas.
R12
Conexiones Digitales C am biam os ahora al conector superior y com enza mos por el lado derecho (Figura 2-1). Tenemos pines denom inados Digital 0 a 13. Estos se pueden utilizar com o entradas o salidas. Cuando se utilizan como
GND Figura 2-3
LED y resistencia en serie.
C apítulo 2
ningún problem a; lo único que necesitam os es elegir una resistencia adecuada. Los LEDs tienen la interesante propiedad de que, con independencia de cuánta corriente fluya por ellos, siem pre habrá alrededor de 2V entre sus pines. Podem os utilizar este hecho y la ley de Ohm para averiguar el valor correcto de la resistencia a utilizar. Sabem os que (al m enos cuando está activado) el pin de salida está sum inistrando 5 V. Bien, acaba mos de decir que 2 V son "utilizados" por nuestro LED , lo que deja 3 V (5 - 2) circulando a través de n u estra resistencia de lim itación de co rrien te. Querem os que la corriente que fluya por el circuito sea 10 m A. por lo que podem os ver que el valor de la resistencia debe ser: R = V/I R = 3 V/10 mA R = 3 V /0,01 A R = 300 Q Las resistencias vienen en valores estándar, y el valor más próxim o a 300 Q es de 270 Q. Esto sig nifica que en lugar de 10 mA, la corriente será en realidad: .
■
Un re co rrid o p or A rd uino
19
lizar para proporcionar una tensión de salida varia ble, en lugar de sim plem ente 5 V o 0 V. En el lado izquierdo del conector superior de la Figura 2 - 1, hay otra conexión G ND y una conexión denom inada AREF. AR EF se puede utilizar para escalar las lecturas de las entradas analógicas. Se utiliza muy raram ente, y por el m om ento nos pode mos olvidar de ella.
M icrocontrolador Volviendo a nuestro recorrido de la placa A rduino, el chip m icrocontrolador es el dispositivo rectan gular negro con 28 pines. Está insertado en un zócalo D IL (Dual in-line) con lo que se puede reem plazar fácilm ente. El m icrocontrolador usado en las placas A rduino UNO o D u em ilanove es el AT m ega328. En la Figura 2-4 podem os ver un diagram a de bloques que m uestra las principales características de este dispositivo. El corazón, o m ejor dicho, el cerebro del d isp o sitivo es la CPU (unidad central de p rocesa m iento). C ontrola todo lo que ocurre dentro del dispositivo. O btiene instrucciones de program a alm acenadas en la m em oria Flash y las ejecuta. E sto puede suponer obtener datos de la m em oria de trabajo (R A M ), procesarlos y luego volver a colocarlos de nuevo. O bien, puede significar cam biar una de las salidas digitales de 0 a 5 voltios.
1 = V/R I = 3/270 UART (serial data interface)
1 = 11,111 mA Estas cosas no son críticas, y el LED funcionará más o m enos aceptablem ente con cualquier valor entre 5 y 30 m A, por lo que con 270 Q funcionará perfectam ente. Tam bién podem os co n fig u rar una de estas conexiones digitales para que sea una entrada, en cuyo caso, su funcionam iento será parecido a una entrada analógica, salvo que nos indicará si la ten sión en el pin está o no por encim a de un cierto um bral (aproxim adam ente 2,5 V). Algunas de las conexiones digitales (3, 5, 6, 9, 10 y 11) están rotuladas PW1VI. Estas se pueden uti
2KB RAM (working memory)
32KB Flash memory (sketches)
1KB EEPROM (nonvolatile storage)
Input/output ports Diagrama de bloques de! Atmega328.
20
30 P royectos con A rd uino
La m em oria ROM program able y borrable eléc tricam ente (m em oria EEPR O M ) se asem eja a la m em oria Flash en que es no volátil. Es decir, se puede apagar y encender el dispositivo sin perder lo que hubiera en la EEPRO M . M ientras que la m em o ria Flash se destina a alm acenar instrucciones de program a (de los sketches), la EEPRO M se utiliza para alm acenar datos que no querem os perder en caso de reinicio o de fallo de la alim entación. Las an tiguas placas D iecim ila utilizan
el
A T n iegal68, que funciona de la m ism a m anera que el A tm ega328 excepto que tiene la mitad de canti dad de cada tipo de m em oria. Tiene 16 KB de m em oria Flash, 1KB de RAM y 512 bytes de m em oria EEPROM .
Otros com ponentes Encim a y a la izquierda del m icrocontrolador se encuentra un pequeño com ponente rectangular pla teado conocido com o oscilad or de cristal de cuarzo. Éste oscila 16 m illones de veces por segundo, y en cada una de ellas, el m icrocontrolador puede realizar una operación: una adición, sustrac ción, etc. En la esquina superior izquierda, junto al conec tor U SB , se encuentra el pulsador de Reset (reini cio). Si lo pulsam os, éste envía un im pulso lógico al pin Reset del m icrocontrolador, haciendo que éste
La familia Arduino Llegados a este punto, puede resultar útil conocer un poco los diferentes m odelos de placas Arduino. N osotros utilizarem os la UNO o la Duem ilanove para la m ayoría de nuestros proyectos; sin em bargo, tam bién trabajarem os más adelante con la intere sante placa A rduino Lilypad. La Lilypad (Figura 2-5). es una pequeña y del gada placa Arduino que se puede coser en las pren das de vestir para utilizarla en aplicaciones que se conocen con el nom bre de wearable com puting o ropa tecnológica. No dispone de conexión USB. y es necesario utilizar un adaptador aparte para pro gram arla. Es un diseño excepcionalm ente bello. Inspirado por su apariencia de reloj, la utilizarem os en el Proyecto 29 (Reloj binario incom prensible). En el otro extrem o del espectro se encuentra la A rduino M ega. Esta placa tiene un procesador más rápido, con más m em oria y un m ayor núm ero de pines de entrada/salida. H ábilm ente diseñada, la Arduino M ega puede utilizar las shields construidas para placas más pequeñas com o A rduino U N O . D uem ilanove o Diecim ila. Las shields se instalan en la parte delan tera de la placa, dejando el acceso libre a la doble fila de conectores adicionales que se encuentran en la parte trasera de la M ega. En realidad, sólo algu nos proyectos muy exigentes necesitan utilizar una placa tan potente com o la Arduino Mega.
inicie su program a desde cero y borre su m em oria. Tenga en cuenta que cualquier program a guardado en el dispositivo se conserva debido a que éstos se guardan en la m em oria Flash no volátil, es decir, la m em oria que recuerda incluso cuando el dispositivo no está encendido. En la parte central del lado derecho de la placa se encuentra el conector de program ación serie, for m ado por seis pines. Este nos perm ite program ar la Arduino sin utilizar el puerto USB. Pero dado que disponem os de una conexión USB y del software que facilita su utilización, no lo utilizarem os. En la parte superior izquierda de la placa, junto al conector U SB . se encuentra el chip de interfaz USB. Este convierte los niveles de señal utilizados por el estándar USB a niveles que pueden ser utili zados directam ente por la placa A rduino. Figura 2-5
Una placa Arduino Lilypad.
C apítulo 2
El lenguaje C
■
Un re co rrid o p o r A rd u in o
digitalWrite(ledPin, LOW);
Existen m uchos lenguajes para program ar micro-
I I apaga el LED
controladores, desde el com plejo lenguaje Assem bly
delay(lOOO);
(Ensam blador) a los lenguajes de program ación grá fica com o Flowcode. Arduino se sitúa en algún punto interm edio entre estos dos extrem os y utiliza el lenguaje de program ación C, aunque elim inando parte de su com plejidad, lo cual hace que sea fácil
21
// espera un segundo
> Es práctica habitual incluir dicho texto de infor mación en la parte superior de cualquier archivo de
lenguaje clásico y venerable. Se adapta bien a la pro
programa, para indicar lo que hace. También puede incluir comentarios que describan alguna parte com plicada del código, o cualquier cosa que requiera una cierta explicación.
gram ación de los m icrocontroladores porque se
El entorno de desarrollo Arduino utiliza algo lla
iniciarse con él. El lenguaje C es, en térm inos inform áticos, un
inventó en un m om ento en el que, com parado con
mado un com pilador, el cual convierte la secuencia
los “m onstruos” actuales, los ordenadores de enton
de comandos en código m áquina, que será el que se ejecutará en el microcontrolador. Por lo tanto, si vamos a la prim era línea real de
ces eran m ucho m enos sofisticados. C es un lenguaje fácil de aprender, que se com pila en un eficiente "código máquina" y que requiere poco espacio en nuestra lim itada m em oria de
código, tenem os: int ledPin = 13;
Arduino. Esta línea de código da un nom bre al pin digital
Un ejem plo Vamos a exam inar ahora más detalladam ente el sketch del Proyecto 1. A quí se m uestra el listado del código de este sketch para hacer parpadear un LED. Hemos ignorado todas las líneas que com ien zan con // o los bloques-de líneas que com ienzan con /* y term inan con */ porque estas son las líneas de com entarios, que no tienen ningún efecto sobre el program a y están allí para aportar inform ación.
int ledPin =
13;
// LED conectado al pin digital 13 void setup()
{ pinMode(ledPin, OUTPUT);
de salida que vam os a co n ectar al L E D . Si analizam os detenidam ente la placa A rduino, verá el terminal del pin 13 entre GND y el pin 12 en el conector superior de la placa. La placa trae de fábrica un pequeño LED verde incorporado en la misma y conectado al pin 13. Vamos a cam biar la tensión de este pin entre 0 V y 5 V para que el LED parpadee. Vamos a utilizar un nom bre para el pin, de form a que sea fácil de cambiar y poder utilizar uno diferente. Puede ver que nos referim os a "ledPin" al final del sketch. Puede que prefiera utilizar el pin 12 y el LED externo que utilizó con la placa de pruebas (protoboard) en el C apítulo 1. Pero, por ahora, vam os a suponer que está usando el LED que trae incorporado conectado al pin 13. Observe que no escribim os sim plem ente:
> void loop()
led pin = 13
{ digitalWrite(ledPin, HIGH); // apaga el LED delay(1000); // espera un segundo
Esto se debe a que los com piladores son algo quisquillosos y precisos en lo referido a cóm o escri bim os nuestros program as. Los nom bres que utilicem os en los program a no pueden usar espacios, por lo que convencionalm ente se utiliza lo que se
22
30 Proyectos con A rd u in o
denom ina la nom enclatura “M ayúsculas en segunda palabra". De esta form a, com enzam os cada p ala bra (ex cep to la p rim era) con una letra m ayúscula y elim inam os los espacios; esto nos da:
void setup() // ejecutar una vez, cuando se inicia el sketch
{ pinMode(ledPin, 0U T P U T );
ledPin = 13
// establece el pin digital como salida
La palabra ledPin es lo que se denom ina una va riable. Cuando se desee utilizar una variable por pri mera vez en el sketch, hay que indicar al com pilador qué tipo de variable es. Puede ser de tipo int (del in glés “ integer”), com o es el caso aquí, o de tipo float (decim al), o cualquiera de los restantes tipos que des cribirem os más adelante en este capítulo. Un int es un entero, es decir, un núm ero entero, que es ju sto lo que necesitam os para referirnos a un determ inado pin de la A rduino. Después de todo, no existe un pin 12.5, por lo que no sería apropiado utilizar un número decimal o de coma flotante (float). La sintaxis para una declaración de variable es: tipo nombreVariable = valor;
> Esto es lo que se llam a una función y, en este caso, la función se llam a setup. Todos los sketches deben contener una función setup. y las líneas de código dentro de la función que van dentro de las llaves se ejecutarán en el orden en el que están escri tas. En este caso, es justo la línea que em pieza con pinM ode. Un buen punto de partida para cualquier proyecto nuevo es copiar este proyecto de ejem plo y luego m odificarlo para que se adapte a sus necesidades. No nos preocuparem os dem asiado de las funcio nes en esta etapa, m ás que para decir que la función setup se ejecutará cada vez que se reinicie la
Así es que, primero tenemos el tipo (int), luego un espacio, luego un nom bre de variable con esta no m enclatura de introducir la m ayúscula en la segunda palabra (ledPin), luego un signo igual (=), luego un valor y, por últim o, un punto y com a para indicar el final de la línea: * int ledPin = 13;
C om o ya he m encionado, los com piladores son quisquillosos, por lo que si se olvida introducir el punto y com a, recibirá un m ensaje de error al com pilar el sketch. Pruebe a elim inar el punto y com a y luego haga clic en el botón Play (reproducir). Debería ver un m ensaje com o este: error: expected unqualified-id before
A rduino, incluido cuando se conecta la alim enta ción por prim era vez. Tam bién se ejecutará cada vez que se descargue un nuevo sketch. En este caso, la única línea de código en setup es: pinMode(ledPin, 0 U TPUT); // establece el pin digital como salida
D ebem os m encionar que al final de esta línea tenem os un tipo diferente de com entario. Es decir, un com entario de una sola línea, el cual com ienza con una // y term ina al final de la línea. La línea puede interpretarse com o una orden que dam os a Arduino para que utilice ledPin com o una salida digital. Si tuviéram os un interruptor conec tado a ledPin, podríam os configurarlo com o una entrada utilizando:
numeric constant pinMode(ledPin, INPUT);
No es exactamente "se te olvidó un punto y com a", y no es raro que los m ensajes de error sean m uchos de ellos bastante confusos.
No obstante, deberíamos llamar a la variable con un nom bre más adecuado, com o sw itchPin. Las palabras IN PU T y O U T PU T son lo que se
Las siguientes líneas del sketch son:
denom inan co n sta n tes, las cuales siem pre se defin irán en C com o n úm eros. IN P U T puede
C apítulo 2
■
23
Un re co rrid o p or A rd uino
definirse com o 0 y O U T P U T com o 1, pero no
pin de A rduino en el que escribe y el valor a escribir.
tendrá que ver realm ente qué núm ero se utiliza, ya
En nuestro ejem plo, pasam os los parám etros led
que siem pre se referirá a ellas com o IN P U T y
Pin y HIGH para activar el LED y, a continuación,
O U T P U T . M ás adelante en este capítulo, verem os
ledPin y LOWTpara apagarlo de nuevo.
dos constantes m ás, H IG H y L O W , que se utilizan cuando se establece la salida de un pin digital a +5
Tipos de datos y variables
V ó 0 V, respectivam ente.
Ya conocem os la variable ledPin y hem os declarado
La siguiente sección de código es otra función
que es de tipo int (entero). La m ayoría de las varia
que deben tener todos los sketches A rduino; se
bles que vaya a utilizar en los sketches probable
denom ina loop (bucle):
mente sean tam bién del tipo int. Un int contiene un núm ero entero entre -32.768 y +32.767. Esto utiliza
void loop()
sólo dos bytes de datos para cada uno de los núm e
{
ros alm acenados de los 1024 bytes disponibles para
digitalWrite(ledPin, H I G H ); // enciende el LED delay(1000); // espera un segundo digitalWrite(ledPin, LOW ) ; // apaga el LED d e l a y (1000); // espera un segundo
alm acenam iento en una A rduino. Si ese rango no fuera suficiente, se puede utilizar un núm ero long (largo), que utiliza cuatro bytes por cada núm ero y le proporcionará un intervalo de núm eros entre 2.147.483.648 y +2.147.483.647. En la m ayoría de los casos, un int (entero) repre senta un com prom iso entre precisión y cantidad de m em oria usada.
}
Si está com enzando a program ar, yo usaría int La función loop se ejecuta de m anera continua
para prácticam ente
todo y gradualm en te
iría
hasta que se apague la A rduino. Es decir, tan pronto
am pliando el repertorio de tipos de datos a m edida
com o term ina la ejecución de los com andos que
que aum entara mi experiencia.
contiene, em pieza de nu£vo. Recuerde que una placa A rduino es capaz de ejecutar 16 m illones de
En la Tabla 2-1 se resum en otros tipos de datos disponibles.
com andos por segundo, por lo que las cosas dentro
Una cosa a tener en cuenta es que si los tipos de
de loop (bucle) se repetirán con m ucha frecuencia
datos exceden su rango de valores, ocurren cosas
m ientras no se indique lo contrario.
extrañas. Así, si tiene una variable byte con 255, y
En este caso, lo que querem os que Arduino siga
agrega 1 a la m ism a, obtendrá 0. O m ucho peor, si
haciendo continuam ente es encender el LED . espe
tiene una variable int con 32.767 y le agrega 1, ter
rar un segundo, apagar el LED y luego esperar otro
minará con -32.768.
segundo. Cuando haya term inado, com enzará de
H asta que se fam iliarice con el uso de diferentes
nuevo encendiendo el LED. De esta m anera, conti
tipos de datos, le recom endaría que utilizara sólo los
nuará ejecutando el bucle (loop) indefinidam ente.
de tipo int, ya que sirven prácticam ente para todo.
A estas alturas, la sintaxis de com ando de d ig i talW rite y delay resultarán cada vez más fam iliares.
A ritm ética
A unque podem os pensar en ellos com o com andos
Es bastante raro que sea necesario em plear m ucha
que se envían a la placa Arduino, en realidad son fun
aritmética en los sketches. En ocasiones, puede que,
ciones sim ilares a setup y loop, aunque en este caso
por ejem plo, tenga que escalar una entrada analó
tienen lo que se denom inan parám etros. En el caso de
gica para convertirla en una tem peratura o, con más
d igitalW rite, se dice que tom a dos parám etros: el
frecuencia, agregar 1 a una variable de recuento.
24
3 0 Proyectos con A rd uino
TABLA 2-1
Tipos de datos en C
Tipo
Memoria (b y te )
Rango
Notas
boolean
1
Verdadero o falso (0 or 1)
char
1
-128 a +128
b yte
1
0 a 255
int
2
-32,768 a +32,767
unsigned int
2
0 a 65,536
Se pueden u tiliz a r para d isp o n e r de precisión extra, cuan do no se necesitan núm eros negativos. Deben utiliza rse con cu id a d o ya que las operaciones a ritm é tica s con ints pueden p ro d u c ir resultados inesperados.
long
4
-2,147,483,648 a +2,147,483,647
Sólo se necesitan para representar núm eros m uy grandes.
unsigned long
4
O a 4,294,967,295
Ver “ unsigned in t” .
flo a t
4
-3.4 0 2 8 2 3 5 E + 3 8 a + 3.4028235E +38
d o u b le
4
igual que flo a t
C uando esté realizando cálculos, necesitará poder asignar el resultado de dicho cálculo a una variable.
Se utiliza para representar un c ó d ig o de ca rá cter ASCII (es decir, “A” se representa co m o 65). N orm alm ente, sus núm eros negativos no se utilizan.
N orm alm ente, esto serían 8 bytes y m ayor precisión que los valores "flo a t”, con un rango superior. Sin em bargo, en A rd u in o son iguales a “flo a t” .
la conexión USB. Las strin gs (cadenas) se crean
usando la
siguiente sintaxis:
Las siguientes líneas de código tienen dos m isio nes. La prim era proporciona a la variable y el valor
char* message = "Helio World";
50 y la segunda proporciona a la variable x el valor de y + 100.
La palabra char* indica que la variable m essage es un puntero a un carácter. Por ahora, no tenem os
y = 50;
que preocuparnos m ucho acerca de su funciona
x = y + 100;
m iento.
Lo verem os más adelante en el libro
cuando echem os un vistazo a la interfaz con panta
Strings (cadenas)
llas de texto LCD.
C uando los program adores hablan de strings (cade nas), se están refiriendo a una cadena de caracteres,
Instrucciones condicionales
com o, por ejem plo, el m ensaje "Hola a todos1'. En el
Las instrucciones condicionales son una forma de
m undo de A rduino, hay un par de situaciones en las
tom ar decisiones en un sketch. Por ejem plo, el
que puede que tenga que utilizar strings: al escribir
sketch puede encender el LED si el valor de una
m ensajes en una pantalla LCD (cristal líquido) o
variable de tem peratura cae por debajo de un deter
cuando se devuelven datos de texto serie a través de
m inado um bral.
C apítulo 2
■
Un re co rrid o p o r A rd uino
25
A m enudo, cuando se utiliza una instrucción con
El código para esto es el siguiente:
el condicional if (si..) se desea hacer una cosa si la if (temperature < 15)
condición es verdadera y otra cosa si es falsa. Esto se
{
puede hacer utilizando la palabra clave else. com o se digitalWrite(ledPort, H I G H );
}
m uestra en el ejem plo siguiente. Note el uso de los paréntesis anidados para dejar claro a qué se le está aplicando el o.
La línea o líneas de código dentro de las llaves sólo se ejecutarán si fuera cierta la condición tras la
if ((temperature < 1 5 )
palabra clave.
|| (temperatura
> 20))
La condición tiene que ir entre paréntesis, y es a lo que los programadores llaman una expresión lógica. Una expresión lógica es como una expresión m ate mática que siempre debe devolver uno de dos valores posibles: verdadero (true) o falso (false). La siguiente expresión devuelve true si el valor de la variable de tem peratura es inferior a 15:
{ digitalWrite(ledPort, H I G H );
} else
{ digitalWrite(ledPort, L O W );
}
(temperature < 15)
Al igual que <, tenemos: >, <= y >=.
Resumen
Para ver si dos números son iguales, se puede usar
En este capítulo hem os explorado el hardw are de las
= , y para probar si no son iguales, puede usar !=. Por tanto, la siguiente expresión devolverá true si la variable de tem peratura tuviera cualquier valor
placas Arduino y actualizado un poco nuestros conocim ientos de electrónica elem ental. También hem os iniciado nuestra exploración del lenguaje de program ación C . N o se preocupe si
que no fuera 15:
encuentra algunas de estas cosas difíciles de seguir. Hay m ucho que aprender si no está fam iliarizado
(temperature != 15)
con la electrónica y, si bien el objetivo del autor es Tam bién se pueden crear condiciones com plejas m ediante lo que se denom inan operadores lógicos. Los principales operadores son & & (y) y II (o). Por lo tanto, un ejem plo que enciende el LED si la tem peratura es inferior a 15 o superior a 20 podría tener un aspecto sim ilar a esto: if ((temperature < 1 5 )
|| (temperatura
> 20)) { digitalWrite(ledPort, H I G H );
}
explicar cóm o funciona todo, puede em pezar con los proyectos en prim er lugar, y luego volver a la teoría cuando lo desee. En el siguiente capítulo vam os a ocupam os de la program ación de nuestra placa A rduino y nos em barcarem os en algunos proyectos más serios.
C A P Í T U L O
3
Proyectos con LEDs
E n e s t e c a p í t u l o , vam os a construir algunos pro yectos basados en LED . La parte electrónica será
COMPONENTES Y EQUIPOS
m uy simple para que podam os concentram os en la program ación de A rduino.
Descripción
La program ación de los m icrocontroladores puede ser un asunto delicado que requiere un cono cim iento profundo de las interioridades de los d is positivos: registros, punteros, etc. Esto se debe, en p arte, a que los m odernos m icrocontroladores
D uem ilanove o sim ilar
pueden configurarse casi hasta el infinito. A rduino ha norm alizado su configuración de hardw are, lo que, a cam bio de una pequeña pérdida de flexibili dad, ha hecho que los dispositivos sean m ucho m ás fáciles de program ar.
Apéndice
Placa A rd u in o UNO o 1
DI
LED rojo de 5 m m
23
R1
Resistencia 270 Q 0 ,5W
6
■
Pueden servir prácticamente cualquier LED y resistencia de 270 Q que haya disponibles.
■
No hacen falta más herramientas que un par de alicates o cortacables.
Proyecto 2 Intermitente S.O.S de código Morse El código M orse solía ser un m étodo de com unica ción vital en los siglos XIX y XX. Su codificación de letras en una serie de puntos y rayas perm itió que pudiera ser enviado a través de cables telegráficos, enlaces radiofónicos y utilizando luces de señaliza ción. Las letras S.O.S. (Save Our Souls, Salvar nuestras alm as) siguen siendo reconocidas com o una señal internacional de socorro. En este proyecto, harem os que nuestro LED par padee la secuencia S.O .S. una y otra vez. Para este proyecto, necesitará los m ism os com ponentes que para el Proyecto 1.
Hardware El hardw are es exactam ente el m ism o que para el Proyecto 1. Por lo tanto, puede sim plem ente conec tar la resistencia y el LED directam ente en los conectores de Arduino o utilizar una placa de prue bas (protoboard) (véase el C apítulo 1).
Software En lugar de com enzar a escribir este proyecto desde cero, utilizarem os el Proyecto 1 com o punto de par tida. De esta form a, si no lo ha hecho ya, por favor, com plete el Proyecto 1. Si no lo ha hecho anteriormente, descargue el código del proyecto de www.arduinoevil-genius.com; a continuación, también puede cargar el sketch del
27
28
30 Proyectos con A rd uino
Proyecto 1 de su A rduino Sketchbook y descargarlo en la placa (véase el C apítulo 1). No obstante, creo que le ayudará a entender m ejor su placa A rduino si m odifica el sketch del Proyecto 1 com o se sugiere a continuación. M odifique la función loop del Proyecto 1, para que aparezca com o se m uestra aquí. Lo más recom endable en este caso es utilizar las opciones de "copiar y pegar".
digitalWrite(ledPin, LOW); delay(200); digitalWrite(ledPin, H I G H ); // tercer punto delay(200); digitalWrite(ledPin, LOW); delay(1000); // Espere 1 segundo antes de que empecemos de nuevo
}
void loop()
{ Aunque este sketch funciona, y no debe dudar en
digitalWrite(ledPin, H I G H ); // S (...) primer punto delay(200);
probarlo, vam os a cam biarlo para m ejorarlo y, al m ism o tiem po, hacerlo m ucho más corto.
digitalWrite(ledPin, L O W );
Podem os reducir el tam año del sketch creando
delay(200); digitalWrite(ledPin,
H I G H );
// segundo punto delay(200);
nuestra propia función que reem place las cuatro líneas de código involucradas en cualquier parpadeo con una sola línea.
digitalWrite(ledPin, L O W );
Después de la llave final de la función loop, agre
delay(200); digitalWrite(ledPin, H I G H );
gue el código siguiente:
// tercer punto delay(200); digitalWrite(ledPin, L O W );
void flash(int duration)
{ digitalWrite(ledPin, H I G H );
delay(500); d e l a y (duration); digitalWrite(ledPin, H I G H );
digitalWrite(ledPin, L O W );
// 0 (— ) primera raya delay(500);
d elay(duration);
>
digitalWrite(ledPin, L O W ); delay(500); digitalWrite(ledPin, H I G H ); // segunda raya
Ahora m odifique la función loop para que se parezca a esto:
delay(500); digitalWrite(ledPin, L O W ); delay(500);
void loop()
{ flash(200);
digitalWrite(ledPin, H I G H );
flash(200);
// S
/ / te rc e ra raya
de lay(300);
delay(500);
/ / E n caso contrario los destellos se
digitalWrite(ledPin, L O W );
// ejecutan juntos
delay(500);
flash(500);
digitalWrite(ledPin, H I G H );
flash(500);
flash(500);
flash(200);
flash(200);
// 0
// S (...) primer punto
flash(200);
delay(200); digitalWrite(ledPin, L O W );
// S
d e l a y (200);
d e l a y (1000);
digitalWrite(ledPin, H I G H );
// Espere 1 segundo antes de que
// segundo punto delay(200);
flash(200);
// empecemos de nuevo
}
C apítulo 3
■
P royectos con LEDs
29
LISTADO DE PROYECTO 2 int ledPin = 13;
void setup()
// ejecutar una vez, cuando se inicia sketch
{ pinMode(ledPin, OUTPUT);
// establece el pin digital como salida
} void loop()
{ flash(200);
flash(200);
flash(200);
d e lay(300); flash(500); flash(500); flash(200);
// S // si no, los destellos se ejecutan juntos
flash(500);
// 0
flash(200); flash(200);
delay(lOOO);
// S // espere un segundo antes de empezar de nuevo
} void flash(int duration)
{ digitalWrite(ledPin, HIGH); delay(duration); digitalWrite(ledPin, LOW); delay(duration);
>
El código final com pleto se m uestra en el
Loops (bucles)
Listado del Proyecto 2. Esto hace el sketch m ucho m ás corto y fácil de leer.
Pongamos to d o ju nto Así concluye el Proyecto 2. A hora tratarem os algu nos aspectos
m ás
sobre
la program ación
de
A rduino antes de pasar a ver el Proyecto 3, donde vam os a utilizar nuestro m ism o hardw are para escri bir un traductor de código M orse, en el que pode
Los loops (bucles) nos perm iten repetir un grupo de com andos un núm ero determ inado de veces o hasta que se cum pla cierta condición. En el Proyecto 2, sólo queríam os que el LED par padease con los tres puntos de una S, por lo que no supone gran dificultad repetir el com ando flash tres veces. Sin em bargo, esto sería poco práctico si tuviéram os que hacer parpadear el LED 100 o 1000 veces. En ese caso, en C podem os utilizar el com ando de lenguaje for.
mos escribir frases en nuestro ordenador y hacer
for (int i = 0; i < 100;
que se transm itan com o código M orse. En el
{ flash(200);
Proyecto 4, m ejorarem os la lum inosidad de nuestro LED transm isor sustituyendo éste por un LED de
i ++)
}
alta potencia del tipo Luxeon. Pero antes, verem os un poco más de teoría para com prender m ejor los Proyectos 3 y 4.
El bucle for es parecido a una función que tom a tres argum entos aunque, aquí, en lugar de las habi tuales com as (,), esos argum entos se separan
30
30 P royectos con A rd uino
m ediante un punto y com a (;). Esto es una de las peculiaridades del lenguaje C , pero no se preocupe, el com pilador le avisará si se equivoca. Lo prim ero que aparece en los paréntesis des pués de for es una declaración de variable. En este caso especifica que la variable se va a utilizar com o una variable counter y le asigna un valor inicial, en este caso, 0. La segunda parte es una condición que debe ser verdad para perm anecer en el bucle. En este caso, nos quedarem os en el bucle m ientras i sea inferior a 100, pero tan pronto com o i sea 100 o superior, dejarem os lo que estuviéram os haciendo dentro del bucle.
generalm ente de tipo int. Por el contrario, un array (m atriz) contiene una lista de valores, y se puede acceder a cualquiera de esos valores por su posición en la lista. C , al igual que la m ayoría de los lenguajes de program ación, com ienza sus posiciones de índice en 0 en lugar de 1. Esto significa que el prim er ele mento es en realidad el elem ento cero. Para ilustrar el uso de los arrays. podríam os cam b iar nuestro có digo M orse de ejem p lo y em plear un array de duraciones de destello. Luego podem os usar un bucle for para recorrer cada uno de los elem entos de la matriz. En prim er lugar, vam os a crear un array de valo res int que contengan las duraciones:
La parte final es lo que se debe hacer una vez que se han ejecutado todos los com andos del bucle. En
int durations[] = {200, 500,
este caso, es increm entar i en 1, de m anera que, des pués de 100 vueltas dentro del bucle, i deja de ser inferior a 100 y. por tanto, debe salir del bucle. O tra form a de hacer un bucle en C es usar el com ando while. El m ism o ejem plo m ostrado ante riorm ente se podría
llevar a cabo usando un
com ando w hile, com o se m uestra aquí:
200,
200,
200,
500,
500,
200, 200}
Puede indicar que una variable contiene un array colocando [ J tras el nom bre de la variable. Si esp e cifica el contenido de la m atriz al m ism o tiem po que lo está definiendo, com o en el ejem plo anterior, no necesita especificar el tam año de la m atriz. Si no establece su contenido inicial, entonces deberá
int i = 0;
especificar el tam año de la matriz dentro de los co r
while
chetes. Por ejem plo:
(i < 100)
{ flash(200);
int durations[10];
i ++; >
Ahora podem os m odificar nuestro m étodo del loop para utulizar el array: La expresión entre paréntesis detrás de w hile
debe ser verdadera para perm anecer en el bucle.
void loop() // ejecutar una y otra vez
C uando deja de ser cierta, el sketch continuará eje cutando los com andos que aparecen tras la última
{ fo r ( i n t i = 0; i < 9; i+ + )
llave.
{
Las llaves se utilizan para agrupar un grupo de
flash(durations[i ]);
com andos. En el argot de program ación se les llama
}
un bloque.
d e l a y (1000); // espere 1 segundo antes de que // empecemos de nuevo
Arrays (matrices) Los arrays (m atrices) son una form a de contener una lista de valores. Las variables que hem os encon trado hasta la fecha sólo incluían un único valor.
}
C apítulo 3
■
31
Proyectos con LEDs
Una ventaja obvia de este enfoque es que es fácil
enviar m ensajes desde el ordenador a la placa
cam biar el m ensaje sim plem ente alterando la m atriz
Arduino a través del cable USB. Para este proyecto, necesitará los m ism os com ponentes que para el Proyecto 1 y 2. De hecho, el hardware es exactam ente el m ism o; vam os sim ple
de duraciones (durationsfi]). En el Proyecto 3, lle varem os el uso de los arrays un paso más allá para crear un destello de código M orse de propósito m ás
mente a m odificar el sketch del Proyecto I .
general.
Proyecto 3 Traductor de código Morse En este proyecto vam os a usar el m ism o hardw are que en los Proyectos 1 y 2, pero vam os a escribir un nuevo sketch que nos va a perm itir escribir una frase en nuestro ordenador y hacer que la placa A rduino lo convierta en los puntos y rayas apropia
COMPONENTES Y EQUIPO A péndice A
Descripción Placa A rd u in o UNO o D uem ilanove o sim ilar
23
DI LED rojo de 5 mm R1 Resistencia 270 0
1
0,5W
6
dos del código M orse. La Figura 3-1 m uestra el traductor de código M orse en acción. El contenido del cuadro de m en
Por favor, rem ítase al Proyecto 1 para el conexio
saje será transm itido com o puntos y rayas m ediante
nado de este proyecto.
el LED. Para ello, harem os uso de lo que hem os apren dido acerca de arravs (matrices) y strings (cadenas), y tam bién aprenderem os algo acerca de cóm o
Puede sim plem ente conectar la resistencia y el LED directam ente en los conectores de A rduino o utilizar la placa de pruebas (protoboard) (véase el C apítulo 1). Puede incluso cam biar sólo la variable
Figura 3-1
Traductor de código Morse
Hardware
32
30 Proyectos con A rd u in o
ledPin en el sketch para que sea el pin 13, y así uti lizar el LED integrado en la placa, no necesitando entonces ningún com ponente externo.
Software Las letras del código Morse se muestran en la Tabla 3-1. Algunas de las norm as del código M orse son que la duración de una raya es tres veces la de un punto, el tiem po que transcurre entre cada raya o punto es igual a la duración de un punto, el espacio entre dos letras tiene la m ism a longitud que la raya, y el espa cio entre dos palabras tiene la m ism a duración que siete puntos. En aras de este proyecto, no nos vam os a p reo cupar de la puntuación, aunque sería un interesante ejercicio el que intentara añadir esto al sketch. Para obtener una lista com pleta de todos los carac teres M orse, véase: http://en.w ikipedia.org/w iki/M orse_code.
TABLA 3-1
A lfa b e to del c ó d ig o Morse
A
.-
N
B
-...
O
—
.—
2
D
Q
3
R
4
F
S
5
G
T
E
.
-
6
...»
-....
H
....
U
7
1
..
V
8
—
J
.—
w
9
—
K
X
L
Y
M
-
z
Puede ver el sketch en el Listado del Proyecto 3. A continuación dam os una explicación de su fun
i n t ledPin = 12; char* l e t t e r s [] = { 1»• _ “ »«/ H“ • • • II f II —• —• M, *II —. • II f II • II f II . II f II • II f || • • m• || / || || »•_ _ _ U " » » « 'I » » » » » ' f * / / • r ———Hf H. . Hf »l—— II II —. , »» »i "_ ii ii ^ii ii ii ii ii ii H H ii ti H };
" . . . — ",
int dotDelay = 200;
void s e tup() { pi nMode(ledPin, O U TPUT); Serial.begin(9600);
} void loop()
{ char ch; if (Serial.available())
1
P
LISTADO DE PROYECTO 3
----- ",
------
C
cionam iento.
char* numbers[] = {" -------- ", ------- ", H II II_ II II 11y m
0
// ¿hay algo que leer del USB?
/ / A -I / / J-R / / s-z
C apítulo 3
■
LISTADO DE PROYECTO 3 (continuación)
{ ch = Serial.read(); if (ch >=
'a' && ch <=
// leer una letra 'z')
{ flashSequence(letters[ch - 'a']);
} else if (ch >=
'A' && ch <=
’Z')
{ flashSequence(letters[ch - 'A ']);
} else if (ch >=
'0' && ch <=
'9')
{ flashSequence(numbers[ch - '0' ]);
} else if (ch ==
' ')
{ delay(dotDelay * 4);
// espacio entre palabras
} } } void flashSequence(char* sequence)
{ int i = 0; while (sequencefi]
1= NULL)
{ flashDotOrDash(sequence[i]); i++;
'
} delay(dotDelay * 3);
// espacio entre letras
} void flashDotOrDash(char dotOrDash)
{ digitalWrite(ledPin, H I G H ); if (dotOrDash ==
'•')
{ delay(dotDelay);
} else // debe ser una -
{ delay(dotDelay * 3);
> digitalWrite(ledPin, LOW); d e lay(dotDelay);
}
// espacio entre destellos
Proyectos con LEDs
33
34
30 Proyectos con A rd uino
H acem os el seguim iento de nuestros puntos y rayas usando m atrices de cadenas (arrays de strings). Contam os con dos de estos, uno para las letras (letters) y otro para los núm eros. Por lo tanto, para averiguar lo que necesitam os para hacer parpa dear el LED con la prim era letra del alfabeto (A), obtendrem os la prim era posición de string letters[0] -recuerde, el prim er elem ento de una matriz es el elem ento O, no el 1. H em os definido la variable dotD elay, por lo tanto, si querem os hacer que nuestro código M orse parpadee más rápido o más lento, podem os cam biar este valor, ya que todas las duraciones se han defi nido com o m últiplos del tiem po de duración de un punto. La función setup es prácticam ente igual a la de nuestros proyectos anteriores; sin em bargo, esta vez estam os recibiendo com unicaciones del puerto U SB , por lo que debem os añadir el com ando: Serial.b e g i n (9600);
Esto indica a la placa A rduino que configure la velocidad de com unicación a través de USB para que sean 9600 baudios. Esto no es que sea muy rápido, pero es suficiente para nuestros m ensajes de código M orse. Tam bién es una buena velocidad de configuración porque ésa es la velocidad predeter m inada utilizada por el software A rduino en el orde nador. En la función loop, vam os a ver repetidam ente si hem os enviado letras a la conexión USB y si tene mos que procesar la letra. La función de Arduino SeriaLavailableO será verdadera si hay un carácter para co n v ertir en código M orse y la función SeriaLreadQ nos dará ese carácter, que asignare mos a una variable llam ada ch que acabam os de definir dentro del loop. Luego tenem os una serie de sentencias if (si..) que determ inan si el carácter es una letra m ayús cula, m inúscula, o un carácter espacio de separación de dos palabras. Si m iram os a la prim era instrucción if, estam os com probando si el valor del carácter es m ayor o igual a "a" e inferior o igual a "z". Si es el caso, podem os buscar la secuencia de rayas y puntos de destello utilizando la m atriz de letras (letters[ ]) que hem os definido en la parte superior del sketch.
Debem os determ inar qué secuencia utilizar de la m atriz restando "a" del carácter de ch. A prim era vista, podría parecer extraño restar una letra de otra, pero es perfectam ente aceptable hacer esto en C. A sí, por ejem plo, "a" - "a" es igual a 0 , m ientras que "d" - "a" nos dará una respuesta de 3. Por lo tanto, si la letra que leem os en las conexiones USB fuera f, calculam os "f" - "a", lo que nos da 5 com o la posi ción en el array letters[ ]. Si ahora m iram os letters[5], nos dará la cadena A continuación pasam os esta cadena (string) a una función llamada flashSequence. La función flashSequence lo que hace es reco rrer cada una de las partes de la secuencia y realizar un destello en form a de raya o punto. En C , las strings (cadenas) tienen un código especial en el extrem o que indica el final de la cadena, y esto se conoce com o NU L L . Por tanto, la prim era cosa que hace flashSequence consiste en definir una variable llam ada "i". Esto indicará la posición actual en la cadena de puntos y rayas, com enzando en la posi ción 0. El bucle w hile seguirá ejecutándose hasta que llegue a N U L L , al final de la cadena. Dentro del bucle w hile, prim ero hacem os que destelle el punto o raya en el que nos encontrem os utilizando una función que vam os a tratar en un m om ento y, a continuación, agregarem os 1 a "i" para, sin interrupción, continuar dando vueltas en el loop, haciendo parpadear cada punto o raya en su m om ento hasta que lleguem os al final de la cadena. La función final que hem os definid o es flashDotO rDash; esto sólo enciende el LED y luego utiliza una instrucción if para: o bien crear un retardo durante la duración de un solo punto (si el carácter es un punto), o un retardo de un período tres veces superior a esa duración (si el carácter es una raya), antes de volver a apagar el LED de nuevo.
Pongamos todo junto C argue el sketch term inado del Proyecto 3 desde su A rduino Sketchbook y descárguelo en su placa (véase el C apítulo 1). Para utilizar el traductor de código M orse, nece sitam os em plear una parte del softw are A rduino lla m ado Serial M onitor. Esta ventana le perm ite escribir m ensajes que se envían a la placa A rduino, así com o ver los m ensajes con que la placa A rduino
36
30 Proyectos con A rd uino
Hardware El LED que utilizam os en el Proyecto 3 necesitaba unos 10 mA a 2 V. Podem os utilizar estos datos para calcular su potencia m ediante la fórmula: P = Ix V La Potencia es igual a la tensión entre los extrem os de algo m ultiplicado por la corriente que circula a través de ese algo, siendo la unidad de potencia el Vatio (W ). Por tanto, ese LED sería aproxim adam ente de 20 mW, o una cincuenteava parte de la potencia de nuestro LED de 1 W. Si bien A rduino no tiene problem as m anejando un LED de 20 mW, no será capaz de m anejar directam ente un LED de 1 W. Este es un problem a com ún en electrónica, que se podría resu m ir de la siguiente form a: cóm o conseguir que una corriente pequeña controle una co rrien te m ayor, algo que se conoce com o am p lificación . El com ponente electrónico más utilizado para am plificar es el transistor, y es el que usarem os para encender y apagar nuestro LED Luxeon. El fu n cio n am iento básico del tran sisto r se m uestra en la F igura 3-4. H ay m uchos tipos diferentes de transistores, y probablem ente el más com ún y el tipo que vam os a utilizar se llam a transistor bipolar NPN.
Este transistor tiene tres term inales llam ados em isor, colector y base. El principio básico de fu ncionam iento es que una pequeña corrien te circulando por la base perm ite que una corriente m ucho m ayor circule desde el em isor al colector. C uánto m ayor será esta relación de corrientes depende de cada transistor, pero norm alm ente es un factor de 100. Por lo tanto, una corriente de 10 mA circulando por la base podría hacer circular hasta 1 A por el colector. Por tanto, si tenem os la resistencia de 270 Q que hem os usado para m anejar el LED a 10 m A , podem os esperar que sea m ás que suficiente para que el tran sisto r conm ute los 350 mA necesarios para el LED Luxeon. El esquem a electrónico de nuestro circuito de control se m uestra en la Figura 3-5. La resistencia de 270 Q (R l) limita la corriente que circula por la base. Podem os calcu lar la corriente con la fórm ula I = V/R. V serán 4.4 V en lugar de 5 V porque los transistores tienen norm al m ente una tensión de 0.6 V entre la base y el em isor, y el voltaje más alto que puede sum inistrar la A rduino desde el pin de salida es de 5 V. Por tanto, la corriente será 4.4/270 = 16 mA. R2 lim ita la corriente que circula por el LED a alrededor de 350 m A. Hemos llegado a la cifra de 4 Q utilizando la fórm ula R = V/I. V será aproxim a dam ente 5 - 3 - 0.6 = 1.4 V. 5 V es la tensión de ali-
Colector
Base
Emisor Figura 3 -4
Funcionamiento de un transistor bipolar NPN
Colector
C apítulo 3
■
37
P royectos con LEDs
cada por el voltaje. En este caso, la corriente de base es lo suficientemente pequeña com o para ignorarla, por lo que, la potencia será tan sólo 0.6 V x 350 mA. o 210 mW. Siempre es aconsejable escoger un tran sistor que pueda disipar holgadamente la potencia que necesitamos. En este caso, vamos a utilizar un BD139 que tiene una potencia superior a 12 W. En el Capítulo 10 puede encontrar una tabla con los transistores uti lizados con más frecuencia. Ahora necesitamos colocar los componentes en la placa protoboard siguiendo la disposición mostrada en la Figura 3-6. con la correspondiente de la Figura 3-8. Es fundamental identificar correctamente los ter minales del transistor y del LED. El lado metálico del u ia gra m a esqu em ático del m anejo
transistor debe mirar hacia la placa. La pata más larga del LED se corresponde con el terminal positivo.
de un LED de gran potencia.
Más adelante en este proyecto vamos a mostrar m entación, el LED reduce aproxim adam ente 3 V y
cómo se puede trasladar el proyecto desde la placa de
el transistor 0.6 V, por lo que la resistencia debe ser
pruebas a un diseño más permanente utilizando
1.4 V/350 mA = 4 Q. También debem os utilizar una
Arduino Protoshield. Esto requiere utilizar un solda
resistencia que pueda hacer frente a esta corriente
dor, así es que, si desea continuar para crear una
relativam ente alta. La energía que la resistencia
shieid y cuenta con el equipo para soldar, debería sol
disipará com o calor es igual a la tensión entre sus
darle los cables al LED Luxeon. Suelde cables cortos
term inales m ultiplicado por la corriente que circula
de hilo rígido a los terminales marcados con + y - . Es
por ella. En este caso, es de 350 mA x 1.4 V, lo que
una buena idea utilizar cable rojo para el terminal
da 490 mW. Para estar seguros, hem os seleccionado
positivo y azul o negro para el negativo.
una resistencia de 1 W.
Si no desea soldar, no importa; lo único que tiene
•
De la misma manera, cuando se escoge un transis tor, tenemos que aseguramos de que puede soportar la
que hacer es enrollar con cuidado el cable alrededor de los conectores, com o se m uestra en la Figura 3-7. La Figura 3-8 muestra el montaje completo de la
potencia que va a manejar. Cuando se activa, el tran sistor consumirá energía igual a la corriente multipli
placa de pruebas.
üouo*
— e o o o o *— • ,
ooooo
ooooo
ooooo
oo;. • 5V . •GND
O C O O O O C O O O O O O C O O C O O O O O C O O O O O O O O C O O O O O O O
ooooooooooooocoooocoocooooooooocooooooo oooococooocoococoooooocooccoooocooooooo OOOOOOOCO0 0 0 0 0 0 0 0 0 0 o o o c o o o o o o o o c o o o c o o o 'o o o o o o o o o o o o o c o c o o o o o o o o c o o o o o c o o o o o o o 0000
oco!
0 C0 0 C 0 0 0 0 QC0
oocooocooooo IOOOO o o o o o io t e o o )OÜUO UUUUU 0 0 * 0 0
ooooo oouoo
00 o o c o o o o c o o
00* o o o f tp o c
.0 0 0 0
0000000
. o ooocoooooo 0 ^ 0 0 0 0 0 0 0 0 0 & >0OOQOOCOOOO
o o o o » " ■■• ooo, oooo» •o o o T1 -B D 1 3 9
Diseño de la placa de pruebas del P royecto 4.
0 GO
ooo
5V
\
»
GND
38
30 Proyectos con A rd uino
Crear una shield Este es el prim er proyecto que hem os hecho que tiene suficientes com ponentes para justificar la creación de una placa de circuito im preso Arduino Shield para colocarla sobre
la propia placa de
A rduino. Tam bién vam os a usar este hardware con ligeras m odificaciones en el Proyecto 6. por lo que quizás es el m om ento de crear una shield LED Figura 3-7
C onexión de cables sin soldadura en el LED Luxeon
Luxeon. Sin duda, en casa se pueden hacer sus propias placas de circuito im preso, pero esto requiere el uso de productos quím icos nocivos y una cierta cantidad
Software
de equipo. A fortunadam ente, hay otro gran com po El único cam bio en el software del Proyecto 3 es
nente de Arduino de hardware libre (open source)
que estam os utilizando el pin de salida digital 11 en lugar del pin 12.
llam ado Arduino Protoshield. Si echa un vistazo en las tiendas de alrededor, verá que se pueden obtener
Pongamos to d o ju nto
todo lo necesario para crear una shield. Esto incluye
por 10 € o m enos y le proporcionarán un kit con la propia placa, los conectores con los pines que se Cargue el sketch term inado del Proyecto 4 desde su A rduino Sketchbook y descargúelo en su placa (véase el C apítulo 1). De nuevo, la prueba del proyecto es la misma que la del Proyecto 3. N ecesitará abrir la ventana Serial M onitor y em pezar a escribir. El LED tiene un ángulo de em isión muy am plio, por lo que una variación de este proyecto podría ser adaptar el reflector de una linterna de LED para concentrar el haz.
Figura 3-8
colocan en la A rduino, y algunos LED s, pulsadores y resistencias. En cualquier caso, tenga en cuenta que
existen
distintas
variantes
de
la
placa
Protoshield. por lo que, si su placa es ligeram ente diferente, deberá adaptar el diseño que m ostram os aquí. Los com ponentes de una Protoshield se m ues tran en la Figura 3-9, siendo la parte más im portante la placa de circuito im preso Protoshield (PCB). También se puede com prar sólo la placa de circuito
Fotografía de una placa de pruebas completa para el Proyecto 4.
C apítulo 3
■
39
Proyectos con LEDs
Protoshield, que para m uchos de los proyectos será todo lo que necesite. En la placa no vam os a soldar todos los com po nentes que vienen con el kit. Vamos a lim itam os a
• rt • ti • O
agregar el LED de la alim entación, su resistencia, y sólo los pines de la parte inferior que se conectan a
M<1 MO *• O <» O
la placa A rduino, ya que no tendrá ninguna otra shield encim a. U na buena costum bre a la hora de m ontar los cir cuitos es soldar prim ero en su sitio los com ponentes que están más abajo. A sí es que, en este caso, sol darem os las resistencias, el LED, el pulsador de rei nicio (reset) y, a continuación, los conectores de los pines inferiores. L a resistencia de 1 K. el LED, y el pulsador se introducen desde la parte superior de la placa y se sueldan por debajo (Figura 3-10). La parte corta de los pines del conector se colocarán desde debajo de la placa y se soldarán en la parte superior. C uando suelde las patillas del conector, asegú rese de que estén alineadas correctam ente, ya que hay dos filas paralelas para los conectores: una para la conexión a los pines que van por debajo y otra para los zócalos que no estam os utilizando, que están pensados para conectarse a otras shields. Un buen m étodo para garantizar que los conec tores están en su sitio es conectarlos en una placa Arduino y, a continuación,.colocar la placa shield encim a y soldar los pines, lo que asegura que éstos queden rectos.
lio II O O ti
I
ti O O O O t» v* O .1
M O
1» t» t> O ti o *i o
oo o t> «i O
o >i o o
«l (I III (I < Figura 3-10
* OO O I M U l t l I l O O O O f l O O O O
<1 O
O
O
«1 O
O
O
O
«1 O
O
O
a
oooouooooooooo O O O O O i lO o o o o o o o
OO O OO OO O o o O OO O o ti O O «1 o o il O o o o o o o o
O O «l ti O O (1 o o o o o o o n O O O «.» O O ti O O O O o o o o o O O ti o O O ti O ti o o o o 0 0(1 O <1(10 0 0 0 0 0 0 0 , o o o o o o o o o o o o o o O O O <1 O O O O ti o o o o o o o o u o o o o o o o o o o
á
oooooooooooooo
I
»> o ó m ’iÉ u i «\ii
I
w|
La p arte in fe rio r de la Protoshield.
C uando haya soldado en su sitio los com ponen tes del kit, debería tener una placa parecida a la que aparece en la Figura 3-11. A hora podem os añadir los com ponentes especí ficos de este proyecto que hem os estado usando en la placa protoboard. Prim ero, coloque todos los com ponentes en su sitio siguiendo la disposición de la Figura 3-12 para aseguram os de que todo encaja en el lugar que le corresponde. Este tipo de placa es de doble cara, es decir, se puede soldar por la parte superior o inferior de la placa. Com o se puede ver en la Figura 3-12, algunas de las conexiones están dispuestas en form a de pistas conductoras que conectan varios puntos, igual que ocurre en nuestra placa de pruebas proto board. Vamos a m ontar todos los com ponentes en la parte superior, con las patillas introducidas en su sitio y soldadas en la parte inferior, por donde sobre salen de la placa. Las patas de estos com ponentes se conectan por debajo y luego se cortan los trozos que sobren. En caso necesario, se pueden utilizar trozos de cable rígido para alargar las patas de alguno de los com ponentes. La Figura 3-13 m uestra el m ontaje com pleto de
I
la shield. C onecte la placa y pruébela. Si no fun
Figura 3-9
P rotoshield en fo rm a de kit.
ciona en el m ismo m om ento de conectarla, desco néctela de inm ediato de la alim entación y utilice un polím etro para com probar cuidadosam ente que no
40
30 Proyectos con A rd uino
1(0 ® OI
....... * **3 •
**
1------------ 1 m trw o 13 12 ii io a
«»
r
*
. •
s
♦ a
.
a
i
n í oo
o o o o o o o o o o o o o o o o o o o o * ;
00000000000000000000*1
O O O O O O O O O O O O O O O O O O O O ® ! - O O O O O O O O O O O O O O O O O O O O ® Í
so 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ®§* «O 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 « i
iOOOOOOOOOOCOOOCOOOOCÍlJ k)OOOOOOOOOOOCOCOOCOO*l»
|0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 « l | | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # ®6 30 o o o o o o o o o o o o o o o o o o o ® [ L oooooooooooooooooooo® U oooooooooooooooooooo®® coooooo oooooo oooooo o ®o j j « a * rJA -u u 2 + 4 2 4 - h « S r iá n « c ^ A « T c o 3iL¡ c o o c ®l «E9CT JU 9U
Figura 3-11
90
UIII
060 i
2
3
4
10 O O o O o
S
M ontaje de P rotoshield básico.
haya cortocircuitos o conexiones rotas en la shieid. ¡Felicidades! Acaba de crear su prim era shieid de A rduino, y adem ás la podrem os reutilizar en pro
Diseño de Protoshield del Proyecto 4.
También hem os aprendido un poco más sobre cóm o program ar la placa Arduino en C .
yectos posteriores.
En el siguiente capítulo, vam os a am pliar esto viendo más proyectos basados en LED , com o un m odelo de sem áforo y una luz estroboscópica de
Resumen
gran potencia.
¡Bueno! H em os dado un prim er paso con algunos proyectos sim ples con LEDs y hem os descubierto cóm o utilizar los LED Luxeon de alta potencia.
Figura 3-13
Shieid Luxeon completa conectada a una placa Arduino.
C A P Í T U L O
4
Más proyectos con LEDs
E n e s t e c a p í t u l o , vam os a seguir trabajando con esos pequeños y versátiles com ponentes, los L E D s, y vam os a aprender un poco más sobre las entradas y salidas digitales, incluyendo cóm o utilizar los pul sadores. Los proyectos que vam os a construir en este capítulo son un sem áforo, dos proyectos de luz estroboscópica, y un m ódulo de potente ilum inación que utiliza LEDs Luxeon de alta potencia.
Entradas y salidas digitales Los pines digitales 0 a 12 pueden configurarse para ser utilizados com o entrada o com o salida. Esta asignación la determ inam os en el sketch. Puesto que vam os a conectar com ponentes electrónicos en estos pines, es im probable que una vez establecidos queram os volver a cam biartos. Es decir, una vez que hayam os configurado un pin com o salida, no lo vam os a cam biar en m itad de un sketch para que sea una entrada. Por esta razón, suele ser práctica habitual fijar la dirección de un pin digital en la función de configu ración que debe definirse en cada sketch. Por ejem plo, el siguiente código (a continuación de pinM ode) establece el pin digital 10 com o salida (output) y el pin digital 11 com o entrada (input). Observe cóm o utilizam os esta declaración de varia bles en nuestro sketch para hacer que resulte m ás fácil cam biar posteriorm ente el pin utilizado si así nos conviene más adelante.
int ledPin = 10; int switchPin = 11;
void setup()
{ pinMode(ledPin, O UTPUT); p inMode(switchPin, I NPUT);
>
Proyecto 5 Modelo de semáforo Ahora que ya sabem os cóm o establecer un pin digi tal para que actúe com o entrada, podem os construir un proyecto de m odelo de sem áforo con la utiliza ción de LEDs rojo, am arillo y verde. C ada vez que pulsem os el botón, la luz del sem áforo cam biará al color siguiente de la secuencia prevista. En el Reino U nido, la secuencia de los sem áforos es: rojo, rojo y am arillo juntas, verde, am arillo y, a continuación, vuelta al rojo. Adem ás de lo anterior, si en nuestro proyecto m antenem os presionado el botón, las luces cam bia rán solas siguiendo la secuencia prevista, aunque con un cierto retardo entre cada paso. Los com ponentes para el Proyecto 5 se m uestran a continuación. C uando trabaje con LEDs asegúrese de que éstos tengan la m ism a lum inosidad para que los resultados sean óptim os.
41
42
30 Proyectos con A rd uino
COMPONENTES Y EQUIPO
En la Figura 4-2 se m uestra una fotografía del pro yecto y, en la Figura 4-3, el diseño de la placa.
Descripción
Apéndice
Software
Placa Arduino UNO o Duemilanove o similar
1
DI
LED rojo de 5 mm
23
D2
LED amarillo de 5 mm
24
D3
LED verde de 5 mm
R1-R3
Resistencia 270 Q 0,5 W
R4
Resistencia 100 KQ 0,5 W
SI
Pulsador en miniatura para conm utación
25 6
13
El sketch del proyecto se m uestra en el Listado del Proyecto 5. El sketch es bastante auto explicativo. Una vez por segundo, el program a com prueba si se ha pre sionado el pulsador, de form a que si lo pulsam os varias veces con rapidez no cam biará la secuencia de luces. Sin em bargo, si m antenem os presionado el
48
pulsador, las luces harán
la secuencia com pleta
autom áticam ente. El sketch tam bién utiliza una función indepen
Hardware
diente, setLights, para establecer el estado de cada
El esquem a electrónico del proyecto se m uestra en
LED. reduciendo así tres líneas de código a una.
la Figura 4-1. Los LEDs están conectados de la m ism a m anera que en nuestro proyecto anterior, cada uno con su resistencia lim itadora de corriente. El pin digital 5 está puesto a m asa ( GN D ) a través de R4, y cuando pulsam os el interruptor, éste pasa a 5 V.
Figura 4-1
Diagrama esquemático del Proyecto 5.
C apítulo 4
iiii
■r: iK?*i 'i
■
43
Más p royectos con LEDs
oioital
5, '.'SÍ!!!!!!'!.' D F R d u in o O u e m i 1a n o v e
t*
¡o í
pgfcé.K 9U GNO W»f»
0
«NAtOti IN 1 2 3 1 5
ldWII¿KH Diseño de la placa de pruebas del Proyecto 5. Un modelo de señales de tráfico.
■
-üaiSSHt ? ¡ ‘
35
'
^
o «c t
iáS'M DFfWuino ■
& Ji
,
\
L ,
á
\
» : a 6t3fi3
| "• ln< ;
«OOOO
OOOOO
OOOOO
OOOOO
OOOOO
5V
o«p
lioooo
ooooo
ooooo
ooooo
gnd
c io c c «le o o o c ojo o :|! I k c o c c o 'r o o i >co o cc c/ro v o * I f .r :f r i
í JOCCOOOOCCOGCCCCOCCCOCCO OCOOOOOOOOOOOOOGOCGOOCO 0 0 c oooo o o o o o c c c o c c c o o o o 000 oooooooooo c o c c c c o c c o
roooooooooooooooooooooo
> c o f c c jíc c c e c c c o c c c c o c o o o o o o o o o o o c c c c o o c e o
>CCC0CC0 0 C C 0 C C 0 C 0 C 0 0 0 0 0 0 0 0 0 0 0 0 G 0 C C C C 0 C C 0 ¡CCCCCCOOOOOCCOCCOOCOOOOOOOOOOOOCCOOOC0 0
>00000000000000 0000000000000000 o co c c b c c c >000000000
ooo oooo
ooooo ooooo
«o oo
o o o o o o o o o o o o o o o o o o o o OOOOOOOOOO
CO
ooooo
OOOO»—
«OOOO
OOOOO
OOOOO
OOOOO
OOOOO
O
OOOOO
OOOO»
4 0 0 0 0
OOOOO
OOOOO
OOOOO
OOOOO
Diagrama de la placa de pruebas del Proyecto 5.
5V GND
44
3 0 Proyectos con A rd uino
LISTADO DEL PROYECTO 5
Pongamos to d o ju n to C argue el sketch term inado del Proyecto 5 desde su
int int int int
redPin = 2; yellowPin = 3; greenPin = 4; buttonPin = 5;
int
S tate
A rd u in o S k etch b o o k (véase el C apítulo 1). Pruebe el proyecto m anteniendo pulsado el botón y com pruebe que todos los LEDs se van ilu m inando siguiendo la secuencia establecida.
= 0;
Proyecto 6
void setup()
Luz Estroboscópica
{ pinMode(redPin, OUTPUT); pinMode(yellowPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(buttonPin, INPUT);
>
Este proyecto utiliza el m ism o LED Luxeon de gran potencia que utilizam os en el traductor de código M orse. En este caso añadim os adem ás una resis tencia variable llam ada potencióm etro, la cual nos perm ite el control sobre el ritm o de destello de la luz estroboscópica.
void loop()
{
Nuestra luz estroboscópica if (digitalRead(buttonPin))
PRECAUCIÓN
{ if
(State
destella con gran intensidad luminosa. Si tiene algún pro
== 0)
blema de salud, como por ejemplo, epilepsia, puede
{ setLights(HIGH, LOW, LOW); state = 1;
que sea mejor saltarse este proyecto.
COMPONENTES Y EQUIPO
} else if (state == 1)
Descripción
{ setLights(HIGH, HIGH, LOW); state = 2;
Apéncice
Placa A rd u in o UNO o D uem ilanove o sim ilar
} else if (state ==2) '
DI
{
R1 Resistencia 270 Q 0.5 W
6
R2 Resistencia 4 Q 1 W
16
TI
Transistor pote ncia BD139
41
R3 P o te n c ió m e tro lineal 100K
17
setLights(LOW, LOW, HIGH); state = 3;
} else if (state == 3)
{
LED Luxon 1W
1
K it p ro to s h ie ld (o p c io n a l)
setLights(LOW, HIGH, LOW); state = 0 ;
30
3
E nchufe e lé c tric o 2.1 m m (o p c.)
49
C lip de batería 9 V (o p c io n a l)
50
} delay(1000);
} }
Hardware
void setLights(int red, int yellow, int green)
{ digitalWrite(redPin, red); digitalWrite(yellowPin, yellow); digitalWrite(greenPin, green);
}
El hardw are de este proyecto es básicam ente el m ism o que para el Proyecto 4 , sino que a éste le hem os añadido un potencióm etro (véase la Figura 4-4).
C apítulo 4
Figura 4 -4
■
Más p royectos con LEDs
45
Esquema e le ctró n ico del P royecto 6.
La placa A rduino está equipada con seis pines analógicos de entrada, num erados A nalog 0 a A *S V
A nalog 5. Es ellos se mide el nivel de tensión en la entrada, dando com o resultado un núm ero entre 0 (0 V) y 1023 (5 V). E sta característica la podem os aprovechar para conocer cuál es la posición del m ando de un poten cióm etro de m anera que al. variar su resistencia este actúe com o un divisor de tensión para nuestro pin analógico. La Figura 4-5 m uestra la estructura interna de un potencióm etro. El potencióm etro es un com ponente electrónico que se utiliza habitualm ente para el control de volu men. Está constituido por una pista circular de una cierta resistencia equipada con conexiones en
Analog Pin 0
am bos extrem os. Un cursor deslizante proporciona una tercera conexión m óvil. La resistencia ajustable del potencióm etro nos puede proporcionar un voltaje variable al conectar uno de sus extrem os a 0 V, y el otro a 5 V, con lo que el nivel de tensión en el cursor deslizante puede variar entre 0 y 5 V, según se gire el m ando. C om o puede com probarse, el diseño de la placa de pruebas (Figura 4-6) es sim ilar al del Proyecto 4.
GND Figura 4 -5
F u n cion am ien to in te rn o de un p o te n ció m e tro .
46
30 Proyectos con A rd uino
_
«OOOO
» T r 4 o ta Q
ooooo ooooo ooooo 5V ooooo ooo o o ooooo ooooo GND
0 0 X1 0 0
_OOOCOOOOOOQOCOOOOOOOOOOOOOO „ o o o o c o o o oo o o c o o o . o o0 o o o c ooococcoc o c o o c c o o o c o c o o c o o o o o o o o : c o c . c J O O O O OC O C : OOOO 0 C C 3 H C f . C 0« C :
T
rr -ar
T
ir
00 o o o o o o c o c o óo«oo ooooococcc ^ o o ooo oo oooo 00000000000 o oooooooooo
oooo ooooo OOOO
OOOOO
0 0 9 0 0
ooo' ooo
o
•
ooooo
OOO
ooooo ooooo ooooo GND
T1 - 8D 139
■ a b lM M in J n ia n ra n n a de la placa de pruebas del Proyecto 6.
Software El listado de código de este proyecto se m uestra a continuación. La paite más interesante es la relacio nada con la lectura de los valores de la entrada ana lógica y con el control del ritm o de destello. En el caso de los pines analógicos no es necesa
segundo; y los tiem pos entre el en c en d id o y el apagado del LED serán de 500 y 25 m ilisegu n d o s resp ectiv am en te. Por lo tan to , si nuestra en trad a an aló g ica cam bia de O a 1023, el cálcu lo que necesitam o s para d eterm in a r el retard o de d estello es a p ro x i m adam ente:
rio utilizar la función pinM ode. por lo que no hay que añadir nada más a la función de configuración
flashdelay =
(setup). Con los v alores m o strados podem os v ariar la v elo cid ad de d estello entre l y 20 veces por
+ 25
(1023 — analog_value) / 2
C om o consecuencia, un analog_value de O daría un valor de flash_delay de 561, y un analog_value
LISTADO DEL PROYECTO 6
de 1023 daría un retardo de 25. En realidad, habría que dividir por un poco más de 2, pero los cálculos
int ledPin = 11; int analogPin = 0;
resultan m ás sencillos em pleando solo núm eros enteros.
void setup()
Pongamos to d o ju nto
{ pinMode(ledPin, O U TPUT);
>
Cargue el sketch term inado del Proyecto 6 desde su A rd u in o S k etch b o o k y descargúelo en su placa (véase el C apítulo 1).
void l o op()
{ int period = (1023 analogRead(analogPin)) / 2 + 25;
sentido de las agujas del reloj aum entará la veloci dad de destello a m edida que se incremente el voltaje
digitalWrite(ledPin, H I G H );
en la entrada analógica. Si lo giram os en el sentido
delay(period);
contrario dism inuirá la velocidad de destello.
digitalWrite(ledPin, L O W ); delay(period);
}
C om probará que girando el potencióm etro en el
C apítulo 4
■
Más p royectos con LEDs
47
Montaje de una shieid Si desea hacer una shieid para este proyecto, puede adaptar la que hicim os en el Proyecto 4 o em pezar una nueva desde cero. La disposición de com ponentes de la placa Protoshield se m uestra en la Figura 4-7. Ésta es básicam ente la m ism a que para el Proyecto 4. excepto que hemos añadido el potenció metro. Dado que los term inales de los potencióm e tros son dem asiado gruesos com o para que entren en los agujeros de la Protoshield, lo m ejor es conectarlos utilizando trozos de cables o, com o hem os hecho aquí, soldando con cuidado hilos rígi
Montaje de un cable para alimentación externa con pila.
dos en sus term inales. Para proporcionar cierta resistencia m ecánica al potencióm etro puede pegar éste en su sitio con una gota de pegam ento Super Glue. El conexionado del potencióm etro a los ter minales de 5 V. G ND y Analog 0 se puede hacer por la parte de abajo de la placa, para que no se vea. Tras haber realizado la shieid, podem os indepen dizar ésta del ordenador alim entándola con una pila o batería de 9 V. Para alim entar el proyecto desde una pila, tene mos que hacem os un pequeño cable que tenga un
Proyecto 7 Luz para el T.A.E. El Trastorno Afectivo Estacional (TAE) afecta a un gran núm ero de personas; las investigaciones han dem ostrado que la exposición durante 10 o 20 m inutos al día a una luz blanca brillante que imite la luz del día tiene efectos beneficiosos. Para utilizar este proyecto para tal fin, sugiero el uso de algún
clip de conexión del tipo PP3 (el utilizado norm al mente con la pilas de 9 V) en un extrem o y una cla vija de alim entación de 2,1 mm en el otro. La figura
tipo de difusor, com o el vidrio esm erilado, ya que
4-8 m uestra el cable sem i-m ontado.
Luxeon de alto brillo. Utilizarem os una entrada ana
no se debe m irar directam ente a la luz de los LEDs. Este es otro proyecto basado en los LEDs lógica conectada a un potencióm etro que actúe com o control de tiem po, encendiendo el LED durante un determ inado período fijado por la posi ción del cursor del potencióm etro. Tam bién utiliza rem os
una
salida
an alógica
para
au m en tar
lentam ente el brillo de los LEDs cuando se encien dan y luego bajarlo cuando se estén apagando. Para conseguir que la luz sea lo suficientem ente brillante para que sea útil com o luz para el TAE, vam os a uti lizar seis LED Luxeon. Puede que la naturaleza “ protectora” de este pro yecto esté causando a las mentes más rebeldes algo parecido a una crisis de identidad. Pero no, no tengan miedo: en el Proyecto 8 vam os a convertir este m ism o hardw are en una tem ible luz estrobos cópica de alta potencia. Diseño de la Protoshield para el Proyecto 6.
48
30 Proyectos con A rd uino
COMPONENTES Y EQUIPO Descripción
Apéndice
Placa A rd u in o UNO o D uem ilanove o sim ilar
1
D1-6
LED Luxon 1W
30
R1-3
Resistencia 1 KO 0,5 W
7
R4-5
Resistencia 4 Q 2 W
16
R6
P o te n ció m e tro lineal 100K
17
IC1-2
R egulardor vo lta je LM317
45
T1-2
FET 2 N 7 0 0 0
42
Fuente a lim en ta ció n regulada 15 V 1 A
51
Tarjeta p erforada
53
Term inal de to rn illo de tres vías
■ ■
52
Nota: este es uno de los proyectos de este libro que requieren soldar. Va a necesitar seis LED Luxeon para este proyecto. Si desea ahorrar algo de dinero, eche un vistazo en las tiendas online, donde debe poder conseguir 10 de estos LEDs por 106 a 2 0 € .
Hardware Algunos de los pines digitales, y en concreto los números 5, 6, 9, 10 y 11, pueden proporcionar una salida variable en lugar de sólo 5 V o nada. Estos son los pines en los que aparece PW M junto a ellos en la placa. Esta es la razón por la que hemos empezado a usar el pin 11 para nuestro control de salida. PW M son las siglas de Pulse Width Modulation (modulación por anchura de pulsos), y se refiere a la forma de controlar la cantidad de energía en la salida. Este control se hace activando y desactivando rápida mente la salida. Los pulsos se realizan siempre al mismo ritmo (aproximadamente 500 por segundo), siendo la longi tud de los mismos lo que varía. Si los pulsos son largos, nuestro LED estará encendido todo el tiempo. Sin em bargo, si los pulsos son cortos, en realidad el
LED se enciende sólo durante un corto espacio de tiempo. Esto ocurre tan rápido que el observador no percibe que el LED en realidad está parpadeando, y solo cree observar que el LED está más o menos bri llante. Quizá los lectores quieran echar un vistazo en Wikipedia a una descripción más detallada de PWM. El valor de la salida se puede ajustar utilizando la función analogW rite, que requiere un valor de salida entre 0 y 255, donde 0 indicará apagado y 255 plena potencia. Com o se puede ver en el esquema electrónico de la Figura 4-9, los LEDs están ordenados en dos columnas de a tres. Éstos se alimentan desde una fuente externa de 15 V en lugar de la alimentación de 5 V que hemos usado anteriormente. Puesto que cada LED consume alrededor de 300 mA. cada colum na necesitará 300 mA, por lo que la alimentación debe poder proporcionar 0,6 A (1 A para mayor seguridad). Este es el circuito más complejo de los realizados hasta ahora en nuestros proyectos. Estamos utilizando dos circuitos integrados que incorporan un regulador variable de voltaje, con objeto de limitar la corriente que llega a los LED. La salida de los reguladores de voltaje será normalmente de 1 25 V por encima del voltaje del pin R ef del chip. Esto significa que si manejamos nuestros LED con una resistencia de 4 Q. habrá una corriente de aproximadamente I = V/R, ó 1,25/4 = 312 mA circulando por ellos. El FET (transistor de efecto campo) es similar a nuestro transistor bipolar normal en el sentido de que al igual que éste puede actuar com o un interruptor, sino que la resistencia que presenta una vez desco nectado es mucho más alta. Por lo tanto, cuando no está activado por algún voltaje en su puerta, es como si no existiera en el circuito. Sin embargo, cuando se activa, hará bajar el voltaje del pin R ef del regulador a una tensión lo suficientemente baja com o para evitar que circule cualquier corriente por los LED. provo cando su apagado. Ambos FET se controlan desde el mismo pin digital 11. El montaje com pleto del circuito de LED se m ues tra en la Figura 4-10 y el diseño de la placa perforada, en la Figura 4-11. El circuito se ha montado sobre una placa perfo rada. que es simplemente una placa con agujeros, sin ningún tipo de conexiones. Este tipo de placas sirve
C apítulo 4
■
Más p royectos con LEDs
49
D6
D5
D4
Figura 4 -9
Esquema e lé c tric o del P royecto 7.
de estructura para insertar los com ponentes, siendo necesario cablearlas por la parte de abajo, ya sea empalmando juntos los terminales o mediante cables. Lo más sencillo es soldar dos hilos en cada LED antes de colocarlos en la placa. Es una buena idea marcar los terminales del LED mediante colores:
cable rojo para el positivo y negro o azul para el nega tivo, para que queden identificados de forma correcta. Dado que los LEDs se calientan, es recomendable dejar un espacio entre ellos y la placa perforada, uti lizando el aislamiento de los cables para que haga de separador. El regulador de tensión tam bién se
. -,V ****• <
Figura 4-10
Proyecto 7. Montaje de luz de gran potencia.
50
30 Proyectos con A rd u in o
LM 317 Visto desd« arriba
ooooo ooo
OOOOOOOo o o o o o Oo o o ooo o o o ooo
oo
o o ooo o o ooo
o o ooo o o ooo o o ooo o o o ooo ooooo ooo o o o o o ooo o o o o o ooo o o o ooo 000000 ooo ooo o o ooo o o ooo o o ooo o o ooo o o o ooo o o o o ooo o o o o o ooo o o o o ooo o o o ooo o o o ooo o o o ooo
Control
O o o
oo ooo ooo oooo oooo oooo ooooo ooooo ooooo ooooo ooooo ooooo
o o ooo
o o o o o
ooooooooooo oooooooooooooooooooooooooooo oooooooooooooooooooooooooooo oooooooooooooooooooooooooooo oooooooooooooooooooooooooooo
oo oo oo oo ooo ooo ooo ooo ooo
ooo ooo ooo
000
ooo ooo ooo ooo ooo
D istrib u ció n de la placa perforada.
ca lie n ta , pero no tanto com o para necesitar un
dos term inales coincidirán con los pines A nalog
d isip ad o r térm ico. En cuanto a los reguladores de voltaje u tilizad o s, éstos ya disponen de p ro tec ción térm ica interna, la cual reducirá au to m ática m en te la co rrie n te si em p iez an a c a le n ta rse dem asiad o .
O y 4. C onsulte la F igura 4-12 para ver esta d is tribución. R ecordará que com entam os que las entradas analógicas tam bién se pueden utilizar com o sali das dig itales añadiendo 14 a su núm ero de pin. P or tanto, para d isponer de 5 V en un extrem o de
Los term inales con tornillo de la placa son para G N D y 15 V de la fuente de alim entación y para una en trad a de co n tro l. C uando conectam os
nuestro potencióm etro y de O V en el otro , vam os a estab le cer las salidas an alógicas de los pines O
ésta a la placa A rduino, los 15 V vendrán del pin Vin de la A rduino, que a su vez se alim enta de una fuente de alim entación externa de 15 V. N uestro m ódulo LED de alta p o ten cia lo v o l verem os a u tilizar en otros pro y ecto s, por lo que vam os a co n ectar directam ente el potencióm etro en el co n ecto r A n alog In (entrada analógica) de
y 4 (pines d igitales 14 y 18) aO V y 5 V, re sp ec tivam ente.
la placa A rduino. L a separación entre los te rm i nales del p o tencióm etro es de unos 5 m m , lo que sign ifica que si el term inal central del cu rso r d es lizante se en cuentra en el pin A n alog 2, los otros
m in O n S eco n d s y m a x O n S eco n d s. Es una prác tica com ún en program ación colocar estos valores dentro de variables, por si querem os cam biarlos pos teriorm ente. y situarlas para que sean visibles en la
S o ftw a re En la parte su p erio r del sk etch , después de la va riable utilizad a para los p in es, tenem os otras c u a tro variables: sta rtu p S eco n d s, tu rn O ffS eco n d s,
C apítulo 4
■
Más p royectos con LEDs
LISTADO DE PROYECTO 7 int ledPin = 11; int analogPin = 2;
int startupSeconds = 20; int turnOffSeconds = 10; int minOnSeconds = 300; int maxOnSeconds = 1800;
int brightness = 0;
void setup()
{ pinMode(ledPin, O U TPUT); digitalWrite(ledPin, H I G H ); pinMode(14, OUTPUT);
// Use pines Analog 0 y 4 para
pinMode(18, OUTPUT);
/ / e l potenciómetro
digitalWrite(18, H I G H ); int analogln = analogRead(analogPin); int onTime = map(analogIn,
0, 1023, minOnSeconds, maxOnSeconds);
t urnOn(); delay(onTime * 1000); turnOff();
} void turnOn()
{ brightness = 0; int period = startupSeconds * 1000 / 256; while (brightness < 255)
analogWrite(ledPin, 255 - brightness); de lay(p e riod); brightness ++;
} } void turnOff()
{ int period = turnOffSeconds * 1000 / 256; while (brightness >= 0)
{ analogWrite(ledPin, 255 - brightness); de lay(period); brightness — ;
} } void loop()
{}
51
52
30 Proyectos con A rd u in o
parte su p erio r del program a, para que resulte m ás sencillo cam b iarlas. La variable startu p S econ d s determ ina cuánto tiem po se necesita para que el brillo del LED aum ente grad ualm ente hasta alcan zar el m áxim o. Del m ism o m odo, tu rn O ffS econ d s d eterm in a el
ción de A rduino que podem os utilizar para ello. L a función m ap tiene cinco argum entos: el valor que desea co n v ertir, el valor m ínim o de entrada (0 en este ca so ), el valor m áxim o de entrada (1023), el valor m ínim o de salida (300) y el valor m áxim o de salida (1800).
p eriodo de tiem po para atenuar los L E D s. Las v a ria b le s m in O n S ec o n d s y m a x O n S e co n d s determ inan el intervalo de tiem pos establecido por el po ten cióm etro. En este program a no hay nada en la función loop. En su lugar todo el código está en setup. Por tan to , la luz iniciará autom áticam ente su
C argue el sketch term inado del Proyecto 7 desde su A rduino Sketchbook y descárguelo en su placa (véase el C apítulo 1). Ahora tiene que conectar los cables desde Vin. G N D , y el pin digital 11 de la placa Arduino a los
Pongamos to d o ju n to
ciclo cu ando se encienda. U na vez que haya fin a lizado, perm anecerá apagada hasta que se pulse el botón R eset (reinicio). El en cendido lento se consigue aum entando g rad u alm en te el valor de la salida analógica en 1. E sto se lleva a cabo en un bucle w h ile, donde el d elay (retraso) se estab lece en 1/255 del tiem po de in icio , con lo que, tras 255 p aso s, se habrá
tres term inales de tornillo del m ódulo LED (Figura 4-12). Conecte una fuente de alim entación de 15 V en el conector de alim entación de la placa Arduino y estará listo para probarla. Para iniciar de nuevo la secuencia de luz, haga clic en el botón de reinicio (reset).
alcan zad o el brillo m áxim o. El apagado lento fu n cio n a de form a parecida.
Proyecto 8
El p eríodo de tiem po de brillo m áxim o se d eterm in a por la entrada analógica. S uponiendo que q u eram os un intervalo de tiem po entre 5 y 30 m in u to s, necesitam os co n v e rtir el valor de 0 a 1023 en el núm ero de segundos que hay entre 300 y 1800. A fortunadam ente hay una práctica fu n
Figura 4-12
Proyecto 7. Luz para T.A.E.
Luz estroboscópica de alta potencia Para este proyecto, puede utilizar el m ontaje de seis LED Luxeon del Proyecto 7 o puede usar el shield Luxeon que hem os creado para el Proyecto 4. El softw are será casi el m ism o en am bos casos.
C apítulo 4
■
Más p royectos con LEDs
53
En esta versión de luz estroboscópica, vam os a controlar con com andos, desde el ordenador, el
Hardware
efecto estroboscópico. Enviarem os los siguientes
Véase el Proyecto 4 (el traductor de código M orse
com andos a través de la conexión USB utilizando el
que utiliza un único shieid LED L uxeon) o el
Serial M onitor.
Proyecto 7 (m atriz de seis LEDs Luxeon) para los com ponentes y detalles de su construcción.
0 -9
0 -9 establece la velocidad de los
w
siguientes comandos de modo: O para
Software
apagado, 1 para lento y 9 para rápido.
Este program a utiliza la función sin para crear un
Efecto de onda que gradualmente se vuelve más clara y luego más oscuro.
s
efecto que aum ente el brillo de form a progresiva y agradable. Aparte de esto, casi todas las técnicas que utilizam os en este program a ya se han utilizado en proyectos anteriores.
Efecto estroboscópico.
LISTADO DE PROYECTO 8 int ledPin = 11;
int period = 100;
char mode = 'o';
// o-apagado,
s-luz, w-onda
void setup() { pinMode(ledPin, OU T P U T ); analogWrite( ledPin., 255); S erial.b e g i n (9600); > void loop() { if (S e rial.available()) { char ch = Serial.read(); if (ch == '0') { mode = 0; analogWrite(ledPin, 255); > else if (ch > ’0' && ch <=
'9')
{ setPeriod(ch); } else if (ch == 'w'
|| ch == 's')
(continúa)
54
30 Proyectos con A rd uino
LISTADO DE P R O Y E C T O 8
(continúa)
{ mode = ch; } } if (mode == ’w ' ) / \ waveLoop(); \ / else if (mode == i \
's')
strobeLoop(); > >
void setPeriod(char ch) { int periodlto9 = 9 - (ch - '0’); period = map(periodlto9,
0, 9, 50, 500);
}
void w aveLoop() { static float angle = 0.0; angle = angle + 0.01; if (angle > 3.142) { angle = 0; }
•
// analogWrite(ledPin, 255 - (int)255 * sin(angle));
// Placa de pruebas
analogWrite(ledPin,
// Shieid
(int)255 * sin(angle));
delay(period / 100); >
void strobeLoop() { //analogWrite(ledPin, 0);
// Placa de pruebas
analogWrite(ledPin,
// shieid
255);
d e l a y (10); //analogWrite(ledPin, 255);
// Placa de pruebas
analogWrite(ledPin,
// shieid
delay(period); >
0);
C apitulo 4
Pongamos todo junto
■
55
Más p royectos con LEDs
y la siguiente línea dará a x un valor entre 0 y 9:
Cargue el sketch term inado del Proyecto 8 desde su A rduino Sketchbook y descárguelo en su placa (véase el C apítulo 1). C uando haya instalado el program a y colocado el shield Luxeon o conectado el panel de seis LED s, inicialm ente las luces estarán apagadas. Abra la ventana S erial M onitor, introduzca s y pulse RETURN. Esto hará que la luz com ience a parpa dear. Pruebe los com andos de velocidad 1 a 9. A continuación, pruebe a escribir el com ando w para cam biar al m odo de onda.
Generación de números alea torios Los ordenadores son determ inistas. Si les hace la m ism a pregunta dos veces, debería obtener la m ism a respuesta. Sin em bargo, a veces, quiere sentir lo que es "llevar la m ano". Evidentem ente, esto es útil en el caso de los juegos. T am bién
es
útil
en
otras
circu n stan cias.
Im agínese lo siguiente: un "paseo aleatorio" (donde
int
x = random (lO );
C om o hem os señalado al inicio de esta sección, los ordenadores son determ inistas y, en realidad, nuestros núm eros aleatorios no son aleatorios en absoluto, sino una larga secuencia de núm eros con una distribución aleatoria. O btendrá la m ism a secuencia de núm eros cada vez que ejecute el script. Una segunda función (random Seed) le permite controlar esto. La función random Seed determ ina en qué parte de su secuencia de pseudo-núm eros aleatorios em pezará el generador de núm eros alea torios. Un buen truco es utilizar el valor de una entrada analógica desconectada, ya que esto irá dando un valor diferente y con ello conseguirá un m ínim o de 1000 puntos de partida diferentes para nuestra secuencia aleatoria. Esto no serviría para la lotería, pero es aceptable para la m ayoría de las aplicacio nes. O btener núm eros verdaderam ente aleatorios es un tem a muy com plicado y requiere un hardware especial.
un robot realiza un giro al azar, luego se desplaza hacia adelante una distancia aleatoria o hasta que se golpea contra algo, luego da m archa atrás y se da la vuelta de nuevo) es m ucho m ejor para garantizar que el robot cubre toda la. zona de una habitación que un algoritm o más fijo que puede dar com o resultado que el robot se quede atrapado en una determ inada secuencia. La biblioteca Arduino incluye una función para
Proyecto 9
Dado de LEDs Este proyecto utiliza lo que acabam os de aprender sobre núm eros aleatorios para crear un dado elec trónico con seis LEDs y un botón. C ada vez que se pulsa el botón, el LED "rueda" durante un tiem po antes de quedarse en un valor, para luego com uni carlo m ediante destellos.
generar núm eros aleatorios. Hay dos versiones de la función ram dom (alea
COMPONENTES Y EQUIPO
toria). Puede tom ar dos argum entos (m ínim o y m áxim o) o un único argum ento (máximo), en cuyo
Descripción
caso el valor m ínim o se asum e que es 0. No obstante, tenga cuidado porque el argum ento
Apéndice
Placa A rd u in o UNO o
m áxim o es engañoso, ya que el núm ero m ayor que
D uem ilanove o sim ilar
1
puede devolverle es el m áxim o m enos uno. A sí, la siguiente línea d ará a x un v alo r en tre
D l-7
LEDs rojos estándar
23
I y 6:
R1-7
Resistencia 270 O 0,5 W
6
SI
Pulsador en m iniatura
in t
x = random (l,
7);
R8
para co nm uta ción
48
Resistencia 100K Q 0,5 W
13
56
30 Proyectos con A rd uino
Hardware
La Figura 4-14 m uestra la distribución de la
El esquem a electrónico del Proyecto 9 se m uestra
placa de pruebas y la Figura 4-15 la placa de prue
en la Figura 4-13. Cada LED se m aneja con una
bas finalizada.
salida digital independiente m ediante una resisten cia lim itadora de corriente. Aparte de esto lo único
Software
que hace falta es el pulsador y la correspondiente
Este program a es bastante sencillo, pero aún así tiene
resistencia asociada de puesta a masa.
pequeños detalles que hacen que el dado se comporte
Aunque los dados suelen tener un m áxim o de
de manera sim ilar a un dado real. Por ejem plo,
seis puntos, seguim os necesitando siete LEDs para
cuando el dado "rueda", el número cambia pero va
conseguir la disposición normal de un punto en el
dism inuyendo gradualm ente. Además, la cantidad de
centro para m ostrar los núm eros im pares.
tiempo que "rueda" el dado también es aleatoria.
Figura 4-13
Esquema e lé c tric o del P royecto 9.
ooooo ooooo
ooooo ooooo
ooooo ooooo
5V GND
O O O O O G
QOOCOO i O C O O O C O C O ooooooc SÉ ü o c c c c o _o o c o o c o ofSirrrri l o o o o o o o o o o o o oí c ooo o o c o c c o o c o G00C c o o o c o o c c o ooooooooooooooo 0 0 0 0 0 OOOQCQCCOO VOOOO o o o o o o o o o o
kcccccr
P «oooo 3 ooooo
E H l ü i & L I D istrib u ció n de la placa de pruebas para el P royecto 9.
ooooo ooooo
5V GND
C apítulo 4
Figura 4-15
■
Más p royectos con LEDs
57
P royecto 9. Dado de LEDs.
LISTADO DE PROYECTO 9 int ledPinsf 7] = {2, 3, 4, 5, 6, 1 ,
8);
int dicePatterns[7][7] = { {0, 0, 0, 0, 0, o, 1},
// 1
{0, 0, 1, 1, 0, 0, 0},
// 2
{0, 0, 1, 1, 0, o, 1},
// 3
{Ir 0, 1, 1, 0, 1, 0},
// 4
{1, 0, 1, 1, 0, 1, 1},
// 5
{1, 1, 1,
// 6
0},
{0, 0, 0, 0, 0, o, 0}
// En
}; int switchPin = 9 ; int blank = 6;
void setup()
{ for (int i = 0; i < 7; i++)
{ p i n M o d e ( l e d P i n s [ i ] , OUT P UT ) ; digitalW rite(ledP ins[i],
LOW) ;
} randomSeed(analogRead(0));
}
void loop()
{ (continúa)
58
30 P royectos con A rd uino
LISTADO DE PROYECTO 9 (continúa) if (digitalRead(switchPin))
{ rollTheDice();
} d e l a y (100);
void rollTheDice()
{ int result = 0; int lengthOfRoll = random(15,
25);
for (int i = 0; i < lengthOfRoll; i++)
{ result = random(0,
6);
// resultado será de 0 a 5 no 1 a 6
show(result); d e l a y (50 + i * 10);
> for (int j = 0; j < 3; j++)
{ show(blank); d e lay(500); show(result); d e lay(500);
}
void show(int result)
{
.
for (int i = 0; i < 7; i++)
{ digitalWrite(ledPins[i ] , dicePatterns[re s u l t ][i ]);
>
A hora tenem os siete LEDs que inicializar en la
esta línea en com entario colocando una // al princi
función setup, por lo que vale la pena ponerlos en
pio de la m ism a para com probarlo. ¡De hecho,
una m atriz (array) y crear un bucle (loop) que vaya
puede que prefiera om itir esta línea y hacer tram pas
recorriendo la m atriz para inicializar cada pin.
en el juego de La oca!
Tam bién tenem os una llam ada a random Seed en
El a r r a y d ic e P a tte rn s determ ina qué LEDs
setup, que si no estuviera allí, cada vez que hiciéra
deben estar encendidos o apagados en una jugada
mos un reset de la placa term inaríam os siem pre con
determ inada. De form a que. cada elem ento de tiro
la m ism a secuencia de lanzam ientos del dado.
de la m atriz, es en realidad en sí m ism o otra matriz
C om o experim ento, si lo desea, pruebe a convertir
de siete elem entos, pudiendo ser cada uno de ellos
C hapter 4
■
More LED Projects
59
HIG H o LO W (1 ó 0). Cuando vam os a m ostrar el
Resumen
resultado concreto de haber tirado los dados, pode
En este capítulo hem os utilizado un conjunto de
mos sim plem ente recorrer la m atriz del tiro, ajus
LED s y diferentes técnicas de softw are para conse
tando cada LED en consecuencia.
guir interesantes efectos lum inosos. En el siguiente capítulo vam os a investigar algunos sensores para
Pongamos todo junto C argue el sketch term inado del Proyecto 9 desde su A rd u in o S k etch b o o k y descárguelo en su placa (véase el C apítulo 1).
utilizarlos com o entrada en nuestros proyectos.
C A P Í T U L O
5
Proyectos con sensores
Los
senso r es c o n v ie r t e n
las m edidas del m undo
real en señales electrónicas que podem os utilizar en nuestras placas A rduino. Todos los proyectos en este capítulo tratan sobre el uso de la luz y la tem peratura
tam bién controle la cerradura de una puerta. Dado que por lo general los teclados no suelen tener pines conectados, nosotros se los tendrem os que soldar, por lo que en este proyecto tendrem os de nuevo la posibilidad de practicar la soldadura.
También echarem os un vistazo a cóm o estable cer una interfaz con teclados y codificadores girato
Hardware
rios.
El esquem a electrónico del Proyecto 10 se m uestra en la Figura 5-1. En los proyectos anteriores nos
Proyecto 10
habíam os fam iliarizado con
Código de seguridad con el teclado
añadim os a estos un nuevo com ponente: el teclado.
los LED; y ahora le
Los teclados norm alm ente se organizan en una cuadrícula, de modo que cuando se pulsa una tecla,
Este proyecto seguram ente ocuparía un lugar desta
se conecta una fila a una colum na. La Figura 5-2
cado en cualquier
mente inquieta que se precie.
m uestra la distribución típica de un teclado matri-
Básicam ente consiste en que al introducirse un
cial de 12-teclas, con núm eros de 0 al 9 y las teclas
código de seguridad en un teclado; si es correcto, se
* y #.
ilum inará un LED verde; de lo contrario, se encen derá un LED rojo. En el Proyecto 27 volverem os sobre este proyecto y m ostrarem os cóm o am pliarlo para que no sólo m uestre la luz adecuada, sino que
COMPONENTES Y EQUIPO Descripción
Apéndice
Los pulsadores de cada tecla se encuentran en la intersección de los cables de las filas y colum nas. Al pulsar una tecla, se conecta una determ inada fila a una determ inada colum na. O rganizar las teclas en una cuadrícula com o ésta significa que sólo necesitam os usar 7 pines digitales (4 filas + 3 colum nas) en lugar de 12 (uno por cada
Placa A rd u in o UNO o D uem ilanove o sim ilar
tecla). 1
No obstante, esto tam bién im plica que tenem os
DI
LED rojo de 5 m m
23
que trabajar un poco más el software para determ i
D2
LED verde de 5 mm
25
nar qué teclas se presionan. El enfoque básico con
Rl- 2 Resistencia 270 Q 0,5 W
6
siste en conectar cada fila a una salida digital y cada
K1
Teclado de 4 x 3
54
Tira cabecera de 2,5 cm
55
colum na a una entrada digital. A continuación, acti vam os cada salida en orden y vem os qué entradas se han activado. 61
62
30 Proyectos con A rd u in o
D5
D1
D3 D2
AA
D1
270 Q
02
R2
5/
D8
Rojo
R1
V y y
i V e rd e
270 0
/■ ^í
D9
9 /
D6
u a
Arduino UNO Duemilanove D4
y
X
y
J GND Figura 5-1
Esquem a e lé c tric o del P royecto 10.
com pran en tiras, y de éstas se puede cortar el La Figura 5-3 m uestra cóm o soldar un conector
núm ero de pines que necesitem os.
de siete pines al teclado para que luego pueda
Ahora, lo único que necesitam os es averiguar
conectarlos a la placa de pruebas. Estos pines se
qué pin del teclado num érico corresponde a cada
Col 1
fila o colum na. Si tenem os suerte, el teclado vendrá con una hoja inform ativa que nos lo indique. Si no.
Col 2
Col 3
tendrem os que averiguarlo con la ayuda de un poli-
Row 1
V 5
7 Row 2
Row 3
Row 4
Figura 5-2
y
prueba. A continuación, tom e un papel y dibuje un
3 /
V
y-
y i*6 //
metro. C oloque el polím etro en continuidad para que suene un bip cuando juntem os las puntas de
*/■
Teclado matricial de 12 botones.
Figura 5-3
Soldadura de pines al teclado.
C apítulo 5
□0
Key
0 0 0 0 0 0 □0 0
Pins connected
a b c d e f g
Proyectos con sensores
63
En la Figura 5-5 se m uestra el diseño term inado de la placa de pruebas. Observe que el teclado tiene
i
fco «, u
3
b, e
7
DTrUTOT
■
*. 9
Puede que ya haya notado que junto a los pines digitales 0 y 1 aparecen las etiquetas T X y R X . Esto
6
es debido a que tam bién son utilizados por la placa
7
6
(Figura 5-6), por lo que sólo necesitam os la placa de pruebas para los dos LED.
4 5
siete pines que se insertan directam ente en los conectores D igital P in 1 a 7 de la placa Arduino
A rduino para las com unicaciones serie, incluyendo a,f
la conexión USB. En este caso, no estam os utili zando el pin digital 0, pero hem os conectado el pin digital 1 a la colum na central del teclado. Esto sig
a, d
nifica que podrem os seguir program ando la placa, pero que no podrem os com unicarnos a través de la conexión USB m ientras que el program a se esté eje
Figura 5 -4
C om pro ba ció n de las conexiones
cutando. Puesto que en cualquier caso tam poco nos
del teclado.
hace falta, en realidad esto no representa ningún problem a.
diagram a de las conexiones del teclado y etiquete cada pin con una letra desde la a hasta la g. Luego, escriba una lista de todas las teclas. Entonces, m an teniendo pulsada cada una de las teclas, una tras otra, busque el par de pines que hace sonar el polim etro, lo que indicará una conexión (Figura 5-4). Suelte la tecla para verificar que realm ente ha encontrado el par correcto. Tras un cierto tiem po, aparecerá un patrón y podrá ver con facilidad la relación de los pines con las filas y colum nas. La Figura 5-4 m uestra la disposición del teclado num é rico utilizado por el autor.
Software Si bien podríam os escribir un program a que active la salida de cada fila, una tras otra, y que lea las entradas para obtener las coordenadas de cada tecla pulsada, en realidad es un poco más com plicado, ya que los pulsadores no siem pre se com portan de la m anera adecuada cuando se pulsan. Tanto los tecla dos com o el resto de pulsadores eléctricos son pro pensos a "rebotar". Es decir, cuando se pulsan, a veces no sólo se limitan a pasar de abierto a cerrado,
o o o o o o o o o OOOOO OOOO OOOOO OOOOO
coopcci C O O O C O I 0 O O O C O I
■lili!
OOOOO OOOOO OOOOO OOOOO
GND 5V
¡OOOOOOOOOOOOGOO ¡OOOOO OOOOOOOCOO ¡cooocoocoocccoo íoocooOOOOOOOCOO
OOOOOOOOOOOOOOOOO .o o o o o o o 0 0 0 0 0 0 0 0 C 0
C 0 C 0 0 C 0 0 OOOOOOOCOO OCCOCOCOOOOOOCOOOCCC OCCOCOOOOOOOOOOOOCOO 3000 ♦O O O O Diseño de la placa de pruebas del P royecto 10.
o o o o o o o o o o OOOOO OOOOO OOOOO OOOOO
OOOOO OOOOO
GND 5V
64
30 P royectos con A rd u in o
Figura 5-6
Proyecto 10. C ód igo de segu rid ad con teclado.
sino que al pulsar el botón se abren y cierran unas cuantas veces.
En Linux, busque el directorio de instalación de Arduino y copie la carpeta en hardware/bibliotecas.
A fortunadam ente, M ark Stanley y A lexander Brevig han creado una biblioteca para usarla con los teclados y resolver el problem a del rebote, ahorrán donos a nosotros el trabajo de hacerlo. Esta es una buena oportunidad para dem ostrar cóm o se instala una biblioteca en el softw are de A rduino.
En un M ac, no ponga la nueva biblioteca en la instalación de A rduino. En su lugar, cree una car peta llam ada bibliotecas en D ocum entos/A rduino (Figura 5-8) y coloque allí la carpeta bibliotecas co m p leta. P or cierto , el directo rio D ocum entos/A rduino es tam bién la ubicación pre determ inada donde se alm acenan sus sketches.
Adem ás de las bibliotecas que vienen con la placa A rduino, m uchas personas, han desarrollado sus propias bibliotecas y han publicado sus resulta dos para beneficio de la com unidad A rduino. Aunque a algunos puede que este altruism o les haga sonreír y que lo vean com o una debilidad, espere mos que no se sientan tan superiores com o para no utilizar esas bibliotecas para sus propios fines.
Una vez que hayam os instalado esta biblioteca en nuestro directorio A rduino. podrem os usarla con cualquiera de los program as que escribam os. Pero recuerde que en W indows y Linux, si actualiza a una versión más reciente del softw are A rduino, tendrá que volver a instalar las bibliotecas que uti lice.
Para hacer uso de esta biblioteca, prim ero debe
Puede com probar que la biblioteca está co rrec
mos descarg arla desde el sitio w eb de A rduino en esta d irección: w w w .a rd u in o .cc/p la y g ro u n d / C ode/K eypad.
tam ente instalada reiniciando la A rduino. em pezar un nuevo sketch y eligiendo la opción de m enú S ketch I Im port L ib ra ry I K eypad. Esto debe insertar el texto "#include " en la parte superior del archivo.
D escarg u e el archivo K eyp ad .zip y d esc o m p rím alo . Si está u tilizan d o W indow s, haga clic con el bo tó n secu n d ario y seleccio n e E xtraer to d o y, a co n tin u ac ió n , guarde el archivo en C :\A r c h iv o s de p ro g r a m a \a r d u in o \a r d u in o 0 0 1 9 \h a r d w a re\b ib lio tec a s (F ig u ra 5-7).
El sketch de la aplicación se m uestra en el L istado del Proyecto 10. Tenga en cuenta que puede que tenga que cam biar las m atrices (arrays) de keys, row Pins y colPins. para que coincidan con la
C apítulo 5
■
65
P royectos con sensores
librarles View
Favorites
Tools
»
%
Help
Seorch
Folders
[:¡||
ü O EEPROM
Figura 5-7
Ethernet
Address
O
O
Firmata
LiquidCrystal
O
O
a
O
Matrix
Servo
Keypad
SoftwareSerial
a O
P
Sprite
Wlre
Stepper
Instalación de la b ib lio te ca para W indow s.
.
evil_genms
ÍJ
Examples
Bluecrest
^
Keypad.cpp
clare
¡HJ Keypad. h
eagle
#
▼ DEVICES B
Sim ons Mac
O IDtsk ¿ i M a c in to s h HD
£
eclipse ► SHAREO
S i home S i lialian *
iournal.txt
~ i M a cin to sh HO ► LA, Users • ^
s> ► Üfc D o cu m e n ts ► Q
A rd u in o ► £ ¡ ¡ lib ra rle s ►
Keypad
keywords.txt
66
30 Proyectos con A rd u in o
LISTADO DEL PROYECTO 10
#include char* secretCode = "1234"; in t pos i t ion = 0; const byte rows = 4; const byte cois = 3; char keys[rows][c o is ] = { { ' l ' , ' 2 -, ' 3 '}, { ' 4V 5 V 6 '}, { ‘ 7 ’ , ' 8 V 9' } , 10' , '#'} >; byte rowPins[rows] = {2, 7, 6, 4}; byte colPins[cols] = {3, 1, 5>; Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cois); in t redPin = 9; in t greenPin = 8; void setup( ) { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); setLocked(tru e ); > void loop( ) { char key = keypad.getKey( ) ; i f (key == || key == '#') { pos i t ion = 0; setLocked(tru e ); > i f (key == secretCode[p o sitio n ]) { position ++; > i f (position == 4) { setLocked(fa ls e ) ; } delay(100) ; } void setLocked(in t locked)
(continúa)
C apítulo 5
■
Proyectos con sensores
67
LISTADO DEL PROYECTO 10 (continúa)
if
(locked)
{ d i g i t a l W r i t e (r e d P in ,
HIGH) ;
digitalW rite(greenP in,
LOW) ;
} else
{ d i g i t a l W r i t e ( r e d P i n , LOW) ; d i g i t a l W r i t e (g re e n P in ,
HIGH) ;
}
distribución de teclas del teclado, com o com enta mos en la sección del hardware. Este sketch es bastante sencillo. La función loop com prueba si se ha pulsado una tecla. Si la tecla presionada es # o *, vuelve a establecer a O la posición de la variable. Si, por otro lado, la tecla que se pulsa es uno de los núm eros, com prueba si la tecla pulsada es la siguiente tecla esperada (secretC ode[position]) y, si es así, increm enta la posición en uno. Por últim o, el bucle com prueba si la posición es 4 y, si es así, coloca los LED en su estado de desbloqueado.
Pongamos todo junto Cargue el sketch term inado del Proyecto 10 desde su Arduino Sketchbook y descárguelo en su placa (véase el C apítulo 1). Si tiene problem as para conseguir que esto fun cione, lo más probable es que haya algún problem a con la disposición de los pines en el teclado. A sí es que, com pruebe con el polím etro el trazado de las conexiones de los pines.
Codificadores giratorios Ya conocem os cóm o funcionan los potencióm etros: a m edida que giram os el m ando, va cam biando la resistencia. Tradicionalm ente, estos solían estar tras la m ayoría de los m andos giratorios que pudiera m anipular en los equipos electrónicos. Hoy día existe una alternativa, el codificador giratorio, y si tiene en casa algún aparato electrónico en el que se
pueda girar el m ando indefinidam ente sin que llegue a ningún tope de parada, probablem ente detrás del m ando haya un codificador giratorio. Algunos codificadores giratorios tam bién incor poran un botón, de form a que puede girar el m ando y luego pulsar. Esta es una form a especialm ente útil de hacer una selección de un menú cuando se utiliza con una pantalla de cristal líquido (LCD). Un codificador giratorio es un dispositivo digital que tiene dos salidas ( A y B) y, según se gira el m ando, se obtiene un cam bio en los resultados, que pueden indicar si el m ando se ha girado hacia la derecha o hacia la izquierda. La Figura 5-9 m uestra cóm o cam bian las señales en A y B cuando se gira el codificador. C uando gira hacia la derecha, los pulsos cam bian, ya que esta rían desplazándose de izquierda a derecha en el dia gram a; cuando se m ueve hacia la izquierda, los pulsos se m overían de derecha a izquierda en el dia gram a. Por tanto, si A está desactivado (bajo) y B está desactivado (bajo), y luego B se activa (alto) (pasa de la fase 1 a la 2), esto indicaría que hem os girado el m ando hacia la derecha. Tam bién se indicaría un giro a la derecha si A está desactivado (bajo) y B se encuentra activado (alto) y, entonces, A se activa (alto) (pasando de la fase 2 a la fase 3), etc. Sin em bargo, si A estuviera alto y B estuviera bajo y luego B pasara a alto, habríam os pasado de la etapa 4 a la etapa 3 y. por lo tanto, se habría girado hacia la izquierda.
30 P royectos con A rd u in o
68
i
_r
B Phase 1 2 F igura 5-9
3 4
1 2 3 4 1
2 3 4
Pulsos de un c o d ific a d o r g iratorio.
Proyecto 11
Hardware
Modelo de semáforo basado en un codificador giratorio
El esquem a electrónico del Proyecto 11 se m uestra en la Figura 5-10. La m ayor parte del circuito es la m ism a que la del Proyecto 5, excepto que ahora
Este proyecto utiliza un codificador giratorio con un pulsador incorporado para controlar la secuencia de las señales de un sem áforo, y se basa en el Proyecto 5. Se trata de una versión m ucho más realista de un sem áforo y, realm ente, no se encuentra muy alejado de la lógica que se encontraría en un sem áforo auténtico. Al girar el codificador giratorio cambiará la fre cuencia de la secuenciación de las luces. Pulsar el botón hará que se prueben las luces, encendiéndolas todas al mismo tiem po mientras se m antiene pulsado. Los com ponentes son los m ism os que los del Proyecto 5. con la adición del codificador giratorio y de las resistencias de puesta a nivel alto en lugar del conm utador de botón original.
COMPONENTES Y EQUIPO D escripció n
A p é n d ic e
Placa A rd u in o UNO o D uem ilanove o sim ilar
1
DI
LED rojo de 5 m m
23
D2
LED am arillo de 5 m m
24
D3
LED verde de 5 mm
25
R1-R3
Resistencia 270 Q 0,5 W
6
R4-R6
Resistencia 100 KQ 0,5 W
13
SI
C o d ifica d o r g ira to rio con pulsador para co n m u ta ció n
57
tenem os un codificador giratorio. El codificador giratorio funciona igual que si hubiera tres interruptores: uno para A , otro para B y otro para el botón pulsador. Cada uno de estos inte rruptores requiere de una resistencia de puesta a masa. Dado que el circuito es prácticam ente igual al del Proyecto 5, no será una gran sorpresa ver que la distribución de la placa de pruebas (Figura 5 -1 1) es sim ilar a la de ese proyecto.
Software El punto de partida del sketch es el sketch del Proyecto 5. Hemos añadido código para leer el codi ficador y para responder a la pulsación del botón que enciende todos los LEDs. También hemos aprove chado la oportunidad para mejorar la lógica para que las luces se com porten de m anera más realista, cam biando autom áticam ente. En el Proyecto 5. cuando se m antenía pulsado el botón, las luces cambiaban de secuencia aproximadam ente una vez por segundo. En los semáforos reales, las luces permanecen verde y rojo m ucho más tiempo de lo que lo hacen las de color amarillo. Por lo tanto, nuestro sketch tiene ahora dos perío dos: shortPeriod, que no cambia pero que se utiliza cuando las luces están cam biando, y longPeriod, que determ ina cuánto tiempo están iluminadas cuando
C apítulo 5
■
Proyectos con sensores
69
D2 D3
D4 Codificador giratorio SV
il.il Arduino UNO Duemilanove
D 1 Rojo
D5
Z
-*-D 2 Ama J E p
W Verd
D6 D7
I_I
GND
Figura 5-10
Esquema e lé ctrico del P royecto 11.
\
\ koooo
ooooo
ooooo
¡pp fUO OO 000(1 uiimíüliü
&LÜ
ocooéocci ococoococ
5q»of e
C C O O O C C cSr
, t , /<
ocococc
yCCOOO coco II
ccco o críé#
5V GND
^ oooooooooo í ocoooccooo cc|c o c o o o c c o o o n ~ccoeccoooo ■o o c o o o c o o
n o o o o e o 0 e a & # * fo o c o o o o o
CÜuú'CCGoüfCOOOOCOOOOO OIO Q §S U * ! ® ©o o i p o CO C CC C 5C C 3 OOCCCCOOCOCOOCOC O O O O O O O O C O O OC O O O O O O O f !
OOOO
OOOOO
fpovoo
OOOOO
OOOOI
OOOO
OOOOO
OOOOI
5000
ooooo
oo
OOOOO
00004
OOOO
OOOOO
ooooo
O
ooooo ooooo o o -o o o o o
L ooccocooo coocccoooo c 'o o c c o c o o c ococoooo
H
o o o o o o o o
OO ooooo
OOOOO ooooo
5V GND
D isposición de co m p on en te s del P royecto 11 en la placa de pruebas
están verde o rojo. Este longPeriod es el período que se modifica girando el m ando del codificador.
dez el controlador giratorio resultaría que algunos cambios no serían reconocidos correctamente.
La clave para m anejar el codificador giratorio se encuentra en la función g etE n co d erT u rn . Cada vez que se llama a esta función, com para el estado ante rior de A y B con su estado actual y, si algo ha cam biado, averigua si se ha girado hacia la derecha o hacia la izquierda y devuelve un -1 y 1, respectiva mente. Si no hay ningún cam bio (el m ando no se ha girado), devuelve 0. Esta función debe ser llamada con frecuencia o. de lo contrario, si se girara con rapi
Si desea utilizar un codificador giratorio para otros proyectos, puede copiar esta función. Esta fun ción utiliza el m odificador static para las variables oldA y oldB . Esta es una técnica muy útil que per mite que la función mantenga el valor entre una lla m ada a la función y la siguiente, cuando normalmente reiniciaría el valor de la variable cada vez que se llam ara a la función.
70
30 Proyectos con A rd uino
LISTADO DE PROYECTO 11 int redPin = 2; int yellowPin = 3 ; int greenPin = 4; int aPin = 6 ; int bPin = 7; int buttonPin = 5; int state = 0; int longPeriod = 5000;
// Tiempo
en verde o rojo
int shortPeriod = 7 0 0 ;
// Tiempo
al cambiar
int targetCount = shortPeriod; int count = 0; void setup()
{ p inMode(aPi n , I N PUT); p inMode(b P i n , I N PUT); p inMode(buttonPin,
INPUT);
p inMode(redPin, O U T P U T ); p inMode(yellowPin, OU T P U T ); p inMode(greenPin, O U T P U T );
} void loop ()
{ count++; if (digitalRead(buttonPin))
{ setLights(HIGH, HIGH, HIGH);
> else
{ int change = getEncoderTurn(); int newPeriod = longPeriod + (change * 1000); if (newPeriod >= 1000 && newPeriod <= 10000)
{ longPeriod = newPeriod;
> if (count > targetCount)
{ setState(); count = 0;
> > d e l a y (1);
} int getEncoderTurn()
{ // devuelve -1, 0, o +1 static int oldA = LOW;
(continúa)
C apítulo 5
LISTADO DE PROYECTO 11 (continúa) static int oldB = LOW; int result = 0; int newA = digitalRead(aPin); int newB = digitalRead(bPin); if (newA != oldA || newB != oldB)
{ // algo ha cambiado if (oldA == LOW && newA == HIGH)
{ result = - (oldB * 2 - 1);
} > oldA = newA; oldB = newB; return result;
} int setState()
{ if (state == 0)
{ setLights(HIGH, LOW, LOW); targetCount = longPeriod; state = 1;
} else if (state == 1)
{ setLights(HIGH, HIGH, LOW); targetCount = shortPeriod; state = 2 ;
*
} else if (state == 2)
{ setLights(LOW, LOW, HIGH); targetCount = longPeriod; state = 3;
} else if (state == 3)
{ setLights(LOW, HIGH, LOW); targetCount = shortPeriod; state = 0;
}
void setLights(int red, int yellow,
{ digitalWrite(redPin, r e d ); digitalWrite(yellowPin, yellow); digitalWrite(greenPin, g r een);
}
int green)
■
Proyectos con sensores
71
72
30 Proyectos con A rd uino
Este sketch m uestra una técnica útil que permite planificar eventos (encender un LED durante deter m inados segundos) al m ism o tiem po que se com prueba si se ha girado el codificador giratorio o pulsado el botón. Si utilizam os la función delay de A rduino con, digam os, 20.000, para 20 segundos, en ese período no nos daría tiem po a com probar el codificador giratorio o el conm utador. Por tanto, lo que hacem os es utilizar un retardo m uy breve (1 m ilisegundo) pero m anteniendo un contador que se increm enta con cada ciclo del bucle. Así. si querem os un retardo de 20 segundos, nos param os cuando el contador alcance 20.000. Esto es m enos exacto que una única llam ada a la función delay, debido a que 1 m ilisegundo es en realidad 1 m ilisegundo más el tiem po de procesa m iento del resto de las operaciones que se hacen dentro del bucle.
Pongamos todo junto C argue el sketch term inado del Proyecto 11 desde su A rduino Sketchbook y descárguelo en su placa
junto con una resistencia fija para form ar un divisor de tensión, conectando su salida a una de nuestras entradas analógicas. El esquem a electrónico se m uestra en la Figura 5-12. Con una resistencia fija de I00K Q , podem os hacer algunos cálculos acerca del rango de tensio nes que se puede esperar en la entrada analógica. En la oscuridad, la LDR tendrá una resistencia de 2 M Q , así que con una resistencia fija de 100 K Q , tendrem os un relación de tensión de alrededor de 20:1, con la m ayoría de la tensión en la L D R , lo que se traduciría en alrededor de 4 V en la LD R y 1 V en el pin analógico. Por otro lado, si exponemos la LDR a una fuerte intensidad luminosa, su resistencia podría bajar a 20 KQ. La proporción de tensiones sería entonces alrede dor de 4:1 a favor de la resistencia fija, lo que da una tensión en la entrada analógica de alrededor de 4 V. Un detector de luz más sensible es el fototransistor. Funciona com o un transistor normal salvo que suele carecer de conexión en la base. En su lugar, la corriente del colector es controlada por la cantidad de luz que incide sobre el fototransistor.
(véase el C apítulo 1). Puede presionar el botón del codificador girato rio para probar los LEDs y girar el codificador gira torio para cam biar la duración en la que la señal perm anece verde y rojo.
Detección de la luz Un dispositivo común y fácil de usar para medir la intensidad de la luz son las resistencias dependientes de la luz o LDR (Light Dependent Resistor). A veces, también se conocen com o foto resistencias o foto resistores. Cuanto m ayor sea la cantidad de luz que incide sobre la superficie de una LDR, más baja será su resistencia. Una LDR típica tendrá una resistencia en la oscuridad de hasta 2 M Q y una resistencia al ser ilu minada con luz del día brillante de quizás 20 KQ. Podem os convertir esta variación en la resisten cia en una variación de tensión utilizando la LDR
la luz.
C apítulo 5
■
73
Proyectos con sensores
Proyecto 12
Hardware
Monitor de pulsaciones
El m onitor de pulsaciones funciona de la siguiente
Este proyecto utiliza un LED infrarrojo (IR) ultrabrillante y un fototransistor para detectar el pulso cardíaco en el dedo, haciendo paipadear un LED rojo al ritmo de las pulsaciones.
manera:
la luz del LED se trasm ite a través del
dedo, siendo recibida en el otro lado por el fototransistor, cuya resistencia variará ligeram ente en función de la sangre que fluya por el dedo. El esquem a electrónico se m uestra en la Figura 5-13 y la disposición de com ponentes en la placa de
COMPONENTES Y EQUIPO
pruebas, en la Figura 5-15. Hem os elegido un ele vado valor de resistencia para
D e scripció n
A p é n d ic e
Placa A rd u in o UNO o
Rl,
debido a que la
m ayor parte de la luz que pasa a través del dedo será absorbida, y querem os que el fototransistor sea muy
D uem ilanove o sim ilar DI
LED rojo de 5 mm
D2
Em isor 9 4 0 nm Infrarrojos
1
sensible. Quizás tenga que experim entar con el
23
valor de la resistencia hasta conseguir buenos resul tados.
LED de 5 m m
26
R1
Resistencia 56 K ü 0,5 W
12
m ayor cantidad de luz parásita que sea posible. Esto
R2
Resistencia 270 Q 0,5 W
6
es especialm ente im portante en el caso de la ilum i
R4
Resistencia 39 Q 0,5 W
4
nación dom éstica, que en la realidad oscilan a 50 Hz
TI
F o to tra n sisto r de IR
o 60 Hz y agregan una considerable cantidad de
(m ism a lo n g itu d onda D2)
36
+5V
R1
Es im portante proteger el fototransistor de la
“ruido” a nuestra débil señal del corazón.
+5V
D2
CD LO
D12 T1
A0
Arduino UNO Duemilanove
D1
<
% a
R2
o
CNÍ
GND Figura 5-13
Esquema eléctrico del Proyecto 12.
GND
R3
a
74
3 0 Proyectos con A rd uino
En el tubo se han perforado, uno frente al otro, dos agujeros de 5 m m , para así introducir el LED en un lado y el foto transistor en el otro. Soldam os unos cables cortos al LED y al fototransistor y, a continuación, colocam os otra capa de cinta aislante para envolverlo todo y para asegurar la posición del LED y el fototransistor. Asegúrese de com probar los colores de los cables que ha conectado a cada pata del LED y del fototransistor antes de colocar la cinta aislante. Figura 5-14
El diseño de la placa de pruebas de este proyecto
Tubo sensor para el m onitor cardíaco.
(Figura 5-15) es muy sencillo. El "tubo sensor de dedo" finalizado puede verlo
Por esta razón, tanto el fototransistor com o el
en la Figura 5-16.
LED se han integrado en un tubo o cartón ondulado unido con cinta aislante, cuyo m ontaje se m uestra en la Figura 5-14.
cwoot
loooo ooooo aocrGawOí&eseHBa O O O O
M
M
M
M
M
M
M
M
M
M
OP0Q®00©(?Q©Q ge©»# oc co c c o c e o c Q SHyj' “
■
H
ib
I
© QC OfflO OQ G O Ó OO eO © Q C C C O C C C C C C C C CGC G O G G C G C C C C G C C 0 0 G
ooccccccccccccoc OnCROi ----- >ocr,or.oóc cor
j
o-ooooo K r illí H H
Figura 5-16
oocc*-
rr
aoooo ooooo ooooo ooooo loooo ooooo ooooo ooooo.
D isposición de los co m p on en te s en la placa de pruebas del P royecto 12.
Proyecto 12. Monitor de pulsaciones.
Phototransitor emitter Phototransitor collector
C apítulo 5
Software
■
Proyectos con sensores
75
“suavizado” y, a continuación, introduce am bos
El software de este proyecto resulta un poco com plicado conseguir que funcione. Por supuesto, el prim er paso no es ejecutar todo el program a de com andos final sino, más bien, ejecutar un pro gram a de com andos que recopile datos, que poste riorm ente podam os colocar en una hoja de cálculo y crear un gráfico para com probar el algoritm o de "suavizado" (sm oothing) (véanse las aclaraciones
valores en el Serial M onitor, donde podem os cap turarlos y pegarlos en una hoja de cálculo para aná lisis. Observe que las com unicaciones del Serial M onitor se han ajustado a su velocidad más rápida para reducir al m ínim o el efecto del retraso provo cado por la transm isión de datos. C uando inicie el Serial M onitor, tendrá que cam biar la velocidad serie a 115200 baudios. La función sm oothing (suavizado) utiliza una
más adelante). El program a de com andos (script) de prueba se proporciona en el Listado de Proyecto 12.
técnica llam ada en inglés "leaky integration" (es una integración m atem ática im perfecta a propósito) y se puede ver en el código cuando hacem os este "suavizado" usando la línea:
LISTADO DE PROYECTO 12 - SCRIPT DE PRUEBA int ledPin = 13;
double valué = alpha * oldValue + (1 -
int sensorPin = 0;
alpha) * rawValue;
double alpha = 0.75;
La variable alpha es un número m ayor que 0 pero
int period = 20;
m enor de 1, y determ ina cuánto "suavizado" realizar.
double change = 0.0;
Ponga el dedo en el tubo de sensor, inicie el Serial void setup()
M onitor, y déjelo funcionando durante tres o cuatro
{
segundos para capturar algunas pulsaciones. pinMode(ledPin, O UTPUT); Serial.begin(115200);
A continuación, copie y pegue el texto capturado en una hoja de cálculo. Probablemente le pedirá el
>
carácter delim itador de colum na, que es una coma. void loop()
En la Figura 5-17 se muestran los datos resultantes y
{ static double oldValue = 0; static double oldChange = 0; int rawValue = analogRead(sensor Pin) ;
La curva más irregular corresponde a los datos en bruto leídos del puerto analógico, mientras que en la más uniforme se puede ver claramente que se ha eli
double valué = alpha * oldValue + (1 - alpha)
un gráfico de líneas extraído de las dos columnas.
* rawValue;
minado la mayor parte del ruido. Si aún así todavía presentase exceso de ruido, -en concreto, picos falsos
Serial.p r i n t (rawValue);
que confunden al monitor- aumente el nivel de "sua
Serial.print
vizado" disminuyendo el valor de alpha.
Serial.println(valué);
oldValue = valué; d e l a y (p e r i o d );
>
Una vez que encuentre el valor correcto de alpha para el montaje de su sensor, puede transferir este valor al sketch real y pasar a utilizar el sketch real en lugar del programa de prueba. El sketch real se pre senta en el siguiente listado:
Este program a de com andos lee la señal sin tratar de la entrada analógica y aplica la función de
30 P royectos con A rd uino
76
Con lo que ahora ya sólo queda el problem a de detectar los picos. Si m iram os la Figura 5-17, vem os que si hacem os un seguim iento de la lectura
LISTADO DE PROYECTO 12 int ledPin = 13; int sensorPin = 0;
anterior, podem os com probar que éstas van aum en tando gradualm ente hasta alcan zar su valor m áxim o, y luego descienden hacia valores negati
double alpha = 0.75; int period = 20; double change = 0.0;
vos. Por tanto, si encendem os el LED cada vez que en la lectura se produce un cam bio de valores de positivo a negativo o de negativo a positivo, obten dríam os un breve pulso del LED correspondiente al pico de cada pulso.
void s e tup()
{ pinMode(ledPin, OUTPUT);
> void loo p ()
{
Pongamos todo junto
static double oldValue = 0; static double oldChange = 0; int rawValue = analogRead(sensor Pin); double valué = alpha * oldValue + (1 - alpha) * rawValue;
Tanto el sketch de prueba com o el definitivo para el P royecto 12 se encuentran en su A rdu ino S k etch b ook . Para ob ten er instrucciones sobre cóm o descargarlo a la placa, véase el C apítulo 1.
change = valué - oldValue;
C om o m encionam os al principio, conseguir que digitalWrite(ledPin, (change < 0.0 && oldChange > 0.0));
este proyecto funcione es un poco com plicado. A dem ás, ya verá que tiene que colocar el dedo justo
oldValue = valué; oldChange = change; d e l a y (pe r i o d );
en el lugar adecuado para com enzar a recibir el pulso. Si tiene algún problem a, ejecute el script de prueba com o se ha descrito anteriorm ente para
}
E -8 a a 9-ti*
bá a s »
s
O.OOcm 0
i i/ M 4 a •*
* S l8 1 » c k Ü j *
& &
[Color j j j |É ¡ g M w 8
O . i?
é í
1 AI *
Al
A
J_
c
B
l
1 2
!*t-f
450
3 p4 5
445
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 24-
_
448 447 446 444 443 443 442 441 439 439 440 440 439 439 438 438 437 437
364.46 385.1 400.32 411.24 419.18 425.14 429.35 432.26 433.95 435.21 436.41 437.31 437.73 438.05 438.04 438.03 437.77 437.58
• • • •', Sh«a s>»«« » ..,3
435
7
" r .n -iw » Default
11
15
19
23
27
31
35
39
43
47
51
55
59
63
87
71
75
79
83
87
91
95
99 103 107 111 115 119 .
sr ti «i « m M 7J oí OK on na 07 im ins ™ m in ij'
~ - 4 .9 2 /0 .1 0
='! 25.62 x 10.75
D atos de prueba del m o n ito r cardíaco co lo ca d o s en una hoja de cálculo.
[le
C apítulo 5
verificar que el detector está obteniendo un pulso y que el factor de "suavizado" alpha es suficiente m ente bajo. Al autor desea señalar que este dispositivo no debe utilizarse en m odo alguno para ningún tipo de aplicación m édica real.
■
Proyectos con sensores
77
entonces, V = a/205
y R = ((5 * 33K * 205)/a) - 33K R = (1025 x 33K/a) - 33K Podem os reorganizar nuestra fórm ula para obte
Medición de temperatura M edir la tem peratura es un problem a sim ilar a la m edición de la intensidad de la luz, pero en lugar de una LD R , se utiliza un dispositivo llam ado term istor. Según
aum enta
la tem p eratu ra, tam bién
aum enta la resistencia del term istor. C uando se com pra un term istor éste viene con una resistencia nom inal específica. En este caso, el term istor elegido es de 33 K Q . Esta será la resis tencia del dispositivo a una tem peratura de 25°C.
ner una tem peratura desde la entrada analógica, leyendo "a" como: T = B eta/(ln(R /33) + (B eta/298)) - 273 y, así, finalm ente obtenem os: T = Beta/(ln((( 1025 x 33/a) - 33)/33) + (B eta/298)) - 273 ¡Guau! ¡Vaya m ontón de m atem áticas! Usarem os este cálculo en el siguiente proyecto para crear un registrador de tem peraturas.
La fórm ula para calcular la resistencia a una determ inada tem peratura viene dada por: R = Ro exp(-B eta/(T + 273) - Beta/(To + 273) En este caso, Ro es la resistencia a una tem pera tura de 25°C (33 K Q ) y beta es un valor constante
Proyecto 13 Registrador de temperaturas USB
que encontrará en la hoja de características del ter mistor. En este caso, su valor es 4090.
Este proyecto lo controla el ordenador, pero una vez que se la han dado las instrucciones, se puede des
Por lo tanto,
conectar y utilizar con pilas para que alm acene los
R = Ro exp(B eta/(T + 273) - Beta/298)
datos. C uando registra, guarda sus datos y, poste
R eordenando esta fórm ula, podem os obtener una
riorm ente, cuando el registrador se vuelve a conec
expresión para la tem peratura conociendo la resis
tar al PC. transferirá sus datos de nuevo utilizando
tencia.
la conexión USB, desde donde se pueden im portar a
R = Ro exp(B eta/(T + 273) - Beta/298)
una hoja de cálculo. De forma predeterm inada, el registrador grabará 1 m uestra cada cinco m inutos, y
Si utilizam os una resistencia fija de 33 KQ,
puede registrar hasta 255 m uestras.
podem os calcular el voltaje en la entrada analógica utilizando la fórmula:
Para instruir al registrador de tem peraturas desde el ordenador, tendrem os que definir algunos com an
V = 5 * 33K/(R + 33K) así,
dos que pueden ser em itidos desde el equipo. Vea estos com andos en la Tabla 5-1.
R = ((5 * 33K )/V ) - 33K Dado que el valor analógico "a" viene dado por: a = V * (1023/5)
78
30 Proyectos con A rd uino
TABLA 5-1 Comandos del registrador de temperaturas R
Lee los datos del re g istra d o r com o te xto CSV
X
Borra to d o s los datos del re g istra d o r
C
M odo C entígrados
F
M odo Fahrenheit
1-9 Establece el p eríod o de m uestras en m inutos, de 1 a 9 G
¡Vamos! Em pieza a reg istra r tem p era tura s
?
Inform a del e stado del disp ositivo , núm ero de m uestras tom adas, etc.
Este proyecto sólo necesita un term istor y una resistencia.
COMPONENTES Y EQUIPO D escripció n
A p é n d ic e
Placa A rd u in o UNO o D uem ilanove o sim ilar
1
R1 Termistor, 33K a 25°C, Beta 4 0 9 0 R2 Resistencia 33 KQ 0,5 W
■
18 10
Si no puede conseguir un termistor con el valor correcto de beta, o la resistencia, puede cambiar estos valores en el sketch.
Hardware El circuito electrónico del Proyecto 13 se m uestra en la Figura 5-18. El m ontaje es tan sencillo que podem os sim ple mente introducir los term inales del term istor y de la resistencia en la placa A rduino. com o se m uestra en la Figura 5-19.
Software El softw are de este proyecto es un poco más com plejo que el de otros anteriores (véase el Listado del Proyecto 13). H asta la fecha, todas las variables que hem os utilizado en nuestros sketches (program as)
se "olvidan" tan pronto com o la placa Arduino se reinicia o se desconecta de la alim entación. A veces puede ser interesante alm acenar los datos de form a continua para que sigan allí la próxim a vez que ini ciam os Ja placa. Esto puede hacerse utilizando un tipo especial de m em oria de la Arduino llam ada E E P R O M . que significa: m em oria program able de sólo lectura borrable eléctricam ente. La placa A rduino UNO cuenta con 1024 bytes de mem oria EEPROM . Este es el prim er proyecto en el que hem os utili zado la E E P R O M de la Arduino para alm acenar datos, de m odo que no se borren cuando la placa se reinicia o se desconecta de la alim entación. Esto significa que una vez que hayam os m ontado nuestro registro de alm acenam iento de datos, podem os des conectarlo del cable USB y dejar que funcione con baterías. Incluso si se acabaran las baterías, nuestros datos seguirán allí la próxim a vez que lo conecte mos. N otará que en la parte superior de este sketch utilizam os el com ando #define para lo que en el pasado hubiéram os usado variables. En realidad, esta es una m anera más eficiente de definir constan tes, es decir, valores que no van a cam biar durante la ejecución del sketch. Por ello, es realm ente ade cuado para la configuración de los pines y de cons tantes com o beta. El com ando #define es lo que se llama una directiva de pre-procesador, y lo que sucede es que. poco antes de que se com pile el sketch, todas las apariciones con este nom bre que se hallen en cualquier lugar del sketch serán susti-
C apítulo 5
Figura 5-19
■
Proyectos con sensores
79
Una placa A rd u in o a lim entada con el LED encendido.
LISTADO DE PROYECTO 13 #include
#define ledPin 13 #define analogPin 0 #define maxReadings 255 #define beta 4090
// de hoja de características del termistor
#define resistance 33 float readings[maxReadings]; int lastReading = E EPROM.r e a d (0); boolean loggingOn = false; long period = 300; long count = 0; char mode =
'C ';
void setup() { pinMode(ledPin, O U T P U T ); Serial.begin(9600); Serial.println("Preparado"); } void loop() { (continúa)
80
3 0 P royectos con A rd u in o
LISTADO DE PROYECTO 13 (continúa) if (Serial.available()) { char ch = Serial.read(); if (ch == 'r' || ch == / \ sendBackdata(); f else if (ch — 'x* / \ lastReading = 0;
’R ' )
|| ch ==
'X *)
E EPROM.w r i t e (0, 0); Serial.printl n ("Datos borrados"); \ / else if (ch = 'g' || ch = / \ loggingOn = true;
'G ')
Serial.println("Registro iniciado"); f else if (ch > '0' && ch <= / \ setPeriod(c h ); \ /
'9')
else if (ch == 'c' or ch == ’C') / \ Serial.println("Modo configurado a °C"); raode = 'C '; / else if (ch == 'f * or ch == 'F') / \ Serial.println("Modo configurado a °F"); mode = 'F '; / else if (ch == '?') / \ reportStatus(); > > if (loggingOn && count > period) logReading(); count = 0; > count++; d e l a y (1000); > void sendBackdata() { loggingOn = false; Serial.println("Registro detenido"); S erial.println("------ cortar a q u í ----------- ");
C apítulo 5
■
Proyectos con sensores
LISTADO DE PROYECTO 13 (continúa) Serial.print.("Time (min)\tTemp ("); Serial.print(mode); Serial.println(")"); for (int i = 0; i < lastReading; i++)
{ Serial.print((period * i) / 60); Serial.p r i n t ("\ t "); float temp = getReading(i ); if (mode == 'F ’)
{ temp = (temp * 9) / 5 + 32;
> Serial.println(tem p );
} Serial, print ln ("------- cortar a q u í ----------- ");
> void setPeriod(char ch)
{ int periodMins = ch - '0'; Serial.print("Período de muestras establecido en:
");
Serial.p r i n t (periodMins); Serial.println(" m i n s "); period = periodMins * 60;
} void logReading()
{ if (lastReading < maxReadings)
{
• long a = analogRead(analogPin); float temp = beta / (log ( ((1025.0 * resistance / a) - 33.0) / 33.0) + (beta / 298.0)) - 273.0; storeReading(temp, lastReading); lastReading++;
} else
{ Serial.println(("iLlena! registro detenido"); loggingOn = false;
}
void storeReading(float reading,
int index)
{ EEPROM.write(0,
(b y t e )i n dex);
// almacena número muestras en byte 0
byte compressedReading = ( b y t e ) ( ( reading + 20.0) * 4 ) ; EEPROM.write(index + 1, compressedReading);
> (continúa)
81
82
30 P royectos con A rd uino
LISTADO DE PROYECTO 13 (continúa) float getReading(int Índex)
{ lastReading = E E PROM.r e a d (0); byte compressedReading = EEPROM.read(index + 1); float uncompressesReading = (compressedReading / 4.0) - 20.0; return uncompressesReading;
} void reportStatus()
{ Serial.println ("----------------- ") ; Serial.println("Estado"); Serial.print("Período muestras\t"); Serial.println(period / 60); Serial.print("Núm. lecturas\t"); Serial.p rintln(lastReading); Serial.print("Modo grados\t"); Serial.println(mode); Se rial.println ("----------------- ") ;
>
tuidas por su valor. En realidad, utilizar #define o una variable, es una cuestión de gusto personal.
EEPR O M y, a continuación, los datos de lectura reales en los 256 bytes que siguen.
A fortunadam ente, la lectura y escritura de la E EPR O M se produce un byte tras otro. Por lo tanto, si querem os escribir una variable que sea un byte o un char, sim plem ente podem os utilizar las funciones E E P R O M .write y E E PR O M .read, tal com o se m uestra en el siguiente ejem plo:
C ada lectura de la tem peratura se guarda en un valor decim al (float) y, si lo recuerda del Capítulo 2, un decim al (float) ocupa 4 bytes de datos. A quí teníam os que elegir: Podíam os o bien alm acenar los 4 bytes o encontrar una m anera de codificar la tem peratura en un único byte. Decidim os tom ar esta últim a vía, ya que es más fácil de hacer.
char letterToWrite = 'A '; E EPROM.w r i t e ( 0, m y L e t t e r ) ;
char letterToRead; letterToRead = EEPROM.read(0);
Los 0 en los parám etros de lectura y escritura es la dirección en la E EPR O M que se debe utilizar. Esto puede ser cualquier núm ero entre 0 y 1023, y cada dirección representa un lugar donde se alm a cena un byte. En este proyecto querem os alm acenar tanto la posición de la últim a lectura tom ada (en la variable lastR eading) com o el resto de las lecturas. A sí que grabarem os lastR eading en el prim er byte de
Para poder codificar la tem peratura en un único byte, tenem os que hacer algunas concreciones. En prim er lugar, vam os a asum ir que cualquier tem pe ratura en grados C entígrados será entre -20° y +40°. De todos m odos, cualquier cosa que fuera más alto o más bajo probablem ente dañaría nuestra placa A rduino. En segundo lugar, vam os a asum ir que sólo necesitam os saber la tem peratura con una pre cisión de un cuarto de grado. Con estas dos prem isas, podrem os tom ar cual quier valor de tem peratura que obtengam os de la entrada analógica, agregarle 20, m ultiplicarlo por 4. y aún así estar seguro de que siem pre tendrem os un núm ero entre 0 y 240. Puesto que un byte puede contener un núm ero entre 0 y 255, encaja perfecta mente.
Capítulo 5
■
Proyectos con sensores
83
C uando sacam os nuestros núm eros de la EEPRO M , tenemos que volver a convertirlos en
externa, com o el cable para la pila de 9 V que hicimos en el Proyecto 6.
decimal (float), lo que podemos hacer inviniendo el proceso, es decir, dividiendo por 4 y luego restando 20.
Por último, podemos introducir el comando G para iniciar el registro. Entonces ya podemos desenchufar
Tanto la codificación como la decodificación de
el cable USB y dejar nuestro registrador funcionando con las pilas. Tras esperar unos 10 o 15 minutos, pode
los valores se han incluido en las funciones storeReading y getReading. Así, si decidimos utili
mos volver a conectarlo y consultar los datos que tene mos abriendo Serial M onitor e introduciendo el
zar un enfoque diferente para almacenar los datos, sólo tendríamos que cambiar estas dos funciones.
comando R, cuyos resultados se muestran en la Figura 5-21. Seleccione todos los datos, incluyendo los enca bezados de Time y Temp de la parte superior.
Pongamos todo junto
Copie el texto en el portapapeles (pulse CTRL-C en Windows y Linux, ALT-C en Mac), abra una hoja
Cargue el sketch terminado del Proyecto 13 desde su Arduino Sketchbook y descárguelo en su placa
de cálculo en un programa como Microsoft Excel, y péguelos en una nueva hoja de cálculo (Figura 5-22).
(véase el Capítulo 1).
Una vez que se encuentre en la hoja de cálculo,
Ahora abra Serial M onitor (Figura 5-20) y. para fines de ensayo, estableceremos el registrador de tem peraturas para registrar cada minuto, lo que hacemos introduciendo 1 en Serial M onitor. La placa debería responder con el mensaje "Periodo de muestras esta blecido en: 1 mins." Si quisiéramos, podríamos cam biar el modo a Fahrenheit tecleando F en el Serial Monitor. Ahora podemos comprobar el estado del registrador introduciendo ?. Si queremos
que el registrador continúe regis
trando después de desconectar e l cable USB, primero debemos alimentarlo con una fuente de alimentación
« O
O
podemos incluso dibujar un gráfico utilizando nues tros datos.
Resumen Ahora sabemos cóm o manejar diversos tipos de sen sores y dispositivos de entrada para acompañar a nues tros conocimientos sobre los LED. En la próxima sección veremos una serie de proyectos que utilizan la luz de diversas maneras y pondremos nuestras manos sobre algunas tecnologías de visualización más avan zadas, como los displays LCD de texto y los de siete segmentos.
/dev/tty.usbserial-A600blQ 6
i Sendj Ready Sample p e rio d s e t t o : 1 mins S ta tu s Sample p e rio d Num re ad in g s Mode degrees
9600 baud Figura 5 -2 0
Emisión de comandos a través del Serial Monitor.
84
30 Proyectos con A rd uino
n
O ___________ /d ev/tty.usbserial-A 600blQ 6
Logging stoppcc
— cu t here Time (min) 0 19.50 5 19.25 19 19.25 15 19.00 20 19.00 25 14.75 30 18.75 35 19.00 40 19.00 45 18.75 58 18.75 55 18.75 60 18.75 65 18.75 79 19.00 75 18.75 80 18.75 85 18.50 90 18.75 95 18.50 100 18.75 105 18.50 110 18.50 115 18.75 120 18.50 125 18.50 130 18.50 135 18.25 140 18.25 145 18.25 150 18.25 155 18.25 --------- cut here
9 6 0 0 baud
^ 2 ü ^ 3 2 ¡U
? !
D atos a c o p ia r y p eg ar en una hoja de cálculo.
¡A 0 o
u
. 0
.. . . .
A T im e (m in )
2 3
10 11 12 13 14 15 16 17 18
0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 SO
19 20 21 22 23 24 25 26 27 28 29 30 31 32
85 90 95 100 105 110 115 120 125 130 135 140 145 150
33
155
4 5 6
7 8 9
i
H K M Te m p (C ) 1 9 .5 1 9 .2 5 1 9 ,2 5 19 19 1 8 .7 5 1 8 .7 5 19 19 1 8 .7 5 1 8 .7 5 1 8 .7 5 1 8 ,7 5 1 8 .7 5 19 1 8 .7 5 1 8 .7 5 1 8 .5 1 8 .7 5 1 8 .5 1 8 .7 5 1 8 .5 1 8 .5 1 8 .7 5 1 8 .5 1 8 .5 1 8 .5 1 8 .2 5 1 8 .2 5 1 8 .2 5 1 8 .2 5 1 8 .2 5
C
•
1 9 .6 1 9 .4 1 9 .2 19 1 8 .8
k-é
6--JV— S—
ÉMI ■ K
■
\A A A
VV
1 8 .6
vJ \
1 8 .4 1 8 .2 18 1 7 .8
*S>
4> (p
^ <£
^
^
M in u tes
T*1 Ready
|^ ^ ^ 3 ¡ 2 Ü
p u n i-0
| OSCRL | O CAPS ¡ « N U M
D atos de te m p era tura im p o rta d o s en una hoja de cálculo.
C A P Í T U L O
6
Proyectos de luz
E n e s t e c a p í t u l o , vam os a ver algunos proyectos más basados en luces y en displays. En concreto, verem os la form a de utilizar LEDs m ulticolores, displays de siete segm entos, displays de m atrices de LED s y displays de cristal líquido (LCD).
Hardware
Proyecto 14 LED multicolor Este proyecto utiliza un LED de tres colores de gran potencia en com binación con un codificador giratorio. Al girar el codificador giratorio cam bia el color m ostrado por el LED.
COMPONENTES. Y EQUIPO ©
D escripció n
Si no pudiera encontrar un LED RGB (rojo, verde, azul) de cuatro pines, en su lugar puede utili zar uno de seis. Sim plem ente, consulte la hoja de características del com ponente para conectar entre sí los dos ánodos.
A p é n d ic e
Placa A rd u in o UNO o
La Figura 6-1 m uestra el esquem a electrónico del Proyecto 14, y la Figura 6-2 el diseño de la placa de pruebas. Se trata de un esquem a electrónico sim ple. El codificador giratorio tiene resistencias de puesta a m asa para los sensores de dirección y el interruptor pulsador. Para obtener m ás detalles sobre los codifi cadores giratorios y su funcionam iento, véase el C apítulo 5. Cada LED tiene su propia resistencia en serie para lim itar la corriente a unos 30 mA por LED.
DI
LED RGB (á n o d o co m ú n)
31
R1-R3
Resistencia 100 Q 0,5 W
5
R4-6
Resistencia 100 KQ 0,5 W
13
El encapsulado del LED tiene una parte plana en uno de los lados. El pin 1 es el más cercano al lado plano. O tra m anera de identificar los pines es por su longitud. El pin 2 es el de m ayor longitud, y corres ponde al ánodo com ún.
SI
C o d ific a d o r g ira to rio con 57
En la Figura 6-3 se m uestra el m ontaje com pleto del proyecto.
D uem ilanove o sim ilar
p ulsador
1
La lám para LED es interesante porque tiene tres luces de LED en un paquete de cuatro pines. El LED es del tipo ánodo com ún, lo que significa que las conexiones positivas de los tres LED salen de un m ism o pin (pin 2).
Cada uno de los LEDs (rojo, verde y azul) se m aneja desde una de las salidas de m odulación por anchura de pulsos (PW M ) de la placa A rduino, por lo que, variando la salida de cada LED , podem os producir el espectro com pleto de los colores visi bles. El codificador giratorio se conecta exactam ente igual que en el Proyecto 11: girándolo cam bia el color y pulsándolo enciende y apaga el LED. 85
86
30 Proyectos con A rd u in o
ooooo ooooo OOOO©' o o o o o
ooooo ooooo
5V GND
ooocoo ooccoo oc o o o c c c c oooccc ooocoo Oó OC 0 c oooc oc oooccc __|©oocoo
eooooocoo o
ooooo
OOOOI
■ d u u i i a - j Diseño del c irc u ito del P royecto 14 sobre la placa de pruebas.
ooooo ooooo
5V GND
C apítulo 6
■
Proyectos con luz
87
P royecto 14. Led m ulticolor.
Software
que debe brillar cada uno de los elem entos LED rojo, verde o azul. Los núm eros del array se m ues
Este sketch (Listado del Proyecto 14) utiliza una matriz (array) para representar los diferentes colo res que serán m ostrados por el LED. C ada uno de los elem entos de la matriz es un núm ero long de 32 bits. Tres de los bytes del núm ero long se utilizan para representar los com ponentes rojo, verde y azul del color, lo que corresponde a la intensidad con la
tran en form ato hexadecim al, que es uno de los for matos utilizados para representar los colores de 24-bit de las páginas web. Si desea crear algún color en particular, busque una tabla de colores web tecle ando "tabla de colores htmi" en su buscador favo rito. Allí podrá consultar el valor hexadecim al del color que desee.
LISTADO DEL PROYECTO 14 int redPin = 9; int greenPin = 10; int bluePin = 11; int aPin int bPin
= 6; = 7;
int buttonPin = 5;
= true; = 0;
boolean isOn int color
long colors[48]=
{
0xFF2000,
0xFF4000, 0xFF6000, 0xFF8000,
OxFFAOOO,
OxFFCOOO,
OxFFEOOO,
OxFFFFOO,
OxEOFFOO,
OxCOFFOO, OxAOFFOO,
0x80FF00,
Ox60FF00, 0x40FF00,
0x20FF00,
OxOOFFOO,
0x00FF20,
0x00FF40,
0x00FF60, 0x00FF80,
OxOOFFAO, OxOOFFCO,
OxOOFFEO,
OxOOFFFF,
OxOOEOFF,
OxOOCOFF,
OxOOAOFF, 0x0080FF,
Ox0060FF, 0x0040FF,
0x0020FF,
OxOOOOFF,
0x2000FF,
0x40Q0FF,
0x6000FF,
OxEOOOFF,
OxFFOOFF,
0x8000FF, OxAOOOFF,
OxCOOOFF,
(c o n tin ú a )
88
3 0 Proyectos con A rd uino
LISTADO DEL PROYECTO 14 (continúa) OxFFOOEO,
OxFFOOCO,
OxFFOOAO,
0xFF0080,
0xFF0060,
0xFF0040, 0xFF0020,
OxFFOOOO
}; void setup()
{ pinMode(a P i n , INPUT); pinMode(b P i n , INPUT); pinMode(buttonPin, INPUT); p inMode(redPin, O U T P U T ); pinMode(greenPin, O U T P U T ); p inMode(bluePin, OU T P U T );
> void loo p ()
{ if (digitalRead(buttonPin))
{ isOn = ! isOn; de lay (200);
// de-bounce
> if (isOn)
{ int change = getEncoderTurn(); color = color + change; if (color < 0)
{ color = 47;
} else if (color > 47)
{
. color = 0;
> setColor(colors[c o l o r ]);
} else
{ setColor(0);
} d e l a y (1);
int getEncoderTurn()
{ // devuelve -1, 0, or +1 static int oldA = LOW; static int oldB = LOW; int result = 0; int newA = digitalRead(aPin); int newB = digitalRead(bPin); if (newA != oldA || newB != oldB) (continúa)
C apítulo 6
■
Proyectos con luz
89
LISTADO DEL PROYECTO 14 (continúa) // algo ha cambiado if (oldA == LOW && newA == HIGH)
{ result = -(oldB * 2 - 1);
} } oldA = newA; oldB = newB; return result;
} void setColor(long rgb)
{ int red = rgb »
16;
int green = (rgb »
8) & OxFF;
int blue = rgb & OxFF; analogWrite(redPin,
255 - red);
analogWrite(greenPin, analogWrite(bluePin,
255 - green); 255 - blue);
Los 48 colores de la m atriz se han seleccionado
Los LEDs de siete segm entos (consulte la Figura
de una de éstas tablas y representan una gam a de
6-4) han sido prácticam ente sustituidos por displays
colores que abarcan aproxim adam ente todo el rango
L CD retroilum inados (véase más adelante en este
desde el rojo al violeta.
capítulo), aunque todavía siguen resultando útiles de vez en cuando. Y tam bién añaden sentido a cier
Pongamos to d o ju nto
tos proyectos ingeniosos.
C argue el sketch term inado del Proyecto 14 desde su A rduino Sketchbook y descárguelo en su placa (véase el C apítulo 1).
LEDs de siete segmentos Hubo un tiem po en que estaba de m oda llevar un reloj de LEDs. Esto exigía que el portador tuviera que pulsar un botón del reloj para que la hora apa reciera por arte de m agia en form a de cuatro dígitos rojos brillantes. C on el tiem po, el inconveniente de tener que utilizar am bos dedos para decir la hora superó la novedad del reloj digital, con lo que las m entes más inquietas se fueron de com pras y en su lugar se pusieron un reloj LCD. Estos sólo podían leerse con una brillante luz solar.
D isplay de siete segm entos.
90
30 Proyectos con A rd uino
Digital Pin
_2_
3
B
_4_ _5_
D
Arduino _ 6_
_7_ 8 9
_G dp
GND Figura 6-5
Placa Arduino manejando un display de siete segmentos.
La Figura 6-5 m uestra el circuito para m anejar un único display de siete segm entos. Un sólo display de siete segm entos no es real m ente de m ucha utilidad. La m ayoría de los proyec tos necesitarán dos o cuatro dígitos. Pero, en ese caso, no tendrem os suficientes pines de salida digi tal para m anejar cada dígito por separado y, por tanto, usarem os el diseño de la Figura 6-6. De form a bastante parecida a nuestro ya cono cido "barrido" de teclado, vam os a activar cada d is play uno tras otro y a configurar los segm entos para ello antes de pasar al siguiente dígito. Esto lo hare mos tan rápido que se creará la ilusión de que todos los displays se están encendiendo al m ism o tiem po. En teoría, cada display podría consum ir a la vez la corriente de ocho LED s, lo que requeriría 160 mA (a 20 mA por LED ), que sería m ucho más de lo que podem os sacar de un pin de salida digital. Por esta razón, para activar uno tras otro los distintos displays, vam os a utilizar un transistor que será conm utado por una salida digital.
El tipo de transistor que estam os utilizando se llam a transistor bipolar. Tiene tres conexiones: em isor, base y colector. Cuando una corriente cir cula a través de la base del transistor y pasa por el em isor, perm ite que desde el colector al em isor pueda circular una corriente m ucho mayor. Este tipo de transistor ya lo vim os en el Proyecto 4, donde lo hem os usado para controlar la corriente a un LED Luxeon de alta potencia. Dado que la corriente que circula del colector al em isor ya se encuentra lim itada por las resistencias serie de los LED . no necesitam os lim itarla de nuevo. Sin em bargo, sí necesitam os lim itar la corriente que circula por la base. La m ayoría de los transistores m ultiplicarán la corriente de base por un factor de 100 o m ás, así que sólo necesitam os per m itir que circulen por la base alrededor de 2 mA para activar com pletam ente el transistor. Los transistores tienen la interesante propiedad de que, en condiciones norm ales, la tensión entre la base y el em isor es de 0,6 V bastante constante, con independencia de la corriente que circule. Por tanto.
C apítulo 6
■
91
P royectos con luz
Digital Pin
2700 2700
xa F
2700 2700
Figura 6-6
X
X
E
c
XHX
«XX c
;. d
D
2700 2700
E ■
2700
r
Arduino
A AX
yfs
2700
•®
dp
Manejo de más de un display de siete segmentos desde una placa Arduino.
si nuestro pin Arduino sum inistra 5 V, 0,6 V de esos circularán por el circuito base/em isor del transistor, lo que significa que nuestra resistencia debe tener
COMPONENTES Y EQUIPO Descripción
un valor de alrededor de:
Placa Arduino UNO o Duemilanove o similar
R = V /I DI
R = 4,4 / 2 mA = 2,2 KQ De hecho, tam bién sería correcto si dejam os cir cular 4 m A . porque la salida digital puede aguantar casi 40 mA. Por ello, vam os a elegir el socorrido valor estándar de 1 K Q , que nos perm itirá asegurar nos de que el transistor actuará com o un interruptor y siem pre lo activará y desactivará com pletam ente.
Proyecto 15 Dado do ble con display de siete segmentos En el Proyecto 9 cream os un dado utilizando siete LEDs independientes. En este proyecto vam os a usar dos displays LED de siete segm entos para crear un dado doble.
Apéndice
1
Display LED siete segm. dos dígitos (ánodo común)
33
R1
Resistencia 100 KQ 0,5 W
13
R4-13
Resistencia 270 Q 0,5 W
6
R2, R3 Resistencia 1 KQ 0.5 W
7
TI, T2
BC307
39
SI
Pulsador miniatura
48
Hardware El sketch de este proyecto se muestra en la Figura 6 7. 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 A rd uino
Roo e
b c
+1 g
f
a
b
A JLk t 1 y -6 -v i! íc! w e
d dp e
C +2
Figura 6-7
C ircu ito e le ctró n ico del P royecto 15.
mos controlar la alimentación positiva, de forma
placa de pruebas 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
m asa 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
Software
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 NPN, pero conectado 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
U tilizarem os una matriz (array) que contenga los pines que se conectan a cada uno de los segm entos "a" a "g" y el punto decim al. También utilizarem os una m atriz para determ inar qué segm entos deben iluminarse para m ostrar los distintos dígitos. Es un array de dos dim ensiones, donde cada fila repre senta un dígito (0 a 9) y cada colum na un segm ento (consulte el Listado del Proyecto 15).
C apítulo 6
(SCTwoeoT
■
Proyectos con luz
'0 0 0
D F R cfcjino
Ooem! 1a ro ve
p oo
CLCc
| COOCO^OUO^&fiOOÉOO
ce eec co c|oo G .ceo oo coí« t# p occo onr.n jlZ ' xemT) ©QfrAr.BgoAftft f i t a n n n r i i & f i e e e fie«Ls^'i o o p,o oc o
93
94
30 Proyectos con A rd uino
LISTADO DE PROYECTO 15 int segmentPins[] = {3, 2, 19, 16, 18, 4, 5, 17); int displayPins[] = {10, 11};
int buttonPin = 12;
byte digits[10][8] = {
//
b c d e f g . 1, 1, 1, 1, o, 0 } , 1, 1, { { 0, 1, 1/ 0, 0, o, o, 0 } , { 1, 1, 0, 1, 1, o, i , 0 } , { 1, 1, 1/ 1, o, o, i , 0 } , a
{ 0, { 1,
1, 0,
{ 1,
0,
{ 1, { 1,
1,
{ 1,
1,
1,
1, 0, o, 1, 1, o, 1, 1, 1,
//
0
//
1
//
2
// 3
1,
i,
0},
// 4
1,
i,
0},
// 5
1,
i,
0},
// 6
// 7 1, 0, o, o, o, 0}, // 8 1, 1, 1, 1, 1, 0}, 1, 1, o, 1, 1, 0} // 9
}; void s e tup()
{ for (int i=0; i < 8; i++)
{ pinMode(segmentPins[i ], O U T P U T );
} pinMode(displayPins[0], O U T P U T ); p inMode(displayPins[0], O U T P U T ); pinMode(buttonPin, INPUT);
>
'
void lo o p ()
{ static int dicel; static int dice2; if (digitalRead(buttonPin))
{ dicel = random(1,7); dice2 = random(l,7);
} updateDisplay(d i c e l , d i c e 2 );
> void updateDisplay(int valuel,
int value2)
{ digitalWrite(displayPins[0], H I G H ); digitalWrite(displayPins[1], L O W ) ; setSegments(valuel); d e l a y (5); digitalWrite(displayPins[0], L O W ) ;
C apítulo 6
■
95
Proyectos con luz
LISTADO DE PROYECTO 15 (continúa) d i g i t a l W r i t e (d i s p l a y P i n s [ 1 ]
, HIGH) ;
s e t S e g m e n ts (v a l u e 2 ); delay(5);
> void setSegments(int n)
{ for (int i=0; i < 8; i++)
{ digitalWrite(segmentPins[i ], ! digits[n J[i ]);
} >
Para m anejar am bos displays tenem os que encender los displays uno tras otro, configurando sus segm entos de form a correcta. Por lo tanto, nues tra función loop debe m antener en distintas varia bles, dicel y dice2, los valores que vayan a m ostrarse en cada uno de los displays. Para “tirar” el dado, utilizarem os la función random. lo que hará que cada vez que se pulse el botón se establezca un nuevo valor en dicel y en dice2. Esto significa que al “tiro del dado” tam bién le afectará el tiem po que se tenga pulsado el botón, por lo que no tendrem os que preocupam os de acti var el generador de núm eros-aleatorios.
una sola lente, por lo que aparecen com o un único punto. De esta form a podem os encender uno o los dos LED para form ar un color rojo, verde o naranja. En la Figura 6-10 se m uestra el proyecto com pleto. Este proyecto utiliza una m atriz de LEDs com o la que acabam os de describir, y nos perm itirá m ostrar dibujos m ulticolores a través de la conexión USB. En cuanto al proyecto, en este caso em plearem os bastantes com ponentes y utilizarem os p ráctica mente todos los pines de la placa A rduino.
COMPONENTES Y EQUIPO D escripció n
Pongamos todo junto Cargue el sketch term inado del Proyecto 15 desde su Arduino Sketchbook y descárguelo en su placa (véase el C apítulo I).
Proyecto 16 Matriz de LEDs Si no estam os equivocados, creem os que las m atri ces de LEDs son uno de esos com ponentes que pueden gustar a las m entes más inquietas. Consisten en una m atriz de LED s, que en este caso es de 8 por 8. Estos dispositivos suelen tener un LED en cada una de las posiciones; sin em bargo, en el dispositivo que vam os a utilizar, cada uno de estos LED son dos en realidad, uno rojo y uno verde, colocados bajo
A p é n d ic e
Placa A rd u in o UNO o D uem ilanove o sim ilar M atriz LED 8 x 8 (2 colores) R1-16 Resistencia 100 Q 0.5 W
1 34 5
IC1
C o n ta d o r de décadas 4017
46
T1-8
2N 7000
42
Placa p ro to b o a rd extra larga
72 x 2
Hardware La Figura 6-11 m uestra el esquem a electrónico del proyecto. C om o era de esperar, los LEDs están organizados en filas y colum nas, con todas las conexiones negativas de una determ inada colum na conectadas entre sí y una conexión positiva sepa
96
30 P royectos con A rd uino
rada para cada LED de la fila.
reloj (clock). Tam bién tiene un pin reset para poner
Para m anejar la m atriz tenem os que hacer lo
el contador a 0. Así pues, en lugar de necesitar una
m ism o que hicim os con el display de dos dígitos
salida de la placa Arduino para cada fila, sólo nece
del Proyecto
15. cam biando entre colum nas y
sitam os dos salidas: una para clock y una para reset.
encendiendo y apagando sucesivam ente la fila
C ada una de las salidas del 4017 va conectada a
correspondiente de LEDs para crear la ilusión de
un transistor de efecto cam po (F E T ). La única
que todos los LEDs están encendidos al m ism o
razón por la que hem os utilizado un F E T en lugar
tiem po. En realidad, en cada m om ento habrá encen
de un transistor bipolar es que podem os conectar la
didos un m áxim o de 16 LEDs (8 rojos + 8 verdes).
puerta del F E T directam ente a una salida de la
En la m atriz de LEDs hay 24 cables y en la placa
placa A rduino sin tener que utilizar una resistencia
A rduino sólo 17 pines que podem os utilizar con
lim itadora de corriente.
facilidad (D2-13 y AO-5). A sí es que para controlar
O bserve que no utilizam os la prim era salida del
cada una de las colum nas, una tras otra, vam os a uti
4017. Esto se debe a que este pin se activa tan
lizar un circuito integrado llam ado un contador de
pronto com o se reinicia el 4017 y esto nos llevaría a
décadas.
que esa colum na estaría activada más tiem po del
El contador de décadas 4017 tiene diez pines de salida, que sucesivam ente se van activando a nivel alto cada vez que hay un impulso en el pin de
debido, haciendo que apareciera más brillante que las dem ás.
C apítulo 6
■
Proyectos con luz
97
Arduino Board
D19 (A5)
018
5V
Reset
05
kf £
CK
s
4017
04
Decade Counter
05
& S
D14 (AO)
D15 (A l)
D io (A2)
D17 (A3]
t_ X
m
s. í E IC 1
D13
M m
m ia ¿1 & ü : ifliflü: K ü: ili m
m
K
m
'
íE S ü :ü:i r S . í l Ü ' íS ÍF í f l m ífi3 '
m
3:
.
Ü
'
08
Figura 6-11
C ircu ito e le ctró n ico del P royecto 16.
Para m ontar este proyecto en la placa de pruebas
Software
vam os a necesitar una placa m ayor que las que hem os utilizado hasta ahora. En la Figura 6-12 se m uestra el diseño de este proyecto. C uando conecte los cables preste atención y com pruebe cuidadosam ente cada una de las cone xiones porque cualquier cam bio accidental de las m ism as puede producir resultados muy extraños y difíciles de depurar.
El softw are de este proyecto es bastante corto (Listado del Proyecto 16). No obstante, el reto es conseguir que la tem porización sea la adecuada, ya que si las cosas se hacen dem asiado rápido, el 4017 no habrá tenido tiempo de activar la fila asignada cuando ya habrá llegado la señal para la siguiente colum na. Esto provoca una im agen de colores borrosa. Por otro lado, si hace las cosas con dem a siada lentitud, el display parpadea. Esta es precisa-
98
30 Proyectos con A rd uino
fe ó o iljo c o sfr&yrptre-l-O o Soñ’Sj;
Diseño del c irc u ito del P royecto 16 sobre la placa de pruebas
C apítulo 6
■
Proyectos con luz
99
LISTADO DE PROYECTO 16 (continua) void setup()
{ pinMode(clockPin, OU T P U T ); pinMode(resetPin, OU T P U T ); for (int i = 0; i < 8; i++)
{ pinMode(greenPins[i ], O U T P U T ); pinMode(redPins[i], OUTPUT);
> Serial.begin(9600);
> void loop()
{ if (Serial.available())
{ char ch
Serial.read();
if (ch ==
'x ')
{ c l ear();
} if (ch >=
'a ' and ch <=
'g ')
{ col = 0; row = ch - 'a 1;
> else if (ch >=
'0' and ch <= '3')
{ byte pixel = ch - '0'; pixels[row] [col]. = pixel; col++;
} } refresh();
} void refresh()
{ pulse(resetPin); delayMicroseconds(2000); for (int row = 0; row < 8; row++)
{ for (int col = 0; col < 8; col++)
{ int redPixel = pixels[col][row] & 2; int greenPixel = pixels[col][row] & 1; digitalWrite(greenPins[c o l ], greenPixel); digitalWrite(redPins[c o l ], redPixel);
} pulse(clockPin);
(continúa)
100
30 Proyectos con A rd u in o
LISTADO DE PROYECTO (continúa) delayMicroseconds(1500);
>
void c l e a r ()
{ for (int row = 0; row < 8; row++)
{ for (int col = 0; col < 8; col++)
{ pixels[row][col] = 0;
} } >
void pulse(int pin)
{ delayMicroseconds(20); digitalWrite(p i n , H I G H ); delayMicroseconds(50); digitalWrite(pin, LOW); delayMicroseconds(50);
>
mente la razón de las llamadas a delayMicroseconds.
diatam ente de ocho dígitos. C ada dígito será 0 para
Esta función es com o la función delay, pero permite
apagado, 1 para el verde, 2 para el rojo y 3 para
retardos más cortos.
naranja. Por tanto, si introduce a l2 1 2 1 2 1 2 hará que
.
Aparte de eso, el código es bastante sencillo.
en la fila superior se vayan alternando los colores rojo y verde. C uando diseñe pautas para visualizar,
Pongamos todo junto C argue el sketch term inado del Proyecto 16 desde
lo m ejor es escribir las líneas en un editor de texto o en un procesador de textos y, posteriorm ente, pegar toda la serie en Serial M onitor.
su A rduino Sketchbook y descárguelo en su placa
Si quiere, puede introducir el texto siguiente:
(véase el C apítulo 1). Ahora puede probar el proyecto. Tan pronto com o se conecte al puerto USB y pulse reset, d ebe ría ver un patrón de prueba de un anillo exterior verde, con un anillo de color rojo dentro y, a conti nuación, un bloque naranja en el centro.
X
all222211 bll222211 C11222211
d llllllll e llllllll
Abra Serial M onitor en el softw are de Arduino
f 11222211
e introduzca x. Esto debería borrar la pantalla.
gll222211 h llllllll
A hora puede cam biar cada línea de la pantalla intro duciendo una letra para la fila (a-h), seguido inm e
C apítulo 6
■
Proyectos con luz
101
Displays LCD Si nuestro proyecto necesita m ostrar algo más que a22222222
unos cuantos dígitos num éricos, es probable que
bl2333321
quiera utilizar un m ódulo d isp lay L C D . Estos
C11211211 dlll22111
tienen la ventaja de que ya traen incorporado el con
ell233211
trolador electrónico, por lo que gran parte del tra
f 12333321
bajo ya nos lo dan hecho y no tenem os que hacer un
g22222222
m uestreo de cada dígito, configurando cada seg
h llllllll
m ento. Estos dispositivos ya em piezan a ser bastante estándar, por lo que ya hay m uchos m odelos de dife rentes fabricantes que podem os utilizar de la misma
a l lllllll
m anera. Los dispositivos que debem os buscar son
b22212221
lo que usan el chip controlador H D 44780.
C11212121 d22212121
Los d isp lay s L C D pueden resultar bastante caros
ell212121
si se adquieren en los com ercios de com ponentes
f22212221
electrónicos, pero buscando en Internet, a m enudo
g llllllll
se encuentran por unos euros, especialm ente si está
h llllllll
dispuesto a com prar unos cuantos de una vez.
Este es realm ente un buen proyecto para que experim enten las m entes más inquietas. Puede que tam bién desee intentar producir un efecto de anim a ción. cam biando la matriz pixels m ientras continúa en el loop.
.
Th e E m í I G e n iu s lis : flT HOME
La Figura 6-13 m uestra un m ódulo que puede m ostrar dos filas de 16 caracteres, estando cada carácter form ado por una m atriz de 7 por 5 segm en tos. En este caso tam poco tenem os que m anejar cada segm ento por separado.
>lje| NU3r I lo u in p t) ,Q L o f lO U M I
Figura 6-13
Módulo LCD de 2 por 16 caracteres.
|
dAOut'l!war»ol ouinp/nfi
102
30 Proyectos con A rd uino
El m ódulo de visualización incluye un conjunto
Hardware
de caracteres para que sepa qué segm entos activar para cada carácter. Esto significa que sim plem ente
El esquem a electrónico de la pantalla LC D se
tenem os que decirle qué carácter m ostrar y en qué posición de la pantalla.
pruebas, en la Figura 6-15. C om o puede ver, los
Sólo necesitam os siete salidas digitales para m anejar la pantalla. Cuatro de ellas son conexiones de datos y tres controlan el flujo de datos. Los deta
m uestra en la Figura 6-14 y el diseño de la placa de únicos com ponentes que se necesitan son el propio m ódulo LCD y una resistencia para lim itar la corriente de la retroilum inación por LED.
lles exactos de lo que se envía al m ódulo LCD se
El m ódulo LCD recibe cuatro bits de datos al
pueden pasar por alto, ya que existe una biblioteca
m ism o tiem po a través de las conexiones D4-7. El
estándar que podem os utilizar.
m ódulo tam bién tiene conectores para DO-3. que sólo se utilizan para transferir datos, ocho bits al
Lo m ostram os en el siguiente proyecto.
m ism o tiem po. Pero, para reducir el núm ero de pines necesarios, estos no los vam os a utilizar.
Proyecto 17
La manera más fácil de conectar el módulo L C D a
Placa de mensajes USB
la placa de pruebas es soldarle una tira de pines y conectar el módulo directamente a la placa de pruebas.
Este proyecto nos permitirá mostrar un mensaje de nuestro ordenador en un módulo LCD. No es necesa rio que el módulo LCD tenga que estar justo al lado
Software
del ordenador, de form a que puede utilizarlo colo
El softw are de este proyecto es muy .sencillo
cándolo en el extremo de un cable USB largo para
(Listado de Proyecto 17). Todo el trabajo de com u
m ostrar mensajes remotos - por ejem plo, al lado del portero electrónico de la puerta de su casa.
nicación con el m ódulo L CD es realizado por la biblioteca LCD. Esta biblioteca se incluye com o parte de la instalación de softw are estándar de
COMPONENTES Y EQUIPO Descripción
Apéndice
Placa A rd u in o UNO o D uem ilanove o sim ilar
R1 Resistencia 100 Q 0,5 W
1
El bucle (loop) lee cualquier entrada y, cuando carácter que encuentra es /, se desplaza a la segunda fila; en el resto de los casos, m uestra el carácter que
58 5
Tira de 16 pines de 2,54 m m de paso
talar nada especial.
encuentra un carácter #, borra la pantalla. Si el
M ódulo LCD (c o n tro la d o r H D 44 78 0)
Arduino, por lo que no es necesario descargar o ins
56
se haya enviado.
5V D12
RS
D10
E
D11
R/W
R1
4
6
a o o
5
15 D4
D5
Arduino UNO Duemilanove
LCD Module 11 HD44780 D5
D4
12
D6
D3
13 D7
D2
14
1
16
■■■■ GND
GND
Figura 6-14
C ircu ito e le ctró n ico del P royecto 17.
-« a s i» ;, 1I' oy m im m
*r w
’»0•)UT*i» J>i \
p
O O C O <
IO O O O
1\ if
( -í **
oooo oooo
c?oadK> c oooo
Diseño del c irc u ito del P royecto 17 sobre la placa de pruebas.
103
104
30 Proyectos con A rd uino
LISTADO DE PROYECTO 17 #include
// Pantalla LiquidCrystal con: // rs on pin 12 // rw on pin 11 // activar en pin 10 // d4-7 on pins 5-2 LiquidCrystal lcd(12,
11, 10, 5, 4, 3, 2);
void setup()
{ Serial.begin(9600); lcd.begin(2, 20); lcd.clear(); l e d .setCursor(0,0); lcd.print("Evil Genius"); l e d .setCursor(0,1); led.print("Rules");
>
void loop()
{ if (Serial.available())
{ char ch = Serial.read(); if (ch ==
’#')
{ lcd.clear();
> else if (ch ==
'/')
{ l e d .setCursor(0,1);
> else
{ l e d .w r i t e (c h );
> } }
C apítulo 6
■
Proyectos con luz
105
Pongamos todo junto
Resumen
Cargue el sketch term inado del Proyecto 17 desde
Eso es todo para los proyectos relacionados con
su A rd u in o S k etch b o o k y descárguelo en su placa
LEDs y luz. En el siguiente capítulo vam os a
(véase el C apítulo 1).
com enzar a trabajar con proyectos que utilizan
A hora podem os probar el proyecto abriendo el S erial M o n ito r e introduciendo algún texto. M ás adelante, en el Proyecto 22, volverem os a utilizar el panel L C D con un term istor y un codifi cador giratorio para crear un term ostato.
sonido de una u otra forma.
CAPÍTULO 7
Proyectos de sonido
se puede usar para generar soni
catódicos, m ientras un m ecanism o de base de tiem
dos com o salida y recibir sonidos com o entrada uti
pos barre el eje horizontal de izquierda a derecha,
lizando un m icrófono. En este capítulo, tenem os
repitiendo el ciclo al llegar al final. El resultado será
varios proyectos de tipo "instrum ento musical" y
algo parecido a la Figura 7-1.
U
n a p l a c a a r d u in o
tam bién proyectos que procesan entradas de sonido. A unque
no es estrictam ente
En la actualidad, los tubos de rayos catódicos
un proyecto de
han sido sustituidos por osciloscopios digitales que
"sonido", nuestro prim er proyecto consiste en crear
utilizan pantallas LC D . pero los principios siguen
un osciloscopio sim ple para que podam os ver la
siendo los m ism os.
form a de onda de una entrada analógica.
Este proyecto lee los valores de la entrada ana lógica y los envía al ordenador a través de una
Proyecto 18
.
conexión USB. En lugar de ser recibidos por el
Osciloscopio
S erial M o n ito r, son recibidos por un pequeño pro
Un osciloscopio es un dispositivo que perm ite ver
grama que los m uestra com o lo haría un osciloscopio.
una señal electrónica que aparece en form a de onda.
Según cam bia la señal, tam bién lo hace la form a de
Un osciloscopio tradicional funciona am plificando
la onda. En lo que se refiere al osciloscopio, obviam ente éste no va a ganar ningún prem io de precisión ni de velocidad, pero puede resultar divertido.
una señal para controlar la posición de un punto sobre el eje vertical (eje Y) de un tubo de rayos
O sciloscopio
4776.4
107
108
30 p royectos con A rd uino
COMPONENTES Y EQUIPO
Hardware La Figura 7-2 m uestra el esquem a electrónico del
D escripció n
A p é n d ic e
Placa A rd u in o UNO o
Proyecto 18 y la Figura 7-3 el Diseño del circuito sobre la placa de pruebas.
D uem ilanove o clon
1
El circuito tiene dos partes. R1 y R2 son resis
Cl
2 0 0 n F no polarizad o
21
tencias de alto valor que polarizan la señal que va a
C2, C3
E le ctro lítico de 100 pF
22
la entrada analógica a 2.5 V, haciendo de divisor de
R1, R2
Resistencia 1 MQ 0,5 W
15
tensión. El condensador C1 perm ite a la señal de
R3, R4
Resistencia 1 MQ 0,5 W
7
A C (com ente alterna) pasar sin ninguna com po nente de corriente continua (DC) (m odo AC tradi cional en un osciloscopio).
Esta es la prim era vez que vam os a utilizar c o n
R 3. R 4, C 2 y C 3 proporcionan un voltaje esta
d en sa d o res. C1 se puede conectar en cualquier sen
ble de referencia de 2.5 V. Esto es así para que nues
tido; sin em bargo, C 2 y C 3 están polarizados, es
tro o scilo sco p io pueda m ostrar tanto
decir, tienen polo positivo (+) y negativo (-) y, por
positivas com o negativas. Así, una de nuestras
tanto, deben conectarse de la form a correcta o es
puntas de prueba queda fijada en 2.5 V, y cualquier
probable que resulten dañados. C om o sucede con
señal que tengam os en la otra punta la tom ará de
señales
los LED s, en los condensadores polarizados el polo
referencia. Es decir, un voltaje positivo significará
positivo (m arcado com o un rectángulo blanco en el
un valor en la entrada analógica de más de 2.5 V y
sím bolo del esquem a) es m ás largo que el polo
un valor negativo de menos de 2.5 V.
negativo. El polo negativo tam bién tiene a m enudo
La figura 7-4 m uestra el osciloscopio com pleto.
un - (m enos) o una form a de diam ante junto al polo negativo. 5V
R1
C2 IZI
100(jF
AO Arduino UNO Duemilanove R2 C3
=□ 100pF
GND
Figura 7-2
Esquema eléctrico del Proyecto 18.
C apítulo 7
■
Proyectos de sonido
ooooo o
ooooo ooooo
ooooo O O 00 O
ooooo ©oooo
109
5V GND
O OOOOOOOOOO 0 0
O0©|oOOO©Of f o i p i p
oooooooooooooooooooo O C C G C oooooo0 0 0 0 0 0 0 00
© 0 0 0 0 G 0 0 0 0 0 0 0 0 0 b 0 © 0 0 <
igg§§8§Sg§8ggg§g§§§IS§8 0 0 0 OOOOOOOOOOOCOOCOO0 00
100 0 6 0 0 0 0 0 0 0 0 oooooooooo
30
OOOOO
OOOOO
OOOOO
5V
o
ooooo
ooooo
ooooo
GND
P untas de Prueba Figura 7-3
D i s e ñ o d e l c i r c u i t o d e l P r o y e c t o 18 s o b r e la p l a c a d e p r u e b a s .
Figura 7-4
P r o y e c t o 18. O s c i l o s c o p i o .
Software El sk etch es corto y sencillo (Listado del Proyecto 18). Su único propósito es el de leer la entrada ana lógica y m andarla al puerto USB tan rápido com o sea posible. Lo prim ero a tener en cuenta es que hem os aum entado la velocidad a 115200 b au d io s, la más alta disponible. Para obtener la m ayor cantidad posible de datos a través de la conexión, sin tener que recurrir a com plejas técnicas de com presión, vam os a desplazar dos bits a la derecha ( » 2) nues tros valores en bruto de diez bits; el efecto de esto
es que lo divide por cuatro y, por tanto, hace que quepa en un solo byte. N aturalm ente, necesitarem os ejecutar algún tipo de softw are en nuestro ordenador para que poda mos ver los datos enviados por la placa (Figura 7 1). Este softw are lo podem os descarg ar de w w w .arduinoevilgenius.com . Para in stalar el so ftw are, prim ero ten d rá que in stalar el lenguaje R u b y en su ordenador. Si usa un M ac, está de su erte , porque vienen con R uby pre in stalad o . Si está u tilizan d o W indow s o L in u x , p o r fa v o r, sig a las in s tru c c io n e s de h ttp ://w w w .ru b y -la n g .o rg /e n /d o w n lo a d s.
110
30 p royectos con A rd uino
Para ejecutar el softw are, cam bie el directorio en su term inal o intérprete de com andos al directorio donde descargó scope.rb. A continuación, escriba:
LISTADO DE PROYECTO 18 #define CHANNEL_A_PIN 0
ruby scope.rb
void setu p()
{ }
Debe aparecer una ventana com o la de la Figura 7-1.
void loop()
Pongamos todo junto
{
Cargue el sketch term inado del Proyecto 18 desde su Arduino Sketchbook y descárguelo en su placa (véase el C apítulo 1). Instale el software para su ordenador com o se ha descrito anteriorm ente y ya estará listo para com enzar. La m anera más sencilla de probar el osciloscopio es utilizar una señal que tenem os fácilm ente dispo nible a nuestro alrededor y que es el zum bido de la red eléctrica. La red eléctrica oscila a 50 ó 60 Hz (dependiendo de la parte del m undo donde viva), y cada aparato eléctrico em ite radiación electrom ag nética a esta frecuencia. Para recogerla, todo lo que tiene que hacer es tocar el cable de prueba conec tado a la entrada analógica y debería ver una señal sim ilar a la de la Figura 7-1. Pruebe a agitar su brazo cerca de cualquier equipo eléctrico y verá cóm o cam bia esta señal. En esta figura se m uestra la form a de onda y un cuadro pequeño con un núm ero dentro, que indica el núm ero de m uestras por segundo. Cada m uestra representa un píxel en la ventana, y la ventana tiene 600 píxeles de ancho. Una frecuencia de m uestreo de 4.700 m uestras por segundo significa que cada m uestra tiene una duración de 1/4.700 segundos, por lo que el ancho total de 600 m uestras representa 600/4.700 ó, lo que es lo m ism o, 128 m ilisegundos. La longitud de onda en la Figura 7-1 es de aproxi m adam ente 1/6 de 12 8 .o 2 1 m ilisegundos, lo que es igual a una frecuencia de 1/0,021 ó 47,6 Hz. Este resultado es lo suficientem ente aproxim ado com o para confirm ar que lo que estam os viendo es un zum bido de frecuencia de red de 50 Hz.
Serial.begin(115200);
int valué = analogRead(CHANNEL_A_PIN); valué = (valué »
2) & OxFF;
Serial.p r i n t (v a l u é , B Y T E ); delayMicroseconds(100);
}
Una vez que haya instalado R uby, el siguiente paso es instalar un m ódulo opcional de Ruby para com unicarse con el puerto USB. Para instalar esto, abra el sím bolo del sistem a en W indows o un ter m inal para M ac y Linux y, si está utilizando W indow s, introduzca:
gem install ruby-serialport
Si está usando Mac o Linux, escriba: sudo gem install ruby-serialport
Si todo ha funcionado bien, debería ver un m en saje com o éste: Building native extensions.
This could
take a while... Successfully
installed
ruby-
serialport-0.7.0 1 gem installed Installing
ri
documentation
for
documentation
for
ruby-serialport-0.7.0... Installing
RDoc
ruby-serialport-0.7.0...
C apítulo 7
La am plitud de la señal, com o se m uestra en la Figura 7-1, tiene una resolución de un píxel por
■
Proyectos de sonido
111
ble, necesitará una señal que se parezca más a una
paso de m uestra, y hay 256 pasos. Por tanto, si
onda senoidal (véase la Figura 7-5). G enerar una onda senoidal requiere un poco de
conecta entre sí los dos cables de prueba, debería ver una línea horizontal en mitad de la ventana. Esto corresponde a 0 V y está a 128 píxeles desde la parte
razonam iento y esfuerzo. U na prim era idea puede ser utilizar la salida analógica de uno de los pines para obtener la forma de onda. Sin em bargo, el pro
superior de la pantalla, ya que la ventana tiene 256
blem a es que las salidas analógicas de una Arduino
píxeles de alto. Esto significa que, puesto que la señal es aproxim adam ente dos tercios de la ventana, la am plitud de la señal es de alrededor de 3 V pico
no son verdaderas salidas analógicas, sino que son salidas PW M que se activan y desactivan muy rápi
a pico. Notará que la tasa de m uestreo cam bia bastante,
dam ente. De hecho, su frecuencia de conm utación se encuentra dentro del espectro de audio, por lo que si no tenem os cuidado, nuestra señal sonará tan mal
algo que dem uestra que este osciloscopio es de los
com o una onda cuadrada.
más rudim entarios y que. por tanto, no debe utili
La m ejor m anera de hacerlo es utilizar un con
zarse para nada crítico. Si desea m odificar la base de tiem pos, cam bie el valor de la función delayM icroseconds.
vertidor digital-analógico, o C D A com o se les conoce. Un CDA tiene diversas entradas digitales y produce una tensión de salida proporcional al valor de la entrada digital. A fortunadam ente, hacer un
Generación de sonido
CDA sim ple es fácil: todo lo que necesita son resis
Desde una placa Arduino se puede generar sonido con sólo activar y desactivar uno de sus pines a la
tencias. La Figura 7-6 m uestra un CDA construido a
frecuencia correcta. Si lo hace, el sonido producido será irregular y chirriante. Esto se denom ina una
partir de lo que se denom ina una escalera de resis tencias R-2R.
onda cuadrada. Para producir un tono más agrada
—»&ne — Square
------------Ondas cuadradas y senoidales.
112
30 p royectos con A rd uino
de las entradas digitales se conectará a una salida digital de A rduino. Los cuatro dígitos representan los cuatro bits del núm ero digital. Por tanto, esto nos da 16 salidas analógicas diferentes, com o se muestra en la Tabla 7-1.
Proyecto 19 Reproductor de música Utilizando un C D A , este proyecto reproduce una serie de notas m usicales a través de un altavoz en m iniatura para intentar crear algo parecido a una onda senoidal. Si puede conseguir un pequeño altavoz con cables podría conectarlo directam ente en la placa de pruebas. Si no, tendrá que, o bien soldarle cables GND
CDA utilizando una escalera R-2R.
rígidos a sus term inales o, si no tiene acceso a un soldador, em palm ar los cables enrollándolos cuida dosam ente en los term inales.
Utiliza resistencias de un valor R y dos veces R ,
COMPONENTES Y EQUIPO
por lo que R podría ser 5 K Q y 2R 10 K Q . C ada una
D e scripció n
TABLA 7-1 SALIDA ANALÓG ICA DE ENTRADAS DIGITALES
A p é n d ic e
Placa A rd u in o UNO o
D3
D2
DI
DO
0
0
0
•o
0
0
0
0
1
1
0
0
1
0
2
0
0
1
1
3
0
1
0
0
4
0
1
0
1
5
0
1
1
0
6
0
1
1
1
7
1
0
0
0
8
1
0
0
1
9
1
0
1
0
10
1
0
1
1
11
1
1
0
0
12
1
1
0
1
13
1
1
1
0
14
1
1
1
1
15
Duem ilanove o clon
1
C1
lOOnF no p o larizad o
20
C2
E le ctro lítico 16V, 100 pF
22
Rl-5
Resistencia 10 MQ 0.5W,
9
R6-8
Resistencia 4,7 MQ 0.5W,
8
R9
Resistencia 1 MQ 0.5 W
15
RIO
P o te n c ió m e tro lineal 100 MQ
13
IC1
Am plificador audio 1W TDA7052
47
A lta vo z pequeño 8 Q 1 W
59
Salida
C apítulo 7
■
Proyectos de sonido
113
Hardware
Software
Para tratar de reducir el núm ero de com ponentes al
Para generar una onda senoidal, el sketch recorre
m ínim o, hem os utilizado un circuito integrado para
una serie de valores alm acenados en la m atriz sin 16.
am plificar la señal y reproducirla por el altavoz. El
Estos valores se m uestran representados en la grá
C I T D A 7052 proporciona 1 W de potencia de salida en un pequeño chip de 8 pines fácil de usar. La Figura 7-7 m uestra el esquem a electrónico del Proyecto 19, y el diseño del circuito sobre la placa de pruebas se m uestra en la Figura 7-8.
fica de la Figura 7-9. No es la onda senoidal más exacta del m undo, pero es una clara m ejora com pa rada con la de una onda cuadrada (consulte el Listado del Proyecto 19).
Para conectar la salida del C D A a la entrada del
La función playN ote es la clave para generar la
am plificador vam os a utilizar C l; y com o conden
nota. El tono de la nota producida es controlado por
sador de desacoplo para desviar a m asa cualquier
el retardo tras cada paso de la señal. El bucle (loop)
tipo de ruido de las líneas eléctricas, utilizarem os
para generar la form a de onda se encuentra a su vez
C 2. Este debe ubicarse lo más cerca posible de IC 1 .
dentro de otro bucle que produce el suficiente
R9 y el potencióm etro RIO form an un divisor de tensión para reducir la señal de la escalera de resis tencias en, al m enos, un factor de 10, dependiendo del ajuste del potencióm etro.
GND
Figura 7-7
Esquema eléctrico del Proyecto 19.
núm ero de ciclos com o para hacer que cada nota tenga aproxim adam ente la m ism a duración.
114
30 p royectos con A rd uino
oogflB & O ooo oc oo
occo 0 CSC c ene
coccoooo cocooocc cooooocc cocoocco oooooooo
Figura 7-8
Diseño del c irc u ito del P royecto 19 sobre la placa de pruebas.
LISTADO DE PROYECTO 19 int dacPins[] = {2, 4, 7 , 8}; int sinl6[ ] = {7, 8, 10, 11,
12, 13, 14 , 14, 15 , 14 , 14,
10, 8, 7, 6, 4, 3, 2, 1, 0, 0,
o, o,
13, 12, 11,
0, 1, 2, 3, 4, 6};
int lowToneDurations[] = {120, 105, 98, 89, 78, 74, 62}; //
A
B
C
D
E
F
G
int highToneDurations[] = { 54, 45, 42, 36, 28, 26, 22 > //
b
a
c
d
e
f
’
g
// Escala //char* song = "A B C D E F G a
b
c d e
f g" /
// Jingle Bells //char* song = "E E EE E E EE E G C D EEEE F F F F F E E E E D D E DD G C D EEEE F F F F F E E E G G F D CCCC"
// Jingle Bells - Más agudo char* song = "e e ee e e ee e g c d eeee f f f f f e e e e d d e d d g g e e e e e e e e e g c d eeee f f f f f e e e g g f d
c c c c ";
void setup()
{ for (int i = 0; i < 4; i++)
{ pinMode(dacPins[i ], OUTPUT);
} } (continúa)
C apítulo 7
LISTADO DE PROYECTO 19 (continúa) void loop()
{ int i = 0; char ch = song[0]; while (ch != 0)
{ if (ch == ’ ')
d e l a y (75);
else if (ch >= 'A' and ch <= 'G')
playNote(lowToneDurations[ch - 'A']);
else if (ch >=
'a' and ch <=
’g')
playNote(highToneDurations[ch - ’a ']);
i++; ch = song[i];
} d e l a y (5000);
> void setOutput(byte valué)
{ digitalWrite(dacPins[3],
((valué & 8) > 0))
digitalWrite(dacPins[2],
((valué & 4)
digitalWrite(dacPins[1],
((valué & 2) > 0))
digitalWrite(dacPins[0],
((valué & 1) > 0))
> 0))
} void playNote(int pitchDelay)
{ long numCycles = 5000 / pitchDelay + (pitchDelay / 4); for (int c = 0; c < numCycles; c++)
{ for (int i = 0; i < 32; i++)
{ setOutput(sinl6[i]); delayMicroseconds(pitchDelay);
} } }
■
Proyectos de sonido
115
116
30 proyectos con A rd uino
~ "
5¡nl6.ods - OpenOfhce.org
Cak_____
lü ít i u & Arial ■SÜM
Figura 7-9
|10 fx K v./
W B /U
= ¡E 2 =
A *
________ _
e.
V Í&
58
«? □
=SUMO
Una representación de la m a triz sin16
La función playN ote llam a a setO utput para
tarios la línea que em pieza por "char* song ="
establecer el valor de los cuatro pines digitales
colocando // delante de la m ism a y. a continuación,
conectados a la escalera de resistencias. El opera
defina su propia matriz.
dor & (y) se utiliza para enm ascarar el valor, de
La notación funciona de la siguiente manera: hay
form a que sólo veamos el valor del bit que nos inte
dos octavas, las notas altas se escriben en m inús
resa.
cula, de la "a" a la "g" y las notas bajas de la "A" a
La m úsica se reproduce desde una matriz de
la "G". Para una nota de m ayor duración, sim ple
caracteres, siendo cada carácter una nota, y cada
mente repita la letra de la nota sin poner un espacio
espacio representa el silencio entre notas. El bucle
entre ellas.
principal m ira cada letra de la variable song y la
Habrá notado que la calidad del sonido no es
reproduce. C uando se ha reproducido la canción
extraordinaria. En cualquier caso, sigue siendo
entera, hay una pausa de 5 segundos y luego la can
m ucho m enos desagradable que utilizar una onda
ción com ienza de nuevo.
cuadrada, pero está lejos de lo arm onioso de un
¡Puede que algunos encuentren este proyecto útil para vengarse de sus enem igos!
instrum ento musical real, donde cada nota tiene una "envolvente" donde la am plitud (volum en) de la nota varía de acuerdo con ésta al ser reproducida.
Pongamos todo junto C argue el sketch term inado del Proyecto 19 desde su A rduino Sketchbook y descárguelo en su placa (véase el C apítulo 1). Puede que desee cam biar la canción Jingle Bells. Para ello, sim plem ente coloque entre com en
C apítulo 7
■
Proyectos de sonido
117
Hardware
Proyecto 20
El volum en del sonido se controla m ediante una
Arpa de luz
salida PW M (D6) conectada a la entrada de control
Este proyecto es en realidad una adaptación del Proyecto 19, pero utilizando dos sensores de luz (LDRs): uno que controla el tono del sonido y otro el volum en. Está inspirado en el instrum ento m usi cal T herem in, que se interpreta agitando m isteriosa mente las m anos entre dos antenas. En realidad, este proyecto produce un sonido más parecido a una gaita que a un arpa, pero es bastante divertido.
de volum en del am plificador T D A 7052. Querem os elim inar todos los restos de los im pulsos PW M para que podamos pasar la salida a través del filtro paso bajo constituido por R l l y C 3. el cual sólo dejará pasar los cam bios lentos de señal. Una form a de entender esto es pensar que el condensador C 3 es com o un cubo que se llena con la carga de la resis tencia R l l . Las fluctuaciones rápidas de señal ten drán poco efecto debido a que se produce una
COMPONENTES Y EQUIPO D e scripció n
A p é n d ic e
integración de la señal. Las Figuras 7-10 y 7-11 m uestran el esquem a electrónico y el diseño de la placa de pruebas para el proyecto y, en la Figura 7-12, puede ver el pro
Placa A rd u in o UNO o
yecto term inado.
D uem ilanove o clon
1
Cl
lOOnF no polarizad o
20
C2, C3
E le ctro lítico 16V, 100 pE
22
R1-5
Resistencia 10 MQ
R6-8
Resistencia 1 MQ 0.5 W
8
R9, Rll
Resistencia 1 MQ 0.5 W
15
Software
RIO
P o te n ció m e tro lineal 100 MQ
13
El software de este proyecto tiene m ucho en com ún
R12, R13 Resistencia 47 MQ 0.5 W
11
con el Proyecto 19 (consulte el Listado del Proyecto
R14, R15 LDR
19
20 ).
IC1
0.5 W
•
9
Am plificador audio 1W TDA7052 47
Los LDRs. R14 y R15. se han situado en los extrem os opuestos de la placa de pruebas para hacer que resulte más fácil tocar el instrum ento con las dos manos.
Las principales diferencias son que el período de pitchDelay está determ inado por el valor de la
A lta voz pequeño 8 Q 1 W
59
entrada analógica 0. Esto luego se escala al rango adecuado utilizando la función m ap. Del m ismo m odo, el voltaje del volum en se ajusta leyendo el
Si puede conseguir un altavoz pequeño con cables podría conectarlo directam ente en la placa de pruebas. Si no, tendrá que, o bien soldarle cables rígidos a sus term inales o, si no tiene acceso a un soldador, em palm ar los cables enrollándoselos cui dadosam ente en los term inales.
valor de la entrada analógica 1, se escala usando la función map y, a continuación, se escribe en la salida 6 de PW M . Sería posible usar sim plem ente la LDR R14 para controlar directam ente la salida de la escalera de resistencias, pero de esta m anera tene mos un m ayor control sobre el escalado y com pen sado de la salida, y adem ás queríam os ilustrar cóm o suavizar o tratar una señal PW M para utilizarla para generar una salida constante.
118
30 proyectos con A rd uino
Esquem a e lé c tric o del P royecto 20.
d ise ñ o del c irc u ito del P royecto 2 0 sobre la placa de pruebas.
Capítulo 7
■
Proyectos de sonido
119
P royecto 20. A rpa de luz.
LISTADO DE PROYECTO 2 0 int pitch Input Pin = 0'; int volumelnputPin = 1; int volumeOutputPin = 6;
int dacPins[] = {2, 4, 7, 8>; int sinl6[] = {7, 8, 10, 11, 12, 13, 14, 14, 15, 14, 14, 13, 12, 11, 10, 8, 7, 6, 4, 3, 2, 1, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6};
int count = 0;
void setup() { for (int i = 0; i < 4; i++) { pinMode(dacPins[i], OUTPUT); } pinMode(volumeOutputPin, O U TPUT); }
(continua)
120
30 p royectos con A rd uino
LISTADO DE PROYECTO 2 0 (continúa) void loop()
{ int pitchDelay = map(analogRead(pitchInputPin), 0, 1023, int volunte = map(analogRead(volumelnputPin), 0, 1023,
10, 60);
10, 70);
for (int i = 0; i < 32; i++)
{ setOutput(sinl6[i]); delayMicroseconds(pitchDelay);
} if (count == 10)
{ analogWrite (volumeOutputPin, volunte); count = 0;
> count++;
} void setOutput(byte valué)
{ digitalWrite(dacPins[3],
((valué & 8) > 0))
digitalWrite(dacPins[ 2 ] ,
((valué & 4) > 0))
digitalWrite(dacPins[1],
((valué & 2) > 0)) ((valué & 1) > 0)>
digitalWrite(dacPins[0],
}
Pongamos todo junto Cargue el esquem a term inado del Proyecto 20 desde
Project 21
su Arduino Sketchbook y descárguelo en su placa
Medidor VU
(véase el C apítulo 1).
Este proyecto (que se m uestra en la Figura 7-13)
Para tocar el "instrum ento", ponga la mano dere
utiliza una barra de LEDs de 10 segm entos para
cha sobre una de las LDR para controlar el volum en
indicar el volum en del sonido captado por un m icró
del sonido y la m ano izquierda sobre la otra LDR
fono. La barra de LED utilizada viene en un encap-
para controlar el tono. Se pueden conseguir efectos
sulado dual in line (DIL).
interesantes m oviendo las m anos sobre las LDR.
El pulsador activa o desactiva el m odo de fun
Hay que tener en cuenta que, dependiendo de la
cionam iento del m edidor VU. En el m odo norm al,
luz am biental, puede que tenga que ajustar en el
el gráfico de barras sim plem ente se desplaza arriba
sketch los valores de las funciones map.
y abajo con el volum en del sonido. En el modo m áxim o, el gráfico de barras registra el valor m áxim o y enciende el LED correspondiente, con lo que el nivel de sonido lo va subiendo gradualm ente.
Capítulo 7
■
Proyectos de sonido
121
| P royecto 21. M ed id o r VU.
COMPONENTES Y EQUIPO D e scripció n
A p é n d ic e
El esquem a electrónico de este proyecto se m uestra en la Figura 7-14.
El encapsulado de la barra de
LED trae un term inal de conexión por LED , nece
Placa A rd u in o UNO o D uem ilanove o clon
Hardware
1
sitando cada uno su propia resistencia de lim itación de corriente.
R1, R3, R4
Resistencia 10 MQ 0,5 W
9
R2
Resistencia 100 MO 0,5 W
13
R5-14
Resistencia 270 MO 0,5 W
6
entrada analógica. Por tanto, para aum entar la señal,
RIO
Resistencia 10 MO 0,5 W
9
utilizarem os un sencillo am plificador de un transis
C1
100 nF
20
tor. U tilizarem os un m ontaje estándar denom inado
lo suficientem ente potente com o para m anejar la
polarización por realim entación de colector, en la
Barra de LED de
SI
El m icrófono no será capaz de entregar una señal
10 segm entos
35
Pulsador
48
M icró fon o e le ctre t
60
que una parte de la tensión del colector se utiliza para polarizar el transistor, consiguiendo así una am plificación lineal más holgada que si utilizára mos una conm utada. En la Figura 7-15 se m uestra el diseño del cir cuito sobre la placa de pruebas. Puede observar que al necesitarse tantos LEDs se aum enta tam bién el núm ero de cables.
Software El sketch para este proyecto (Listado del Proyecto 21) utiliza una m atriz (arrav) de pines de LED para acortar la función setup. Esto tam bién se utiliza en la función loop, donde vam os recorriendo cada LED y decidiendo si lo activam os o desactivam os.
122
30 pro yecto s con A rd uino
ooooo ooooo
ooooo ooooo
5V GND
oocooooooooo co c o o c c c c o o c co c o o c o c c o o c ccccooccccoc co o o frra o o o o c
Diseño del c irc u ito del P royecto 21 sobre la placa de pruebas.
C apítulo 7
■
Proyectos de sonido
123
LISTADO DE PROYECTO 21 int ledPins[] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int switchPin = 2; int soundPin = 0;
boolean showPeak = false; int peakValue = 0;
void setup()
{ for (int i = 0; i < 10; i++)
{ pinMode(ledPins[i], OUTPUT);
> p inMode(switchPin, INPUT);
} void loop()
{ if (digitalRead(switchPin))
{ showPeak = ! showPeak; peakValue = 0; de lay(200); // debounce switch
} int valué = analogRead(soundPin); int topLED = map(value,
0, 1023, 0, 11) - 1;
if (topLED > peakValue)
{
* peakValue = topLED;
} for (int i = 0; i < 10; i++)
{ digitalWrite(ledPins[i], (i <= topLED
|| (showPeak && i == peakValue)));
> }
En la parte superior de la función loop com pro bam os si el pulsador está pulsado; si es así, cam bia
para evitar que posibles rebotes del teclado vuelvan a cam biar otra vez el m odo.
mos el m odo. El com ando ! invierte un valor, lo que
El nivel de sonido se lee del pin analógico 0 y, a
convierte verdadero (true) en falso (false) y falso
continuación, utilizam os la función map para con
(false) en verdadero (true). Por esta razón, a veces
vertir un rango de 0 a 1023 a un valor entre 0 y 9,
se le conoce com o el "operador de m arketing". Tras
que será el LED superior a iluminar. Esto se ajusta
cam biar el m odo, rem id am o s el valor m áxim o a 0
ligeram ente am pliando el rango de 0 a 11 para, a
y, a continuación, lo retardam os 200 m ilisegundos
continuación, restarle 1. A sí se evita que los dos
124
30 pro yecto s con A rd uino
LED más bajos queden perm anentem ente encendi
Resumen
dos debido a la polarización del transistor.
Con este proyecto concluim os nuestros proyectos
Luego continuam os recorriendo los núm eros 0 y
basados en sonido. En el siguiente capítulo vam os a
9 y utilizam os una expresión booleana que devuelve
ver cóm o se utiliza la placa Arduino para controlar
true (verdadero) (y, por lo tanto, enciende el LED)
potencia, un tem a que creem os que tam bién le
si "i" es m enor o igual que el LED superior. En rea
puede resultar interesante.
lidad, la cosa es m ás com plicada, ya que tam bién deberíam os m ostrar ese LED si estam os en modo pico y da la casualidad de que ese LED resulta ser el p eakV alué.
Pongamos todo junto C argue el esquem a term inado del Proyecto 21 desde su A rd u in o S k etch b o o k y descárguelo en su placa (véase el C apítulo 1).
C A P Í T U L O
8
Proyectos de energía eléctrica
T
r a s h a b e r e x a m in a d o la l u z
y
el
sonido, dirigi
mos ahora nuestra atención a controlar la energía. En esencia, esto significa encender y apagar cosas y controlar su velocidad. Esto vam os a aplicarlo prin cipalm ente a m otores y a dispositivos láser y al esperado proyecto del Láser servo-controlado.
Proyecto 22 Termostato LCD La tem peratura en el cuarto de trabajo de todo genio
que la tensión de la red jam ás pueda m ezclarse con la baja tensión del circuito, lo que es muy positivo desde el punto de vista de la seguridad. Si el lector decide utilizar este proyecto para accionar dispositivos conectados a la red eléctrica, sólo debe lanzarse a realizarlo si realm ente sabe lo que está haciendo, y adem ás debe proceder con extrem a cautela. La red eléctrica es muy peligrosa. Son m uchas las personas que han perdido la vida por su causa y otras m uchas las que han sufrido im portantes quem aduras.
que se precie debe estar regulada, no siendo bueno que nadie se resfríe.
COMPONENTES Y EQUIPO
Este proyecto utiliza una pantalla LCD y un term istor com o sensor de tem peratura para m ostrar la
D escripció n
tem peratura actual y la tem peratura program ada.
Placa A rd u in o UNO o
U tiliza un codificador giratorio que perm ite cam biar la tem peratura program ada. El botón del codi ficad o r tam bién actúa com o con m u tad o r de
A p é n d ic e
D uem ilanove o clon
1
R1
Term istor beta = 4 0 9 0 33 KQ
18
R2
Resistencia 33 KQ 0,5 W
10
R3-5
Resistencia
13
tem peratura program ada, se activa un relé. Los
R6
Resistencia 270 Q 0,5 W
6
relés son com ponentes electrom agnéticos clásicos
R7
Resistencia 1 KQ 0,5 W
7
que activan un interruptor m ecánico cuando una
DI
LED rojo 5 m m
23
corriente circula a través de una bobina. Tienen una serie de ventajas, com o las de poder conm utar altas
D2
1N 4004
38
TI
BC548
40
para controlar equipos conectados a la red eléctrica.
Relé 5V
61
Tam bién separan eléctricam ente el circuito de con
M ódulo LCD H D 44780
58
trol (bobina), del circuito de conm utación, de modo
Tira de pines 2.54 m m paso
55
anulación. C uando la tem peratura m edida es inferior a la
tensiones y corrientes, lo que los hace adecuados
100 KQ 0,5 W
125
128
30 Proyectos con A rd u in o
LISTADO DE PROYECTO 22 (continúa) boolean override = false; float hysteresis = 0.25;
void setup()
{ lcd.begin(2, 20); pinMode(ledPin, O U T P U T ); pinMode(relayPin, O U TPUT); pinMode(aPi n , INPUT); pinMode(b P i n , INPUT); p inMode(buttonPin,
INPUT);
lcd.clear();
> void loop()
{ static int count = 0; measuredTemp = readTemp(); if (digitalRead(buttonPin))
{ override = ! override; updateDisplay(); delay(500);
// debounce
} int change = getEncoderTurn(); setTemp = setTemp + change * 0.1; if (count == 1000)
{
• updateDisplay(); updateOutputs(); count = 0;
> count ++;
int getEncoderTurn()
{ // devuelve -1, 0, o +1 static int oldA = LOW; static int oldB = LOW; int result = 0; int newA = digitalRead(a P i n ); int newB = digitalRead(b P i n ); if (newA != oldA || newB != oldB)
{ // algo ha cambiado if (oldA == LOW && newA =
HIGH)
(continúa)
C apítulo 8
■
P royectos de energía eléctrica
129
LISTADO DE PROYECTO 22 (continúa)
{ result = -(oldB * 2 - 1);
} } oldA = newA; oldB = newB; return result;
} float readTerap()
{ long a = analogRead(analogPin); float temp = beta / (log(((1025.0 * resistance / a) - 33.0) / 33.0) + (beta / 298.0)) - 273.0; return temp;
} void updateOutputs()
{ if (override ||
measuredTemp < setTemp - hysteresis)
{ digitalWrite(ledPin, HIGH); digitalWrite(relayPin, H I G H );
} else if (1override && measuredTemp > setTemp + hysteresis)
{ digitalWrite(ledPin, L O W ); digitalWrite(relayPin, LOW);
} > void updateDisplay()
{ l e d .setCursor(0,0); led.print("Actual:
");
lcd.print(adjustUnits(measuredTemp)); lcd.print(" o"); l e d .p r i n t (m o d e ); l e d .p r int(" ");
l e d .setCursor(0,1); if (override)
{ led.print("
OVERRIDE ON
");
} else (continúa)
130
30 Proyectos con A rd uino
LISTADO DE PROYECTO 22 (continúa)
{ le d .p r int("S e t :
");
led.print(adjustünits(setTemp)); lcd.print(" o"); led.p r i n t (m o d e ); led.print(" ");
> } float adjustUnits(float temp)
{ if (mode == 'C ')
{ return temp;
} else
{ return (temp * 9) / 5 + 32;
} >
un sistem a sim ple de control de encendido y apa
La figura 8-3 m uestra cóm o utilizam os el valor
gado. C uando la tem peratura cae por debajo del
de histéresis para evitar que se produzca el "hun-
nivel program ado (llam ado punto de consigna), la
ting" con excesiva frecuencia.
alim entación se conecta y la habitación se calienta hasta llegar a la tem peratura por encim a del punto de consigna program ado; posteriorm ente, la habita
A m edida que aum enta la tem peratura, con la ali m entación encendida, nos iremos aproxim ando al punto de consigna; sin em bargo, el equipo no se
ción vuelve a enfriarse, hasta que la tem peratura am biente queda de nuevo por debajo del punto de consigna program ado, en cuyo m om ento la calefac
Tem peratura
ción se activa de nuevo, y así sucesivam ente. Pasado un cierto tiem po, cuando la tem peratura se estabiliza cerca del punto de consigna progra m ado, las conexiones y desconexiones em piezan a ser dem asiado frecuentes, lo que no es deseable, adem ás de que pueden producir un deterioro prem a turo de los contactos del relé. Una form a de m inim izar este efecto es introducir algo llam ado histéresis. Puede que incluso haya observado en el sketch una variable llam ada hysteresis, que se ha establecido a un valor de 0,25°C .
Figura 8-3
La histéresis en los sistemas de control.
C apítulo 8
apagará hasta que se haya superado este punto de
■
Proyectos de energía e léctrica
131
Pongamos todo junto
consigna (valor program ado) m ás el valor de histéresis. De igual m odo, al dism inuir la tem peratura, la alim entación no volverá a aplicarse sim plem ente al caer justo por debajo del punto de consigna pro gram ado, sino cuando supera este punto, menos el valor de histéresis.
Cargue el Sketch tenninado del Proyecto 22 desde su Arduino Sketchbook y descárguelo en su placa (véase el Capítulo 1). En la Figura 8-4 se muestra el proyecto completo. Para probar el proyecto, gire el codificador giratorio,
Si la actualización de la pantalla la hiciésem os
y ajuste la temperatura establecida ligeramente por
de form a continua, es decir, cada vez que dam os una
encima de la temperatura real. El LED debería encen
vuelta al bucle principal, se produciría un indesea
derse. A continuación, ponga los dedos en el termistor
ble efecto de parpadeo. Para evitarlo, la actualiza
para calentarlo. Si todo funciona correctamente, al
ción la harem os cada 1000 vueltas del bucle. No
aumentar la temperatura el LED debe apagarse y escu
obstante, esto significa que se actualizará tres o
charse el clic del relé.
cuatro veces por segundo. Para ello, utilizam os la
También puede probar el funcionamiento del relé
técnica de increm entar una variable counter (con
conectando un polímetro en modo de continuidad
tador) cada vez que da la vuelta al bucle. Cuando
(zumbador) en los contactos de salida del relé.
llega a 1000, actualizam os la pantalla y volvem os a poner el contador a 0. Utilizando lcd.clear(), cada vez que cam biem os la pantalla tam bién hará que parpadee. Por lo tanto, basta con escribir las nuevas tem peraturas encim a de las antiguas. Esta es la razón por la que rellena
Por favor, es vital que recuerde que si tiene la intención de utilizar su relé para conm utar la red eléctrica, primero coloque este proyecto en una Protoshield soldada correctamente. Segundo, tenga mucho cuidado y compruebe y revise dos veces lo que está haciendo. ¡La red eléctrica mata!
mos el m ensaje "OVERRIDE ON" con espacios, para que se borrara cualquier texto que hubiera podido aparecer anteriorm ente en los extrem os.
El relé sólo debe utilizarse en aplicaciones de baja tensión, a menos que vaya a utilizar este diseño para montarlo en una placa soldada correctamente.
Figura 8 -4
Proyecto 22. Termostato LCD.
132
30 Proyectos con A rd u in o
Si resulta que no tiene ningún ordenador estrope
Proyecto 23 Ventilador controlado por ordenador Una de las piezas útiles que se puede sacar de un viejo PC es el ventilador (Figura 8-5). En nuestro caso, vamos a utilizar uno de estos ventiladores para m antenem os frescos durante el verano. A estas altu ras es evidente que un simple interruptor on/otT no estaría en consonancia con nuestra m anera de hacer las cosas; por ello, vamos a hacer que la velocidad del ventilador sea controlable desde nuestro ordenador.
ado al que sacarle las tripas, no se preocupe: un ven tilador nuevo se puede com prar bastante barato.
Hardware Podem os controlar la velocidad del ventilador utili zando la salida analógica (P W M ) y haciendo que m aneje un transistor de potencia para controlar el motor. Puesto que estos ventiladores de ordenador suelen ser de 12 V, vam os a utilizar una fuente de alim entación externa para proporcionar la energía para alim entar el ventilador. La Figura 8-6 m uestra el esquem a electrónico
COMPONENTES Y EQUIPO
del proyecto, y la Figura 8-7 el diseño de la placa de pruebas.
D escripció n
A p é n d ic e
Placa A rd u in o UNO o D uem ilanove o clon
Software 1
R1 Resistencia 270 Q 0,5 W
6
TI
41
Transistor de pote ncia BD139
M1 V e n tila d o r o rd e n a d o r 12 V Fuente a lim en ta ció n 12 V 1 A
En realidad, es un sk etch m uy sim ple (Listado del Proyecto 23). Esencialm ente, lo único que necesita-' mos es leer un núm ero del 0 al 9 del USB y ejecu
63 62
tar un an a lo g W rite al m o to rP in de ese valor, m ultiplicado por 28, para escalarlo hasta un núm ero entre 0 y 252.
Figura 8-5
Proyecto 23. Ventilador controlado por ordenador.
C apítulo 8
■
Proyectos de energía e lé ctrica
133
LISTADO DE PROYECTO 23 int motorPin = 11;
void setup() { pinMode(motorPin, O U T P U T ); analogWrite(motorPin, 0); Serial,begin(9600);
} void loop() { if (Serial.available())
{ char ch = Serial.read(); if (ch >= '0' && ch <= '9')
Figura 8-6
{
Esquema electrónico del Proyecto 23.
int speed = ch - '0'; analogWrite(motorPin, speed
Pongamos todo junto
* 28);
Cargue el sketch term inado del Proyecto 23 desde su A rd u in o S k etch b o o k y descárguelo en su placa
} }
(véase el C apítulo 1). Hay tan pocos com ponentes en este proyecto que en realidad podríam os em palm ar las patas de los m ism os y colocarlos directam ente en la placa A rduino, prescindiendo totalm ente de la placa de pruebas.
OOOOI OOOOI
l OOOO IOOO
■ oooocooot c o o o d i c c o c o o o c o,© #§íj » r« ím ^ fo c o o o c c co r^io o & tooooo COCO© O fA ftO Ó O O O
co co 00 oooo
OOOOOOCf
3 0 0 0 0
ooooo 3 0 0 0 0
boooo OOOOO
ooo o» -:;a € o o o
OOOO
OOOO
Diseño del c irc u ito del P royecto 23 sobre la placa de pruebas.
5V GND
134
30 Proyectos con A rd uino
Controladores de puente H Para cam biar la dirección en la que gira un motor, es necesario invertir la dirección en la que circula la corriente. Para ello se necesitan cuatro interrupto res o transistores. La Figura 8-8 m uestra cóm o funciona este sistem a, utilizando interruptores en una d istribución llam ada, por razones obvias, puente H. En la Figura 8-8, S I y S4 están cen-ados y S2 y S3 están abiertos. Esto permite que la corriente circule por el motor, siendo el terminal A el positivo y el ter minal B el negativo. Si invertimos los conmutadores, de fonna que S2 y S3 estén cerrados y S I y S4 abier
En el siguiente proyecto, para controlar un m otor
tos, entonces B sería el positivo y A el negativo, y el
eléctrico vamos a utilizar transistores en lugar de
motor girará en dirección opuesta.
conm utadores.
Sin em bargo, quizás haya divisado un peligro con este circuito. Y es que, si por casualidad S I y S2 están cerrados, entonces la tensión positiva estará conectada directam ente a la tensión negativa, lo que
Proyecto 24 Hypnotizer
producirá un cortocircuito. Lo m ism o ocurriría si S3
El control de la m ente es, sin duda, una de esas
y S4 estuvieran am bos cerrados al m ismo tiem po.
cosas que siem pre ronda en la cabeza de los más inquietos. En este proyecto (véase la Figura 8-9) vam os a m anejar el control com pleto de un m otor con el fin de controlar no sólo su velocidad, sino
Figura 8-9
P royecto 24. H ipnotizador.
C apítulo 8
COMPONENTES Y EQUIPO D escripció n
A p é n d ic e
T2, T4
T1, T3
1
MOSFET de pote ncia canal N FQP33N10
Proyectos de energía eléctrica
135
El m otor que hem os utilizado en este proyecto lo hem os recuperado de una unidad de CD de un orde nador estropeado. Una alternativa barata para el m otor sería algún juguete viejo de niño que tenga un motor. Y para que podam os colocar en él el disco
Placa A rd u in o UNO o D uem ilanove o clon
■
hipnótico, los más adecuados son los que cuentan con engranajes para m over el eje.
43
MOSFET de p otencia
Hardware
canal P, FQP27P06
44
T4, T5
BC548
40
R1-6
Resistencia 10 KQ 0,5 W
9
MI
M oto r 6 V
64
tam bién para que gire hacia la derecha o hacia la
El Esquem a electrónico del hipnotizador se m uestra en la Figura 8-10. El diseño es el de un p u en te H estándar. Observe que para el control de potencia principal estam os utilizando lo que se llam an tran sistores de tipo M O S F E T (Transistor de efecto de cam po de puerta aislada) en lugar de los transistores b ip o lares. En teoría, esto nos perm itirá controlar
izquierda. Unido al m otor colocarem os un disco
m otores de bastante potencia, pera adem ás tienen la
espiral giratorio para fijar la atención y cautivar la
ventaja de que los M O S F E T s apenas se calientan con nuestro pequeño m otor y, por tanto, no necesi
m ente de las desafortunadas víctim as.
tarem os disipadores térm icos. Las conexiones de puerta de los M O S F E T s infe riores van astutam ente conectadas a las salidas de
Arduino UNO Duemilanove
Figura 8-10
Esquema electrónico del Proyecto 24.
136
30 Proyectos con A rd u in o
los transistores colocados en el lado opuesto, de form a que cuando se activa T I, T4 se activará tam bién autom áticam ente; y cuando se activa T 3, tam bién lo hará T2. Las resistencias R1 a R4 aseguran que el estado predeterm inado de T I a T4 sea apagado, colocando en estado alto las puertas de los M OSFETs del canal P y en estado bajo las de canal N. T5 y T6 son transistores bipolares de baja corriente que se utilizan para activar T I y T3, res pectivam ente. En este caso, podríam os prescindir de estos transistores y m anejar las puertas de T I y T3 directam ente desde la placa A rduino. Sin em bargo, para ello, habría que invertir la lógica (las puertas en estado alto apagarían el transistor). Aunque podría mos resolver esto m ediante softw are, hay otra razón para utilizar estos dos com ponentes adicionales, y es que con ellos podem os utilizar este circuito para controlar m otores de m ayor tensión, sim plem ente aum entando la tensión de alim entación. Si estuvié ram os m anejando directam ente los M O SFETs. entonces la salida positiva de la Arduino tendría que tener más de 5 V para desactivar el M O SFE T si la alim entación del m otor fuera de 9 V o m ás, algo que no es posible.
La Figura 8-11 m uestra el diseño del circuito del proyecto sobre la placa de pruebas. Para funcionar, nuestro hipnotizador necesita un diseño en espiral. Si quiere, puede utilizar la Figura 8-12 para hacer una copia y pegarlo en el ventilador. O, com o alternativa, en www.arduinoevilgenius.com tiene a su disposición para que lo imprima una ver sión más colorida de la espiral.
Esto hace que el circuito esté sobredim ensionado. lo cual resulta especialm ente interesante para todos aquellos con grandes requerim ientos en el tem a de m otores.
La espiral de papel la hem os recortado y pegado en un cartón un poco más duro y, posteriorm ente, la hem os pegado al engranaje del extrem o del motor.
Por últim o, C1 filtra algunos de los im pulsos eléctricos que se producen cuando se m aneja un dis positivo com o un motor.
Software
m
a
r
Lo importante en este sketch (Listado del Proyecto 24) es asegurarse de la imposibilidad de que todos
Diseño del c irc u ito del P royecto 24 sobre la placa de pruebas.
C apítulo 8
■
Proyectos de energía eléctrica
LISTADO DE PROYECTO 24 int tlPin = 5; int t3Pin = 6;
int speeds[] = {20, 40, 80, 120, 160, 180,
160,
120, 80, 40, 20,
-20, -40, -80, -120, -160, -180, -160, -120, -80, -40, -20}; int i = 0;
void setup() { pinMode(tlPin, OUTPUT); digitalWrite(tlPin, LOW); pinMode(t3Pin, O UTPUT); digitalWrite(t3Pin, LOW); } void loop() { int speed = speeds[i ]; i++; if (i == 22) { i = 0; } d r i v e (speed); d e l a y (1500); }
void allOff()
•
{ digitalWrite(tlPin, LOW); digitalWrite(t3Pin, L O W ); d e l a y (1 ); } void drive(int speed) { allOff(); if (speed > 0) { analogWrite(tlPin, speed); } else if (speed < 0) { analogWrite(t3Pin, > }
-speed);
137
138
30 Proyectos con A rd uino
los transistores estén activados al mismo tiempo. Si esto ocurriera, se produciría un cierto olor a que mado y algo se quem ará y “m orirá” para siempre. Antes de activar cualquier transistor, debem os desconectar la totalidad de los m ismos usando la función allO ff. Adem ás, la función allO ff incluye un ligero retardo (delay) para asegurar que los tran sistores se han desactivado correctam ente antes de encender nada. El sketch utiliza una m atriz de velocidades (speed), para controlar progresivam ente la veloci dad del disco. Esto hace que el disco gire cada vez más rápido en una dirección. Luego com enzará a girar cada vez más lento, hasta que, finalm ente, invierte la dirección para, posteriorm ente, em pezar a girar de nuevo, cada vez m ás rápido. Y así sucesi vam ente. Puede que tenga que ajustar ligeram ente la matriz para adaptarla a su motor. Las velocidades que hay que especificar en la m atriz pueden variar de un m otor a otro, por lo que, probablem ente, en su caso tam bién necesite ajustarlas.
Pongamos todo junto Cargue el sketch term inado del Proyecto 24 desde su A rduino Sketchbook y descárguelo en su placa (véase el C apítulo 1). Antes de conectar la alim entación a este proyecto preste atención y com pruebe bien el cableado. Puede com probar cada uno .de los circuitos del puente H conectando a m asa los cables de control de los pines digitales 5 y 6. Luego conecte uno de los cables a 5 V, con lo que el m otor debe com enzar a girar en un sentido. Vuelva a conectar el cable a tierra y luego conecte el otro cable a 5 V; el m otor debe com enzar a girar en sentido contrario.
PW M , pueden configurarse para que giren un deter m inado ángulo. Para ello incorporan toda la necesa ria electrónica de control, con lo que lo único que hay que proporcionarles es alim entación (que para m uchos dispositivos puede ser de 5 V), y una señal de control que podem os generar desde la placa Arduino. A lo largo de los años, la interfaz para servos se ha estandarizado. El servo debe recibir un flujo con tinuo de pulsos al m enos cada 20 m ilisegundos. El ángulo que vaya a m antener el servo viene determ i nado por la anchura del pulso. Una anchura de pulso de 1,5 m ilisegundos establecerá el servo en su punto m edio, o 90 grados. Una anchura de pulso de 1,75 m ilisegundos norm alm ente lo desplazará 180 grados, y una m enor, de 1,25 m ilisegundos, fijará un ángulo de 0 grados.
Proyecto 25 Láser servo-controlado Este proyecto (consulte la Figura 8-13) utiliza dos servomotores para dirigir un diodo láser. Verá que el láser se puede mover con bastante rapidez, por lo que podrá utilizarlo para "escribir" en paredes distantes. Atención: este es un láser de verdad. No es de gran potencia, sólo 3 mW, pero, en cualquier caso, no debe dirigir el haz del láser ni a sus ojos ni a los de otras personas, pues podría causar daños en la retina.
COMPONENTES Y EQUIPO D e scripció n
A p é n d ic e
Placa A rd u in o UNO o D uem ilanove o clon
Servomotores Los servom otores son unos pequeños y m agníficos com ponentes que se utilizan con frecuencia en los coches teledirigidos por radio para controlar la dirección, y en los aviones para controlar los alero nes. Los hay de distintos tam años, para las distintas aplicaciones, y su am plia utilización en los modelos de aficionados hace que sean relativam ente baratos. A diferencia de los m otores norm ales, estos no giran continuam ente, sino que. utilizando una señal
DI
1
D iodo láser rojo 3 m W
32
MI, M2 Servo m oto res de 9 g
65
R1
Resistencia 100 Q 0,5 W
5
P rotoshield A rd u in o (o p c io n a l) 3 Tira 6 pines 2,5 m m (o p c io n a l)
55
Tira zócalos (2 zóc.) 2,5 m m (o p c io n a l)
56
C apítulo 8
Figura 8-13
■
Proyectos de energía eléctrica
139
P royecto 25. Láser se rvo -co n tro la d o .
Hardware El circuito eléctrico del proyecto se m uestra en la Figura 8-14, siendo éste bastante sencillo. Los servos sólo tienen tres cables. En cada servo, el cable m arrón se conecta a tierra, el cable rojo a +5 V, y el naranja (control) a las salidas digitales 2 y 3. Los extrem os de los servos tienen unos conectores diseñados para ser enchufados en las tiras de pines. Puede utilizar cable rígido para conectarlos a la placa de pruebas. El diodo láser se m aneja desde D4 exactam ente igual que un LED norm al, con una resistencia de lim itación de corriente. Los servos generalm ente se sum inistran con una serie de "brazos" que se encajan en la rueda de plás tico y que se fijan m ediante un tom illo. Uno de los servos va pegado en uno de esos brazos (véase la Figura 8-15). Luego el brazo se instala en el otro servo. No coloque todavía el tornillo de sujeción, ya que necesitará ajustar el ángulo. Pegue el diodo
láser a un segundo brazo y colóquelo en el servo. Suele ser una buena idea pegar parte del cable del láser al brazo para im pedir que se produzca tensión en el cable a la salida del láser. Para ello puede am a rrarlo con un trozo de cable fijado sobre dos aguje ros del brazo, com o puede ver en la Figura 8-17. Ahora tiene que colocar el servo inferior en una caja o en algo que le sirva de apoyo. En la Figura 8 15 se puede ver cóm o se ha colocado en la caja de un antiguo proyecto. Asegúrese de entender bien el m ovim iento del servo antes de pegarlo definitiva m ente a algo. En caso de duda, espere hasta que haya instalado el softw are y pruebe el proyecto sim plem ente sujetando el servo inferior antes de pegarlo en su sitio. Una vez que esté seguro de que todo está en el lugar correcto, ajuste los tom illos de sujeción en los brazos del servo. En la Figura 8-13 puede ver cóm o hem os utili zado la placa de pruebas para fijar los distintos cables. No hay com ponentes, excepto la resistencia de la placa de pruebas.
140
30 Proyectos con A rd uino
Software
está claro que no se trata sólo de esto; tam bién que rem os disponer de la forma de indicar a nuestro pro
Por suerte para nosotros, la biblioteca Arduino
yecto las coordenadas a las que dirigir el láser.
viene acom pañada tam bién de una bib lioteca servo, por lo que todo lo que tenem os que hacer es
Para ello hacem os que se puedan enviar com an
decirle a cada servo a qué ángulo debe fijarse. Pero
dos a través del USB. Los com andos se envían en form a de letras. R. L, U y D dirigen el láser cinco grados hacia la derecha, izquierda, arriba o abajo, respectivam ente. Para m ovim ientos más finos, r, 1, u, y d desplazan el láser sólo un grado. Para hacer una pausa y perm itir que el láser deje de m overse, puede enviar el carácter - (guión). (V éase el Listado del Proyecto 25.) Hay otros tres com andos. La letra c centrará el láser de nuevo en su posición de reposo, y los com andos 1 y 0 encienden y apagan el láser, res pectivam ente.
Pongamos todo junto Cargue el sk etch term inado del Proyecto 25 desde su A rd u in o S k etch b o o k y descargúelo en su placa
Vi
Figura 8-15
(véase el C apítulo 1).
Montaje del servo y del láser.
C apítulo 8
■
P royectos de energía eléctrica
141
LISTADO DE PROYECTO 25 #include
int laserPin = 4; Servo servoV; Servo servoH;
int x = 90; int y = 90; int minX = 10; int maxX = 170; int minY = 50; int maxY = 130;
void setup() { servoH.attach(3); servoV.attach(2 ); pinMode(laserPin, O U T P U T ); Serial.b e gin(9600); }
void loop() { char ch; if (S e rial.available()) { ch = Serial-r e ad(); if (ch == / \
'0')
digitalWrite(laserPin, L O W ); / else if (ch == / \
'1')
digitalWrite(laserPin, H I G H ); \ / else if (ch == ' ) / \ d e lay(100); / else if (ch =
’c ')
l x = 90; y = 90; / ’r'
| | ch ==
'u '
TI
|| ch =
n ii £. U
else if (ch == '1* {
(continúo)
142
30 Proyectos con A rd uino
LISTADO DE PROYECTO 25 (continúa) moveLaser{c h , 1); } else if (ch == ’L'
|| ch ==
1R ' || ch =
'U'
|| ch == 'D 1)
{ moveLaser(c h , 5); } } servoH.write(x); servoV.write(y); } void moveLaser(char dir, int amount) { if ((dir == 'r ' || dir ==
’R ' ) && x > minX)
i x = x - amount; / else if ((dir == '1' / \ x = x + amount; / else if ((dir == 'u'
|| dir ==
'L ') && x < maxX)
|| dir ==
’U') && y < maxY)
¡\ y = y + amount; / else if ((dir == ’d 1 || dir == t i y = y - amount;
'D ') && x > minY)
} }
A bra el Serial M onitor e introduzca la siguiente secuencia. D ebería ver que el láser traza la letra A, com o se m uestra en la Figura 8-16: 1UUUUUU— RRRR— DDDDDD—OUUU— 1LLLL— ODDD
Montaje de una placa shieid M ontar una shieid para este proyecto no representa ningún problem a. El servo inferior se puede pegar en su sitio en uno de los bordes de la placa. Los pines de la placa se sueldan en su sitio cerca de las líneas de 5 V y G ND que recorren el centro de la shieid para que se puedan conectar fácilm ente a los pines positivo y negativo de los conectores del servo.
Los lados superior e inferior de la placa shieid se muestran en las Figuras 8-17 y 8-18.
Resumen En los capítulos anteriores hem os ido aum entando nuestros conocim ientos para entender cóm o usar luz, so n id o y d iv erso s sen so res en la placa A rduino. Tam bién hem os aprendido cóm o co n tro lar la potencia de m otores y a utilizar relés. Esto debe cubrir casi todo lo que es probable que q u e ram os hacer con nuestra placa A rduino, por lo que, en el próxim o capítulo, podem os poner todas estas cosas ju n tas para crear algunos proyectos de m ayor envergadura.
C apítulo 8
Figura 8-16
■
Figura 8-17
Escritura de la letra A con el láser.
F
w « ."y m I 1
.. « •
61 t-, i
' . rl .
o oo o o
AI
...
yl
o o •
oo o o o '
u
•
o o o o o o oo o o o o
• ■ o O
i I
•\ H
Shield servo láser.
f ¡ «. * .
>.i ) ,
i J 11n ( j n o »j ej i O ' i n i 11 o o n c - 1 ■i .•. ■i • i n n i O <¿ f) O O O O Fi i
OOr, oO•>(, <•)i
r» O O o O O t‘ » ' ji Iko O O O >• •]O 1
. . . . . . .
a o o o
Proyectos de energía eléctrica
•
i
<■) Oo ■ l
O O OO O O O o
Oí1' O o o o o • O O '■> O O O O O ' I
•
*
*• C » W m
* C' *> *•
' * «■r»•> •> «i• > «
Figura 8-18
Lado inferior de la shield servo láser.
143
C A P Í T U L O
9
Proyectos varios
E ste capítulo es una colección de proyectos que po
entrada analógica podem os medir esta resistencia cu
dem os construir. No se ilustra ningún aspecto deter
tánea y utilizar un LED y un zum bador para indicar
m inado salvo resaltar que con la placa A rduino se
una falsedad.
pueden llegar a hacer grandes y divertidos proyec
U tilizarem os un LED m ulticolor, que m ostrará rojo para indicar una m entira, verde para indicar una
tos.
verdad y azul para m ostrar que el detector de m enti
Proyecto 26
ras debe ajustarse, lo que harem os m ediante un po
Detector de mentiras
tencióm etro.
¿C óm o podría asegurarse de que sus invitados le
Hay dos tipos de zum badores piezoeléctricos.
dicen la verdad? Utilizando un detector de m entiras,
los que solo tienen un disco o transductor piezoe-
por supuesto. Este detector de m entiras (véase la Fi
léctrico y los que tam bién incluyen el oscilador elec
gura 9 - 1) utiliza un efecto que se conoce com o res
trónico para m anejarlos. En este proyecto usarem os
puesta galvánica de la piel. C uando una persona se
el prim er tipo, el que no lleva electrónica, ya que
pone nerviosa -por ejem plo, cuando dice una m en
desde la propia placa Arduino vamos a generar la fre
tira- dism inuye su resistencia cutánea. Utilizando una
cuencia necesaria.
X28922
F igura 9-1
Proyecto 26. Detector de mentiras
145
146
30 Proyectos con A rd u in o
COMPONENTES Y EQUIPO
5 V; y cuanto m ayor sea, más se acercará a G ND o cero voltios.
D escripció n
A p é n d ic e
Placa Arduino UNO o Duemilanove o clon
1
Rl-3
Resistencia 100 Q, 0,5 W
5
R4
Resistencia 470 fi, 0,5 W
14
R5
Potencióm etro lineal 100 KQ
17
DI
LED trico lo r rojo-verde-azul
SI
El piezozum bador, a pesar del alto nivel de so nido que es capaz de generar, tiene realm ente un con sum o de corriente increíblem ente bajo y se puede excitar directam ente desde un pin digital de la A r duino. Este proyecto utiliza el m ism o LED m ulticolor que usam os en el Proyecto 14. En este caso, sin em
(ánodo com ún)
31
Disco piezoeléctrico (sin circuito oscilador)
67
bargo, no vam os a m ezclar colores diferentes sino que, sim plem ente, vam os a encender los LED s de uno en uno para m ostrar rojo, verde o azul. La Figura 9-2 m uestra el esquem a electrónico del
Hardware
proyecto y la Figura 9-3 el diseño del circuito sobre
La resistencia cutánea de una persona se puede medir
la placa de pruebas.
utilizando la resistencia de su piel com o una de las
El potencióm etro se utiliza para ajustar el punto
resistencias de un divisor de tensión y una resisten
de consigna de la resistencia, y los term inales de m e
cia lija com o la otra. C uanto m enor sea su resisten
dición los hem os construido con dos chinchetas m e
cia, más llevarem os la entrada analógica 0 hacia los
tálicas que se han colocado en la placa de pruebas.
Figura 9-2
Esquema electrónico del Proyecto 26.
C apítulo 9
ranumun
Iiflg7* OTQOying
Du**:iar.ov**
,
» # W W ü « C O O
■
Proyectos varios
3 6 0 6 )0 0 0 O „COOCO
c 5 | o o c í O c o o o .l c o o o o o o o o o o C O C O C C C O C O G C iflOiOOOoooooog
oooocococoocm OOOO^OOOC
p io c c c c o o o c o l
147
lo o o o o o o o o o o oooooooooo 1 C 0 C 0 0 0 0 0 C 0 ■ |oooooccco cocooooooo
•
000000000 ocooooooo ocooocooo ocooooooo oooooooco
cjooc o c o c o o c W o üocccoooc o o c c rs o o o o c o o o c o o c o to *
oococcooc ooccW o o o o c o o o c OOOOOf
(OOOO O O O O O « O B O O O O O O O O O O O » -«OOOO 0 * 0 0 0 4 0 0 0 0 OíWiOO O O O O O lOOOO O O O O O o o m o o o o o o o o o o o * — H o o o o O O O O O ¿ O O O O O O C O O O O O O O
5V GND
Diseño del circuito del Proyecto 26 sobre la placa de pruebas.
Software
LISTADO DE PROYECTO 26
El program a de este proyecto (Listado del Proyecto 26) sólo tiene que com parar el voltaje en AO y A l . Si son aproxim adam ente iguales, el LED será de color verde. Si el voltaje del term inal de m edición (AO) es
int redPin = 9; int greenPin = 10; int bluePin = 11; int buzzerPin = 7;
significativam ente superior al de A l . el potencióm e tro indicará un descenso en la resistencia cutánea, el
int potPin = 1;
LED cam biará a rojo y sonará el zum bador. Por otro
int sensorPin = 0;
lado, si AO es significativam ente inferior a A l, el LED se tornará de color azul, lo que indica un au mento de la resistencia cutánea.
long red = OxFFOOOO; long green = OxOOFFOO; long blue = 0x000080;
El zum bador requiere una frecuencia de alrede dor de 5 KHz o 5000 hercios por segundo para exci
int band = 10;
tarlo. Esto lo hacem os con un sim ple bucle for loop
// ajuste de sensibilidad
con com andos para encender y apagar el pin ade cuado con retardo entre ellos.
void setup()
{ p inMode(potPin, INPUT);
Pongamos todo junto
pinMode(sensorPin,
INPUT);
Cargue el esquem a term inado del Proyecto 26 desde
pinMode(redPin, O U TPUT);
su Arduino Sketchbook y descárguelo en su placa
p inMode(greenPin, OU T P U T );
(véase el C apítulo 1).
pinMode(bluePin, O U T P U T ); pinMode(buzzerPin, OUTPUT);
} void loop()
{ (continúa)
148
30 Proyectos con A rd u in o
LISTADO DE PROYECTO 26 (continúa)
Para probar el detector de m entiras, necesita poder probarlo con alguien, ya que necesitará una
int gsr = analogRead(sensorPin); int pot = analogRead(potPin); if (gsr > pot + band)
{
m ano libre para ajustar el mando. Prim ero, haga que la persona coloque dos dedos adyacentes encim a de las chinchetas m etálicas. A
setColor(red);
continuación, gire el m ando del potencióm etro hasta
beep();
que el LED se vuelva verde. Ahora puede interrogar a su víctim a. Si el LED
} else if (gsr < pot - band)
cam bia a rojo o azul, debe ajustar de nuevo el mando
{
hasta que cam bie de nuevo a verde y luego continuar setColor(blue);
el interrogatorio.
} else
Proyecto 27
{ setColor(green);
Cerradura magnética
> >
Este proyecto (Figura 9-4) se basa en el Proyecto 10, pero lo am plía para que cuando se introduzca el có
void setColor(long rgb)
digo correcto, encienda un LED verde, adem ás de activar un pequeño solenoide. El sketch también se
{ int red = rgb »
ha m ejorado para que el código secreto pueda ser
16;
int green = (rgb »
8) & OxFF;
cam biado sin tener que m odificar e instalar una
int blue = rgb & OxFF;
nueva secuencia de com andos. El código secreto se
analogWrite(redPin, 255 - red);
alm acena en la m em oria E E P R O M , así que si se
analogWrite(greenPin, 255 - green); analogWrite(bluePin, 255 - blue);
desconecta de la alim entación, éste no se perderá.
>
COMPONENTES Y EQUIPO void beep() D e scripció n
{ // 5 Khz para l/5th de segundo
A p é n d ic e
Placa A rd u in o UNO o
for (int i = 0; i < 1000; i++)
D uem ilanove o clon
{
1
digitalWrite(buzzerPin, HIGH);
DI
LED rojo 5 m m
23
delayMicroseconds(100);
D2
LED verde 5 m m
25
digitalWrite(buzzerPin, LOW);
R1- 3
Resistencia 270 Q, 0,5 W
K1
Teclado m atricial 4 x 3
54
Tira pines de 2,5 m m de paso
55
BC548
40
Solenoide 5V (< 100 m A )
66
1N 4004
38
6
delayMicroseconds(100);
} }
TI
D3
C apítulo 9
Figura 9 -4
■
P royectos varios
149
P royecto 27. Cerradura m agnética.
C uando esté alim entado, el so lenoide atraerá
Hardware
fuertem ente la pieza metálica del centro, colocándola
El esquem a electrónico (véase la Figura 9-5) y el d i
en su sitio. C uando se quita la alim entación, ésta
seño de la placa de pruebas (véase la Figura 9-6) son
vuelve a su sitio librem ente.
prácticam ente los m ism os que los del Proyecto 10, pero con algunos com ponentes adicionales.
Figura 9-5
Esquema electrónico del Proyecto 27.
150
30 Proyectos con A rd uino
ooooo ooooo
5V GND
OOCOOOCOGO
000 o o c c o o o c c o ooc ooco oo occo oooooccooocco ooo O O O O O O O C O O opooooooooooooooooooooooGo
ocoooccooocococoooocooooco 00ococ oooooooooooo0000000c o c o o o o c o o o o o c o o o 0 0 0 0 0 0 0 O0 0 oocoooooooooóoooocoooooooo
■ dt.IIU lrfl.-g~Diseño
OOOOO
OOOOO
OOOOO
OOOOO
5V
OOOOO
OOOOO
OOOOO
OOOOO
GND
del c irc u ito del P royecto 27 sobre la placa de pruebas.
Al igual que los relés, el solenoide es una carga inductiva y, por tanto, susceptible de generar una
más potente, sería m ejor utilizar un transistor BD139.
fuerza con traelectrom 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 directam ente 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.
sum a más de 100 m A , que es la corriente m áxim a del colector del transistor.
Software
Estam os utilizando un solenoide de muy baja po
El softw are de este proyecto es, com o era de espe
tencia, y esto no sería suficiente para m antener a los
rar, sim ilar al del Proyecto 10 (véase el Listado del
intrusos fuera de nuestro cuarto. Si va a utilizar uno
Proyecto 27).
LISTADO DEL PROYECTO 27 #include #include char* secretCode = "1234"; int position = 0; boolean locked = true; const byte rows = 4; const byte cois = 3; char keys[rows][cois] = { {'1V2V3'}, {'4','5','6'},
{ ' 7 ' , ' 8 ' , ' 9' } , }; byte rowPins[row s ] = {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(k e y s ), rowPins, colPins, rows, cois); int redPin = 9; int greenPin = 8; int solenoidPin = 10; void setup()
{ pinMode(redPin, O U TPUT); pinMode(greenPin, O U TPUT); 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, H I G H ); digitalWrite(greenPin, L O W ); digitalWrite(solenoidPin, H I G H );
} else
(continúa)
152
30 Proyectos con A rd uino
LISTADO DE PROYECTO 27 (continúa) { digitalWrite(redPin, L O W ); digitalWrite(greenPin, H I G H ); digitalWrite(solenoidPin, L O W );
> } void getNewCode()
{ flash(); for (int i = 0; i < 4; i++ )
{ char key; key = k e ypad.getKey(); while (key == 0)
{ key = k e ypad.getKey();
} flash(); secretCode[i ] = k e y ;
> saveCode(); flash();flash();
> void loadCode()
{ if (EEPROM.read(0) == 1)
{ secretCode[0] = E EPROM.rea d (1); secretCode[1] = E EPROM.rea d (2); secretCode[ 2 ] = E EPROM.r e a d (3); secretCode[3] = EE P R O M .rea d (4);
} } void saveCode()
{ EEPROM.write(1, secretCode[0]); EEPROM.write(2, secretCode[1]); E EPROM.w r i t e (3, secretCode[2]); EEPROM.w r i t e (4, secretCode[3]); EEPROM.w r i t e (0, 1);
> void flash()
{ digitalWrite(redPin, H I G H ); digitalWrite(greenPin,
HIGH);
d e l a y (500); digitalWrite(redPin, L O W ); digitalWrite(greenPin, LOW);
}
Capítulo 9
Proyectos varios
153
Lam entablem ente, si olvida su código secreto, en cender y apagar la alim entación del proyecto no lo reiniciará a 1234. En su lugar, tendrá que convertir en com entario (//) la línea:
C om o ahora podem os cam biar el código secreto, hem os cam biado la función loop para que si se pulsa la tecla * m ientras la cerradura está desbloqueada, las siguientes cuatro teclas pulsadas se conviertan en el nuevo código. Puesto que cada carácter tiene exactam ente un byte de longitud, el código se puede alm acenar di rectam ente en la m em oria E EPR O M . Utilizam os el prim er byte de la E EPR O M para indicar si se ha fi jad o el código. Si no se ha definido, el código por defecto será 1234. Una vez que se ha configurado el código, al prim er byte de la E EPRO M se le dará el valor de 1.
loadCode();
de la función setup , para que aparezca com o se m uestra aquí: // loadCode();
Ahora, reinstale el sketch y el código secreto vol verá a ser 1234. Recuerde cam biar de nuevo su des pués de ajustar el código a algo que pueda recordar.
Pongamos todo junto C argue el esquem a term inado del Proyecto 27 desde su A rduino Sketchbook y descárguelo en su placa (véase el C apítulo 1). Podem os com probar que todo funciona conec tando la alim entación e introduciendo el código 1234, en cuyo m om ento el LED verde debe encen derse y liberarse el solenoide. Podem os cam biar el código a uno no tan predecible pulsando la tecla * y, a continuación, introduciendo cuatro dígitos para el nuevo código. La cerradura se m antendrá abierta hasta que pulsem os la tecla #.
F.reeduino
■
Proyecto 28 Mando a distancia por infra rrojos Este proyecto (véase la Figura 9-7) permite controlar directamente desde el ordenador cualquier aparato del hogar que se maneje con un mando a distancia por in frarrojos. Con él, se puede grabar un mensaje de infra rrojos desde algún mando a distancia existente y luego reproducirlo desde el ordenador.
«0 • «
* •*
■ « ■ »« » n (i«i
(«II «
• »**
■ a • L n W» « t> k ir ■
i « i i i
m«
II H n ir n K a n
» «i ii ii w u «i r « » n « i ! « »* it » * n i o
iliKiiiiMxiriiicin f t r r r u **r*m « n > i i t
i i i i i i d
i i i i t
i r
M
r
^ i r i i i i t i r c i f i t o
i • i i i i i i l M i i i i > i i I ) f i r ( r > r l t l f pi n n i j ..................... t . r » » » » r i i r » . r r l r f f « n # , « l l i M i i i i i u i i M M r i t i r t r r r r M i i a f i l f t ,
’ Sr m -»Í -» mmm■■ ■.m *«»■.„, ,-n . ■* .. i
™ m
Figura 9-7
S>i.«»■
« «r» * * ;* * ■ • *P“ « ¿'ir*'*'® u
* i f « »
l
i
m
P royecto 28. M ando a distancia p o r infrarrojos.
N o t a d e l r e v i s o r : Puede a p re c ia rs e que no hay n in g u n a c o n tra d ic c ió n con e l esquem a de la F ig u ra 9.8, pues au nq ue en
éste la resiste ncia R I va con ectad a a l p in 3 y a q u í se ve con ectad a a m asa, a l e sta r en se rie RJ y e l L E D , da ig u a l en qué ord en se conecten, siem pre que la p a ta m ás la rg a d e l L E D (á n o d o o + ) quede con ectad a a l p o s itiv o (D 3 ).
154
30 Proyectos con A rd u in o
U tilizarem os la m em oria EEPR O M para alm a
El elem ento transm isor de IR es un LED infra
cenar los códigos de control rem oto para que no se
rrojo. Estos funcionan igual que un LED norm al,
pierdan cuando se desconecte la placa Arduino.
pero en el extrem o infrarrojo invisible del espectro. En algunos dispositivos se puede ver un ligero brillo rojo cuando se encienden.
COMPONENTES Y EQUIPO
La Figura 9-9 m uestra el diseño del circuito del D e scripció n
A p é n d ice
proyecto sobre la placa de pruebas.
Placa A rd u in o UNO o D uem ilanove o clon
1
Software
R1
Resistencia 100 Q, 0,5 W
5
Ken Shirriffha creado una biblioteca que puede uti
DI
Diodo emisor Infrarrojo 9 4 0 nm
26
lizar para hacer casi cualquier cosa que desee hacer
IC1
Receptor de Infrarrojo de 940 nm
37
con un IR remoto. N osotros, en lugar de reinventar la rueda, tam bién vamos a usar esta biblioteca. En el C apítulo 5 exam inam os por prim era vez
Hardware
cóm o instalar una biblioteca. Para hacer uso de esta
El receptor de m ando a distancia por infrarrojos (IR)
biblioteca, primero tenemos que descargarla. Para las
es un pequeño m ódulo que com bina un fotodiodo
placas A rduino U N O . extraiga la biblioteca m odifi
infrarrojo con el filtrado, acondicionado y am plifi
cada de:
cación necesarios para producir una salida digital a
http://w w w .arduinoevilgenius.com /new -dow nloads.
partir del m ensaje de IR. Esta salida se pasa al pin
En el caso de las placas anteriores, puede hacerlo
digital 9. El esquem a electrónico (véase la Figura 9
desde http://arcfn.com /2009/08/m ulti-protocol-in-
8) m uestra lo fácil que es utilizar este chip, con sólo
frared-rem ote-library.htm l.
tres pines, G N D , +V y la señal de salida.
D escargue el archivo IR R em ote.zip y descom prímalo. Si está utilizando W indows, haga clic con el
5V
R1
100Q D3
IC1
1
D9 Arduino UNO Duemilanove D1 Rojo
GND
Figura 9-8
Esquema electrónico del Proyecto 28.
C apítulo 9
'
n ú f e g S i i í í » *
oooo# oqqm
T J I T
e e e B l * 1‘ ¿ i , I I O* :;.;|ina 6-B ti L B i 1(1 m aoT Sg'> OFflduino , ! ; TiSQiünnn us» Dumi«>v«‘
*- j r l- - -ti BScu .a
m
loooo
■
Proyectos varios
ooot
' ■•oooo o o o o o
ooooo
ooobfl
155
O O G O t 5V o o o ® ¿ GND
ééooc
0QC;|e1 o o o c c o o c c o c c o o o c o o o o c c o o o o o d
oco .o c o o o o o o o o o o o o c c c o o c c c c oooooooococococcocoooocoocccccoooo oooo oooooooooo oooooooooo oooóoooooc n n o n o ñ o c o o o o c O O O O O O O O O O O O O O Q m m FJOOO
----- 'W*
1000000000o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o 1000000000 o o o o o o o o o o c c o o o o o o c c o o o c o c o o o c
icoooooooo oooooooooo oooooooooo oooooooooo iooooooooo oooooooooo oooooooooo ocococoooc IOOOOOOOOC o o o o o o o o o o o o o o o o o o o o o o o o 5 o o o o o IOOOO ■C C O
-
ooooo .
-
- ■.
ooooo b
- .
OOOO» :
:
'
« o o o o
■
o o oo o
OOOOO
OOOOO
OOOOO
•.
.
•
.
•
.
■
■ ■
5V GN D
Diseño del circ u ito del P royecto 28 sobre la placa de pruebas.
botón secundario y seleccione Extraer todo y, a con
de protocolo de los distintos fabricantes. N uestro
tinuación, guarde el archivo en C:\Archivos de pro-
sketch utiliza solam ente una pequeña parte de la bi
grama\Arduino\Arduino-0017\hard\vare\l¡braries.
blioteca, referida a la captura y envío de im pulsos de
En Linux, busque el directorio de instalación de A r
datos sin tratar. (C onsulte el Listado del Proyecto
duino y copie la carpeta en hardw are/libraries.
28.)
En un M ac, no ponga la nueva biblioteca en la
Los mandos a distancia por infrarrojos envían una
instalación de A rduino. En su lugar, cree una carpeta
serie de im pulsos a una frecuencia de entre 36 y 40
llamada libraries en D ocum entos/A rduino (Figura
KHz. La Figura 9-10 m uestra el trazado de los m is
5-8) y coloque allí la carpeta libraries com pleta.
mos en el osciloscopio.
Una vez que hayam os instalado esta biblioteca en
Un valor de bit de 1 se representa por un im pulso
nuestro directorio A rduino, podrem os usarla con
de onda cuadrada de 36 a 40 KHz y un O por una
cualquiera de los program as que escribam os.
pausa en la que no se envía nada.
La biblioteca de Ken es, básicam ente, la últim a palabra en decodifieaeión y envío de com andos IR . Su intención es corresponder a las distintas norm as
156
30 Proyectos con A rd uino
LISTADO DE PROYECTO 28 #include #include
int irRxPin = 9;
int f = 38; // 40, 36, 38
IRrecv irrecv(irRxPin); IRsend irsend;
decode_results results; int codeLength = 0; int currentCode = 0;
void s e tup() { Serial.begin(9600); Serial.println("0-9 para configurar código memoria, s — para enviar"); irrecv.enableIRIn(); setCodeMemory(0); }
void loop() { if (Serial .available()) { char ch = Serial.read(); if (ch >= '0' && ch <=-'9') { setCodeMemory(ch - ’0'); > else if (ch ==
's ’)
{ sendIR(); } > if (irrecv.d ecode(&results)) { storeCode(); irrecv.resume (); > >
void setCodeMemory(int x) { currentCode = x; Serial.print("Establecer código memoria actual a: ");
(continúa)
C apítulo 9
■
Proyectos varios
LISTADO DE PROYECTO 28 (continúa) Serial.println(currentCode); irrecv.resume();
> void storeCode()
{ // escribe código en EEPROM, primer byte es la longitud int startlndex = currentCode * (RAWBUF + 1 ) ; int len = results.rawlen - 1; EEPROM.write(startIndex,
(unsigned byte)len);
for (int i = 0; i < len; i++)
{ if (results.rawbuf[i ] > 255)
{ EEPROM.write(startlndex + i + 1, 255);
} else
{ EEPROM.write(startlndex + i + 1, r esults.rawbuf[i ]);
} } Serial.p r i n t ("Saved c o d e , length: "); Serial.println(l e n );
void sendIR()
{ // construir memoria temporal datos guardados en EEPROM y enviarlos int startlndex currentCode * (RAWBUF + 1); int len = EEPROM.read(startlndex); unsigned int c o d e [R A W B U F ]; for (int i = 0; i < len; i++)
{ int pulseLen = EEPROM.read(startlndex + i + 2); if (i % 2)
{ co d e [i ] = pulseLen * USECPERTICK + MARK_EXCESS;
} else
{ co d e [i ] = pulseLen * USECPERTICK - MARK_EXCESS;
} } irsend.sendRaw(code,
len, f);
Serial.p r i n t ("Longitud de código enviado: " ) ; Serial.println(l e n );
157
158
30 P royectos con A rd uino
La biblioteca IR R em ote requiere que el LED IR
Pongamos todo junto
se maneje desde el pin digital 3. Por lo tanto, solo es
Cargue el esquem a term inado del Proyecto 28 desde
pecificam os el pin de recepción en la parte superior
su Arduino Sketchbook y descárguelo en su placa
del sketch (irR xPin).
(véase el C apítulo 1).
En la función setup, com enzam os las com unica
Para probar el proyecto, busque un m ando a dis
ciones serie y escribim os las instrucciones para usar
tancia y el equipo que se controla con dicho m ando.
el proyecto de nuevo en la Serial C onsolé, que es
A continuación, ponga en m archa el proyecto.
desde donde lo vam os a controlar. Tam bién configu ramos la m em oria del código actual en la mem oria 0.
Abra Serial M onitor; debería recibir el siguiente m ensaje de saludo:
La función loop sigue el esquem a habitual de ve rificar cualquier entrada a través del puerto USB. Si
0-9 para configurar código memoria, s —
se trata de un dígito entre 0 y 9. convierte la m em o
para enviar
ria correspondiente en la m em oria actual. Si se re
Establecer código memoria actual a: 0
cibe un carácter "s" de Serial M onitor, enviará el m ensaje que haya en la m em oria de m ensajes actual.
De form a predeterm inada, cualquier m ensaje que
La función com prueba entonces si se ha recibido
capturem os será grabado en la m em oria 0. A sí es que
alguna señal IR; si es así, la escribe en la EEPRO M
dirija el m ando a distancia al sensor de nuestro m on
utilizando la función storeC ode. Alm acena la longi
taje y pulse un botón (encender un reproductor de
tud del código en el prim er byte y, a continuación, el
DVD o abrir la bandeja del disco pueden ser algunas
núm ero de ticks de 50 m icrosegundos por cada
de las im presionantes acciones que podría hacer).
pulso en bytes que se produce posteriorm ente.
D ebería ver un m ensaje com o éste:
RAW BUF es Lina constante definida en la biblioteca com o la longitud m áxim a del m ensaje.
C ódigo guardado, longitud: 67
Observe que, com o parte del proceso de enviar el código de la función sendIR , se crea una matriz de
A hora dirija el LED IR de nuestro m ontaje al
núm eros enteros que representan las duraciones de
DVD y teclee s en Serial M onitor. En la pantalla del
los pulsos a partir de los bytes alm acenados; las du
ordenador debería recibir un mensaje corno éste:
raciones de los pulsos están, por tanto, en m icrose gundos, en lugar de en ticks, y se ajustan m ediante
Longitud código enviado: 67
M A R K _EX C ESS para com pensar el hardware que lee las señales IR. Esto tiende a hacer las m arcas un
Y lo que es más im portante aún ¡el DVD debe
poco más largas de lo que deberían ser y los espa
obedecer a la orden que le ha m andado la placa A r
cios un poco más cortos.
duino!
A sim ism o, en storeC ode y en sen d IR , cuando
Tenga en cuenta que el LED infrarrojo de nues
accedem os a la m em oria E E PR O M , utilizam os una
tra placa de pruebas puede que no tenga m ucha po
interesante técnica que nos perm ite usarla com o si
tencia, por lo que si no funciona, pruebe a acercarlo
fuera una matriz para las m em orias de m ensajes. El
más al sensor de infrarrojos del aparato a controlar.
punto de inicio para grabar o leer los datos de la m e
Ahora puede cam biar la posición de m em oria in
m oria EEPRO M se calcula m ultiplicando current
troduciendo otro dígito en Serial M onitor y g ra
C ode por la duración de cada código (m ás el byte
bando distintos com andos del IR. Y tenga en cuenta
que dice la longitud que tiene).
que no hay ninguna razón para que los com andos tengan que ser del m ism o aparato.
C apítulo 9
Proyecto 29
■
Proyectos varios
w
Reloj Lilypad
159
:l i l i
La placa Lilypad de Arduino funciona de forma muy parecido a la placa UNO o a la D uem ilanove, pero en lugar de una aburrida placa rectangular, Lilypad es circular y está diseñada para que se cosa en la ropa usando hilo conductor. C ualquiera apreciará su be lleza cuando la vea. Por eso este proyecto se ha inte grado en un portafotos, para m ostrar la belleza natural de la electrónica (véase la Figura 9-11). Para ajustar el tiem po se ha utilizado un interruptor m agnético de tipo Reed. Dado que la placa Lilypad no lleva conectores de entrada y salida, las conexiones a ésta hay que hacerla m ediante un soldador.
COMPONENTES Y EQUIPO D e scripció n
A p é n d ic e Proyecto 29. Reloj binario con Lilypad.
Placa A rd u in o Lilypad y p ro g ra m a d o r USB
2
R1-16
Resistencia 100 Q 0,5 W
5
D l-4
LED rojo 5 mm
En nuestro caso, en lugar de un interruptor co rriente, vam os a utilizar un interruptor de contac
27
tos Reed para que todo el proyecto se pueda m ontar
D5-10 LED azul 5 mm
29
en un m arco de fotos, tras un cristal. La hora podre
D11-16 LED verde 5 m m
28
mos ajustarla acercando un imán al interruptor.
R17
Resistencia 100 K 0 , 0,5 W
13
SI
In te rru p to r de co n ta cto s Reed
9
Marco p o rta fo to s 13 x 18 cm
70
Fuente a lim en ta ció n 5 V
71
La Figura 9-12 m uestra el esquem a electrónico del proyecto. Cada LED tiene una resistencia soldada en la pata negativa, que es la más corta. El term inal positivo del LED se suelda luego al term inal de la Arduino Lilypad y el cable de la resistencia se pasa por de bajo de la placa, donde se conecta al resto de los ca
Hardware En este proyecto contam os con un LED y una resis tencia en serie conectada a casi todas las conexiones de la Lilypad. El interruptor m agnético Reed es un pequeño com ponente muy útil que consiste sim plem ente en un interruptor con dos contactos que se encuentran en u n a e n v o ltu ra de v id rio se lla d a . C u an d o se ap ro x im a un im án al in terru p to r, los co n tacto s se atraen en tre sí, cerran d o el m ism o.
bles de las resistencias. La Figura 9-13 m uestra un prim er plano del LED y de la resistencia, y el conexionado de los term ina les bajo la placa se m uestra en la Figura 9-14. Ob serve el disco de papel grueso que aísla la parte de atrás de la placa de los term inales de las resistencias soldadas.
30 Proyectos con A rd u in o
ioon
160
F igura 9-12
Esquema e le ctró n ico del P royecto 29.
Figura 9-13
Prim er plano de LED co n e cta d o a una resistencia.
Figura 9-14
Lado inferior de la placa Lilypad.
C apítulo 9
■
Proyectos varios
En este montaje vamos a utilizar una fuente de ali mentación de 5 V, ya que cuando todos los LEDs están
LISTADO DE PROYECTO 29
encendidos se utiliza una cantidad significativa de elec
#include
161
tricidad y las pilas no durarían mucho tiempo. Los ca bles de alim entación salen por uno de los lados del
int hourLEDs[] = {1, 2, 3, 4}; // least significant bit first
portafotos, donde se sueldan a un conector. Para el ejemplo que hemos presentado aquí, el autor utilizó com o fuente de alimentación un cargador de te
int minuteLEDs[] = (10, 9, 8, 7, 6, 5}; int secondLEDs[] = {17,
léfono móvil. Asegúrese de que cualquier fuente de ali m entación que vaya a usar proporcione 5 V y, al
int loopLEDs[] = {17,
menos, una corriente de 500 mA. Puede utilizar un polímetro para comprobar la polaridad de la fuente de ali
16, 15, 14, 13, 12,
10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
mentación.
int switchPin = 18;
Software
void setup()
Este es otro p ro y ecto en el cual hacem os uso de una b ib lio tec a. E sta b ib lio teca facilita la m an ip u
{ for (int i = 0; i < 4; i++)
{
lación de la hora y se puede d esc arg a r desde
pinMode(hourLEDs[i ], O U T P U T );
w w w .ard u in o.cc/playground/C ode/T im e. Descargue el archivo T im e^ip y descomprímalo.
} for (int i = 0; i < 6; i++)
Si está utilizando W indows, haga clic con el botón
{
secundario y seleccione Extraer todo y, a continua
p inMode(minuteLEDs[i ], O UTPUT);
ción, guarde el archivo en C:\Archivos de pro-
>
gram a\Arduino\Arduino-0017\hard ware\libraries. En Linux, busque el directorio de instalación de
for (int i = 0; i < 6; i++)
{
Arduino y copie la carpeta en hardware/libraries. En un M ac, no ponga la nueva biblioteca en la ins
pinMode(secondLEDs[i ], O UTPUT);
} setTime (0);
talación de Arduino. En su lugar, cree una carpeta lla mada libraries en Docum entos/Arduino (Figura
16, 15, 14, 13,
1 2 );
}
5-8) y coloque allí la carpeta libraries completa. void loop()
Una vez que hayamos instalado esta biblioteca en nuestro directorio Arduino, podremos usarla con cual quiera de los programas que escribamos. (Consulte el Listado del Proyecto 29.) Para hacer referencia a los diferentes conjuntos de
{ if (digitalRead(switchPin))
{ adjustTime(1);
}
LEDs vamos a utilizar matrices (arrays). Éstas se uti lizan para simplificar la instalación y también en la
else if (minute() == 0 && second()
función setOutput. Esta función establece los valores
{
== 0 )
s pi n (h o u r ());
binarios de la matriz de LEDs, es decir, sirve para mostrar un valor binario. La función también recibe argumentos de la longitud de esa matriz y el valor que debe escribir en ella. Esto se utiliza en la función loop
} updateDisplay(); d e l a y (1);
para establecer sucesivamente los LEDs para horas, minutos y segundos. Cuando se pasa una matriz a una función como ésta, debe prefijar el argumento en la definición de función con un *.
(continúa)
162
30 Proyectos con A rd uino
LISTADO DE PROYECTO 29 (continúa)
Una característica adicional de este reloj es que cada hora en punto gira los L ED . ilum inándolos
void updateDisplay()
todos de uno en uno. A sí, a las 6 en punto, por ejem
{
plo, girará seis veces antes de continuar funcionando timejt t = n o w ( ); setOutput(hourLEDs,
norm alm ente.
4,
C uando se activa el contacto R eed se está lla
hourFormat12(t )); setOutput(minuteLEDs, 6, m i n u t e (t ));
m ando a la función adjustT im e con un argum ento
setOutput(secondLEDs, 6 , second(t ));
de 1 segundo. Dado que la función se encuentra en la
}
función loop con un m ilisegundo de retardo, los se gundos van a pasar rápidam ente.
void setOutput(int *ledArray,
int num-
L E D s , int v a l u é )
Pongamos todo junto C arsue el sketch term inado del Provecto 29 desde
{ for (int i = 0; i < numLEDs; i++)
su Arduino Sketchbook y descárguelo en su placa.
{
En una Lilvpad esto se hace de una m anera un poco
digitalWrite(ledArray[i ],
diferente a lo que estam os acostum brados. Antes de
bitRead(v a l u é , i ));
realizar la descarga, tendrá que seleccionar en el soft
}
ware A rduino un tipo de placa y un puerto serie di
}
ferentes. M onte el proyecto, pero pruébelo conectado al
void spin(int count)
program ador USB antes de colocarlo en el marco de
{
fotos. for (int i = 0; i < count; i++)
{
Intente escoger un portafotos que tenga suficiente hueco para que los com ponentes puedan caber entre
for (int j = 0; j < 16; j++)
el cartón trasero y el cristal.
{ digitalWrite(loopLEDs[j ], HIGH);
} }
etiquetas para los LED para hacer más fácil la lec
delay(50);
tura de la hora. En w w w .arduinoevilgenius.com
digitalWrite(loopLEDs[j ],
puede encontrar un diseño adecuado.
LOW);
}
Si lo desea, puede diseñar una hoja de papel con
Para leer la hora del reloj, se m ira cada sección (horas, m inutos y segundos) una tras otra y se agre gan los valores próxim os a los LED que se iluminan. A sí, si se encienden los LED correspondientes a la hora próxim os a 8 y 2, entonces la hora son las 10. A continuación, haga lo m ismo con los m inutos y se gundos.
C apítulo 9
Proyecto 30 Temporizador de cuenta atrás Ningún libro de proyectos que se precie debe term i nar sin un com pleto tem porizador de cuenta atrás. al más puro estilo Bond. con una m araña de cables de
■
Proyectos varios
163
Y para que la sonoridad sea la óptim a, el zum ba dor piezoeléctrico que vamos a utilizar es del tipo de los que traen la electrónica integrada, con lo que todo lo que tendrem os que hacer para que suene es ali m entarlo con 5 V. En cualquier caso, tenga cuidado de conectarlo con la polaridad correcta.
colores incluido (ver la Figura 9-15). Este tem pori zador también podríam os utilizarlo com o tem pori
Hardware
zador de cocina para huevos, p o rq u e... ¡no hay
El proyecto es similar al Proyecto 15, aunque le
nada m ás desagradable que un huevo pasado por agua dem asiado cocido!
COMPONENTES Y EQUIPO D escripció n
A p é n d ic e
Placa A rd u in o UNO o Duem ilanove o clon D1-4
1
Display LED 7 segm 2 díg.
hem os añadido el display de siete segm entos y los transistores asociados. También tenem os un codifi cador giratorio que utilizarem os para establecer la hora desde la que em pezarem os la cuenta atrás. Ya hem os utilizado antes am bos com ponentes; para ob tener más inform ación sobre los codificadores gira torios. véase el C apítulo 6. El esquem a electrónico del proyecto se m uestra en la Figura 9-16 y el diseño de la placa de prue bas, en la Figura 9-17.
(á n o d o co m ú n)
33
R1-3
Resistencia 100 KQ 0,5 W
13
Software
R4-7
Resistencia 1 KQ 0,5 W
7
Fundam entalm ente, el sketch de este proyecto (Lis tado del Proyecto 30) se ocupa de m antener el dis play actualizado y de crear la ilusión de que los cuatro displays se encienden al m ism o tiem po cuando, en realidad, en cada m om ento sólo habrá en cendido una de ellos. La form a de llevar esto a cabo ya lo describim os en el Proyecto 15.
R8-15 Resistencia 100 Q 0,5 W T1-4
5
BC307
39
C o d ifica d o r g ira to rio
57
Z u m b a d o r P iezoeléctrico (con ele ctrón ica integ ra da )
68
164
30 Proyectos con A rd uino
Figura 9-16
Esquema e le ctró n ico del P royecto 30.
©G' I I C
tr o tj c c
O
b c Ce & T O ^ c
> >
O ñ o c o * © 0 011 o
F igura 9-17
Placa A rd u in o a lim entada con el LED e ncendido.
C apítulo 9
■
Proyectos varios
165
LISTADO DE PROYECTO 30 #include int segmentPins[] = {3, 2, 19, 16, 18, 4, 5, 17}; int displayPins[] = {14, 7, 15, 6}; int times(] = {5, 10, 15, 20, 30, 45, 100, 130, 200, 230, 300, 400, 500, 600, 700, 800, 900,
1000, 1500, 2000, 3000};
int numTimes = 19; byte selectedTimelndex; int timerMinute; int timerSecond; int buzzerPin = 11; int aPin = 8; int bPin = 10; int buttonPin = 9; boolean stopped = true;
byte digits[10 ] [8 ] = { II {
a
b
c
d
e
f
g
.
1,
1,
1,
1,
i,
1,
o,
0},
// 0
1,
// 1
{ 0, {
1,
1,
{
1,
1,
0, o, o, o, 0}, 0, 1 i, o, i, 0}, o, o, i, 0}, r 1,
{
0 ,
1,
I ,
{
1,
0,
1,
{
1,
0,
1,
{
1,
1, 1,
” /
{
1,
1/ 1,
r
{
1,
1, 1,
1,
1,
1,
i, 0}, i, 0}, i, 0 } ,
/ /
6
o,
o,
o,
0 } ,
/ /
7
1,
1,
i,
0 } ,
// 8
o,
1,
i,
ó}
^ / o,
1,
o,
1,
t r
// 2 // 3 // 4 // 5
// 9
}; void setup()
{ for (int i=0; i < 8; i++)
{ pinMode(segmentPins[i ], O U T P U T );
> for (int i=0; i < 4; i++)
{ pinMode(displayPins[i ], O U T P U T );
} pinMode(buzzerPin, O U T P U T ); pinMode(buttonPin, INPUT); pinMode(aPin, INPUT); pinMode(bP i n , INPUT); selectedTimelndex = EEPROM.read(0); timerMinute = times[selectedTimelndex]
/ 100;
timerSecond = times[selectedTimelndex] % 100; (continúa)
166
30 Proyectos con A rd uino
LISTADO DE PROYECTO (continúa)
void loop()
{ if (digitalRead(buttonPin))
{ stopped = ! stopped; digitalWrite(buzzerPin, LOW); while (digitalRead(buttonPin)) {}; E EPROM.w r i t e (0, selectedTimelndex);
> updateDisplay();
void updateDisplay() // mmss
{ int minsecs = timerMinute * 100 + timerSecond; int v = minsecs; for (int i = 0; i < 4; i ++)
{ int digit = v % 10; setDigit(i); setSegments(d i g i t ); v = v / 10; process();
} setDigit(5);
// todos los digitos apagados para evitar iluminación desigual
void process()
'
{
for (int i = 0; i < 100; i++) // modificar este número entre intermitente y desenfoque
{ int change = getEncoderTurn(); if (stopped)
{ changeSetTime(ch a n g e );
} else
{ updateCountingTime();
} > if (timerMinute == 0 && timerSecond =
0)
{ digitalWrite(buzzerPin, HIGH);
>
void changeSetTime(int change)
(continúa)
Capítulo 9
■
Proyectos varios
167
LISTADO DE PROYECTO (continúa) { selectedTimelndex += change; if (selectedTimelndex < 0)
{ selectedTimelndex = numTimes;
} else if (selectedTimelndex > numTimes)
{ selectedTimelndex = 0;
} timerMinute = t imes[selectedTimelndex] / 100; timerSecond = t imes[selectedTimelndex] % 100;
void updateCountingTime()
{ static unsigned long lastMillis; unsigned long m = millis(); if (m > (lastMillis + 1000) && (timerSecond > 0 || timerMinute > 0))
{ digitalWrite(buzzerPin, HIGH); d e l a y (10); digitalWrite(buzzerPin, LOW); if (timerSecond == 0)
{ timerSecond = 59; timerMinute — ;
> else
•
{ timerSecond — ;
> lastMillis = m;
> } void setDigit(int digit)
{ for (int i = 0; i < 4; i++)
{ digitalWrite(displayPins[i ], (digit != i ));
> } void setSegments(int n)
{ for (int i = 0; i < 8; i++)
{ digitalWrite(segmentPins[i], ! digitsfn][i]);
(continúa)
168
30 Proyectos con A rd uino
LISTADO DE PROYECTO (continúa) } }
int getEncoderTurn()
{ // return -1, 0, or +1 static int oldA = LOW; static int oldB = LOW; int result = 0; int newA = digitalRead(aP i n ); int newB = digitalRead(b P i n ); if (newA != oldA || newB != oldB)
{ // algo ha cambiado if (oldA == LOW && newA == HIGH)
{ result = -{oldB * 2 - 1);
} > oldA = newA; oldB = newB; return result;
El tem porizador se encontrará siem pre en uno de
función updateC ountT im e encontrará las líneas de
estos dos estados: o bien estará d etenido, en cuyo
código para convertir esto en com entario o elim i
caso, al girar el codificador giratorio cambiará la hora,
narlo.
o puede estar funcionando, en cuyo caso estará con tando regresivam ente. Presionando el botón del co
Pongamos todo junto
dificador giratorio alternará entre los dos estados.
Cargue el sketch term inado del Proyecto 30 desde su
En lugar de hacer que el codificador giratorio cam bie la hora un segundo por paso, tenem os una
A rduino Sketchbook y descárguelo en su placa (véase el C apítulo 1).
m atriz de horas estándar que nos encaja perfecta m ente para lo que deseam os hacer. E sta m atriz se
Resumen
puede m odificar y am pliar pero, si cam bia su longi
La biblioteca EEPRO M se utiliza para alm acenar
Este es el últim o capítulo que contiene proyectos. El autor espera que al intentar llevar a cabo los proyec tos de este libro haya aum entado en el lector el ape tito por la experim entación y el diseño, y esto haga
la últim a hora m arcada, de modo que cada vez que el
que sienta la necesidad de diseñar sus propios pro
proyecto se ponga en m archa, recordará esa últim a
yectos. Por ello, el siguiente capítulo tiene por objeto ayudarle en el proceso de desarrollo de sus propios
tud, debe m odificar la variable num Tim es según co rresponda.
hora. El proyecto em ite un pequeño ruido con el clic de cada segundo. Si lo desea, puede desactivarlo. En la
proyectos.
C A P Í T U L O
10
Sus proyectos
Q uerem os pensar que ha
existen debajo de la superficie de la placa de
intentado reproducir algunos de los proyectos del
pruebas y los cables que conectan una placa de
libro y deseam os que haya aprendido m ucho
pruebas a otra. Para el tipo de proyectos que hem os
durante el trayecto. A hora es el m om ento de
desarrollado en este libro, norm alm ente no es
em pezar
proyectos
dem asiado im portante la form a com o se realiza la
utilizando lo que han aprendido. Y, sin duda, podrá
conexión. Es decir, la disposición de los cables no
tom ar prestado trozos del diseño de los proyectos
im porta, siem pre que se conecten todos los puntos.
¡B uen o ! ¡A quí
a
estam os!
desarrollar
sus
propios
en este libro. Pero para ayudarle en su tarea, este
Los esquemas electrónicos utilizan unas cuantas
capítulo presenta algunas técnicas de diseño y
normas que merece la pena que destaquemos. Por ejemplo, es frecuente colocar las líneas de GND
construcción.
cerca de la parte inferior del diagram a y las tensiones mayores cerca de la parte superior del diagrama. Esto
Circuitos Al autor le gusta iniciar los proyectos con una vaga idea de lo que quiere lograr y, poco a poco, comenzar también
a diseñar desde
la perspectiva de
la
electrónica. Generalmente, el software viene después. La forma de expresar un circuito electrónico es utilizar un esquem a electrónico. El autor ha incluido esquemas electrónicos para todos los proyectos en este libro con lo que, incluso si no está muy familiarizado con la electrónica, llegados a este punto debería haber visto ya suficientes esquemas para com prender más o menos la relación que hay entre los esquemas y los diagramas de distribución de la placa de pruebas, que también se han incluido.
conexiones
m uestran
utilizan
las
tensiones altas a las tensiones más bajas. Otra
convención
com o
tiras
líneas.
conductoras
utilizada
en
los
electrónicos es utilizar una pequeña
esquemas barra para
indicar una conexión a tierra (GND) cuando no hay suficiente espacio para dibujar todas las conexiones. La Figura 10-1, mostrada originalmente en el Proyecto 5. muestra tres resistencias, todas con un cable conectado a la conexión de tierra (GND) de la placa Arduino. En la distribución de la placa de pruebas correspondiente (Figura 10-2), puede ver que las conexiones a G ND van a través de tres cables y Existen
En un esquem a electrónico, las conexiones entre se
el flujo de carga a través del sistema circula desde las
tres tiras conductoras de la placa de pruebas.
Esquemas electrónicos com ponentes
permite a aquellos que lean el esquem a visualizar que
Estas que
esquem as
m uchas
herram ientas
electrónicos.
Algunas
para de
dibujar
ellas
son
productos CA D (diseño asistido por com putador) de
electrónica
integrada
que
son
capaces
de
establecer por usted las pistas sobre una placa de
169
170
30 Proyectos con A rd uino
o o o o o
o o oo o
o o o o o
o oo o o
5V
O O O
O O O O O
O O O O O
O O O O O
Q N Q
ooooooooooooooooooooooo ooo o o o o o o o o o o o o c o o c c c o c o o o o o o o o o o o o o 0 0 0 0 0 0 0 ooo ooooooooooooococoocoooo ooooooooooooooooooooooo P c c c c c o o c o o o o o o e o i
ooooooooooooo o o o O C C O C ------------Oo O Oo o oo o o0o .
o
Figura 10-2
o o o o o
-
“ OOOOOC o o o o o o o o o o oooooocooooooooo
O O O O I
ÍO O O O
O O O O O
O O O O O
O O O O I
lo o o o
ooooo
ooooo
Ejemplo de diseño de placa de pruebas.
ooooo
^ ________ o o o o o
o coo oo ocoooooooooo OOOOO o o oo o
o oo o o OOOOO
5V
GND
C apítulo 10
circuito
im preso.
Por lo general, estos
■
Sus proyectos
171
crean
diagram as bastante feos y el autor prefiere utilizar
Componentes
papel y lápiz o software de dibujo de propósito
En esta sección vam os a fijam os en los aspectos
general. Todos los esquem as de este libro se han
prácticos de los com ponentes: qué hacen y cóm o
creado con el excelente softw are (aunque con un
identificarlos, seleccionarlos y utilizarlos.
nom bre raro) llam ado O m niG raffle, de Omni G roup, que sólo está disponible para plataform as
Fichas de características técnicas
M ac. Las plantillas de O m niG raffle para dibujar
Todos los fabricantes de com ponentes publican
diagram as de
y esquem as
fichas de características técnicas (datasheets) de
electrónicos están disponibles para su descarga en
sus productos. Éstas suelen consistir en las especifi
w w w .arduinoevilgenius.com .
caciones del com portam iento del com ponente. En el
placas
de
pruebas
caso de las resistencias y de los condensadores la
Símbolos de componentes
verdad es que no tienen dem asiado interés; en
La Figura 10-3 muestra los símbolos de los com po
cam bio, sí resultan m ucho más útiles para los sem i
nentes electrónicos que hemos utilizado en este libro.
conductores y transistores y, sobre todo, para los
Existen diferentes estándares para los esquemas de los
circuitos integrados. A m enudo incluyen notas de
circuitos, pero los símbolos básicos pueden todos
aplicación que incluyen circuitos de ejem plo para
reconocerse de un estándar a otro. El conjunto utili
utilizar los com ponentes.
zado en el presente libro no sigue ningún estándar par
Todas están disponibles en Internet. Pero tenga
ticular. He elegido el enfoque que considero el más
en cuenta que si escribe "BC158 datasheet" en su
fácil de seguir para los esquemas.
buscador favorito, encontrará que m uchas de las entradas de m ayor éxito son de em presas de publi cidad que se aprovechan de que haya m ucha gente
£ ni4
820Q
A Resistor
Thermistor
Light-Dependent Resistor
buscando
HC Photoiransistor
fichas
técnicas
(d atash eets).
E stas
em presas colocan publicidad inútil junto a las fichas técnicas y fingen que agregan algo de valor por ver sus fichas de datos si se suscribe a su servicio. Estos sitios norm alm ente sólo conllevan frustración y
esa
^
g
1'
s
deben dejarse de lado en beneficio de los sitios web de los fabricantes. Por tanto, debe continuar la bús
1m0íV 0 niF F
!0 lOOpF 0uF
IN 4U 8
Capacitor
Polarized Capacitor
Diode
queda hasta que encuentre URLs del tipo www.fairLED
child.com . Por otra parte, m uchos proveedores de com po nente al por m enor (com o Farnell) proporcionan fichas técnicas sin coste y sin publicidad de, prácti cam ente, todos los com ponentes que venden, lo que
NPN Bipolar Transistor
PNP Bipolar Transistor
N Channel MOSFET
P Channel MOSFET
es de agradecer. Tam bién significa que puede com parar precios y com prar los com ponentes m ientras se está inform ando.
IC1
7B05 Integrated Circuit
Figura 10-3
Símbolos electrónicos.
172
30 Proyectos con A rd uino
Resistencias
precisión, no es necesario que escoja las resistencias
Las resistencias son los com ponentes electrónicos
en base a esto.
más com unes y baratos. Sus usos más com unes
La Figura 10-4 muestra la disposición de las
son:
bandas de colores. El valor de la resistencia usa sólo
■ Evitar un flujo excesivo de corriente (ver alguno
tres bandas. La primera banda es el primer dígito, la
de los proyectos que utilizan un LED) ■ Su utilización en parejas o com o potencióm etro
segunda el segundo dígito y la tercera banda "multiplicadora"
indica
cuántos
ceros
hay
que
colocar detrás de los dos primeros dígitos.
para crear un divisor de tensión En el C apítulo 2 explicam os la ley de O hm y la utilizam os para calcular el valor de una resistencia en serie con un LED. Del m ism o m odo, en el Proyecto 19. redujim os la señal de nuestra escalera de resistencias usando dos resistencias com o divisor de tensión. Las resistencias tienen bandas de colores a su alrededor para indicar su valor. Sin em bargo, si no está seguro del valor de una resistencia, siempre puede averiguarlo utilizando un polím etro. Una vez que se acostum bre a ello, es muy fácil leer los valores m ediante los códigos de colores. Cada banda de color tiene un valor asociado, como se muestra en la Tabla 10-1.
Por lo tanto, una resistencia de 270 £1 tendrá un primer dígito 2 (rojo), segundo dígito 7 (violeta), y un m ultiplicador de 1 (marrón). Del mismo modo, una resistencia de 10 KÍ2 tendrá bandas de color marrón, negro y naranja (1 ,0 ,0 0 0 ). La
m ayoría
de
nuestros
proyectos
utilizan
resistencias de muy baja potencia. Se puede realizar un cálculo rápido para calcular la corriente que circula a través de la resistencia y, multiplicándola por la tensión que circula por ella, nos dirá la potencia utilizada por la resistencia. Las resistencias disipan este excedente de energía en forma de calor y, por tanto, se calientan si circula por ellas una cantidad significativa de corriente. Sólo debe preocuparse de esto en el caso de las
Norm alm ente habrá tres de estas bandas juntas,
resistencias de menos de 100 í l o así. porque en las
em pezando desde un extremo de la resistencia, un
de valores más altos, la corriente que circule por ellas
hueco y luego una única banda en el otro extremo de
será muy baja.
la resistencia. La banda individual indica la exactitud
Por ejemplo, una resistencia de 100 £2 conectada
del valor de la resistencia. Dado que ninguno de los
directamente entre 5 V y GND tendrá una corriente
proyectos en este libro requiere resistencias de
circulando por ella de 1 = V / R ó 5 / 100, es decir,
TABLA 10-1
Código de colores para resistencias
N egro
O
M arrón
1
Rojo
2
Naranja
3
A m a rillo
4
Verde
5
Azul
6
V io le ta
7
Gris
8
0,05 Amperios. La potencia que utiliza será I x V, es decir, 0,05 x 5 = 0,25 W. La
clasificación
de
potencia
de
resistencias es 0.25 W o 0.5 W y, en nuestro caso, a menos que se indique lo contrario en los proyectos, las resistencias de 0.5 W son suficientes.
— HIII /
1° Dígito
| 2o Dígito
Blanco
estándar
U— \\
Multiplicador
j
Tolerancia
9 Figura 10-4
Código de colores para resistencias.
C apítulo 10
■
Sus proyectos
173
Transistores Eche un v istazo a c u a lq u ie r catálo g o de com po nentes y verá que hay, literalm ente, m iles de tipos diferentes de transistores. En este libro hem os sim plificado la lista a lo que se m uestra en la Tabla 10 - 2 .
El circuito básico de un transistor usado com o interruptor se m uestra en la Figura 10-5. La corriente que circula desde la base al em isor (b a e) controla una corriente m ucho m ayor que cir cula desde el colector al em isor. Si no hay corriente que circule por la base, no habrá corriente que cir cule por la carga. En la m ayoría de los transistores, si la carga tuviera resistencia cero, la corriente que circula hacia el colector sería 50 a 200 veces la corriente de la base. Sin em bargo, nosotros quere mos que nuestro transistor se active totalm ente o se desconecte totalm ente, por lo que la resistencia de
G ND C ircu ito de c o n m u ta ció n básico de un transistor.
carga lim itará siem pre la corriente del colector a la co rrien te req uerida por la carga. D em asiada corriente de base dañará el transistor y adem ás no perm itirá cum plir el objetivo de controlar una corriente m ayor con una más pequeña, y es por eso por lo que la base siem pre tendrá conectada una resistencia. Cuando se conm uta desde una placa A rduino, la corriente m áxim a de una salida es de 40 m A , así es que deberíam os elegir una resistencia que perm ita circular unos 30 mA de corriente cuando se active el pin de salida a 5 V. U tilizando la ley de Ohm:
R = V/ 1 R = (5 - 0 . 6 ) / 0.03 = 147 Q El -0.6 es porque una de las características de los transistores bipolares es que siem pre hay una ten sión de alrededor de 0.6 V entre la base y el em isor cuando el transistor está activado. Por tanto, usando una resistencia de base de 150 Q, podríam os controlar una corriente de colector de 40 a 200 veces 30 m A, o, lo que es lo m ism o, de 1,2 a 6 A, lo que es más que suficiente en la m ayoría de
TABLA 10-2
Transistores utilizados en este Libro
Transistor
Tipo
O bjetivo
BC548
NPN b ip o la r
C o n m u ta ció n de pequeñas cargas > 4 0 m A
BD139
NPN b ip o la r de p otencia
C o n m u ta ció n de cargas m ayores (LED Luxeon). Véase P royecto 6.
BC307
PNP b ip o la r
C on m u ta ción de displays LED de á nodo com ún cuya c o rrie n te to ta l es d em asiado grande para la salida de A rd u in o (4 0 m A).
2N7000
FET canal N
C o n m u ta ción de baja p ote ncia con m uy baja resistencia de conexión. Véase P royecto 7.
FQP33N10
MOSFET de potencia de canal N
C on m u ta ción de alta potencia.
FQP27P06
MOSFET de potencia de canal P
C o n m u ta ció n de alta potencia..
174
30 Proyectos con A rd uino
los casos. En la práctica, probablem ente utilizaría mos una resistencia de 1 K Q o quizá de 270 Q.
TAB LA 10-4
Uso de co m p on en te s especializados en los Proyectos
El parám etro de valor m áxim o de los tra n s is to res no debe sobrepasarse o podría resultar dañado. Estos parám etros se pueden encontrar en la hoja de características del transistor. Por ejem plo, la del B C 548 contendrá m uchos valores, aunque para nosotros los más interesantes son los que se resu men en la Tabla 10-3.
C o m p o n e n te LEDs de un c o lo r
P ro ye cto Casi to d o s
LEDs m u ltic o lo r
14
Panel m a triz LEDs
16
D isplay 7 segm entos
15, 30
C hip a m p lific a d o r audio
19, 20
LDR (célula fo to sen sib le) TABLA 10-3 Hoja de características de un transistor Propiedad
Valor
lc
100 m A
hFE
110-800
Significado
Term istor (sensor te m p e ra tu ra ) R egulador vo lta je regulable
20 13 7
La co rrie n te m áxim a que puede circu lar p o r el
pram os una placa Arduino en lugar de hacernos la
c o le c to r sin dañar al
nuestra propia. Lo m ismo es cierto en el caso de
transistor.
algunos m ódulos que queram os usar en nuestros
Ganancia de co rrie n te en c o rrie n te continua. Es la relación entre la
proyectos. Por ejem plo, el m ódulo de pantalla L C D que hem os utilizado en los Proyectos 17 y 22 contiene el
co rrie n te de base y la
chip controlador necesario para que funcione la
co rrie n te del colector.
pantalla L C D , reduciendo de este modo tanto el tra
C om o puede ver, varía
bajo que tenem os que realizar en el sk etch com o el
e ntre 110 y 8 0 0 para este
núm ero de pines que tenem os que utilizar.
transistor.
Si lo desea, existen otros tipos de m ódulos que puede utilizar en sus proyectos. Proveedores com o Sparkfun. Electan, Bricogeek o SuperRobotica.com
Otros semiconductores
en España, son una gran fuente de ideas y m ódulos.
En los distintos proyectos hem os ido introduciendo
Una m uestra del tipo de m ódulos que se pueden
diferentes tipos de com ponentes, desde LEDs a sen
obtener de estos proveedores incluye:
sores de tem peratura. En la Tabla 10-4 m ostram os
■ GPS
algunas indicaciones de los diversos proyectos rea
■ W i-Fi
lizados. Si desea desarrollar su propio proyecto, por
■ B luetooth
ejem plo para indicar la tem peratura, o cualquier otra
■ Zigbee inalám brica
cosa, puede que le resulte útil leer prim ero los pro
■ M ódem s G PRS para m óviles.
yectos que hem os desarrollado en el libro utilizando esos com ponentes. Puede que incluso le resulte adecuado montar prim ero el proyecto de este libro y, a continuación, m odificarlo para adaptarlo a sus propósitos.
Tendrá que dedicar tiem po a leer fichas, a plani ficar y a experim entar, pero sin duda, eso debería ser parte de la diversión. Ligeram ente m enos com plejo que utilizar un m ódulo desde cero es com prar una shieid Arduino con el m ódulo ya instalado. Esto resulta especial
Módulos y shields
mente una buena idea cuando los com ponentes que
No siem pre tiene sentido hacer todo partiendo de
desea utilizar no van a ir colocados en una placa de
cero. Después de todo, es la razón por la que com
pruebas (com o los com ponentes de m ontaje en
C apítulo 10
■
Sus proyectos
175
superficie). Una shield ya m ontada puede darle un
dades adquiridas localm ente. De esta m anera dis
verdadero em pujón al proyecto.
pondrá de algunas piezas de repuesto en su caja de
Continuam ente siguen desarrollándose nuevas
com ponentes.
shields para las m ás variopintas aplicaciones y, en el m om ento de escribir este libro, puede com prar
Herramientas
shields de A rduino para;
Para realizar sus proyectos necesitará un m ínim o de
■ E thernet (conectar su Arduino a Internet)
herram ientas. Si no tiene intención de soldar, enton
■ X B ee (un estándar de conexión inalám brica de
ces necesitará:
datos utilizado en dom ótica, entre otras cosas)
■ Cable rígido de distintos colores, de un diám e
■ C ontrolador de m otores
tro de alrededor de 0.6 mm (23 SW G)
■ GPS
■ Alicates de punta fina y alicates de corte, en par
■ Joystick
ticular para realizar los cables puente para la
■ Interfaz de tarjetas SD.
placa de pruebas
■ Pantalla gráfica táctil L C D
■ Placa de pruebas de inserción de com ponentes
■ W i-Fi
(protoboard) ■ Polím etro
Compra de componentes Hace treinta años, los aficionados a la electrónica
Si tiene la intención de soldar, entonces tam bién
que
vivían
pequeñas disposición
incluso en
ciudades varias
grandes
probablem ente tiendas
de
pueblos
o en
necesitará:
tenían
a su
■ Un so ld a d o r
o
■ Aleación de estaño para soldar, sin plom o
repuestos
de
reparación de radio/TV donde se podían com prar com ponentes y recibir consejos prácticos. En la
Caja de componentes
actualidad, sólo quedan unos cuantos com ercios que
Cuando com ience a diseñar sus propios proyectos,
todavía venden com ponentes, com o Radioshack en
le llevará algún tiem po acum ular gradualm ente su
Estados Unidos, M aplins en el Reino Unido o
stock de com ponentes. Cada vez que term ine un
algunos otros en nuestro país. No obstante. Internet
proyecto, algunos de los com ponentes volverán otra
ha entrado en escena para llenar el vacío y, ahora,
vez a su caja.
com prar com ponentes es más fácil y más barato que nunca. Con proveedores internacionales de com ponen tes com o RS y Farnell puede llenar una cesta de la com pra online y recibir los com ponentes en un día o dos. Com pare precios, ya que los precios varían con siderablem ente entre proveedores de los mismos com ponentes. eBay puede ser una gran fuente para adquirir com ponentes. Si no le im porta esperar unas sem a nas para recibir sus com ponentes, pueden conse guirse grandes gangas procedentes de China. A m enudo tendrá que com prar grandes cantidades, pero tam bién verá que puede ser más barato obtener 50 unidades de un com ponente de C hina que 5 uni
Es conveniente disponer de un stock de com po nentes básicos para que no tenga que estar com prando cosas cada vez que necesite una resistencia con un valor distinto de la que tenga. Habrá notado que la m ayoría de los proyectos de este libro tienden a utilizar valores de resistencia com o 100 £ 2 ,1 KS2, 10 K Q , etc. En realidad, tam poco necesita tantos com ponentes diferentes para la m ayoría de lo que es la base de un nuevo proyecto. En el Apéndice se enum era lo que pensam os que puede ser un buen kit de com ponentes básicos. Las cajas con diversos com partim entos que se pueden etiquetar ahorran m ucho tiem po en la selec ción de com ponentes, especialm ente en el caso de las resistencias que no tienen su valor escrito encim a.
176
30 Proyectos con A rd u in o
Alicates de corte y alicates de punta fina
Soldar No es necesario gastar m ucho dinero para conseguir
Los alicates de corte son para cortar, y los alicates
un buen soldador. Las estaciones de soldadura con
de punta fina se utilizan para sujetar las cosas (a
tem peratura controlada, com o la que se m uestra en
m enudo m ientras las corta).
la Figura 10-7, son m ejores, pero un soldador eléc
La Figura 10-6 m uestra cóm o se pela un cable.
trico de tem peratura fija que se enchufa a la red es
Suponiendo que sea diestro, sujete los alicates con
más que suficiente. Com pre uno con la punta fina, y
la m ano izquierda y los alicates de corte con la
asegúrese de que está pensado para electrónica y no
derecha. Sujete el cable con los alicates de punta
para usos de fontanería.
fina cerca de donde desea em pezar a pelar el cable
Para soldar, utilice estaño fino libre de plom o.
y luego pellizque suavem ente el cable con los
C ualquier persona puede soldar cosas y hacer que
alicates de corte, dando despacio la vuelta al cable
funcionen; sin em bargo, sólo algunos tienen la
para, a continuación, tirar de la funda hacia fuera,
capacidad de hacer buenas soldaduras. No se preo
para dejar el centro del cable pelado. A veces, el
cupe si sus resultados no tienen una pinta tan
pellizco es dem asiado fuerte y se corta o debilita el
curiosa com o los que realizan los robots de cons
cable, y otras veces no se pellizca lo suficiente y la
trucción de circuitos im presos... ¡No la van a tener
funda sigue intacta. Es sim plem ente una cuestión
nunca!
de práctica.
Soldar es uno de esos trabajos en los que real
También puede com prar un pelador autom ático
mente se necesitarían tres manos: una mano para sos
de cables, que pellizca y saca la funda en un solo
tener el soldador, otra para el material de soldadura y
m ovim iento. En la práctica, a m enudo estos sólo
otra para sostener lo que esté soldando. A veces, la
funcionan bien para un determ inado tipo de cable
cosa que se está soldando es lo suficientemente
y, a veces, ¡sim plem ente ni funcionan!
grande y pesada para quedarse en su lugar mientras se suelda; en otras ocasiones, es necesario m ante nerlo en el aire. Los alicates pesados son buenos para esto, com o lo son las pequeñas mini prensas de ven-
Figura 10-6
Alicates de corte y alicates de punta fina.
C apítulo 10
Por encim a
■
177
Sus proyectos
de todo, trate
de no calentar
com ponentes sensibles (o caros) m ás tiem po del estrictam ente
necesario,
especialm ente
si
sus
term inales de conexión son cortos. Antes de em pezar a trabajar en lo verdaderamente im portante, practique la soldadura intentando unir trozos de cables usados, o soldando cables a alguna placa de circuitos antigua que tenga por ahí.
Polímetro El gran problem a de los electrones es que no se F igura 10-7
S olda do r y m aterial de soldadura.
puede ver al "animal" que llevan dentro. Un polí metro perm ite ver qué es lo que están haciendo.
tosa y los soportes del tipo "tercera m ano” que
Permite m edir el voltaje, la corriente, la resisten
utilizan pinzas de cocodrilo para sujetar las cosas.
cia y, a m enudo, tam bién otros parám etros, com o la capacidad o la frecuencia. Un polím etro barato de 10 € es perfectam ente adecuado para casi cualquier
Los pasos básicos para soldar son: 1.
H um edecer la esponja del soporte del sol
tarea. Los profesionales utilizan m edidores m ucho
dador.
más sólidos y precisos, pero para nosotros no es
2.
Deje que el soldador alcance tem peratura.
necesario en la m ayoría de los casos.
3.
Estañe la punta del soldador presionándolo
Los polím etros, com o el que se m uestra en la
contra el estaño hasta que se derrita y cubra
Figura 10-8. pueden ser de tipo analógico o digital.
la punta. 4.
N orm alm ente, se puede saber más con un m edidor
Lim pie la punta sobre una esponja húm eda esto
produce
un
curioso
y
agradable
sonido, pero tam bién lim pia el exceso de estaño. Ahora debe tener una pequeña punta
6.
la rapidez del m ovim iento de la aguja y las altera ciones, algo que no es posible con un m edidor digi tal, donde sólo cam bian los núm eros. Sin em bargo,
plateada. 5.
analógico que con uno digital, ya que se puede ver
T oque con la punta del so ld ad o r el lugar
cuando tenem os una tensión estable, resulta m ucho
donde desea soldar para calentarlo y, a
más fácil leer un m edidor digital, ya que los analó
continuación, tras una breve pausa (uno o
gicos tienen varias escalas y hay que decidir a qué
dos seg u n d o s), co loque el estaño en el
escala hay que m irar antes de tom ar la lectura.
punto donde la punta del soldador se une
Tam bién se pueden utilizar polím etros con
a aquello que desea soldar. La soldadura
selección autom ática de escala, en los que, una vez
debe fluir com o si fu era líq u id o , crean d o
que haya seleccionado si está m idiendo corriente o
una estupenda unión.
ten sión ,
cam biará
autom áticam ente
el
rango
Retirar el estaño y el soldador, colocando el
cuando aum enten la tensión o la corriente. Esto sin
soldador en su soporte, teniendo mucho
duda es útil, aunque puede que algunos argum enten
cuidado de no m over nada mientras se soli
que si ya nos encontram os en la fase de pensar en el
difica la soldadura.
rango de tensiones antes de m edirlo, ya estam os
Si algo se m ueve,
vuelva a tocarlo con el soldador para volver a fundir el estaño; de lo contrario, puede producir una mala conexión, lo que se llama una soldadura fría.
haciendo en realidad una m edida útil.
178
30 Proyectos con A rd uino
punta roja en el pin y leer la tensión, que debe ser 5 V o 0 V. M edir la corriente es diferente de la medición de la tensión porque, en el caso de la corriente, lo que se desea m edir es la corriente que circula por algo y no la tensión en algún punto. Para medir, intercalam os el polím etro en el trayecto de la corriente que se está m idiendo. Esto significa que cuando el polím etro se configura en una escala para m edir corriente, habrá una resistencia muy baja entre sus puntas de prueba, por lo que debe Figura 10-8
Polím etro.
tener cuidado de no cortocircuitar nada con las m ismas.
Para m edir la tensión usando un polímetro: 1.
Ponga el polím etro en un rango de tensión
La Figura 10-9 m uestra cóm o puede m edir la corriente que circula por un LED.
(com ience utilizando una escala superior a la de la tensión que va a m edir). 2.
3.
C onecte el cable negro del m edidor a G N D
Para m edir la corriente: 1.
Ponga el polím etro en una escala de
(tierra). Una pinza de cocodrilo m ontada
corriente superior a la corriente esperada.
sobre
Observe que los polímetros a menudo tienen
la punta de m edición facilita la
tarea.
una clavija aparte de alta com ente, que se
Toque con la punta roja en el punto cuya
utilizan para medir corrientes de hasta 10 A.
tensión quiere medir. Por ejem plo, para ver
2.
lado más positivo de la corriente.
si una salida digital de Arduino está acti v ada o d esa ctiv ad a, puede to car con la
Figura 10-9
Medición de corriente.
C onecte la punt a p o sitiv a del m edid o r al
3.
C onecte la punta negativa del m edidor al
C apítulo 10
4.
■
Sus proyectos
179
lado más negativo. Tenga en cuenta que si
Osciloscopio
co n e cta las punt as al re v é s, un m ed id o r
En el Proyecto 18 construim os un osciloscopio
digital sólo indicará una corriente negativa;
sim ple. Los osciloscopios son una herram ienta
pero, en uno analógico, puede dañarlo.
indispensable para cualquier tipo de diseño o prueba
En el caso de un LED , el LED debe ilum i
de productos electrónicos en el que se esté tratando
narse con la m ism a fuerza que antes de
con una señal que cam bia con el tiem po. Son equi
colocar el m edidor en el circuito, y podrá
pos relativam ente caros y los hay de varios tipos.
leer el consum o actual.
Uno de los tipos que resulta más rentables es sim i lar en concepto al del Proyecto 19. Ese osciloscopio
Otra característica de un polím etro que a veces
sim plem ente envía sus lecturas a un ordenador, que
resulta útil es la prueba de continuidad.
es el encargado de m ostrarlas.
N orm alm ente esto hará que suene un "bip"
Se han escrito libros enteros acerca de cóm o uti
cuando las puntas de prueba se tocan entre sí.
lizar eficazm ente un osciloscopio, y cada oscilosco
Puede
pio es d ife re n te , po r lo que aquí sólo nos
usarlo
para
probar fusibles, etc., pero
tam bién para com probar si se ha producido algún cortocircuito accidentalm ente en
una placa de
circuito o si hay conexiones rotas en un cable. En ocasiones, tam bién resulta útil la m edición de una resistencia; por ejem plo, cuando se desea saber el valor de una resistencia que no está m arcada. A lgunos m edidores tam bién tienen conexiones para com probar diodos y transistores, lo que puede ser útil para com probarlos y desechar los transisto res que se han quem ado.
ocuparem os de los conceptos básicos. En la Figura 10-10. puede verse la pantalla que m uestra la form a de onda, en la parte superior de la cuadrícula. La cuadrícula vertical está en unida des de algunas fracciones de voltios, que en esta pantalla es de 2 V por división. Por tanto, el voltaje total de la onda cuadrada es 2.5 x 2, es decir, 5 V. El eje horizontal es el eje de tiem pos, y este está calibrado en segundos, en este caso 500 m icrosegundos
(¡ l is )
por división. Así es que la duración de
180
30 P royectos con A rd uino
un ciclo com pleto de la onda es 1000 |xS, es decir,
Otra fuente de inspiración son los catálogos de
1 m ilisegundo, lo que indica una frecuencia de
co m p o n en tes, ya sean en
1 K H z.
Echándole un vistazo a estos catálogos puede que se
línea o en papel.
encuentre con algún com ponente interesante que le
Ideas para proyectos
haga preguntarse qué es lo que se podría hacer con
La zona A rduino Playground del sitio web princi
él.
pal de A rduino (w w w .arduino.ee) es una gran fuente
Dejar a nuestra mente pensar en posibles pro
de ideas para proyectos. De hecho, tiene incluso una
yectos es algo saludable que debem os fom entar
sección específica para ideas de proyectos, dividido
todos los interesados en esta interesantísim a activi
en fáciles, m edios o difíciles.
dad. Tras explorar todas las opciones y darle mil
Si escribe "proyectos Arduino" en su buscador favorito o en YouTube. encontrará un sinfín de pro yectos interesantes que la gente ha em prendido.
vueltas, ¡el proyecto com enzará a tom ar forma!
A P É N D I C E
Componentes y suministros
en este libro
dos a la electrónica que crean proyectos de m icro
pueden adquirirse fácilm ente a través de Internet.
controladores com o los nuestros. Estos no suelen dis
Sin em bargo, a veces resulta un poco difícil encon
poner de la m ism a gam a de com ponentes, pero a
trar exactam ente lo que se está buscando. Por esta
m enudo tienen com ponentes más exóticos y diverti
razón, este apéndice enum era los com ponentes
dos a precios razonables. Un buen ejem plo de esto
junto con códigos de referencia para diversos pro
es Sparkfun E lectronics, en U SA , o EIectan.com,
veedores. Esta es inform ación que probablem ente
BricoGeek.com o SuperRobotica.com en España,
deje de estar actualizada con el tiem po, pero los
pero sin duda existen otros m uchos en Internet.
T
odos
los
componentes
utilizados
grandes proveedores com o Farnell o RS general
A veces, cuando eche únicam ente en falta un par
m ente listarán los artículos "fuera de catálogo" y
de com ponentes, será estupendo que pueda ir a una
ofrecerán alternativas
tienda local y com prarlos. R adioshack en Estados U nidos y M aplins en el R eino Unido disponen de
Proveedores
una am plia gam a de com ponentes, y son ideales para
Existen tantos proveedores de com ponentes que pa
esto en sus respectivos países.
rece un poco injusto hacer una lista con los pocos que
Las secciones que aparecen a continuación listan
el autor conoce. Por tanto, eche un vistazo en Inter
los com ponentes por tipo, junto con algunas posibles
net, ya que los precios varían considerablem ente
fuentes y códigos de referencia de algún sum inistra
entre los distintos proveedores.
dor.
H em os en u m erad o có digos de piezas de F a r n ell y de RS porque son su m in istra d o res interna
Proveedores en España
cio nales, pero tam bién porque disponen de un
Para facilitar la localización de com ponentes inclui
fantástico catálogo de com ponentes. H abrá pocas
mos algunos sum inistradores por Internet que cono
cosas que no pueda com prarles. Pueden ser sorpren
cem os personalm ente, habiendo m uchos m ás, que
d entem ente baratos para com ponentes com unes,
por m otivos de espacio no podem os referir.
com o resistencias y sem iconductores, pero para los com ponentes m enos com unes, com o los m ódulos de
• A rduino, shields y sensores: E lectan .com , B ricoG eek.com
diodo láser, sus precios pueden ser diez veces m ayor
• Transistores, sensores, LEDs: M icropik.com
de lo que pueda encontrar en otros sitios en Internet.
• M otores, servos, sensores, softw are gratuito
Su principal función es sum inistrar a profesionales. A lgunos proveedores de m enor tam año se espe cializan en sum inistrar com ponentes para aficiona
robótica, tutoriales: SuperR obótica.com • T ransistores, resistencias, com ponentes elec trónicos en general: m leon.com 181
182
30 Proyectos con A rd uino
Arduino y clones Código 1
Descripción
RS
Otros
A rd u in o UNO
715-4081
Electan.com BricoG eek.com
2
A rd u in o D uem ilanove
696-1655
3
A rd u in o Lilypad
—
BricoG eek.com
4
A rd u in o Shield Kit
696-16
Electan.com BricoG eek.com
Otros proveedores a revisar incluyen eB ay, S p a rk fu n , R ob o tsh o p .co m y A d a fru it. N o t a d e la edición e s p a ñ o l a : Aunque
en el siguiente listado las referencias para Farnell y RS correspon den a resistencias de 0.5 W, en realidad se pueden sustituir por 'A W. Resistencias Descripción
Farnell
RS
4
Resistencia 39 Q 0.5 W
9338756
683-3601
5
Resistencia 100 Q 0.5 W
9 339760
683-3257
6
Resistencia 270 Q 0.5 W
9340300
148-360A
7
Resistencia 1 KQ 0.5 W
9339779
477-7928
8
Resistencia 4.7 KQ 0.5 W
9340629
683-3799
9
Resistencia 10 KQ 0.5 W
9339787
683 -2 93 9
10
Resistencia 33 KQ 0.5 W
9340424
6 83 -3 54 4
11
Resistencia 47 KQ 0.5 W
9 34 06 37
5 0 6 -5 4 3 4
12
Resistencia 56 KQ 0.5 W
9340742
6 8 3 -4 2 0 6
13
Resistencia 100 KQ 0.5 W
9339795
683-2923
14
Resistencia 4 7 0 KQ 0.5 W
9340645
683 -3 73 0
15
Resistencia 1 MQ 0.5 W
9339809
683-4159
16
Resistencia 4 Q 1 W
1155042
683-5477
17
P o te n ció m e tro lineal 100 K Q
1227589
2 49 -9 26 6
18
Termistor, NTC, 33 K a 25°C, beta 4 0 9 0
1672317RL (b e ta = 3 9 5 0 )
188-5278 (R = 30 K,
Código
beta = 4100) LDR
7482280
596-141
Descripción
Farnell
RS
20
100 nF no p o larizad o
1200414
538-1203A
21
220 nF no polarizad o
1216441
107-029
22
E le ctro lítico 100 piF
1136275
501-9100
19
Condensadores Código
A pé n dice
■
C om ponentes y sum inistros
183
Semiconductores D escripció n
Farnell
RS
O tro s
23
LED rojo 5-m m
1712786
247-1151
Tienda local
24
LED am arillo 5-m m
1612434
229-2554
Tienda local
25
LED verde 5-m m
1461633
229-2548
Tienda local
26
LED in fra rro jo 5-m m 9 4 0 nm
1020634
455-7982
Tienda local
7605481
654-2263
Tienda local Tienda local
C ó d ig o
27
LED rojo 3-m m
28
LED verde 3-m m
1142523
619-2852
29
LED azul 3-m m
1612441
247-1561
Tienda local
30
LED blanco Luxeon 1W
1106587
467-7698
Micropik.com ó desm ontar de linterna led
31
RGB LED (á n o d o co m ú n)
1168585 (nota: tiene cables separados en lugar de á no do co m ú n )
247-1505 (tie n e cables separados en lug ar de á nodo co m ú n)
BricoGeekcom Micropik.com Electan.com
32
M ódulo d io d o láser rojo 3 m W
$$$
$$$
eBay o q u ita r de p un tero láser barato
33
D isplay LED 7 segm entos, 2-díg (á n o d o co m ú n)
1003316
195-136
BricoGeekcom Electan.com
34
A rray LED 8 x 8 (2 colores)
—
—
BricoGeekcom
35
D isplay g rá fico barra 10-segm.
1020492
BricoGeekcom Electan.com
36
F o to tra n sisto r IR 935 nm
1497882
195-530
Electan.com
37
Sensor de infrarrojos IR 940 nm o similar 4142822
315-387
SuperRobótica BricoGeekcom
38
D iodo 1N 4004
9109595
6 2 8 -9 0 2 9
Tienda local
39
Transistor BC 307/ BC556
1611157
5 4 4 -9 3 0 9 A
Tienda local
40
Transistor BC548
1467872
6 2 5 -4 5 8 4
Tienda local
41
Transistor DB139
1574350
—
Tienda local
42
FET 2 N 7 0 0 0
9845178
671-4733
Electan.com
43
MOSFET de p ote ncia canal N FQP33N10
9 84 55 34
671-5095
44
MOSFET de p ote ncia canal P FQP27P06
9846530
671-5064
45
R egulador tensión LM317
1705990
686-9717
Tienda local
46
C o n ta d o r décadas 4017
1201278
519-0120
Tienda local
47
A m p lific a d o r a udio TD A7052 1W
526198
6 5 8 -4 8 5 A
Tienda local
Otros proveedores a revisar, especialm ente para LED s, etc. incluyen eB ay, M icropik.com , Sparkfun, Robotshop.com y Adafruit.
184
30 P royectos con A rd uino
Otros C ó d ig o
D escripció n
Farnell
RS
O tros
48
P ulsador m iniatura
1448152
102-406
Tienda local
49
C on ector a lim en ta ció n 2.1 mm
1200147
455-132
Tienda local
50
C lip de pila 9 V
1650667
489-021A
Tienda local
51
Fuente alim. regul. 15 V 1.5 A
1354828
238-151
SuperRobótica Tienda local
52
Term inal de to rn illo 3 cables
1641933
2 20 -4 27 6
Tienda local
53
Placa perforada
1172145
2 0 6 -8 6 4 8
Tienda local
54
Teclado m atricial 4 x 3
1182232
115-6031
BncoGeek.com
55
Pines m acho 2.54 m m paso
1097954
668-9551
BricoGeek.com Electan.com
56
Term inal hem bra 2.54 m m paso
1218869
277-9584
BricoGeek.com Electan.com
57
C o d ifica d o r g ira to rio con pulsad or
1520815
—
Electan.com
58
M ódulo LCD (controlador HD44780)
1137380
5 3 2 -6 4 0 8
BricoGeek.com
59
A lta voz m iniatura 8 0
1 300022
628 -4 53 5
Tienda local
60
M icró fon o E lectret
1736563
—
Tienda local
61
Relé 5 V
9913734
4 9 9 -6 5 9 5
Tienda local
62
Fuente a lim en ta ció n 12 V 1 A
1279478
234-238
SuperRobótica
63
V e n tila d o r de o rd e n a d o r 12 V
1755867
6 6 8 -8 8 4 2
Tienda local
64
M oto r 6 V
599128
238-9721
SuperRobótica
65
M oto r Servo 9 g r
—
—
Sparkfun
Tienda local
Tienda local SuperRobótica BricoGeek.com 66
solenoide 5V (< 100 m A )
9687920
533-2217
BricoGeek.com
67
Disco P iezoeléctrico
1675548
511-7670
Tienda local
1192513
—
Tienda local
1435590
289-7884
BricoGeek.com
(solo, sin e le ctró n ica ) 68
Z u m b a d o r P ie zoeléctrico (con o scila d o r in clu id o )
69
C o n ta cto m a g n é tico m iniatura tip o Reed
Tienda local
70
Marco fo to s 13 x 18
Supermercado
71
Fuente a lim en ta ció n 5 V, 5 0 0 m A
1297470
234-222
De c a rg a d o r de te lé fo n o m óvil
72
Placa de pruebas
4 69 25 97
—
Tienda local Electan.com SuperRobótica
Las tiendas locales perm iten ver los com ponentes antes de com prarlos, y suelen ser un buen sitio para com pra de com ponentes com o fuentes de alim entación o ventiladores. A dem ás, son más baratas para éste tipo de su m inistros que los grandes proveedores profesionales.
A pé n dice
Kit de com ponentes principiantes
■
C om ponentes y sum inistros
185
para
Es bueno disponer de un cierto stock de com ponen tes com unes. La siguiente lista ofrece algunos de los
■ Resistencias: Resistencia de 1/4 W, 100 Q . 270 Q , 1 K Q , 10 K Q y 100 K Q
com ponentes que probablem ente se verá usando en
■ LEDs rojos de 5 mm
sus distintos proyectos una y otra vez.
■ Transistores: BC548, B D 139
índice Las referencias a las figuras están en cursiva.
Comando !. 123
cerradura magnética (Proyecto 27), 148-153 chip de interfaz USB, 20 circuitos circuitos eléctricos, 169-171 símbolos eléctricos, 171 circuitos eléctricos, 169-171
actualizaciones, 3 alicates, 176 alimentación hipnotizador (Proyecto 24), 134-138 láser controlado por servo (Proyecto 25), 138-143 termostato LCD (Proyecto 22), 125-131 ventilador controlado por ordenador (Proyecto 23), 132-133 amplificación, 36
codificadores giratorios, 67, 68 código, 8 Comando !, 123 componentes comprar. 175 kit de iniciación, 185 proveedores, 181-184 componentes de la placa, 16
ánodos comunes, 91-92 Arduino Lilypad. 20 proveedores, 182 Arduino Mega, 20 Arduino Playground, 179
véanse también los distintos proyectos clones, 182
•
Arduino Protoshield, 37, 38-40 arpa de luz (Proyecto 20), 117-120 array de LEDs (Proyecto 16), 95-101 Asistente de Extracción, 2-3 Asistente de Nuevo Hardware Encontrado, 3 ,4 ATmegal68. 20 ATmega328, 19-20 B bibliotecas, instalación en software de Arduino, 64, 65, 154-155, 161 botón Reset, 1 Brevig, Alexander, 64
chip de interfaz USB, 20 conector de programación serie, 20 conexiones digitales, 18-19 conexiones eléctricas, 16-18 entradas analógicas, 18 fuente de alimentación, 16 microcontroladores, 19-20 oscilador, 20 pulsador Reset, 20 comprar componentes, 175 condensadores, 108 proveedores, 182 conector de programación serie, 20 conector Reset, 16-17 conexiones digitales, 18-19 conexiones eléctricas, 16-18
cable USB, conexión de tipo A a tipo B, 1 caja de componentes, 175 CDA, 111
configurar entorno de Arduino, 6. 7 constantes, 23 contador de décadas, 96 187
188
30 Proyectos con A rd uino
control remoto por infrarrojos (Proyecto 28), 153-158 controladores puente H, 134
función randomSeed, 55 funciones, 22
controladores USB, instalación, 3-4 convertidor digital-analógico (CDA), 111 corriente, medición, 178 cortacables, 176
generación de números aleatorios, 55 GND, 17 líneas en circuitos eléctricos, 169 gráfico de colores web, 87
dado de LEDs (Proyecto 9), 55-59 dado doble de LEDs de siete segmentos (Proyecto 15), 91-95 d a d o .55-59, 91-95 descarga de software de proyecto, 6-8 destello código Morse S. O. S. (Proyecto 2), 27-29 detector de mentiras (Proyecto 26), 145-148 Diecimila. Véase placa Arduino Diecimila directivas de pre-procesador, 78 diseño, 50 display de luces multicolor (Proyecto 14), 85-89 displays LCD, 101-102
herramientas, 175 caja de componentes, 175 cortacables y alicates, 176 osciloscopios, 179 polímetro, 177-179 soldar, 176-177 hipnotizador (Proyecto 24), 134-138 Histéresis,130 hojas de características técnicas, 171 "hunting", 127-130
Duemilanove. Véase placa Arduino Duemilanove E
ideas para proyectos, 179-180
EEPROM, 20. 78, 82, 153 ejemplo, 21-23
imágenes de disco, 5
EMF fuerza electromotriz, 126 entradas analógicas, 18 entradas y salidas digitales, 41 . salida analógica de entradas digitales. 112 entradas, 15
instalación del software, 1-2 en Linux, 5-6 en Mac OS X, 4-5 en Windows, 2-4 instrucciones condicionales, 24-25 integers (enteros), 22 integración matemática imperfecta ( leaky ), 75 interruptor magnético Reed, 159
analógico, 18 digital, 41 EPROM, 15 escalera de resistencias R-2, 111, 112 expresiones lógicas, 25
kit de iniciación, 185
F
L
FCEM o fuerza contraelectromotriz, 126, 150 FETs, 48, 96 fotorresistencias, 72 fototransistores, 72, 73-74
láser controlado por servo (Proyecto 25), 138-143 láseres, láser controlado por servo (Proyecto 25), 138-143 LDRs. 72
fuente de alimentación, 16
LED intermitente (Proyecto 1), 8-11
función Alloff, 138 función getEncoderTurn, 69
LED intermitente (Proyecto 1), placa de pruebas, 12 Ledpin, 21, 22
función playNote, 113-116 función random. 55
LEDs
K
añadir un LED externo, 10-11
índice
array de LEDs (Proyecto 16), 95-101 dado de LEDs (Proyecto 9), 55-59 dado doble de LEDs de siete segmentos (Proyecto 15), 91-95 destello código Morse S. O. S. (Proyecto 2), 27-31
luz estroboscópica (alta potencia) (Proyecto 8), 52-55 luz estroboscópica (Proyecto 6), 44-46 matriz de LEDs (Proyecto 16), 95-101 placa de mensajes USB (Proyecto 17), 102-105 luz estroboscópica (alta potencia - Proyecto 8), 52-55
luz estroboscópica (Proyecto 6), 44-47 luz estroboscópica de alta potencia
luz estroboscópica (Proyecto 6), 44-46 crear una shieid para, 47 luz estroboscópica de alta potencia (Proyecto 8), 52-55 luz para TA,E.(Proyecto 7), 47-52
(Proyecto 8), 52-55 Luz para T.A.E.(Proyecto 7), 47-52
M
LED parpadeante (Proyecto 1), 8-11 LEDs de siete segmentos, 89-91 Luxeon 1 W, 35
modelo de Semáforo (Proyecto 5), 41-44 traductor de código Morse (Proyecto 3), 31-35 traductor de código Morse de gran intensidad (Proyecto 4), 35-40 LEDs de siete segmentos, 89-91
Véase también LEDs lenguaje C, 21 aritmética, 23-24 arra y s (matrices), 30-32 constantes, 23 ejemplo, 21-23 enteros, 22 expresiones lógicas, 25 funciones, 22 instrucciones condicionales, 24-25 loops (bucles), 23, 29-30 nomenclatura Mayúscula en segunda palabra, 22 operadores lógicos, 25 parámetros. 23 punto y coma, 22 strings (cadenas), 24 tipos de datos, 23, 24 variables, 22, 23 lenguaje Ruby, instalación, 109-110 ley de Ohm, 17-18 Lilypad. Véase Arduino Lilypad. LINUX, instalación del software en, 5-6 lógica transistor-transistor, 16 loops (bucles), 23, 29-30 luces
189
Mac OS X, instalación del software en, 4-5 matrices, 30-32 medición de corriente, 178 medición de resistencia, 179 medición de resistencia, 179 medición de temperatura, 77 medición de voltaje, 177-178 medidor VU (Proyecto 21), 120-124 medidores analógicos, 177 medidores de escalado automático, 177 medidores digitales, 177 memoria, 15, 19-20 microcontroladores, 15, 19-20 modelo de semáforo (Proyecto 5), 41-44 modelo de semáforo utilizando codificador giratorio (Proyecto 11), 68-72 modulación por anchura de pulsos (PWM), 48 módulos, 174-175 monitor de pulsaciones (Proyecto 12), 73-77 MOSFETs, 135-136 multímetro, 177-179 O OmniGraffle, 171 ondas cuadradas, 111
dado doble de LEDs de siete segmentos
ondas sinusoidales, 111 operador de marketing, 123 operadores lógicos, 25 operadores, 25 operador de marketing, 123 oscilador, 20
(Proyecto 15), 91-95 display de luces multicolor (Proyecto 14), 85-89
osciloscopio (Proyecto 18), 107-111 osciloscopios, 179
190
30 Proyectos con A rd uino
P
modelo de semáforo utilizando un codificador giratorio, 68-72 modelo de semáforo, 4 1-44 monitor de pulsaciones, 73-77 osciloscopio, 107-111 placa de mensajes USB, 102-105
página web, 2 parámetros, 23 PCB. Véase placas de circuito Protoshield pela-cables, 176 piezozumbadores, 146-147 Placa Arduino Duemilanove, 2 proveedores, 182 puesta en marcha, 1 seleccionar, 6, 7 Placa Arduino Diecimila proveedores, 182 puesta en marcha, 1
reloj Lilypad. 159-162
seleccionar, 6 ,7 Placa Arduino UNO proveedores, 182 puesta en marcha, 1 seleccionar, 6, 7
USB registrador de temperaturas, 77-83
reproductor de música, 112-116 teclado código de seguridad, 61-67 temporizador de cuenta atrás, 163-168 termostato LCD, 125-131 traductor de código Morse gran intensidad, 35-38 traductor de código M orse, 31-35
placa de mensajes USB (Proyecto 17), 102-105 placa de mensajes, 102-105 placas de circuito Protoshield, 39
ventilador controlado por ordenador, 132-133 prueba de continuidad, 178-179 puente (jumper) de alimentación, 1 puerto serie, configuración, 6, 7 pulsador Reset, 20 PWM, 48
placas de prueba, 11-13 polarización por realimentación de colector, 121 potenciómetros, 4 5 ,4 6 ,4 7 , 147 programa Blink. 1 modificar, 8-11 programas, 8 proveedores, 181-184
•
proyectos arpa de luz, 117-120 cerradura magnética, 148-153 control remoto por infrarrojos, 153-158 dado de LEDs, 55-59
RAM, 15 red eléctrica, 110, 125 registrador de temperaturas USB (Proyecto 13), 77-83 regulador de voltaje, 16 reloj Lilypad (Proyecto 29), 159-162 reproductor de música (Proyecto 19), 112-116 resistencias dependientes de la luz, 72 resistencias, 10, 172 códigos de colores, 172 potenciómetros, 45, 4 6 ,4 7 , 147 proveedores, 182 resistencias dependientes de la luz (LDR), 72 valores, 19
dado doble de LEDs de siete segmentos, 91-95 destello código Morse S. O. S., 27-29 detector de mentiras, 145-148 display de luces multicolor, 85-89 hipnotizador, 134-138 ideas, 179-180 láser controlado por servo, 138-143 LED parpadeante, 8-11 luz estroboscópica de alta potencia, 52-55 luz estroboscópica, 44-47 Luz para T A .E ., 47-52 matriz de LEDs, 95-101 medidor VU, 120-124
S salida analógica de entradas digitales, 112 salidas, 15 salida analógica de entradas digitales, 112 digital, 41 semiconductores, proveedores, 183 sensores modelo de semáforo utilizando un codificador giratorio (Proyecto 11), 68-72
índice
monitor de pulsaciones (Proyecto 12), 73-77 registrador de temperaturas USB (Proyecto 13). 77-83 teclado código de seguridad (Proyecto 10), 61-67 Serial Monitor, 34-35. 75 servomotores, 138
crear una shieid para, 38-40 transistores bipolares, 90-91 transistores de efecto de campo de óxido metálico (MOSFET). 135-136 transistores de efecto de campo, 48, 96 transistores PNP, 92
shields, 38-40, 47, 142, 174-175 Shirriff, Ken, 154
transistores, 173-174 FETs, 48, 96
símbolos del código Morse, 32 sketches, 8
hojas de características técnicas, 174 MOSFETs, 135-136
software instalar, 3-6
transistor bipolar NPN, 36 transistores bipolares, 90-91
descarga de software de proyecto, 6-8 sketch Blink, 8-9 soldar, 176-177 solenoide. 148-150. 153 sonido arpa de luz (Proyecto 20), 117-120 generación, 111-112 osciloscopio (Proyecto 18), 107-111 reproductor de música (Proyecto 19), 112-116 Vúmetro o medidor VU (Proyecto 21), 120-124 Stanley, Mark, 64 Strings (cadenas), 24
transistores PNP, 92 usados en este libro, 173 TTL, 16
UNO. Véase placa Arduino UNO
variables, 22, 23 ventilador controlado por ordenador (Proyecto 23), 132-133 voltaje, medir. 177-178 W
tarjetas perforadas. 48
Windows, instalación de software en, 2-4
Teclado código de seguridad (Proyecto 10), 61-67 temperatura medición, 77 registrador de temperaturas, 77-83 termostato LCD, 125-131 temporizador de cuenta atrás (Proyecto 30). 163-168 Temporizador de cuenta atrás (Proyecto 30), 163-168 temporizador, 163-168 termistores,77 registrador de temperaturas USB (Proyecto 13), 77-83 termostato LCD (Proyecto 22), 125-131 termostato, 125-131 Theremin, 117 tipos de datos, 2 3 ,2 4 traductor de código Morse (Proyecto 3), 31-35 traductor de código Morse de gran intensidad (Proyecto 4), 35-38
zumbido de la red, 110
191
¡Diviértase creando 3 0 ingeniosos dispositivos controlados desde el ordenador! Este c u rio s o libro nos va m o s tra n d o de un m o d o fácil y a m e n o c ó m o realizar hasta 3 0 p ro y e c to s de electrónica y robótica utilizando c o m o base el sistema de d e s a rro llo del m ic r o c o n t r o la d o r A rd u in o . •
•
•
Construya entre otros estos curiosos dispositivos:
Enseña de un m o d o sencillo y d e ta lla d o los p rin c ip io s e le m e n ta le s de p r o g ra m a c ió n s im p lific a d a en C q ue va a nece sitar -no se requiere n in g ú n t ip o de c o n o c im ie n to s previos en p ro g ra m a c ió n .
• T raducto r de c ó d ig o m orse.
Utiliza ú n ic a m e n te c o m p o n e n te s y h e rra m ie n ta s al alcance de to d o s, accesibles en c u a lq u ie r d is trib u id o r.
• L u z para T.A.E.
Explica paso a paso c ó m o c o n e cta r una placa A r d u in o a su o rden ador, c ó m o p ro g ra m a rla y c ó m o c o n e c ta rle d is tin to s c o m p o n e n te s e le c tró n ic o s para crear hasta 3 0 curioso s d is p o s itiv o s q u e p o d rá m anejar con fa cilid a d desd e el orden ador.
• C ó d ig o de se g u rid ad de teclado.
D ivertido, s o rp re n d e n te y con el ú n ico lím ite de su p ro p ia im a g in a ció n !
3 0 P ro yecto s con A rd u in o :
• L u z e s tro b o s c ó p ic a de gran potencia.
• D a d o LED.
• M o n ito r de pulsaciones. • R e g istra d o r de d a to s de tem peratura USB. • O scilo sco p io . • A rp a d e luz. • Term ostato de LCD.
• •
Incluye in struccio nes paso a paso y prácticas ilustraciones. P ro p o rc io n a detalles de e squ em as y de c o n s tru c c ió n c o m p le to s de cada pro ye cto .
•
Explica los p rin c ip io s cie n tífic o s d e trá s de cada pro ye cto .
•
Elim ina to d a fru s tra c ió n p o r no p o d e r e n c o n tra r las piezas: to d o s los c o m p o n e n te s aparecen listados ju n to a posibles d is trib u id o re s .
• V e n tila d o r c o n tro la d o p or ordenador. • D e te c to r d e m entiras. • C e r r o jo m a g n é tic o . • C o n tr o l r e m o to po r in fra rr o jo s .
w w w . e d ito r ia le s tr ib o r . c o m
E S T R IB O R E D I T O R I A L