You are on page 1of 33

Encenciendo luces en serie con

un potencimetro
17/08/2011
Descripcin:
Otro ejemplo sencillo y bsico. 4 Leds conectados a diferentes
pines digitales del Arduino, y por medio de un potencimetro se
van encendiendo (depende del valor del potencimetro).
Recordar que el valor del potencimetro es de 0 a 1023
conforme se gire la perilla, y que su pata central va conectada a
un puerto analgico de entrada del Arduino (los otros, a
corriente de 5V y a tierra).
Materiales:
4 LEDs
Potencimetro
4 Resistencias de 220 ohm
Cables para puentear
Diagrama
Para el diagrama us el software Fritzing, que est fenomenal.



Cdigo
int ledPin1 = 7;
int ledPin2 = 6;
int ledPin3 = 5;
int ledPin4 = 4;

int sensorValue = 0; // variable to store the
value coming from the sensor
int mapped = 0;

void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
}

void loop() {
sensorValue = analogRead(A0);

if(sensorValue == 0)
{
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
}
else if(sensorValue > 0 && sensorValue < 250)
{
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
}
else if(sensorValue >= 250 && sensorValue <
500)
{
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
}
else if(sensorValue >= 500 && sensorValue <
775)
{
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, LOW);
}
else
{
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, HIGH);
}
delay(50);
}

Alarma de proximidad con
sensor ultrasnico
02/09/2011
Descripcin:
Hace unos das me lleg este sensor de distancia. Utiliza
ondas de sonido a manera de sonar, donde sabiendo cuando
se emiti la onda y midiendo el tiempo que tarda en regresar el
eco (del objeto ms cercano al frente), calcula la distancia. Con
Arduino, y esta librera, medir la distancia al obstculo ms
cercano es tan simple como una lnea de cdigo! Las
aplicaciones son muchas: desde robots hasta alarmas de
proximidad. En esta ocasin, para probarlo, hice una alarma de
proximidad sencilla que sonar un tono en el mini parlante cada
cierto tiempo dependiendo de la distancia del obstculo (ms
frecuente entre menos distancia). Si el objeto est a ms de 2
metros, un tono sonar cada 5 segundos.

El sensor es muy bsico. Funciona bien para detectar
obstculos grandes como paredes, techo y suelo, o una
persona en frente, pero fcilmente se pierde si el obstculo est
muy lejano y no es lo suficientemente grande. No podr
diagrama porque la conexin de los 4 pines y del parlante es
bastante sencilla (el sensor se conecta a la salida de 5V y tierra
del Arduino, y a 2 pines digitales, uno para la emisin del pulso
y otro para la recepcin del eco).
Materiales:
Parlante de 8 ohm.
1 resistencia de 100 ohm.
Sensor de distancia
Cables
Cdigo

#include "Ultrasonic.h"

/*

Alarma de proximidad simple implementada con
Arduino y un sensor de distancia por ondas
ultrasnicas de 4 pines (Ultrasonic Ranging
Module HC-SR04).
Cdigo 100% libre :-)

Pines 5 y 6 se usan para el sensor (Trigger y
Echo)
Pin 8 se usa para emitir el tono en el mini
parlante de 8 ohm

*/

Ultrasonic ultrasonic(5,6);

long last_print = 0;
long last_tone = 0;

//Umbrales de reproduccion de tonos
long tonethreshold_1 = 5000;
long tonethreshold_2 = 500;
long tonethreshold_3 = 200;
long tonethreshold_4 = 50;

long current_threshold = 10000;

long distancia = 10000;

int sound_pin = 8;

void setup()
{
last_tone = millis();
last_print = last_tone;
pinMode(sound_pin, OUTPUT);
Serial.begin(9600);
}

