Initial commit
This commit is contained in:
107
calibrate.py
Normal file
107
calibrate.py
Normal file
@@ -0,0 +1,107 @@
|
||||
import time
|
||||
import ntptime
|
||||
import json
|
||||
import os
|
||||
from hx710b import HX710B # Correct driver
|
||||
from config import *
|
||||
|
||||
CALIB_FILE = "calibration.cfg"
|
||||
|
||||
tz_offset = 0
|
||||
utc = time.localtime()
|
||||
local = time.localtime(time.mktime(utc) + tz_offset * 3600)
|
||||
ctime = f"{local[0]:02}-{local[1]:02}-{local[2]:02} {local[3]:02}:{local[4]:02}:{local[5]:02}"
|
||||
#print("Time =", local)
|
||||
print("Time =", ctime)
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# USER INPUT
|
||||
# ---------------------------------------------------------
|
||||
# Water depth (meters)
|
||||
# KNOWN_DEPTH_M = 1.680
|
||||
|
||||
# Pressure created by water column (kPa)
|
||||
KNOWN_PRESSURE_KPA = KNOWN_DEPTH_M * 9.81
|
||||
|
||||
print(
|
||||
"\nUsing depth {:.3f} m → expected pressure {:.3f} kPa".format(
|
||||
KNOWN_DEPTH_M, KNOWN_PRESSURE_KPA
|
||||
)
|
||||
)
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# SAVE CALIBRATION
|
||||
# ---------------------------------------------------------
|
||||
def save_calibration(ctime, zero_offset, raw_at_pressure, scale_factor):
|
||||
data = {
|
||||
"zero_offset": zero_offset,
|
||||
"raw_at_pressure": raw_at_pressure,
|
||||
"scale_factor": scale_factor,
|
||||
"Date_Time": ctime
|
||||
}
|
||||
|
||||
with open(CALIB_FILE, "w") as f:
|
||||
json.dump(data, f)
|
||||
|
||||
print("\n✔ Saved calibration:")
|
||||
print(" Date_Time =", ctime)
|
||||
print(" zero_offset =", zero_offset)
|
||||
print(" raw_at_pressure =", raw_at_pressure)
|
||||
print(" scale_factor =", scale_factor)
|
||||
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# RAW AVERAGING
|
||||
# ---------------------------------------------------------
|
||||
def read_average(hx, samples=30):
|
||||
total = 0
|
||||
for _ in range(samples):
|
||||
total += hx.read_raw()
|
||||
time.sleep_ms(5)
|
||||
return total / samples
|
||||
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# CALIBRATION PROCESS
|
||||
# ---------------------------------------------------------
|
||||
print("\n=== HX710B Depth-Based Calibration ===")
|
||||
|
||||
hx = HX710B(dout_pin=0, sck_pin=1)
|
||||
|
||||
# Step 1 — ZERO PRESSURE
|
||||
print("\n➡ Ensure tank is OPEN TO AIR (0 kPa)...")
|
||||
time.sleep(3)
|
||||
|
||||
zero_offset = read_average(hx)
|
||||
print("Zero offset captured:", zero_offset)
|
||||
|
||||
# Step 2 — APPLY KNOWN PRESSURE
|
||||
print(
|
||||
"\n➡ Now apply EXACTLY {:.3f} kPa (depth {:.3f} m)...".format(
|
||||
KNOWN_PRESSURE_KPA, KNOWN_DEPTH_M
|
||||
)
|
||||
)
|
||||
time.sleep(10)
|
||||
|
||||
raw_at_pressure = read_average(hx)
|
||||
print("Raw at known depth:", raw_at_pressure)
|
||||
|
||||
# Compute scale factor
|
||||
scale_factor = KNOWN_PRESSURE_KPA / (raw_at_pressure - zero_offset)
|
||||
|
||||
# Save calibration (INCLUDING raw value)
|
||||
save_calibration(ctime, zero_offset, raw_at_pressure, scale_factor)
|
||||
|
||||
print("\n=== Calibration Complete ===")
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# VERIFY
|
||||
# ---------------------------------------------------------
|
||||
hx.zero_offset = zero_offset
|
||||
hx.scale_factor = scale_factor
|
||||
|
||||
test = hx.read_kpa()
|
||||
|
||||
print("\nVerification reading:", test, "kPa")
|
||||
print("Expected:", KNOWN_PRESSURE_KPA, "kPa")
|
||||
print("\nDone.\n")
|
||||
Reference in New Issue
Block a user