Paso 5: Agregar el Sensor de luz
--Conectar toma de tierra para el carril de tierra en el protoboard
-Conectar la clavija de la VCC en el pin 3V en el Arduino
--Conecte el pin SCL a Arduino pin A5
--Conecte el pin SDA a Arduino pin A4
Usaremos el Arduino TSL2561 librería de Adafruit. Lo puedes descargar aquí, descomprimirlo y meter en la carpeta de las bibliotecas de Arduino. Si Arduino está abierto reiniciar para que la biblioteca aparezca en las opciones del menú desplegable de ejemplos. Abra el dibujo de ejemplo y subir a Arduino. Presione el serial monitor para asegurarse de que está leyendo datos. Mueva la mano sobre el sensor para ver si eso cambia los valores de luz. Una vez que esté satisfecho que el sensor está funcionando, añadir el siguiente código para el Arduino:
Dispositivo de recogida de datos de mapa de oscuridad
Genoveva Hoffman, 2012
Biblioteca TinyGPS, Mikal Hart, descargar aquí: http://arduiniana.org/libraries/tinygps/
Biblioteca de TSL2561, por Ladyada (Limor Fried), descargar aquí: https://github.com/adafruit/TSL2561-Arduino-Library
RTClib, por Ladyada (Limor Fried), descargar aquí: https://github.com/adafruit/RTClib
RTClib originalmente desarrollado por Jeelabs: https://github.com/jcw/rtclib
#include "Wire.h"
#include "TSL2561.h"
#include "SD.h"
#include "SoftwareSerial.h"
#include "TinyGPS.h"
#include "RTClib.h"
const int chipSelect = 10;
RTC_Millis RTC;
Archivo de datos de archivo;
int sensorPin = A0; clavija de entrada del sensor
int lux = 0; variable para almacenar el valor de sensor
LightSensor(TSL2561_ADDR_FLOAT) de TSL2561;
TinyGPS gps;
SoftwareSerial ss (3, 4);
void setup()
{
Serial.Begin(115200);
Serial.Print ("tarjeta INICIALIZACION SD...");
SS.Begin(9600);
pinMode (chipSelect, salida);
RTC.adjust (DateTime (__DATE__, __TIME__));
a ver si la tarjeta está presente y puede ser inicializada:
if (!. {SD.begin(chipSelect))}
Serial.println ("tarjeta de fallido, o no presente");
no hacer nada más:
mientras (1);
}
Serial.println ("tarjeta de inicializado.");
Abra el archivo que vamos a iniciar sesión!
archivo de datos = SD.open ("Data5.txt", FILE_WRITE);
Si (! dataFile) {}
Serial.println ("error al abrir datalog.txt");
Esperar para siempre ya que no podemos escribir datos
mientras (1);
}
lightSensor.begin();
Si (lightSensor.begin()) {}
Serial.println ("sensor encontrado");
} else {}
Serial.println ("sin sensor?");
mientras (1);
}
lightSensor.setGain(TSL2561_GAIN_0X); no establece ningún beneficio (para situaciones brillantes)
lightSensor.setGain(TSL2561_GAIN_16X); Set 16 x ganancia (para situaciones de dim)
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_13MS); menor tiempo de integración (luz brillante)
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_101MS); tiempo de integración media (media luz)
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_402MS); tiempo de integración más larga (luz tenue)
}
void loop() / / ejecuta una y otra vez
{
Fecha y hora = ahora RTC.now();
bool newData = false;
para (sin firmar largo comienzo = millis(); millis() - Inicio < 1000;)
{
mientras (ss.available())
{
char c = ss.read();
Serial.Write(c); descomentar esta línea si desea ver el flujo de datos GPS
¿Si (gps.encode(c)) / / llegó una nueva frase válida?
newData = true;
}
Sensor de luz de lectura
lum de uint32_t = lightSensor.getFullLuminosity();
uint16_t ir, completo;
ir = lum >> 16;
Full = lum & 0xFFFF;
Lux = lightSensor.calculateLux (completo, ir);
}
Si (newData)
{
flotador plano, flon;
edad largo sin firmar;
int año;
mes de byte, día, hora, centésimas de segundo, de minuto,
GPS.f_get_position (plano y flon & edad);
GPS.crack_datetime (& año y mes y día y hora, minutos y segundo & centésimos & edad);
sz Char [32];
sprintf (sz, «% 02d/%02d/%02d, % 02d: % 02d: % 02d, ",
mes, día, año, hora, minuto, segundo);
Serial.Print("");
Serial.Print (flon == TinyGPS::GPS_INVALID_F_ANGLE? 0.0: flon, 6);
Serial.Print (",");
Serial.Print (plano == TinyGPS::GPS_INVALID_F_ANGLE? 0.0: plana, 6);
Serial.Print (",");
Serial.Print(SZ); imprime hora GMT
Serial.Print ("unixtime:");
Serial.Print(Now.unixtime());
Serial.Print (", Lux:"); Serial.println(Lux);
dataFile.print("");
dataFile.print (flon == TinyGPS::GPS_INVALID_F_ANGLE? 0.0: flon, 6);
dataFile.print (",");
dataFile.print (plano == TinyGPS::GPS_INVALID_F_ANGLE? 0.0: plana, 6);
dataFile.print (",");
dataFile.print(lux);
dataFile.print (",");
dataFile.println(now.unixtime());
}
dataFile.flush();
Delay(500);
}
Puesto que el proyecto de mapa de oscuridad sobre la recogida de valores de luz en la noche, querrá configurar el sensor de TSL2561 para situaciones de iluminación tenue. Por lo tanto, usted querrá activar la línea de código que dice:
lightSensor.setGain(TSL2561_GAIN_16X) de ; / / set 16 x ganancia (para situaciones de dim)
y
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_402MS); tiempo de integración más larga (luz tenue)
Comente las otras líneas que la ganancia y el tiempo. Y no dude en cambiar la configuración si usted decide utilizar el sensor de TSL2561 para otros fines.
Después de que el código es cargado, inicie al monitor de serie, haciendo que esté configurado a 115200 baudios. Si el monitor deja de imprimir cualquier información después de "Sensor de encontrados," entonces tu Arduino probablemente no es recoger cualquier señal GPS y usted querrá pegar detrás hacia fuera en la repisa de la ventana. Debe comenzar a ver los valores para la longitud, latitud y lux y timestamp en el monitor serie. ¡ Felicidades! Usted ha hecho un datalogger.
Ya que todo es breadboarded, no dude en cambiar el TSL2561 por otro sensor de su elección para hacer otro GPS habilitado datalogger. Las posibilidades son infinitas!