Go Down

Topic: [SOLUCIONADO] Problema Nodemcu+relé+downlight (Read 3166 times) previous topic - next topic

DJuan

Dec 28, 2017, 07:38 pm Last Edit: Apr 21, 2018, 07:32 am by DJuan
Hola de nuevo, a ver si me podéis dar un poco de luz a un problema que tengo, estoy "domotizando" todas las luces de mi casa nueva, que se enciendan por wifi y por pulsador, hasta ahora lo había conseguido hacer funcionar correctamente, hasta que lo he probado con un downligth de led de 20w que son lo que voy a poner en la casa, con bombillas de led normales e incluso con un foco de led de 50w funciona correctamente, he probado a ponerle un diodo 1N4007, pero ni así, paso a comentar el código que utilizo y como lo tengo conectado.
Code: [Select]


#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

#define UnoOn "1On"
#define UnoOff "1Off"
#define DosOn "2On"
#define DosOff "2Off"
#define TresOn "3On"
#define TresOff "3Off"
#define TodoOn "todoon"
#define TodoOff "todooff"
#define Puerto "Elije un puerto"


const char* ssid = "SSID";
const char* password = "contraseña";
IPAddress ip(192,168,1,224);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
const int ledPin1 = 13; //Lo conectamos a D5
const int ledPin2 = 12; //Lo conectamos a D6
const int ledPin3 = 14; //Lo conectamos a D7
const int boton1 = 5; // boton2 al D1
const int boton2 = 4; // boton1 al D2
const int boton3 = 9; // boton2 al SD2
int val1 = 0; //val se emplea para almacenar el estado del boton
int val2 = 0; //val se emplea para almacenar el estado del boton
int val3 = 0; //val se emplea para almacenar el estado del boton
int state1 = 1; // 0 LED apagado, mientras que 1 encendido
int state2 = 1; // 0 LED apagado, mientras que 1 encendido
int state3 = 1; // 0 LED apagado, mientras que 1 encendido
int old_val1 = 0; // almacena el antiguo valor de val
int old_val2 = 0; // almacena el antiguo valor de val
int old_val3 = 0; // almacena el antiguo valor de val
WiFiServer server(Puerto);

void setup() {
 
 
 Serial.begin(115200);
 delay(10);
 pinMode(boton1, INPUT);
 pinMode(boton2, INPUT);
 pinMode(boton3, INPUT);
 pinMode(ledPin1, OUTPUT);
 pinMode(ledPin2, OUTPUT);
 pinMode(ledPin3, OUTPUT);
  
 WiFi.begin(ssid, password);
 WiFi.config(ip, gateway, subnet);

 // while (WiFi.waitForConnectResult() != WL_CONNECTED)
 //    {   Serial.println("Connection Failed! Rebooting...");
 //        delay(5000);
 //        ESP.restart();
 //    }

 ArduinoOTA.setPassword((const char *)"pass");
 Serial.println();
 Serial.println();
 Serial.print("Conectado a ");
 Serial.println(ssid);
 Serial.print("IP:");
 Serial.println(ip);
 Serial.printf("MAC Address = %s\n", WiFi.softAPmacAddress().c_str());
 Serial.print("Puerto:");
 Serial.print(Puerto);
 Serial.println();
 Serial.println("Ordenes:");
 Serial.println(UnoOn);
 Serial.println(UnoOff);
 Serial.println(DosOn);
 Serial.println(DosOff);
 Serial.println(TresOn);
 Serial.println(TresOff);
 Serial.println();
 Serial.print("Ordenes: todoton/todooff");
 Serial.println();
 
 ArduinoOTA.begin();
 server.begin();
 }

