Watimetro con Esp8266


Éste proyecto se aprovecha de que los contadores modernos  inteligentes  incluyen en el frontal un LED que parpadea cada 1kW consumido, de modo que conectando un par de  cables a dicho LED y montando una pequeño circuito   basada en el módulo Wifi ESP8266, podemos medir con bastante precisión el consumo producido.

Obviamente  no es  legal abrir el contador  inteligente de nuestra vivienda para soldar un para de  cables al LED del watimetro, básicamente porque el equipo no nos pertence  ya que las compañías suministradoras  lo suelen  ofrecer en modo alquiler , pero debe saber que  éste tipo de contadores  también lo podemos instalar en nustra vivienda  o local   en el cuadro de distribución de corriente alterna en un carril DIN, normalmente a a la salida del magneto-térmico general  que alimenta a todos los circuitos que haya instalados en  nuestra vivienda.

Por ejemplo el modulo  XCSOURCE® Medidor Energía KWH Kilovatio Hora LCD CA 50Hz Fase Simple Riel DIN 230V BI04   se puede comprar por unos 14€ en  Amazon siendo la instalación de riel DIN estándar de 35mm, y ademas cumpliendo con el estándar DIN EN 50023   y con el ancho del poste sencillo (módulo de 17.5mm), que cumple con el estándar DIN 43881.

El modulo en su configuración Estándar  tiene una ventana de visualización de 7+1 dígitos  (9999999.1kwh) mediante un LCD blanco y negro así, como también una salida con un led verde para el estado de suministro de energía y Rojo para la señal de impulso de energía  como el de los contadores «inteligentes».

Además , no necesitamos desmontar el modulo para capturar la salida del led de consumo pues tiene una salida SO Estándar donde  podemos conectar el circuito qeu vamos   a ver (respetando la polaridad)

Realmente como vemos en el esquema de conexiones de watimetro este  se alimenta por los terminales  1 y 4 (terminales de arriba)   y su salida ira a lo terminales 3 y 6  que conectaremos a la carga ( es decir el resto de circuitos de nuestro vivienda o local) , y resaltar que precisamente en lo terminales 20 (+) y 21(-)  tenemos la salida standar  SO   de pulsos de 50ms por 1wh

 

El circuito final que el autor propone para mejorar la visualizacion de watimetro  , cuenta de los siguiente elementos:

  • De  un ESP8266-12E como corazón del diseño
  • Una  pantalla OLED
  • Una conexión para programación via conversion usb-serie
  • Una fuente de almentacion de 3.3V
  • Un  circuito de  entrada procedente de la señal SO del watimetro
  • Una entrada adicional opcional para medir consumos individuales de una carga sin watimetro exterior

 

El circuito propuesto es el siguiente:

 

.

 

Hardware

  • ESP8266-12E
  • ACS712 Current Sensor
  • 0.96″ OLED Display
  • BT136 Triac
  • MOC3021 Opto-triac
  • MCT2E
  • LM11173.3V LDO Regulator
  • 5V SMPS Module

 

Software

 

Y a continuación el código fuente  Arduino  que deberíamos grabar en el el ESP8266

 

Codigo Arduino

/***********************************************************************************/
/* This is an simple application to illustrate IoT Home Automation. /
/ This is an example for our Monochrome OLEDs based on SSD1306 drivers /
/ Pick one up today in the adafruit shop! /
/ ——> http://www.adafruit.com/category/63_98 /
/ This example is for a 128×64 size display using I2C to communicate /
/ 3 pins are required to interface (2 I2C and one reset) /
/ Adafruit invests time and resources providing this open source code, /
/ please support Adafruit and open-source hardware by purchasing /
/ products from Adafruit! /
/ Written by Limor Fried/Ladyada for Adafruit Industries. /
/ BSD license, check license.txt for more information /
/ All text above, and the splash screen must be included in any redistribution /
/************************************************************************************/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h>
#include / Local DNS Server used for redirecting all requests to the configuration portal /
#include / Local WebServer used to serve the configuration portal /
#include <WiFiManager.h> / https://github.com/tzapu/WiFiManager WiFi Configuration Magic */

