Stap 5: Het toevoegen van de lichtsensor
--Grond verbinding te maken met het spoor van de grond op het breadboard
--De VCC pin verbinding te maken met het 3V-pin op de Arduino
--Sluit de SCL-pin naar Arduino pin A5
--Sluit de SDA pin naar Arduino pin A4
We gebruiken de TSL2561 Arduino libray van Adafruit. U kunt het downloaden hier, rits het open, en zet in de omslag van de bibliotheken van Arduino. Als de Arduino is open opnieuw starten voor de bibliotheek weergegeven in de voorbeelden dropdown keuzes. Open de voorbeeld-schets en upload het naar de Arduino. Druk op de seriële monitor om te controleren of het het lezen van gegevens. Golf je hand over de sensor om te zien als dat de lichte waarden verandert. Zodra u tevreden bent dat uw sensor werkt, de volgende code uploaden naar de Arduino:
Duisternis kaart gegevens collectie apparaat
Genevieve Hoffman, 2012
TinyGPS Library, door Mikal Hart, download hier: http://arduiniana.org/libraries/tinygps/
TSL2561 Library, door Ladyada (Limor Fried), download hier: https://github.com/adafruit/TSL2561-Arduino-Library
RTClib, door Ladyada (Limor Fried), download hier: https://github.com/adafruit/RTClib
RTClib oorspronkelijk ontwikkeld door 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;
Bestand dataFile;
int sensorPin = A0; invoer pin van de sensor
int lux = 0; variabele de waarde afkomstig van sensor op te slaan
TSL2561 lightSensor(TSL2561_ADDR_FLOAT);
TinyGPS gps;
SoftwareSerial ss (3, 4);
VOID Setup
{
Serial.begin(115200);
Serial.Print ("initialiseren SD card...");
SS.begin(9600);
pinMode (chipSelect, OUTPUT);
RTC.adjust (DateTime (__DATE__, __TIME__));
Zie als de kaart aanwezig is en kan worden geïnitialiseerd:
if (!. SD.begin(chipSelect)) {}
Serial.println ("kaart mislukte of niet aanwezig");
Doe niets meer:
terwijl (1);
}
Serial.println ("kaart geïnitialiseerd.");
Open het bestand gaan wij aan te melden!
dataFile = SD.open ("Data5.txt", FILE_WRITE);
Als (! dataFile) {}
Serial.println ("fout bij openen datalog.txt");
Voor eeuwig wachten, omdat wij niet het schrijven van gegevens
terwijl (1);
}
lightSensor.begin();
Als (lightSensor.begin()) {}
Serial.println ("gevonden sensor");
} else {}
Serial.println ("geen sensor?");
terwijl (1);
}
lightSensor.setGain(TSL2561_GAIN_0X); geen winst (voor lichte dringende) instellen
lightSensor.setGain(TSL2561_GAIN_16X); 16 x winst (voor dim situaties) instellen
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_13MS); kortste integratie tijd (licht)
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_101MS); middellange integratie tijd (medium light)
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_402MS); integratie langst (dim licht)
}
void loop / / run over en weer
{
DateTime nu = RTC.now();
BOOL newData = false;
voor (niet-ondertekende lange start = millis(); millis() - start < 1000;)
{
terwijl (ss.available())
{
char c = ss.read();
Serial.write(c); uncomment deze regel als u wilt zien de GPS gegevens stromen
Als (gps.encode(c)) / / kwam een nieuwe geldige zin?
newData = true;
}
Lees lichtsensor
uint32_t lum = lightSensor.getFullLuminosity();
uint16_t ir, vol is;
IR = lum >> 16;
volledige = lum & 0xFFFF;
Lux = lightSensor.calculateLux (vol, ir);
}
Als (newData)
{
float plat, flon;
niet-ondertekende long leeftijd;
int. jaar;
byte maand, dag, uur, minuut, seconde honderdsten;
GPS.f_get_position (flat, flon, & leeftijd);
GPS.crack_datetime (& jaar & maand, & dag & uur, minuut, & tweede, & honderdsten, & leeftijd);
char sz [32];
sprintf (sz, "% 02d/%02d/%02d, % 02d: % 02d: % 02d,",
maand, dag, jaar, uur, minuut, seconde);
Serial.Print("");
Serial.Print (flon TinyGPS::GPS_INVALID_F_ANGLE ==? 0.0: flon, 6);
Serial.Print (",");
Serial.Print (vlakke == TinyGPS::GPS_INVALID_F_ANGLE? 0.0: plat, 6);
Serial.Print (",");
Serial.Print(SZ); GMT-tijd wordt afgedrukt
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 (vlakke == TinyGPS::GPS_INVALID_F_ANGLE? 0.0: plat, 6);
dataFile.print (",");
dataFile.print(lux);
dataFile.print (",");
dataFile.println(now.unixtime());
}
dataFile.flush();
delay(500);
}
Aangezien de duisternis kaart project is over het verzamelen van lichte waarden bij nacht, zult u willen configureren uw TSL2561 sensor voor schemerige lichtomstandigheden. Zo, zult u wilt inschakelen van de coderegel die zegt:
lightSensor.setGain(TSL2561_GAIN_16X); / / set 16 x winst (voor dim situaties)
en
lightSensor.setTiming(TSL2561_INTEGRATIONTIME_402MS); integratie langst (dim licht)
Commentaar uit de andere lijnen die de winst en de timing. En voel je vrij om deze instellingen te wijzigen, als u besluit om de TSL2561-sensor voor andere doeleinden gebruiken.
Nadat de code is geüpload, start u de seriële monitor, ervoor te zorgen dat deze op 115200 baud-rate ingesteld. Als de monitor stopt afgedrukt informatie na "Gevonden sensor," dan je Arduino waarschijnlijk is niet oppakken van een GPS-signaal, en u zult willen houden het terug op de richel van uw venster. U moet beginnen te zien van waarden voor de lengtegraad, breedtegraad, en lux en timestamp binnenkomt de seriële monitor. Gefeliciteerd! Je hebt jezelf een datalogger gemaakt.
Aangezien alles is breadboarded, ingeschakeld voel je vrij om het omwisselen van de TSL2561 voor een andere sensor van uw keuze om een andere GPS datalogger. De mogelijkheden zijn eindeloos!