void loop() {
ArduinoOTA.handle();
ESP.wdtDisable();
val1= digitalRead(boton1); // lee el estado del Boton1
if ((val1 == HIGH) && (old_val1 == LOW)){
state1=1-state1;
delay(100);
}
old_val1 = val1; // valor del antiguo estado
if (state1==1){
 digitalWrite(ledPin1, HIGH); // enciende el LED
}
else{
 digitalWrite(ledPin1,LOW); // apagar el LED
}

val2= digitalRead(boton2); // lee el estado del Boton
if ((val2 == HIGH) && (old_val2 == LOW)){
state2=1-state2;
delay(100);
}
old_val2 = val2; // valor del antiguo estado
if (state2==1){
 digitalWrite(ledPin2, HIGH); // enciende el LED
}
else{
 digitalWrite(ledPin2,LOW); // apagar el LED
}

val3= digitalRead(boton3); // lee el estado del Boton
if ((val3 == HIGH) && (old_val3 == LOW)){
state3=1-state3;
delay(100);
}
old_val3 = val3; // valor del antiguo estado
if (state3==1){
 digitalWrite(ledPin3, HIGH); // enciende el LED
}
else{
 digitalWrite(ledPin3,LOW); // apagar el LED
}

WiFiClient client = server.available();
 if (!client) {
   return;
 }

 Serial.print("IP:");
 Serial.println(ip);
 Serial.println("new client");
 while(!client.available()){
   delay(1);
 }

 String request = client.readStringUntil('\r');
 client.flush();
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println("");
    int val1 = digitalRead(ledPin1);
 if (request.indexOf(UnoOn) != -1)  {
   digitalWrite(ledPin1, LOW);
   state1 = 0;
 }
 if (request.indexOf(UnoOff) != -1)  {
   digitalWrite(ledPin1, HIGH);
   state1 = 1;
 }
  if (request.indexOf(TodoOn) != -1)  {
   digitalWrite(ledPin1, LOW);
   state1 = 0;
 }
 if (request.indexOf(TodoOff) != -1)  {
   digitalWrite(ledPin1, HIGH);
   state1 = 1;
 }

if (val1 == HIGH) {
 client.println(UnoOff);
    
 }
if (val1 == LOW) {
   client.println(UnoOn);

 }

 int val2 = digitalRead(ledPin2);
 if (request.indexOf(DosOn) != -1)  {
   digitalWrite(ledPin2, LOW);
   state2 = 0;
 }
 if (request.indexOf(DosOff) != -1)  {
   digitalWrite(ledPin2, HIGH);
   state2 = 1;
 }
  if (request.indexOf(TodoOn) != -1)  {
   digitalWrite(ledPin2, LOW);
   state2 = 0;
 }
 if (request.indexOf(TodoOff) != -1)  {
   digitalWrite(ledPin2, HIGH);
   state2 = 1;
 }
  

 if (val2 == HIGH) {
   client.println(DosOff);
    
 }
if (val2 == LOW) {
   client.println(DosOn);

 }

 int val3 = digitalRead(ledPin3);
 if (request.indexOf(TresOn) != -1)  {
   digitalWrite(ledPin3, LOW);
   state3 = 0;
 }
 if (request.indexOf(TresOff) != -1)  {
   digitalWrite(ledPin3, HIGH);
   state3 = 1;
 }
  if (request.indexOf(TodoOn) != -1)  {
   digitalWrite(ledPin3, LOW);
   state3 = 0;
 }
 if (request.indexOf(TodoOff) != -1)  {
   digitalWrite(ledPin3, HIGH);
   state3 = 1;
 }
  

 if (val3 == HIGH) {
   client.println(TresOff);
    
 }
if (val3 == LOW) {
   client.println(TresOn);

 }

 if (request.indexOf("/info") != -1)  {
 client.println("<br />");
 client.println("<br />");
 client.println("<b>Conectado a:   </b>");
 client.println(ssid);
 client.println("<br />");
 client.println("<b>IP:  </b>");
 client.println(ip);
 client.println("<br />");
 client.println("<b>Puerto:</b>");
 client.println(Puerto);
 client.println("<br />");
 client.printf("<b>Direccion MAC: </b>%s\n", WiFi.softAPmacAddress().c_str());
 client.println("<br />");
 client.println("<b>Ordenes:</b>");
 client.println(UnoOn);
 client.println("/");
 client.println(UnoOff);
 client.println("/");
 client.println(DosOn);
 client.println("/");
 client.println(DosOff);
 client.println("/");
 client.println(TresOn);
 client.println("/");
 client.println(TresOff);
 client.println("/");
 client.println(TodoOn);
 client.println("/");
 client.println(TodoOff);



 }

 delay(1);

}