#define VOLTAGE_DIVIDER 10.0f
#define REF_VOLT 0.9f
#define RESOLUTION 1024
#define WATTS_THRES 25.0
#define AC_VOLT 230.0
#define VPP_RMS 0.3535
#define BASE_PRICE 125
#define UNITS_UPL_FREQ 30 /* In 2Sec /
#define THEFT_THRESHOLD 15
#define VperAmp 0.1f / See AC712 Datasheet */
#define TRUE 1
#define FALSE 0
#define OLED_RESET 4
#define SSD1306_LCDHEIGHT 64
Adafruit_SSD1306 display(OLED_RESET);

const char* ssid = «IotEM»; /* Device SSID /
String apiKey = «GBH1K3293KFNO8WY»; / Replace with your thingspeak API key /
const char server = «api.thingspeak.com»;

/* Create an instance of the client */
WiFiClient client;
WiFiManager wifiManager;

/* Port Pin Definition */
int InVolPin = A0;
int LoadPin = 14;
int PulsePin = 12;
struct {
unsigned char LdCon: 1;
unsigned char Units:1;
} Flags;

double Voltage, VRMS, AmpsRMS, Watts;
volatile byte interruptCounter = 0;
int Pulses = 0;
int PrevUnits = 0;
int PrevMUnits = 0;
int Units, MeasUnits;

#if (SSD1306_LCDHEIGHT != 64)
#error(«Height incorrect, please fix Adafruit_SSD1306.h!»);
#endif

#define LoadOn() digitalWrite(LoadPin, 1)
#define LoadOff() digitalWrite(LoadPin, 0);

static void DispInfo (void);
static void DispStat (void);
static void SendUnits (void);
static void SendTheftInfo (void) ;
static void SendSMS (int8_t Type);
static void DisplayUnits(void);
static void TheftOccurred (void);

ADC_MODE(ADC_TOUT);

void setup(void) {
Wire.begin(0,2);
Serial.begin(9600);
pinMode(InVolPin, INPUT);
pinMode(LoadPin, OUTPUT);
pinMode(PulsePin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PulsePin), handleInterrupt, FALLING);
Flags.LdCon = FALSE;

display.display();
delay(500);
LoadOn();
ConnectAP();
DisplayUnits();
}

