#CMK16 Water Infiltration System

Water infiltration system from CMK 2016 on Vimeo.

Created by Chris Collins, Nick Palombo, and Tami Brass at Constructing Modern Knowledge, summer 2016.

I had the great pleasure of attending Constructing Modern Knowledge with three of my middle school colleagues. On the advice of teachers who’d attended CMK in the past, we had some ideas for projects before we came. What follows is one of the two projects created by Chris Collins, Nick Palombo, and myself over the course of #CMK16.

Objective: Create a sensor that will be able to determine infiltration rate in various types of Earth material


  • 4 PVC pipes 1 foot in length 3in diameter, .25 inch walls
  • 4 PVC endcaps
  • 3 moisture probes
  • 9 Wires (minimum length 3 feet)
  • Breadboard
  • Arduino Duo
  • Lays Chip container
  • Plastic bin
  • Sand
  • River rocks
  • Soil
  • Clay

Experimental Set up

Measure down two inches from the top of the PVC pipe and cut first probe port in the PVC. Then measure down three inches and cut second port, then move down three more inches and cut the third port. Repeat this for the remaining three PVC pipes. Each pipe should now have three cuts exposing the inside so that the moisture probe can be stuck into the earth material from the outside. Place the end caps on the pvc pipes and stand them vertically.


Place the three moisture probes into the PVC pipe making sure to keep track of which one is top middle and bottom. Due to the weight of the Earth material, the tube might have to be turned horizontal (cover the end so that the material doesn’t pour out) and the probe inserted gently to avoid breakage.

Start the serial monitor on the Arduino program. Pour 0.15 L of water into the material and record data.


See attached Excel Document or Google Sheet.

Sources of Error

During the test we noticed that it was possible for water to pool up on the moisture probes and pour out of the tube. We believe that the probes should be inserted at a downward angle so that the water doesn’t drip out of the tubes. Make sure that the cuts in the PVC pipes are downward cuts to avoid this.

Add a 2 inch area above the top of the Earth material so that the water can be poured in at an even rate between the different materials. For example, when using the rocks as a material, the water could be poured in all at one time, while the sand had to be poured in slower to avoid overflow. Since this experiment is focused on the infiltration rate, this could change the results.

Another source of data that we would track, would be how long it takes the water to soak into the material from the top. With the extra pipe on top this data could be taken with a stopwatch by watching the water.

For increased visibility we would recommend cutting the PVC pipes laterally and gluing a transparent sheet across the diameter. The probe ports would then be cut in the back (round side) of the pipe to avoid obstructing visibility. This will allow the students to watch the moisture as it infiltrates into the Earth Material.

The Earth material started with different amounts of moisture in them to start with, a possible extension would be to make sure that all of the materials are thoroughly dried prior to their testing. Have some type of discussion about how to normalize the data. Possible options include using incubators, ovens, or sun to dry the materials prior to use.

We used a Crayola no dry modeling clay for the stratified layer, which was not a natural Earth material. For future experiments we would use pottery clay.


Have students bring in soil samples from various locations and create hypothesis about what they think the infiltration rate will be based on their previous data.

Run a comparison between the time it takes the water to soak into the material and how it infiltrates down into the bottom sensor.

Make predictions about which types of native plants and root systems would thrive best in each type of soil. (connection to life science / biology / biomes)



PVC Tubes with Soil



Arduino Code for Water Infiltration System:

//Working with moisture sensors
int ANPIN0 = 0;
int ANPIN1 = 1;
int ANPIN2 = 2;
int val0;
int val1;
int val2;
int x;

void setup() {
 // put your setup code here, to run once:

pinMode(ANPIN0, INPUT);
pinMode(ANPIN1, INPUT);
pinMode(ANPIN2, INPUT);

void loop() {
 // put your main code here, to run repeatedly:

val0 = analogRead(0);
val1 = analogRead(1);
val2 = analogRead(2);


delay (1000);



Diagram of Arduino Wiring

Diagram of Arduino Wiring



Leave a Reply

Your email address will not be published. Required fields are marked *