void loop()
{
//Imprime al puerto serial cada segundo, sin
usar delay()
if((millis() - last_print) >= 1000)
{
distancia = ultrasonic.Ranging(CM);
Serial.print(distancia);Serial.println("
cm");
last_print = millis();
}

//Dependiendo de la distancia del obstculo,
as ser la frecuencia de reproduccin del
tono.
//Rangos son: Entre 2 metros y 1 metro, entre
1 metro y 20 cm, menos de 20 cm, y ms de 2
metros
if(distancia < 200 && distancia >= 100)
current_threshold = tonethreshold_2;
else if(distancia < 100 && distancia >= 20)
current_threshold = tonethreshold_3;
else if(distancia < 20)
current_threshold = tonethreshold_4;
else
current_threshold = tonethreshold_1;

if(millis() - last_tone >= current_threshold)
{
tone(sound_pin, 659, 100);
delay(50);
noTone(sound_pin);
last_tone = millis();
}

}




Controlando LEDS con una fotoresistencia
25/08/2011
Descripcin:
Otro ejemplo bsico, pero con muchsimas aplicaciones, desde
sistemas de control caseros, robots, alarmas, etc. En este
ejemplo, utilizo una fotoresistencia como sensor de luz. La
resistencia varia de acuerdo a la cantidad de luz incidente. Para
mi sorpresa, si resulta bastante sensible. En este enlace se
explica maravillosamente el funcionamiento de este pequeo
pero super til sensor.
La idea es que, tengo 3 LEDS, uno verde, uno amarillo y uno
rojo. Cuando hay suficiente luz ambiente, todos los LEDS estn
apagados, y conforme baja el nivel de luz, se encienden las
diferentes alertas, siendo la roja la que indica mayor
oscuridad. Para esto, se utiliza una resistencia pulldown de
10K (puede ser menor, dependiendo de si queremos ser
sensibles a la claridad o a la oscuridad, como se explica en el
enlace que puse arriba), por un lado conectada esta a tierra, y
por el otro lado, alimentando con 5V el sensor. En la unin
entre el sensor y la resistencia de 10K, se saca una salida que
va hacia la entrada analgica del Arduino. Esto nos dar
valores entre 0 (mucha luz) y 1023 (oscuridad total).
Materiales:
Fotoresistencia (en Costa Rica son muy
baratas, menos de mil colones).
1 resistencia de 10K
3 resistencias de 220 ohm (para los LEDS)
3 LEDs
Cables
Diagrama

Cdigo
/*
Controlando LEDs basado en la lectura de una
fotoresistencia
Jeudy Blanco - https://ardutico.wordpress.com/
Cdigo 100% libre :-D
*/

int lightPin = 0; //define a pin for Photo
resistor

int ledPin1 = 7;
int ledPin2 = 6;
int ledPin3 = 5;

void setup(){
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
}

void loop(){

int lectura = analogRead(lightPin);

if(lectura < 300)
{
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
}
else if(lectura >= 300 && lectura < 500)
{
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
}
else if(lectura >= 500 && lectura < 700)
{
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, LOW);
}
else if(lectura >= 700)
{
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
}

delay(100);
}
Leyendo de un sensor IR y
producindo sonido
10/08/2011
Descripcin
Este proyecto se basa en este excelente tutorial sobre
sensores infrarrojo. Reutilic el cdigo encargado de la
recepcin del cdigo y lo ampli para, cuando se recibe seal,
se haga sonar un pequeo parlante de 5W y se encienda un
LED. Las aplicaciones son infinitas Para la emisin se puede
utilizar cualquier control remoto de TV, DVD, etc.
Materiales
Sensor infrarrojo de 3 patas
Parlante de 8 ohm de impedancia y 5W de
potencia
1 Resistencia de 100 ohm
1 Resistencia de 220 ohm
1 LED
Cables para puentear.

Detalles
La manera de conectar el sensor se explica en detalle en el link
de arriba, pero en resumen, poniendo la fotoclula frente a
nuestra cara: la pata izquierda en el pin 2 de Arduino, la pata
del centro a tierra, y la pata derecha a la alimentacin de 5V del
Arduino.
En cuanto al parlante, una conexin va a tierra y la otra al pin 8
usando la resistencia de 100 ohm. El montaje del LED es el
clsico.
Diagrama (pendiente)
Cdigo
/* Pruebas de entrada de sensor IR y salida a
sonido y LED

Decodificacion del IR basado en ejemplo de:
http://www.ladyada.net/learn/sensors/ir.html

Cdigo de dominio pblico.
Ms material en ardutico.wordpress.com
---
Dejo comentarios originales de la parte IR
*/

// We need to use the 'raw' pin reading methods
// because timing is very important here and
the digitalRead()
// procedure is slower!
//uint8_t IRpin = 2;
// Digital pin #2 is the same as Pin D2 see
// http://arduino.cc/en/Hacking/PinMapping168
for the 'raw' pin mapping
#define IRpin_PIN PIND
#define IRpin 2

// the maximum pulse we'll listen for - 65
milliseconds is a long time
#define MAXPULSE 65000

// what our timing resolution should be, larger
is better
// as its more 'precise' - but too large and
you wont get
// accurate timing
#define RESOLUTION 20

// we will store up to 100 pulse pairs (this is
-a lot-)
uint16_t pulses[100][2]; // pair is high and
low pulse
uint8_t currentpulse = 0; // index for pulses
we're storing

