Hackster is hosting Impact Spotlights: Industrial Automation. Watch the stream live on Thursday!Hackster is hosting Impact Spotlights: Industrial Automation. Stream on Thursday!
Negar RafieedolatabadiJacek Pieczaba
Published

Sensirion SCD41 CO2 Datalogger

Smart Datalogger which collects CO2 level, temperature and humidity of the environment.

BeginnerProtip1 hour499
Sensirion SCD41 CO2 Datalogger

Things used in this project

Hardware components

Sensirion SCD41
×1
Raspberry Pi Zero
Raspberry Pi Zero
×1

Software apps and online services

Raspbian
Raspberry Pi Raspbian

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)

Story

Read more

Custom parts and enclosures

SCD4x STEP File

File missing, please reupload.

Raspberry Pi Case

File missing, please reupload.

Schematics

RAspberry pi and sensor connection

File missing, please reupload.

SCD41 and Raspberry pi 0 wire connection

Wire connections

Wire connections

Wire connections

Code

Python data collection file

Python
import time
import board
import adafruit_scd4x
import csv
import matplotlib.pyplot as plt
import RPi.GPIO as GPIO

BUTTON_PIN = 5
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#Default mode if we dont press button the state is gonna be high or 1 and if press on the botton its gonna be low or 0)
i2c = board.I2C()
scd4x = adafruit_scd4x.SCD4X(i2c)
print("Serial mumber:",[hex(i) for i in scd4x.serial_number])
scd4x.start_periodic_measurement()
print("waiting for first measurement...")

f = open("data.csv","w", newline='')
writer = csv.writer(f)

header = ['CO2', 'Temperature', 'Humidity','Time']

writer.writerow(header)

while True and GPIO.input(BUTTON_PIN) == GPIO.LOW:
    if scd4x.data_ready:
        writer.writerow(" ")
        print("CO2: %d ppm" % scd4x.CO2),f.write("%d " % scd4x.CO2)
        print("Temperature: %0.1f *C" % scd4x.temperature), f.write("%0.1f " % scd4x.temperature)
        print("Humidity: %0.1f %%" % scd4x.relative_humidity), f.write("%0.1f " % scd4x.relative_humidity)
        timeC = time.strftime("%H")+':'+time.strftime("%M")+':'+time.strftime("%S")
        print(timeC), f.write(timeC)
        print()
        f.flush()
           
    time.sleep(1)
    

           
    


        

Credits

Negar Rafieedolatabadi
4 projects • 4 followers
Contact
Jacek Pieczaba
6 projects • 8 followers
Hardware design engineer;Technology enthusiast;
Contact

Comments

Please log in or sign up to comment.