aboutsummaryrefslogtreecommitdiff

Environmental sensor

Components

CO₂ sensor

Sensirion SCD40, via the SCD41 dev kit

Using the Sensirion Arduino library

connector: JST PH 2.0mm 4 pin

  • 1 SCL
  • 2 GND
  • 3 VDD
  • 4 SDA

particulate sensor

Sensirion SPS30

Using the Sensirion Arduino library

connector: JST ZH 1.5mm 5 pin

  • 1 VDD
  • 2 SDA
  • 3 SCL
  • 4 SEL → GND (to select I₂C mode)
  • 5 GND

main board

LILYGO® TTGO T5 V2.3.1 with 2.13 Inch E-Paper Screen

Using the same Arduino libraries as the LilyGo examples

battery connector: JST 1.25mm 2 pin

  • 21 SDA
  • 22 SCL

Software

Arduino + ESP32 + makeEspArduino + a bunch of libraries; git submodule init && git submodule update to get them.

You'll probably need to adjust some paths in the Makefile, then you can make flash to build and flash the software.

Serial protocol

make monitor (or make run if you want to build+flash+monitor) lets you interact with the serial line.

Lines starting with # are debug information, lines starting with ! are errors / warnings.

You can send tagged commands, and get tagged responses. For example, you write:

1 logwipe

and you get back:

# reading
# 1 logwipe
# <1|logwipe>
# file: quality.csv
1 wiped

and the logged data has been removed from the SD card.

Then you write:

2 logcat

and get:

# reading
# 2 logcat
# <2|logcat>
2 begin
  secs,  co2,  temp, humid,    pm1,  pm2.5,    pm4,   pm10, batt
   162,  639,  18.1,  33.7,    1.1,    0.1,    0.0,    0.0, 4.26
   168,  637,  17.8,  34.2,    1.1,    0.1,    0.0,    0.0, 4.26
   174,  637,  17.8,  34.2,    1.1,    0.1,    0.0,    0.0, 4.26
   180,  637,  17.8,  34.2,    1.1,    0.1,    0.0,    0.0, 4.26
   187,  637,  17.8,  34.2,    1.1,    0.1,    0.0,    0.0, 4.26
   193,  637,  17.8,  34.2,    1.1,    0.1,    0.0,    0.0, 4.26
2 end

which is the whole contents of the data log from the SD card.

There's also setco $int, to force-calibrate the CO₂ sensor, but I haven't tested it yet.

Helper programs

If you install Path::Tiny and IO::Termios on your Perl, you can use utils/get-data to get the logged data off the sensor.

Enclosure

Render with OpenSCAD, then print.

I printed on a Prusa MK3S, with PLA, sliced with PrusaSlicer:

  • setting "0.20mm speed"
  • variable layer height
  • "adaptive cubic" fill pattern
  • bottom layer of the enclosure:
  • 4 bottom solid layers
  • 2 top solid layers
  • middle layer of the enclosure:
  • 2 bottom solid layers
  • 2 top solid layers
  • top layer of the enclosure:
  • 4 bottom solid layers (which are, in fact, the top layers of the enclosure, because the top is upside-down)
  • 2 top solid layers