jueves, 20 de marzo de 2014

Systema de Control de Inyeccion por buen camino

Hola a todos.

Lo primero disculpad por no actualizar las entradas al blog desde hace tanto tiempo. La verdad es que he sigo trabajando en el proyecto, aunque diversos problemas con el envio de componentes me están retrasando.

De momento el sistema sigue manual, es decir, un potenciómetro y manualmente lo ajustamos (mi mujer sobre todo...), cuando detectamos inyección.

Bueno, quería enseñaros que el sistema funciona, y lo vamos a ver comparando con el año anterior. Tengamos en cuenta, que la famila ha aumentado, por lo que el consumo nocturno se ha incrementado un poco, pero aún así, fijaros:



Hace un més  más o menos instalé una seguna placa PV, "para que sobre" energia. Ya genero más de lo que consumo, así que estoy calentando el salón con el excedente......

He estado evaluando varias opciones para automatizar el ajuste, pero finalmente me he decantado por la buena, que es la que controla una resistencia variable con un arduino.

Aún así, si a alguien le sirve esta "prueba" de servomotor variable que usé para automatizar el mecanismo de forma analógica. Uso juguetes de los niños....


Ver video.

Los componentes que consumen energía de forma variable, son los que más fastidian a nuestra instalación, porque manualmente es complejo ir ajustando el potenciómetro.
Actualmente hay varios componentes que me "fastidian" el mecanismo manual, ya que no lo ajustamos por la excesiva molestia que supone.
- TV: Gasto variable, poco pero varía +-80w
- Plancha: Mira que es odiada, pero viendo que su consumo lejos de ser estable varía de 0 a 1500w....
- Microondas: Consumo +-2000w
- Lavadora: Aunque esté en agua fria, consume según la velocidad del motor, pero varía entre 200-800w
- Luces de casa: Casi despreciable, comparado con todo lo anterior.

Según mis cálculos, de 2,2 kw de media que estoy teniendo las últimas semanas podría dejarlo en 1,0k diários.

El código fuente del sistema lo tengo casi finiquitado, lo publicaré muy pronto.

Saludos!!

jueves, 30 de enero de 2014

Proyecto: Evitar Inyección con Arduino (IV)

Hola de Nuevo.

Si recordáis en entradas anteriores, vimos como medir el excedente de nuestra instalación fotovoltaica en red.

En esta entrada, vamos a trabajar en el control del excedente, es decir, como derivar el excedente a “algo” que nos resulte de utilidad. El objetivo de esto es:

1.- Los contadores nuevos digitales suman la inyección como si fuera consumo, por lo que da igual que no gastes, que te irá sumando

2.- Si inyectas, eres fácilmente localizable ya que el contador se chivará a la compañia. Compruebo que immersun inyecta por su sistema de gestión. Ver video

3.- Acumular excedente que puedas usar en otro momento. Puedes usar cargas resistivas, como calentador de agua o radiadores de resistencias.

Para que entendamos el problema, la cantidad de energía a derivar es variable, y muy variable, ya que varía por estos motivos:

1.- La generación es variable, en función de si hay nubes o la posición del sol, eso lo sabemos

2.- Electrodomésticos que enciendes y apagas

3.- Electrodomésticos cuyo consumo es variable: Lavadora, TV de plasma, frigorífico, etc

En nuestro objetivo, queremos que toda la parte excedentaria, la aprovechemos, es decir, las montañas verdes invertidas:

imageimage

 

El gráfico de la derecha nos da el consumo actual ajustado, que restando la producción, consumiríamos en realidad SOLO los picos naranja invertidos, frente al consumo de la parte superior que teníamos anteiormente:

Para el control del excedente usaremos un potenciómetro como este:

DSC05322DSC05323 

Un potenciómetro, varía el voltaje que se manda al calentador, permitiendo ajustar el consumo de dicha resistencia.

Alguno se preguntará porqué el potenciómetro es manual, y como lo controlará el arduino….. todo a su tiempo, lo explicaré más adelante.

El objetivo de esta prueba, es usar un potenciómetro barato, de 3 Euros comprado en china, como pieza clave para derivar. Las pruebas son impresionantes, puedo derivar incluso a nivel de watios. Os dejo aquí un video que muestra el funcionamiento. Ver video.

Ahora nos queda automatizar el tema, para ello necesito una resistencia variable, que ya tengo comprada (no me ha llegado), y un programilla que controle dicho potenciómetro.

Item picture   Hemos elegido una resistencia  que nos permite variar 100k en 100 pasos diferentes: X9C104P X9C104 DIP-8 Digital Potentiometer IC

 

Mis conocimientos de electrónica son limitados, por lo que igual alguien tiene claro que esto no se puede hacer…..  Pero creo que tiene sentido, voy a añadirle al potenciómetro digital esta resistencia variable, y controlarla con el arduino.

