desktop

Alimentar relé desde ESP8266 si se cumple una condición en el microcontrolador.

Buenos días,
Estoy haciendo un pequeño proyecto alimentado con batería de 5V por lo que estoy estudiando como poder alargar la carga de esta batería. Se trata de un sensor de agua que pretendo que envíe una señal via web a otro dispositivo luminoso a modo de alarma. Cada 5 minutos más o menos el software del microcontrolador lee el estado del sensor y se pone en modo deepsleep para ahorrar consumo del ESP12E, esto funciona bien, pero el sensor necesita también 5v para su normal funcionamiento y había pensado insertar un relay que active el sensor solo cuando el esp12e esté funcionando para hacer la lectura, pero el relay también necesita alimentación, con lo cual estoy en la misma situación.

¿Hay forma de activar la alimentación del sensor o la del relay, si fuera necesario un relay para esto, de forma controlada por el microcontrolador?

Un saludo
 
Mi bola de cristal dice que ese sensor tiene modo deep sleep que se puede activar por software mediante la conexión I²C por la que estás leyéndolo.
 
Jeje, hola Scooter, no termino de entender bien tu comentario.
No necesito activar el esp mediante una señal, El modo deep slep lo programo para que de forma automática despierte a los 5 minutos y esto ocurre en bucle, lo que necesito es saber si es posible que la alimentación que necesita el sensor de agua, se puede condicionar desde el esp12e al pequeño tiempo que éste está funcionando (el necesario para leer el estado del sensor) de forma que el sensor no esté consumiendo corriente de la bateria todo el tiempo.
 
Hola. Qué tal si das información sobre el sensor y tu circuito actual? Quizás así alguien pueda ayudarte.
Personalmente, con lo que te he entendido, creo que intentaría poner un mosfet canal P high side en el sensor, controlado por el ESP cada vez que despierta. Pero falta información, o no termina de estar clara.
Un saludo
 
Última edición:
... Cada 5 minutos más o menos el software del microcontrolador lee el estado del sensor y se pone en modo deepsleep para ahorrar consumo del ESP12E, esto funciona bien, pero el sensor necesita también 5v para su normal funcionamiento y había pensado insertar un relay que active el sensor solo cuando el esp12e esté funcionando para hacer la lectura, pero el relay también necesita alimentación, con lo cual estoy en la misma situación.
Dependiendo del tipo de sensor y su alimentación, algo que para vos no tiene importancia, cuando se despierta el ESP12E activa un relay, un transistor o un smart switch tipo TS4142.
 
Yo no he dicho nada del ESP, he hecho la coña de que tu sensor tiene un modo de ahorro de energía...
Y por ahí va la fiesta, como no sabemos que sensor usas no sabemos que hay que hacer para que no gaste. Y como tu no lo dijiste y sigues sin decirlo, no lo podemos adivinar.
Poner un relé para un sensor muy probablemente sea una tontería ya que seguramente gaste más el relé que el sensor. O no.

Osea, publica el bendito sensor, su datasheet y su conexión y así no perdemos mas tiempo hablando de nada. Porque no sabemos de qué estamos hablando.
 
Hola de nuevo,
Perdonad si no me he explicado bien antes o no he aportado la suficiente información. A ver si ahora queda un poco más claro.

El sensor de agua es el modelo YL-38 que he comprado en aliexpres es este:

Tiene un consumo de 15 mA
Usa el comparador LM393
Tiene un rango de voltaje de funcionamiento entre 3,3 a 5 V

Lo siento, no encuentro el datasheet.

Esta es la información que viene en el enlace aliexpress.

1726331870561.png

El esquema es muy simple, ahora mismo no puedo pintarlo mejor porque he reutilizado una placa generica que hice para proyectos simples como este y he hecho un pequeño "frankenstein".

1726331989216.png
Si conecto el sensor a la batería consume de esta aunque el esp esté durmiendo, de ahí la consulta de este hilo.

Este es el codigo que estoy utilizando.


