Hola foro en español, mi código solo lee de forma correcta, los pines A5 A3, los pines A4 A2 dan datos incorrectos y no doy donde esta el problema.
const int sensor0 = A5;
const int sensor1 = A4;
const int sensor2 = A3;
const int sensor3 = A2;
const unsigned long TIEMPO_LECTURAS = 3000UL;
float adc_voltage0 = 0.0;
float in_voltage0 = 0.0;
float adc_voltage1 = 0.0;
float in_voltage1 = 0.0;
float adc_voltage2 = 0.0;
float in_voltage2 = 0.0;
float adc_voltage3 = 0.0;
float in_voltage3 = 0.0;
float R1 = 30000.0;
float R2 = 7500.0;
float R3 = 30000.0;
float R4 = 7500.0;
float R5 = 30000.0;
float R6 = 7500.0;
float R7 = 30000.0;
float R8 = 7500.0;
float ref_voltage0 = 5.0;
float ref_voltage1 = 5.0;
float ref_voltage2 = 5.0;
float ref_voltage3 = 5.0;
int adc_value0 = 0;
int adc_value1 = 0;
int adc_value2 = 0;
int adc_value3 = 0;
unsigned long tiempolecturas;
void setup() {
Serial.begin(9600);
}
void loop() {
if (millis() - tiempolecturas > 3000UL) {
adc_value0 = analogRead(sensor0);
adc_voltage0 = (adc_value0 * ref_voltage0) / 1024.0;
in_voltage0 = adc_voltage0 / (R2 / (R1 + R2));
adc_value1 = analogRead(sensor1);
adc_voltage1 = (adc_value1 * ref_voltage1) / 1024.0;
in_voltage1 = adc_voltage1 / (R3 / (R3 + R4));
adc_value2 = analogRead(sensor2);
adc_voltage2 = (adc_value2 * ref_voltage2) / 1024.0;
in_voltage2 = adc_voltage2 / (R6 / (R6 + R7));
adc_value3 = analogRead(sensor3);
adc_voltage3 = (adc_value3 * ref_voltage3) / 1024.0;
in_voltage3 = adc_voltage3 / (R7 / (R7 + R8));
Serial.println(" VOLTAJE VCC ");
Serial.println("sensor 0 ");
Serial.print(in_voltage0, 2);
Serial.println("V");
Serial.println("sensor 1 ");
Serial.print(in_voltage1, 2);
Serial.println("V");
Serial.println("sensor 2 ");
Serial.print(in_voltage2, 2);
Serial.println("V");
Serial.println("sensor 3 ");
Serial.print(in_voltage3, 2);
Serial.println("V");
tiempolecturas = millis();
}
}
float in_voltage(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Este otro código es el que use como base, para construir el anterior, que me gusta porque es posible ajustar los ohmios, de las resistencias de cada sensor y hacer los ajustes en código y conseguir mas precisión y este otro no tiene esa posibilidad
Saludo.
const int sensor0 = A5;
const int sensor1 = A4;
const int sensor2 = A3;
const int sensor3 = A2;
const unsigned long TIEMPO_LECTURAS = 2000UL;
int valorsensor0;
int valorsensor1;
int valorsensor2;
int valorsensor3;
float voltaje0;
float voltaje1;
float voltaje2;
float voltaje3;
unsigned long tiempolecturas;
void setup() {
Serial.begin(9600);
}
void loop() {
if (millis() - tiempolecturas > 2000UL) {
valorsensor0 = analogRead(sensor0);
voltaje0 = Convolt(valorsensor0, 0, 1023, 0.0, 25.0);
valorsensor1 = analogRead(sensor1);
voltaje1 = Convolt(valorsensor1, 0, 1023, 0.0, 25.0);
valorsensor2 = analogRead(sensor2);
voltaje2 = Convolt(valorsensor2, 0, 1023, 0.0, 25.0);
valorsensor3 = analogRead(sensor3);
voltaje3 = Convolt(valorsensor3, 0, 1023, 0.0, 25.0);
Serial.println("sensor 0 ");
Serial.print(voltaje0);
Serial.println("V");
Serial.println("sensor 1 ");
Serial.print(voltaje1);
Serial.println("V");
Serial.println("sensor 2 ");
Serial.print(voltaje2);
Serial.println("V");
Serial.println("sensor 3 ");
Serial.print(voltaje3);
Serial.println("V");
tiempolecturas = millis();
}
}
float Convolt(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}