Próxima entrada: Proyecto finalizado.

martes, 14 de enero de 2014

Proyecto: Evitar inyección con Arduino (III)

Hola a todos. Lo primero desear un feliz año 2014 a todo el mundo. De momento, a mí me ha traido una nueva hija, Beatriz.

Vamos a continuar nuestro proyecto con dos pasos:

1- Prueba del prototipo con datos Reales

2.- Paso a circuito integrado.

 

Prueba del prototipo

Hasta ahora, el entorno donde he probado todo el proyecto ha sido una bombilla (led y normal) conectada a un portalamparas.

El test del prototipo consistirá en enganchar en la caja general el sensor, y contrastar los datos con el medidor de consumo OWL.

Allá vamos:

En la primera vemos que el consumo es “casi” el mismo que marca el arduino. La carga activa era una lavadora.

DSC05218

En esta, tengo un lavavajillas (limitado a 600w) y la misma lavadora.

DSC05210

El tiempo de muestreo del arduino es muy rápido, apenas 2 segundos, mientras el owl es de más de 20 segundos. Esto hace que se haga la media y no coincida todo al 100%. La fiabilidad del arduino es un poco mejor, creo yo…

Ahora viene una cosa importante. ¿DETECTA LA INYECCION A RED?

DSC05224  DSC05225

Vemos que sí, cuando immersun se activa, los watios pasan a ser negativos. Vemos que se está inyectando, por lo tanto FUNCIONA.

DSC05220 DSC05221 DSC05222

En todas estas capturas, vemos que aunque immersun está encendido, se sigue inyectando a red, poco, pero se inyecta. Este es el comportamiento que queremos arreglar con nuestro proyecto, siendo mucho más preciso.

Esta fase del proyecto, ha sido bastante exitosa, ciertamente me siento bastante bien.

Paso a circuito integrado

Pues lo siguiente es soldar el circuito a placa. Tampoco tiene mucho de importante, solo que nunca se comporta igual, por lo que habrá que probarlo otra vez.

El circuito es este:

circuito

Lo más complicado son las conexiones, que las he ido sacando de un reproductor DVD roto.

2014-01-12 09.07.32  DSC05290

Pues esta es la segunda parte.

Las primeras pruebas son buenas, pero hay que ajustarlo porque los numeros no son los mismos que antes. Lo esperaba, la verdad.

Para ajustar los datos, he creado un menu en el arduino, que permita ajustar los parámetros de entrada del arduino.

En las próximas semanas lo pongo, lo tengo ya casi terminado.

Saludos!!

domingo, 15 de diciembre de 2013

Proyecto: Evitar inyección con Arduino (II)

Hola Amigos, en la práctica de hoy, le daremos otra vuelta de tuerca más a nuestro proyecto.

En la entrada anterior vimos como medir la intensidad, y a partir de ahí calcular los Watios (suponiendo un voltaje de red de 230VA). Correcto?

Bueno, pues nuestro objetivo es no solo poder medir el voltaje de la red, sino también poder medir LA DIRECCION DE LA POTENCIA, es decir, si es de entrada o salida, y a partir de ahí, poner los mecanismos en marcha que eviten la inyección a red.

Nos ponemos manos a la obra, básicamente, vamos a duplicar el circuito que vimos anteriormente, pero midiendo esta vez el voltaje Alterno. Muchos os preguntareis, ¿esto es peligroso? Bueno, pues si lo medimos directamente, sí, pero vamos a reutilizar un cargador de movil, que genera energía alterna y continua. Este se encargará de pasar el voltaje de 220VA a 9VA. Luego dividimos dicho voltaje con varias resistencias para dejarlo en 5 VA.

Esto nos aislará del peligro de chispazo, y también nos permite adaptar la señal a algo medible por el arduino

 

2013-12-15 12.02.54 2013-12-08 11.28.50

 

 

Como resultado, tenemos

Sin carga: Podemos ver la señal de intensidad (la azul) estable.

image

Carga 110W: Vemos como fluctúa la intensidad.

image

Y ya si desplazamos los valores al eje de cero, tenemos algo muy bonito

 

image

 

Ahora viene lo interesante, chicos. Me surgen estas preguntas:

1.- ¿Como sé si estoy inyectando o no?

Si estoy inyectando, la intensidad apuntaría al lado contrario que el voltaje

2.- Porque los picos de corriente están “apuntando” a la misma curva del voltaje?

La potencia es positiva porque al multiplicar ambos valores da positivo. Si la intensidad fuera negativa, y el voltaje positivo en cada ciclo, detectamos inyección

3.- ¿porque son tan pequeños los valores de la intensidad?

La carga que tengo es de pocos watios, pero necesito mucha precisión, por lo que si amplio la señal más, cuando la carga sea grande se me irá de los valores soportados

 

