from machine import Pin, ADC, PWM, Timer
import utime
# Function to read voltage
def read_voltage():
voltage_pin = ADC(Pin(26))
voltage = voltage_pin.read_u16()
return voltage * 3.3 / 65535
# Function to read current
def read_current():
current_pin = ADC(Pin(27))
current = current_pin.read_u16()
return current * 3.3 / 65535
# Function to read temperature
def read_temperature():
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / 65535
reading = sensor_temp.read_u16() * conversion_factor
temperature = 27 - (reading - 0.706) / 0.001721
return temperature
# Function to calculate z-score
def calculate_z_score(value, mean, std_dev):
return (value - mean) / std_dev
# Function to calculate mean
def calculate_mean(data):
return sum(data) / len(data)
# Function to calculate standard deviation
def calculate_std_dev(data):
mean = calculate_mean(data)
variance = sum((x - mean) ** 2 for x in data) / len(data)
return variance ** 0.5
# Main loop
def main():
# Collect initial data for mean and standard deviation calculation
voltage_data = []
current_data = []
temperature_data = []
for _ in range(100): # Collect 100 samples
voltage_data.append(read_voltage())
current_data.append(read_current())
temperature_data.append(read_temperature())
utime.sleep(0.1) # Delay for 0.1 second between readings
# Calculate mean and standard deviation
voltage_mean = calculate_mean(voltage_data)
voltage_std_dev = calculate_std_dev(voltage_data)
current_mean = calculate_mean(current_data)
current_std_dev = calculate_std_dev(current_data)
temperature_mean = calculate_mean(temperature_data)
temperature_std_dev = calculate_std_dev(temperature_data)
# Continuous monitoring and z-score calculation
while True:
voltage = read_voltage()
current = read_current()
temperature = read_temperature()
# Calculate z-scores
voltage_z_score = calculate_z_score(voltage, voltage_mean, voltage_std_dev)
current_z_score = calculate_z_score(current, current_mean, current_std_dev)
temperature_z_score = calculate_z_score(temperature, temperature_mean, temperature_std_dev)
# Print z-scores
print("Voltage Z-Score:", voltage_z_score)
print("Current Z-Score:", current_z_score)
print("Temperature Z-Score:", temperature_z_score)
utime.sleep(1) # Delay for 1 second
if __name__ == "__main__":
main()