El Nodemcu lo tengo conectado a los 5v de la fuente y el relé a los 3v del nodemcu y al D7,el pulsador en pull-down al D2, de esta manera me funciona bien, lo he tenido días de prueba y sin problemas, incluso controlando todo desde el móvil, pero si conecto al downlight, se enciende pero enseguida se apaga, si conecto el relé a los 5v de la fuente, el relé se queda siempre encendido y la luz funciona bien, pero no se puede apagar...

Alguien me puede dar alguna otra idea para probar?

Gracias de ante mano.





Editado: Pues ahora sí, solucionado con un filtro a la entrada de la fuente del downlight

surbyte

El rele con 3.3V no funciona a menos que alimentes tmb la parte del opto con 5V.
Has verificado que el refle cambia de estado?

DJuan

Si surbyte, al relé le basta con los 3v del nodemcu, lo he comprobado anteriormente, funciona sin problemas, lo tenía conectado a una lámpara estos días atrás, hasta que lo probé con el foco de luz nuevo. He probado también eso que dices, alimentándolo con los 5v, pero debo de hacer algo mal porque entonces se queda el relé siempre encendido.

surbyte

No dije que lo alimentes con 5V, dije qeu debes alimentar (esto no lo dije) quitando el jumper de modo que la alimentación de 5V energice el colector y la R que estan en el circuito que comanda la bobina.
Los 3.3V de la salida GPIO se encargan de accionar el LED del Opto.



Aca tienes el esquema y se ve lo que digo.
Si quitas el jumper (cuando lo tienes) le darás 5V por el pin que dice JD-VCC
Gnd compartido y la salida comandara el LED del opto

Asi funciona perfecto con los nodemcu, los Raspi, los ESP01, etc etc

DJuan

#4
Dec 28, 2017, 08:13 pm Last Edit: Dec 29, 2017, 05:04 pm by DJuan
El relé no tiene jumper, es éste modelo:



Me he dado cuenta, que si dejo presionado el pulsador, el relé aguanta encendido, me estoy volviendo loco ya... yo creo que debe ser algo de ruido eléctrico producido por la fuente del led, os dejo una imagen por si sirve de algo.

DJuan

#5
Dec 28, 2017, 09:55 pm Last Edit: Dec 29, 2017, 08:31 am by DJuan
Bueno, trasteando mas, he visto que lo que sucede es que se reinicia el nodemcu y me da este mensaje:

 ets Jan  8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v3de0c112
~ld


Alguna idea?

EDITO: Solo ocurre cuando acciono el relé por wifi, se enciende y a los segundos se reinicia, si lo hago desde el pulsador simplemente se desconecta el relé sin reiniciarse.

surbyte

Te das cuenta!!!! no es el rele adecuado.

Luego te digo como salvar la situación, si es que se puede.

DJuan

#7
Dec 29, 2017, 08:10 am Last Edit: Dec 29, 2017, 08:32 am by DJuan
Ok, gracias surbyte.

He editado el post anterior para aportar un poco más de información.

DJuan


jafox007

Hola.

Pero el rele de la foto pone 5vdc, tu has medido cuanto voltaje le esta llegando? Puede que sea un poco menos que a los otros, y has mirado el consumo? Si dices que lo hace cuando lo accionas por wifi puede ser que te falte corriente ya que el wifi consume mas en la comunicacion que en reposo

DJuan

Gracias jafox007, pero creo que no van por ahí los tiros, si le conecto otro tipo de lámpara funciona perfectamente.

jafox007

En este caso estas sacando la alimentacion para el Nodemcu del transfor del downlight
 si no me equivoco, y para los otros dos casos que dices?, El foco de 50w y la bombilla led normal.

DJuan

Que vas, el nodemcu lo alimento siempre con una fuente de 5v 600mA, el downlight lo conecto igual que las demás lámparas, a 220v   a través del relé.

jafox007

#13
Dec 29, 2017, 10:50 pm Last Edit: Dec 29, 2017, 10:56 pm by jafox007
A vale no me di cuenta de la fuente de alimentacion que sale en la foto.

jafox007

#14
Dec 29, 2017, 11:00 pm Last Edit: Dec 29, 2017, 11:09 pm by jafox007
Si fuera yo haria una prueba.

Supervisar el Nodemcu y conectar el led saltandome el rele, directamente a ver si al encenderse el Nodemcu tambien se reinicia, si conectas y desconectas el led manualmente y el Nodemcu tambien se reinicia, yo  descartaria el rele.

Go Up