void loop() {
static unsigned long i = 0, j = 0, l = 0;
VRMS = getVPP() * VPP_RMS;
AmpsRMS = VRMS / VperAmp;
Watts = AmpsRMS * AC_VOLT;
if (Watts >= WATTS_THRES)
Flags.LdCon = TRUE;
else
Flags.LdCon = FALSE;
#ifdef DEBUG
Serial.print(Watts);
Serial.print(AmpsRMS);
Serial.println(» Amps RMS»);
#endif
if (Flags.LdCon) {
#ifdef DEBUG
Serial.println(MeasUnits);
Serial.println(Pulses);
Serial.println(l);
#endif
if (MeasUnits == Pulses)
if(++l > THEFT_THRESHOLD) TheftOccurred();
}
if (i++ >= UNITS_UPL_FREQ) { /* End of Day /
Units = Pulses – PrevUnits;
PrevUnits = Pulses;
SendUnits();
i = 0;
}
if (interruptCounter > 0) {
interruptCounter–;
Pulses++;
MeasUnits = Pulses;
l = 0;
#ifdef DEBUG
Serial.print(«Total Units: «);
Serial.println(Pulses);
#endif
DisplayUnits();
}
delay(1000);
}
void handleInterrupt() {
interruptCounter++;
}
static void TheftOccurred(void) {
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(3);
display.setTextColor(WHITE);
display.print(«!THEFT!»);
display.display();
SendTheftInfo();
delay(5000);
LoadOff();
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print(» Contact CESCOM»);
display.display();
delay(2000);
ESP.deepSleep(0, WAKE_RF_DEFAULT); / RIP /
for(;;);
}
void DisplayUnits(void) {
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(3);
display.setTextColor(WHITE);
display.print(Pulses);
display.setCursor(90,13);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print(«Kwh»);
display.display();
}
void ConnectAP(void) {
#ifdef DEBUG
Serial.print(«Connecting Wifi: «);
Serial.println(ssid);
#endif
display.clearDisplay(); / For Display /
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(«Connecting»);
display.display();
wifiManager.autoConnect(ssid);
#ifdef DEBUG
Serial.println(«»);
Serial.println(«WiFi connected»);
Serial.println(«IP address: «);
IPAddress ip = WiFi.localIP();
Serial.println(ip);
#endif
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(«Connected»);
display.display();
delay(1000);
}
void SendTheftInfo(void) {
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +=»&field2=»;
postStr += String(1);
postStr += «\r\n\r\n»;
client.print(«POST /update HTTP/1.1\n»);
client.print(«Host: api.thingspeak.com\n»);
client.print(«Connection: close\n»);
client.print(«X-THINGSPEAKAPIKEY: «+apiKey+»\n»);
client.print(«Content-Type: application/x-www-form-urlencoded\n»);
client.print(«Content-Length: «);
client.print(postStr.length());
client.print(«\n\n»);
client.print(postStr);
}
client.stop();
}
void SendUnits(void) {
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +=»&field1=»;
postStr += String(Units);
postStr += «\r\n\r\n»;
client.print(«POST /update HTTP/1.1\n»);
client.print(«Host: api.thingspeak.com\n»);
client.print(«Connection: close\n»);
client.print(«X-THINGSPEAKAPIKEY: «+apiKey+»\n»);
client.print(«Content-Type: application/x-www-form-urlencoded\n»);
client.print(«Content-Length: «);
client.print(postStr.length());
client.print(«\n\n»);
client.print(postStr);
}
client.stop();
}
float getVPP() {
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
int minValue = 1024; // store min value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(InVolPin);
// see if you have a new maxValue
if (readValue > maxValue)
{
/record the maximum sensor value/
maxValue = readValue;
}
if (readValue < minValue)
{
/record the minimum sensor value*/
minValue = readValue;
}
}
// Subtract min from max
result = (((maxValue – minValue) * REF_VOLT) / RESOLUTION) * VOLTAGE_DIVIDER ;
return result;
}

 

Y por cierto para los incredulos en el siguiente video podemos ver el circuito en funcionamiento

 

LLegan las plataformas de inventores


En los últimos años hemos visto evolucionar la wikinomic hacia el crowdfunding, es decir, financiamiento colectivo. Este concepto ha llevado a plataformas como Kickstarter  a generar, tan sólo en 2012, $119 millones de dólares que se han ido directamente a financiar proyectos creados y apoyados por la comunidad. 

El problema no resuelto de Kickstarter es que sólo financia proyectos que requieren capital pero no llega a su revisión, seguimiento o lanzamiento de los mismos. Ese reto es justo el que Ben Kaufam se planteó para crear Quirky. ¿Cómo llegar a los inventores reales y no a los emprendedores únicamente? La respuestaes desarrollo social de productos (SPD o lo que es lo mismo  social product development ). 

 

Quirky.com   es una nueva plataforma  de plataformas globales que  en efecto pone en contacto a personas que sueñan con llevar  a la realidad física  una idea  con otras que tienen el conocimiento técnico, los medios, el expertise,  etc o en definitiva todo lo necesario (incluyendo capital humano y material)  para llevarlas a cabo  de  modo que  luego sea posible vender las creaciones resultantes a traves de su propia tienda online (quirky .com)

Precisamente es en este sitio  donde las personas pueden subir sus ideas e invenciones   de forma conceptual   y llegar al resto de la comunidad, así como a un equipo multidisciplinario de especialistas que involucra diseño, marketing, producción, ingeniería y viabilidad.

En conjunto, todos ayudan a la mejora del producto desde su aspecto, diseño de prototipos, análisis de mercado, modelo de negocio, branding, distribución y hasta la comercialización.

 

