Posts Tagged ‘Fotoresistor’

h1

Su majestad ve mi mano

6 mayo 2009

En la anterior entrada vimos como crear sencillas melodías con las ocho notas musicales básicas. En este caso vamos a intentar que el rey Arduino de Ivrea “vea” nuestra mano y toque una nota diferente en función de lo cerca o alejada que se encuentre de su majestad.

Para ello vamos a utilizar un circuito muy sencillo y bien conocido por los estudiantes de electricidad o electrónica: el divisor de tensión, ddt. Se trata de dos o más resistencias conectadas en serie. En la figura de la izquierda se muestra este circuito en su versión más sencilla. Fácilmente se puede demostrar que la tensión en bornes de R2, Vout es:

Ecuación de salidaPara nuestro ejercicio conectaremos Vin a 5 V,  Vout a uno de los puertos analógicos de entrada, tomaremos una resistencia de 1 kΩ para R1 y sustituiremos R2 por un fotoresistor o ldr, un componente cuyo valor resistivo varía con la intensidad luminosa de modo que a mayor luz menor resistencia. De este modo al acercar o alejar nuestra mano, la sombra hará que varíe su resistencia y por lo tanto Vout.

Antes de realizar el programa principal necesitaremos conocer de qué orden es la variación mencionada, variación que dependerá, obviamente de la luz ambiental de donde nos encontremos. Para ello probaremos el siguiente programa.

int ldrPin = 3;
int valor = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
valor = analogRead(ldrPin);
Serial.println(valor);
delay(250);
}

Según se puede deducir, se tomará el pin 3 para conectar al punto Vout del ddt y se declara la variable “valor” para almacenar su lectura. Esto último se consigue con el comando analogRead(ldrPin), el cual proporciona valores en función de la tensión presente en el pin 3, valores que estarán comprendidos entre 0, para 0 V, y 1.023, para 5 V. Para poder visualizarlos, primero hay que configurar la transmisión serie con Serial.begin(9600), donde 9600 es el valor en baudios típico, y a continuación imprimirlos en el Serial Monitor con Serial.println(valor). Hay que recordar que una vez arrancado el programa, para ver los valores hay que hacer clic en el icono Serial Monitor para activarlo. En este video puede verse la captura de pantalla mostrando valores cada 0,25 s, tiempo regulado por el comando delay(250).

En mi caso observo al alejar y acercar la mano unos valores respectivos que van desde el 642 al 790. Estos valores puedo oírlos con el siguiente programa al que denomino LdrAudible.
int ldrPin = 3;
int zumbadorPin = 11;
int valor = 0;
void setup() {
pinMode(zumbadorPin, OUTPUT);
}
void loop() {
valor = analogRead(ldrPin);
digitalWrite(zumbadorPin, HIGH);
delayMicroseconds(valor);
digitalWrite(zumbadorPin, LOW);
delayMicroseconds(valor);
}

Para ello se conecta el zumbador en el pin 11 y se declara como salida. El programa principal consiste en leer los valores visualizados anteriormente y mandar niveles altos y bajos con retardos en microsegundos de los mismos.

El programa que pretendíamos lo llamo LdrNotas, en el que se declaran las siguientes constantes y variables

int ldrPin = 3;
int zumbadorPin = 11;
int valor = 0;
int tiempo=300;
int valormin=742;
int valormax=790;
int intervalo=(valormax - valormin)/8;

Observe que, como vamos a disponer de 8 notas, la constante “intervalo” nos servirá para proporcionar a cada una de ellas un rango similar de valores. Esto se consigue mediante la función if y los else if anidados como puede verse en el siguiente listado incompleto.

void loop() {
valor = analogRead(ldrPin);
if (valor <= valormin){
tocarNota('c', tiempo);
Serial.println("Do");
}else if (valor >=valormin && valor <= valormin + intervalo){
tocarNota('d', tiempo);
Serial.println("Re");
}else if (valor > valormin + intervalo && valor <=valormin + 2*intervalo){
tocarNota('e', tiempo);
Serial.println("Mi");
............................................................
delay(200);
}

De este modo conseguimos que cada 200 ms toque una nota que dependa de lo cerca o lejos que pongamos la mano de la fotoresistencia. Los comandos del tipo Serial.println(“nota”) permitirán mostrar por el monitor la nota que está sonado en cada momento. Se recuerda de nuevo que para poder verlas hay que hacer clic en el icono Serial Monitor para activarlo. El programa completo puede descargarse desde este enlace. En el mismo observará la función tocarNota(), que lleva asociada la función tocarTono(), que ya fueron explicadas anteriormente. Y no diremos más. Veamos finalmente como su majestad toca al ver mi mano.

Anuncios