Arduino Libro de Proyectos
Arduino Libro de Proyectos
Arduino Libro de Proyectos
com
Traducido by Tino Fernández Cueto http://www.futureworkss.com
Lo autores del libro de proyectos de Arduino en inglés “ARDUINO PROJECTS BOOK”:
Proyectos y textos por Scott Fitzgerald y Michael Shiloh
Revisión del texto por Tom Igoe
ASESORES Y APOYO
Massimo Banzi, Gianluca Martino, Smart Projects
GRACIAS
Muchas gracias a toda la comunidad de Arduino por su continua
contribución, soporte y sugerencias.
También gracias en especial al equipo de Fritzing: algunas de las
ilustraciones de los componentes electrónicos utilizadas en este
libro son tomadas o modificadas del proyecto Open-Source de
Fritzing (www.fritzing.org)
Gracias de corazón a Paul Badger por la librería “CapacitveSensor”
usada en el Proyecto número 13
TRADUCCIÓN
Autor: Florentino Blas Fernández Cueto (Tino Fernández)
Sitio web: http://www.futureworkss.com
Bajo una Licencia Creative Commons Reconocimiento –
NoComercial -CompartirIgual 3.0 del 2015 por futureworkss
4 00 INTRODUCCIÓN
42 03 Medidor de enamoramiento
78 07 Teclado musical
102 10 Zoótropo
Usted esta rodeado por docenas de ellos cada día: se encuentran dentro de relojes,
termostatos, juguetes, mandos de control remoto, hornos de microondas, en
algunos cepillos de dientes. Solo hacen una tarea en concreto y si no se da cuenta de
que existen – lo cual es en la mayoría de las ocasiones – es porque están realizando
bien su trabajo. Han sido programados para detectar y controlar una actividad median-
te sensores y actuadores.
Los sensores “escuchan” el mundo físico. Convierten la energía que usted usa al
presionar un botón, o al mover los brazos, o al gritar, en señales eléctricas. Botones y
mandos son sensores que toca con sus dedos, pero existen otra clase de sensores.
Los actuadores hacen algo dentro del mundo físico. Convierten la energía eléctrica
en energía física, como la luz el calor y el movimiento.
Los microcontralodores “escuchan” a los sensores y “hablan” con los actuadores.
Ellos deciden que hacer basándose en el programa que tu escribes.
Sin embargo, los microcontroladores y la electrónica que se une con ellos son solo el
esqueleto de sus proyectos, tendrá que tener una serie de habilidades para poner algo
de carne en los huesos de este esqueleto.
Por ejemplo, en uno de los proyectos que sugerimos, tendrá que hacer una flecha y unir-
la a un motor para ponerlos juntos en una caja con un mando, de esta forma puede hacer
un indicador para decirle a la gente si está ocupado o no lo está. En otro proyecto pondrá
algunas luces y un interruptor de inclinación sobre un marco de cartón para hacer un
reloj de arena.
Arduino puede hacer que tus proyectos realicen su cometido pero solamente tu
puedes hacerlos hermosos. Nosotros te proporcionamos sugerencias en este libro
de como conseguirlo.
Arduino fue diseñado para ayudarte a hacer cosas. Para conseguirlo, intentamos que tan-
to la programación como los materiales electrónicos utilizados se reduzca lo mas posible.
Si decides que quieres saber más acerca de estos aspectos, existen muchas buenas
guías disponibles. Te proporcionaremos un par de referencias y puedes encontrar más
información a través de la página web de Arduino en: arduino.cc/starterkit
+
COMPONENTES Placa de pruebas – Una placa sobre la cual puede montar
componentes electrónicos. Es como un panel con agujeros,
con filas de agujeros que le permite conectar juntos cables
DE TU KIT y componentes electrónicos. También están disponibles
tarjetas sobre las que hay que soldar y también sin
necesidad de usar un soldador como la mostrada aquí.
Puente-H – Se trata de un circuito que permite controlar la Pantalla de Cristal Líquido (LCD) – Un tipo de pantalla
polaridad de la tensión aplicada a un carga. El puente-H en numérica o gráfica basado en cristal líquido. Los LCDs están
el kit es un circuito integrado, pero se puede construir a disponibles en varios tamaños, formas y estilos. El que se
partir de un número determinado de componentes incluye con este kit dispone de 2 filas con 16 caracteres en
discretos (resistencias, condensadores y transistores). cada una de ellas.
Resistencia
Diodo Zumbador piezo-eléctrico
Papel de color Cualquier conector con cable que tenga por lo menos un
interruptor o un pulsador, y que este dispuesto a usar,
valdrá pare realizar este trabajo
Tijeras
Cinta y goma
__________________________________________________________
La versión online de esta guía esta disponible en la siguiente dirección:
arduino.cc/guide
INSTALACIÓN EN Si usted está usando Linux, por favor visite la página web para ver como se
hace.
LÍNUX Arduino.cc/linux
COMUNICACIÓN Ahora que ya ha instalado el IDE de Arduino y esta seguro de que su ordenador puede
comunicarse con la placa, es el momento de comprobar si puede cargar un programa en
CON ARDUINO Arduino
1. acer doble click sobre la aplicación de Arduino para abrirla. Si el entorno IDE esta en un
lenguaje que no es el suyo, puede cambiarlo al seleccionar el menú “Archivo” y escoger
“Preferencias”. En la ventana que se abre y dentro del “Editor de idioma” escoger el
lenguaje que desee. Reiniciar el programa para que tenga efecto. Buscar “the
environment page ” dentro de esta página para obtener más información: arduino.cc/ide
2. Navegar para abrir un sketch de ejemplo que hace que el diodo led de la placa Arduino
parpadee (la palabra ´sketch´es como se llama a los programas en Arduino).
Seleccionar el menú “Archivo” escoger “Ejemplos” a continuación “01Basics” y por
último “Blink”.
3. Debería de abrirse una nueva ventana con un texto dentro. Dejar la ventana como esta
por ahora, y seleccionar su placa Arduino desde:
Herramientas > Placa
4. Escoger el puerto serie en donde su placa Arduino esta conectada desde el menú de:
Herramientas > Puerto
a) En Windows: Probablemente aparecerá con el número más alto de puerto
COM. No pasará nada si se equivoca al escoger este número de puerto,
simplemente no funcionará.
b) En Mac: Deberá aparecer algo parecido a /dev/tty.usbmoderm en este
sistema. Por lo general aparecen dos, seleccionar uno cualquiera de ellos.
5. Para cargar el Sketch que hace que el diodo led parpadee a su Arduino, presionar el
botón Subir en la esquina superior izquierda de la ventana. Ver la figura 1
6. Debe de ver una barra indicando el progreso de carga del sketch cerca de la esquina
inferior derecha del IDE de Arduino, y los diodos led de la placa Arduino con las etiquetas
TX y RX estarán parpadeando en el momento de la carga. Si la carga se ha realizado
correctamente, el IDE mostrará el mensaje SUBIDO en la esquina inferior izquierda.
7. A los pocos segundos de completar la carga del Sketh, debe de ver como el diodo led
amarillo, con la etiqueta L cerca, comienza a parpadear. Ver figura 2.
Si es así, ¡felicidades! Acaba de conseguir programar Arduino para que el diodo led de
la placa parpadee.
A veces su nuevo Arduino está ya programado con el Sketch de parpadeo, así que no
puede saber si realmente lo acaba de programar. En este caso, cambiar dentro de la
instrucción “delay” el tiempo que aparece entre paréntesis a 100, y volver a subir de
nuevo el sketch de parpadeo. Ahora el diodo led de la placa debe de parpadear más
rápido.
¡Felicidades! ¡Usted realmente tiene el control!. Ahora es el momento de comenzar con
el proyecto número 1. (No necesita guardar ninguno de los cambios que ha realizado.)
Si tiene problemas con alguno de los pasos descritos anteriormente, por favor mirar las
sugerencias para solucionar los problemas a través de la siguiente página web:
arduino.cc/trouble
Mientras se esta preparando para realizar los proyectos de este libro, puede dirigirse a la
siguiente página para obtener más información acerca del entorno de programación de
Arduino.
arduino.cc/en/Guide/Environment
Descubra: La teoría básica de la electricidad, como se trabaja con una placa de prueba y
como se conectan componentes en serie y en paralelo
Tiempo: 30 MINUTOS
Nivel: bajo
La electricidad es un tipo de energía, como el calor, la gravedad o la luz. La energía eléctrica fluye
través de los conductores, como los cables. Puede transformar la energía eléctrica en otras formas de
energía para hacer algo interesante, como encender una luz o hacer algo de ruido a través de un
altavoz.
Los componentes que podría usar para hacer esto, como altavoces o bombillas, son transductores
eléctricos. Los transductores transforman otros tipos de energía en energía eléctrica y viceversa. Los
componentes que transforman otras formas de energía en energía eléctrica son a menudo llamados
sensores, y los componentes que convierten la energía eléctrica en otras formas de energía se conocen
algunas veces con el nombre de actuadores. Construirá circuitos para hacer que la electricidad circule a
través de diferentes componentes. Se trata de circuitos en bucles cerrados mediante cables con una
fuente de energía (como una batería) y algún componente que haga algo útil con la energía; este
componente se suele llamar carga.
En un circuito, la electricidad fluye desde un punto con el potencial de energía más alto (normalmente
se conoce como el positivo o + de la fuente de energía) a un punto con el potencial de energía más bajo.
La masa (a menudo representado con el signo “-” o GND) es normalmente el punto con el menor
potencial de energía en un circuito. En los circuitos que va a construir la corriente eléctrica solo circula
en una dirección. Este tipo de circuitos se llaman de corriente directa o DC. Por otro lado en los circuitos
con corriente alterna (AC) la electricidad cambia de dirección 50 o 60 veces por segundo (dependiendo
de donde usted viva). Este es el tipo de electricidad que puede encontrar en un enchufe de la pared de
una habitación.
Existen una serie de términos con los cuales debe de familiarizarse cuando trabaje con circuitos
eléctricos. Corriente (medida en amperios, o amps; con el símbolo A) es la cantidad de carga eléctrica
que circula a través de un determinado punto de un circuito. Tensión (medido en voltios; con el símbolo
V) es la diferencia de energía entre un punto de un circuito y otro que se toma como referencia. Y por
último, resistencia (medida en ohmios; con el símbolo ) representa cuanto se opone un componente a
que la energía eléctrica fluya a través de él.
A través de estos proyectos, podrá ver dos vistas de los circuitos: una vista sobre
la placa de pruebas (como en la figura 5), que se parece a las cosas de su kit. La
otra es la vista de esquema (como en la figura 6), se trata de una forma más
abstracta de mostrar las relaciones entre los componentes de un circuito. Un
esquema no siempre muestra donde se colocan los componentes unos con
respectos a otros, pero sí que muestra como están conectados.
SUS PRIMEROS
COMPONENTES
Un LED, o diodo emisor de luz , es un componente que convierte la energía eléctrica en energía
luminosa. Los LEDs son componentes que tienen polaridad, esto quiere decir que solo circula corriente
a través de ellos en una sola dirección. El terminal más largo del LED es llamado ánodo, se conectará a
la alimentación. El terminal más corto es el cátodo y se conectará a masa. Cuando la tensión es
aplicada al ánodo del led y el cátodo está conectado a masa, el LED emite luz.
Una resistencia es un componente que se opone al paso de la energía eléctrica (ver el listado de
componentes para obtener información sobre las bandas de colores que tiene en un lado del cuerpo
de la resistencia). Transforma parte de la energía eléctrica en calor. Si se coloca una resistencia en
serie con un componente como un LED, el resultado será que el diodo led recibe menos energía al
consumir la resistencia esa energía que el LED no recibe. Esto permite poder alimentar a los
componentes con la cantidad de energía que necesitan. Puede usar una resistencia en serie con un
LED para evitar que reciba demasiada tensión. Sin la resistencia, el led podría brillar con gran
intensidad durante unos momentos, pero rápidamente se quemará.
MONTANDO EL
CIRCUITO
Va a usar la placa Arduino en este proyecto, pero solo como una fuente de
alimentación. Cuando la conecte a un puerto USB o a una batería de 9V,
Arduino suministrará una tensión de 5V entre su terminal de 5V y su terminal
de masa los cuales puede usar. 5V = 5 voltios, lo verá escrito de esta forma
muchas veces.
Una vez que todo esta preparado, presionar el botón. El diodo LED deberá
encenderse. ¡Le felicito, acaba de que conseguir que el circuito funcione! Una
vez que se haya cansado de presionar el botón para encender la luz, es el
momento de mejorar las cosas añadiendo un segundo botón.
Circuito en serie
LOS COMPONENTES EN SERIE SE CONECTAN UNO DESPUÉS DE OTRO
Una vez que ha desconectado la fuente de alimentación añadir un pulsador cerca del que
ya está montado en la placa de pruebas. Conectar un cable para conectarlos en serie
como se muestra en la figura 10. Conectar el ánodo (terminal largo) del LED al segundo
pulsador. Conectar el cátodo del LED a masa. Alimentar de nuevo la placa Arduino: ahora
para encender el LED, necesita presionar los dos pulsadores a la vez. Puesto que están en
serie, ambos deben ser cerrados para que el circuito funcione.
Los dos pulsadores están en serie. Esto quiere decir que circula
la misma corriente a través de ellos, así que ambos tienen que
ser presionados a la vez para que el LED se encienda
igura 10
Circuito en paralelo
LOS COMPONENTES EN PARALELO SE CONECTAN UNO AL LADO DEL OTRO
Ahora que ha dominado el arte de las cosas en serie, es el momento de conectar los
pulsadores en paralelo. Dejar los pulsadores y el diodo LED donde están, pero quitar la
conexión entre los dos pulsadores. Colocar un cable desde cada pulsador a la resistencia.
Unir el otro extremo de cada pulsador al diodo LED, como muestra la figura 12. Ahora
cuando se presiona cualquier botón, el circuito funciona y el diodo led se enciende.
ENTENDIENDO LA
LEY DE OHM
orr ente, voltaje y resistencia están todos relacionados. Cuando cambia uno d
stos darámetros en un circuito afecta a los demás. La relación que existe entre
ellos se conoce como ley de Ohm, en honor a Georg Simon Ohm quien la descubrió.
TENSIÓN (V) = CORRIENTE (I) x RESISTENCIA
Al medir intensidad (amperios) en los circuitos que vaya a montar, los valores
serán del rango de miliamperios. Un miliamperio vale la milésima parte de un
amperio.
En el circuito de la figura 5 se aplica una tensión de 5 voltios. La resistencia tiene un valor de 220
ohmios. Para averiguar la corriente que usa el LED, reemplazar los valores en la ecuación de la Ley de
Ohm. Por tanto I = V / R ; I = 5 / 220 = 0.023 amperios, este valor equivale a la 23 milésima parte de
un amperio, o 23 miliamperios (23mA) que consume el diodo LED. Este valor es casi el máximo con el
cual puede trabajar con seguridad este tipo de diodo LED, es por eso que se utiliza un resistencia de
220 ohmios.
Puede usar este proyecto de varias formas diferentes, o creando su propio pulsador (se puede realizar
con dos trozos de papel de aluminio con un cable), o creando una combinación de pulsadores y LEDs
en paralelo y en serie. ¿Qué sucede cuando coloca tres o cuatro LEDs en serie?, ¿qué sucede cuando
se colocan en paralelo?, ¿por qué funcionan de la forma en lo hacen?
La preparación!
Ahora que tiene los fundamentos de la electricidad bajo control, es el momento de pasar a controlar
cosas con su Arduino. En este proyecto, va a construir algo que podría ser una interface de una nave
espacial de una película de ciencia ficción de los años 70. Va a montar un panel de control con un
pulsador y luces que se encienden cuando presiona el pulsador. Puede decidir que indican las luces
“Activar hiper-velocidad” o “¡Disparar los rayos laser!”. Un diodo LED verde permanecerá encendido
hasta que pulse el botón. Cuando Arduino reciba la señal del botón pulsado, la luz verde se apaga y se
encienden otras dos luces que comienzan a parpadear.
Los terminales o pins digitales de Arduino solo pueden tener dos estados: cuando hay voltaje en un pin
de entrada y cuando no lo hay. Este tipo de entrada es normalmente llamada digital (o algunas veces
binaria, por tener dos estados). Estos estados se refieren comúnmente como HIGH (alto) y LOW (bajo).
HIGH es lo mismo que decir “¡aquí hay tensión!” y LOW indica “¡no hay tensión en este pin!”. Cuando
pone un pin de SALIDA (OUTPUT) en estado HIGH utilizando el comando llamado digitalWrite(), está
activandolo. Si mide el voltaje entre este pin y masa, obtendrá una tensión de 5 voltios. Cuando pone un
pin de SALIDA (OUTPUT) en estado LOW, está apagandolo.
Los pins digitales de Arduino pueden trabajar como entradas o como salidas. En su código, los
configurará dependiendo de cual sea su función dentro del circuito. Cuando los pins se configuran como
salidas, entonces podrá encender componentes como los diodos LEDs. Si se configuran como entradas,
podrá verificar si un pulsador está siendo presionado o no. Ya que los pins 0 y 1 son usados para
comunicación con el ordenador, es mejor comenzar con el pin 2.
MONTANDO EL
CIRCUITO
Figura
=ede crir la placa de preas cn na plantilla s inistrada en el >it% ; pede decrarla para
faricar s prp siste a de cntrl de la nave% 'as &ces $e se encienden se apa#1n n ns
dicen nada" per cand se c&can en n panel de cntrl se le c&ca na et$eta" estas s:
$e sae s para $e valen% ?@e $iere $e indi$e la &4 verdeA" ?$- s#Bifica el parpade
de &s 'E(s r)sA" Csted decideD
EL CÓDIGO
Algunas notas antes de comenzar
Fada prGHIaJa de KrdLinG tiene dGs fLncMGnes NOsicas principalesP Qas
fLncMGnes sGn partes de Ln prGHIaJa de GrdenadGr RLe eSecLta instrLccMGnes
especTUicasP Qas fLncMGnes tienen Ln VnicG nGJNre W sGn XllaJadasY cLandG
se necesitanP Estas dGs fLncMGnes principales en Ln prGHIaJa de KrdLinG sGn
llaJadas cGn setup() W loop()Z la cLales necesitan ser declaradasZ estG RLiere
decir RLe es necesarMG indicarle a KrdLinG [G RLe estas fLncMGnes \arOnP En la
sMHLiente pOHM]a W en sL parte sLperMGr dentrG del prMJer cLadrG se pLede
ver cGJG \aW RLe declarar estas fLncMGnes setup() W loop ()P QG prMJerG RLe
\aW RLe \acer antes de Jeterse en la parte principal del prGHIaJa es crear
Lna variaNleP Qas variaNles sGn nGJNres RLe se LtM[M^an para HLardar
infGrJacM_n dentrG de la JeJGria de KrdLinGP QGs va[Gres de las variaNles
pLeden caJNiar dependiendG de la instrLccMGnes RLe cGntenHa el prGHIaJaP
El nGJNre de las variaNles deNen de ser Lna descripcM_n de tipG de
infGrJacM_n RLe cGntienenP `Gr eSeJp[GZ Lna variaNle llaJada SwitchState
aestadG del pLlsadGrb le dice [G RLe estO HLardandGc el estadG de Ln pLlsadGrP
`Gr Gtra parteZ Lna variaNle llaJada XxY nG dice JLc\G acerca del tipG de
infGrJacM_n RLe HLardaP
`ara crear Lna variaNleZ es necesarMG declarar de RLe tipo se trataP dna
variaNle de tipo int HLardarO Ln nLJerG enterG ataJNMen llaJadG inteHfrbg
esG sMH]ifica RLe a[Jacena cLa[RLier nVJerG sin decMJalesP FLandG se
declara Lna variaNleZ nGrJa[Jente taJNMen se le asMH]a a la ve^ Ln va[Gr
inicia[P Qas declaracMGnes de la variaNles sieJpre deNen de fina[M^ar cGn Ln
pLntG W cGJa a;bP
l Las llaves }
Cualquier código que escriba entre llaves
será ejecutado cuando se llama a la
función
Mayúsculas y minúsculas
Poner atención a la hora de escribir en
mayúsculas y minúsculas dentro del
código. Por ejemplo, pinMode es el
nombre de una instrucción, pero pinmode
producirá un error.
Comentarios
Si alguna vez quiere usar el lenguaje
natural dentro del programa, puede
escribir un comentario.
Los comentarios son notas que se dejan
para recordar lo hace el programa,
además el microcontrolador ignora estos
comentarios. Para añadir un comentario
escribir antes dos líneas inclinadas // y a
continuación escribir lo que se desee
anotar. El microcontrolador ignorará
cualquier texto escrito después de estas
dos líneas.
Para conseguir que los LEDs rojos parpadeen cuando el pulsador este
presionado es necesario encenderlas y apagarlas dentro del bloque de la
instrucción else que se acaba de escribir. Para hacer esto, cambiar el código
tal y como se puede ver en el recuadro de la derecha (parte inferior de la
hoja siguiente).
COMO SE UTILIZA
Una vez que Arduino esta programado, el LED verde debe de verse encendido. Cuando
presione el pulsador, los LEDs rojos comenzarán a parpadear y el LED verde se apagará.
Intenta cambiar el tiempo de las dos instrucciones pelay(); observa que le pasa a los LEDs
y como la respuesta del sistema ha cambiado al variar la velocidad del parpadeo. Cuando
en el programa se llama a la instrucción pelay() hace que todo deje de funcionar durante
un tiempo. No se puede leer la posición del pulsador hasta que el tiempo establecido
dentro de la instrucción pelay() haya finalizado. Los retrasos dentro de un programa son a
menudo útiles, pero hay que fijarse al realizar un proyecto que su uso no es innecesario y
que no interfiere el funcionamiento de dicho proyecto.
¿Cómo podría conseguir que los diodos LEDs comiencen a parpadear cuando el programa comienza?
¿Cómo puedo hacer una interface para mis aventuras interesterales más grande, o más compleja con
LEDs y pulsadores
Cuando se inicia la creación de una interface para un proyecto, debemos pensar acerca de las
expectativas de las personas mientras lo están usando. Cuando presionen el pulsador, ¿querrán que
ocurra algo de inmediato? ¿Debe de existir un tiempo de retraso entre la pulsación y lo que Arduino
hace? Intenta ponerte en el lugar de las personas que lo van a usar en el momento de realizar el
diseño, y ver si cumple con las expectativas de lo que se espera del proyecto.
Los valores de las resistencias se indican mediante bandas de colores, según un código
que se desarrollo en 1920, cuando erá muy difícil escribir números en objetos tan
pequeños.
Cada color se corresponde con un número, como se puede ver en la tabla inferior. Cada
resistencia tiene entre 4 o 5 bandas. En las resistencias con 4 bandas, las dos primeras
bandas indican los dos primeros dígitos del valor de la resistencia, mientras que la tercera
banda de color indica el número de ceros que sigue a los dos primeros valores
(técnicamente esta tercera banda representa potencias de diez). La última banda
especifica la tolerancia: en el ejemplo inferior, se puede leer un valor de resistencia de
10K, y este valor puede variar en más o menos un 5% según esta tolerancia
Aunque los pulsadores e interruptores son útiles, existen muchas más cosas en el mundo físico que
solo encender y apagar algo. Aunque Arduino es una herramienta digital, es posible adquirir con él
información de sensores analógicos para medir parámetros físicos como la temperatura o el nivel de
iluminación. Para poder hacerlo, Arduino dispone en su interior de un Convertidor Analógico – Digital
(ADC), el cual transforma una señal analógica presente en su entrada en una señal digital. Las
entradas analógicas de Arduino son los pins A0 – A5 las cuales pueden proporcionar un valor entre 0 y
1023, que equivale a un rango de 0 voltios a 5 voltios, por ejemplo, si la tensión de una de las entradas
analógicas vale 2.5V el valor que proporciona el convertidor ADC vale 512.
Va a usar un medidor de temperatura para medir la temperatura de la piel. Este componente varía su
tensión de salida dependiendo de la temperatura que detecta. Dispone de tres terminales: uno se
conecta a masa, otro se conecta a la alimentación y el tercero produce una tensión de salida variable
que se aplica a Arduino. En el sketch de este proyecto, se va a leer la tensión de salida del sensor y
usarla para encender o apagar unos diodos LEDs, como indicadores de la temperatura de su piel (lo
enamorado que está). Existen varios modelos de sensores de temperatura. Este modelo, el TMP36, es
utilizado por que los cambios de la tensión de salida son directamente proporcionales a la temperatura
en grados Celsius.
El IDE de Arduino incorpora una herramienta llamada monitor serie el cual le proporciona información
de lo que el microcontrolador está haciendo. Utilizando el monitor serie, se puede conseguir
información acerca del estado de sensores, y así tener una idea de lo que sucede en un circuito y en el
código cuando se esta ejecutando.
Monitor serie
Figura 1
MONTANDO EL
CIRCUITO
tigura 2
También es posible acceder a otro ejemplo parecido desde el IDE de Arduino dentro de Archivos >
Ejemplos > 03Analog > Calibration
Conectar el cátodo (terminal corto) de cada diodo LED a masa a través de una
resistencia en serie de 220 ohmios. Conectar los ánodos de los LEDs a los
terminales 2, 3 y 4 respectivamente. Estos diodos serán los indicadores de este
proyecto.
Crear una interface para el sensor de manera que la gente pueda interactuar con él. Un cartón cortado
adecuadamente puede servir perfectamente para esta aplicación. Para realizar un diseño original puede
dibujar unos labios en la zona del sensor. También puede etiquetar los LEDs para darles algún
significado. Por ejemplo, si solo se enciende un led puede indicar que no está enamorado, dos LEDs
encendidos que le gusta alguien, y tres LEDS encendidos querrá decir que está muy enamorado.
EL CÓDIGO
Las constantes son similares a las variables (guardar información) las cuales permiten usar
un único nombre con los datos del programa, pero a diferencia de las variables su
contenido no se puede cambiar. Definir una constante con un nombre para la entrada
analógica que haga referencia al tipo de pin que se trata (Pin_del_Sensor), y definir otra
constante con un nombre para la temperatura de referencia
(Temperatura_de_Referencia). Para cada dos grados sobre esta temperatura de
referencia un led se enciende, por ejemplo, si la temperatura de referencia es de 20
grados, con 22 grados se enciende el primer led, con 24 grados el segundo y así
sucesivamente. En la lección anterior vimos el tipo de datos INT (página 36 segundo
párrafo), usado en este programa para identificar cual es el pin analógico de entrada de
Arduino en donde se conecta la salida del sensor de temperatura. Por otro lado el valor
de la temperatura de referencia se guarda como una constante en coma flotante. Es tipo
de número tiene un punto decimal, y es usado para números que se pueden ser
expresados como fracciones o para expresar números con decimales.
La siguiente instrucción for() define algunos de los pins como salidas digitales dentro de
un bucle. Algunos de estos pins ya se han usado con los LEDs en el proyecto anterior.
Ahora en lugar de escribir cada instrucción pinMode() para cada uno de estos pins, se
utiliza la instrucción for(), la cual ejecuta un bucle definiendo las características de cada
pin rápidamente. Se trata de una forma de ahorrar tiempo y líneas de código si es
necesario definir las propiedades de muchos pins a la vez. La instrucción for() se ejecuta
en un bucle donde se definen las características de los pins 2 a 4 consecutivamente,
definiendo cada pin como una salida digital (pinMode(NumeroPin, OUTPUT);) y además
en estado bajo (digitalWrite(NumeroPin; LOW)).
El siguiente bloque de código es el programa en sí, el cual comienza con la función loop().
Aquí se usa una variable llamada Valor_del_Sensor en donde se guarda la lectura del
sensor. Para poder leer la información del sensor, se utiliza la instrucción analogRead() la
cual toma un argumento: de que pin se va a tomar la información de lectura del sensor;
siendo este argumento la constante Pin_del_Sensor que se define al comienzo del
programa. El valor leído, el cual esta comprendido entre 0 y 1023, representa
indirectamente la tensión que existe en ese pin (para “0” son 0 voltios y para “1023” son
+5 voltios).
Usando yzs matemáticas, es posible averiguar la tensión real que existe en el pin. La
tensión será una valor entre 0 y 5 voltios, y podrá tener una parte fraccionaria (por
ejemplo, podría ser 2.5 voltios), por eso será necesario almacenar este valor de tensión
dentro de una variable con coma {lotaute. Se crea una variable llamada |eus}o~ en donde
se guarda este número. Se divide el valor que almacena la variable alorele~or por
1024 y se multiplica por 5. El resultado obtenido representa la tensión que existen en el
pin.
Al igual que se hizo con el valor del sensor, se mostrará el valor de esta tensión dentro de
la ventana del monitor serie.
Una vez leída la temperatura real del sensor también se puede mostrar este valor en la
ventana del monitor serie. Puesto que la variable de temperatura es lo último que se va a
“imprimir” en el monitor serie dentro de este bucle, se va a usar un comando ligeramente
diferente: er}al
r}~tlu. Este comando crea una nueva línea en el monitor serie después
de enviar el valor que se va a mostrar. De esta manera se pueden ver mejor los resultados
de las medidas al mostrarse los datos en líneas independientes.
Con la temperatura real, ahora se puede configurar la instrucción }{else para encender
los LEDs. Utilizando como punto de partida la temperatura de referencia, se encenderá un
LED por cada dos grados que se incremente la temperatura sobre la temperatura de
referencia. Se va a buscar un rango de valores mientras se mueve a través de la escala de
temperatura, esto quiere decir que el segundo LED deberá de encenderse si la
temperatura está cuatro grados por encima de la temperatura de referencia, y el tercer
LED se encenderá si está sobre seis grados.
Si la temperatura está entre dos y cuatro grados sobre la temperatura de referencia, este
bloque de código también enciende el LED conectado al pin 3.
El convertidor analógico digital puede leer demasiado rápido, así que hay que introducir
una pequeña pausa al final del programa (lazo loop()). Si no existiese esta pausa se
producirán errores en los valores que se leen.
USARLO
Una vez cargado el programa dentro de la tarjeta Arduino, hacer click sobre el icono del
monitor serie. Debe de ver que aparece un listado de valores en el siguiente formato:
Valor del sensor: 200, Voltios; .70, grados C:17
Coloque sus dedos sobre el sensor mientras está colocado sobre la placa de pruebas y ver
que valores aparecen en el monitor serie. Tomar nota de la temperatura que el sensor
detecta cuando está al aire.
Crear un interface para que dos personas puedan comprobar la compatibilidad entre ambos. Debe de
decidir de que tipo de compatibilidad se trata, y como actuarán sobre el sensor. ¿Quizás deberán de
juntar sus manos para generar el suficiente calor? ¿Tal vez tengan que abrazarse? ¿Que piensa?
cr u o diodo rdn ud r dirtido ro udn ur r tnur
unt u u tn o r roducir un c d coor Se odr¡ nr u oo
cutión d dinuir tnión u ic un r con¢uir u u u dnc£
Arduino no puede variar la tensión de salida de sus pins, solo puede suministrar 5V. Por lo tanto es
necesario usar una técnica llamada Modulación por Ancho de Pulso o PWM (en inglés) para desvanecer
suavemente la luz de los LEDs. PWM consigue que un pin de salida varíe rápidamente su tensión de alto
a bajo (entre 5 y 0V) durante un periodo fijo de tiempo. Este cambio de tensión se realizada tan rápido
que el ojo humano no puede verlo. Es similar a la forma en las que se proyectan las películas de cine, se
pasan rápidamente un número de imágenes fijas durante un segundo para crear la ilusión de
movimiento.
Cuando la tensión del pin cambia rápidamente de alto (I¤) a bajo (O¥) durante un
periodo fijo de tiempo, es como si se pudiese variar el nivel de la tensión de ese pin. El
porcentaje de tiempo que un pin está en estado I¤ con respecto al tiempo total
(periodo) se conoce con el nombre de relación cíclica. Cuando el pin esta en I¤ durante
la mitad del periodo y en estado O¥ durante la otra mitad, la relación cíclica es del 50%.
Una relación cíclica baja hace que el diodo LED tenga una luz mucho mas tenue que con
una relación cíclica más alta.
La tarjeta Arduino Uno dispone de seis pins que se pueden usar con PWM (los pins
digitales 3,5,6,9,10 y 11), los cuales se pueden identificar por el símbolo ~ que aparece
junto a su número sobre la tarjeta.
Para las entradas en este proyecto, se usarán foto resistencias (sensores que cambian su
resistencia dependiendo de la cantidad de luz que llegue a su superficie, también se
conocen con el nombre de foto células o resistencias dependientes de la luz LDR). Si
conecta uno de sus pin a Arduino, se puede medir el cambio de resistencia al analizar los
cambios de tensión en ese pin.
MONTANDO EL
CIRCUITO
®olo¦ar la¨ tre¨ ¯oto re¨icten¦ia¨ en el ¦entro °¬e d±²ide la ©la¦a de ©r¬eba¨«
¦omo ¨e mue¨tra en la ¯igura 1. Conectar un terminal o pin de cada foto
resistencia directamente al positivo de la alimentación. El otro extremo se
conecta a una resistencia de 10 Kiloohmios la cual se conecta a masa. Esta
resistencia está en serie con la foto resistencia y juntos forman un divisor de
tensión. La tensión que aparece en el punto de unión de estos dos componentes
es proporcional a la relación entre sus resistencias, según la Ley de Ohm (ver el
proyecto número 1 para saber más sobre la Ley de Ohm). Como el valor de la
foto resistencia cambia cuando la luz incide en ella, la tensión en este punto de
unión también cambia. Conectar el punto de unión entre la foto resistencia y la
resistencia de 10K al pin de entrada analógico A0, A1 y A2 respectivamente
usando un cable para realizar la conexión.
Coger las tres láminas de papel celofán y colocar cada una sobre cada foto
resistencia. Colocar el celofán rojo sobre la foto resistencia conectada a la
entrada A0, el verde sobre la que se conecta a la entrada A1, y el azul sobre la
conectada a la entrada A2. Cada uno de estos papeles de colores actúan como
filtros de luz y solo dejan pasar una determinada longitud de onda (color) hacía el
sensor sobre el que están encima. El papel de color rojo solo deja pasar la luz
roja, el papel verde solo deja pasar la luz verde, y el papel azul solo deja pasar la
luz azul. Esto permite detectar los niveles relativos de color de la luz que reciben
los sensores.
El LED con cuatro pins es un diodo LED RGB de cátodo común. Este diodo LED
tiene los elementos rojo, verde y azul separados en su interior, y un masa común
(el cátodo). Al aparecer una diferencia de tensión entre el cátodo y las tensiones
de salida de los pins de Arduino en formato PWM (los cuales se conectan a los
ánodos del LED a través de unas resistencias de 220 ohmios), será posible hacer
que el LED varíe la iluminación de sus tres colores. Observar que el pin más largo
del LED, insertado en la placa de pruebas, se conecta a masa (ver Figura 1).
Conectar los otros tres pins del LED a los pins digitales 9,10 y 11 de Arduino y en
serie con cada uno de ellos una resistencia de 220 ohmios. Asegurarse que cada
cable del LED se conecta correctamente a su pin PWM correspondiente, tal y
como se puede ver en la Figura 1 de la izquierda.
EL CÓDIGO
´eµinir como variables de tipo constante y entero los pins que se van a usar para las
entradas y las salidas, y así saber que LED se enciende según el color de la luz que incide
en el sensor correspondiente. Para el sensor que detecta la luz roja el LED de color rojo, el
LED verde para el sensor de luz de color verde y el LED azul para el sensor de luz azul.
Añadir variables para almacenar los valores leídos de los sensores así como otras
variables en donde almacenar estos valores después de realizar una conversión para
poder variar la luminosidad de los LEDs. Se pueda usar el tipo de variable entero para
todas estas variables.
En la parte de ejecución del bloque del programa en sí “loop()” se leen los valores de los
sensores en las entradas analógicas A0, A1 y A2 mediante la instrucción analogRead() y a
continuación se almacenan estos valores en las variables que comienzan con el nombre
“ValorSensor...”. Se coloca una instrucción de retraso “delay()” entre cada instrucción de
lectura analógica “analogRead()” para que el convertidor analógico-digital (ADC) pueda
realizar su trabajo.
La instrucción que cambia el brillo del diodo LED a través de PWM se llama analogWrite().
Necesita dos argumentos, el pin sobre el que se escribe y un valor comprendido entre 0 y
255. Este segundo número representa la relación cíclica que aparecerá en el pin que se
especifique como salida en Arduino. Un valor de 255 colocará en estado alto (HIGH) el pin
de salida durante todo el tiempo de esta señal, haciendo que el diodo LED que esta
conectado a este pin brille con su máxima intensidad luminosa. Para un valor de 127
colocará el pin a la mitad del tiempo que dura la señal (periodo), haciendo que el diodo
LED brille menos que con 255. O se puede fijar el pin en estado bajo (LOW) durante todo
el periodo, de manera que el diodo LED no alumbrará. Los valores de lectura del sensor
de 0 a 1023 hay que convertirlos a valores de 0 a 255 para trabajar dentro del rango de
PWM, como se menciona al comienzo de este párrafo. Por tanto los valores de lectura del
sensor hay que dividirlos por 4 y los valores convertidos entre 0 y 255 se utilizarán con la
instrucción analogWrite() para variar el brillo de los diodos LEDs.
Mostrar en el monitor serie un mapa de valores después de dividir por 4 las lecturas de
los sensores
COMO SE UTILIZA
Una vez que Arduino ha sido programado y conectado, abrir el monitor serie. El diodo LED
probablemente mostrará un color blanco apagado, dependiendo del color de la luz
predominante en la habitación donde este montado este proyecto. Fijarse en los valores
de los sensores que aparecen en el monitor serie, si se encuentra en un entorno con una
iluminación que no varía, los números que aparecen apenas van a variar, se mantendrán
en valores bastantes constantes.
Apagar la luz de la habitación en donde está el circuito con Arduino montado y ver como
varían ahora los valores de los sensores en el monitor serie. Usando una linterna, iluminar
cada sensor (LDR) individualmente y observar como los valores cambian en el monitor
serie, además de ver como cambia el color que emite el diodo LED. Cuando se cubre las
foto resistencias con papel celofán de color, estos sensores solo reaccionarán a una luz de
una determinada longitud de onda, es decir, que solo son sensibles a un tipo de color en
consonancia con el color del papel celofán que tienen encima. De esta forma se consigue
cambiar cada uno de los colores que emite el diodo LED independientemente.
Puede fijarse que la salida de la foto resistencia no trabaja dentro de todo el rango de 0 a 1023. Esto
esta bien en este proyecto, pero para obtener una explicación más detallada sobre como calibrar el
rango de lectura del sensor ver el proyecto número 6.
Probablemente se habrá fijado que la variación del brillo del diodo LED no es lineal. Cuando el LED
esta a la mitad del valor de PWM a 127 (mitad del brillo), aparece mucho menos brillante. Esto es
debido a que nuestros ojos no perciben las variaciones del brillo linealmente. El brillo del LED no solo
depende del valor de la instrucción analogWr¸te¹º, sino también de la distancia de la luz desde el
difusor, la distancia de los ojos a la luz, y el brillo del LED en relación con otra luz que pueda haber en
la habitación.
¿Como podría usar este proyecto para saber si en el exterior hace un buen día mientras usted está
trabajando en el interior? ¿Que otros tipos de sensores, en lugar de las resistencias LDR, se pueden
usar para controlar los colores del diodo LED?
Aunque el diodo LED no deja de ser un lámpara, la luz que produce nada tiene que ver con la luz de una
lámpara. Existen varias formas de difuminar la luz del diodo LED para que se parezca a la luz que
produce una bombilla de incandescencia. Realizar un agujero en una pelota de ping pong (figura 4)para
colocarla encima del diodo LED y de esta forma difuminar la luz que produce. Otra forma de hacerlo es
colocando pegamento transparente sobre el LED o lijando su superficie. No importa que procedimiento
utilice, se va a perder un poco de brillo cuando se difumine la luz, pero al final probablemente obtendrá
una luz mucho más agradable.
Ya no solo se limita a encender o apagar luces, sino que ahora tiene el control
sobre como variar la iluminación de una luz. analogWrite() es la función que
permite a los componentes conectados a los pines PWM 3, 5, 6, 9, 10 o 11,
variar la relación cíclica de la señal aplicados a ellos.
Los servomotores son un tipo especial de motores que no giran alrededor de un círculo continuamente,
sino se mueven a una posición específica y permanecen en ella hasta que se les diga que se muevan de
nuevo. Los servos solo suelen girar 180 grados (la mitad de un círculo). Combinando uno de estos
motores con un pequeño cartón hecho a mano, será capaz de decirle a la gente si deberían venir y
preguntar si necesita o no ayuda para su próximo proyecto.
De la misma forma que se ha usado PWM y los LEDs en el proyecto anterior, los servomotores necesitan
un número de impulsos para saber que ángulo deben de girar. Los impulsos siempre tienen los mismos
intervalos (periodo), pero el ancho de estos impulsos puede variar entre 1000 y 2000 micro segundos. Si
bien es posible escribir código para generar estos impulsos, el software de Arduino incluye una librería
que permite controlar el motor con facilidad.
Ya que el servomotor solo gira 180 grados y la entrada analógica varía de 0 a 1023, es necesario usar una
función llamada map() para cambiar la escala de los valores que produce el potenciómetro.
Una de las grandes cosas que tiene la comunidad de Arduino es el talento de la gente quien aumenta su
funcionalidad a través de software adicional. De esta forma es posible que cualquiera escriba librerías
para aumentar la funcionalidad de Arduino. Existen librerías para una gran variedad de sensores y
actuadores y otros dispositivos con la que los usuarios han contribuido en esta comunidad. El software
libre extiende la funcionalidad de un entorno de programación. El software de Arduino viene con un
número de librerías que son útiles para trabajar con el hardware o lo datos. Una de las librerías incluida
esta diseñada para ser usada con servomotores. Cuando se escriba el código será necesario importar
esta librería y así se podrá controlar el servomotor.
MONTANDO EL
CIRCUITO
EL CÓDIGO
Áara Âsar la ÃÄÅrerÆÇ del serÈomotor Érimero tiene ÊÂe imÉortarlaË Ìsto aÍade nÂeÈas
ÎÂnciones al sÏetcÐ desde la ÃÄÅrerÆÇË
Áara reÎerirse a la ÃÄÅrerÆÇ serÈoÑ es necesario crear Ân nomÅre de esta ÃÄÅrerÆÇ en Âna
ÈariaÅle ÒÓÔServoÕË Ìsto se conoce con el nomÅre de Ân objeto. ÖÂando se Ðace estoÑ se
crea Ân nomÅre ×nico ÊÂe tendrá todas las ÎÂnciones Ø caÉacidades ÊÂe la ÃÄÅrerÆÇ serÈo
ÉoseeË Ù Éartir de este ÉÂnto en el ÉroÚÛamaÑ cada ÈeÜ ÊÂe se Âtilice el nomÅre MiServoÑ
se Éodrá Âsar todas esas ÎÂnciones Ø caÉacidades de la ÃÄÅrerÆÇ serÈoË
Áoner Âna ÈariaÅle de tÄÉo constante entero con Ân nomÅre Éara el Éin ÊÂe se Âne al
ÉotencÄÝmetro ÒPinPotÕÑ Ø nomÅres de ÈariaÅles de tÄÉo entero Éara ÚÂardar el Èalor de la
entrada anaÃÝÚÄÞa ÒValorPotÕ Ø el Èalor del ánÚÂlo ÒAnguloÕ al ÊÂe el serÈomotor se deÅe
de moÈerË
ßentro de la ÎÂncÄÝn setup() es necesario decirle a ÙrdÂino ÊÂe Éin está Ânido al
serÈomotor
àe inclÂØe Âna comÂnicacÄÝn serie con el ordenador Éara ÈerÄÎicar los Èalores del
ÉotencÄÝmetro Ø Èer como se conÈierten estos Èalores a ánÚÂlos Éara el serÈomotorË
ßentro de la ÎÂncÄÝn loop()Ñ se Érocede a leer la entrada anaÃÝÚÄÞa ÒÙáÕ donde se conecta
el terminal central del ÉotencÄÝmetro Ø a continÂacÄÝn mostrar este Èalor en el monitor
serie Ø en la Éantalla de Ân ordenadorË
Áara crear Èalores a Éartir de la entrada anaÃÝÚÄÞa ÊÂe se ÉÂedan Âsar con el serÈomotorÑ
se ÉÂede Ðacer de Âna Îorma mÂØ Îácil Âsando la instrÂccÄÝn map()Ë Ìsta instrÂccÄÝn
traÅaâa con escalas de n×merosË Ìn este caso camÅia la escala de Èalores entre áãäáåæ a
Èalores entre áãäçèË éecesita cinco arÚÂmentosê el n×mero ÊÂe deÅe de ser escalado Òen
este caso dentro de la ÈariaÅle ëalorÁotÕÑ el Èalor mÆìimo de la entrada ÒáÕÑ el Èalor
máíimo de la entrada ÒäáåæÕÑ el Èalor mÆnimo de la salida ÒáÕ Ø el Èalor máíimo de la
salida ÒäçèÕË Ìl resÂltado se ÚÂarda dentro de la ÈariaÅle ÙnÚÂloË
COMO SE UTILIZA
ñna òeó ôõe ördõino ÷a sido øroùúamado û alimentadoü aýrir el monitor serie desde el
IDþ dÿ Arduino Dÿbÿrá de mostrar una serie de valores similares a estos
õanpo se gira el potenciómetro se debe de ver como estos números cambian, además
también el servomotor debe de girar a una nueva posición. Observar la relación entre el
valor numérico de la variable del potenciómetro (Posición del potenciómetro) y el valor
del ángulo en el monitor serie (Angulo) con respecto a la posición real del servomotor.
Estos valores deberán de estar en concordancia con el giro del potenciómetro, es decir,
cuando el potenciómetro esté girado en sentido contrario a las agujas del reloj, en un
extremo, el valor valdrá cero y el servomotor estará en una posición, en cambio al girar el
potenciómetro hasta el otro extremo, deberá de indicar un valor de 1023 y un ángulo de
179 de manera que el servomotor se mueva 180 grados en el sentido de las agujas del
reloj.
Hay que indicar que el uso del potenciómetro como una entrada analógica permite variar
el rango completo entre 0 y 1024. Esto los hace muy útiles para probar proyectos que
utilicen entradas analógicas.
Los servomotores son motores con un número de engranajes y algunos circuitos en su interior. La
mecánica del interior proporciona una realimentación al circuito, de manera que sabe siempre cual es
su posición. Si bien pueda parecer que tiene limitado su rango de acción, es posible que consiga
realizar una gran variedad de diferentes movimientos añadiendo mecanismos adicionales. Hay una
serie de recursos que describen este tipo de mecanismos en detalle como robives.com/mechs y en el
libro Making Things Move de Dustyn Roberts.
El potenciómetro no es el único sensor que puede usar para controlar la posición del servomotor.
Usando la misma configuración física y un sensor diferente (por ejemplo, una flecha que se mueva
para indicar varios estados de ánimo), ¿qué clase de indicador se podría realizar? ¿Cómo se podría
modificar el proyecto para que trabajará con temperatura (como el medidor de enamoramiento) en
lugar de usar un potenciómetro? ¿Podría indicar la hora del día usando una foto resistencia LDR?
¿Cómo habría que cambiar la escala de los valores de estos sensores para que funcionasen con el
servomotor?
Los servomotores son fáciles de controlar por Arduino usando una librería, la
cual es una colección de código que aumenta las posibilidades del entorno de
programación. Algunas veces es necesario para poder usar los valores
cambiarlos de una escala a otra.
Ahora que el proyecto esta en marcha y se puede mover, ya puede indicar a las personas si esta
dispuesto a ayudarles en sus proyectos o por el contrario prefiere estar solo y que no le molesten.
Con unas tijeras, cortar un trozo de cartón con la forma de una flecha. Colocar el servomotor a 90
grados (verificar el valor del ángulo en el monitor serie sino está seguro). Pegar la flecha de cartón sobre
el brazo del servomotor de manera que tenga la misma orientación que el cuerpo. Ahora será posible
girar la flecha 180 grados cuando se gire el potenciómetro de un extremo a otro. Disponer de un trozo
de papel más grande que el servomotor con la flecha encima y dibujar medio círculo sobre este papel.
En uno de los extremos del círculo escribir “No entrar”. En el otro extremo escribir “Puede pasar”. En
medio del arco escribir “Por favor llamar”. Colocar el servo con la flecha encima del papel. ¡Felicidades,
ahora tiene una manera de decirle a la gente lo que está de ocupado con sus proyectos!
Un Theremin es un instrumento que genera sonidos mediante el movimiento de las manos de un músico
alrededor de este instrumento. Probablemente habrá oído alguno de ellos en películas de terror. El
Theremin detecta donde se produce el movimiento de la mano del artista en relación a dos antenas al
poder leer la variación de la carga capacitiva de estas antenas. Las antenas se conectan a un circuito
analógico que crea los sonidos. Una de las antenas controla la frecuencia del sonido y la otra controla el
volumen. Aunque Arduino no puede producir de una forma exacta los misteriosos sonidos de este
instrumento, si que es posible emularlos usando la función tone(). La figura 1 muestra los diferentes
tonos que se producen al usar analogwrite() y tone(). Esto posibilita que un transductor como pueda ser
un altavoz o un zumbador se mueva hacia delante y hacia atrás a diferentes velocidades.
Figura 1
En lugar de usar sensores capacitivos con Arduino, se utilizará una foto resistencia LDR para detectar
la cantidad de luz. Al mover las manos sobre el sensor, se variará la cantidad de luz que llega a la
superficie de la LDR, como se hizo en el proyecto número 4 (lámpara de mezcla de colores). El cambio
de tensión en el pin de una entrada analógica de Arduino (A0) determinará la frecuencia de la nota
que se va a escuchar.
La foto resistencia LDR se conectará a Arduino usando un divisor de tensión tal y como se hizo en el
proyecto número 4. Probablemente se habrá dado cuenta de que en el proyecto 4 la lectura que se
obtenía al usar analogea no cubría todo el rango de 0 a 1024. La resistencia fija conectada a masa
limita la parte baja del rango y el brillo de la luz sobre la LDR limita la parte superior de este rango. En
lugar de configurar el circuito para limitar el rango, se calibran las lecturas del sensor entre los valores
alto y bajo, convirtiendo estos valores a frecuencias sonoras usando la función y de esta forma
conseguir el mayor rango posible del Theremin.
MONTANDO EL
CIRCUITO
gnra 9
lamente e d
rá controlar la frecuencia a ue no e duede controlar el
lumen uando ruino,
e d
ible cambiar manualmente el nivel de tensión que le llega al zumbador. ¿Qué sucede si se
conecta un potenciómetro en serie con el zumbador y conectado al pin 8? ¿Y si se colocase otra foto
resistencia?
Coger el zumbador y conectar uno de sus pins a masa, el otro pin conectarlo al
pin digital 8 de Arduino.
Colocar la foto resistencia LDR en la placa de pruebas, conectar uno de sus pins
a la columna de alimentación de +5V a través de un cable rojo. Conectar el otro
extremo de la LDR al pin analógico A0 de Arduino y a masa a través de una
resistencia de 10 Kilo ohmios. Este circuito es el mismo que el divisor de tensión
del proyecto número 4.
EL CÓDIGO
Crear una aria le
alorde1Sensor ue arde la lectura del alor de la f!t! resistencia
"#$ usando la instrucc%&n analog'ea()*+ , c!ntinuac%&n- crear dos aria les, una para
almacenar el alor m./imo 0 !tra para guardar el valor mínimo (ValorMaximodelSensor y
ValoMinimodelSensor). Se establece un valor inicial de 1023 para el valor mínimo y un
valor de 0 para el valor máximo. Cuando se ejecute el programa por primera vez, se
comparan estos números con los valores obtenidos en la LDR, para encontrar de esta
forma los valores máximo y mínimo del rango y poder así calibrar el sensor.
Crear una constante llamada P1n2e(. Se utilizará para indicar que el sensor está siendo
calibrado mientras el diodo LED de la placa Arduino permanezca encendido. Este diodo
LED integrado se conecta al pin digital 13 de Arduino.
Dentro de la función 3et45)*6 y usando la instrucción 51n7o(e)*6 definir el pin del led
(PinLed) como una salida (89:P9:) y encender este diodo LED.
Los siguientes pasos calibrarán los valores máximo y mínimo del sensor. Se utiliza la
instrucción ;<1le() para ejecutar otras instrucciones varias veces durante 5 segundos.
;<1le() ejecuta las instrucciones que contiene durante este tiempo hasta que ciertas
condiciones se cumplen. Junto con la instrucción ;<1le() se utiliza otra instrucción, =1lls(),
para saber el tiempo actual. Esta instrucción informa del tiempo que Arduino lleva
funcionando desde que se ha sido encendido o desde que se hizo un reset.
Dentro de la función loo5)*, se realiza la lectura del valor del sensor; si este valor es
mayor que el valor que almacena la variable ValorMaximoSensor (inicialmente 0), se
actualiza el valor de esta variable con el valor leído del sensor. Al igual ocurrirá con la
variable que almacena el valor minimo (ValorMinimoSensor, inicialmente con un valor de
1024), si el valor leído del sensor es menor esta variable almacenará este valor.
Cuando los 5 segundos han pasado, la ejecución en bucle de la instrucción while() llegará
a su fin. El diodo LED conectado al pin 13 de Arduino dejará de alumbrar, indicando que la
calibración ha finalizado. Se utilizarán los valores máximo y mínimo que se acaban de
guardar para establecer el rango de frecuencias en la parte principal del programa. Estas
frecuencias son las que se van a oír a través del zumbador.
while()
arduino.cc/while
Crear una variable llamada tono. El valor que se almacena dentro de esta variable tono se
obtiene de cambiar de rango el valor leído del sensor y que está guardado dentro de la
variable ValordelSensor. Usar las variables ValorMaximoSensor y ValorMinimoSensor
para establecer los límites del rango que se va a cambiar de escala usando la función
map(). Los valores iniciales de salida de la nueva escala están comprendidos entre 50 y
4000. Estos números representan el rango de frecuencias que Arduino va a generar a
través del zumbador, es decir, producirá frecuencias comprendidas entre 50 y 4000 ciclos
por segundo.
A continuación, se ejecuta la función tone() la cual produce un sonido. Esta función
necesita de tres argumentos: el número de pin de salida que producirá el sonido (en este
caso el pin 8) que frecuencia se va a generar (determinada por la variable tono) y durante
cuanto tiempo va a sonar esa nota (probar con 20 mili segundos para comenzar).
COMO SE UTILIZA
Nada mas alimentar la placa Arduino se genera una ventana de 5 segundos para calibrar
el sensor; esto se indica por que el diodo LED amarillo de la placa se enciende durante
todo este tiempo. En este momento acercar la mano a la foto resistencia, a continuación
alejar la mano para no hacer sombra a dicha foto resistencia, de esta manera el programa
establece los límites del rango de trabajo en función de la iluminación ambiente. Los
movimientos de la mano en el momento de realizar la calibración deberán ser lo más
parecidos a los movimientos que se van a realizar después de la calibración para generar
los sonidos.
E@ rango que se define dentro de la función map() es bastante amplio, se puede intentar modificar
estos valores para conseguir que las frecuencias que se generan se ajusten más a su gusto sobre un
estilo musical.
La función tone() trabaja de una forma muy parecida a PWM cuando se usa con la instrucción
analogWrite(), pero con la diferencia que al usar esta instrucción la frecuencia de los impulsos
generados no cambia: es posible cambiar el ratio de los impulsos durante este periodo de tiempo y así
poder variar la relación cíclica sin variar la frecuencia (ver figura 1, PWM 50 y PWM200). Con tone()
también se envían impulsos pero además se puede cambiar la frecuencia de estos impulsos. La
función tone() siempre produce impulsos con una relación cíclica del 50%, (la mitad del tiempo la
señal está en estado alto y la otra mitad está en estado bajo), puede ver un ejemplo en la figura 1 con
los tonos de 440 y 880 (página 71). Con tone() no se puede variar la relación cíclica de una señal.
Al utilizar en este proyecto varias resistencias y pulsadores conectados a una entrada analógica de
Arduino para generar diferentes tonos, se está construyendo algo que se conoce con el nombre de
circuito mixto con resistencias.
Esta es una forma de leer un número de pulsadores usando una entrada analógica. Es una técnica útil
sino entiende como funcionan las entradas digitales. Se conectan un número determinado de
pulsadores en paralelo y conectados a la entrada analógica A0 de Arduino. Cada uno de estos
pulsadores se conectan al positivo de la alimentación a través de una resistencia. Cuando se presiona un
pulsador, aparece una tensión en el terminal de entrada analógico A0 de Arduino, y según que pulsador
se presione esta tensión será diferente. Si se presionan dos pulsadores al mismo tiempo se consigue en
la entrada analógica un tensión que será proporcional al valor de la resistencias en paralelo de los dos
pulsadores presionados. Al final se trata de varios divisores de tensión conectados en paralelo los cuales
se activan cada vez que se presione un pulsador.
MONTANDO EL
CIRCUITO
Piensa en como mejorar este proyecto añadiendo un dibujo que imite un teclado. Mientras que los
sintetizadores analógicos antiguos no tenían un diseño atractivo, este teclado es elegante y además
digital. Preparar un pequeño trozo de cartón que se pueda cortar para acomodar los pulsadores y el
zumbador. Colocar una etiqueta a cada tecla para saber que nota suena en el momento de pulsarla.
EL CÓDIGO
EF eGte drogl amaH GerI Fecesario memor1zar las JrecueFcias de las notas musicales Kue Ge
vaF a oír cuando se presione un pulsador. Se van a utilizar las frecuencias medias que se
corresponden con la cuarta octava de las notas musicales de un piano, C4, D4, E4 y F4,
cuyas frecuencias son 262, 294, 330 y 349 ciclos por segundo o hercios. Para poder hacer
todo esto se utiliza una nueva clase de variable llamada matriz.
La matriz es una forma de almacenar diferentes valores que están relacionados unos con
otros, como las frecuencias de una escala musical, usando un solo nombre. El uso de una
matriz permite acceder a la información que ella almacena de una forma rápida y
eficiente. Para declarar una matriz se hace igual que con una variable, pero escribiendo a
continuación del nombre corchetes cuadrados: []. Después del signo igual la información
se puede colocar de varias formas, entre llaves para definir el valor de las variables o sin
ellas si solo se define un valor. En la primera línea de la ventana de la derecha se declara
una matriz de seis valores llamada botones (int botones[6];).
En la segunda línea ademas de definir una matriz con una sola variable también se indica
el valor que va a contener (int botones[0] = 2;).
Para leer o cambiar los valores de las variables de una matriz, se accede individualmente a
cada una de estas variables usando el nombre de la matriz y a continuación el número de
posición que ocupa dentro de esta matriz. La posición se refiere al orden que ocupa esta
variable cuando la matriz es creada. La primera variable ocupa la posición 0, la segunda la
posición 1, la tercera la posición 2 y así sucesivamente. Por ejemplo, en la matriz int
notas[] = {262,294,330,349}, el valor de la variable notas[2] vale 330.
Configurar una matriz para guardar las cuatro notas musicales usando las frecuencias que
se muestran en el primer párrafo de esta hoja. Se crea como una matriz global al
declararla antes de la función setnp().
En el Moop(), declarar una variable para guardar el valor que se obtiene al leer el pin de la
entrada analógica A0 de Arduino (int ValorTeclaPulsada). Como cada pulsador tiene en
serie una resistencia diferente conectada al positivo de la alimentación, en cada uno de
ellos aparecerá una tensión diferente cuando estén presionados, por ejemplo, si se
presiona el pulsador que tiene la resistencia de 10K en serie (pulsador de la Nota 3) en la
entrada A0 aparecerán 2.4V (para +VCC = 4.8V), por tanto el valor que lee Arduino es 512.
Para ver estos valores en la pantalla del ordenador se añade la línea
“NerOPMQprORtMR)SPMorTecMPPnMsPUP(V”.
Usando la instrucción OW)(QQQeMse, se puede asignar cada uno de los valores que se obtienen
al presionar los pulsadores a un tono diferente, por ejemplo, el pulsador Nota 3 con
330Hz, para un valor de 512. Como las resistencias tienen una tolerancia, al presionar el
pulsador de la Nota 3 Arduino puede leer un valor diferente a 512, por tanto se
establecen unos márgenes (de 505 a 515) para saber que este pulsador ha sido
presionado. Después de montar el circuito si alguno de los pulsadores no funciona usar la
información del monitor serie para saber cual es el valor que lee Arduino y así ampliar el
margen para este pulsador.
Si presiona el primer pulsador (SW1 - Nota 1), la nota [0] (262 Hz) se escuchará a través
del zumbador. Si presiona el segundo pulsador (SW2 – Nota 2) se oirá la nota[1] (294 Hz),
y si se presiona el tercer pulsador (SW3 – Nota 3) se oirá la tercera nota[2] (330 Hz).
Ahora es cuando se puede ver lo útil y manejable que es usar una matriz.
Solo una frecuencia se puede reproducir a la vez, así que si se presionan dos pulsadores al
mismo tiempo solo se oirá un sonido, aquel que tenga la resistencia más baja de los dos
pulsadores presionados.
COMO SE UTILIZA
Si los valores de las resistencias del circuito montado son los mismos que los mostrados
en este proyecto, se deberá oír un sonido a través del zumbador cuando se presione un
pulsador. Si no es así, mirar a través del monitor serie el valor que aparece al presionar un
pulsador para verificar que se encuentran dentro de los rangos establecidos en las
instrucciones if()ZZZe[\eZ Si se oye un sonido intermitente, incrementar un poco el rango de
valores de la instrucción cuyo valor se encuentra cerca del valor mostrado al presionar el
pulsador que produce este sonido intermitente.
Presionar varios pulsadores al mismo tiempo, para ver que tipo de valor aparece en el
monitor serie. Usar estos nuevos valores para producir mas sonidos. Experimentar con
diferentes frecuencias para aumentar el número de tonos que puede reproducir este
teclado. Es posible ver cuales son las frecuencias de las notas musicales en esta página:
arduino.cc/frequencies
Si se reemplaza el circuito mixto de resistencias por sensores analógicos, ¿será posible usar la
información que se obtiene de estos sensores para crear un instrumento musical más dinámico? Se
podrían usar estos valores para cambiar la duración de una nota o, como el proyecto del Theremin,
crear una gama de sonidos que varían con la iluminación.
La _unción tone() es útil para generar tonos, pero tiene algunas limitaciones. Solo puede crear formas
de onda cuadrada, no ondas con formas senoidales o triangulares. Las ondas cuadradas en absoluto
parecen ondas. Como se pudo ver en la figura 1 del proyecto número 6 (página 71), la onda cuadrada
esta formada por una serie de pulsos en estado bajo (0V) y en estado alto (+5V).
Ahora es posible formar una banda para usar este teclado, pero habrá que tener en mente algunas
cosas: solo un tono se puede reproducir a la vez y la función tone() interferirá con la instrucción
analogwrite() sobre los pins 3 y 11, en caso de que se quiera usar junto con estos pins para aumentar
el número de sonidos que este teclado pueda generar.
Las matrices son útiles para guardar el mismo tipo de información junta; se
accede a la información de una matriz por los números índice los cuales hacen
referencia a las variables individuales que contiene. Los montajes mixtos con
resistencias son una forma fácil de obtener un mayor número de entradas
analógicas al conectarlos a una entrada analógica dentro de un sistema.
Hasta ahora, cuando se ha querido que suceda algo al pasar un intervalo de tiempo específico con
Arduino se ha usado la instrucción delay(), la cual es útil pero un tanto limitada. Cuando se ejecuta
delay() Arduino se paraliza hasta que se termine el tiempo especificado dentro de esta instrucción.
Esto significa que no es posible trabajar con las señales de entrada y salida mientras está paralizado.
Delay tampoco es muy útil para llevar un control del tiempo transcurrido. Resulta un tanto engorroso
hacer algo cada 10 segundos utilizando para ello delay junto con este tiempo de retraso.
La función eghhiijk ayuda a resolver estos problemas. Realiza un seguimiento del tiempo que Arduino ha
estado funcionando en mili segundos. Se ha utiliza esta función en el proyecto número 6 (página 70
Theremin controlado por luz) para establecer un tiempo de 5 segundos que permita calibrar los niveles
de iluminación del sensor.
Hasta ahora se han declarado variables del tipo int. Una variable int (entero) es un número de 16 bit,
esto significa que puede guardar números decimales entre -32768 y 32767. Estos valores numéricos
pueden parecer muy grandes, pero si Arduino cuenta 1000 veces por segundo usando la función eghhijk,
llegará a superar el rango de valores entre -32768 y 32767 (65536 números) en 65.5 segundos. Los datos
de tipo largo o honl pueden guardar números de 32 bits (entre -2147483648 y 2147483647). Ya que no
es posible contar el tiempo hacia atrás usando números negativos, la variable para guardar el tiempo
que hay que usar en la función eghhijk se llama uniilnfd honl. Cuando un tipo de datos es llamado
unsigned (sin signo), solo trabaja con números positivos. Esto posibilita realizar cuentas mucho mayores.
Una variable del tipo unsigned long puede contar más de 4294 millones de números. Son bastantes
números para ser contados con eghhijk ya que le llevaría hacerlo más de 50 días. Al poder comparar el
tiempo que cuenta eghhiijk con un tiempo en concreto, es posible determinar la cantidad de tiempo que
ha transcurrido con respecto a ese tiempo.
Cuando se gira el reloj de arena sobre si mismo, el interruptor de inclinación cambia de estado, y
comenzará un nuevo ciclo de encendido de los diodos LED.
El interruptor de inclinación trabaja igual que un interruptor normal, pero en esta aplicación se
comporta como un sensor de encendido/apagado. Aquí se usará como una entrada digital, ya que
proporciona dos niveles lógicos diferentes, “0” y “1”. Los interruptores de inclinación son únicos a la
hora de detectar la orientación o inclinación de un objeto. En su interior disponen de una pequeña
cavidad con una bola de metal. Cuando el interruptor se gira la bola de metal se mueve en su interior
rodando hasta uno de los extremos de la cavidad, haciendo que dos terminales se conecten entre sí de
forma que se cierra el circuito que está conectado a la placa de pruebas. En ese momento el reloj de
arena digital comenzará a contar un tiempo de 60 segundos encendiendo un LED, de los 6 de que
dispone, cada 10 segundos.
MONTANDO EL
CIRCUITO
mngura 1
No es necesario mantener este proyecto conectado al ordenador una vez ha sido cargado el programa
en la placa de Arduino. Se podría intentar construir una pequeña caja de cartón para colocar el montaje
en su interior junto con la batería. También se puede dibujar en una de las caras de esta caja unos
indicadores numéricos para los diodos led, de manera que vaya indicando el tiempo transcurrido
después de haber girado la caja.
Los interruptores de inclinación son geniales, componentes de bajo coste para determinar la inclinación
de algún objeto. Los acelerómetros son otro tipo de sensores que proporcionan mucha más
información. También son significativamente más caros. Para saber si un objeto se gira cuando se
mueve la utilización de un sensor de inclinación es la opción más adecuada.
EL CÓDIGO
ss necesario definir varias variables del tipo global para conseguir que el programa
funcione. Para comenzar, se crea una variable del tipo constante llamada PtnInterruptor.
Este será el nombre del pin del sensor de inclinación que detecta el giro del circuito.
Crear una variable del tipo unsigned long. Se utiliza para almacenar el tiempo en que
cambia de estado (apagado-encendido) cualquiera de los seis LEDs.
Crear una variable que almacene el estado del sensor de inclinación y otra que guarde el
estado anterior del mismo. Se usarán estas dos variables para comparar la posición
(cerrado o abierto) del interruptor del sensor de un ciclo completo al siguiente.
Crear una variable llamada Led. Se usará para contar qué LED será el próximo en
encenderse. Comienza por la salida digital de pin 2 (LED D1).
Dentro de la función setup() se configuran los pins que van a trabajar como salidas para
encender los diodos LED, en este caso los pins 2 al 7. Se utiliza la instrucción for() para
crear un bucle que define en solo tres líneas de código estos seis pins como salidas
OUTPUT. También aquí dentro se define el pin (8 dentro de PinInterruptor) que se
conecta al sensor de inclinación como una entrada INPUT.
Cuando se ejecuta la parte principal de este programa dentro del loop(), es necesario
saber el tiempo que ha transcurrido desde que Arduino está encendido usando la
instrucción mills(), y a continuación guardar este dato dentro de una variable local
(porque se localiza dentro del bucle) llamada TiempoActual.
va wariable TiempoPrevio indica la última vez que un LED fue encendido. Una vez se ha
configurado TiempoPrevio, se enciende un LED y se incrementa el valor de la variable
Led. Una vez que transcurra el tiempo indicado en la variable TiempoIntervalocadaLed,
se encenderá el siguiente LED.
Se añade otra instrucción if() en el programa para comprobar si el LED conectado al pin
número 7 está encendido. En caso de que se cumpla esta condición no se hace nada. Se
podrá decidir más adelante que sucede cuando ha transcurrido este tiempo de 1 minuto.
Al final del bucle loop(), se guarda el estado actual del interruptor del sensor de
inclinación dentro de la variable EstadoPreviodelInterruptor, de esta manera se puede
comparar con el valor que se guarde en EstadodelInterruptor en la siguiente ejecución
del programa o bucle loop().
COMO SE UTILIZA
Una vez que se ha programado la tarjeta Arduino, comprobar el tiempo de un minuto
usando un reloj. Después de que hayan pasado 10 segundos se debe de encender el
primer diodo LED. Cada 10 segundos debe de encenderse un LED. Al final de los 60
segundos todos los diodos LEDs deberán de estar encendidos. Si se mueve el circuito en
cualquier momento y se consigue que el sensor de inclinación cambie de estado, todos los
diodos LEDs se apagarán y comenzará uno nuevo ciclo de encendido de los LEDs cada 10
segundos.
Cuando el reloj adcanza los xy segundos se encienden los seis diodos LEDs y permanecen en este
estado. ¿Puede pensar como conseguir que el circuito llame la atención cuando se alcance este
tiempo? Son buenos indicadores para hacer esto generar un sonido o hacer que los diodos LEDs se
pongan en intermitencia. La variable Led se puede comprobar para ver si todos los LEDs están
encendidos, ese es un buen lugar para colocar varias instrucciones en el programa para que se llame la
atención al finalizar el tiempo. A menos que el reloj se rellene con arena, las luces podrían ir
encendiéndose hacia arriba o hacia abajo dependiendo de la orientación del sensor de inclinación. Se
puede pensar como usar la variable que indica el estado del interruptor del sensor para indicar la
dirección de encendido de los LEDs.
Para medir una cantidad de tiempo entre eventos, se utiliza la función millis().
Los números que genera esta función son más grandes que los que se puede
guardar usando el tipo de variable int, por eso es necesario usar el tipo de
variable unsigned long para guardar los valores que genera mills()
El controlar motores con Arduino es más complicado que simplemente encender y apagar diodos LEDs
por un par de razones. Primero, los motores necesitan más cantidad de corriente que los pins de salida
de Arduino pueden suministrar, y segundo, los motores pueden generar su propia corriente a través
de un proceso llamado inducción, la cual puede dañar el circuito si no se tiene en cuenta y no se
corrige. Sin embargo, los motores hacen posible mover objetos físicos, haciendo de esta forma los
proyectos más interesantes. Por tanto, aunque son mas complicados merece la pena el usarlos.
Mover cosas consume gran cantidad de energía. Los motores normalmente necesitan una corriente muy
superior a la que Arduino puede suministrar. Además algunos motores también necesitan una mayor
tensión para funcionar. El motor para comenzar a funcionar, así como para mover una carga pesada
unida a él, consumirá tanta corriente como pueda necesitar. Arduino solo puede suministrar una
corriente máxima de 40 mili amperios (40 mA) desde sus terminales digitales, es decir, una corriente
mucho menor que la mayoría de los motores necesitan para funcionar.
Los transistores son componentes que permiten controlar grandes cantidades de corriente y altas
tensiones a partir de una corriente pequeña (muy inferior a 40mA) de una salida digital de Arduino. Hay
muchas clases de transistores, pero todos trabajan bajo el mismo principio. Se puede pensar en los
transistores como interruptores digitales, es decir, no se cierran ni se abren usando un dedo, sino
mediante el control de un parámetro eléctrico (tensión o corriente). En el los transistores del tipo
Mosfet, como el que se utiliza en este proyecto, se aplica una tensión al pin de control del transistor,
llamado puerta, de manera que el transistor se cierra entre sus dos terminales extremos llamados
fuente y surtidor, tal y como lo haría un interruptor real. Este tipo de transistores se conoce con el
nombre de unipolares y siempre funcionan por una tensión aplicada a su terminal de control, esto
equivale a usar un dedo cuando se cierra o se abre un interruptor real. Así que de esta manera es
posible suministrar una gran corriente y tensión a un motor para encenderlo o apagarlo usando
Arduino.
Los motores son un tipo de dispositivo de inducción. La inducción es un proceso por el cual la circulación
de una corriente eléctrica a través de un cable (bobina) genera un campo magnético alrededor de este
cable. Cuando a un motor se le aplica electricidad, el cable que se enrolla en su interior formando una
bobina produce un campo magnético. Este campo hace que el eje (el cilindro que sobresale del motor)
comience a dar vueltas.
Al revés también funcionan: un motor puede producir electricidad cuando se hace girar su eje. Intentar
unir un diodo LED entre los dos terminales del motor y a continuación girar el eje de este motor a mano.
Si no sucede nada, volver a girar el eje pero en sentido contrario a como se hizo antes. El diodo LED
debe de alumbrar. Acaba de realizar un pequeño generador con el motor.
Cuando se deja de suministrar energía a un motor, continuará girando, debido a la inercia que posee.
Cuando el motor esta girando produce una tensión de sentido contrario a la dirección de la corriente
que se le aplica para que funcione. Se ha visto este efecto si ha usado el diodo LED con el motor y ha
girado su eje para hacer que alumbre (párrafo anterior). Esta tensión inversa inducida, puede dañar el
transistor que lo controla. Por esta razón es necesario colocar un diodo en paralelo con el motor, de
manera que la tensión inducida pase a través del diodo y no afecte al transistor. El diodo solo permite el
paso de la corriente en una sola dirección, protegiendo de esta forma al resto del circuito.
MONTANDO EL
CIRCUITO
Figura ~
Conectar el transistor IRF520 sobre la placa de pruebas de manera que la cara con una
mayor superficie metálica quede mirando hacia la derecha (al lado contrario de la placa
Arduino). Conectar el pin digital 9 de Arduino al terminal superior del transistor. Este
terminal recibe el nombre de pnerta. Un cambio en la tensión que se aplica al terminal de
pnerta hace que el transistor conecte entres sí sus otros dos terminales (se comporta
como un interruptor cerrado). Conectar el cable negro del motor al terminal central del
transistor, el cual recibe el nombre de dreuador. Cuando Arduino activa el transistor al
suministrar una tensión al terminal de pnerta este terminal (dreuador) se conectará a un
tercer terminal llamado neute, el cual a su vez está conectado a masa. De esta forma al
conectar el dreuador y el nrtdor entre sí se conecta el cable negro del motor
directamente a masa y a través de este transistor, comenzando en ese momento el motor
a girar.
Lo siguiente, conectar los cables de alimentación del motor a la placa de pruebas, tal y
como se puede ver en esta ilustración. El último componente que hay que añadir es el
diodo. El diodo es un componente que tiene polaridad, solo se puede montar de una
forma determinada en el circuito. Observar que el diodo en uno de sus extremos tiene
una franja blanca. Este extremo del diodo es el negativo y se conoce con el nombre de
cátodo (por donde sale la corriente). El otro extremo es el positivo o ánodo (por donde
entra la corriente). Conectar el ánodo del diodo al cable negro del motor (masa) y el
cátodo de este diodo al cable rojo del motor (alimentación positiva), tal y como se ve en
esta figura 1. Parece que el diodo está conectado al revés, en realidad sí que es así. El
diodo ayuda a eliminar cualquier tensión inversa inducida producida por el motor y que
pueda retornar al transistor estropeándolo. Recordar, la tensión inversa inducida siempre
aparece con una polaridad contraria a la tensión que se aplica para producirla.
Los LEDs también son diodos, se puede haber asombrado al saber que sus terminales también son
llamados ánodo y cátodo. Existen muchas clases de diodos, pero todos ellos tienen algo en común, que
solo permiten que la corriente los atraviese en el sentido de ánodo a cátodo y no al revés. Por tanto el
diodo en este circuito está conectado al revés con respecto a la tensión de alimentación de 9V pero al
derecho con respecto a la tensión inversa inducida del motor.
EL CÓDIGO
Dentro del bloque del setn
, declarar a través de la instrucción ode
el pin del
motor como salida (PUT) y el pin del pulsador como entrada (PUT).
El bloque de ejecución en bucle loo
se localiza más adelante. Dentro de este bloque se
procede a verificar el estado del pulsador usando la variable stadodelPnlsador con la
instrucción dtalead
.
Si el pulsador está presionado, se pone en estado alto (HIGH) el terminal del motor a
través de la variable de tipo constante PindelMotor, esto hace que en el terminal digital
número 9 de Arduino aparezca una tensión de +5V que activa el transistor IRF520 el cual a
su vez alimenta al motor y lo hace girar. Si el pulsador no está presionado se coloca un
estado bajo (LOW) en este terminal PindelMotor, no llegando una tensión a la puerta del
transistor y por lo tanto el motor no funciona.
Los motores tienen unas tensiones óptimas de funcionamiento. Si se aplica solo el 50% de la tensión
nominal el motor también va a funcionar. Si se varía la tensión aplicada al motor también se podrá
variar la velocidad a la que gira. No conviene variar demasiado esta tensión de funcionamiento del
motor para evitar que se queme.
Los transistores son comdonentes electrónicos de estado sólido no tienen dartes mecnicas que se
duedan moer como en el caso de un re ebido a esto los transistores se dueden activar y
desactivar (cambiar de estado) a gran velocidad. Por ejemplo, los transistores de conmutación rápida
pueden trabajar con tiempos de control del orden de nano segundos. Piensa como conectar un
potenciómetro a una entrada analógica para usar un pin digital de salida PWM para controlar la
velocidad del motor a través del transistor. ¿Que sucederá con la velocidad del motor si a la vez se
varía la tensión que se le aplica? Utilizando los patrones de color que se muestran sobre la plantilla del
CD y variando la velocidad del motor ¿se pueden conseguir diferentes efectos visuales?
COMO SE UTILIZA
Ensamblar el soporte de unn con el como muestra el paso uno de la ilustracn inerior a
continuacn unirlo al motor como muestra el paso ¡arte superior de la ilustracn de la p¢gina
siguiente). Unir la plantilla circular con dibujos de colores que se incluye en este KIT con el CD tal y
como muestra el paso 3. Encajar la cruz de madera del soporte del motor al agujero del CD y a
continuación usar un poco de pegamento para evitar que se suelte cuando el motor funcione. Ahora
para probar el circuito alimentar la placa Arduino a través del puerto USB de un ordenador y usar el
clip de pila de 9V con una pila de este tipo. Cuando se presione el pulsador de la placa de pruebas el
motor comenzará a girar gran velocidad, por tanto será necesario sujetar con la mano el motor con la
plantilla montada para evitar que arrastre al circuito cuando funcione.
£UY IMPORTANTE
(Nota del traductor)
Cuando el motor funcione lo ¤ar¥ a gran velocidad, produciendo una gran fuerza centrífuga. Hay que
tener cuidado de que la plantilla o algunas de sus piezas salga volando e impacte sobre el ojo de
alguien. También sujetar bien el motor antes de que comience a girar, para evitar que se mueva en el
momento de hacerlo. Puede poner en práctica la sugerencia de controlar la velocidad del motor
mediante un potenciómetro y también puede cambiar el diseño de la plantilla para conseguir
diferentes efectos visuales.
Descubra: duentes en H
Tiempo: 30 MINUTOS Proyectos en los que se basa: 1,2,3,4,9
Nivel: alto
Antes de que llegase Internet, la televisión e incluso antes de las películas de cine, algunas de las
primeras imágenes en movimiento fueron creadas con una herramienta llamada zoótropo. Los
zoótropos crean la ilusión de movimiento a partir de un grupo de imágenes fijas las cuales tienen
pequeños cambios entre ellas. Se compone de un tambor circular con unos cortes en su superficie.
Cuando el tambor gira se mira a través de los cortes y los ojos perciben las imágenes fijas de su
interior como si se estuviesen movimiento. La ranuras ayudan a evitar que las imágenes se conviertan
en una gran mancha borrosa cuando se mueven, además la velocidad a la cual estás imágenes
aparecen crean la sensación de una única imagen que se está moviendo. Originalmente, estos
tambores se giraban a mano o con un mecanismo de arranque.
En este proyecto, usted montará su propio zoótropo el cual producirá la animación de una planta
carnívora. Se producirá el movimiento usando un motor. Para hacer este sistema aún más avanzado, se
añadirá un pulsador para controlar la dirección de giro del motor, además de otro pulsador para
encender y apagar el circuito y un potenciómetro para controlar la velocidad del motor.
En el proyecto anterior de la rueda de colores motorizada se consiguió hacer girar el motor en una sola
dirección. Si se aplica un cable de alimentación positiva y otro para la masa el motor girará en una
dirección, si se invierten estos cables el motor girará en la dirección contraría. Esto no es muy práctico
de hacer cada vez que se quiera cambiar el sentido de giro, así que se va a usar un componente llamado
puente H para invertir la polaridad de la tensión aplicada al motor y así hacerlo girar en una dirección o
en otra.
Los Puentes H son un tipo de componentes conocidos con el nombre de circuitos integrados. Los
circuitos integrados o ICs son componentes que tienen en su interior circuitos muy grandes (formado a
su vez por cientos o miles de componentes electrónicos) pero que ocupan muy poco espacio dentro de
su encapsulado. Estos circuitos integrados ayudan a simplificar los circuitos más complejos al poderlos
colocar como componentes individuales que se pueden reemplazar (se suelen montar sobre un soporte
o zócalo que permite el cambiarlos con facilidad, como en el caso del microcontrolador de Arduino Uno
Rev3). Por ejemplo, el puente H que se va a usar en este proyecto dispone en su interior de un
determinado número de transistores en su interior. En caso de que quisiera reproducir el circuito
interno de este puente H necesitaría otra placa de pruebas para montar en ella todos los componentes
que contiene este circuito integrado.
MONTANDO EL
CIRCUITO
Figura §
Conectar el terminal número 2 del integrado al pin digital 3 de Arduino. Conectar el pin 7
al pin digital 2. Estos terminales se usarán para comunicarse con el puente en H,
indicando en que dirección deberá de girar el motor. Si el pin 3 está ¨OW y el pin 2 está
HIGH, el motor girará en una dirección. Si el pin 2 está LOW y el pin 3 está HIGH el motor
girará en la dirección contraria. Si estos dos terminales están en estado LOW o en estado
HIGH a la vez el motor parara de girar.
Este circuito integrado recibe su tensión de alimentación de +5V mediante el terminal 16.
Los terminales 4 y 5 se conectan los dos a masa.
Conectar el motor a los terminales 3 y 6 del integrado. Estos dos terminales encenderán o
apagaran el motor dependiendo de las señales que reciba el integrado en los terminales 2
y 7.
Colocar el conector para la pila de 9V (sin conectar la pila) a las columnas de positivo y de
masa de la placa de pruebas. Conectar la masa de Arduino a la columna del extremo
derecho de la placa de pruebas en donde se conecta el cable negro del conector de la pila
(masa). Conectar el terminal 8 del integrado (puente en H) a la columna donde se conecta
el cable de alimentación positiva de la pila. Este es el terminal a través del cual el
integrado alimenta el motor cuando funciona. Asegurarse de que las alimentaciones de
+9V y de +5V no están juntas (error de conexión), ya que deben de estar separadas. Solo
las masas de ambas alimentaciones deberán de estar conectadas entre sí.
EL CÓDIGO
Utilizar variables para guardar los valores de las variables de entrada. Se utilizan para
detectar el cambio de estado de ambos pulsadores, comparado el estado dentro un ciclo
con el siguiente ciclo, igual a lo que se hizo en el proyecto del reloj de arena digital
(página 86). De esta forma, además de almacenar el estado actual, será necesario guardar
el estado anterior de cada pulsador.
Dentro del bloque del setup(), configurar la dirección de cada pin de entrada y salida.
Poner la variable PindeActivacion en estado LOW (bajo) para comenzar, de esta manera
el motor no girará.
En la función loop(), leer el estado del pulsador de arranque o encendido para guardar su
estado dentro de la variable EstadoPulsadorArranque.
EL CÓDIGO
Si existe una diferencia entre el estado actual del pulsador de arranque con respecto a
como estaba en el ciclo anterior, y el pulsador se encuentra en estos momentos en HIGH,
se pone la variable «ctivarMotor en el estado contrario al que se encuentra actualmente,
si esta en “1” se pone en “0” y viceversa.
Se leen los valores de las posiciones de los pulsadores y del potenciómetro. Se almacenan
estos valores en sus respectivas variables
La variable ¬ireccioMotor determina en que dirección gira el motor. Para establecer una
dirección de giro, se configuran los pins de control uno en °±²° y el otro en ³´µ (gira en
un sentido). Si se pone de nuevo uno en ³´µ y el otro en °±²° girará en sentido
contrario a como lo hizo antes. Cuando la variable ¬ireccioMotor cambia, invierte el
valor de los pins de control
Antes de salir de un ciclo loop(), se guarda el estado actual de los pulsadores como un
estado previo de las variables para la siguiente vez que se ejecute el programa.
COMO SE UTILIZA
A fin de construir el zoótropo, es necesario disponer de la rueda de colores que se uso en el proyecto
número 9 (página 94 ), así como de una plantilla de color negro que incluye las ranuras a través de las
cuales hay que mirar. Se sujeta esta plantilla sobre la rueda de colores a través de unas pestañas. Una
vez que el CD esta firmemente conectado al eje del motor, con la plantilla negra encima y las ranuras
abiertas, colocar el motor en vertical, de manera que se pueda mirar a través de las ranuras
(asegurarse de que el CD no esté demasiado cerca del motor. Se debe de ver mirando a través de las
ranuras como una secuencia de imágenes fijas “se mueven” cuando el motor gira. Si van demasiado
rápidas o lentas girar el mando del potenciómetro para ajustar la velocidad de la animación.
Presionar el pulsador de dirección para ver como la animación se reproduce en sentido contrario a
como lo estaba haciendo. El zoótropo y las imágenes proporcionadas en este kit son el punto de
partida: puede intentar experimentar con nuevas animaciones, utilizando la plantilla de esta
animación como una referencia.
Para hacer esto, comenzar con una imagen básica. Identificar un punto en esta imagen y realizar
pequeños cambios en el resto de los fotogramas. Intentar volver a la imagen original para conseguir
que la animación se pueda reproducir continuamente sin saltos.
Fabricar una base para sujetar el motor. Una pequeña caja de cartón con un agujero podría ser un
buen remedio, de esta forma podrá dejar sus manos libres para manejar los pulsadores y el
potenciómetro. Además, al hacerlo de esta forma, le será mucho más fácil enseñar este trabajo a todo
el mundo.
Puede añadirle una nueva funcionalidad al proyecto, para conseguir que el zoótropo trabaje también
en situaciones de poca luz. Conectar un diodo LED y una resistencia en serie a uno de los pins digitales
de salida de Arduino que no se utilice. También añadir un segundo potenciómetro y conectarlo a una
entrada analógica. Colocar el diodo LED de manera que pueda alumbrar sobre las imágenes. Usar la
entrada analógica para variar el parpadeo del LED de manera que alumbre en el momento que se mire
a través de las ranuras de la plantilla. Puede llevar algún tiempo el conseguirlo, pero merece la pena
por que el efecto final es realmente espectacular.
La bola de cristal le puede ayudar a “adivinar” el futuro. Le hace una pregunta a la bola que todo lo
sabe y a continuación deberá de mover la para obtener la respuesta. Las respuestas estarán guardas
con anterioridad, pero podrá redactarlas como más le guste. Se usará Arduino para escoger una
respuesta de un total de 8 respuestas guardadas. El sensor de inclinación que se incluye en el kit imita
el movimiento de la bola cuando se frota para obtener las respuestas.
La pantalla LCD se puede usar para mostrar caracteres alfanuméricos. El de este kit dispone de 16
columnas y de 2 filas, para un total de 32 caracteres. Su montaje sobre la placa de circuito impreso
incluye un gran número de conexiones. Estos terminales se utilizan para la alimentación y comunicación,
además de indicar lo que tiene que escribir sobre la pantalla, pero no es necesario conectar todos sus
terminales, algunos se dejan al aire. Ver la figura número 3 (esquema eléctrico) para ver los terminales
que se conectan al circuito.
MONTANDO EL
CIRCUITO
ÃÄgura Å
En este esquema la disposición de los terminales de la pantalla LCD no coinciden con el orden físico en la figura 2 (montaje
sobre la placa de pruebas). En un esquema, los terminales se reorganizan de una manera lógica de forma que el esquema se
pueda leer con una mayor claridad. Esto puede causar una pequeña confusión a los principiantes hasta que realicen el montaje
del proyecto.
El terminal de selección de registro (RÇ) de la pantalla LCD controla cuando los caracteres
aparecerán sobre la pantalla. El terminal de lectura/escritura (read/write) (R/W) coloca la
pantalla en modo de lectura o de escritura. En este proyecto se usará el modo de
escritura. El terminal de activación (enable) (EN) le dice a la pantalla que va a recibir una
instrucción. Los terminales de datos (D0-D7) se utilizan para enviar caracteres de datos a
la pantalla. Solo se usarán 4 (D4-D7) de estos 8 terminales. Finalmente, la pantalla
dispone de un terminal a través del cual se puede ajustar el contraste de la misma (V0).
Se usará un potenciómetro para realizar este control del contraste.
La librería de la pantalla LCD que se incluye con el software de Arduino maneja toda la
información de estos terminales y simplifica el proceso de escribir software para mostrar
los caracteres. Los dos terminales externos del LCD (Vss y LED-) hay que conectarlos a
masa. También se conecta a masa el terminal R/W, el cual coloca al LCD en modo de
escritura. El terminal de alimentación del LCD (Vcc) se conecta directamente a +5V. El
terminal LED+ de la pantalla se conecta a través de una resistencia de 220V también a
+5V.
EL CÓDIGO
Configurar el pin de Arduino al que se conecta el sensor de inclinación como una entrada
con la instrucción ÕÈÏÖode×Ô dentro de la función setnÕ×Ô. Iniciar la librería LCD e indicarle
el tamaño de la pantalla (16 columnas por 2 filas).
Con el fin de escribir en la siguiente línea, hay que indicarle a la pantalla donde se debe de
colocar el cursor (setCursor(0,1)). Las coordenadas de la primera columna y de la segunda
línea son 0,1 (recuerda que en los ordenadores las coordenadas 0,0 se refiere a la primera
columna de la primera fila). Usar la función ÎcdØsetCursor() para mover el cursor a la
primera columna de la segunda fila y a continuación decirle que escriba la frase “Bola de
Cristal”.
Usar la instrucción if() para determinar si el sensor está en una posición diferente a como
estaba en un estado previo. Si es diferente a como estaba antes y además en estos
momentos está en estado LOW (bajo), entonces es el momento de generar una respuesta
aleatoria. La función random() devuelve un número dentro del rango que se indica dentro
del argumento. Para comenzar, el programa guarda 8 posibles respuestas para la bola de
cristal. Siempre que la instrucción random(8) es ejecutada, se obtendrá cualquier número
comprendido entre 0 y 7. Este número se guarda dentro de la variable Contestar.
áÞàâãä reßereàce
arduino.cc/random
La instrucción îïítcð)( ejecuta diferentes partes del código dependiendo del valor que
tenga esta instrucción. Cada una de estas partes del código se llama mediante una
instrucción caîe îïítcð)( la cual verifica el valor de la variable Contestar (valor como
argumento de la instrucción); de esta manera cualquier valor que se genera dentro de la
variable Contestar determina cual de las instrucciones case (de 1 a 7)será ejecutada.
Dentro de las instrucciones case, el código será el mismo, pero los mensajes que muestre
en pantalla serán diferentes. Por ejemplo, en case 0 el código hace que a través de la
función lcæçñríòt)óôíõ( aparezca el texto de “ôí” en la pantalla. Después de la función
lcæçñríòt)( hay otro comando: ìreaö, que le dice a Arduino donde se localiza el final de la
última instrucción case. Cuando se ejecuta ìreaö, el programa salta al final de la última
sentencia de la instrucción switch, la cual siempre será }. Para comenzar se van a crear un
total de 8 instrucciones case. Cuatro de las respuestas serán positivas, dos serán
negativas, una respuesta que no tiene ni idea y otra respuesta que vuelva a preguntar de
nuevo.
Lo último que hay que hacer al final del programa, dentro de la función looñ)(, es asignar
el valor de la variable ÷îtaæoæelôeòîor a la variable ÷îtaæoPrevíoæelôeòîor. Esto
posibilita que se pueda realizar un seguimiento del cambio de estado (de 0 a 1 ó de 1 a 0)
en el sensor de inclinación la próxima vez que el programa se ejecute.
COMO SE UTILIZA
Para usar la bola de cristal primero hay que darle alimentacùúû a la placa ürduiûoý
þomdrobar si en la dantalla del Lþÿ aparece el teto Preguntame eû la se ûda ûea
oa de talý !i ûo puede "er bieû los tetos deber# a$ustar el poteûcùúmetro dara
variar el contraste hasta que los caracteres se vean correctamenteý
%aùar uûa pre ûta a la bola de cristal a coûtùûuacùúû mover hacia arreba y hacia
abajo el circuito dara que el sensor de ùûcùûacùúû pueda detectar estas "ariacioûesý ÿe
esta manera obtendr# uûa respuesta a su pre ûtaý !i la respuesta ûo le satis'ace( puede
preuûtar de ûue"oý
)ûteûte a*adir sus propias respuestas a las ùûstruccioûes rnt( pero teûieûdo eû mente que solo es
dosible usar +, caracteres por línea. Asegurarse cuando se añaden nuevas instrucciones case switch,
que se ha ajustado el número de opciones que la variable Contestar va a almacenar; recordar que esto
se define mediante la instrucción random(8), en este caso 8 respuestas. Si se añaden dos nuevas
respuestas habrá que aumentar el número 8 a 10 y añadir dos nuevas instrucciones case switch.
La pantalla LCD trabaja cambiando las propiedades eléctricas de un líquido que se encuentra montado
entre cristales polarizados. El cristal solo permite que un tipo de luz pase a través de él. Cuando el
liquido entre los cristales esta cargado se vuelve semi sólido de manera que puede representar
caracteres al bloquear la luz que incide sobre él.
Las funciones descritas aquí para cambiar el texto que aparece en la pantalla LCD son muy simples.
Una vez que tenga claro como funciona puede estudiar la librería de este LCD para descubrir nuevas
funciones. Puede intentar que el texto se mueva a lo largo de la pantalla o que se actualice
continuamente. Para saber más sobre como trabajar con la librería de la pantalla LCD visitar:
arduino.cc/lcd
Una pantalla LCD permite mostrar textos usando la librería LiquidCrystal. Con
las instrucciones switch...case controla el flujo de partes del programa al poder
comparar una variable con determinados valores.
El zumbador usado para reproducir sonidos en los proyectos del theremin y del teclado también se
puede usar como un dispositivo de entrada o sensor. Cuando se le aplica una tensión de 5V, este
sensor puede detectar las vibraciones las cuales pueden ser leídas por las entradas analógicas de
Arduino. Es necesario conectar una resistencia de un valor alto (del orden de 1Mega ohmio) entre la
salida y masa para que funcione correctamente, es decir, se realiza el montaje del zumbador en serie
con una resistencia de 1Mega ohmio conectada a masa, de manera que el conjunto forma un divisor
de tensión.
Cuando un zumbador piezoeléctrico es presionado contra una superficie plana puede vibrar, como por
ejemplo sobre una mesa de madera, siendo Arduino capaz de detectar la intensidad de esta vibración.
Usando esta información puede comprobar si el número de vibraciones detectadas se encuentran
dentro del rango de trabajo establecido. En el código puede contabilizar el número de vibraciones y ver
si coinciden con el número de vibraciones almacenadas.
Un pulsador permite bloquear el motor en una posición. Algunos diodos LEDs aportan información: un
LED rojo indicará que la caja está bloqueada, un LED verde indicará que la caja no está bloqueada, y un
LED amarillo permite saber si se ha recibido el número correcto de vibraciones.
También escribirá su propia función la cual le permitirá saber si una vibración es demasiado fuerte o
demasiado débil. El escribir sus propias funciones le ayuda a ahorrar tiempo de programación al llamar
siempre a una misma parte del código sin necesidad de volverlo a escribirlo cada vez que se use. Las
funciones pueden usar argumentos y devolver valores a través de estos argumentos. En este caso,
utilizará una función para determinar el nivel de volumen de la vibración. Si se encuentra dentro del
rango correcto se incrementará el valor de una variable.
Es posible construir el circuito simplemente por hacerlo, con ninguna finalidad, pero es mucho más
interesante y didáctico hacerlo con un objetivo, en este caso realizar una caja de seguridad en donde
guardar algo. Si dispone de una caja de madera o una caja de cartón puede realizar una serie de
agujeros en su interior, usar un servomotor para abrir y cerrar un pestillo, y así evitar que cualquiera
pueda abrir la caja para coger lo que hay en su interior.
MONTANDO EL
CIRCUITO
Fiura 1
a mucas cone iones en la &laca- ase.urarse que todas estas cone iones est/n
reali0adas correctamente1
2onectar los cables de alimentac34n masa a ambos lados de la &laca de &ruebas1 2olocar
el &ulsador sobre la &laca de &ruebas conectando uno de sus terminales a 5671 8l otro
e tremo del &ulsador conectarlo a masa a tra9:s de una resistencia de ;<=ilo omios1
2onectar la un34n de la resistencia el terminal del &ulsador al &in di.3>al n?mero @ de
Arduino
2ablear los IEDs, conectando los c/todos Jpatilla cortaK a masa, y colecar un resistencia de
@@< ohmios en serie con los /nodos1 A trav:s Le sus respectivas resistencias, conectar el
LED amarillo al pin digital 3 de Arduino, el LED verde al pin digital 4, y el LED rojo al pin
digital 5.
Insertar el conector macho de tres terminales dentro del conector hembra del
servomotor (ver figura 3). Conectar el cable rojo a la alimentación y el cable negro a masa.
Colocar un condensador electrolítico de 100 micro faradios en las líneas de alimentación
de la placa de pruebas para suavizar las variaciones bruscas de corriente y evitar
variaciones de tensión, además asegurarse que el condensador se ha conectado con la
polaridad correcta. Conectar el terminal de datos del servomotor, el cable blanco, al
terminal 9 de Arduino.
EL CÓDIGO
Crear variables para guardar los valores del pulsador y del Yumbador
ConZigurar algunas variables de tipo constante para usar como límites para los niveles
máximo y mínimo de los golpes
La variable bloqueado permite saber si el bloqueo está activado o no. Una variable de tipo
[oolean contiene datos que solo pueden ser verdadero – true (1), o falso – false (0).
Cuando se aplica tensión al circuito debe de empezar con el mecanismo desbloqueado.
La última variable de tipo global guardará el número de golpes válidos que haya recibido.
Inicializar la comunicación serie con el ordenador para poder ver el nivel de los golpes, en
que estado se encuentra el bloqueo y el número de golpes válidos que se han efectuado.
Encender el diodo LED verde, mover el servo a la posición de desbloqueo, y mostrar el
estado actual en el monitor serie indicando que el circuito está en la posición de
desbloqueo.
Si la variable bloqueo es true, y el bloqueo está activado, leer el valor de la vibración del
zumbador y almacenarlo en Valoruolvew
Las siguientes instrucciones comprueban si se han efectuado menos de tres golpes válidos
y si se percibe alguna vibración en el sensor (zumbador). Si ambas condiciones son ciertas,
comprueba si el golpe en este momento es válido o no lo es, e incrementa la variable
xyz{rouolve| en caso de ser válido. En esta parte del código es donde se realiza la
llamada a la función personalizada Ver}~}caruolve|. Se escribe esta función al final de la
función loov. Ver}~}caruolve| comprueba que el valor de la variable Valoruolve es un
golpe válido o no lo es, además esta variable forma parte del argumento de esta función.
Después de que se ejecute esta función se indica, a través del monitor serie, el número de
golpes válidos que faltan para realizar el desbloqueo.
Comprobar si se han efectuado tres o más golpes válidos. Si esta condición se cumple,
cambiar la variable de bloqueo a false (falso), y mover el servomotor a la posición de
desbloqueo. Esperar 20 mili segundos para que le de tiempo a mover el servomotor, y
cambiar el estado del LED verde a encendido y apagar el LED rojo. Mostrar un mensaje en
el monitor serie indicando que “La caja está desbloqueada!”.
La mis
n de esta unción será controlar un número (que contiene la variable VaorGolpe)
para ver si es válida o no. Para pasar el valor de esta variable dentro de la función se crea
una variable de tipo entero (int valor) dentro del argumento en el momento de crear
dicha función.
En esta función, cada vez se refiere a la variable Valor se usará cualquier número que
contenga la variable ValorGolpe dentro del programa principal y que se transmite a
través del argumento de la función. En esta línea del programa se comprueba que el dato
que contiene la variable Valor es mayor que el dato que contiene la variable
GolpesSuaves y menor que el dato que contiene la variable GolpesFuertes. Por ejemplo,
si el dato de ValorGolpe vale 25, se pasa a la función a través del argumento con lo cual la
variable Valor tendrá este dato y a continuación se comprueba que es mayor que 10 y
menor de 100, según se puede ver en la línea adjunta de la página siguiente.
Si el dato de la variable Valor se encuentra entre los dos valores anteriores (entre 10 y
100) entonces existe un golpe válido, por tanto el diodo LED amarillo se enciende durante
50 mili segundos y aparece un texto en el monitor serie indicando que se ha producido un
golpe válido “Golpe válido de valor ” así como dicho valor.
Si el dato de la variable Valor está por debajo del dato de la variable GolpesSuaves (10) o
por encima de GolpesFuertes(10) aparece el siguiente texto en el monitor serie “El valor
de golpe no es válido” y se retorna al programa principal a través de return false.
COMO SE UTILIZA
Cuando se conecta Arduino a un ordenador y se carga el programa en él, a continuación
hay que abrir el monitor serie. Debe de ver como el diodo LED verde se enciende y el
servomotor se mueve a la posición de desbloqueo.
En la ventana del monitor serie aparece la frase "La caja esta desbloqueada!".
Ahora para probar el circuito presionar el pulsador. El diodo LED verde se apaga y se
enciende el LED rojo y se muestra la frase "La caja esta bloqueada!" en el monitor serie.
Tambin en el monitor serie se muestra el valor del golpe vlido as como el nmero de
gelpes que es necesario efectuar para producir el desbloqueo.
El nmero de gelpes vlidos siempre sern y cuando se consigan efectuar estos golpes
sobre el umbador el diodo LE roo se apagar el LE erde se encender el
servomotor se mover grados a la posicn de desbloqueo, adems de aparecer una
notificación en el monitor serie indicando que el bloqueo está desactivado.
El valor para el e ideal puede variar con respecto a los que aparecen en este eemplo Esto
depende de un nmero de variables derentes, como el tipo de superficie sobre la que se apoya el
sensor, si el zumbador está sólidamente sujeto o se mueve cada vez que se golpea, etc. Usando el
monitor serie y golpeando varias veces el zumbador se podrá determinar el valor más apropiado de la
intensidad del golpe cada vez que se encienda el diodo led amarillo. También se puede hacer usando
uno de los ejemplos que incluye el IDE de Arduino y que se localiza dentro “Ejemplos”, “Analog” y el
programa “AnalogInOutSerial”. Puede acceder a la siguiente página web para ver en más detalle
como usar este programa: arduino.cc/analogtoserial
Si se coloca este proyecto dentro de una caja, será necesario hacerle unos agujeros para los LEDs y el
pulsador. También será necesario colocar le una palanca al servomotor que permita bloquear la tapa
de la caja. Es necesario hacer otro agujero para pasar el cable USB que se conecta al ordenador y así
poder ver la intensidad de los golpes que permiten abrirla.
También será necesario reorganizar la colocación de la placa de pruebas y de la tarjeta Arduino, o
soldar los LEDS y el pulsador mediante unos cables de forma que se puedan montar en la caja. El
soldar consiste en unir dos o más metales, normalmente un cable y un terminal de un componente,
usando otro material que permite fijarlos permanentemente y que no permita que se suelten a pesar
de que se produzca cualquier movimiento brusco. Sin nunca ha soldado antes, es mejor preguntarle a
alguien que ya tenga experiencia en este tipo de trabajos para que pueda ayudarle, o intentar
practicar con algunos cables que tenga a mano antes de hacerlo con algunos de los componentes de
este proyecto. Cuando se suelda algo esto significa que la conexión realizada al soldar es permanente,
así que asegurarse después de realizar la conexión de los LEDs y el pulsador que los cables no se
sueltan con facilidad, simplemente puede tirar de ellos para ver si la soldadura está bien realizada.
Dirigirse a la página arduino.cc/soldering para ver una buena explicación de cómo soldar.
Escribir sus propias funciones no solo permite controlar el flu o del c¡digo con más facilidad, también
ayuda a que los proyectos sean más legibles aunque el código se vaya haciendo cada vez más y más
grande. Con el tiempo, a medida que escriba más código, podrá disponer de un gran número de
funciones que pueda usar en diferentes proyectos, haciendo este proceso más rápido y único por su
estilo de programar. (Nota del traductor) Debe de gustarle la programación sino será imposible el
hacerlo.
En este proyecto simplemente se cuenta el número de golpes válidos (3) para desbloquear el
mecanismo, no importa el tiempo que se tarda en conseguirlo. Se puede mejorar el proyecto al usar
un temporizador con la instrucción mills(). Usar el monitor serie para comprobar si los golpes válidos
se efectúan en un periodo de tiempo específico. Puede volver a mirar el Proyecto del Reloj de Arena
Digital (página 86) para ver como trabaja esta instrucción. No está limitado a encontrar los golpes
válidos en un rango de tiempo. Puede buscar patrones complejos de golpes sobre la base de la
cantidad de vibración y tiempo juntos. Existe un gran número de ejemplos en Internet que tratan de
como hacer esto, buscar “Arduino knock lock” para encontrar más ejemplos de este tipo de proyecto.
Los zumbadores de tipo piezo eléctrico se pueden usar como entradas cuando
se conectan formando un divisor de tensión junto con una resistencia de gran
valor. El diseño de una función es una forma fácil de escribir código que se
puede usar para tareas concretas y/o en otros proyectos diferentes.
La capacidad es una medida que indica la cantidad de carga eléctrica que un cuerpo puede almacenar.
La biblioteca comprueba dos terminales de Arduino (uno es un emisor, el otro es un receptor), y mide el
tiempo que tardan en alcanzar el mismo estado. Estos terminales se conectarán a un objeto metálico
como pueda ser una lámina de aluminio. A medida que se acerque al objeto metálico, su cuerpo
absorberá alguna carga eléctrica, haciendo que transcurra más tiempo para que los dos terminales
tengan el mismo estado.
MONTANDO EL
CIRCUITO
Fi½ura 1
Conectar el diodo LED al pin 12 y conectar el cátodo a masa a través de una resistencia de
220 ohmios como se muestra en esta ilustración.
Conectar el pin digital 2 y el 4 a la placa de pruebas. Conectar estos dos pines entre sí
mediante una resistencia de 1Mega ohmio. En la misma línea de pines de la placa de
pruebas en donde se conecta el terminal 2 insertar un cable largo (como mínimo entre 8 y
10 centímetros) que salga fuera de la placa de pruebas. El otro extremo conectarlo a una
lámina de aluminio como pueda ser un trozo de papel de aluminio. Este será el sensor.
Al igual que con otros proyectos con LEDs, se puede poner un difusor encima del LED para conseguir
una luz mucho más atractiva. Una bola de pin-pon o una pantalla para lámpara fabricada con papel o
plástico pueden valer perfectamente como difusores y funcionarán perfectamente.
Se puede ocultar el sensor detrás de algo solido y ver si seguirá funcionando. La capacidad se puede
medir a través de un material no conductor como la madera, el plástico o el cristal. Si se aumenta el
tamaño del sensor de forma que su superficie metálica aumente también se incrementará la
sensibilidad del circuito: se puede conectar una hoja de aluminio de mayor tamaño, o una placa de
cobre al final del cable. Se podría montar el diodo LED al final de un cilindro de plástico con el difusor
encima y a continuación fabricar con una madera fina un base recubierta por su parte interior con
papel de aluminio conectando el cable de la placa de pruebas a este papel. De esta manera se
fabricará una lámpara cuya base puede funcionar como un sensor al tacto. Actualizar la variable del
umbral dentro del código cuando se modifique el tamaño del sensor para asegurarse que el circuito
funciona correctamente.
EL CÓDIGO
Configurar una variable para el umbral de detección el cual encenderá la lámpara un vez
superado este umbral. Deberá de cambiar este valor del umbral después de comprobar el
valor que permite encender el LED al tocar el sensor.
En esta línea se define el pin del LED para poder encenderlo y apagarlo.
En el bloque de la función setup(), abrir el monitor serie a una velocidad de 9600 baudios
por segundo. Esto se hace para poder ver los valores de lectura del sensor en la ventana
del monitor serie. Aquí también se define el pin del led como OUTPUT (salida).
Dentro de la función loop(), crear una variable del tipo long para guardar el valor del
sensor. La librería devuelve el valor del sensor usando un comando llamado
capacitiveSensor() que toma un argumento que identifica el número de muestras que se
van a leer (30). Si se leen unas pocas de muestras, será posible ver una gran variación de
valores en el sensor. Si se indican demasiadas muestras, será necesario introducir un
retardo para que le de tiempo a leer tantas veces. 30 muestras es un buen valor para
comenzar. A continuación se muestra el valor que se lee del sensor en la ventana del
monitor serie.
Con una instrucción if()....else, se comprueba si el valor leído del sensor es mayor que el
valor del umbral. Si es así, se enciende el diodo LED rojo. Si no es así, se apaga el LED.
COMO SE UTILIZA
DespuÁs pe progpamar la tarÂeta Arpuino será necesario averÃÄÅar ÆÅe valores son los ÆÅe
encienpen el piopo LED al tocar la lámina metálica (sensor)Ç Abrir el monitor serie È
anotar los valores ÆÅe aparecen cuanpo no se toca el sensorÇ Éocar suavemente sobre la
lámina metálica ÆÅe hace pe sensor, pebe pe ver como aumentan los valore mostrapos en
el monitor serieÇ Éocar hacienpo maÈor presión y los valores deberán de aumentar mucho
más.
Una vez que tenga una idea del rango de valores que produce el sensor según el nivel de
presión ejercido, volver al programa (sketch) y cambiar el valor de la variable del umbral a
un número ligeramente por encima cuando no se toca el sensor, pero con un valor menor
que el que aparece cuando se toca. Por ejemplo, si el valor mostrado sin tocar varia entre
0 y un valor máximo de 20, y cuando se toca sin presionar varia entre 1300 y más de
2000, se puede dejar el valor del umbral como está.
Es posible hacer que la lámpara se encienda sin tocar la lámina metálica, ya que sin tocar
(valores entre 0 y 15) los valores son muy bajos y si se acerca un dedo a menos de unos
milímetros de la placa los valores aumentan a un mínimo de 23 (puede variar). Por tanto
si ahora se pone el valor del umbral a 30 será posible encender la lámpara sin tocar el
sensor. Cargar el sketch con este nuevo valor del umbral. El diodo LED deberá de
encenderse si se aproxima un dedo a pocos milímetros del sensor sin tocarlo y deberá de
apagarse cuando se aleje. Si no consigue que se encienda el LED puede disminuir el valor
del umbral un poco (de 30 a 20).
Habrá observado que los valores mostrados en el monitor serie varían según el nivel de presión
ejercido sobre el sensor. ¿Puede usar estos valores para conseguir otras interacciones con el diodo
LED ? ¿Se podrán usar múltiples sensores para variar gradualmente la luz del LED hasta que se consiga
el mayor brillo posible y para apagar la luz la suavemente? Si coloca diferentes valores de resistencia
entre los pins 2 y 4 conseguirá cambios en la sensibilidad. ¿Es esto útil para su interface?
Se hau realizado un montón de cosas interesantes con el mundo físico, ahora es el momento de
controlar un ordenador usando Arduino. Cuando se programa Arduino, se está abriendo una conexión
entre el ordenador y el microcontrolador de la placa Arduino. Se puede usar esta conexión para enviar
datos de ida y vuelta a otras aplicaciones.
Arduino tiene un chip que convierte la comunicación USB del ordenador en una comunicación serie que
Arduino puede usar. La comunicación serie permite que dos equipos electrónicos, una tarjeta Arduino y
un PC, puedan intercambiar bits de información en serie, es decir, uno tras otro en el tiempo.
Para poder establecer una comunicación serie entre dos dispositivos es necesario que la velocidad de
transmisión de uno a otro, y al revés, sea la misma. Probablemente habrá observado cuando ha usado el
monitor serie que en la parte inferior derecha de la ventana aparece un número. Ese número, 9600 bits
por segundo, o baudios, es el mismo valor que se ha declarado usando la instrucción ÒÓriÐÑÔÕÓÖin×Ø. Esa
es la velocidad a la cual Arduino y el ordenador intercambian datos. Un bit es la unidad mínima de
información que un ordenador puede entender.
Se ha usado el monitor serie para examinar los valores de las entradas digitales; se usará un método
similar para obtener valores con un programa que es un entorno de programación diferente al IDE de
Arduino y que se conoce con el nombre de ÙrocÓÚÚinÖ. Processing está basado en Java, el entorno de
programación de Arduino está basado en Processing. Ambos son muy similares, así que no debería tener
ningún problema para usarlo.
Antes de comenzar con el proyecto, descargar la última versión de Processing de la página
processing.org. Le puede resultar útil mirar el apartado de “Getting started” (Comenzando) y echar un
vistazo los tutoriales de la página processing.org/learning. Toda esta información le ayudará a
familiarizarse con Processing antes de comenzar a escribir el software para comunicarse con Arduino.
La forma más eficiente de enviar datos entre Arduino y Processing es usando la función ÛerialÜÝrite))
en Arduino. Es similar a la función ÛerialÜÞrißt)) que se va a usar para enviar información desde
Arduino al ordenador que este conectado, pero en lugar de enviar información que se puede leer por
los humanos como son números y letras, se enviarán valores entre 0 y 255, como un grupo de bytes.
Esto limita los valores que Arduino puede enviar, pero permite una transmisión más rápida de la
información.
Tanto en el ordenador como en Arduino, existe algo llamado buffer serie el cual almacena en su
interior información hasta que el programa la necesite. Se enviarán bytes desde Arduino al buffer
serie de Processing. Cuando el programa lee la información que contiene el buffer, se vacía el espacio
del buffer para guardar más información que le pueda enviar el programa Arduino.
Cuando se está usando una comunicación serie entre dispositivos y programas, es muy importante
que ambos sepan cual será la velocidad de comunicación entre ellos, y además el tipo de información
que deberían estar esperando. Cuando se encuentra con alguien que conoce, probablemente esperará
que le diga “Hola”, si por el contrario le dice algo como “El gato está con el pelo erizado”, su respuesta
le cojera por sorpresa. Con el software ocurre lo mismo, será necesario que ambos programas estén
de acuerdo sobre lo que se enviá y sobre que se recibe.
àiáâra 1
MONTANDO EL
CIRCUITO
Fiãura ä
EL CÓDIGO
DE ARDUINO
EL CÓDIGO
DE PROCESSING
El lenguaje de Processing es similar al lenguaje de Arduino, pero hay bastantes diferencias
que deberá de buscar dentro de los tutoriales de este programa y dentro de la guía
“Getting Started” mencionada con anterioridad para conseguir familiarizarse con este
lenguaje.
Abrir una nuevo sketch de Processing. Processing, a diferencia de Arduino, no sabe
trabajar con los puertos sin que se incluya una librería externa. Importar la librería serie.
Es necesario crear un copia del objeto serie, tal como se hizo en Arduino con la librería
Servo. Se usará este nombre único siempre que se necesite usar la conexión serie.
Para usar imágenes en Processing, es necesario crear un objeto que contendrá la imagen
y darle un nombre.
C÷ea÷ una va÷iable que guardarø el ùatiz del color de fondo del logo de Arduino. El logo es
un fichero de imagen png, y tiene transparencia, así que es posible ver como cambia el
color de fondo.
Processing tiene una función setnp(), al igual que Arduino. Aquí es donde se abrirá la
conexión serie además le darle al programa un par de parámetros los cuales serán usados
mientras se ejecuta el sketch.
Para cargar el logo de Arduino dentro del sketch, leerlo en el objeto logotipo que se ha
creado con anterioridad, Cuando se proporciona la URL de una imagen, Processing la
descargará cuando se ejecute el programa.
Con la función süýe)(, se le indica a Processing el tamaño de la ventana de visualización
que contiene la imagen. Si se usan loþoÿüût y loþoÿeüþt como argumentos, el sketch
escala automáticamente el tamaño de la imagen que se está usando.
Es necesario indicarle a Processing en que puerto está conectada la tarjeta Arduino. Para
que el objeto llamado üPnerto pueda almacenar la información que necesita, el
programa también necesita saber que es una copia del objeto serie. Los parámetros que
hay que indicar son con que aplicación se va a hablar, a través de qué puerto serie se va a
comunicar y a que velocidad lo hará.
El atibuto this le dice a Processing que se va a usar una conexión serie con esta
aplicación. El argumento de la instrucción Serial.list() [0] especifica cual será el puerto
que se va a usar. Serial.list() contiene una matriz de todos los dispositivos serie que están
conectados. El argumento 9600 debe de resultarle familiar, define la velocidad a la cual el
programa se va a comunicar.
CÓMO SE UTILIZA
Conectar la placa Arduino y abrir el monitor serie. Girar el mando del potenciómetro de la
placa de pruebas. Debe de verse un número de caracteres cuando se gira el mando. En el
monitor serie se esperan caracteres ASCII, no bytes en bruto. ASCII es un tipo de
información codificada para representar texto en los ordenadores. Lo que ve en la
ventana es el monitor serie tratando de interpretar los bytes como código ASCII.
Cuando se utiliza Serial.println(), se enviá información con formato para el monitor serie.
Cuando se utiliza Serial.write(), como en esta aplicación que se esta realizando ahora, se
está enviando información en bruto. Programas como Procesing puede entender estos
bytes en bruto.
Cea el mono se y mantene abeo el ID de Arduino. Ab el dograma
Pocessing y cagar el setch, e ecutalo al presionar el botn con oma de lecha dentro
del ID de Pocessing. !irar la ventana de salida de Pocessing (dae in eior)
Debe de
vese una imagen similar a la mostada en la igura in eior (s taba a con %indo&$
ordenador. Si usa un sistema operativo como pueda ser OSX, buscar una cadena de texto
en donde aparezca algo como “/dev/tty.usbmodem411”, los más probable es que sea el
primer puerto disponible de la lista. En Linux, puede aparecer como “/dev/ttyUSB0” o
similar. En Windows (como en la imagen superior), aparecerán como puertos COM, el
mismo que se uso con el IDE de Arduino y alguno más; en este caso los puertos COM1 y
COM11. El número que aparece delante de
eriallist )) es el número de puerto que se
va a usar (0 en este caso). Cambiar este número en el sketch de Processing para que
coincida con el puerto de comunicaciones del ordenador. En este caso será el puerto
COM11. Por tanto la instrucción del sketch de Processing en Windows quedará de esta
forma “ miPuerto = new Serial(this, Serial.list()[11], 9600);”.
Una vez ue haya girado el potenciómetro y obtenido un color de fondo según el deseo de su corazón,
intente reemplazar el potenciómetro por un sensor analógico (detector de luz, temperatura, etc).
Encontrar algo que le parezca interesante para controlar el color de fondo. ¿Qué le parece esta
interacción? Es probablemente diferente cuando se usa un ratón o un teclado ¿cual es le gusta más de
los dos?
Cuando se usa la comunicación serie, solo una aplicación se puede comunicar con Arduino en ese
momento. Así que si se está ejecutando el sketch de Processing que está conectado a Arduino, no será
posible cargar un nuevo sketch en Arduino o usar el monitor serie del IDE de Arduino hasta que se
pare el sketch de Processing.
Con Processing y otros entornos de programación, puede controlar la comunicación con el ordenador
de una forma llamativa y novedosa. Si se muestra interesado acerca de las posibilidades de controlar
los contenidos de su ordenador, puede dedicarle algún tiempo a la experimentación con Processing.
Existen varios ejemplos de comunicación serie tanto en el IDE de Arduino como en el IDE de
Processing que le ayudarán a saber más sobre este tema.
Advertencia: Ya no será mas un principiante si esta realizando este proyecto. Abrirá un dispositivo
electrónico (mando a distancia, teclado, etc) y lo modificará. Perderá la garantía al abrirlo, y si no
tiene cuidado podría estropearlo. Debe de asegurarse de que todos los conceptos básicos de la
electricidad y de la electrónica que se han visto en los proyectos anteriores le resultan familiares antes
de realizar este proyecto. Le recomendamos que utilice componentes y dispositivos electrónicos
baratos en los proyectos que realice, y que no le importe estropear, hasta que adquiera la experiencia
y confianza necesaria en el montaje de proyectos electrónicos.
En tanto que Arduino puede controlar un montón de cosas, algunas veces es más fácil usar herramientas
que han sido creadas para propósitos específicos. Quizás quiera controlar una televisión o un
reproductor de música, o conducir un coche de control remoto. Muchos de los dispositivos electrónicos
disponen de un mando de control con botones, y muchos de esos botones se pueden hackear de
manera que pueda “presionarlos” usando Arduino. El control de una grabadora de sonido es un buen
ejemplo. Si quiere grabar y después reproducir el sonido grabado, le podría costar un gran esfuerzo
conseguir que Arduino haga esto. Es mucho más fácil obtener un pequeño dispositivo que grabe y
reproduzca sonidos, y reemplazar sus botones por las salidas controladas por Arduino.
Los o'to"co'#"dor() son circuitos integrados que permiten controlar un circuito desde otro circuito
diferente y sin ninguna conexión eléctrica directa entre los dos. Interiormente un optoacoplador de este
tipo dispone de un diodo LED (circuito de control) y un foto transistor que actuá como un detector de
luz (circuito a controlar). Cuando el diodo LED interno del optoacoplador se enciende mediante Arduino,
el detector de luz cierra un interruptor interno (transistor). El interruptor interno esta conectado a dos
terminales de salida del optoacoplador (terminales 4 y 5). Cuando este interruptor esta cerrado, los dos
terminales de salida se conectan entre sí. Cuando el interruptor esta abierto, los terminales 4 y 5 están
desconectados. De esta manera, es posible cerrar interruptores de otros dispositivos sin una conexión
eléctrica directa con Arduino, usando siempre un optoacoplador.
En este proyecto, los diagramas son para controlar un módulo de grabación digital que permite grabar y reproducir
un sonido durante 20 segundos, pero esta idea es también válida para cualquier dispositivo electrónico que
disponga de un interruptor al cual se pueda acceder. Mientras sea posible para realizar este proyecto se
recomienda hacerlo sin soldar ningún cable, así será mucho más fácil su realización, en caso contrario puede abrir
el siguiente enlace para saber cómo soldar: arduino.cc/soldering
MONTANDO EL
CIRCUITO
Fi*ura 1
Colocar el pin 1 del optoacoplador al terminal 2 de Arduino en serie con una resistencia
de 220 ohmios (recordad, se alimenta un diodo LED en el interior así que hay que
conectar le una resistencia para que no se queme). Conectar el pin 2 del optoacoplador a
masa.
Debajo del botón hay dos pequeñas láminas metálica. Este diseño es típico de muchos
dispositivos electrónicos que tienen botones que se presionan. Las dos “horquillas” de
este diseño son los dos lados del interruptor. Un pequeño disco de metal en el interior del
botón de presión conecta estas dos horquillas metálicas cuando se presiona el botón.
Cuando las horquillas metálicas se conectan entre sí, el interruptor esta cerrando el
circuito de la placa. Se cerrará este interruptor usando el optoacoplador.
Esto método, cerrar un interruptor usando un optoacoplador, trabaja solo si uno de los
dos lados del interruptor del pulsador de presión esta conectado a masa del módulo de
sonido. Si no está seguro de que su módulo este conectado de esta forma, usar un
polímetro y medir la tensión entre una de las pestañas y masa de su dispositivo. Es
necesario hacer esto con el circuito alimentado, así hay que tener cuidado de no hacer un
cortocircuito con las puntas del polímetro al tocar en algún lugar de la placa.
Una vez que sepa qué horquilla está conectada a masa, podrá quitarle alimentación al
circuito.
Lo siguiente que debe de hacer es conectar un cable a cada una de las pequeñas láminas
metálicas u horquillas. Si va a soldar unos cables, tenga cuidado de no unir
accidentalmente estas dos pestañas con un punto de estaño, de manera que el
interruptor quede permanentemente cerrado. Si no a va a soldar y va a usar pegamento,
asegurarse que las conexiones está bien realizadas, ya que si no el interruptor no se
cerrará. Al final puede probar con un polímetro en la escala de resistencia que el valor en
ohmios entre los cables unidos a las horquillas es prácticamente infinito. En caso de que
se obtenga un valor inferior a 1 ohmio significa que existe un cortocircuito entre las
láminas metálicas.
Conectar los dos cables unidos a las láminas metálicas de su módulo de sonido a los
terminales 4 y 5 del optoacoplador. Conectar el cable del interruptor que esta conectado
a masa al terminal 4 del optoacoplador. Conectar el otro cable al terminal 5 del
optoacoplador.
EL CÓDIGO
Esperar durante 21 segundos para que todo el mensaje grabado se pueda reproducir
antes de comenzar de nuevo con loop().
CO/0 SE UTILIZA
Conectar la alimentación del módulo de sonido. Presionar y mantener el botón de
grabación de este módulo. Mientras el botón está presionado se puede realizar una
grabación de audio usando el micrófono que incorpora. Usar su voz, de un gato, o usar las
ollas y las sartenes de la cocina para hacer algo de ruido (ser cuidadoso con el gato).
Una vez que este satisfecho con la grabación realizada, darle alimentación a la placa
Arduino usando el cable USB y conectándolo a un ordenador. Su grabación deberá
comenzar a sonar. Si la grabación dura 20 segundos comenzará de nuevo a funcionar
unos segundos después de que finalice.
Los ciacuitos integrados están prácticamente en todos los equipos electrónicos. El chip grande de 28
pins de la placa Arduino es un circuito integrado o IC. Existen otros ICs en la placa Arduino que le dan
soporte a este chip de 28 pins, permitiendo que se comunique con el PC y que pueda disponer de una
tensión de alimentación estabilizada. El optoacoplador y el chip principal de Arduino son integrados
con encapsulados llamados 1nal 23-453e Pac6a7e 812P9 (encapsulado en doble línea). Estos chips tipo
DIP son los que la mayoría de los aficionados a la electrónica utilizan por que son más fáciles de
colocar en la placa de pruebas y además no hay que soldarlos para poder usarlos.
El ejemplo del proyecto solo reproduce el mismo sonido o sonidos cada intervalo regular de tiempo.
¿Cómo se podría incorporar unas entradas como en proyectos anteriores para activar estos sonidos en
un determinado momento? ¿qué otras cosas que se alimentan mediante una batería y que tenga por
casa se podrían controla mediante Arduino? Esta técnica de controlar un dispositivo electrónico
usando un optoacoplador y conectando los dos terminales de un interruptor puede ser usado en
muchos otros dispositivos. ¿Qué otros dispositivos quiere usted controlar?
A/Z
Aceleró-metro Inducción
Actuador Int
Aislante Interruptor
Amperaje (amperios) LED de cátodo común
Analógico Ley de Ohm
Ánodo Librería
Argumento Long
Baudio Masa
Binario Matríz
Bit Microcontrolador
Booleano Mili segundo
Buffer serie Modificador
Byte Modulación por Ancho de Pulso (PWM)
Calibración Monitor serie
Capacidad Objeto
Carga Ohm
Cátodo Onda cuadrada
Circuito Optoacoplador
Circuito integrado (IC) Paralelo
Comunicación serie Parámetro
Condensadores de desacoplo Periodo
Conductor Polarizado
Constante Processing
Convertidor Analógico-a-Digital (ADC) Pseudocódigo
Copia Puerta (transistor)
Corriente Relación cíclica
Corriente alterna Resistencia
Corriente continua Sensor
Cortocircuito Serie
Depuración Sin signo
Digital Sketch
Divisor de voltaje o de tensión Soldar
Drenador (transistor) Tensión inversa
Electricidad Transductor
Encapsulado en doble línea (DIP) Transistor
Flotante USB
Foto célula Variable
Foto resistencia Variable global
Foto transistor Variable local
Fuente (transistor) Voltaje
Fuente de alimentación
Función
Hoja de datos
IDE
Index
G OSARIO
HAY UNA SERIE DE TÉRMINOS NUEVOS QUE HA
APRENDIDO AL REALIZAR ESTOS PROYECTOS. LOS HE
RECOGIDO TODOS AQUÍ PARA CREAR UN GLOSARIO
A
Aceleró-metro: Se trata pe @n sensor que mide la Ánodo: El terminal positivo de un diodo (recordar que un
aceleración. Algunas veces también se usan para detectar LED es un tipo de diodo).
la orientación o la inclinación.
Argumento: Un tipo de dato que se le suministra a una
Actuador: Un tipo de componente electrónico que función como una entrada. Por ejemplo, al usar
convierte la energía eléctrica en movimiento. Los motores digitalRead() hay que indicar que pin se va a chequear, en
son un tipo de actuador. este caso se le suministra el argumento con el formato de
un número digitalRead(7), o una variable númerica,
Aislante: Un tipo de material que evita que la corriente digitalRead(PinPulsador).
eléctrica pueda circular. Los materiales conductores como
los cables se cubren con materiales aislantes como el
plástico.
cargas eléctricas siempre circulan en el mismo sentido. l a Un tipo de energía producida por las cargas
U IHGMFHFS SK
Cuando se conecta una bombilla de 9V en paralelo con eléctricas. Se pueden usar componentes electrónicos para
una pila de 9V se produce este tipo de corriente. En todos transformar la electricidad en otras formas de energía
los proyectos de Arduino se ha consumido una corriente como luz y calor.
continua. Recordad que la corriente se mide en culombios
y que la corriente dividida del tiempo o intensidad se mide u apsNlaSo eu SoVlI lWuIa (OXY)K Un tipo de
U H
en amperios, y se puede medir con un polímetro. encapsulado usado con los circuitos integrados que
permite que estos componentes se puedan insertar con
o o Cuando se produce un problema en un
DEMG HFMHNFG K
facilidad en una placa de pruebas o en un zócalo montado
circuito eléctrico o electrónico de manera que la sobre una PCB.
intensidad que necesita para funcionar es muy superior a
la que fuente de alimentación puede proporcionar y por
tanto el circuito deja de funcionar o se quema. Los
cortocircuitos se puede producir en varias partes de un F
circuito, en un componente electrónico como pueda ser
un transistor, un condensador, etc. En algunos casos si la ZloGauGI ([loaGJK Un tipo de variable que se puede
fuente de alimentación puede proporcionar una expresar como una fracción. Esto implica el uso de
intensidad de cortocircuito el componente que provoca decimales para los números con coma flotante.
este cortocircuito puede llega a arder.
o o H\lNlaK Componente que convierte la energía
Z G
OFQFGalK Un sistema de valores discretos. Como Arduino es controlar mediante una corriente de base también se
un tipo de dispositivo digital, solo trabaja con dos estados puede controlar por luz, ya que dispone de una superficie
discretos, apagado o encendido. Digital significa siempre de cristal que deja pasar la luz a su interior.
solo dos estados, binario, cero o uno. Por eso Arduino
necesita de un convertidor analógico – digital, para
Fuente (transistor): El terminal de un transistor del tipo Int: Un tipo de variable que puede guardar un número
Mosfet que se conecta a masa. Cuando el terminar de entre -32.768 y 32.767.
control o puerta de este transistor recibe una tensión, la
fuente y el drenador se conectan, como si fuese un Interruptor: Un componente que puede abrir o cerrar un
interrutpor, y de esta forma se cierra el circuito que está circuito eléctrico. Existen varios tipos de interruptores; los
siendo controlado. que se incluyen en el kit no son exactamente
interruptores sino pulsadores, ya que solo cierran el
Fuente de alimentación: Una fuente de energía, circuito en el momento de presionarlos y solo si se
generalmente un batería, un transformador, o también mantienen presionados, si se deja de presionar el
un puerto USB de un ordenador. Puede ser de varios pulsador abre el circuito.
tipos, estabilizada o no estabilizada, de tensión alterna o
de tensión continua. Por lo general se especifica la
tensión o tensiones junto con la máxima intensidad que
puede proporcionar antes de que falle. L
Función: Un bloque de código que ejecuta una tarea
concreta cuando es llamada por el programa principal. LED de cátodo cómun: Un tipo de LED que dispone de
varios led en su interior para genera varios colores, con
un solo cátodo y un ánodo por cada led interno
(normalmente tres).
M
I
Masa: El punto de un circuito donde normalmente hay
IDE: Significa “Integrated Development Environment” o cero voltios y que se conecta a las carcasas metálicas de
“Entorno de Desarrollo Integrado”. El IDE de Arduino es el los equipos cuando es posible. Normalmente se suele
lugar donde se escribe el programa que se va a cargar a la considerar la masa como el negativo de la fuente de
tarjeta Arduino. Contiene todas las funciones que Arduino alimentación o de una pila, y sin este negativo o masa el
puede “entender”. Otros entornos de programación circuito no se cierra y por tanto la energía eléctrica no
como Processing tienen su propio IDE. puede fluir.
Index: El número suministrado en una matriz que indica a Matriz: Son un grupo de variables que se identifican con
qué elemento se está refiriendo. Los ordenadores están un único nombre dentro de un programa, y se accede a
indexados desde cero, lo cual significa que comienzan a estas variables dentro de la matriz mediante un índice
contar desde 0 en lugar de 1. Por ejemplo, para acceder al numérico o index.
tercer elemento de una matriz llamada tonos, se escribe
tonos[2]. Microcontrolador: El cerebro de Arduino, se trata de un
circuito integrado que se puede programar para recibir,
Inducción: El proceso de usar energía eléctrica para crear enviar, procesar y visualizar información.
un campo magnético. Se usa en los motores para hacerlos
girar.
para modificar el comportamiento de las variables. Por faralelo` Los componentes de un circuito que están
ejemplo, la variable int PinSalida = 13; guarda un número conectados a través de los mismos dos puntos se dicen
entero que se puede modificar en el programa, en cambio que están en paralelo. Los componentes conectados en
si se usa con: const int PinSalida = 13; al igual que antes paralelo tienen siempre la misma tensión entre ambos.
guarda un número entero (13) pero además se indica que Por ejemplo, una resistencia R1 en paralelo con una
se trata de una variable constante que no se puede resistencia R2 tendrán la misma tensión entre sus
modificar. extremos.
forma de simular una salida analógica cuando se utiliza parámetro que sirve de puente entre las variables locales
una salida digital. PWM hace que un terminal cambie su de la función, y los argumentos que recibe cuando se
valor entre el estado bajo y el estado alto a un ritmo muy llama a esta función.
rápido. El tiempo que está en estado alto con respecto al
tiempo que estado bajo determina el resultado de la Periodo: Tiempo durante el cual se repite la misma forma
simulación analógica. de onda. Si se varía el periodo de una onda también se
varía la frecuencia de la misma, ya que la frecuencia es
^ ouijor serie` Un circuito que está incorporado dentro igual a 1/Periodo. El periodo se mide en segundos y la
de la tarjeta de Arduino y que permite enviar y recibir frecuencia en ciclos por segundo o hercios.
información usando el IDE a dicha tarjeta. Ver las
opciones de la función Serial() en este enlace: Polarizado: Los terminales de los componentes
arduiuoklerial. polarizados (por ejemplo diodos LED, condensadores
electrolíticos, transistores, etc) tienen diferentes
funciones y hay que conectarlos de una forma
determinada. Los componentes polarizados si no se
mep` Unidad de medida de las resistencias. Processing: Un entorno de programación que se basa en
Representada por la letra omega (). el lenguaje java. Usado como una herramienta para
introducir a todo aquel que quiera trabajar con Arduino
muda auadrada` Un tipo de forma de onda que se en conceptos de programación, y en entornos de
identifica por tener solo dos estados, alto y bajo. Cuando producción. El IDE de Arduino está escrito en Processing,
se usa para generar tonos, los sonidos generados con esta así que le resultará muy familiar. Además Arduino y
onda puede resultar poco naturales. Processing comparten la misma filosofía y motivación, el
poder crear herramientas de código abierto que permitan
mcjoaaoclador` También se conoce como un opto- a personas que no son técnicos trabajar con hardware y
aislador, foto-acoplador, foto-interruptor y opto- software.
interruptor. Un diodo LED de infrarrojos es combinado
con un foto transistor sensible a la luz infrarroja dentro de Pseudo código: Un puente entre la escritura en un
un encapsulado sellado. El LED está colocado de forma lenguaje de programación y el uso de términos que el ser
que ilumina al foto transistor cuando se le aplica una humano puede entender al leerlos.
tensión, y de esta manera el foto transistor conduce al
recibir la iluminación del LED. Se utiliza para proporcionar
controla a un transistor del tipo Mosfet y que se conecta sido escritos dentro del IDE de Arduino.
a una salida de Arduino. Cuando a la puerta del transistor
se le aplica una tensión de +5V (estado alto), se comporta yol}art Proceso por el cual se realiza una conexión
como un interruptor cerrado entre los terminales eléctrica al unir dos componentes electrónicos, un
drenador y surtidor, cerrando de esta forma el circuito y componente electrónico y un cable, dos cables o un
haciendo que el componte conectado a él comience a componente electrónico que se une a una pista de cobre
funcionar (zumbador, bombilla, relé, etc). de una placa de circuito impreso. Para llevar a cabo este
proceso se usar estaño, el cual se calienta a más de 200
grados para derretirlo y unir de esta forma a los
materiales que se van a soldar. Esto proporciona un
R conexión sólida entre los componentes. Para soldar hay
que usar una herramienta llamada soldador de estaño o
estañador. Para realizar proyectos con las placas Arduino
us laviwn vxvlivat Una relación que indica la cantidad de se recomienda usar un soldador de estaño de 30 vatios
tiempo que una parte de una onda se encuentra en como máximo.
estado alto con respecto al periodo. Cuando se utiliza un
valor de PWM de 127 (de un total de 256), se produce
una relación cíclica en la onda que se genera del 50%,
esto quiere decir que estará en estado alto el 50% del
periodo. T
ussistsnviat La propiedad que presentan muchos ~snsiwn insrsat Tensión que aparece cuando una
materiales al paso de una corriente eléctrica a través de corriente atraviesa una bobina, la cual se opone a esta
ellos y que sirve para indicar si es un conductor de la corriente que lo ha creado. Puede ser creada por los
electricidad. La resistencia de un material se pueden motores cuando giran y puede dañar el circuito de control
calcular a partir de varios parámetros físicos del mismo, del motor si no se protege mediante un diodo en paralelo
pero también se puede usar la ley de Ohm para calcular la con el motor y colocado en sentido inverso.
resistencia en un circuito: R = V/I
~ rans}nvtort Algo que convierte una forma de energía en
otra forma de energía, como por ejemplo un altavoz, que
convierte la energía eléctrica en energía acústica
S (sonidos).
U
S : Puerto de un ordenador que utiliza el estándar del
V
Varial: Un lugar de la memoria de un ordenador o de
un microcontrolador en donde se almacena información
para ser usada por un programa. Las variables almacenan
valores los cuales pueden cambiar a medida que un
programa se ejecuta. Las variables son de varios tipos
según la clase de información que almacena y el tamaño
máximo de esa información, por ejemplo, una variable de
tipo byte solo puede guardar 256 valores diferentes, pero
una variable del tipo int puede guardar 65.536 valores.
Las variables pueden ser locales dentro un determinado
bloque de código, o globales para ser usadas en cualquier
parte del programa, (mirar Variable ocal y Variable
global).
APUNTES Y
LIBROS
RECOMENADOS
MANUALES Y APUNTES
APUNTES Y
LIBROS
RECOMENADOS
LIBROS
Las partes de este kit así como los proyectos que aquí se explican
forma el esqueleto de sus proyectos. Arduino puede hacer que sus
proyectos hagan algo. Depende de usted el hacerlos interesantes.