Como conocer el consumo eléctrico de una forma barata

me ha sorprendido por lo facil de instalar que es y lo exacto de sus mediciones Sistema fiable para controlar el consumo eléctrico. Fácil instalación y utilización. 


La potencia consumida , es la potencia capaz de transformar la energía eléctrica en trabajo dado que los diferentes dispositivos eléctricos existentes convierten la energía eléctrica en otras formas de energía(mecánica, lumínica, térmica, química, etc) .Esta potencia se designa con la letra P y se mide en vatios —watt— (W) o kilovatios —kilowatt— (kW). De acuerdo con su expresión, la ley de Ohm y el triángulo de impedancias:

{\displaystyle P=I_{e}\cdot V_{e}\cdot \cos \phi =I_{e}\cdot Z\cdot I_{e}\cos \phi =I_{e}^{2}\cdot Z\cdot \cos \phi =I_{e}^{2}\cdot R\,\!}

Debido a la gran importancia de la potencia eléctrica sobre las características del suministro eléctrico , hay algunos casos en los que puede ser conveniente cambiar la potencia contratada pues en la practica nos limitara o permitirá usar un determinado numero de dispositivos  eléctricos  simultáneamente

En este sentido, deberíamos estudiar  si necesitamos  un aumento o una reducción de la potencia contratada pues según la potencia que tengamos contratada con nuestra compañía suministradora     pagaremos  mas o menos  en nuestra factura mensual en concepto de potencia contratada  ademas de los kw/h que consumamos.

Precisamente para controlar este termino surge.el  Interruptor Controlador de Potencia o llamado también ICP  que corta el suministro  cuando detecta que la instalación eléctrica de la vivienda está haciendo uso de más cantidad de energía de la que tiene contratada obligando a  desconectar  aparatos y volver a subir el interruptor. Tradicionalmente estos dispositivos se instalaban  la derecha del cuadro de distribución de ca sellándose el  acceso a este en un compartimiento aparte, pero actualmente van integrados en los llamados contadores inteligentes , los cuales incluso pueden ser programados para aumentar o reducir la potencia contratada sin tener que cambiar físicamente el dispositivo

 

Si el limitador sea del modelo que sea  salta continuamente significa que hay menos potencia de la necesaria por lo que habrá que solicitar un aumento  (  y tendremos que pagar un poco mas en concepto de potencia contratada )  pero, si no es así ,y  se quiere ahorrar en las facturas de luz se puede  solicitar una reducción de la potencia contratada , !pero ojo si realmente se ha comprobado que hay más potencia contratada de la que se necesita ! ( por ejemplo instalando en casa  un watimtro como vamos a ver)  

 

Precisamente para concienciarnos  de lo que consumimos en nuestra vivienda en tiempo real  para poder tomar medidas correctoras  o para contratar mayor o menor potencia , existen unos sencillos  comprobadores multifuncionales , que nos pueden aportar esa información instantáneamente  de un modo bastante sencillo y económico , pues el  modelo que vamos a ver KKmoon AC 80-260 V 100A es muy económico  ofreciéndonos en tiempo real la siguiente información: 

  • Tensión de entrada de ca de la red de ca en voltios
  • Intensidad  de entrada expresada en amperios
  • Potencia activa expresada en watios
  • Potencia acumulada en Watios/Hora
  • Alarma en caso de sobrepasar un determinado umbral de potencia activa programada previamente

 

Este modelo con gran pantalla retroiluminada   y persistente (almacena los datos cuando cesa el suministro ) , como vemos se aleja de los anticuados instrumentos de aguja  no solo ofreciendo mas información integrada en un único aparato,pues  también incluye al función de alarma de sobrecarga pudiéndose programar  la  potencia a partir de la cual  dará un aviso visual cuando se superan el valor por defecto.

Este instrumento se controla con un solo pulsador  que esta a la izquierda de la pantalla  permitiendo    controlar la pantalla, energía, límite de alarma activada por defecto de energía de la nueva colocación.

