Como se pudo ver en la anterior entrada del blog luz-descansillo, pese a que ha funcionado medianamente bien, en ciertas horas de luz, el voltaje del divisor resistivo que iba a la base del transistor oscilaba demasiado haciendo que el transistor se encendiese y apagase rápidamente. Puse un condensador para comerse esas oscilaciones, pero como es obvio, la respuesta se volvió mucho más lenta. Es por ello que consideré hacer una segunda versión. Estuve haciendo algunas pruebas con circuitos trigger schmitt pero tampoco me convención en exceso el resultado.
En mayo hice una compra bastante grande de componentes a China donde me vinieron varios modulos ESP8266 en varias versiones: ESP01, ESP07 y nodeMCU(ESP12E). Por lo que ya que el IoT está de moda pues empecé a desarrollar de nuevo el sensor de luz para implementarlo con estos chips. Los ESP8266 son una pasada, y poder brindar de conectividad WiFi a tus proyectos es genial.
Para este proyecto en concreto he usado el ESP01.
Dado el limitado acceso a los pines que hay (nada más que GPIO0 y GPIO2), este módulo lo he visto usar en su mayoría como periférico serial en un proyecto controlado por arduino, pero para nodos de sensores sencillos también vale.
En mi caso esos dos pines dan justo: uno para el PIR y otro para el Relé. Al principio lamenté no tener acceso a un tercer pin que además fuese el que tiene conversor AD, para poder leer el valor del LDR, no obstante al final no ha resultado un problema.
En uno de los tantos ejemplos que vi de ESP8266 por internet, encontré un código para solicitar la fecha y hora en UTC a un server, mediante http. Y empecé a trabajar sobre ese código.
El funcionamiento de esta versión es mucho más complejo pero considero que también más fiable. Sabiendo la hora y la fecha ya solo faltaba saber las horas de amanecer y anochecer para poder evaluar cuando es de noche. Buscando por la red encontre esta maravillosa API api.sunrise-sunset.org la cual te calcula, en UTC, éstas horas para una latitud y longitud dada. Ésta ha sido la parte en la que más me he atascado pues era la primera ver que trabajaba con solicitudes web, JSON y demás. Probé la librería ArduinoJson para decodificar éste, pero me dio un problema que no entendí, así que para 2 campos que necesitaba de ese JSON, lo decodifiqué a mano.
El grosso del código se lo lleva el determinar si es de noche o no, puesto que dependiendo de si es horario de verano o no, en españa es GMT +2 o GMT +1, el horario de verano no es el mismo en cada año, los años bisiestos… y demás consideraciones.
A su vez he implementado que cuando salte el PIR,el ESP envie un comando UDP a otro dispositivo, el cual enseñare en las próximas entradas. Por el momento tratar con SQL y PHP para interactuar con servers y bases de datos es algo desconocido para mi, por lo que poco a poco iré mejorando los dispositivos WiFi que tengo por casa.
Aqui tenéis fotos del montaje. Está un poco chapucero.
Aqui teneis el código que he programado.
Sensor luz wifi
1 comentario
Israel · febrero 5, 2020 a las 4:18 pm
Muy bueno el proyecto, con respecto al montaje «chapuza», para mi se trata de eso, de «cacharrear» y pasarlo bien… jejeje.