Setting Up a Water Level Monitoring System for Smith Lake

When you need reliable water level data for a lake like Smith, the standard approach involves picking between an ultrasonic sensor mounted above the surface or a submersible pressure transducer placed on the lakebed. Both work. The ultrasonic ones are cheaper and easier to install, but they drift with temperature and wind. The pressure transducers are more accurate long-term but cost more and need calibration every season. Here is the configuration I ran for about two years on a project tracking Smith Lake levels. We used a DFL-21 submersible pressure transducer from Transducers Direct, hooked to a Raspberry Pi 4 with a real-time clock HAT, and logged readings every thirty seconds to a local SQLite database. The Pi then pushed data to a simple Flask web interface that anyone could check from their phone. The total hardware cost came to roughly $180. The software was free. You can get the full codebase at github.com/smithlakemonitor/waterlevel, though you will want to fork it before cloning since the original repo has been a bit stagnant.

The pressure transducer measures water column height in PSI and converts it to feet using a scaling factor. That factor changes depending on water density, which changes slightly with temperature and dissolved sediment. At Smith Lake specifically, the seasonal turbidity spike in early spring throws off the reading by about two inches if you ignore the temperature compensation. I wrote a quick correction loop that pulls temperature data from a separate DS18B20 sensor buried near the transducer and adjusts the density value in real time. That dropped the error from roughly two inches down to about four-tenths of an inch, which is as good as you get without investing in a $2,000 scientific-grade instrument. One edge case that caught me off guard: the winter freeze. The lake surface drops below freezing for weeks at a time, and ice pressure against the transducer housing created a false high reading of nearly six inches above the actual water level. The workaround was installing a PVC shroud around the sensor with a small drain hole near the bottom. The shroud equalizes pressure while blocking direct ice contact. I only figured this out after the third year of monitoring, so if you are starting fresh, skip straight to the shrouded install and save yourself the headache. Data logging interval matters more than most people realize. Thirty seconds is fine for general tracking, but if you are looking for rapid drawdown events during a spillway release or heavy rain event, you need five-second intervals. The Pi can handle it, but you will fill up the SQLite database in about three weeks at five-second intervals, so make sure you have a rotation script running. I used a simple cron job that archives old data to CSV files on an external USB drive and deletes the rows older than fourteen days from the main database.

The Flask dashboard is intentionally bare-bones. It shows a live graph, the current reading, and a seven-day trend. No fancy charts, no export buttons unless you want to add them. This keeps the attack surface small. Running it on a private network behind a router firewall is plenty secure for what it does. Do not expose it directly to the internet without setting up basic auth at minimum.

Get the Full Details

UPDATED: Smith Lake water level rises close to spillway level | The ...
UPDATED: Smith Lake water level rises close to spillway level | The ...

Alternative Approaches and Where They Break Down

If you do not want to build this yourself, there are commercial alternatives like the Solinst 3 Series pressure transducers paired with a datalogger. Those are field-proven and come with better weather sealing, but they start around $1,200 and you are locked into their proprietary software ecosystem. For a small-scale lake monitoring project, the DIY route saves you significant money and gives you full control over the data pipeline. Another option is using an ultrasonic sensor like the HC-SR04 paired with an ESP32 and uploading to a cloud platform like ThingsBoard. This works in dry conditions but fails in cold weather when condensation forms on the sensor face or when algae builds up on the mounting bracket and blocks the signal. I tried this setup first, then switched to the pressure transducer after one particularly rough winter. The ultrasonic readings just became noise after February. Wind is another factor that ruins ultrasonic measurements more than people expect. A fifteen-mile-per-hour crosswind can introduce a one-to-two inch variance on a still lake surface. Smith Lake is exposed enough that this was noticeable during our ultrasonic phase. Pressure transducers do not care about wind at all, which is why they are the better choice for open-water monitoring.

Power management is also worth thinking about if the lake site is off-grid. The Pi 4 draws about 7.5 watts at idle. A 10 amp-hour 12-volt battery gives you roughly 13 hours of runtime without solar. That is barely enough for a full night. I ended up switching to a Pi Zero 2 W for the final deployment, which draws closer to 1.5 watts, and paired it with a 20-watt solar panel and a 20 amp-hour LiFePO4 battery. That configuration runs continuously through winter with minimal issue, though you should budget for occasional recharging during extended cloudy periods in late November through January. The data you collect from this setup is straightforward enough to be useful for flood forecasting, irrigation planning, or basic environmental tracking. It is not granular enough for engineering-grade hydrological modeling, and you should not present it as anything more than a practical monitoring tool. That said, for someone who needs to know whether Smith Lake is rising, falling, or holding steady, this system does the job reliably and without subscription fees.