Estos son los tres modos de operación actuando  sobre ese pulsador:

  • RETROILUMINACION:Mediante   una pulsación corta se activa o desactiva la retroiluminación  estando  por defecto encendida. En caso de programar alarma de umbral  solo se enciende  unos instantes
  • RESET;Mediante una pulsación larga de 5 segundos hasta que el numero en el display empiece a parpadear entonces liberar ,pulsar otra vez  y entonces el valor de la energía se borrara y dejara de parpadear ( sino quiere esto vuelva a pulsar por 5 segundos  hasta que el numero deje de parpadear lo que significara que el el valor de energía no se ha borrado  y saldrá del estado de reset
  • PROGRAMACIÓN DEL UMBRAL:Pulsando hasta que aparezca SET CLr  y después liberando  entramos en modo programación del umbral de la alarma. En la pantalla  se visualizara el valor de la alarma y el ultimo dígito parpadeando, entonces si pulsa cambiara el valor ,pero si no se pulsa en tres segundos cambiara al siguiente dígito automáticamente y así sucesivamente. Se finaliza la programación si pulsamos mas de 5 segundos  lo cual automáticamente salvara el umbral  y quedara configurado ese valor.

 

 

Instalación

Realmente es bastante sencillo de instalar  ese  dispositivo  kkmon  pues funciona de manera parecida a una pinza amperimetrica y solo necesita que pase por el interior de l a bobina que suministran  SOLO  uno de los cables que alimenta la vivienda  para poder dar las medidas.

En  primer lugar habrá que decidir el lugar   donde ubicarlo , siendo lo mas aconsejable que este cerca del cuadro de distribución de ca pues necesitamos atravesar uno de los cables  de la distribución de  ca  (no importa que sea la fase o el neutro)  por la bobina del instrumento

En el esquema de mas abajo de una instalación típica de una vivienda  podemos ver   algunos de los puntos donde podríamos intercalar la bobina ( solo debe pasar  un cable  por la bobina de medición)

Recordamos  que  como hay que soltar el cable en los puntos mencionados ,hacer pasar por el cable la bobina  y volverlo a colocar en su lugar el citado cable , debe extremar las medidas de seguridad  para evitar exposición a la c.a. asi que si no tiene experiencia, rogamos solicite la ayuda de un profesional.

En todo caso ,antes de desconectar algunos de los cables propuestos   en alguno de estos puntos, desconecte el interruptor general  ( en el dibujo es el magnetotérmico  que esta mas a la izquierda)y compruebe con un buscapolos o un multimetro que efectivamente no hay tensión en el cable a desconectar . Hecho este desconecte , intercale la bobina entre el cable  , vuelva a conectar en el original  y ya puede volver a conectar la ca

 

instalacion

Una vez decido el punto donde intercalar la bobina, soltaremos ,pasaremos el cable  y volveremos a conectar   y luego si estaba protegido con cinta volveremos a cubrir la conexión con este

IMG_20180914_191355[1]IMG_20180912_124923[1].jpg

En el montaje hemos decidido instalar en la vieja caja ict , ya que al contar con contador inteligente el ict esta integrado en este, así que practicaremos un agujero de d 89,6 x 49,6 aprox.   en el frontal de dicha caja

 

IMG_20180914_191058[1]

Opcionalmente se puede colocar otros elementos  como por ejemplo un cargador usb  para alimentar en un futuro algún dispositivo que envié las mediciones  para  poder ser consultadas remotamente.

 

IMG_20180914_191050[1]

Ahora ya insertaremos el medidor en el frontal de la caja ict

IMG_20180912_124844[1].jpg

La iluminación de la pantalla es genial y permite ver en todo momento con claridad.

IMG_20180914_191623[1]

Nos  queda conectar  también el  aparato de medición a la ca , bien a una toma de ca con un enchufe , o bien , ya que estamos en el cuadro de distribución de ca,  a la salida de alguno de los magnetotérmicos de salida  de los circuitos  de la vivienda.

RECODAMOS TENGA MUCHA PRECAUCIÓN A LA HORA DE MANIPULAR LOS CABLES DE CA

IMG_20180914_191708[1]

Probaremos como va antes de atornillar la   tapa a la caja

IMG_20180914_192512[1]

!Trabajo  finalizado!  Con esto concluimo la instalacion del dispositivo

IMG_20180914_192105[1]

Ajustes  finales

Mediante   una pulsación corta  de 5  segundos del pulsador de la izquierda del instrumento se activa o desactiva la retroiluminación  estando  por defecto encendida. En caso de programar alarma de umbral  solo se enciende  unos instantes

Mediante una pulsación larga de 5 segundos del mismo pulsador hasta que el numero en el display empiece a parpadear entonces liberar ,pulsar otra vez  y entonces el valor de la energía se borrara y dejara de parpadear ( sino quiere esto vuelva a pulsar por 5 segundos  hasta que el numero deje de parpadear lo que significara que el el valor de energía no se ha borrado  y saldrá del estado de reset

Pulsando hasta que aparezca SET CLr  y después liberando  entramos en modo programación del umbral de la alarma. En la pantalla  se visualizara el valor de la alarma y el ultimo dígito parpadeando, entonces si pulsa cambiara el valor ,pero si no se pulsa en tres segundos cambiara al siguiente dígito automáticamente y así sucesivamente. Se finaliza la programación si pulsamos mas de 5 segundos  lo cual automáticamente salvara el umbral  y quedara configurado ese valor.

 

 

Por cierto, si le interesa este instrumento , se puede comprar en Amzon  por menos de 14€

Potente y efectiva alarma con notificaciones por SMS y email

La solucion simplemente basta con ue fijar su viejo Smartphone   cerca de la puerta de acceso mediante un velcro o similar , y colocar un soporte solidario a la puerta que pueda cubrir aproximadamente al menos 1cm la parte superior del Smartphone, para  que en cuanto  abramos la puerta  automáticamente oculte el sensor  y de esta forma ser envíen según se defina,   notificaciones por SMS o por mail de cualquier acceso  ( obviamente si ha definido  el número del teléfono  y las cuentas de correo de origen y de destino dentro de la propia aplicación)


Ahora  que llega el verano es muy importante monitorizar los accesos  a  nuestra segunda vivienda  sobre todo para estar al tanto de cualquier acceso no autorizado y emprender las medidas necesarias.

Ademas ,dada la gran dependencia del suministro de corriente alterna,  también es necesario  tener constancia de cualquier caída o reposición que haya en el suministro que es necesario estar  informados  sobre todo ahora que  se aproximan las vacaciones  , para realizar acciones correctivas como por ejemplo reponer   elementos de maniobra o protección pues todos sabemos las consecuencias de tener cortes prolongados de red : posibles  perdidas de alimentos por la falta de refrigeración,fallo en sistemas de alarmas, fallos en  automatismos como riego automático,climatización ,etc

 

Normalmente sistemas capaces  de monitorizar accesos,  así como también  el estado de suministro eléctrico  con la complicación que eso conlleva ( sin red también deben ser capaz de enviar notificaciones) requieren un hardware muy costoso

Afortunadamente  la solución que proponemos que proponemos escapa del planteamiento clásico  al no  necesitar ningún hardware especial ,por lo que es terriblemente sencilla, pues simplemente requiere  un viejo  terminal  android  y por supuesto  una  app que pueda gestionar tanto el acceso como el estado de la red

En el siguiente vídeo podemos ver esta solución en funcionamiento:

 

 

 

 La solución que proponemos es única, pues no es necesario adquirir ningún hardware adicional, ya que se basa en reutilizar un  viejo Smartphone con SO Android 4.1 (Yelly Bean) o superior que tengamos olvidado  en un cajón  , para pasar a gestionar tanto los accesos, como los cortes de red del suministro eléctrico de una vivienda o local.

Al viejo terminal habrá que insertar una SIM  ( por ejemplo de prepago)  instalar la aplicación gratuita  Seguricasa y   mantener el Smartphone conectado al cargador, para que desde ese momento, en cuanto defina en la app el número del teléfono y las cuentas de correo de origen y de destino, pueda recibir   a voluntad   notificaciones por SMS o por mail, de cualquier anomalía que suceda en el suministro de corriente alterna de su vivienda.

El tema de añadir una SIM tiene una explicación: si no tenemos suministro eléctrico no nos puede funcionar nuestra banda ancha o FTTH por no poder alimentar a los equipos de cliente  asi que no tendremos conectividad  por estas vías  por lo  que se nos hace necesario  buscar otra alternativas como las redes 2G8/3G o incluso los SMS’s

 

 

Elementos  necesarios para la solución

A continuación   destacamos los elementos necesarios para la instalación de la aplicación de seguridad :

  • Smartphone Android con SO Android 4.1 (Yelly Bean) o superior.
  • Tarjeta SIM (puede ser de Prepago).
  • Cargador original.
  • Es importante destacar que si se desea almacenar las notificaciones de SMS o e-mail, el terminal debería contar al menos con 128MB de espacio en la SD externa para almacenamiento de logs.
  • Sistema para fijar el smartphone a la pared  o  belcro autoadhesivo
  • Un trozo de cartón duro  fijado solidario a la puerta de acceso que tape parcialmente el sensor de presencia del Smartphone al abrirse.

PUESTA EN MARCHA DE LA SOLUCIÓN SEGURICASA

Veamos a continuación los pasos   a seguir  para  instalar una alarma de accesos y falta de red de corriente alterna  con notificaciones  con sms y emails

 

PASO 1: SELECCIÓN DE TERMINAL

El   montaje  requiere  simplemente un Smartphone con SO Android 4.1o  superior que puede ser reciclado o en desuso. También es importante destacar que   si se desea almacenar las notificaciones de SMS o e-mail, el terminal debería contar al menos con 128MB de espacio en la SD externa para almacenamiento de logs.

El terminal Android debe tener SO Android 4.1 (Yelly Bean) o superior y no  es fundamental  que tenga  la pantalla  perfecta ( o la batería)  ya que la interacción con el terminal solo sera necesaria para configurar cuales van a ser las notificaciones  y los destinatarios de estas ( es decir este terminal puede ser perfectamente reciclado  o incluso en mal estado ) .

PASO 2: INSTALACIÓN DE LA APP SEGURICASA

Encenderemos el terminal  e instalaremos bien   la aplicación “Seguricasa ”  en su versión gratuita ( envía notifiaciones por email) o bien su versión de  premium de pago (0,5€) que también puede enviar SMS’s   y carece de publicidad .

seguricasafree.png

Pensando en la gran seguridad, accesibilidad y confianza que ofrecen los SMS’s frente a otros servicios de mensajería, en esta aplicación se ha optado por permitir él envió de mensajes de forma selectiva según las necesidades de los usuarios  por medio de la versión Premiun  de la misma  app (versión 4)

El link de Google play es esta es   ;https://play.google.com/store/apps/details?id=com.soloelectronicos.seguricasa.alarmaredv4.

v4.png

 

PASO 3: SIM

El siguiente paso  es insertar la SIM  en el terminal si es que vamos  a enviar SMS o emails estando sin suministro eléctrico  , ya que normalmente cuando no haya red eléctrica tampoco solo tenemos tener wifi. Dependiendo de lo que deseemos (sms o emails ) necesitaremos  un plan mas o menos ajustado ,pero en general con una tarjeta pre-pago debería ser suficiente

PASO 4: FIJACIÓN MECÁNICA DEL TERMINAL

Ahora  lo siguiente debería ser fijar el terminal  a un extremo de la puerta si es que vamos a usarlo  también para notificar los acceso a la vivienda o local. Por ejemplo un belcro auto-adhesivo pegado en la parte de atrás del terminal  puede ser un sistema perfecto  , aunque en el mercado  obviamente también existen soportes  para  fijar el terminal de forma vertical de una manera muy simple.

Simple mente necesitaremos un cartón grueso de buena calidad de unos 5 cm de ancho por unos 20 cm:

 

IMG_20170713_135917[1].jpg

El cartón lo cortaremos para que cubra con holgura el sensor de proximidad del terminal ( suele estar en la parte superior)

 

IMG_20170713_140148[1].jpg

Debemos cortar el cartón de modo que pueda cubrir el sensor

 

IMG_20170713_140224[1].jpg

No es necesario que exceda  , simplemente debe rebasar la anchura del terminal

IMG_20170713_140833[1].jpg

Como se ve en la imagen lo doblaremos por la mitad en angulo de 90 grados

 

IMG_20170713_140908[1].jpg

Ahora fijaremos el cartón a la hoja de la puerta cerca de la bisagra de modo que al abrir la puerta el cartón oculte el sensor del terminal

 

IMG_20170713_214820[1].jpg

Seguidamente colocaremos belcro  auto-adhesivo sobre ambos lados del terminal tanto en el marco de la puerta como en el propio terminal

 

IMG_20170316_191402.jpg

Fijaremos seguidamente el terminal con el belcro al marco de la puerta:

 

IMG_20170713_215058[1].jpg

 

Fijado el terminal   ya solo nos quedaría comprobar    que  al abrir al puerta este  tape el sensor de proximidad del terminal tal y como se ve en la fotografía siguiente:

Una vez fijados el terminal  y el cartón es hora de conectar  la alimentación  por medio del cargador original  o en su defecto cualquier cargador con salida micro-usb (tenga en cuenta que el cargador debe permanecer siempre enchufado de modo que pueda ser motorizado  el estado de la red eléctrica por lo que este  debería ser preferentemente el original  o por lo menos de buena calidad ).

!Ya esta  todo preparado !, así que arrancaremos  la aplicación   y  podemos  configurar  todos los  parámetros de notificaciones como vamos a ver  a continuación.

 

PASO 5 :CONFIGURACIÓN DE LA APLICACIÓN

Hay una opción muy importante referida a la configuración de la aplicación, la cual se accede pulsando el botón contextual del terminal   de Android o en el boton central de la app

v4.png

Pulsando sobre el botón de la caja de herramientas de la appp o el de  configuración del terminal nos aparecerá el menú Configuración en la parte Inferior de la pantalla.

Una vez ahí, pulsando sobre el ítem, se mostrara el submenú de configuración de la aplicación estando  la pantalla está divida por seis secciones claramente identificadas:

  • Avisos por SMS.
  • Avisos por email.
  • Números de teléfono para SMS.
  • Correo electrónico destino.
  • Usuario Gmail para envíos.
  • Fichero de log.

Avisos por SMS.

La conectividad a internet de los terminales de última generación junto con el crecimiento exponencial tanto de las redes sociales como los de servicios de mensajería no han frenado la expansión de los mensajes SMS a nivel comercial.

Está claro que  los nuevos métodos de comunicación han tomado la delantera en lo que se refiere a las comunicaciones personales y grupales  ,pero a cambio han dejado a los mensajes SMS cómo líderes absolutos  de las comunicaciones de empresas como bancos,  empresas de transporte público, empresas de telecomunicaciones , compañías de seguros, hospitales ,otras instituciones públicas y un largo etcétera las cuales han adoptado los mensajes SMS como método para enviar notificaciones, confirmar transacciones, recordar citas, etc.

Pulsando en cualquiera de las tres opciones de este submenú automáticamente se enviaran   un SMS al número que se defina ante las siguientes circunstancias:

  • Corte de suministro de corriente alterna mediante la el suministro de tensión externa al terminal ( opción “Cortes de electricidad”)
  • Aperturas o  cierres de la puerta   ocultando el sensor de presencia(opción “Aperturas puerta”)
  • Al iniciar por primera vez la aplicación Seguricasa (opción “Al iniciar esta app”).

Avisos por e-mail.

Estar dado de alta en una cuenta de correo electrónico, hoy en día es una realidad pues todos los usuarios de la red disponen de una dirección de correo electrónico y lo utilizan diariamente.

En la actualidad, el uso del correo electrónico, se puede dividir en diferentes ámbitos como académico, laboral y personal, por lo que es muy interesante  también poder avisar  por e-mail ante cualquier evento de acceso  o anomalía en el suministro de corriente alterna desde el Core de esta aplicación.

Los avisos por e-mail en esta aplicación son personalizables mediante esta sección:

Clicando en cualquiera de las tres opciones del submenú de avisos por  e-mail, automáticamente se enviaran   un email a la cuenta de correo electrónico que se defina ante las siguientes circunstancias:

  • Corte de suministro de corriente alterna mediante la el suministro de tensión externa al terminal (opción “Cortes de electricidad”).
  • Aperturas o cierres de la puerta ocultando el sensor de presencia (opción “Aperturas puerta”).
  • Al iniciar por primera vez la aplicación Seguricasa (opción “Al iniciar esta app”).

Número de teléfono para envíos SMS

Complementando el submenú de avisos por SMS ’s se incluye esta sección, donde   se definirá el número de teléfono al que se deseen dirigir los mensajes de texto.

Tenemos que definir sobre todo el número del Teléfono hacia el que quieren dirigirán los SMS ‘s ante los eventos que se deseen auditar chequeados en   el submenú de avisos por sms’s.Opcionalmente,   también se puede asignar una cadena de texto en la opción Usuario que nos permita por ejemplo identificar el número de teléfono que hayamos asignado.

Es interesante destacar que si no informamos del número de teléfono destinatario de los SMS ‘s y clicamos alguna opción de SMS, nos saltara un error de número no definido.Si introducimos el numero o el nombre de usuario en esta sección, para volver a la pantalla principal, pulsar el botón volver del terminal o simplemente pulsa el botón cerrar de esta pantalla.

Correo electrónico destino

Complementando el submenú de avisos por mail, se incluye esta sección donde   se definirá la cuenta de correo electrónico al que se deseen dirigir los mails.

Tenemos que definir el correo electrónico destino hacia el que quieren dirigirán las e-mail ante los eventos que se deseen auditar chequeados en   el submenú de avisos por e-mail

Clicaremos en la copión E-mail y sobre la caja de texto cumplimentaremos el destinatario donde se dirigirán el e-mail ante los eventos que se deseen auditar chequeados en   el submenú de avisos por e-mail.

Es interesante destacar que si no informamos de la cuenta de correo y clicamos alguna opción de envíos de correos, nos saltara un error de mail no definido.

Para volver a la pantalla, el botón volver del terminal o simplemente pulsa el botón cerrar de esta pantalla.

Usuario Gmail para envíos

Complementando el submenú de avisos por mail, en esta sección   se definirá la cuenta de correo electrónico de Gmail desde donde se enviaran los mails.

Obviamente se podría haber definido otro tipo de servidor  de correo saliente, pero  por simplicidad dado que los usuarios de Android están obligados a tener una cuenta vinculada a una dirección de correo de Gmail para instalar nuevas aplicaciones en su terminal , este es el  candidato ideal como  servicio de envió de e-mails.

Dada la facilidad de envíos de correos electrónicos ante las circunstancias definidas, tenemos que definir el correo electrónico origen desde donde se dirigirán las e-mail ante los eventos que se deseen auditar chequeados en   el submenú de avisos por e-mail

La cuenta de Gmail pues se cumplimentara en la opción “cuenta” mediante el formato establecido completo (es decir con el formato [email protected]).

Para volver a la pantalla principal, basta pulsar el botón volver del terminal, o simplemente pulsar el botón cerrar de esta pantalla.

Dado que usaremos la cuenta de Gmail, para poder enviar correos desde esta cuenta, necesitamos cumplimentar en el apartado “Clave” la password de la cuenta de Gmail.

Como vemos en la pantalla anterior al cumplimentar la password de la cuenta de Gmail se ocultara su contenido tanto cuando estamos cumplimentándolo como cuando los revisamos pudiéndolo actualizar o eliminar en cualquier momento desde esta opción.

Es interesante destacar que si no informamos de la cuenta de correo y clicamos alguna opción de envíos de correos, nos saltara un error de mail no definido.

Para volver a la pantalla principal   pulsar el botón volver del terminal o simplemente pulsa el botón cerrar de esta pantalla.

Fichero de log

Es importante destacar que   si se desea almacenar las notificaciones de SMS o e-mail, el terminal debería contar al menos con 128MB de espacio en la SD externa para almacenamiento de logs.

Si deseamos registrar los logs de aviso por email o por SMS, simplemente necesitamos apuntar en el apartado “Carpeta” el nombre del fichero que deseamos usar para registrar todos estos eventos en el root de la microsd.

Para volver a la pantalla principal   pulsar el botón volver del terminal o simplemente pulsa el botón cerrar de esta pantalla.

 

En el siguiente vídeo  podemos ver  mas claramente el funcionamiento de todas estas opciones comentadas;

 

Alarma con estación meteorológica

veremos como con un nodeMCU podemos monitorizar la temp y humedad de la sala y enviarla a Cayenne para después poderlo consultar cuando lo necesitemos


También decidió utilizar un servidor MQTT para subir esta información en la web por lo que se puede desde cualquier lugar, tener un vistazo a la información meteorológica captada por este prototipo.

Elementos del montaje:

  1. nodeMCU (regulador Micro,  versión 0.9)
  2. Pantalla LCD – 16 x 2
  3. Botones – 3
  4. Sensor de temperatura DHT11
  5. Timbre o zumbador
  6. Placa de prototipos tamaño  mini
  7. Cables de puente
  8. Resistencia de 1000 Ω – 3
  9. Caja de madera para montar todas las cosas dentro.

Asignación de pines y planificación

Bien, así que vamos a hablar acerca de cómo tenía que distribuir los pasadores entre todos los componentes.

La pantalla LCD

La pantalla LCD,  necesita al menos 6 pines de I/O interfaz con el microcontrolador. Puede darse como sigue: Habilitar, register select, D04, D05, D06 D07.

  • Enable – pin I/O digital 0
  • Seleccione Registro – pin I/O digital 1
  • D04 – pin I/O digital 2
  • D05 – pin I/O digital 3
  • D06 – pin I/O digital 4
  • D07 – pin I/O digital 5

Los botones

Hay tres botones que vamos a usar, por lo queo bviamente  necesitaríamos tres pins de I/O digitales,

  • LeftButton – pin I/O digital 6
  • CenterButton – pin I/O digital 7
  • RightButton – pin I/O digital 8

El zumbador

El puede ser conectado al pin I/O digital 9.

El sensor de temperatura DHT11

Este sensor tiene un pin de salida y sigue para el pin de I/O digital 10

 

Ensamblaje

En una caja de madera ser practican agujeros para el lcd  y lo botones y entonces es hora de montar todo dentro de esa caja.

  1. Creo que tenemos que empezar con los botones. Usé un palito de helado estrecho para hacer una base para los botones.
  2. Luego tomar el nodeMCU y las placa de prototipos y pegarloo a la base de la caja con cinta de doble cara.
  3. Entonces conectar los botones a los pines de I/O digitales apropiados.
  4. En tercer lugar, colocar  la pantalla LCD y luego agarrarla bien a la caja con algunas cintas desde el interior. .
  5. Hacer las conexiones de la pantalla LCD.
  6. Luego conectar el timbre o buzzer en el interior de la caja con cinta de doble cara y conectar su terminal positivo al pin digital 9
  7. El sensor DHT11 tiene tres piness: 5v, gnd y la salida. Por lo tanto el pin de salida irá al pin digital 10 de la nodeMCU . 5v y tierra son obvias dónde deben ir.
  8. También para agregar, DHT11 es lo único que se quedará fuera de la caja para detectar la temperatura exterior. .

 

El código

El código qeu ha escrito Techovator0819      es cerca de 450 líneas de longitud. y cuenta  con  algunas bibliotecas importantes que se necesitan para descargar  asi que lo primero es asegúrarse de tener el IDE de Arduino instalado asi como tener los drivers del  esp8266 instaladas también. Si no lo ha hecho, haga clic aquí.

El primer paso antes de ver  el código, es entender la funcionalidad de nuestro dispositivo y el código en consecuencia:

  • Nestro WB(weather box)  accede a internet y recupera la información de tiempo apropiado a través de una llamada a la API.
  • También  tomara  la temperatura del medio ambiente  con un sensor propio y enviara esa información a un corredor de MQTT.
  • También podría mantener alarmas y temporizadores para usted.
  • También es capaz de mostrar hora y fecha.

Todo , esto significa que necesitamos integrar todas estas funciones bajo un título o código.

¿Cuáles son las bibliotecas que necesitamos?

  1. Librería LiquidCrystal . Como estamos usando una pantalla LCD como la principal interfaz entre usted y el NodeMCU, esta biblioteca es indispensable. Paranuestra comodidad, esta biblioteca, por defecto, es una biblioteca integrada en el IDE de Arduino.
  2. Biblioteca de ESP8266WiFi . Esta biblioteca permite el ESP8266 conectar con el Wifi y tener acceso a internet. Esta librería viene en un paquete que debe descargar durante la instalación del ESP8266 en el administrador de la placa.
  3. Biblioteca de ArduinoJson . Cuando se llama a la API, los datos que usted recibirá estaran en formato JSON (JavaScript Object Notation). Así que si quiere convertirlo a un formato utilizable, necesita analizarlo. Y la biblioteca de ArduinoJson lo hace por nosotros.
  4. Biblioteca para el sensor DHT11.
  5. Biblioteca en tiempo de. Para mantener a nuestro tiempo. Las funciones de biblioteca se enumeran aquí.
  6. Biblioteca de TimeAlarms . Se utiliza para que nos establezcan alarmas y temporizadores. Las funciones de biblioteca se enumeran aquí.

Las dos últimas bibliotecas deben utilizarse juntos. Puede usar la biblioteca en tiempo de forma independiente pero no de la biblioteca de TimeAlarms.


La llamada de API

 

The API Call

 

 

 

 

Lo más importante es una llamada a la API es la API key. Estoy conectando a la página web openweathermap.org para obtener toda la información de tiempo. Así que hay que seguir el procedimiento para abrir una cuenta allí y obtener un API key y es absolutamente gratis. Para llamar a la API key,
El primer paso es conectarse al servidor.

En segundo lugar, usted necesita utilizar su API key en la URL.Usted deberá utilizar el método GET para recuperar los datos de la URL.

Para hacer los datos disponibles en un formato utilizable,necesita para luego almacenar los datos en una cadena.

Los datos que reciba serán en formato JSON. Así que hay que analizarlo.

Y luego, se almacenan la información deseada en algunas variables globales que se pueden utilizar en cualquier lugar en el código.

     El siguiente es un ejemplo de código  para demostrar cómo funciona. Esta parte básicamente declara las bibliotecas utilizadas, crea las variables y objetos de la biblioteca a consultar.

include <ArduinoJson.h>
#include <ESP8266WiFi.h>
String result; 
// la cadena en la que se almacenarán los datos después de la llamada a la API
char servername[]="api.openweathermap.org"; //mombre servidor
String APIKEY = "YOUR_API_KEY"; //el API key
String CityID = "1264527"; //el  ID de la ciudad

//Asignación de sus variables globales para almacenar la información meteorológica recibida
String Description;
String Place;
float Temperature;
float Humidity;
float w;
WiFiClient client; >

Código de configuración básica.

void setup()

{

// Ponga su código de configuración aquí, para ejecutar una vez:
Serial.begin(9600);
WiFi.begin(“your ssid”, “your password”);

//empieza  conexion WIFI
while(WiFi.status() != WL_CONNECTED)

{

// espera hasta que se establezca la conexión
Serial.print(“.”);
delay(500);
}
Serial.println(“Connectado!”);
Serial.println(WiFi.localIP());   //imprime direccion  IP
}<

Código para crear una función que obtiene los datos.

void weatherData(){

if (client.connect(servername, 80)) {

// inicia la conexión del cliente, comprueba la conexión
client.println(“GET /data/2.5/weather?id=”+CityID+”&units=metric&APPID=”+APIKEY);

//// llama a la api usando el método get antes de la URL. Nota: La URL utiliza la clave api.
Serial.println(“Server esta accesible”);
client.println();
}
else { //  si el servidor no esta disponible
Serial.println(“fallo de conexion  “); //mensaje de errorsi no esta conectado el cliente
Serial.println();
}
result = “”;

//Hace que la cadena nula de cualquier dato almacenado previamente para almacenar nuevos datos
while (client.available()) { //connected or data available
char c = client.read(); //gets byte from ethernet buffer
result = result+c;
}
Serial.println(result);
result.replace(“[“, ” “);

//Estoy enfrentando un error. Sólo para evitarlo, tengo que escribir esto
result.replace(“]”, ” “);

//y esto tambien.
client.stop(); //para  cliente
Serial.println(“Recieved”);

//Analiza la cadena llamada resultado

StaticJsonBuffer<1024> jbuff;

JsonObject &root = jbuff.parseObject(result);
if (!root.success())
{
Serial.println(“parseObject() failed”);
}

// almacena toda la información deseada en variables temporales.
String location = root[“name”];
float temperature = root[“main”][“temp”];
float humidity = root[“main”][“humidity”];
String description = root[“weather”][“description”];
float wind = root[“wind”][“speed”];

//Transfiere toda la información de las variables temporales a variables globales a las //que puede acceder en cualquier parte del código.
Place = location;
Temperature = temperature;
Humidity = humidity;
w = wind * 3.6;
Description = description;
}

La función de bucle para mostrar todo lo que te quieren en el monitor serie.

void loop() {

weatherData(); //Llama a la función que hemos discutido anteriormente
Serial.println(Temperature);
Serial.println(Place);
Serial.print(“H: “);
Serial.println(Humidity);
Serial.print(w);
Serial.println(” kmph”);
Serial.println(Description);
delay(8000); //retardo de  8 segundos
}

Como vemos  es un ejemplo básico de una llamada a la API y el análisis de datos JSON.

 

MQTT cliente y agente

 

MQTT Client and Broker

 

 

Como hemos visto en este blog el autor h aoptado  por el frameworl Cayyene de MyDevices para salvar la informacion procedente del sensor DHT11

one.jpg

 

 

two.jpg

 

 

 

 

four.jpg

 

 

five.jpg

 

 

Como vemos va  subiendo nuestros datos de los sensores a un corredor de MQTT en internet por lo que podemos ver desde cualquier lugar.
Pesonalmente pienso que el tablero de instrumentos del Cayenne es el más conveniente así queno me sorprende que el autor lo hay usado
Resumidamente esto son los pasos  para usar el servicio
  • En primer lugar, debe crear una cuenta.
  • Después de haber conectado la placa a Cayena se le dirigirá automáticamente a la consola donde se pueden utilizar los widgets personalizados disponibles.
  • Asegúrese de especificar correctamente el canal y corresponden a ese canal para enviar datos en el código.
  • Después de que hayas hecho eso, cree un nuevo proyecto y arrastrar y soltar widgets como de sus dispositivos.
  • El siguiente es un código de ejemplo para que comprendas cómo Protocolo MQTT. También utilizaremos la biblioteca Cayena-MQTT-ESP8266 para hacer las cosas mucho más fácil para nosotros.
    <#include 
    
    char ssid[] = "ssid";
    char wifiPassword[] = "wifiPassword";
    
    char username[] = "MQTT_USERNAME";
    
    char password[] = "MQTT_PASSWORD";
    char clientID[] = "CLIENT_ID";
    
    void setup() {
    
      Serial.begin(9600);
      Cayenne.begin(username, password, clientID, ssid, wifiPassword);
    }
    
    void loop() {
    
     Cayenne.loop(); //this function must be called regularly to keep the connection stable
      float sensorInfo = analogRead(A0);
      Cayenne.virtualWrite(0, sensorInfo); //virtualWrite(channel, data) is function with two parameters. Channel - you want to send the data to and second parameter is the data itself.
    }
  • Después de eso, usted será capaz de enviar y recibir datos sin problemas. Para este , se ha usado sólo dos widgets icono es decir ‘temperatura’ y ‘humedad’.
  • Después de crear una cuenta, haga clic en ‘Add New’.
  • A continuación, haga clic en ‘Dispositivo/Widget’Haga clic en “Traiga su propia cosa”, que es en la parte inferior.Una nueva página aparecerá indicando su nombre de usuario MQTT, contraseña y el ID de cliente que son únicas para usted. Estos se aplicarán en el código para identificar el dispositivo.

Estructura del código final

La longitud total del código es alrededor de 550 líneas.

El código está dividido en dos secciones. Una PageDisplay y otra DecMaker (abreviatura de decisiones). Cada vez que usted pulsa cualquier botón, basado en que (derecha o izquierda), la pantalla mostrará esa página. Cuando en página y el centerButton, el código se moverá a la DecMaker. Dentro de la función DecMaker y basado en qué página estaba finalmente abierta, ejecutará las acciones correspondientes. Puede recibir datos meteorológicos, sensores, alarmas y temporizadores.

Las páginas se muestran según los modos. Los modos son cuatro. Pueden ser,

  1. Inicio modo: para obtener los datos meteorológicos y visualizarlos. Así como percibir el entorno.
  2. Modo set timer – establecer temporizadores para usted
  3. Modo de programar la alarma – establecer alarmas para que usted
  4. Panel de control – cuando tu no en cualquiera de los modos, prefiere podría quedarse en el tablero de instrumentos.

A continuación, vamos a hablar sobre el sketch principal 

Paso 9: El código principal

El siguiente es el código principal.

Para descargar el código, haga clic aquí.

LiquidCrystal lcd(16, 5, 4, 0, 2, 14);
#define rightButton 13
#define centerButton 15
#define leftButton 12
#define buzz 3
int page = 1;
byte leftArrow[8]
{ B00000,
 B00010,
 B00110,
 B01110,
 B11110,
 B01110,
 B00110,
 B00010
};
byte rightArrow[8]{
 B00000,
 B01000,
 B01100,
 B01110,
 B01111,
 B01110,
 B01100,
 B01000
};
byte line[8]
 { B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110
};
String result;
char servername[]="api.openweathermap.org";
String APIKEY = "Your Api key";
String CityID = "Your city ID";</p><p>String Description;<br>String Place;
float Temperature;
float Humidity;
float w;
WiFiClient client;
dht DHT;#define pin 1
int set=1; // for configuring the alarm
int a, b, c; // used to denote the hour, minute and second while setting an alarm</p>
char username[] = "MQTT_username";<br>char password[] = "MQTT_password";
char clientID[] = "Client ID";

void setup() {
 // put your setup code here, to run once:
 Serial.begin(9600);
 WiFi.begin("ssid", "password");
 lcd.print("Weather box");
 delay(2000);
 lcd.clear();
 if (WiFi.status() == WL_CONNECTED){
 Cayenne.begin(username, password, clientID);
 lcd.print("Connected!");
 delay(3000);
 lcd.clear();
 Serial.println(WiFi.localIP());
 } else {
 lcd.print("Not conn");
 delay(3500);
 }
 lcd.clear();
 lcd.begin(16, 2);
 lcd.createChar(0, leftArrow);
 lcd.createChar(1, rightArrow);
 lcd.createChar(3, line);
 
 pinMode(rightButton, INPUT);
 pinMode(centerButton, INPUT);
 pinMode(leftButton, INPUT);
 pinMode(buzz, OUTPUT);
 digitalWrite(buzz, LOW);
 
 setTime(15, 12, 50, 25, 5, 17);
 delay(1000);
}
int val = 1;
int x,y; //for setting timer minutes and seconds
int trig; //for coniguring the timer
int counter = 0;
void loop() {
 // put your main code here, to run repeatedly:
 while(val == 1){
 if (digitalRead(leftButton)==HIGH)
 { val = 0;}
 lcd.clear();
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 lcd.write(byte(3));
 lcd.print("WiFi:");
 if (WiFi.status() == WL_CONNECTED){
 lcd.print("conn"); } 
 else {
 lcd.print("Nconn");} 
 lcd.setCursor(0, 1);
 lcd.write(byte(0));
 lcd.print("Menu");
 lcd.write(byte(3));
 
 if (digitalRead(centerButton)){
 DHT.read11(pin);
 lcd.print("T:");
 int a = DHT.temperature; //converting float to int
 lcd.print(a);
 int b = DHT.humidity; // converting float to int
 lcd.print(" H:");
 lcd.print(b);
 delay(3000);
 }else {
 date();
 }
 counter++;
 if (counter == 60){
 if (WiFi.status()==WL_CONNECTED){
 Cayenne.loop(); 
 DHT.read11(pin); 
 Cayenne.virtualWrite(1, DHT.temperature);
 Cayenne.virtualWrite(2, DHT.humidity); 
 } 
 counter = 0;
 }
 delay(50);
 }
 while (val != 1){
 delay(200);
 pageDisplay();
 if (digitalRead(rightButton)){
 if (page == 4){
 page = page;
 } else {
 page++;
 }
 pageDisplay();
 
 } else if (digitalRead(leftButton)){
 if (page == 1){
 page = page;
 } else {
 page--;
 }
 pageDisplay();
 
 } else if (digitalRead(centerButton)== HIGH){
 decMaker();
 }
 }
}
void pageDisplay()
{ switch(page){
 case 1:
 lcd.clear();
 lcd.setCursor(6, 0);
 lcd.print("Home");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 2:
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Set Timer");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 3: 
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Set Alarm");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 4:
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Dash Board");
 break;
 default:
 lcd.clear();
 lcd.print("Error 002");
 break;
 }
}
void date(){
 lcd.print(day());
 lcd.print(" ");
 int a = month();
 switch(a){
 case 1:
 lcd.print("Jan");
 break;
 case 2:
 lcd.print("Feb");
 break;
 case 3:
 lcd.print("Mar");
 break;
 case 4:
 lcd.print("Apr");
 break;
 case 5:
 lcd.print("May");
 break;
 case 6:
 lcd.print("Jun");
 break;
 case 7:
 lcd.print("Jul");
 break;
 case 8:
 lcd.print("Aug");
 break;
 case 9: 
 lcd.print("Sep");
 break;
 case 10:
 lcd.print("Oct");
 break;
 case 11:
 lcd.print("Nov");
 break;
 case 12:
 lcd.print("Dec");
 break;
 default:
 lcd.print("005");
 }
 if (day()<10){
 lcd.print(" ");
 }
 lcd.print(year());
 }
void decMaker(){
 switch(page){
 case 1:
 lcd.clear();
 lcd.print(". . .");
 weatherData(); 
 lcd.clear();
 while (digitalRead(leftButton) == LOW){
 weatherData();
 digitalRead(leftButton);
 lcd.setCursor(6, 0);
 lcd.print("IST:");
 lcd.setCursor(5, 1);
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 delay(3000);
 lcd.clear();
 lcd.print("Wthr in ");
 lcd.print(Place);
 lcd.setCursor(0, 1);
 lcd.print("T:");
 lcd.print(Temperature);
 lcd.setCursor(9, 1);
 lcd.print("H:");
 lcd.print(Humidity);
 delay(3000);
 lcd.clear();
 digitalRead(leftButton);
 lcd.print("Wind: ");
 lcd.print(w);
 lcd.print("kmph");
 lcd.setCursor(0, 1);
 lcd.print(Description);
 delay(2000);
 lcd.clear();
 DHT.read11(pin);
 lcd.print("Room: ");
 lcd.setCursor(0, 1);
 lcd.print("T:");
 lcd.print(DHT.temperature);
 lcd.setCursor(9, 1);
 lcd.print("H:");
 lcd.print(DHT.humidity);
 delay(2000);
 lcd.clear();
 }
 lcd.begin(16, 2); // In my case the lcd doesn't work without this. But don't know why.
 break;
 case 2:
 setTimer();
 break;
 case 3:
 setAlarm();
 Serial.print("THREE");
 lcd.begin(16, 2);
 break;
 case 4:
 Serial.print("FOUR");
 val = 1;
 break;
 default:
 Serial.print("not a valid entry");
 lcd.clear();
 lcd.print("error 001");
 break;
 }
}
void weatherData()
{ if (client.connect(servername, 80)) 
{ //starts client connection, checks for connection
 client.println("GET /data/2.5/weather?id="+CityID+"&units=metric&APPID="+APIKEY);
 Serial.println("Server is accessable");
 client.println();
 } 
 else {
 Serial.println("connection failed"); //error message if no client connect
 Serial.println();
 }
 result = "";
 while (client.available()) { //connected or data available
 char c = client.read(); //gets byte from ethernet buffer
 result = result+c;
 }
 result.replace("[", " ");
 result.replace("]", " ");
 client.stop(); //stop client
 Serial.println("Recieved");
 
 StaticJsonBuffer<1024> jbuff;
 JsonObject &root = jbuff.parseObject(result);
 if (!root.success())
 {
 Serial.println("parseObject() failed");
 }
String location = root["name"];
 float temperature = root["main"]["temp"];
 float humidity = root["main"]["humidity"];
 String description = root["weather"]["description"];
 float wind = root["wind"]["speed"];
Place = location;
 Temperature = temperature;
 Humidity = humidity;
 w = wind * 3.6;
 Description = description;
}
void alarm()
{ Serial.println("Alarm activated");
 lcd.clear();
 lcd.print("Wake up, Lazy");
 for (int i = 0; i <= 10; i++){
 digitalWrite(buzz, HIGH);
 delay(80);
 digitalWrite(buzz, LOW);
 delay(80);
 digitalWrite(buzz, HIGH);
 delay(80);
 digitalWrite(buzz, LOW);
 delay(800);
 }
 digitalWrite(buzz, LOW);
 set = 0;
}
void setAlarm(){
 set = 1;
 int pos = 1;
 a, b, c = 0;
 repeat:
 //timeDisplay();
 lcd.clear(); 
 lcd.setCursor(0, 0); 
 lcd.print(a); 
 lcd.print(":");
 lcd.print(b); 
 lcd.print(":");
 lcd.print(c); 
 lcd.setCursor(0, 1);
 if (pos == 1){ lcd.print("hours");}
 else if (pos == 2){ lcd.print("minutes");}
 else if (pos == 3){lcd.print("seconds");}
 delay(200);
 if (digitalRead(leftButton)){//leftButton
 if (pos == 3)
 {pos = 1;}
 else 
 {pos++;}
 } else if (digitalRead(rightButton)){
 switch (pos){
 case 1:
 if (a == 23){ a = 0;}
 else {a++;}
 break;
 case 2:
 if (b == 59){ b = 0;}
 else {b++;}
 break;
 case 3:
 if (c == 59){ c = 0;}
 else {c++;}
 break;
 }
 } else if (digitalRead(centerButton)){
 confirmAlarm();
 } 
 if (set == 0){
 goto endIt;
 }
 goto repeat;
 endIt:
 Serial.println("Alarm executed successfully");
}

void confirmAlarm()
{ lcd.clear();
 Alarm.alarmOnce(a, b, c, alarm);
 up:
 lcd.setCursor(1, 0);
 lcd.print("Alarm Running");
 lcd.setCursor(3, 1);
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 lcd.print(":");
 lcd.print(second());
 Alarm.delay(200);
 delay(1);
 lcd.clear();
 //timeDisplay();
 Serial.println("...");
 if (set == 0||digitalRead(centerButton)){goto down;}
 goto up;
 down:
 set = 0;
}
void setTimer(){
 int cur = 1;
 x, y = 0;
 trig = 1;
 roof:
 lcd.clear();
 lcd.setCursor(2, 0);
 lcd.print("minutes: ");
 lcd.print(x);
 lcd.setCursor(2, 1);
 lcd.print("seconds: ");
 lcd.print(y);
 if (cur == true){lcd.setCursor(0, 0); lcd.write(byte(1));}
 else {lcd.setCursor(0, 1); lcd.write(byte(1));}
 delay(200);
 if (digitalRead(rightButton)){
 switch(cur){
 case 1:
 if (x == 20){x=0;}
 else {x++;}
 break;
 case 2:
 if (y == 59){y = 0;}
 else {y++;}
 break;
 default: 
 lcd.clear();
 lcd.print("ERROR 003");
 }
 } else if (digitalRead(leftButton)){
 if (cur == 2){cur = 1;}
 else {cur++;}
 }
 if (digitalRead(centerButton)){
 confirmTimer();
 } else {
 goto roof;
 }
 trig = 0;
 lcd.setCursor(0, 0);
 lcd.print("Timer successful");
 delay(2000);
 lcd.clear();
}</p><p>void confirmTimer(){<br> int z;
 z = x*60 + y;
 Alarm.timerOnce(z, timer);
 lcd.clear();
 
 sky:
 Serial.println(".");
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("CountDown Timer");
 lcd.setCursor(7, 1);
 lcd.print(z);
 z--;
 Alarm.delay(999);
 delay(1);
 if (trig == 0||digitalRead(centerButton)==HIGH){goto ground;}
 goto sky;
 ground:
 trig = 0;
 lcd.clear();
}
void timer(){
 Serial.println("Boom, timer is on!! :)");
 lcd.clear();
 lcd.setCursor(3, 0);
 lcd.print("Time's Up!");
 for (int i = 0; i<=10; i++){
 for (int j = 0; j<=3; j++){
 digitalWrite(buzz, HIGH);
 delay(70);
 digitalWrite(buzz, LOW);
 delay(70);
 }
 delay(700);
 }
 trig = 0;
}

Mas información en http://www.instructables.com/id/IoT-Weather-Box-with-Custom-Alarms-Timers/