Hola amigos de la comunidad,
soy nuevo en el mundo arduino y estoy realizando un proyecto
en el que quiero conectar 3 sensores a un arduino Mega 2560
He probado los sensores cada uno por sí solos y funcionan bien
el problema lo tengo cuando conecto junto los sketch en uno solo, el código
compila bien y me realiza mediciones de el sensor de humedad/temperatura y corriente
y no así con el de caudal, debo admitir que tengo una noción de programación bastante básica,
pero, por lo poco que sé, puedo deducir que el problema está entre definir las I/O.
Estos son los sensores que ocupé:
DHT22: Temperatura / Humedad
ACS712(30A): Corriente
Ys-201: Caudal de agua
Arduino Mega 2560
les adjunto el código y un pantallazo de las mediciones
#include "DHT.h"
#define DHTPIN 2 // A que pin digital nos conectamos
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
float Sensibilidad=0.066; //sensibilidad en Voltios/Amperio para sensor de 30A
volatile int NumPulsos; //variable para la cantidad de pulsos recibidos
int PinSensor = 3; //Sensor conectado en el pin 3
float factor_conversion=7.11; //para convertir de frecuencia a caudal
float volumen=0;
long dt=0; //variación de tiempo por cada bucle
long t0=0; //millis() del bucle anterior
void ContarPulsos ()
{
NumPulsos++; //incrementamos la variable de pulsos
}
//---Función para obtener frecuencia de los pulsos--------
int ObtenerFrecuecia()
{
int frecuencia;
NumPulsos = 0; //Ponemos a 0 el número de pulsos
interrupts(); //Habilitamos las interrupciones
delay(2000); //muestra de 1 segundo
noInterrupts(); //Deshabilitamos las interrupciones
frecuencia=NumPulsos; //Hz(pulsos por segundo)
return frecuencia;
}
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
pinMode(PinSensor, INPUT);
attachInterrupt(0,ContarPulsos,RISING);//(Interrupción 0(Pin3),función,Flanco de subida)
Serial.println ("Envie 'r' para restablecer el volumen a 0 Litros");
t0=millis();
}
void loop() {
if (Serial.available()) {
if(Serial.read()=='r')volumen=0;//restablecemos el volumen si recibimos 'r'
}
float frecuencia=ObtenerFrecuecia(); //obtenemos la frecuencia de los pulsos en Hz
float caudal_L_m=frecuencia/factor_conversion; //calculamos el caudal en L/m
dt=millis()-t0; //calculamos la variación de tiempo
t0=millis();
volumen=volumen+(caudal_L_m/60)*(dt/1000); // volumen(L)=caudal(L/s)*tiempo(s)
float voltajeSensor= analogRead(A0)*(5.0 / 1023.0); //lectura del sensor
float I=(voltajeSensor-2.5)/Sensibilidad; //Ecuación para obtener la corriente
Serial.print ("Caudal: ");
Serial.print (caudal_L_m,2);
Serial.print ("L/min\tVolumen: ");
Serial.print (volumen,2);
Serial.println (" L");
Serial.print("Corriente: ");
Serial.println(I,2);
delay(2000);
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
}
Cualquier ayuda, comentario o información que me puedan enviar, la agradeceré
sensores.ino (3.15 KB)
