Está en la página 1de 40

Aprende Electrónica con la

Guía del Inventor de Sparkfun

ES
Unas Palabras

Acerca De Este Kit


El objetivo final de este kit es la diversión. Además de ésto, tiene
como propósito que te sientas cómodo usando una gran variedad
de componentes electrónicos a través de pequeños, simples y
sencillos circuitos. El objetivo es conseguir que funcione cada
circuito y después darte las herramientas para entender su
funcionamiento. Si encuentras algún problema, quieres hacer una pregunta, o conocer más acerca

Acerca Del Hardware Libre (Open Source)


Todos los proyectos de SparkFun y .:oomlout:. son de código abierto. ¿Que significa ésto?
Significa que todo lo relacionado con el desarrollo de este kit, ya sea esta guía, los modelos 3D, o
el código, están disponibles para su descarga gratuita. Pero va más allá, eres libre de reproducir o
modificarcualquiera de estos materiales y después distribuirlos por ti mismo. ¿La trampa? Muy
simple, está distribuido bajo una licencia Creative Commons (By - Share Alike). Esto significa que
debes darle crédito a .:oomlout:. en tus diseños y compartir tus desarrollos de la misma forma.
¿Por qué? Crecimos aprendiendo y jugando con el software de código abierto y fue una
experiencia divertida, pensamos que sería genial si una experiencia similar fuera posible con las
cosas físicas.
Más detalles sobre la licencia Creative Commons CC (By - Share Alike) pueden encontrarse en

Acerca De .:oomlout:.
Somos una pequeña y valerosa empresa centrada en producir
"productos de código abierto encantadoramente divertidos"
Para ver lo que hacemos
http://www.oomlout.com

Acerca De SparkFun
SparkFun es una joven energética empresa que busca hacer la electrónica, accesible y amigable a
todo el mundo - desde niños en educación primaria a ingenieros con un PhD.
http://www.sparkfun.com/

Acerca De Los Problemas


Nos esforzamos por entregarte el mayor nivel de calidad en todo aquello que producimos. Si alguna
vez encuentras una instrucción ambigua, If you ever find an ambiguous instruction, a missing
piece, o simplemente te gustaría hacer una pregunta, haremos los mejor que podamos para
ayudarte.
help@oomlout.com

Gracias por elegir .:oomlout:.


y SparkFun
TBCN
.: Donde Encontrar Todo :. tabla de contenidos

Antes de Empezar
{MONT} Montando las Piezas 2
{INST} Instalando el Software 3
{PROG} Una Introducción a la Programación 4
{ELEC} Una Introducción a la Electrónica 6

Los Circuitos
{CIRC01} Primeros Pasos - (LED Parpadeante) 8
{CIRC02} Diversión con 8 LED - (Múltiples LED) 10
{CIRC03} Gira Motor Gira - (Transistor y Motor) 12
{CIRC04} Un Solo Servo - (Servos) 14
{CIRC05} 8 LEDs Más - (Registro de desplazamiento 74HC595)
16
{CIRC06} Música - (Elementos Piezoeléctricos) 18
{CIRC07} Apretando Botones - (Botón pulsador) 20
{CIRC08} Girando - (Potenciómetros) 22
{CIRC09} Luz - (Fotorresistencia) 24
{CIRC10} Temperatura - (Sensor de Temperatura TMP36)26
{CIRC11} Cargas Grandes - (Relés) 28
{CIRC12} Luz Colorida - (LEDs RGB) 30
{CIRC13} Midiendo Flexiones - (Sensor de Flexión) 32
{CIRC14} Sensado Estravagante - (Potenciómetro Táctil) 34

1
01 MONT .: Construyéndolo :.
montando las

piezas

Base Arduino Protoboard Arduino


x1 x1 x1

.: Para una introducción sobre lo que Arduino es, visita :.


