Introduction: Practical Demonstration of Ohm's Law

When starting an introduction course on electronics one of the very first things you need to do is to teach the very important concepts of Voltage, Current and Resistance. They need to become intuitive, and an analogy that is often used is that with a flow of water, coming down from a reservoire.

Well, I've found that it doesn't always work! Many young students lack that feeling for physical fenomena, so I decided to show it experimentally.

I made this experiment in an after school course about basic electronics, for curious groups of students ranging from 15 to 18 years old. Even if some of the older ones already had this knowledge, doing this personally improved their understanding, which is what's really important when studying scince, otherwise it becomes just a bunch of formulas.

The experiment itself is easy, with a lot of room for error and the results are pretty nice. Also, I've found that seeing the fenomenon helps the students visualize later on.

PS: There's the Python script used to plot the data! Download from the step Analyzing your Data


  • Two containers, at least one transparent
  • Some sort of tubing of constant legth
  • A cronometer
  • Measuring tape
  • Water, preferably colored

Step 1: Build the Apparatus

The setup is very simple, you just need to hang one of the tanks somewhere and place the other tank below. In order to seal the point in which the tube enters the tank I used some epoxy. Also, making a couple of lines on the top tank(as visible in the photos) ensures that the amount of water trasferred is alway the same.

A possible variation is to constantly measure the mass, either by hanging the top tank from a scale or placing the second tank on a scale, and correlate the time to the mass transferred in that specific iteration. This should work fine, but notice that it introduces a non-constant error, since the average height of the water might not always be at the same distance from the point from which you measure the height.

Once everything is set up, you can add some coloring to the water, just to make it clearly visible. Food coloring works fine.

Remember to close the valve before filling!

Step 2: Measure

I suggest to measure the height after filling, as the system might have to adjust a bit to the weight. To measure the mass I used a hanging scale, filled the tank to the empty line, weighted, and repeated for the full line.

Tip:fill the tank over the full line, so you can open the valve and then start taking the time once the level reaches the line.

Once everything is ready, open the valve, take the time, and wait.

Take notes and repeat

Step 3: Analyzing Your Data

Clearly you can analyze the data in several different ways, depending on your/your students' knowledge. The easiest is by hand, which in this case is still possible, and can also be used to teach how to graph and make predictions starting from a graph.

I used a python script which you can easily modify to work on your data, just replace the values for heights, times and mass (lines 10, 11, 12).

This script makes a linear fit, a quadratic fit and plots the data. The last five lines make a height prediction based on the time (in seconds) set in line 39 (variable time_set).

Step 4: Interpretation

The data points that I collected show a kind of linear behavior. Some of the variance is for sure due to my imprecise measures, but I think that the tube also had a great influence on non linearity. If I had to do it again, I would use a tube with a larger diameter, like 10mm ID or more. That should ensure that the interaction between the flow and the walls of the tube becomes less influent.

The python script gives you the slope of the curve, which is the "resistance" of the system.

Step 5: Testing Its Predictive Power

A nice thing you can do is show that your model can predict the behaviour of the system. In this case I desided that I wanted the tank to be empty in 5 minutes, and used that and the slope found before to calculate at what height the tank needed to be.

The python script does that too, you just need to replace the time (300 seconds) with the time you want. Last thing, I don't expect the predicion to work with times that are too small.

When testing the prediction, I got a time of 5:04 minutes, way better than I expected, to be honest!

Step 6: Send Me Something!

Send me photos, videos, plots, data, questions, whatever! I'd really love to know that someone was inspired and made the experiment!

If you send me something and want to be featured in one of my videos on YouTube, please let me know.

Also, are there any mistakes?

Classroom Science Contest

Runner Up in the
Classroom Science Contest