/*PROGRAMA DE UN DATALOGER PARA SENSOR LDR El programa capturara 10 muestras del LDR, luego sacara el promedio de estas muestras, posteriormente convertira el valor digital en voltaje, con el valor del voltaje calculara el valor de resistencia del LDR y por ultimo lo convertira en LUX de acuerdo al datasheet del LDR. Por ultimo guradara los datos de Voltaje, Resistencia y Lux en la SD; dejara pasar un minuto antes de volver a repetir los calculos. */ #include //Libreria SD #define cspin 10 //Definimos cspin al Pin 4 #define ldr A0 //Definimos LDR en pin A0 int valorLdr = 0; //Variable para lectura de LDR int suma = 0; //Variable para sumar las lecturas float promedio = 0.0; //Valor para el promedio de 10 muestras int voltaje = 0; //Varaible para el voltaje int resistencia = 0; //Variable para la resistencia del LDR int corriente = 0; //Variable para calcular la corriente LDR int lux = 0; //Variable para clacular LUX long id = 1; //Variable para mostrar el numero de la lectura void setup() { //Iniciamos serial solo para debug Serial.begin(9600); //Iniciamos la SD Serial.print("Status SD..."); pinMode(10, OUTPUT); //Default para que funcione SD if(!SD.begin(cspin)){ Serial.println(" ERROR de SD"); return; } Serial.println(" OK!"); Serial.println("*******************************"); //Abrimos el archivo SD que vamos a escribir datalog.csv File archivoLog = SD.open("datalog.csv", FILE_WRITE); if (archivoLog){ //Creamos la cabecera del archivo String cabecera = "Id, Voltaje, LDRes, LUX"; archivoLog.println(cabecera); //Cerramos el archivo archivoLog.close(); //Imprimimos la cabecera Serial.println(cabecera); } else{ Serial.println("No se pudo abrir el archivo"); return; //Detenemos el programa } } void loop() { //Tomamos 10 muestras del sensor; for (int i=0; i<10; i++){ valorLdr = analogRead(ldr); suma = valorLdr + suma; delay(10); //Para estabilizar el ADC } //Promediamos las muestras promedio = suma / 10.0; suma = 0; //Reiniciamos suma para la siguiente vuelta //Convertimos de digital a voltaje voltaje = round(promedio * (4.99 / 1024.00)); //ROUND redondea el resultado //Calculamos Resistencia, Corriente y Lux apartir del voltaje corriente = round(((4.99 - voltaje) / 980)* 1000.0); //1000 para mostrar en mA resistencia = round((voltaje / corriente) * 1000.0); lux = round((500 / resistencia) * 1000); //Creamos una cadena de datos para guardar la informacion en la SD String datos = String(id) + "," + String(voltaje) + "," + String(resistencia) + "," + String(lux); //Abrimos el archivo datalog.csv y lo escribimos File archivoLog = SD.open("datalog.csv", FILE_WRITE); if (archivoLog){ archivoLog.println(datos); archivoLog.close(); Serial.println(datos); } else { Serial.println("No se pudo abrir el archivo"); } //Incrementamos la lectura y esperamos 1 minuto id++; delay(50000); }