int ledPin = 10;

void setup(void) {
}

void loop(void) {
uint16_t highpulse, lowpulse; // temporary
storage timing
highpulse = lowpulse = 0; // start out with
no pulse length


// while (digitalRead(IRpin)) { // this is too
slow!
while (IRpin_PIN & (1 << IRpin)) {
// pin is still HIGH

// count off another few microseconds
highpulse++;
delayMicroseconds(RESOLUTION);

// If the pulse is too long, we 'timed
out' - either nothing
// was received or the code is finished,
so print what
// we've grabbed so far, and then reset
if ((highpulse >= MAXPULSE) &&
(currentpulse != 0)) {
listenAndFlashPulses();
currentpulse=0;
return;
}
}
// we didn't time out so lets stash the
reading
pulses[currentpulse][0] = highpulse;

// same as above
while (! (IRpin_PIN & _BV(IRpin))) {
// pin is still LOW
lowpulse++;
delayMicroseconds(RESOLUTION);
if ((lowpulse >= MAXPULSE) &&
(currentpulse != 0)) {
listenAndFlashPulses();
currentpulse=0;
return;
}
}
pulses[currentpulse][1] = lowpulse;

// we read one high-low pulse successfully,
continue!
currentpulse++;
}

void listenAndFlashPulses(void)
{
for (uint8_t i = 0; i < currentpulse; i++) {
int val = pulses[i][0] * RESOLUTION;
int frec = map(val, 100, 1200, 31, 4978);
tone(8, frec, 16);
analogWrite(ledPin, map(val, 100, 1200, 0,
255));
delay(50);
}
noTone(8);
digitalWrite(ledPin, LOW);
delay(200);

}
Controlando la intensidad de un LED
con potencimetro
10/08/2011
Descripcin:
Con este ejemplo, controlo la intensidad de un LED por medio
del potencimetro. Al leer el sensor (en este caso, el
potencimetro), conectado a la entrada anloga A0, se obtiene
un valor entre 0 y 1023, que vara conforme se gire la perilla.
Ese valor lo normalizo hasta el mximo de 255 que es el valor
mximo a escribir de forma analgica en el LED.
Materiales:
LED
Potencimetro
Resistencia de 220 ohm
Cables para puentear

Diagrama (pendiente)
Cdigo
int ledPin = 9;

void setup() {

}

void loop(){

int valor_pot = analogRead(A0);

int valor_luz = int((float(valor_pot) * 255.0)
/ 1023.0);

analogWrite(ledPin, valor_luz);

delay(30);

}
Escribiendo y leyendo desde una tarjeta SD
23/08/2011
Descripcin:
El Arduino tiene poqusima memoria para almacenar cosas que
sobrevivan al encendido y apagado, y para muchas
aplicaciones, puede que necesitamos contar con mucho ms
espacio. Por ejemplo, si tenemos un conjunto de sensores
recolectando datos continuamente, puede que nos interese
guardarlos para posterior anlisis. O si tenemos un proyecto en
donde querramos reproducir sonidos de acuerdo a diferentes
situaciones (alarmas por ejemplo) necesitamos un lugar donde
tener almacenados los archivos. Pues bien, el ambiente de
programacin de Arduino tiene una librera para el manejo de
lectura y escritura de tarjetas SD. Es muy fcil de usar, solo
debemos conectar la tarjeta SD a diferentes puertos del Arduino
adecuadamente.
Para esto hay opciones comerciales, como este mdulo (que
ya mand a comprar). Pero como la espera para que me llegue
ser larga, decid investigar un poco y ver la manera de hacerlo
yo mismo. Encontr varias pginas interesantes (referencias al
final) que explicaban diferentes formas de hacerlo, pero no
consegu los materiales indicados. Por eso, decid deshuesar
una vieja computadora que tena por ac, y vi que justo los
conectores IDE para los discos duros, tienen los pines
alineados con los contactos de la tarjeta SD, y como vienen en
doble fila, uno me sirve para el contacto en s, y el otro para
soporte/agarre.
Hay un factor importantsimo a tomar en cuenta a la hora de
hacer las conexiones (aqu el esquema) y es que la tarjea SD
trabaja a 3V y los puertos del Arduino nos dan 5V, por lo que si
no se aplica una divisn de voltage, la podemos quemar. A la
hora de armas las conexiones recomiendo probar con un tester
cada uno de los pines, y asegurarse de que el voltaje se redujo
a los 3V que soporta la SD, con eso evitarn quemarla.
Materiales:
Conector IDE de una tarjeta madre sin usar.
3 resistencias de 1.5K (para el divisor de voltaje)
3 resistencias de 3.3K (para el divisor de voltaje)
3 resistencias de 220 ohm (para los LEDS)
Tape negro
Cables
3 LEDS
Diagrama
Este es el esquema, simulando el conector a la tarjeta SD con
los 7 pines que se utilizan. Me bas en este trabajo.