Por desgracia no todas las ideas valen ya que han de demostrar la necesidad ,por lo que entre todas las propuestas de cada semana se eligen las 10 mejores propuestas subidas a Quirky e inmediatamente se empieza a trabajar en ellas de  modo que puedan crear tres nuevos productos de consumo cada semana. Para ello, cada jueves se reúnen en una «idea debate» para escoger entre dos y cinco proyectos que desean apoyar. Si las ideas prueban que la necesidad existe y la gente desearía resolverlo, ellos lo fabrican y obviamente el autor  recibirá  un porcentaje de las ganancias de las ventas .

La idea por tanto es pues sencilla : si se facilita la producción a los inventores, entonces existirán millones de nuevas ideas pues permite focalizar a los inventores en la ideación dejando  todo los demás  a los profesionales, de los diseñadores e ingenieros que hacen posible que las cosas ocurran.

inventos.PNG

La invención se hace accesible gracias a tres brazos:

  • Tecnología
  • Comunidad
  • Equipo de expertos multidisciplinar

Quirky no es un modelo de producción sino de creación pues se basa en el supuesto de que las mejores ideas del mundo ( o al menos dentro de determinados sectores de consumo )   no están tanto en las compañías  como en las mentes de las personas pues realmente  todas las personas somos inventores por naturaleza.

Muy resumidamente el paso de la ideación a la puesta en el mercado comprende las siguientes fases:

  1.  La idea: Es el momento clave. Todas las personas podemos mejorar lo que existe o incluso crear una respuesta a una necesidad. Es el momento de creación.
  2.  Registro en la plataforma: Los inventores suben su idea contestando dos preguntas básicas: qué problema se está intentando solucionar y cómo intenta hacerlo. Para subir una idea se pagan 10 dólares, y en ese momento queda en manos de la comunidad.
  3.  Aceptación: La clave es mejorar una idea de negocio. Quirky incentiva a sus usuarios a proveer toda la retroalimentación necesaria para cada proyecto. Se seleccionan las mejores ideas y cada jueves se hace la evaluación de una decena de ellas. La comunidad de especialistas vota desde casa u oficina.
  4.  Preproducción: Inicia con la documentación e investigación; se analiza el mercado y pasa a la fase de diseño para posteriormente trabajar en el branding.  En esta fase, la comunidad también se involucra y gana dinero con su participación. A este modelo se le llama «influence»  un sistema de recompensas que mide la influencia de cada uno de los participantes y de acuerdo con su contribución se reparte el ingreso del producto creado.
  5.  Preventa: Para probar el éxito y la aceptación de un producto se lanza una campaña de preventa a un precio rebajado. Gracias a las unidades prevendidas se costea el proyecto.
  6.  Producción – manufactura: Si se logran las ventas mínimas requeridas, el producto se produce y lanza oficialmente, así empieza su proceso de expansión en el mercado (distribución).
  7.  Ventas – ganancias: Todos los beneficios obtenidos se repartirán entre todos aquellos que han participado e invertido en el proyecto.El modelo Quirky podría parecer fácil de replicar, pero hay algo que no podrá copiarse al 100%. Quirky combina un staff in-house de ingenieros, desarrolladores, diseñadores, mercadólogos y analistas de negocio que les apasionan los proyectos en lo que participan. Esto, se suma a una comunidad global que contribuye con ideas, sugerencias y nuevos proyectos, misma que ha «confiado en la plataforma» y está dispuesta a hacer dinero juntos. La confianza es difícil de construir; se gana, se demuestra, se construye con el tiempo y eso es lo que ha logrado Quirky.

 

Las ganancias de los productos que se comercialicen se repartirán entre el propio inventor, Quirky y los usuarios que ayudaran durante el proceso de diseño del producto.(el equipo de Quirky se reserva el 70% de los derechos del invento y el 30% que resta se distribuye a partes proporcionales entre todas las personas que han contribuido al mismo.)

En dos años que lleva funcionado este cruce entre red social y comercio electrónico, han salido a la venta ya 35 productos y hay otra treintena más en desarrollo.

 

 

Más informacion en https://www.quirky.com/