Making a Data Logger With the Raspberry Pi

7,769

50

4

Introduction: Making a Data Logger With the Raspberry Pi

About: Components Plus specialise in electronic components for hobbyists and makers alike. We are passionate about anything Arduino, RaspberryPi and robotics. We provide a wide range of cheap components aimed at insp…

This simple data logger takes regular light measurements with an analogue LDR (Photoresistor) and stores them in a text file on your Raspberry Pi. 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.

If we want to use analogue sensors with the Raspberry Pi, we would need to be able to measure the resistance of the sensor. Unlike the Arduino, the Raspberry Pi's GPIO pins are unable to measure resistance and can only sense if the voltage supplied to them is above a certain voltage (approximately 2 volts). To overcome this issue, you could use an Analogue to Digital Converter (ADC), or you could use a relatively cheap capacitor instead.

Step 1: What You Will Need

- A RaspberryPi with Raspbian already installed. You will also need to be able to access the Pi using a Monitor, Mouse and Keyboard or via Remote Desktop. You can use any model of Raspberry Pi. If you have one of the Pi Zero models, you may want to solder some header pins to the GPIO port.

- A Light Dependant Resistor (Also known as an LDR or Photoresistor)

- A 1 uF Ceramic Capacitor

- A Solderless Prototyping Breadboard

- Some Male to Female jumper wires

Step 2: Build Your Circuit

Build the above circuit on your breadboard making sure that none of the components leads are touching. The Light Dependent Resistor and Ceramic Capacitor have no polarity which means that a negative and positive current can be connected to either lead. Therefore you do not need to worry about which way these components have been connected in your circuit.

Once you have checked your circuit, carefully connect the jumper cables to your Raspberry Pi's GPIO pins by following the above diagram.

Step 3: Create a Python Script to Read and Log Your Data

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

<p>import RPi.GPIO as GPIO<br>import time
import datetime</p><p>loginterval=60 #log interval in seconds
savefilename="lightlevels.txt"
SensorPin=17
TriggerPin=27</p><p>GPIO.setmode(GPIO.BCM)
cap=0.000001 #1uf
adj=2.130620985</p><p>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</p><p>def writeline(txt,fn):
    f = open(fn,'a')
    f.write(txt+'\n')
    f.close()
    
i=0
t=0</p><p>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)</p>

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.

Raspberry Pi Contest 2017

Participated in the
Raspberry Pi Contest 2017

Be the First to Share

    Recommendations

    • Battery Powered Contest

      Battery Powered Contest
    • Plywood Challenge

      Plywood Challenge
    • Plastic Contest

      Plastic Contest

    4 Discussions

    0
    guttalapidemcavat
    guttalapidemcavat

    Question 2 years ago on Step 3

    May I ask, why not simply measure resistance, but measure discharge time for the capacitor?
    I suppose that the final expression must be relatively complicated (exponent voltage fall, taking into account False voltage for GPIO pins...). What are the units of the result? Luxes?

    0
    guttalapidemcavat
    guttalapidemcavat

    Answer 2 years ago

    I am sorry, I forgot that RaspberryPi does not have AD converter.

    0
    JRV31
    JRV31

    3 years ago

    There are a few HTML tags scattered throughout your program. A <br> on the first line and </p> <p> in a few lines. This is a common problem with the Instructables code editor.

    0
    ComponentsPlus
    ComponentsPlus

    Reply 3 years ago

    Thanks for letting me know. I've gone through the code and removed them. Some of the indents had also disappeared (not good when writing in Python!), which I've now fixed.