Ejercicio 22: Alumbrado público

Los LEDs se encienden cuando la intensidad de la luz ambiente baja por debajo de un nivel preestablecido.

Se apagan cuando sube por encima de dicho nivel.

Novedades hardwareNovedades software
Fotorresistencia (LDR) 

Requisitos:

  • 4 LED, 4 resistencias de 220 ohmios
  • Una fotorresistencia (LDR), una resistencia de 1K

Planteamiento: Cuando llega la noche se encienden las farolas

Presentación:

  • Fotorresistencia(LDR).
  • Monitorización de la señal del sensor.

En este ejercicio transformamos una entrada analógica en una salida digital estableciendo un umbral para la interpetación de la señal analógica.

De esta forma, si el valor de la señal analógica, almacenado en la variable medida es inferior al umbral, almacenado en la variable nivel, se ejecuta el procedimiento enciende( ), y si es superior, se ejecuta el procedimiento apaga( ).

Para establecer el valor del umbral, monitorizamos los valores que el conversor analógico-digital(DAC) proporciona a partir de los valores de voltaje en el PIN analógico 0, al que está conectado el divisor de tensión que forman la LDR y la resistencia de pull-down de 1K. Estos valores aparecen en el Monitor serie de la IDE cuando usamos el comando printInteger tomando como su argumento el valor de la variable medida.

Así podemos comprobar los diferentes valores de la señal del sensor para diferentes condiciones de iluminación, elegir el que más nos convenga e introducirlo en la variable nivel.

Variantes:

  • Cambia el nivel de intensidad de luz que activa el encendido.
  • Usa el comando printString(“.....”) para añadir un comentario al valor de la medida en el Monitor serie.

VIDEO DEL EJERCICIO 22

CODIGO FUENTE

 Copyright (C) 2006  Juan Carlos Alonso de Mena
 This program is free software; you can redistribute it and/or modify it under the terms
 of the GNU General Public License as published by the Free Software Foundation;
 See the GNU General Public License for more details?

 int fotosensor=0;
 int cadenaLeds[]={6,7,8,9};
 int n=0;
 int medida=0;                        //variable que guarda el valor de la señal del sensor
 int nivel=200;                       //variable con la que se compara la señal del sensor
 void setup(){
   for(n=0;n<4;n++){
     pinMode(cadenaLeds[n],OUTPUT);
   }
   beginSerial(9600);
 }
 void monitoriza(){                   //procedimiento que envía al Monitor serie el valor de la señal del sensor
   printInteger(medida);
   printString("     ");
   delay(100);
 }
 void enciende(){                     //procedimiento que enciende por turno las luces
   for(n=0;n<4;n++){
     digitalWrite(cadenaLeds[n],HIGH);
     delay(1000);
   }
 }
 void apaga(){                        //procedimiento que apaga todas las luces
   for(n=0;n<4;n++){                        
     digitalWrite(cadenaLeds[n],LOW);
   }
 }
 void loop(){
   medida=analogRead(fotosensor);
   monitoriza();
   if (medida<nivel){                 //si detecta menos intensidad de luz de la que ponemos como límite
    enciende();
   }
   else{                              //si detecta más intensidad de luz que el límite prefijado
     apaga();
   }
 }

Volver?

  Copyright (c) 2006  Juan Carlos Alonso de Mena

  Permission is granted to copy, distribute and/or modify this document under the terms of 
 the GNU Free Documentation License, Version 1.2 or any later version published by the
 Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no
 Back-Cover Texts.  A copy of the license is included in the section entitled 
 GNU Free Documentation License?.