Mörker karta Data insamling enhet (5 / 6 steg)
Steg 5: Lägga till ljussensorn
--Ansluta marken till marken järnväg på skärbräda
--Ansluta VCC PIN-koden till 3V stiftet på Arduino
--Ansluta SCL PIN-koden till Arduino pin A5
--Ansluta SDA PIN-koden till Arduino pin A4
Vi kommer att använda TSL2561 Arduino libray från Adafruit. Du kan hämta den här, packa upp den, och lägger i mappen Arduino bibliotek. Om Arduino är öppet starta om den för biblioteket ska visas i de exempel dropdown val. Öppna exempel skissen och ladda upp den till Arduino. Tryck på serial bildskärmen för att se till att det är att läsa data. Vifta med handen över sensorn för att se om det ändras ljus värden. När du är nöjd att sensorn fungerar, ladda upp följande kod till Arduino:
Mörker karta Data insamling enhet
Genevieve Hoffman, 2012
TinyGPS bibliotek, av Mikal Hart, ladda ner här: http://arduiniana.org/libraries/tinygps/
TSL2561 bibliotek, av Ladyada (Limor Fried), ladda ner här: https://github.com/adafruit/TSL2561-Arduino-Library
RTClib, av Ladyada (Limor Fried), ladda ner här: https://github.com/adafruit/RTClib
RTClib utvecklades ursprungligen av 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;
Fil dataFile;
int sensorPin = A0; ingångsstift från sensorn
int lux = 0; variabel för att lagra värdet kommer från sensorn
TSL2561 lightSensor(TSL2561_ADDR_FLOAT);
TinyGPS gps;
SoftwareSerial ss (3, 4);
void setup()
{
Serial.BEGIN(115200);
Serial.Print ("initiera SD-kortet...");
SS.BEGIN(9600);
pinMode (chipSelect, produktionen);
RTC.adjust (DateTime (__DATE__, __TIME__));
se om kortet är närvarande och kan initieras:
IF (!. SD.begin(chipSelect)) {
Serial.println ("kort misslyckades, eller inte finns");
inte göra något mer:
samtidigt (1).
}
Serial.println ("kort initierats.");
Öppna filen vi ska logga in!
dataFile = SD.open ("Data5.txt", FILE_WRITE);
om (! dataFile) {
Serial.println ("fel öppna datalog.txt");
Vänta för evigt eftersom vi inte skriva data
samtidigt (1).
}
lightSensor.begin();
om (lightSensor.begin()) {
Serial.println ("Funna sensor");
} annat {
Serial.println ("ingen sensor?");
samtidigt (1).
}
lightSensor.setGain(TSL2561_GAIN_0X); Ange ingen vinst (för ljusa situtations)
lightSensor.setGain(TSL2561_GAIN_16X); ställa in 16 x förstärkning (för dim situationer)
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_13MS); kortast integration tid (ljus)
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_101MS); medellång integration tid (medelstora ljus)
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_402MS); längsta integration tid (svagt ljus)
}
void loop() / / kör om och om igen
{
DateTime nu = RTC.now();
bool newData = false;
för (osignerade långa start = millis(); millis() - start < 1000;)
{
samtidigt (ss.available())
{
char c = ss.read();
Serial.write(c); avkommentera den här raden om du vill se GPS data flödar
om (gps.encode(c)) / / kom en ny giltig mening?
newData = sant;
}
Läs ljussensor
uint32_t lum = lightSensor.getFullLuminosity();
uint16_t ir, full;
IR = lum >> 16.
hela = lum & 0xFFFF;
Lux = lightSensor.calculateLux (full, ir);
}
om (newData)
{
float platt, flon;
osignerade långa ålder;
int år.
byte månad, dag, timme, minut, sekund, hundradelar;
GPS.f_get_position (& platt, och flon, och ålder);
GPS.crack_datetime (& år, & månad & dag, & timme, & minut, & andra, & hundradelar, och ålder);
char sz [32];
sprintf (sz, "% 02d/%02d/%02d, % 02d: % 02d: % 02d,",
månad, dag, år, timme, minut, sekund);
Serial.Print("");
Serial.Print (flon == TinyGPS::GPS_INVALID_F_ANGLE? 0,0: flon, 6);
Serial.Print (",");
Serial.Print (platt == TinyGPS::GPS_INVALID_F_ANGLE? 0,0: platt, 6);
Serial.Print (",");
Serial.Print(sz); skriver ut GMT-tid
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 (platt == TinyGPS::GPS_INVALID_F_ANGLE? 0,0: platt, 6);
dataFile.print (",");
dataFile.print(lux);
dataFile.print (",");
dataFile.println(now.unixtime());
}
dataFile.flush();
Delay(500);
}
Eftersom mörkret karta projektet handlar om samlar ljus värden på natten, ska du konfigurera din TSL2561 sensor för svag belysningssituationer. Så, vill du slå på kodraden som säger:
lightSensor.setGain(TSL2561_GAIN_16X); ställa in 16 x förstärkning (för dim situationer)
och
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_402MS); längsta integration tid (svagt ljus)
Kommentera ut de andra rader som anger förstärkningen och tidpunkten. Och Känn dig fri att ändra dessa inställningar om du vill använda TSL2561 sensorn för andra ändamål.
När koden har lagts upp, börja seriell övervaka, vilket gör att den är inställd på 115200 överföringshastigheten. Om bildskärmen slutar skriva ut alla uppgifter efter "Funna sensor," så är din Arduino förmodligen är inte plocka upp någon GPS signal och vill du hålla tillbaka det ut på ditt fönster avsats. Du bör börja se värden för longitud, latitud, och lux och tidsstämpel kommer in i följetong monitorn. Grattis! Du har gjort dig själv en datalogger.
Eftersom allt är breadboarded, aktiverat gärna byta ut TSL2561 för en annan sensor av ditt val för att göra en annan GPS datalogger. Möjligheterna är oändliga!