Detalles
La parte ms complicada fue dessoldar el conector
IDE. COMPLICADSIMO! pero no imposible. Lo que hice, a
falta de los materiales especializados para dessoldar (como el
flux y el succionador) fue colocar una buena cantidad de estao
a las soldaduras en la tarjeta, para que el nuevo estao caliente
diluyera el estao original. Pin por pin, con la punta de la pistola
soladora, los iba empujando hacia adentro. Luego, separ un
poco la parte plstica del conector IDE, y con la pistola an
caliente derret el estao del otro lado, y uno a uno pude ir
sacando los pines. Luego se insertan en el conector
nuevamente 2 filas de 7 pines.

Pero antes de insertar los pines, sold cables al extremo de
cada pin que ira luego conectado al circuito y/o al Arduino.

Como soy un psimo soldador, como se ve en la foto anterior,
el estao me qued hecho una pelota. Al ir los pines tan juntos,
hay riesgo de que entren en contacto y se produzca un
desastre, por lo que preven forrando la soldadura con tape
negro (aislante).

Una vez estn todos los cables soldados y forrados, se insertan
en la parte plstica del conector IDE. Recomiendo usar cables
de diferentes colores para luego identificar cada pin en la tarjeta
y conectar todo correctamente.

Como pueden ver en la parte interna, nos quedan 2 filas de
pines, los que tienen soldados los cables harn contacto con la
tarjeta SD, y los otros nos sirve como agarre. Habr que
doblarlos ligeramente de forma que hagan la presin suficiente
para que todos los pines hagan contacto.



As se ve el circuito una vez montado (muy desordenado y nada
prctico para funcionar con otros proyectos y ms
componentes. Pero para practicar es suficiente).

Aqu un pantallazo de la prueba, escribir dos lneas en un
archivo de texto.



Cdigo
Basado en el ejemplo ReadWrite de la pgina oficial de
Arduino. Modificado para encender 3 LEDS segn el resultado
final.
/*
SD card read/write

This example shows how to read and write data
to and from an SD card file
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4

created Nov 2010
by David A. Mellis
updated 2 Dec 2010
by Tom Igoe

This example code is in the public domain.

Modificado para encender 3 LEDS dependiendo del
resultado de la escritura a la tarjeta SD

*/

#include <SD.h>

File myFile;

byte correcto = 1;

void setup()
{
Serial.begin(9600);

// On the Ethernet Shield, CS is pin 4. It's
set as an output by default.
// Note that even if it's not used as the CS
pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the
Mega) must be left as an output
// or the SD library functions will not work.
pinMode(10, OUTPUT);

pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);

Serial.print("Encendiendo leds...\n");

digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
delay(3000);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(3000);

Serial.print("Initializing SD card...\n");

if (!SD.begin(4)) {
Serial.println("initialization failed!\n");
digitalWrite(8, HIGH);
delay(1000);
digitalWrite(8, LOW);
correcto = 1;
return;
}
//Serial.println("initialization done.");

// open the file. note that only one file can
be open at a time,
// so you have to close this one before
opening another.
myFile = SD.open("test.txt", FILE_WRITE);

// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("testing 1, 2, 3.");
// close the file:
myFile.close();
correcto = 3;
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
Serial.println("done.");
} else {
// if the file didn't open, print an error:
//Serial.println("error opening test.txt");
correcto = 2;
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(7, LOW);
}

// re-open the file for reading:
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");

// read from the file until there's nothing
else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
// close the file:
myFile.close();
correcto = 3;
} else {
// if the file didn't open, print an
error:
Serial.println("error opening test.txt");
correcto = 2;
}
}

void loop()
{
// nothing happens after setup

switch(correcto)
{
case 1:
digitalWrite(8, HIGH);
break;
case 2:
digitalWrite(7, HIGH);
break;
case 3:
digitalWrite(9, HIGH);
break;
}

delay(1000);
}
Referencias
Varios sitios cubren el tema en mayor o menor medida y con
varias alternativas para el slot de la tarjeta SD (como un
conector de floppy de los viejos). Aqu los que yo consult:
http://www.arduino.com.es/lector-de-tarjetas-
sd-para-arduino/
http://uanr.com/sdfloppy/
http://blog.ingenegros.org/?p=26

You might also like