.: http://ardx.org/INTR :.
2
.: Instalando el IDE :. 02 INST
Este es el programa que se utiliza para escribir código del Arduino. instalando
Puede que al principio asuste un poco, pero una vez lo instales y
empieces a jugar con el, enseguida descubrirás todos sus secretos.
(software y hardw

Paso 1: Descarga el Software


Ve a
http://arduino.cc/en/Main/Software
descarga el software para tu sistema operativo

Windows XP Mac OSX


Paso 2: Descomprime el Software Paso 2: Abre el .dmg
Descomprime Abre (monta)
arduino-00rr-win.zip (rr- Nº versión) arduino-00rr-mac.dmg (rr- Nº versión)
Ruta Recomendada
c:\Archivos de Programa\

Paso 3: Acceso Directo


Abre
Paso 3: Copia la Aplicación
c:\Archivos de Programa\arduino-00rr\ (rr- Nº versión) Ve a
Click Derecho "Arduino" (en la sección de dispositivos del finder)
Arduino.exe (Enviar a>Escritorio (crear acceso directo)) Mueve
la Aplicación "Arduino" a la
carpeta "Aplicaciones"
Paso 4: Conecta Tu Arduino
Conecta tu Arduino:
ndo el cable USB incluido, conecta la placa Arduino a un puerto USB libre.
Espera a que aparezca un aviso
Paso 4: Instalar Drivers
.:Sólo Placas Duemilanove:.
Paso 5: Añadir nuevo Hardware Ir al
dispositivo "Arduino"
Saltar búscar en Internet
(click the next box when prompted to do so) Doble Click e Instalar
Instalar desde una localización específica FTDI Drivers for Intel Macs (r_r_rr).pkg
(click "Install from a list or specific location (Advanced)") (FTDI Drivers for PPC Macs (r_r_rr).pkg
Escoge la localización Reiniciar
Duemilanove Board
c:\Archivos de Programa\arduino-00rr\drivers\FTDI USB Drivers\
Uno Board
c:\Archivos de Programa\arduino-00rr\drivers\
Finalizado
Paso 5: Conecta Tu Arduino
Vista, Seven Conecta tu Arduino:
Usando el cable USB incluido, conecta tu placa Arduino en un puerto USB
Paso 5: Añadir nuevo Hardware Finalizado
Ejecutar el Administrador de Dispositivos
Inicio > Ejecutar > devmgmt.msc
Selecciona el Arduino
Otros dispositivos > Arduino Uno (Uno)
Actualizar Driver
click en "Actualizar software de controlador..." .: NOTA: :.
.: ¿Algún problema? :.
Seleccionar Driver .: ¿Te gustarían más detalles? ¿Usando Linux? :.
click en "Buscar software de controlador en el equipo" .: http://ardx.org/LINU :.
c:\Archivos de Programa\arduino-00rr\drivers\
Finalizado
3
03 PROG
.:Una Introducción a la Programación:.
introducción a

a programación

Arduino Programming in Brief


Arduino se programa en lenguaje C. Esto es una pequeña rápida introducción dirigida a la gente que
tiene algo de experiencia en programación y sólo necesitan un repaso de C y del IDE de Arduino. Si
encuentras los conceptos un poco intimidantes, no te preocupes, puedes empezar realizando los
circuitos e ir comprendiendo todo sobre la marcha. Para una introducción más a fondo, la página
Arduino.cc es perfecta.

Estructura
Cada programa de Arduino void setup(){ } void loop(){ }
Todo el código entre las dos Esta función se ejecuta una vez
(normalmente llamado
llaves será ejecutado una única 'setup' haya finalizado. Después
'sketch') requiere de dos vez cuando tu programa de de haber sido ejecutada una vez,
funciones (también Arduino sea iniciado. se ejecutará otra vez y otra, hasta

Sintáxis
Uno de los elementos // (comentario de /* */(comentario
frustrantes de C es el una línea) multilínea)
Es últil para escribirse notas a uno Si tienes mucho que decir, puedes
formato del código (ésto lo mismo sobre lo que hace cada extenderte por varias líneas. Todo
hace a su vez muy línea de código. Para esto, escribe lo que quede entre estos dos
potente). Si recuerdas lo dos barras y todo hasta el final de símbolos será ignorado en tu
la línea será ignorado por tu programa.
siguiente no deberías tener
programa.

Cada línea de código debe ser


{ } (llaves) terminada con un punto y coma
Usado para definir cuando un
(la ausencia de un punto y coma
bloque de código comienza y
es normalmente la razón por la
acaba (usado tanto en funciones
que un programa se niega a
como en bucles).

Variables
Un programa no es otra cosa que int (integer) long (long)
instrucciones para mover números El caballo de batalla, almacena Usado cuando un entero no es lo
de un lado a otro de forma números en 2 bytes (16 bits). No suficientemente grande. Usa 4
inteligente. Las variables son tiene decimales y almacenará un bytes (32 bits) de RAM y tiene un
usadas para esa tarea. valor entre -32,768 y 32,767. rango entre -2,147,483,648 y

boolean (boolean) float (float) char (character)


Una simple variable de Verdadero Usado para operaciones con coma Almacena un carácter utilizando el
o Falso. Útil por que sólo utiliza 8 flotante (decimales). Usa 4 bytes código ASCII (p.e. 'A' = 65). Usa
bits de RAM. (32 bits) de RAM y tiene un rango un byte (8 bits) de RAM. Arduino
entre -3.4028235E+38 y trata las cadenas como un vector
3.4028235E+38. de carácteres.

4
03 PROG
.:Para una referencia completa visita:. programming
http://ardx.org/PROG
primer
Operadores Matemáticos
Err:520
Operadores usados para
manipular números
(funcionan como simples

Operadores de Comparación
Err:520
Operadores usados para
comparaciones lógicas.

Estructura de Control
Los programas dependen if( condición ){ } for(int i = 0
else if( condición ){ } Usado cuando quieres repetir un trozo
de controlar lo que se else { } de código un número de veces
ejecuta a continuación, Ésto ejecutará el código entre las (puedes contar hacia arriba i++ o
llaves si la condición es verdadera y si hacia abajo i-- o usar cualquier
aquí están los elementos no comprobará la condición else if y si variable)
también es falso se ejecutará el código
del else.

Digital
pinMode(pin, modo); pinMode(pin, modo); digitalWrite(pin,
Usado para configurar el modo Usado para configurar el modo valor);
del pin, pin es el número de pin del pin, pin es el número de pin Una vez un pin se configura como
que quieras usar de 0 a 19 (los que quieras usar de 0 a 19 (los OUTPUT (salida), puedes
analógicos 0-5 son 14-19). El analógicos 0-5 son 14-19). El establecerlo como HIGH (alto,
modo puede ser entrada o salida. conectado a 5 voltios) o LOW

Analógico
Arduino es una máquina int analogRead(pin)
0 digital pero tiene la Cuando los pines analógicos de
habilidad de operar en el entrada son establecidos como
mundo analógico (mediante
trucos). He aquí cómo entradas puedes leer su
lidiar con cosas que no voltaje. Se devolverá
son digitales. un valor entre 0
int analogWrite(pin, (para 0 voltios) y
valor);

5
04 ELEC
.:Una Introducción a la Electrónica:.
introducción a

la electrónica
Electronics in Brief
No previous electronic experience is required to have fun with this kit. Here are a few details
about each component to make identifying, and perhaps understanding them, a bit easier. If at
any point you are worried about how a component is used or why it's not working the internet
offers a treasure trove of advice, or we can be contacted at help@oomlout.com

Detalle de Componentes
LED Que hace Nº de Patillas
(Diodo Emisor deluzLuz)
Emite cuando una pequeña corriente lo 2 (una más larga, ésta se conecta al positivo)
atraviesa. (en una única dirección) Cosas a tener en cuenta
Identificador - Solo funciona en una dirección
Se parece a una pequeña bombilla. - Necesita una resistencia limitadora de
corriente

Más Detalles

Diodo Que hace Nº de Patillas


El equivalente electrónico de una válvula 2
antiretorno. Permite el flujo de corriente en Cosas a tener en cuenta
una dirección pero no en la otra. - Sólo funciona en una dirección (la corriente
Identificador circulará si el terminal marcado con una línea
Normalmente un cilindro con patillas saliendo se conecta a masa)
de cada extremo. (y una línea descentrada Más Detalles
indicando la polaridad) http://ardx.org/DIOD

Resistencias Que hace Nº de Patillas


Restringen la cantidad de corriente que 2
atraviesa un circuito. Cosas a tener en cuenta
Identificador - Fácil de coger el valor equivocado
Cilindro con patillas saliendo de cada extremo. (comprueba los colores dos veces antes de
El valor se muestra mediante un sistema de usarlas)
codificación con colores. (par detallas mira la Más Detalles
siguiente página) http://ardx.org/RESI

Transistor Que hace Nº de Patillas


Usa una pequeña corriente para conmutar o 3 (Base, Colector, Emisor)
amplificar una corriente mucho mayor. Cosas a tener en cuenta
Identificador - Conectarlo al revés (también suele ser
Viene en muy variados empaquetados, pero necesario una resistencia limitadora de
puedes leer el identificador en el empaquetado. corriente en el pin de la base)
(P2N2222AG en este kit y encontrar una hoja Más Detalles
de características en la web) http://ardx.org/TRAN

Hobby Servo Que hace Nº de Patillas


Toma un pulso temporizado que lo convierte a 3
una posición angular del eje de salida. Cosas a tener en cuenta
Identificador - El conector no está polarizado, por lo que
Una caja de plástico con 3 cables saliendo de asegúrate de que lo conectas correctamente.
un lado y un eje con un trozo de plástico en su Más Detalles
extremo. http://ardx.org/SERV

Motor DC Que hace Nº de Patillas


Gira cuando una corriente lo atraviesa. 2
Identificador Cosas a tener en cuenta
Éste es fácil, se parece a un motor. - Usar un transistor o relé preparado para el
Normalmente un cilindro con un eje saliendo tamaño del motor que estés usando.
de un extremo. Más Detalles
http://ardx.org/MOTO

6
04 ELEC
introducción a

Detalle de Componentes (cont.) la electrónica


Elemento Piezoeléctrico Nº de Patillas
Que hace
Un pulso de corriente hará que cause un 2
click. Un tren de pulsos hará que emita un Cosas a tener en cuenta
tono. - Difícil de usarlo incorrectamente.
Identificador Más Detalles
En este kit vienen en un cilindro negro, pero http://ardx.org/PIEZ
a veces solamente son un disco dorado.

IC (Circuito Integrado) Nº de Patillas


Que hace
Contiene cualquier tipo de complicada 2 - 100s (en este kit hay uno con 3 (TMP36)
electrónica dentro de un empaquetado y otro con 16 (74HC595)
sencillo de usar. Cosas a tener en cuenta
Identificador - Correcta orientación. (busca la marca que
El identificador de la parte está escrito en el indica el pin 1)
empaquetado. (a veces se necesita mucha Más Detalles

Botón Pulsador Nº de Patillas


Que hace
Cierra un circuito cuando es pulsado. 4
Identificador Cosas a tener en cuenta
Un pequeño cuadrado con patillas en los - Son cuadrados por lo que se pueden
extremos y un botón encima. insertar cada 90º de giro.
Más Detalles
http://ardx.org/BUTT

Potenciómetro Nº de Patillas
Que hace
Produce una resistencia variable 3
dependiendo de la posición angular del eje. Cosas a tener en cuenta
Identificador - Comprar accidentalmente los de escala
Pueden estar empaquetados de formas muy logaritmica.
distintas, busca un eje para identificarlo. Más Detalles
http://ardx.org/POTE

Fotorresistencia Nº de Patillas
Que hace
Produce una resistencia variable que 2
depende de la cantidad de luz que incide en Cosas a tener en cuenta
ella. - Recuerda que necesita estar en un divisor
Identificador de tensión antes de que pueda sacar
Normalmente un pequeño disco con una información útil.
superficie lisa y una línea serpenteante que Más Detalles

Código Color de Resistencias


primer dígito Recorte Patillas
Ejemplos: segundo dígito Alguno de los componentes en este kit vienen con unas
Nº de ceros patillas muy largas. Para hacerlos más compatibles con la
tolerancia protoboard se necesitan un par de cambios.
LEDs:
Corta las patillas de manera que la patilla larga mida
~10mm y la corta mida ~7mm.
Resistencias:
0 - Negro 4 - Amarillo 8 - Gris Dobla las patillas de manera que formen 90 grados del
1 - Marrón 5 - Verde 9 - Blanco cilindro. Entonces recórtalas para que midan ~6mm.
2 - Rojo 6 - Azul 20%- nada Otros Componentes:
Otros componentes puede que necesiten recortes.
3 - Naranja 7 - Morado 10%- plata
7
.:Primeros Pasos:.
CIRC-01
.:(LED

Que Estamos Haciendo


Los LED (diodos emisor de luz) son usados en cantidad de cosas,
que es la razón por la que los hemos incluido en éste kit.
Empezaremos con algo muy sencillo, encendiendo y apagando uno
repetidamente, produciendo el efecto de parpadeo. Coge los
componentes listados más abajo, fija la plantilla a la protoboard y entonces conecta todo. Una vez
el circuito esté montado, necesitarás subir el programa. Para esto, conecta la placa Arduino en tu
puerto USB. Entonces selecciona el puerto correcto en Tools > Serial Port > (el puerto de tu
Arduino). Ahora sube el programa llendo a File > Upload to I/O Board (ctrl+U). Finalmente,
regocíjate del trabajo bien echo y de las posibilidades que controlar luces ofrece.

Si tienes problemas subiendo el programa, una completa guía de resolución de problemas puede
encontrarse en: http://ardx.org/TRBL

El Circuito
Componentes:
CIRC-01 Conector 2 Pines LED Amarillo 5mm Cable
Plantilla Protoboard x4 x1
x1

Resistencia 330 Ohm


Naranja-Naranja-Marrón
x1

Esquemático
Arduino
pin 13

patilla larga
+
LED
(diodo emisor de luz)

Resistencia (330ohm)
(naranja-naranja-marrón)

Arduino
pin 13

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS01S
.:view:.
video de montaje
http://ardx.org/VIDE01

8
Código (no hace falta escribir, sólo unos clicks)
CIRC-01
File > Examples > 1.Basic > Blink
ejemplo de la genial página arduino.cc, échale un vistazo para otras ideas)
a
/* Blink
* Enciende un LED por un segundo, entonces lo apaga por otro,
* repetidamente.
* Created 1 June 2005 By David Cuartielles
* http://arduino.cc/en/Tutorial/Blink
* based on an orginal by H. Barragan for the Wiring i/o board
*/

int ledPin = 13; // LED conectado al pin digital 13

// La función setup() sólo se ejecuta una vez, cuando el sketch comienza


void setup() { // inicializar el pin digital como salida:
pinMode(ledPin, OUTPUT); }

// la función loop() se ejecuta una y otra vez,


// mientras el ARduino esté alimentado
void loop() {
digitalWrite(ledPin, HIGH); // encender el LED
delay(1000); // esperar un segundo
digitalWrite(ledPin, LOW); // apagar el LED
delay(1000); // esperar un segundo
}

¿No Funciona? (3 cosas para intentar)


No Se Enciende el LED? El Programa No Sube ¿Todavía Sin Lograrlo?
Los LED sólo funcionan en una Esto pasa a veces, la causa Un circuito que no funciona no
dirección. Prueba a volverlo a más común es haber es nada divertido, mándanos
conectar girándolo 180º. seleccionado el puerto serie un e-mail en inglés y nos
(no te preocupes, erróneo, puedes cambiar ésto pondremos en contacto contigo
conectarlo al revés no lo en tools>serial port> tan pronto como podamos.

va a dañar).

Mejorándolo
Cambiando el pin: digitalWrite(ledPin, HIGH);
El LED está conectado al pin 13, pero podemos usar delay(tiempo on); //(segundos * 1000)
cualquier pin del Arduino. Para cambiarlo, coge el cable digitalWrite(ledPin, LOW);
conectado al pin 13 y conéctalo al pin de tu elección (de delay(tiempo off); //(segundos * 1000)
0-13) (puedes usar los analógicos 0-5, el analógico 0 es
14...) Control del brillo:
Además del control digital (encendido/apagado), el Arduino
Entonces en el código cambia la línea: puede controlar algunos pines de forma analógica (brillo).
int ledPin = 13; -> int ledPin = nuevopin; (más detalle sobre ésto en los próximos circuitos). Para
jugar con él.
Ahora sube el sketch: (ctrl-u)
Cambia el LED al pin 9: (también cambia el cable)
Cambiar el tiempo de parpadeo: ledPin = 13; -> int ledPin = 9;
¿Descontento con un segundo encendido y otro apagado?
Reemplaza el código dentro de las llaves de loop() con:
En el código cambia las líneas:

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC01
9
.:8 LED Fun:.
CIRC-02
.:Multiples LED:.

Que Estamos Haciendo


Hemos hecho que un LED parpadee, ahora hay que subir el listón.
Conectemos ocho. También tendremos la oportunidad de exprimir
el Arduino un poco creando varios patrones de iluminación. Este
circuito es también un buen comienzo para empezar a escribir tus
propios programas y conocer como funciona el Arduino.

Además de controlar el LED, veremos unos simples métodos de programación para mantener
nuestros programas pequeños.

bucles for() - usados cuando quieres ejecutar un trozo de código varias veces.
vectores[] - usados para controlar varias variables de forma sencilla (es un grupo de variables).

El Circuito
Componentes:
CIRC-02 Conector 2 pines LED Amarillo 5mm Cable
Plantilla Protoboard x4 x8
x1

Resistencia 330 Ohm


Naranja-Naranja-Marrón
x8

Esquemático

Pin 2 Pin 3 Pin 4 Pin 5

LED
0

0
Pin 6 Pin 7 Pin 8 Pin 9

LED
0

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS02S
.:view:.
video de montaje
http://ardx.org/VIDE02

10
Código (no hace falta escribir, sólo unos clicks)
CIRC-02
Descarga el código desde ( http://ardx.org/CODE02 )
luego copia el texto y pégalo en un sketch vacío de Arduino)

//Variables pines LED


int ledPins[] = {2,3,4,5,6,7,8,9};
//Un vector para almacenar los
//pines en los que se ha conectado cada LED
//p.e. El LED nº 0 está conectado al pin 2

void setup()
{
for(int i = 0; i < 8; i++){
//es un bucle y se repetirá ocho veces
pinMode(ledPins[i],OUTPUT);
//usamos ésto para establecer los pines como salida
}
}

void loop() // ejecuta una y otra vez


{
oneAfterAnotherNoLoop();
//esto encenderá cada LED uno por
//uno, luego los apagará
//oneAfterAnotherLoop();
//ésto hace lo mismo que onAfterAnotherNoLoop
//pero con mucha menos escritura
//oneOnAtATime();

¿No Funciona? (3 cosas para intentar)


Algunos LED No Funcionando fuera de Empezar de Cero
Enciende secuencia Es fácil equivocarse al conectar
Es fácil conectar un LED al Con ocho cables es fácil cruzar un cable sin darse cuenta.
revés. Comprueba los LED que un par de ellos. Comprueba Sacar todo y volver a empezar
no funcionan y asgúrate de que que el primer LED está suele ser más sencillo que
están en la posición correcta. conectado al pin 2 y el resto tratar de encontrar el
consecutivamente. problema.

Mejorándolo
Cambiando entre bucles: programa a tu placa para ver las nuevas animaciones.
En la función loop() hay 4 líneas. Las tres últimas empiezan (borra las barras al principio de las líneas 3 y 4)
con '//'. Ésto significa que la línea es tratada como
comentario (no se ejecuta). Para hacer que el programa use Probando tus propias animaciones:
otros bucles cambia el código de void loop() a: Lánzate al código y empieza a cambiar cosas. La idea
//oneAfterAnotherNoLoop(); general es encender un LED con digitalWrite(numeroPin,
oneAfterAnotherLoop(); HIGH); y después apagarlo con digitalWrite(numeroPin,
//oneOnAtATime(); LOW); . Empieza a escribir, cualquier cosa que cambies no
//inAndOut(); romperá nada.

Sube el programa y nota que nada ha cambiado. Puedes


mirar las dos funciones, ambas hacen lo mismo, pero de
manera distinta (pista: la segunda usa un bucle for).
Animaciones Extra:
¿Cansado de esta animación? Entonces prueba las otras dos
animaciones simples. Descomenta sus líneas y sube el

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC02
11
.:Gira Motor Gira:.
CIRC-03
.:Transistor y

Que Estamos Haciendo


Los pines del Arduino son ideales para controlar directamente
pequeños elementos eléctricos tales como diodos LED. Sin
embargo, cuando nos encontramos con cosas mayores (como un
motor o lavadora), un transistor externo es requerido. Un transistor
es increíblemente útil. Conmuta grandes corrientes usando una corriente mucho menor. Un
transistor tiene 3 pines. Para un transistor de tipo negativo (NPN), conectas la carga al colector y el
emisor a masa. Entonces cuando una pequeña corriente circula de base a emisor, la corriente
circulará por el transistor y el motor girará (esto ocurre cuando pones el pin del Arduino en HIGH).
Hay literalmente miles de tipos distintos de transistores, permitiendo ser usados en cualquier
situación. Hemos escogido el P2N2222AG en vez de un transistor de propósito general. Una de las
razones más importantes fue el voltaje máximo (40V) y su máxima corriente (200 mA), que son
ambos lo suficientemente altos para nuestro motor de juguete (los detalles completos pueden

El Circuito
Componentes:
CIRC-03 Conector 2 pines Transistor Cable
Plantilla Protoboard x4 P2N2222AG (TO92)
x1 x1

Motor Diodo Resistencia 10k Ohm


x1 (1N4001) Marrón-Negro-Naranja
x1 x1

Esquemático
Arduino
pin 9

resistencia
(10kohm)

Transistor
Base P2N2222AG

Colector Emisor
Diodo
(1N4001) Motor de Juguete

gnd
(masa) (-)

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS03S
.:view:.
video de montaje
http://ardx.org/VIDE03

12
Código (no hace falta escribir, sólo unos clicks)
CIRC-03
Descarga el código desde ( http://ardx.org/CODE03 )
entonces simplemente copia el texto y pégalo en un sketch vacío de Arduino)
int motorPin = 9; //pin al que el motor está conectado

void setup() //se ejecuta una única vez


{
pinMode(motorPin, OUTPUT);
}

void loop() // ejecutar una y otra vez


{
motorOnThenOff();
//motorOnThenOffWithSpeed();
//motorAcceleration();
}

/*
* motorOnThenOff() - enciende el motor y luego lo apaga
* (fíjate en que este código es idéntico al usado para
* el LED parpardeante)
*/
void motorOnThenOff(){
int onTime = 2500; //tiempo on
int offTime = 1000; //tiempo off
digitalWrite(motorPin, HIGH);
// enciende el motor On
delay(onTime); // espera onTime milisegundos

¿No Funciona? (3 cosas para intentar)


¿El Motor No Gira? ¿No Has Tenido Suerte? ¿Todavía No Funciona?
Si has conseguido tu propio Si has conseguido tu propio A veces la placa Arduino se
transistor, comprueba con la motor, comprueba que desconecta del ordenador.
hoja de características que el funcionará con 5V y que no Prueba a desconectar y volver
patillaje es compatible con el consume demasiada corriente. a conectarla en tu puerto USB.
P2N2222AG
(muchos están invertidos).

Mejorándolo
Controlling speed: motorOnThenOffWithSpeed();
We played with the Arduino's ability to control the // motorAcceleration();
brightness of an LED earlier now we will use the same Then upload the program. You can change the speeds by
feature to control the speed of our motor. The Arduino does changing the variables onSpeed and offSpeed.
this using something called Pulse Width Modulation (PWM).
This relies on the Arduino's ability to operate really, really Accelerating and decelerating:
fast. Rather than directly controlling the voltage coming Why stop at two speeds, why not accelerate and decelerate
from the pin the Arduino will switch the pin on and off very the motor. To do this simply change the loop() code to read
quickly. In the computer world this is going from 0 to 5 volts // motorOnThenOff();
many times a second, but in the human world we see it as a // motorOnThenOffWithSpeed();
voltage. For example if the Arduino is PWM'ing at 50% we motorAcceleration();
see the light dimmed 50% because our eyes are not quick
enough to see it flashing on and off. The same feature Then upload the program and watch as your motor slowly
works with transistors. Don't believe me? Try it out. accelerates up to full speed then slows down again. If you
In the loop() section change it to this would like to change the speed of acceleration change the
// motorOnThenOff(); variable delayTime (larger means a longer acceleration

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC03
13
.:Un Solo Servo:.
CIRC-04
.:Servos:.

Que Estamos Haciendo


Girar motores es divertido, pero en proyectos en los que el control
de movimiento es necesario nos dejan con ganas de más. ¿La
respuesta? Servos. Son fabricados en masa, disponibles
extensamente y cuestan desde un par de euros a cientos. Dentro hay
unos pequeños engranajes (para hacer el movimiento más potente) y algo de electrónica (para
hacerlo fácil de controlar). Un servo estándar puede posicionarse de 0 a 180º. La posición está
controlada por un pulso temporizado entre 1,25 milisegundos (0º) y 1,75 milisegundos (180º) (1,5
milisegundos para 90º). La temporización varía con el fabricante. Si el pulso se manda cada 25-50
milliseconds el servo se moverá suavemente. Una de las geniales cosas de Arduio es que tiene una
librería software que te permite controlar dos servos (conectados al pin 9 ó 10) usando una única
línea de código.

El Circuito
Componentes:
CIRC-04 Conector 2 pines Conector 3 pines Cable
Plantilla Protoboard x4 x1
x1

Mini Servo
x1

Esquemático
Arduino
pin 9

Mini Servo
señal (blanco)

5v (rojo)
gnd (negro)

gnd
(masa) (-)

5 voltios
(5V)

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS04S
.:view:.
video de montaje
http://ardx.org/VIDE04

14
Código (no hace falta escribir, sólo unos clicks)
CIRC-04
File > Examples > Servo > Sweep
example from the great arduino.cc site, check it out for other great ideas)

// Sweep
// by BARRAGAN <http://barraganstudio.com>

#include <Servo.h>
Servo myservo

¿No Funciona? (3 cosas para intentar)


¿El Servo No Gira? Todavía No Funciona Fits and Starts
Aún con cables de colores es Un fallo que cometimos una o Si el servo comienza a
realmente fácil conectar un dos veces fue olvidarnos de moverse, después da tirones y
servo al revés. Puede que sea conectar la alimentación parpadea una luz en tu placa
el caso. (cables rojo y marrón) a +5 de Arduino, la fuente de
voltios y masa. alimentación que estás usando
no está a la altura. Una batería

Mejorándolo
Control con potenciómetro: int servoPin = 9;
Todavía tenemos que experimentar con las entradas, pero si
sigues leyendo hay un programa de ejemplo File > void setup(){
Examples > Servo > Knob. Ésto usa un potenciómetro pinMode(pinServo,OUTPUT);
(CIRC08) para controlar un servo. Puedes encontrar }
instrucciones en la web aquí: http://ardx.org/KNOB
void loop() {
Self timing: int tiempoPulso = 2100; //(el número de microsegundos
Aunque es fácil controlar un servo usando la librería incluida //a parar (1500 90º
en Arduino, es divertido averiguar como programar algo tú // 900 0º 2100 180º)
mismo. Pruébalo. Estamos controlando el pulso digitalWrite(pinServo, HIGH);
directamente, por lo que podemos usar este método para delayMicroseconds(tiempoPulso);
controlar servos en cualquiera de los 20 pines disponibles digitalWrite(pinServo, LOW);
del Arduino (necesitas optimizar mucho este código antes delay(25);
de hacer eso). }

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC04
15
.:8 LED Más:.
CIRC-05
.:Registro de

Que Estamos Haciendo


Es hora de empezar a jugar con chips, o circuitos integrados (IC),
como suelen llamarse. El empaquetado del chip puede llevar a
engaño. Por ejemplo, el chip en la placa Arduino (un
microcontrolador) y el que vamos a usar en este circuito (un registro
de desplazamiento) se parecen mucho, pero no tienen nada que ver. El precio del chip ATMega es
de unos pocos euros, mientras que el del 74HC595 es de unos céntimos. Es un buen chip para
empezar y una vez te hayas hecho con su uso y su hoja de características (disponible en la web
http://ardx.org/74HC595 ) podrás conseguir lo que quieras. El registro de desplazamiento (también
llamado conversor serie a paralelo), te dará 8 salidas adicionales (para controlar LEDs y cosas
similares) usando sólo 3 pines del Arduino. También pueden ser unidos entre si para tener un
número casa ilimitado de salidas usando los mismos 4 pines. Para usarlo hay que "clock in" el dato
y entonces fijarlo (latch it). Para hacer esto, pones el pin de datos a ALTO o BAJO, conmutas el

El Circuito
Componentes:
CIRC-05 Conector 2 pines Registro de Desplazamiento
Cable
Plantilla Protoboard x4 74HC595
x1 x1

LED Rojo Resistencia 330 Ohm


x8 Naranja-Naranja-Marrón
x8

Esquemático
pin pin pin 5 voltios
4 3 2

74HC595
0
0

+5V 0
1
0

2
data 3
clock 4
latch
5
6
0 7

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS05S
.:view:.
video de montaje
http://ardx.org/VIDE05

16
Código (no hace falta escribir, sólo unos clicks)
CIRC-06
Descárgate el código desde ( http://ardx.org/CODE06 )
copia el texto y pégalo en un sketch vacío de Arduino)
/* Melody
* (cleft) 2005 D. Cuartielles for K3
*
* Éste ejemplo usa un altavoz piezoeléctrico para reproducir canciones. Manda
* una onda cuadrada de la frecuencia apropiada al piezo,
* generando el tono correspondiente.
*
* El cálculo de los tonos se realiza mediante la siguiente
* operación matemática:
*
* timeHigh = periodo / 2 = 1 / (2 * frecuenciaTono)
*
* los diferentes tonos son descritos en la siguiente tabla:
*
* nota

¿No Funciona? (3 cosas para intentar)


Sin Sonido ¿No Puedes Pensar ¿Cansado de Twinkle
Debido al tamaño y forma del Mientras Suena la Twinkle Little Star?
piezo es fácil conectarlo Canción? El código está escrito de forma
erróneamente en la que puedas añadir tus propias
Desconecta el piezo mientras
protoboard. Comprueba que los canciones, mira el código más
piensas, sube el código y
pines estén en su poisición. abajo para ver por donde
vuélvelo a conectar.
empezar.

Mejorándolo
Jugando con la velocidad: char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
La temporización para cada nota está calculada mediante int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014,
variables, de esta manera podemos modificar el sonido de 956 };
cada nota o la temporización. Para cambiar la velocidad de
la canción necesitas cambiar sólo una línea. Componiendo tus canciones:
int tempo = 300; ---> int tempo = (nuevo nº) El programa está preconfigurado para reproducir 'Twinkle
Cámbialo a un número mayor para decelerar la canción, o a Twinkle Little Star', aunque está programado de manera
un número menor para acelerarla. que cambiar la canción sea sencillo. Cada canción está
Afinando las notas: definida por un entero y dos vectores, el entero length
Si te preocupa que las notas estén un poco desafinadas, define el número de notas, el primer vector notes[] define
también puede arreglarse. Las notas han sido calculadas las notas, y el segundo beats[] define durante cuanto se
mediante una fórmula en el bloque de comentarios al reproducen. Algunos ejemplos:
principio del programa. Pero para ajustar notas individuales, Twinkle Twinkle Little Star
sólo ajusta su valor en el vector tones[] hasta que suenen int length = 15;
bien. (cada nota coincide con su nombre en el vector name char notes[] = {"ccggaagffeeddc "};
[] (p.e. c = 1915 ) int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC06
19
.:Música:.
CIRC-06
.:Elementos

Que Estamos Haciendo


Hasta este momento hemos controlado luz, movimiento y
electrones. Vamos a por el sonido. Pero el sonido está en el
mundo analógico, ¿cómo podrá hacerlo nuestro Arduino digital?
Confiaremos una vez más en su increíble velocidad que le permite
imitar un comportamiento analógico. Para ésto, conectaremos un elemento piezoeléctrico a uno de
los pines digitales del Arduino. Un elemento piezoeléctrico hace un click cada vez que le llega un
pulso de corriente. Si los mandamos a la correcta frecuencia (por ejemplo 440 veces por segundo
para obtener la nota LA) estos clicks crearán en su conjunto notas. Vamos a experimentar y hacer
que tu Arduino cante "Twinkle Twinkle Little Star".

El Circuito
Componentes:
CIRC-06 Conector 2 pines Elemento Piezoleléctrico Cable
Plantilla Protoboard x4 x1
x1

Esquemático

Arduino
pin 9

Elemento
Piezoeléctrico

gnd
(masa) (-)

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS06S
.:view:.
video de montaje
http://ardx.org/VIDE06

18
Código (no hace falta escribir, sólo unos clicks)
TOKO-06
Prenesite kodo iz ( http://ardx.org/CODE06 )
in jo s kopirajte v Arduin skech)
/* Melody
* (cleft) 2005 D. Cuartielles for K3
*
* This example uses a piezo speaker to play melodies. It sends
* a square wave of the appropriate frequency to the piezo,
* generating the corresponding tone.
*
* The calculation of the tones is made following the
* mathematical operation:
*
* timeHigh = period / 2 = 1 / (2 * toneFrequency)
*
* where the different tones are described as in the table:
*
* note

¿No Funciona? (3 cosas para intentar)


Ni zvoka Je melodija preglasna? Ste se naveličali te
Glede na velikost tega Dodajte upor nižje vrednosti, in melodije?
elementa je možno, da ste za to bo dovolj. Spodnja koda je napisana za
kakšno mesto levo/desno prilagoditev melodij.
zgrešili. Preverite.

Mejorándolo
Igranje z hitrostjo izvajanja: 956 };
Izračun timinga temelji na spremenljivkah, torej lahko
spremenimo zvok note ali timinga. Za spreminjanje hitrosti Sestavljanje svojih melodij:
spremenimo samo eno vrstco. Program je prednastavljen da zaigra "Mala zvezdica" ampak
int tempo = 300; ---> int tempo = (novo št.) je s programiran tako, da je spreminjanje not preprosto.
Če bo št. večje bomo melodijo upočasnili, v obratnem Vsaka melodija je opredeljena v enem int in dveh poljih, int
primeru pospešili. length opredeli število not, prvo polje notes[] opredeli
Nastavljanje not: posamezno noto,in drugo polje beats[] opredeljuje, kako
Če ste zaskrbljeni, da toni niso pravilno uglašeni, se da tudi dolgo traja posamezna nota. Nekaj primerov:
za to poskrbeti. Note so bile izračunane po formuli komentar Twinkle Twinkle Little Star
na vrhu skech-a. lahko pa tudi uglasite posamezne tone. int length = 15;
Samo spreminjajte posamezne vrednosti v tones[] (vsaka char notes[] = {"ccggaagffeeddc "};
nota je povezana z imenom v names[] (npr. c = 1915 ) int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
1, 1, 2, 4 };
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; Happy Birthday (first line)
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, int length = 13;

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC06
19
.:Apretando
CIRC-07
Botones:.

Que Estamos Haciendo


Hasta este momento nos hemos centrado en las salidas, ya es
hora de hacer que nuestro Arduino escuche, vea y sienta.
Empezaremos con un simple botón. Conectar el botón es fácil. Hay
un componente, la resistencia de pullup que parece que esté fuera
de lugar. Está incluida debido a que el Arduino no siente de la misma forma que nosotros (p.e.
botón pulsado, botón suelto). Mira el voltaje en el pin y decide si está a un nivel ALTO o BAJO. El
botón está conectado de forma que lleve el pin del Arduino a nivel BAJO cuando se pulse, sin
embargo, cuando el botón se suelta, el voltaje del pin flotará (causando errores ocasionales). Para
hacer que el Arduino lea correctamente el pin a nivel ALTO cuando el botón está suelto, añadimos
la resistencia de pullup.
(nota: el primer programa de ejemplo sólo usa uno de los dos botones)

El Circuito
Componentes:
CIRC-07 Conector 2 pines Botón Cable
Plantilla Protoboard x4 x2
x1

Resistencia 10k Ohm Resistencia 330 Ohm LED Rojo


Marrón-Negro-Naranja Naranja-Naranja-Marrón x1
x2 x1

Esquemático Arduino
Pin 2 Pin 3
Arduino 5 voltios
pin 13

resistencia
(pull-up)
LED (10k ohm)

resistencia botón pulsador


(330 ohm)

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS07S
.:view:.
video de montaje
http://ardx.org/VIDE07

20
Código (no hace falta escribir, sólo unos clicks)
CIRC-07
File > Examples > 2.Digital > Button
ejemplo de la genial página arduino.cc, échale un vistazo para otras ideas)
/*
* Botón
* por DojoDave <http://www.0j0.org>
*
* Enciende y apaga un diodo emisor de luz (LED) conectado al pin digital
* 13, cuando se aprieta el botón conectado al pin 7.
* http://www.arduino.cc/en/Tutorial/Button
*/
int ledPin = 13; // pin al que está conectado al LED
int inputPin = 2; // pin de entrada (para el botón)
int val = 0; // variable para leer el estado del pin

void setup() {
pinMode(ledPin, OUTPUT); // declarar el LED como salida
pinMode(inputPin, INPUT); // declarar el botón como entrada
}

void loop(){
val = digitalRead(inputPin); // leer el valor de entrada
if (val == HIGH) { // comprobar si es ALTO
digitalWrite(ledPin, LOW); // apagar el LED
} else {
digitalWrite(ledPin, HIGH); // encender el LED
}
}

¿No Funciona? (3 cosas para intentar)


La Luz No Se Enciende La Luz No Desvanece ¿Decepcionado?
El botón es cuadrado, por lo Es un fallo tonto que No te preocupes, estos circuitos
que es fácil conectarlo cometemos constantemente, están muy simplificados para
incorrectamente. Gíralo 90º y cuando cambias del simple on/ que sea fácil usar los
mira si ahora funciona. off al desvanecimiento componentes, pero a partir de
recuerda cambiar el LED del pin ahí el cielo es el límite.
13 al 9.

Mejorándolo
On button off button: void loop(){
El ejemplo inicial puede ser un poco decepcionante (p.e. No if (digitalRead(inputPin1) == LOW) {
necesito un Arduino para hacer esto), hagámoslo un poco digitalWrite(ledPin, LOW); // apagar LED
más complicado . Un botón encenderá el LED y otro lo } else if (digitalRead(inputPin2) == LOW) {
apagará. Cambia el código a: digitalWrite(ledPin, HIGH); // encender LED
int ledPin = 13; // pin al que está conectado el LED }
int inputPin1 = 3; // botón 1 }
int inputPin2 = 2; // botón 2 Sube el programa a tu placa y empieza a encender y apagar
el LED.
void setup() { Fading up and down:
pinMode(ledPin, OUTPUT); // declarar LED como salida Usemos los botones para controlar una señal analógica.
pinMode(inputPin1, INPUT); // declarar botón 1 como Para esto necesitarás cambiar el cable al que está
entrada conectado el LED del pin 13 al 9, también cámbialo en el
pinMode(inputPin2, INPUT); // declarar botón 2 como código.
entrada int ledPin = 13; ----> int ledPin = 9;
} Luego cambia el código del loop().

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC07
21
.:Girando:.
CIRC-08
.:Potenciómetros:.

Que Estamos Haciendo


Además de los pines digitales, el Arduino también tiene 6 pines
que pueden ser usados como entradas analógicas. Estas entradas
aceptan un voltaje (de 0 a 5 voltios) y lo convierten a un número
digital entre 0 (0 voltios) y 1023 (5 voltios) (10 bits de resolución).
Un dispositivo que aprovecha muy bien estas entradas es un potenciómetro (también llamado
resistencia variable). Cuando está conectado con 5 voltios entre sus pines exteriores, en el pin
central se leerá un valor entre 0 y 5 voltios dependiendo del ángulo al que se haya girado (p.e. 2,5
voltios en el medio). Podemos usar los valores obtenidos como variables en nuestro programa.

El Circuito
Componentes:
CIRC-08 Conector 2 pines Potenciómetro Cable
Plantilla Protoboard x4 10k ohm
x1 x1

LED Amarillo Resistencia 330 Ohm


x1 Naranja-Naranja-Marrón
x1

Esquemático
Arduino 5 voltios
pin 13
Arduino
analógico
Potenciómetro pin 0

LED
(diodo
emisor
de luz)

resistencia (330ohm)
(naranja-naranja-marrón)

gnd
(masa) (-)

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS08S
.:view:.
video de montaje
http://ardx.org/VIDE08

22
Código (no hace falta escribir, sólo unos clicks)
CIRC-08
File > Examples > 3.Analog > AnalogInput
ejemplo de la genial página arduino.cc, échale un vistazo para otras ideas)
/* Analog Input
* Muestra el uso de la entrada analógica mediante la lectura de un sensor analógico en el pin
* analógico 0 y encendiendo y apagando un diodo emisor de luz (LED) conectado al pin digital 13.
* El tiempo que el LED estará encendido o apagado dependerá del valor obtenido por
* analogRead().
* Creado por David Cuartielles
* Modificado 16 Jun 2009
* Por Tom Igoe
* http://arduino.cc/en/Tutorial/AnalogInput
*/

int sensorPin = 0; // selecciona el pin al que está conectado el potenciómetro


int ledPin = 13; // selecciona el pin para el LED
int sensorValue = 0; // variable en la que almacenar el valor del sensor

void setup() {
pinMode(ledPin, OUTPUT); // declara ledPin como salida:
}

void loop() {
sensorValue = analogRead(sensorPin);// lee el valor del sensor:
digitalWrite(ledPin, HIGH); // enciende ledPin
delay(sensorValue); // para el programa durante <sensorValue> milisegundos:
digitalWrite(ledPin, LOW); // apaga ledPin:

¿No Funciona? (3 cosas para intentar)


Funciona a Veces No Funciona Todavía al Revés
Muy probablemente sea debido Asegúrate de que no hayas Puedes probar a usar el circuito
a una mala conexión de los conectado el potenciómetro al al revés. A veces ésto ayuda.
pines del potenciómetro. pin 2 en vez de al pin analógico
Normalmente se soluciona 2. (la fila debajo de los pines
fijando el potenciómetro con de alimentación)
celo.

Mejorándolo
Conmutando con límites: potenciómetro. Para hacer ésto necesitamos cambiar el pin
A veces querrás conmutar una salida cuando un valor al que está conectado el LED. Mueve el cable del pin 13 al
exceda un límite determinado. Para hacer ésto con un pin 9 y cambia una línea en el código.
potenciómetro, cambia el código del loop() a. int ledPin = 13; ----> int ledPin = 9;
Ahora cambia el código del loop() a.
void loop() { void loop() {
int threshold = 512; int value = analogRead(potPin) / 4;
if(analogRead(sensorPin) > threshold){ digitalWrite(ledPin, analogWrite(ledPin, value);
HIGH);} }
else{ digitalWrite(ledPin, LOW);} Sube el código a la placa y mira como el LED cambia su
} brillo en relación con el giro del potenciómetro. (Nota: la
Ésto hará que el LED se encienda cunado el valor supere razón por la que dividimos el valor por 4 es debido a que la
512 (hacia la mitad), puedes ajustar la sensibilidad función analogRead() devuelve un valor de 0 a 1023 (10
ajustando el valor límite. bits) y analogWrite() toma un valor de 0 a 255 (8 bits) )
Controlando el brillo: Controlando un servo:
Controlemos el brillo de un LED directamente con el Este es un muy buen ejemplo y hace uso de un par de

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC08
23
.:Luz:.
CIRC-09
.:Fotorresistencia

Que Estamos Haciendo


Mientras que leer la entrada de un potenciómetro puede ser útil
para experimentos controlados por humanos, ¿que usamos
cuando queremos un experimento controlado por el entorno?
Usamos los mismos principios, pero en vez de usar un potenciómetro
(resistencia dependiente de giro) usamos una fotorresistencia (resistencia dependiente de luz). El
Arduino no puede medir directamente resistencia (sólo mide voltaje) asi que usaremos un divisor de
voltaje (http://ardx.org/VODI). El voltaje exacto en el pin de lectura se puede calcular, pero para
nuestro propósito (sólo medir luz realativa) podemos experimentar con los valores y ver cómo nos
funciona. Un valor bajo indicará que el sensor está bien iluminado, mientras que un valor alto
indicará que está en la oscuridad.

El Circuito
Componentes:
CIRC-09 Conector 2 pines Fotorresistencia Cable
Plantilla Protoboard x4 x1
x1

Resistencia 10k Ohm Resistencia 330 Ohm LED Amarillo


Marrón-Negro-Naranja Naranja-Naranja-Marrón x1
x1 x1

Esquemático
Arduino
pin 13 5 voltios
resistencia
(10k ohm)

LED Arduino
pin 0
analógico

resistencia fotorresistencia
(330ohm)

gnd
(masa) (-)

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS09S
.:view:.
video de montaje
http://ardx.org/VIDE09

24
Código (no hace falta escribir, sólo unos clicks)
CIRC-09
Descárgate el código desde ( http://ardx.org/CODE09 )
copia el texto y pégalo en un sketch vacío de Arduino)
/*
* Un simple programa que cambiará la
* intensidad de un LED dependiendo de la cantidad de
* luz incidente en la fotorresistencia.
*
*/

//Pin Fotorresistencia
int lightPin = 0; //el pin analógico al que
//la fotorresistencia
//está conectada
//la fotorresistencia no está
//calibrada a ninguna unidad
//value (relative light)
//LED Pin
int ledPin = 9;//el pin al que el LED está coenctado
//estamos controlando el brillo, por lo que
//usaremos unos de los PWM (pines con
//modulación por ancho de pulso)

void setup()
{
pinMode(ledPin, OUTPUT); //establece el pin como
//salida
}

¿No Funciona? (3 cosas para intentar)


El LED Permanece No Responde a los ¿Todavía No Funciona?
Apagado Cambios de Luz. Puede que estés en una
Este es un error que Dado que el espaciado de las habitación que sea demasiado
continuando cometiendo una y patillas de la fotorresistencia no luminosa u oscura. Prueba a
otra vez, a no ser que hagan es estándar, es fácil conectarla apagar o encender las luces y
un LED que pueda funcionar en mal. Comprueba que esté en ver si mejora. O si tienes una
ambas direcciones. Sácalo y su sitio. linterna cerca, pruébala.

Mejorándolo
Invierte la respuesta: digitalWrite(ledPin, HIGH);
Puede que quieras la respuesta inversa. No te preocupes, }else{
podemos invertir fácilmente esta respuesta, sólo cambia: digitalWrite(ledPin, LOW);
}
analogWrite(ledPin, lightLevel); ----> analogWrite(ledPin, }
255 - lightLevel);
Servo controlado por luz:
Sube el código y mira como ha cambiado: Usemos nuestra nueva capacidad de medir luz para
controlar un servo (y al mismo tiempo modificar un poco el
Luz Nocturna: código de Arduino). Conecta un servo al pin 9 (como en
En vez de controlar el brillo del LED mediante la luz, CIRC-04). Ahora abre el ejemplo Knob (el mismo que
hagamos que se encienda o apague según un valor límite. usamos en CIRC-08) File > Examples > Servo > Knob. Sube
Cambia el código del loop() por. el código a la placa y mira como funciona sin cambiar nada.
void loop(){ UsandoUsing the full range of your servo:
int threshold = 300; Habrás visto que el servo sólo se mueve por una parte de
if(analogRead(lightPin) > threshold){ su rango de funcionamiento. Ésto es debido que el divisor

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC09
25
.:Temperatura:.
CIRC-10
.:Sensor de

Que Estamos Haciendo


¿Cuál es el siguiente parámetro que vamos a medir con nuestro
Arduino? Temperatura. Para ésto, usaremos un circuito integrado
algo complejo que está escondido en un empaquetado similar al de
nuestros transistores P2N2222AG. Tiene tres pines, masa, señal y +5
voltios y es fácil de usar. Da una salida de 10 milivoltios en el pin de señal por grado centígrado
(para poder medir temperaturas bajo cero hay un offset de 500 mV p.g. 25° C = 750 mV, 0° C =
500mV). Para convertir ésto de valores digitales a grados, usaremos algunas de las habilidades
matemáticas del Arduino. Entonces, para mostrarlo, usaremos una de las funciones más potentes
del IDE, la ventana de depuración. Sacaremos el valor a través de la conexión serie para mostrarlo
en pantalla. Vamos a ello.

Una cosa más, éste circuito usa el monitor serie del IDE de Arduino. Para abrirlo, primero

El Circuito
Componentes:
CIRC-10 Conector 2 pines Sensor de Temperatura Cable
Plantilla Protoboard x4 TMP36
x1 x1

Esquemático
Arduino
analógico 5 voltios
pin 0

TMP36
+5v (sensor
de precisión
señal de temperatura)
gnd

gnd
(masa) (-)

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS10S
.:view:.
video de montaje
http://ardx.org/VIDE10

28
Código (no hace falta escribir, sólo unos clicks)
CIRC-10
Descárgate el código desde ( http://ardx.org/CODE10 )
copia el texto y pégalo en un sketch vacío de Arduino)
/* ---------------------------------------------
* | Código de Ejemplo del Kit Arduino de Experimentación |
* | CIRC-10 .: Temperatura :. |
* ---------------------------------------------
*
* Un simple programa para devolver la temperatura actual
* a la ventana de depuración del IDE
* Para más detalles sobre este cricuito:

//Variables de los pines del TMP36


int temperaturePin = 0

¿No Funciona? (3 cosas para intentar)


Nada Parece Ocurrir Se Muestra Basura El Valor de
El programa no muestra Éstos ocurre cuando el monitor Temperatura no
externamente que está serie está recibiendo datos a Cambia
funcionando. Para ver los una velocidad distinta de la Prueba a apretar el sensor con
resultados debes abrir el esperada. Para arreglar ésto, los dedos para calentarlo o
monitor serie del IDE de selecciona en la caja de acercarle una bolsa de hielo
Arduino. velocidades marcada con 'baud' para enfriarlo.

Mejorándolo
Sacando voltaje: Sacando más información:
Ésto es sólo cosa de cambiar una línea. Nuestro sensor saca Añadamos un mensaje a la salida serie para hacer que lo
10 mV por grado centígrado, por lo que para obtener el que aparezca en el monitor serie sea más informativo. Para
voltaje, simplemente mostramos el resultado de getVoltage hacer ésto, primeros volveremos al código inicial y luego
(). cambiaremos:
Serial.println(temperature);
borramos la línea temperature = (temperature - .5) * 100; ---->
Serial.print(temperature);
Sacando grados Fahrenheit: Serial.println(" degrees centigrade");
Otra vez es un simple cambio matemático. Para ir de grados El cambio a la primera línea significa que la siguiente salida
C ----> grados F usamos la fórmula: aparecerá en la misma línea, luego añadiremos texto
( F = (C * 1.8) + 32 ) informativo e iniciaremos una nueva línea.
añadir la línea Cambiando la velocidad serie:
temperature = Si alguna vez quieres mandar muchos datos a través del
(((temperature - .5) * 100)*1.8) + 32; puerto serie, deberemos aumentar la velocidad.
antes de Serial.println(temperature); actualmente transmitimos a 9600 baudios pero velocidades

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC10
27
.:Grandes Cargas:.
CIRC-11
.:Relés:.

Que Estamos Haciendo


El siguiente circuito es como un test. Usamos lo que aprendimos
usando transistores en CIRC03 para controlar un relé. Un relé es
un interruptor mecánico controlador eléctricamente. Dentro de la
pequeña caja hay un electroimán que, cuando es activado, hace que
el interruptor cambie su posición (normalmente con un sonoro 'click'). Puedes comprar relés de
diversos tamaños, desde un cuarto del que viene en el kit a otros tan grande como una nevera,
cada uno vapaz de conmutar una determinada cantidad de corriente. Son muy entretenidos ya que
tienen una parte física. Aunque todos los semiconductores con los que hemos jugado hasta ahora
es a veces divertido, puede que sólo quieras conectar cien interruptores y controlar algo. Los relés
te permiten realizar lo que has soñado con el Arduino, usando la tecnología del presente para
controlar el pasado. (El diodo 1N4001 está actuando como diodo volante, para detalles sobre el por
qué está, visita: http://ardx.org/4001)

El Circuito
Componentes:
CIRC-11 Diodo Transistor Relé
Plantilla Protoboard (1N4001) P2N2222AG (TO92) (SPDT)
x1 x1 x1 x1

Resistencia 10k Ohm Resistencia 330 Ohm LED Amarillo LED Rojo
Marrón-Negro-Naranja Naranja-Naranja-Marrón x1 x1
x1 x2

Esquemático
Arduino
pin 2

resistencia
(10kohm)

Transistor
Base P2N2222AG

Colector Emisor
-
com

0
0
NO

NC

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS11S
.:view:.
video de montaje
http://ardx.org/VIDE11

28
Código (no hace falta escribir, sólo unos clicks)
CIRC-11
File > Examples > 1.Basic > Blink
ejemplo de la genial página arduino.cc, échale un vistazo para otras ideas)
/*
* Blink
*
* El ejemplo básico de Arduino. Enciende un LED un segundo,
* luego lo apaga un segundo, sin parar. Usamos el pin 13 porque,
* dependiendo de tu placa, tendrás o un LED incluido
* o una resistencia para que sólo necesites un LED.
*
* http://www.arduino.cc/en/Tutorial/Blink
*/

int ledPin = 2; // *********** CAMBIAR A PIN 2 ************

void setup() // ejecutar una vez cuando inicie el sketch


{
pinMode(ledPin, OUTPUT); // establece el pin digital como salida
}

void loop() // ejecutar una y otra vez


{
digitalWrite(ledPin, HIGH); // enciende el LED
delay(1000); // espera un segundo
digitalWrite(ledPin, LOW); // apaga el LED
delay(1000); // espera un segundo
}

¿No Funciona? (3 cosas para intentar)


Nada Ocurre No se Escucha el 'Click' No Acaba de Funcionar
El código de ejemplo usa el pin El transistor o la bobina del Los relés incluidos están
13 y tenemos el relé conectado circuito no están funcionando. diseñados para ser soldados en
al pin 2. Asegúrate de que has Comprueba que el transistor vez de estar en una
hecho éste cambio al código. está conectado correctamente. protoboard. Por ello,
necesitarás apretarlos bien
para asegurar que funcionan

Mejorándolo
Ver el pulso electromagnético
Reemplaza el diodo por un LED. Lo verás encenderse cada
vez que lo atraviese el pico de tensión que aparece cuando
apagas el relé.

Controlando un Motor
En CIRC-03 controlamos un motor usando un transistor.
Aunque si quieres controlar un motor más grande, un relé
es una buena opción. Para ésto simplemente cambiar el LED
rojo y conecta el motor es un lugar (recuerda saltarte la
resistencia de 330 Ohm).

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://ardx.org/CIRC11
29
.:Luz Colorida:.
CIRC-12
.:LEDs RGB:.

Que Estamos Haciendo


Cuando empezaste con CIRC01 estabas contento con sólo
conseguir que parpadeara un LED. Pero eso ya lo superaste,
¿verdad? ¡Quieres naranja, quieres You want orange, you want
teal, you want aubergine! Afortunadamente hay una manera de
obtener múltiples colores con un único LED son tener que poseer uno de cada color del arcoiris.
Para ésto usaremos un LED RGB. Un LED RGB no es un único LED, es en realidad tres LEDs en un
único empaquetado: uno Rojo, uno Verde y uno Azul. Cuando los enciendas, sus luces se mezclarán
obteniendo distintos colores. El color resultante es el resultado de la intensidad individual de los
LEDs rojo, verde y azul. Controlamos la intensidad mediante la modulación del ancho de pulso
(PWM) que hemos usado antes para controlar el brillo del LED y la velocidad del motor.

El Circuito
Componentes:
CIRC-12 Conector 2 pines LED RGB 5mm Cable
Plantilla Protoboard x4 x1
x1

Resistencia 330 Ohm


Naranja-Naranja-Marrón
x3
masa (gnd)

Esquemático
Arduino
rojo

verde
azul

pin 11 pin 10 Pin 9

0
verde
azul

rojo

patilla lado
larga plano

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS12

30
Código (no hace falta escribir, sólo unos clicks)
CIRC-12
Descárgate el código desde (http://ardx.org/CODE12S)
copia el texto y pégalo en un sketch vacío de Arduino)
/*Recorre los colores de un LED RGB*/

// Las patillas del LED están conectadas a pines con PWM


const int RED_LED_PIN = 9;
const int GREEN_LED_PIN = 10;
const int BLUE_LED_PIN = 11;

// Usado para almacenar el nivel actual de intensidad


int redIntensity = 0;
int greenIntensity = 0;
int blueIntensity = 0;

// Tiempo por el que se muestra cada color


const int DISPLAY_TIME = 100; // milisegundos

void setup() {
// No se necesita setup.
}

void loop() {
// Recorrer los colores del rojo al verde
for (greenIntensity = 0;
greenIntensity <= 255;
greenIntensity+=5) {

¿No Funciona? (3 cosas para intentar)


El LED Permanece Viendo Rojo ¿Con Ganas de Más?
Oscuro o Muestra el El diodo rojo del LED RGB (shameless plug)
Color Incorrecto puede que sea más brillante Si te has quedado con
que los otros dos. Para ganas de más, mira los
Con los cuatro pines del LED
equilibrar los colores, usa una
tan juntos, es fácil conectar manuales y tutoriales
resistencia de mayor valor. O
incorrectamente alguno de disponibles en
ajústalo en el código.
ellos. Comprueba que cada pin
http://www.SparkFun.com

Mejorándolo
Usando códigos de color HTML veces es posible que se vean los colores individuales de los
Si estás familiarizado con la realización de páginas web LEDs. Una manera de solucionar este problema es hacer
puedes preferir el uso de códigos hexadecimales, cómo que la luz esté más difuminada para que los colores se
haces cuando usas HTML y CSS. El código hexadecimal de mezclen mejor. El LED entregado con el kit está difuminado
colores usa una serie de letras y números como `#FF0000` en vez de transparente para ayudar a mejorar la mezcla de
para el rojo ó `#800080` para el morado. Puedes aprender colores. Si la luz sigue sin estar suficientemente difuminada,
más sobre cómo funciona en la Wikipedia (http://ardx.org/ puedes poner el LED detrás de algún papel o acrílico; o
HEXCOL) y encontrar una lista de colores con su código dentro de una pelota de ping-pong o una bola de
hexadecimal asociado, para así no tener que obtenerlo por poliestireno.
ti mismo.

Descarga el código desde:


http://ardx.org/RGBMB
El Mundo del Difuminado
Una desventaja de usar un LED RGB compuesto por tres
LEDs separados para obtener nuestros colores es que a

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://sparkfun.com/RGB
31
.:Midiendo
CIRC-13
Flexiones:.

Que Estamos Haciendo


En la vida es importante ser flexible. Pero, ¿qué harías si quieres
medir cuan flexible un objeto es? Usarías un sensor de flexión. Un
sensor de flexión usa carbón en una tira de plástico para actuar
como una resistencia variable o potenciómetro (CIRC-08), pero en
vez de cambiar la resistencia girando un pomo lo cambias flexionando (doblando) el componente.
Usamos un divisor de tensión otra vez (CIRC-08 & 09) para detectar este cambio de resistencia. El
sensor se dobla en una dirección y cuando más se dobla mayor resistencia presenta--tiene un rango
de unos 10K ohm a 35K ohm. En este circuito usaremos la cantidad que se doble el sensor de
flexión para controlar la posición de un servo.

El Circuito
Componentes:
CIRC-13 Conector 2 pines Flex Sensor Cable
Plantilla Protoboard x4 x1
x1

Mini Servo Conector 3 pines Resistencias 10k Ohm


x1 x1 Marrón-Negro-Naranja
x1

Esquemático
5 voltios
pin 9
sensor
Mini Servo flexión

señal 0
(blanco)

5v
gnd (rojo)
(negro)
resistencia
(10k ohm)

gnd
(masa) (-)

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS13S

32
Código (no hace falta escribir, sólo unos clicks)
CIRC-13
Descárgate el código desde (http://ardx.org/CODE13S)
copia el texto y pégalo en un sketch vacío de Arduino)
// Basado en
// File > Examples > Servo > Knob
// Controlando la posición de un servo usando un
// potenciómetro (resistencia variable)
// by Michal Rinott // <http://people.interaction-ivrea.it/m.rinott>

#include <Servo.h>

Servo myservo; // crear un objeto servo para


// controlar un servo

int potpin = 0; // pin analógico usado para


// conectar el
// potenciómetro
int val; // variable para leer el
//valor del pin analógico

void setup()
{
Serial.begin(9600);
myservo.attach(9);// conecta el servo
// en pin 9 al objecto servo
}

void loop()

¿No Funciona? (3 cosas para intentar)


¿El Servo No Gira? El Servo No Se Mueve El Servo Se Mueve Una
Aún con los cables de colores Como Se Espera Vez
es muy fácil conectar el servo El servo está diseñado para Puede que necesites variar el
al revés. Puede que éste sea el moverse en un sólo sentido. rango de valores en la llamada
caso. Prueba a doblarlo hacia el otro a la función map()
lado. (para que la cara rallada (detalles sobre como
quede con forma convexa) mejorarlo en la sección

Mejorándolo
Calibrando el Rango cambia el valor fromHigh (por defecto 300) con el valor
cuando está completamente doblado.
While the servo is now moving chances are its range isn’t
quite perfect. To adjust the range we need to change the Aplicaciones
values in the map() function.
Con sensores, lo divertido es cuando los usas en curiosas e
map(value, fromLow, fromHigh, inesperadas formas. Aquí están algunas de nuestras
toLow, toHigh) aplicaciones favoritas con sensores de flexión.

Para saber cómo funcionan: Guante Piedra Papel Tijera Monojugador


http://ardx.org/MAP Un guante que te permite jugar piedra-papel.tijera contra ti
mismo.
Para calibrar nuestro sensor podemos usar la ventana de http://ardx.org/RPS
depuración (cómo en CIRC-11). Abre la ventana de
depuración y cambiar el valor fromLow (por defecto 50) con Abracadera Electrónica para Plantas
el valor mostrado cuando el sensor está sin doblar. Ahora Monitorea si tu planta se está doblando en contra de la luz y

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://sparkfun.com/
33
.:Sensado
CIRC-14
Estravagante:.

Que Estamos Haciendo


Un "soft pot" (nombre corto de "soft potentiometer" en inglés) es
como un potenciómetro normal al estilo de los vistos en CIRC-08
excepto que es plano, muy fino, flexible y no necesita un pomo. Un
potenciómetro también es conocido como resistencia variable y para
un potenciómetro táctil, la resistencia viene dada por el punto sobre el que se realiza presión. La
presión se puede aplicar con tu dedo, un bolígrafo o un punzón de plástico duro. Apretando en
varias partes de la tira, la resistencia varía de 100 a 10k Ohms, permitiendo calcular la posición
relativa en la tira. Puedes usarlo para seguir movimientos o pulsación de botones. En este ejemplo
lo usaremos para controlar el color de un LED RGB.

El Circuito
Componentes:
CIRC-14 Conector 2 pines LED RGB 5mm Cable
Plantilla Protoboard x4 x1
x1

Potenciómetro táctil Resistencia 330 Ohm Arduino


x1 Naranja-Naranja-Marrón pin 11
x3 pin 10

Esquemático
Arduino
pin 11 pin 10 pin 9
0

resistencia (330ohm) 0
Soft-pot
V+
verde
azul

Punzón
0
patilla
larga

En Internet
.:descarga:.
hoja etiqueta protoboard
http://ardx.org/BBLS14S

34
Código (no hace falta escribir, sólo unos clicks)
CIRC-14
Descárgate el código desde (http://ardx.org/CODE14S)
copia el texto y pégalo en un sketch vacío de Arduino)
// Código de EjemploCIRC-14
// Variará un LED RGB del Rojo-Verde-Azul
// en relación al valor del soft-pot

// Las patillas de los LEDs conectados a los pines con PWM


const int RED_LED_PIN = 9

¿No Funciona? (3 cosas para intentar)


El LED Se Mantiene Viendo Rojo Resultados Raros
Oscuro o Muestra Un El diodo rojo dentro del LED Lo más probable es que estés
Color Incorrecto RGB puede ser más brillante apretando el potenciómetro en
que los otros dos. Para hacer más de una posición. Ésto es
Con los cuatro pines del LED
que los colores estén más normal y puede ser usado para
tan juntos, es fácil conectar
balanceados, usa una crear curiosos resultados.
incorrectamente alguno de
resistencia de mayor valor. O
ellos. Comprueba que cada pin

Mejorándolo
HSB Color (Hue, Saturation & Brightness / Matiz, Saturación Ahora cuando uses el soft-pot notarás una variación de
y Brillo) colores más limpia y plena del rojo al violeta.
Nuestro LED RGB muestra los colores usando códigos
usando el código de color RGB. Aunque es comunmente no Botones Falsos
la manera más sencilla de trabajar con colores (como Debido a la manera que funciona el soft-pot, se puede usar
habrás podido ver en el código de arriba). Un sistema para hacer botones personalizados. Para ésto, deberás
mucho más intuitivo es el HSB. definir un rango de valores correspondiente a un botón. Usa
Información Completa: el código de abajo y la ventana de depuración para
http://ardx.org/HSB determinar los valores ideales.

Para convertir de RGB a HSB todo lo que se necesita es un if(analogRead(0) > minValue &&
poco de matemáticas algo complicadas. Para un programa analogRead(0) < maxValue){
de ejemplo, visita: buttonAction()
http://ardx.org/CODE14MB }
basado en el código original de Ahora cubre el soft-pot con una hoja con botones
www.kasperkamperman.com: http://ardx.org/KASP imprimidos/dibujados

Más, Más, Más:


Más detalles, dónde comprar más componentes, dónde hacer más preguntas:
http://sparkfun.com/
35
NOTA .:Notas:.
notas
.:Espacio para tomar notas:.

36
.:Notas:. NOTA
notas
.:Espacio para tomar notas:.

0
Este trabajo está protegido bajo una licencia Creative Commons Attribution-Share Alike 3.0 Unported

Para ver una copia de esta licencia, visita


http://creativecommons.org/licenses/by-sa/3.0/

O manda una carta a:


Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.

También podría gustarte