first tests....
// Define globals
const float VCC = 3.3; // ESP32 supply voltage
const int ADC_MAX = 4095; // 12-bit ADC resolution
// Thermal sensor variables
const float THERM_R0 = 50000.0; // Thermistor resistance at T0 (e.g., 10kΩ)
const float THERM_T = 298.15; // T0 in Kelvin (25°C + 273.15)
const float THERM_B_VALUE = 4100.0; // Thermistor's Beta value (from datasheet)
const float THERM_SERIES_RESISTOR = 50000.0; // Fixed resistor value
//
const int PIN_THERM = 34; // ADC pin for thermal sensor/diode / analog input
const int PIN_MOISTURE = 35; // ADC pin for moisture sensor / analog input
const int PIN_PUMP = 25; // water pump / digital output
const int PIN_ESTUFA = 23;
const int PIN_LED = 27;
const int PIN_FAN = 26;
//
int cnt=0;
int cnt_delay=0;
int delayValue = 1000;
int cnt_last = 0;
//
int pos=0;
int led=0; // 0=off, 1=on
//--
//
void get_moisture() {
int val = analogRead(PIN_MOISTURE);
Serial.print("Moisture val: ");
Serial.println(val);
}
//
void get_thermal() {
int val = analogRead(PIN_THERM);
// 1. Calculate Voltage at ADC Pin (Vout)
float vout = (float)val * (VCC / ADC_MAX);
// 2. Calculate Thermistor Resistance (Rth) using Voltage Divider
// Rth = R_series * (Vout / (VCC - Vout))
float r_th = THERM_SERIES_RESISTOR * (vout / (VCC - vout));
// 3. Calculate Temperature (Kelvin) using Beta Equation
// 1/T = 1/T0 + (1/B) * ln(Rth/R0)
float tmp1 = 1.0/log(r_th / THERM_R0);
float temp_kelvin = 1.0 / ((1.0 / THERM_T) + (1.0 / THERM_B_VALUE) * log(r_th / THERM_R0));
// 4. Convert Kelvin to Celsius
float temp_celsius = temp_kelvin - 273.15;
float d1 = THERM_T - temp_kelvin;
float d2 = d1-tmp1;
Serial.print("ADC: "); Serial.print(val);
Serial.print(", Resistance: "); Serial.print(r_th);
Serial.print(", vout: "); Serial.print(vout);
Serial.print(", temp_kelvin: "); Serial.print(temp_kelvin);
Serial.print(", d1: "); Serial.print(d1);
Serial.print(" Ohms, Temp: "); Serial.print(temp_celsius);
Serial.print(", d2: "); Serial.print(temp_celsius + (d2*2));
Serial.print(" ,d1: "); Serial.print(d1+temp_celsius);
Serial.print(", tmp1: "); Serial.print(tmp1);
Serial.println(" °C");
}
// Configure setup
void setup() {
delay(500);
//
Serial.begin(115200);
//--
//
pinMode(PIN_FAN,OUTPUT); // led
digitalWrite(PIN_FAN,HIGH); // off
// Light LED
pinMode(PIN_LED,OUTPUT);
digitalWrite(PIN_LED,HIGH);
// WATER PUMP - off
pinMode(PIN_PUMP,OUTPUT);
digitalWrite(PIN_PUMP,HIGH);
// ESTUFA - HEATER
pinMode(PIN_ESTUFA,OUTPUT);
digitalWrite(PIN_ESTUFA,HIGH); // HIGH = Off for Relay
// MOISTURE SensOr - problem!
/*analogWrite(32,500);
pinMode(32,OUTPUT); // led
digitalWrite(32,LOW); // off*/
}
// Program loop
void loop() {
char tmp[100];
sprintf(tmp,"Loop pos: %i, cnt: %i", pos, cnt);
Serial.println(tmp);
//
get_thermal();
//
get_moisture();
//
if( cnt==10 && pos==0 ) {
Serial.println("turning pump on...");
//digitalWrite(PIN_PUMP,LOW); // turn on pump
}
else if( cnt==13 ) {
//Serial.println("turning pump off...");
//digitalWrite(PIN_PUMP,HIGH);
Serial.println("Estufa ON");
digitalWrite(PIN_ESTUFA,LOW);
//digitalWrite(PIN_FAN,LOW);
}
else if( cnt==1 ) {
Serial.println("Estufa ON");
digitalWrite(PIN_ESTUFA,LOW);
//digitalWrite(PIN_FAN,LOW);
}
else if( cnt==3 ) {
Serial.println("Estufa ON");
//digitalWrite(PIN_ESTUFA,LOW);
digitalWrite(PIN_FAN,LOW);
}
else if( cnt==8 ) {
Serial.println("Estufa Off");
digitalWrite(PIN_ESTUFA,HIGH);
digitalWrite(PIN_FAN,HIGH);
}
else if( cnt==15 ) {
digitalWrite(PIN_FAN,LOW);
}
else if( cnt==23 ) {
Serial.println("Estufa Off");
digitalWrite(PIN_ESTUFA,HIGH);
digitalWrite(PIN_FAN,HIGH);
}
//
if( cnt==25 ) {
pos+=1;
cnt=0;
}
// Count cnt every second. Important variables: cnt_delay and delayValue
if( cnt_delay>= 1000 ) {
cnt_delay = 0;
cnt += 1;
} else {
cnt_delay += delayValue;
}
//
delay(delayValue);
}