Bueno, pues por simplificar mucho el tema, el voltaje y la intensidad se desplazan según la carga que tengamos en casa. Esto es, si son cargas “resistivas” o sea resistencias, las líneas serán similares, es decir, no habría desplazamiento en ellas.  Digamos que los picos de las ondas coincidirían.

En caso de que existan cargas no resistivas (motores de lavadoras, tubos fluorescentes…) se desplazarían ambas señales

Esto está muy bien explicado aquí: http://openenergymonitor.org/emon/buildingblocks/ac-power-introduction

Ejemplo de desplazamiento, con lavadora puesta:

image

Veis que se ven los picos más a la izquierda que antes.

El resultado, midiendo voltaje:

 

2013-12-15 12.03.11

 

El código fuente, lo voy a poner también. He seguido las recomendaciones de un seguidor que indicaba que para publicar un código debía escribirse muy bien que hace para que sea comprensible. Cierto es, así que lo he “maquetado” un poco. Aún no he terminado el proyecto, por lo que seguirá habiendo muchas cosas que cambiar y aclarar.

En todo caso, son bienvenidas todas las críticas constructivas, así que gracias Tex

 

#include <LiquidCrystal.h>
#include <LCDKeypad.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

const int currentPin = A1;
const int voltPin = A2;
const unsigned long sampleTime = 100000UL;                           // sample over 100ms, it is an exact number of cycles for both 50Hz and 60Hz mains
const unsigned long numSamples = 2500UL;                               // choose the number of samples to divide sampleTime exactly, but low enough for the ADC to keep up
const unsigned long sampleInterval = sampleTime/numSamples;  // the sampling interval, must be longer than then ADC conversion time

//Esta variable necesita ser ajustada en función al voltaje que te genere la placa. 2.5 voltios serían 514, pero siempre se pierde algo de voltaje en las resistencias
// TODO: Auto-Ajustarlo usando la media de una lista de tomas.
const int adc_zero = 507;                                                     // relative digital zero of the arudino input from ACS712 (could make this a variable and auto-adjust it)

void setup()
{
  Serial.begin(9600);
  //Inicializamos la pantalla LCD.
  lcd.begin(16, 2);
  lcd.clear();
}

void loop()
{
  unsigned long currentAcc = 0;
   int voltajemax= 0;
  unsigned int voltajemin=1025;
  unsigned int count = 0;
  unsigned long prevMicros = micros() - sampleInterval ;
  while (count < numSamples)
  {
    if (micros() - prevMicros >= sampleInterval)
    {
      // Leemos voltaje TODO: Comprobar si el voltaje <200 ERROR en conexión
      int voltaje=analogRead(voltPin);
      //Nos quedamos con el voltaje máximo y mínimo. Solo usaremos el máximo,
      //pero no cuesta nada dejar el mínimo para futuros usos incrementando precisión
      if(voltaje<voltajemin) voltajemin=voltaje;
      if(voltaje>voltajemax) voltajemax=voltaje;
      //Valor puntual de la corriente
      int adc_raw = analogRead(currentPin) - adc_zero;
      currentAcc += (unsigned long)(adc_raw * adc_raw);
      //Incrementamos contadores
      count++;
      prevMicros += sampleInterval;
    }
  }
  int voltaje=calcularVoltaje(voltajemax,voltajemin);

  float rms=calcularRMS(currentAcc,numSamples); 
  //Pasamos la intensidad en amperios, a Watios multiplicando por el voltaje
  int watios=rms*voltaje;

  writeLCDValues(watios,voltaje);
}

// Esta función calcula la intensidad medida en un rango de muestras.
// Es ajustada en función de las tomas y el voltaje del arduino.
// Para mas informacion consultar manual de arduino
float calcularRMS(unsigned long currentAcc,unsigned long numSamples){
  // The 75.7576 for the conversion comes from solving for X, 5 V / X = .066 V / 1 A from the
  // arduino max analog input voltage and the ACS712 sensitivity on the spec sheet respectively
  float rms = (sqrt((float)currentAcc/(float)numSamples) * (75.7576 / 1024.0));
  return rms;
}

//Calculamos el voltaje en funcion a los valores tomados por el voltímetro
// En diferentes tomas. Se extrapola el valor máximo del voltaje
int calcularVoltaje(int vmax,int vmin){
  return map(vmax,35, 981,0,227);
}

void writeLCDValues(int watios,int voltios){
  String textoWatios="Wats: ";
  String textoVoltios="Volt: ";
  // Limpiamos LCD
  lcd.clear();

  //Escribimos los watios en la primera fila 
  textoWatios= textoWatios + watios ;
  lcd.print(textoWatios);

  //Escribimos los voltios en la segunda fila
  lcd.setCursor(0,1);
  textoVoltios = textoVoltios +  voltios;
  lcd.print(textoVoltios);

}

Hasta la próxima semana!!