Arduino + fotosensor

Los fotosensores son un tipo de resistencias variables que varían dependiendo de la luz que incide en ellos. Este fenómeno, unido a un conversor A/D nos permite saber qué cantidad de luz incide contra él, pudiendo servir para diversos proyectos (un robot que busca la luz, una fotocelula, un sensor de luz para subir/bajar las persianas…). Aquí voy a explicar a grosso modo cómo conectarlo y explicar cómo calcular el valor de la resistencia.

 

Los fotosensores son un tipo de resistencias variables que varían dependiendo de la luz que incide en ellos. Este fenómeno, unido a un conversor A/D nos permite saber qué cantidad de luz incide contra él, pudiendo servir para diversos proyectos (un robot que busca la luz, una fotocelula, un sensor de luz para subir/bajar las persianas…). Aquí voy a explicar a grosso modo cómo conectarlo y explicar cómo calcular el valor de la resistencia.

Para su montaje, necesitamos crear un divisor de tensión, ya que según la fórmula

[latex]V=I \cdot R[/latex]  no podemos sacar tal cual la resistencia que aporta en ese momento.

Fotosensor

Si solo ponemos el fotoresistor, a resistencia variará, pero, si V = 5V y R es variable, cambiará la intensidad, pero la caída de tensión (el voltaje para los amigos) seguirá siendo 5V (o 0V, depende de como lo conectemos). Puede resultar complejo de entender, pero hay que tener en cuanta esto, GND siempre va a dar 0V. Si conectamos una resistencia desde Vcc (5V) directamente a GNC (0V), la caída de tensión será de 5V, con lo que si hacemos la lectura de datos antes de la resistencia, obtendremos 5V y si la hacemos por debajo, obtendremos 0V, para eso, ponemos una resistencia normal y nos ahorramos la pasta del fotorresistor (aunque sea barato, que lo es).

Necesitamos un circuito que nos “frene” esta caída de tensión, ese circuito se llama divisor de tensión;

Divisor de tension

Lo que consigue este circuito es que entre VCC y GND haya “algo” que nos permita un punto intermedio para realizar las mediciones.

Si el sensor es R1 y R2 = 10KΩ tenemos que el voltaje que se aplica en la salida (Vo) es variable, y podemos aplicar esta formula:

[latex]V_{out}=\dfrac{R2}{R1+R2}*Vin[/latex]

Siendo [latex]V_{out}[/latex] el Voltaje que le pasamos al conversor A/D (el voltaje variable).

Tambien, si googleamos para buscar info del divisor de tensión, encontraremos este otro divisor:

otro divisor de tension

La formula que rige a este divisor es la misma, en el primer montaje, la lectura de A/D irá de 5V a 0V según la luz, cuanta más luz, más pequeño el valor de la resistencia, por tanto, menor caída de tensión en [latex]V_{out}[/latex], esto es, más voltaje. En el segundo montaje, será justo al revés, ira de 0V a 5V, 0V mucha luz, 5V poca luz.

Bueno, después de tanta chapa, vamos a verlo en acción, tanto con un multímetro como con Arduino, el multímetro nos mostrará los valores de la caída de tensión, mientras que Arduino nos mostrará el valor convertido a numérico por el CA/D (algún día explicaré su funcionamiento).

fotosensor con arduino

Como es una resistencia variable, aquí hay un pequeño vídeo para ver sus variaciones en acción 🙂

Con el multimetro es importante un detallito:

Para calcular el voltaje, no hay que hacerlo directamente de los bornes, mejor con una resistencia por medio (se trata de calcular la caída de tensión).

El código utilizado en el Arduino es el siguiente:

[code lang=”arduino”]
/*
http://www.arduino.cc/en/Tutorial/SwitchCase
*/

// Valores fijos para el calculo de rango
const int sensorMin = 50; // valor minimo del sensor, calculado a traves de prueba
const int sensorMax = 1200; // valor maximo del sensor, calculado a traves de prueba

long previousMillis = 0;

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 1000; // interval at which to blink (milliseconds)

void setup() {
// inicializacion del puerto serie
Serial.begin(9600);
}

void loop() {
unsigned long currentMillis = millis();

if(currentMillis – previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// lectura del sensor
int sensorReading = analogRead(A0);
// mapear el rango del sensor a cuatro valores (de 0 a 3):
int range = map(sensorReading, sensorMin, sensorMax, 0, 3);
Serial.println("lectura");
Serial.println(sensorReading);

// Con esto, el Arduino nos dira algo mas, aparte del valor de conversor
/
switch (range) {
case 0: // Sensor tapado
Serial.println("oscuro");
break;
case 1: // al sensor le llega algo de luz
Serial.println("penumbra");
break;
case 2: // sensor destapado
Serial.println("medio");
break;
case 3: // sensor cerca de la ventana
Serial.println("brillante");
break;
}
}
}
[/code]

8 opiniones en “Arduino + fotosensor”

  1. Justo acabo de recibir mi arduino y está genial para empezar, la gente novatanecesita documentación como esta 😀

    Una cosilla…. que utilizas para recibir la información y mostrarla en pantalla? desde el software de arduino no conozco ninguna salida de información.

    Gracias

  2. Para mostrar la información tienes el serial monitor, que es el que está más a la derecha, o desde Tools->Serial Monitor.

    Tambien puedes hacer scripts que te pillen la conexión con el arduino y la guarden en un fichero, yo de momento no he necesitado eso.

  3. Bueno, uso una de 10k porque era la que tenía más a mano en ese momento, y fue solo para hacer el ejemplo.
    De todas formas, una LDR es una resistencia con la peculiaridad que su valor varía dependiendo le la luz, así pues, sabiendo la resistencia que pones en R2, puedes completar la fórmula, tienes R2, sabes Vin y Vout, la única incognita es R1.
    Saludos

  4. me ha encantado’, ‘gracias, me ha encantado,
    lo único malo para mi es el ejemplo práctico, no tengo servo ni sensor de temperatura, ¿podrías cambiar esos componentes por otros más comunes, como un led y un pushbutton)?

  5. ‘si miras en los ejemplos que lleva el IDE de arduino, ese ejemplo que tu pides está allí, para qué repetir siempre lo mismo? 😉
    Lo puedes ver en archivo>ejemplos>2.Digital>button

  6. Hola,

    Por si os interesa, Editorial Estribor acaba de publicar un libro, en español, sobre Arduino: “30 Proyectos con Arduino”.

    Si queréis, podéis echarle un vistazo en http://www.editorialestribor.com

    Tiene bastante buena pinta y parece que la editorial se va a dedicar a publicar libros de este tipo en español.

    Saludos.

Comentarios cerrados.