Raspberry Pi Project 4: Data Logger

This simple data logger takes regular light measurements with a LDR (Photoresistor) and stores them in a text file.

The following project uses the same circuit we used in tutorial 5 to make a data logger. This data logger will measure and record the light level every 60 seconds, enabling you to monitor how the brightness changes over a length of time.

Raspberry Pi Data Logger Wiring Diagram Schematic

Open IDLE on your Raspberry Pi (Menu > Programming > Python 2 (IDLE)) and open a new project (File > New File).  Then type the following:

import RPi.GPIO as GPIO
import time
import datetime

loginterval=60 #log interval in seconds
savefilename="lightlevels.txt"
SensorPin=17
TriggerPin=27

GPIO.setmode(GPIO.BCM)
cap=0.000001 #1uf
adj=2.130620985

def measureresistance(mpin,tpin):
    GPIO.setup(mpin, GPIO.OUT)
    GPIO.setup(tpin, GPIO.OUT)
    GPIO.output(mpin, False)
    GPIO.output(tpin, False)
    time.sleep(0.2)
    GPIO.setup(mpin, GPIO.IN)
    time.sleep(0.2)
    GPIO.output(tpin, True)
    starttime=time.time()
    endtime=time.time()
    while (GPIO.input(mpin) == GPIO.LOW):
        endtime=time.time()
    return endtime-starttime

def writeline(txt,fn):
    f = open(fn,'a')
    f.write(txt+'\n')
    f.close()
    
i=0
t=0

while True:
    stime=time.time()
    for a in range(1,11):
        res=(measureresistance(SensorPin,TriggerPin)/cap)*adj
        i=i+1
        t=t+res
        if a==10:
                t=t/i
                print(t)
                writeline(str(datetime.datetime.now())+","+str(t),savefilename)
                i=0
                t=0
    while stime+loginterval>time.time(): #wait until logtime has passed
        time.sleep(0.0001)

Save your project as datalogger.py (File > Save As) in your Documents folder.

Now open Terminal (Menu > Accessories > Terminal) and type the following command:

python datalogger.py

The script will create a text file named "lightlevels.txt" and update it every 60 seconds. You can change this filename on line 6. You can also adjust how often the datalogger updates by changing line 5.