viernes, 31 de mayo de 2013

Sensor analógico y señal luminosa con Arduino UNO

Sensor analógico y señal luminosa con Arduino UNO.

Categoría: 1. Programación y electrónica.

Este es un programa sencillo para Arduino UNO, que envía pulsos a un LED cuya duración se ajusta instantáneamente a la intensidad de la iluminación detectada con un sensor (fotorresistencia de 10kOhm) colocado en la entrada analógica A0.
Tres LEDs (puede ser uno o dos si se prefiere) se conectan a los pines digitales I/O 9, 10 y 11 por el ánodo. El cátodo de cada LED se conecta a una resistencia de 220Ohm, conectada a tierra (GND). La fotorresistencia se conecta entre los pines A0 y +5V. En una de las terminales de la fotorresistencia se conecta una resistencia de 10kOhm que se conecta a tierra (GND).
El código es el siguiente:
/*
LedRBG_AnalogRead
*/

#define Blue 9
#define Green 10
#define Red  11

int sensorValue;
unsigned long tiempoTotal, ultimoRegistro, ultimoReporte;
int intervalo;
int reporte = 1500;
byte ultimoEstado = LOW;
byte estadoActual = LOW;

void setup()  {
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  Serial.begin(9600);
}

void loop()  {
  sensorValue = analogRead(A0);
  intervalo = sensorValue / 2;
  tiempoTotal = millis();

  if (tiempoTotal - ultimoRegistro > intervalo)  {
    // digitalWrite(Blue, estadoActual);
    // digitalWrite(Red, estadoActual);
    digitalWrite(Green, estadoActual);
    ultimoRegistro = millis();
    if (estadoActual == LOW)
      estadoActual = HIGH;
    else
      estadoActual = LOW;
  }

  double iluminacion = sensorValue;
  iluminacion = iluminacion * 100 / 1023;

  if (tiempoTotal - ultimoReporte > reporte)  {
    Serial.print("La iluminacion actual es: ");
    Serial.print(iluminacion);
    Serial.println(" %");
    ultimoReporte = millis();  }
}




Figura 1. Aspecto del circuito ya montado.


En el código se utilizó el método de contar el tiempo mediante la función millis(). De esta manera, se pueden controlar muchos procesos independientes unos de otros sin que haya interferencias como sucede con la instrucción delay(ms).
Si se disminuye la iluminación que recibe la fotorresistencia el pulso enviado al LED disminuye su duración y también el tiempo que dura la pausa (LOW), que es de la misma duración.

Bibliografía
Sitio Arduino Homepage: http://www.arduino.cc/