C++:
/*
  NOTA: Para que funcione DeepSleep es necesario que el
        pin GPIO16 esté conectado al pin reset del 
        microcontrolador ESP12e
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char* ssid = "mi_ssid";
const char* pass = "mi_pass";
HTTPClient http;
HTTPClient http2;
WiFiClient ioClient;
WiFiClient ioClient2;
int PinAnalogico = 0; // Para operación en modo analogico
int ValorAnalogico = 0;
int LIMITE_SECO = 300;

int codigo = 0;
String cmd_aire_acondicionado = "http://<ip_aire_acondicionado>/irEnviar?modoEstado=POWER_OFF&EJECUTAR=ON";
String cmd_luz_alarma = "http://<ip_alarma_luminosa>/cmdEnviar?Efecto=99";
IPAddress ip(192, 168, 1, 154);
IPAddress ip_ap(192, 168, 4, 1);
IPAddress dns1(192, 168, 1, 1);
IPAddress dns2(8, 8, 8, 8);
IPAddress gateway(192, 168, 1, 1);
IPAddress gateway_ap(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);
bool ConectarWifi();
void setup() {
  Serial.begin(115200);       // Inicia el puerto serie
  Serial.setTimeout(2000);
  pinMode(LED_BUILTIN,OUTPUT);
  digitalWrite(LED_BUILTIN,LOW);
  // Lee el estado del sensor de agua
  //
  ValorAnalogico = analogRead(PinAnalogico);
  Serial.print("\nValor analogico del sensor:");
  Serial.println(ValorAnalogico);
  if ( ( ValorAnalogico < LIMITE_SECO ) ) // Menor que LIMITE_SECO significa sensor mojado y cubo lleno
  {
    Serial.println("Sensor mojado");
    digitalWrite(LED_BUILTIN,HIGH);
    if ( ConectarWifi() )
    {
      
      // Apagar aire acondicionado
      //
      if (http.begin(ioClient,cmd_aire_acondicionado)) {
      
          codigo = http.GET();
          if (codigo > 0) {
            Serial.printf("Solicitud HTTP parada A/A codigo: %d\n", codigo);
            if (codigo == HTTP_CODE_OK || codigo == HTTP_CODE_MOVED_PERMANENTLY) {
              String payload = "Respuesta http:" + http.getString();
              Serial.println(payload);
            }
          } else {
            Serial.printf("Resultado de solicitud HTTP erroneo, codigo: %s\n", http.errorToString(codigo).c_str());
          }
          http.end();
      }
      else {
        Serial.println("No puedo conectar vía HTTP para parar A/A");
      }
    
      // Enviar señal al dispositivo luminoso
      // Enciende luz roja
    
      if (http.begin(ioClient,cmd_luz_alarma)) {
      
          codigo = http.GET();
          if (codigo > 0) {
            Serial.printf("Solicitud HTTP alarma luminosa codigo: %d\n", codigo);
            if (codigo == HTTP_CODE_OK || codigo == HTTP_CODE_MOVED_PERMANENTLY) {
              String payload = "Respuesta http:" + http.getString();
              Serial.println(payload);
            }
          } else {
            Serial.printf("Resultado de solicitud HTTP erroneo, codigo: %s\n", http.errorToString(codigo).c_str());
          }
          http.end();
      }
      else {
        Serial.println("No puedo conectar vía HTTP para encender alarma luminosa");
      }    
      }
      else ESP.reset();
  }
  else
  {
    Serial.println("Sensor seco");
  }
  
  // El tiempo máximo que se puede configurar es de 71 minutos
  // El parámetro se expresa en microsegundos:
  // 10.000.000 = 10e6 -> 10 Segundos
  // 30.000.000 = 30e6 -> 30 Segundos
  // 300 Segundos = 5 minutos = 300e6
  // Para el microcontrolador durante 5 minutos
  Serial.println("Voy a dormir....");
  ESP.deepSleep(10e6);  
}
void loop() {
}
bool ConectarWifi()
{
    int c=0;
    WiFi.mode(WIFI_STA);
    WiFi.config(ip, gateway, subnet, dns1, dns2);
    WiFi.begin(ssid,pass);
    Serial.println("Se realizarán 20 intentos de conexión");
    while (c < 20)
    {
        if (WiFi.status() == WL_CONNECTED) 
        {
            Serial.println("Conexion wifi en STA realizada.");
            Serial.println(WiFi.SSID());
            Serial.print("Intentos:"); Serial.println(c);
            return true;            
        }
        delay(500);
        c++;
        Serial.print(".");
    }
    return false;
}
 
El sensor de agua es el modelo YL-38 que he comprado en aliexpres es este:

Tiene un consumo de 15 mA
Usa el comparador LM393
Tiene un rango de voltaje de funcionamiento entre 3,3 a 5 V
- Esos 15mA es la capacidad de carga a la salida, no el consumo. Pero de todas maneras no es para dejarlo conectado permanentemente a la batería.

- Ese consumo se va principalmente en encender los leds y en menor medida en el LM393. Pero vos no usás nada de esto, solo la salida analógica (de la placa sólo un condensador y una R10k) --> Conectá la placa del higrómetro + C100n + R10k directo al ESP12 con la R10k a una salida. Cosa que reciba tensión cuando activás esa esa salida.

Por otro lado, eso alimentado con continua se produce electrólisis --> Que en reposo esté sin tensión pero que cuando midas lo hagas con ciclos positivos y negativos, para esto necesitas dos salidas conectando el higrómetro en puente.

- El regulador AMS1117-3.3 tiene una corriente de reposo mas alta que esa placa --> cambialo por un MCP1702 3.3V o cualquier otro de baja corriente de reposo (Low quiescent current).
 
Hola,
Como ya os habreis dado cuenta mis conocimientos sobre electrónica no llegan ni al nivel básico, la parte de la programación la llevo algo mejor, no se si es posible que pintarais las soluciones que habeis propuesto tomando como referencia la imagen que os he puesto más arriba.
Muchas gracias por vuestra paraticipación y paciencia.
 
Si entendiera la parte de R10k y C100n no me importaría hacerte un dibujo a mano alzada del resto de la solución que ha aportado Eduardo, que parece la más completa.
No sé si es un filtro RC pasa bajos o qué. Pero no la entiendo, así que yo también estoy interesado..
 
ilkidior, no se decirte porque no tengo conocimientos suficentes sobre electrónica, se supone según ésta página que las cuatro resistencias de 10k y el Condensador forman parte de un circuito base que da estabilidad al funcionamiento del microcontrolador, o eso entiendo yo.
 
Me refiero a esto:
YL38.png
Del circuito digital no estás usando nada, salvo la resistencia R1 y el condensador CX1 (imagen)
En este diagrama forman parte del circuito analógico pero vos las tenés en el digital.

Todo lo que tenés que hacer es sacar el circuito digital y agregar esa R y C.
La resistencia en lugar de ir a 3.3V la mandás a un pin de salida del ESP12E así podés deshabilitar cuando estás en sleep.
 
Muchas gracias Eduardo. Así que es un divisor resistivo. Es decir, que tal como lo tenía antes conectado le estaba introduciendo 5v a la entrada analógica del ESP, que supongo que es de 3.3V, cuando la tierra no conduce (cuando está seca). Nada bueno vamos
 
Si Eduardo, se me pasó pintar la conexión de la masa. Lo que no había visto claro era la conexión analógica hacia el condensador.
Cambiaré también el regulador. (y)
Muchas gracias de nuevo.
 
Atrás
Arriba