Cómo construir un OpenEVSE Low cost y su vinculación con domoticz

@JJ del grupo «OpenEVSE» de telegram nos explica cómo ha fabricado un OpenEVSE V5 lowcost.

Si os interesa haceros con una placa podéis entrar en el grupo «OpenEVSE» de telegram, desde donde ha nacido el proyecto, para más información.

Índice:

Situación de partida y motivaciones para este proyecto

            Tengo un cargador comercial estupendo (walbox pulsar), que me vino con el coche (Seat mii electric), pero carece de las funcionalidades que quiero: control dinámico de potencia, aprovechamiento de excedentes solares e integración en mi sistema domótico, justo lo que ofrece OpenEVSE. Puedo conseguir que el walbox tenga control dinámico de potencia (“powerboost” se llama), añadiendo un meter Carlo Gavazzi en el cuadro de la entrada de la vivienda y llevando un cable hasta el cargador, con un gasto de más de 100€, pero el resto de prestaciones no las ofrece.

            Como me encanta el cacharreo y no quería gastarme más de 300€, aprovechando que tengo ociosos entre mis trastos muchos de los componentes necesarios (nano, LCD, placa de reles, caja estanca, ect…), me lanzo a hacer una modificación de la placa original, un OpenEVSE PLUS V5 y mandé a fabricar la PCB con (casi) todos los componentes smd ya montados a jlcpcb.

            Al final, sin tener garantías de éxito, invertí en I+D unos 60€. A cambio obtuve muchas horas de entretenimiento y aprendizaje, que afortunadamente me proporcionaron el resultado deseado. Os lo cuento.

PCB OpenEVSE PLUS V5_mod by JJ

Utilicé  la placa OpenEVSE PLUS V5, publicada en el Github del proyecto:

https://github.com/OpenEVSE/OpenEVSE_PLUS/blob/master/OpenEVSE_PLUS_v5/Advanced_v5.pdf

Básicamente, tomé el esquema publicado y comencé a borrar componentes para abaratar y facilitar la fabricación de la PCB en jlcpcb. Esta fábrica china no ofrece montaje de componentes de agujero pasante y en sus existencias, faltaban algunos componentes smd necesarios. Al final solo dispuse de resistencias, condensadores y diodos de uso general.

Eliminé:

  • Toda la electrónica relacionada con arduino.
  • Todo el circuito GFCI, que es un “interruptor diferencial”. Esta protección indispensable, concretamente un diferencial superinmunizado, ya la tengo  en mi cuadro eléctrico del cargador , junto con un magnetotérmico, con lo que me garantizo la seguridad a la que obliga la normativa.
  • Las salidas que ya proporciona el propio arduino nano: FTDI e ISP.
  • Las salidas para controlar el contactor con bobina de 12v de CC que incluye el kit original, pues pensaba usar una placa de reles que tiene ya toda la electrónica para ser gobernado directamente por las salidas de arduino a 5v.
  • La fuente de alimentación dual 12v/5v, porque necesitaba espacio en la PCB para el arduino y porque no la ancontraba en Aliexpress ni en digikey.

Manteniendo las dimensiones de la placa original (65x45mm), generé el PCB final, que tiene este aspecto y conexiones (primera versión V0):

La segunda versión (V3.x) tiene estas conexiones:

Y el aspecto con todos los componentes (arduino, RTC y fuentes de alimentación Hilink):

Como siempre, todo diseño tiene ventajas e inconvenientes.

Inconvenientes:

  • Se pierde integración, con un aumento del espacio necesario para alojar los diferentes elementos.
  • Al existir más elementos conectados por cable, pueden darse malos contactos.
  • Mayor dificultad de montaje.

Ventajas:

  • Menor precio (una tercera parte).
  • Posibilidad de DIY y personalización.
  • Modularidad: los diferentes elementos (Arduino, LCD, RTC…), son baratos y muy accesibles (Aliexpress, Amazon..). Esto facilita la fabricación y la compra de repuestos para eventuales reparaciones.
  • Es muy fácil cargar/actualizar el firmware, al disponer de un puerto USB en el arduino, por lo que no necesitamos programador extra.

Actualización a agosto 2021: la pinza amperimetrica esta agotada en digikey, por lo que hay que hacer uso de la nueva huella que hay en las últimas versión de la PCB, la V3.3. Es para una resistencia de carga (burden resistor), que permite emplear otro transformador de corriente (bobina CT o pinza amperimétrica) como la SCT-013-000.

Yo la he probado y funciona perfectamente. En este caso hay de desoldar la resistencia smd R4 de 22 ohm y sustituirla por una de 47 ohm de agujero pasante. Luego hay que modificar el valor para los cálculos del amperimetro que tiene cargado el arduino, que inicialmente es de 220. Se hace desde la app con el comando RAPI   $SA. Hay que cambiarlo a un valor de 210 y ajustarlo con valores próximos a este.

En el firmware esta explicado (ver open_evse.h a partir de #ifdef AMMETER). Inicialmente, el valor cargado para los cálculos del amperímetro es de 220. Hay que verificar ese valor desde la app con el comando RAPI:

C
$GA
>$OK 220 56^13

Ese valor son los miliamperios por cada paso del conversor AD del arduino. Es decir,  cada paso que mida arduino por su pin analógico ( que puede medir hasta 1024 pasos), se corresponde con 220 mA.

Ahora necesitamos un amperímetro lo más exacto posible. Yo uso un PZEM004T, que parece ser bastante preciso cuando mide por encima de 5A. Si consideras el valor de tu medidor digital como valor real, según las fotos que has puesto, tenemos las siguientes operaciones a realizar:

Valor medido por openEvse= 5,7A=5700mA/220 mA/paso AD=25,9 redondeando porque  no admite decimales= 26 pasos.

Valor real=6.65A=6650mA/26 pasos=255,77 mA/paso. Podemos probar con 256

En la app, nos vamos para introducir comandos RAPI y escribimos:

$SA 256 /r

Pulsar Send

Debemos obtener la respuesta:

>$OK^20

Comprobamos con:

$GA
>$OK 256 56^12

Ahora verificamos si openEvse mide igual que el amperímetro de referencia. Si no es así, podemos probar con valores próximos al obtenido hasta dejarlo lo más ajustado posible. 

Contactor/rele

Yo me decanté por una placa de reles de 30A que lleva toda la electrónica necesaria para ser gobernado directamente por las salidas 5v de arduino, porque al tenerla, era la forma más barata de probar el funcionamiento de un prototipo. De momento la mantengo, porque por ahora solo uso openEVSE para aprovechar los excedentes solares y raramente paso de 8A, con lo que deben aguantar sin problemas.

Actualización a junio 2021: desaconsejo utilizar esta placa de reles, porque han tenido una vida muy corta, de unos 100 Kwh cargando a intensidades de 6-8 A. Los contactos se han degradado y no conducen, por lo que OEvse  lanza el mensaje de error “no ground”.

Si se piensa usar intensidades más altas, igual estos reles son muy endebles y 16A, que es la máxima intensidad que admite mi coche en monofásica, de forma continuada durante varias horas, los deteriora rápidamente. En ese caso, entiendo que puede ser más apropiado emplear un contactor con bobina de 230v de este tipo:

Actualización a junio 2021: recomiendo usar un buen contactor, que no tiene un precio excesivo y proporciona más fiabilidad.

El LCD RGB I2C

El proyecto original ha hecho un gran trabajo de integración, metiendo en la misma placa el LCD 16×2 RGB, el reloj y un sensor de temperatura. Como es imposible conseguirlo salvo en la tienda de OpenEVSE, tiré de mi caja de cacharros y tenía un LCD para la RPI con el mismo chip MCP23017, que además contaba con un led RGB y pulsadores para manejar el menú.

Los caracteres no cambian de color, pero sirve perfectamente.
Si se quiere instalar el botón externo, hay que hacer un “hack”, soldando 4 cables a los pines correspondientes, 2 a la alimentación y 2 al pulsador de la placa.

Cualquier LCD 16×2 I2C con el chip MCP23017 valdría, pero yo no lo he encontrado con caracteres RGB y con conexión para botón externo.

Actualización a junio 2021: posibilidad de usar un LCD I2C con PCF8574.

Más barato y pequeño que la propuesta anterior. Emplea para la conexión I2C el chip PCF8574 y no podemos conectarle botón, ni tampoco tiene led RGB. Como lo tenía en mi caja de cacharros, lo he probado y funciona OK.

Hay que compilar el firmware modificando unas líneas.

En open_evse.ino cambiar línea:

54 //#include "./LiquidCrystal_I2C.h"  // descomentar para  LCD I2C  PCF8574

En open_evse.h cambiar líneas:

224 #define DEFAULT_LCD_BKL_TYPE BKL_TYPE_RGB  //comentar si se usa LCD monocromo

225 #define DEFAULT_LCD_BKL_TYPE BKL_TYPE_MONO //descomentar si se usa LCD monocromo

233 #define I2CLCD_PCF8574  // descomentar si se usa LCD I2C  PCF8574

El sensor de temperatura MCP9808 I2C

No es imprescindible, pero por el precio que tiene es interesante montarlo. Yo lo tengo sobre el contactor, que pienso que es el elemento que mas puede calentarse. En el kit original, al estar integrado en el LCD, toma la temperatura del “ambiente” interior de la caja.
Se podría gestionar una alarma desde domoticz o node red, para avisarnos y/o hacer cosas que brinden más seguridad a nuestro cargador (desconexión, etc).

La fuente de alimentación

Se necesita una fuente de alimentación dual, que proporcione 5v y 12v. Las primeras pruebas las hice con un alimentador de 12v que tenía y un regulador de voltaje (stepdown) para obtener los 5v.

Eso fue mientras me llegó el hilink de 12v, porque el de 5v ya lo tenía. Era una solución muy  aparatosa que ocupaba mucho espacio en la caja.

Creo que la solución más apropiada por su tamaño y precio es usar estas fuentes de alimentación que se han vuelto tan populares.

La caja

La elección dependerá de dónde se vaya a montar el cargador (interior o exterior) o, como fue mi caso,  de lo que se tenga a mano, que fue la caja de un antiguo cuadro de maniobras de motores de garaje.

Sugiero, por ser muy asequibles y apropiadas, cajas estancas eléctricas (más o menos grandes). De este tipo:

https://www.bricomart.es/caja-superficie-estanca-6-elementos.html

Aquí tenéis dos ideas que ilustran esta solución:

https://www.thingiverse.com/thing:2779574

https://www.thingiverse.com/thing:3596417

El conector/cable de carga

Mi elección para el prototipo y no tener que gastar más, fue fabricar con mi impresora 3D un conector mennekes tipo 2 hembra. Lo hice porque el coste final lo puedo considerar cero, ya que tenía el hardware adecuado. Se trata de los conectores de un enchufe hembra trifásico que tenia entre mis trastos. Tienen la medida adecuada (6mm de diámetro) y se adaptan a la perfección al conector de carga. Sin estos conectores diseñados para soportar altas corrientes no lo hubiese intentado.

Como mi coche ya trae un cable de carga, no tenía que hacer ninguna inversión para ver si funcionaba el invento.

Como aliciente adicional, estaba el reto del diseño hasta conseguir un prototipo funcional. Este es el enlace de thingiverse por si alguno se anima:
https://www.thingiverse.com/thing:4741948

Si eres un maker y disfrutas con esto, adelante. He visto en walapop algun enchufe trifásico de segunda mano muy barato. Pero os recomiendo que optéis por uno comercial, que cuestan del orden de 40€, sobre todo si vais a usar altas corrientes de carga.

Obviamente, se puede optar por poner un cable de carga, eso depende de vuestras necesidades.

Para probar si funcionaba el prototipo, puse un cable con enchufe schuko de 16A para tomar la corriente. Y todavía no lo he quitado, pues con los excedentes solares (7-8A) no hay problema.

Además serviría como cargador portátil y me facilita seguir cacharreando.

Carga del firmware en el arduino nano

Actualización a mayo 2021: lo que se explica a continuación, se refiere a la carga del firmware 5.0.1, porque la última versión disponible a esta fecha, la 7.1.3 tiene menor tamaño del compilado, (27592 bytes), lo que quiere decir que cabe perfectamente en un Nano con bootloader normal, ya no es necesario cambiarlo por optiboot.

Fue el primer problema que tuve que solucionar. Al intentar cargar el firmware oficial, recibí el mensaje de que no había espacio para el sketch (por muy poco).

La solución fue probar a ganar espacio reduciendo el tamaño del bootloader y funcionó. Hay que cambiar el que trae arduino por defecto por “optiboot”. Para ello, si no se quiere comprar un programador para esta finalidad, se puede usar otro nano como programador ISP:en el IDE Arduino, ir a:

 Menú herramientas>programador y seleccionar “Arduino as ISP”

Yo seguí las instrucciones de:
https://ingeniocasero.blogspot.com/2017/05/cambiar-bootloader-de-arduino-nano-y.html
http://www.martyncurrey.com/arduino-nano-as-an-isp-programmer/

También hay que instalar la placa “OpenEVSE with optiboot” en “boards.txt” del IDE (yo he usado la versión 1.6.4, pues recomiendan la 1.6.X), que esta en la ruta indicada en el menú archivo>preferencias.

En mi caso la ruta es esta:

C:\Users\JJ\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.21

Editar “boards.txt” y añadir al final:

#####
# OpenEVSE with optiboot
#####
openevsebl.name=[optiboot]OpenEVSE

openevsebl.upload.tool=avrdude
openevsebl.upload.protocol=arduino
openevsebl.upload.maximum_size=32256
openevsebl.upload.maximum_data_size=2048
openevsebl.upload.speed=115200

openevsebl.bootloader.tool=avrdude
openevsebl.bootloader.low_fuses=0xFF
openevsebl.bootloader.high_fuses=0xDE
openevsebl.bootloader.extended_fuses=0x04
openevsebl.bootloader.unlock_bits=0x3F
openevsebl.bootloader.lock_bits=0x0F
openevsebl.bootloader.file=optiboot/optiboot_atmega328.hex

openevsebl.build.mcu=atmega328p
openevsebl.build.f_cpu=16000000L
openevsebl.build.board=AVR_DUEMILANOVE
openevsebl.build.core=arduino
openevsebl.build.variant=standard

Finalmente, hay que abrir con el IDE Arduino 1.6.4 el firmware a cargar, que se obtiene en estas direcciones:

Última versión (agosto 2021):

Americano (7.1.3):

https://github.com/OpenEVSE/open_evse/releases/tag/7.1.3

Europeo (7.1.3.EU):

https://github.com/openenergymonitor/open_evse/releases

Seleccionar en el IDE:  menu  herramientas>placa: [optiboot]OpenEVSE y subir el sketch como cualquier otro de arduino y ya estará operativo, en lo que a software ser refiere, vuestro OpenEVSE.

Conexion WIFI

La conexión la hago directa al arduino nano, sacando 4 cables de los pines TX, RX, 5V y GND.

Probé un wemos mini (ESP8266) y tenía malísima cobertura, fallaba en las conexiones y no iba fluido. Sin embargo el ESP32, me fue fenomenal y es el que he dejado. Como la diferencia de precio es mínima, recomiendo el ESP32.

Actualización a mayo 2021: ya no se va a mantener el firmware para ESP8266 con las nuevas versiones del firmware openEVSE, por lo que hay que elegir el ESP32

Descargar el firm para el ESP32  o ESP 8266 desde:

https://github.com/OpenEVSE/ESP32_WiFi_V3.x/releases

https://github.com/OpenEVSE/ESP8266_WiFi_v2.x/releases

Yo instalé en ESP32 con línea de comandos:

Primer flasheo:

esptool.py --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader.bin 0x8000 partitions.bin 0x10000 firmware.bin

Sucesivas actualizaciones:

esptool.py --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x10000 firmware.bin

Cuando inicia como AP el password es “openevse”.

 Si se emplea ESP32 Download tools, hay que indicar las 3 direcciones y los 3 ficheros a subir:

0x1000     bootloader.bin

0x8000     partitions.bin

0x10000   firmware.bin

Esquema de conexiones PCB V0:

Esquema de conexiones PCB V3.1

Esquema de conexiones PCB V3.2 y V3.3 con CONTACTOR

Notas sobre los conectores de la PCB

Se pueden emplear pines normales de paso 2,54mm combinados con conectores dupont hembra, que son muy comunes. Son de este tipo:

Una dirección de AE:

https://es.aliexpress.com/item/4000068407489.html?srcSns=org.telegram.messenger&spreadType=socialShare&bizType=ProductDetail&social_params=60032082438&tt=MG&aff_fsk=_vUQpDJ&aff_platform=default&sk=_vUQpDJ&aff_trace_key=e6df5f5ca2a040a294d442896ea68557-1613940869003-05740-_vUQpDJ&shareId=60032082438&businessType=ProductDetail&platform=AE&terminal_id=78ccf412edb7408d9d498e52e6b12c53

 De estos se necesitan:

Placa V0

  • 6 de 2P macho y 6 hembra con 2 cables.
  • 1 de 4P macho y 1 hembra con 4 cables

Placa V3.x:

  • 4 de 2P macho y 4 hembras con 2 cables
  • 3 de 4P macho y 4 hembras con 4 cables.

Si no se van a emplear los hilink porque se emplee una fuente de alimentación externa, hay que añadir 2 de 2P macho y 2 hembras con 2 cables.

Solo si se va a usar un contactor de 12Vcc, hay que añadir 1 de 3P macho y 1 hembra con 3 cables.

Para la conexión de la parte de AC (AC_TEST, AC_RELAY y AC_LINE), la placa original emplea unos conectores especiales, pero yo he usado unos terminales KF128 con tornillo que me han resultado muy cómodos. Son de paso 3,81mm. Se pueden “empalmar” con las ranuras que traen, por lo que se pueden comprar de 2P o 3P.

Son estos:

Una dirección de AE:

https://es.aliexpress.com/item/4000402923575.html?srcSns=org.telegram.messenger&spreadType=socialShare&bizType=ProductDetail&social_params=60032395192&tt=MG&aff_fsk=_vb13uH&aff_platform=default&sk=_vb13uH&aff_trace_key=61f86ffabf124033a524d78c111eea14-1613940481225-06975-_vb13uH&shareId=60032395192&businessType=ProductDetail&platform=AE&terminal_id=78ccf412edb7408d9d498e52e6b12c53

De estos necesitáis tres de 2P o dos de 3P.

Nota: yo no he comprado en ninguna de estas direcciones que he puesto, por lo que debéis buscar, porque igual encontráis otra tienda más barata o que suministren menos cantidades que se ajusten a vuestras necesidades.

ATENCIÓN. He descubierto un error, el paso del KF128 no es de 5,08mm, sino de 3,81mm. Además este tipo de conector solo servirá si se usan 2 de 3 pines o 3 de 2 pines, pero siempre separados, porque si se unen no coinciden con los agujeros de la placa. No lo detecté porque yo solo usé 2 de 2 pines que tenía de reciclaje y no usé los dos del centro destinados al contactor.

Ahora que he usado 2 de 3 pines, veo que si se unen, no ajustan, por lo que hay que ponerlos separados.

He estado mirando el diseño original en los ficheros de la PCB publicados en github. Aqui se ve un conector JST-VH de 6 pines, que tiene un paso diferente, de 3.96mm. Se trata de éste:

https://es.aliexpress.com/item/4000698109008.html?spm=a2g0s.9042311.0.0.36ca63c0zO9M05

He medido con el calibre y parece que el paso si es de 3.96mm

En esta foto os pongo una de las PCB V0 que he enviado, a la que solde pines normales para probarla. No lleva conectores en la parte AC. Os llamo la atención sobre el cable de tierra, que va soldado:

Esta es mi placa en uso, en la que combino JST XH y Dupont. Me falta un terminal KF128 porque no uso contactor con bobina de 230V AC (AC_RELAY) , además son recuperados y no tenía más.

Problemas conocidos y Test básicos y avanzados

Montaje PCB Versión 3.2 mayo 2021

Voy a explicar con unas fotos el proceso de montaje de los componentes que pedimos a DigiKey.

Es obligado leerlo para esta ultima versión de PCB, porque hay un cambio de pin del CP y un fallo de pista.


Tenemos que soldar:
1 diodo, 1 conversor DCDC +-12v, 2 integrados, 2 resistencias y 1 varistor
Creo que no hay posibilidad de error, porque excepto el HCPL2731, solo tienen una posición o es
indiferente como se coloque el componente (sin polaridad). Para ese integrado, solo fijarse bien en
el punto del pin 1.

Comenzamos soldando el diodo P6SMB16CA .Para ello ponemos un poco de estaño en uno de los
pads y lo soldamos. Despues se suelda el otro pad.

Ahora nos vamos a la cara de componentes de agujero pasante.
Comenzamos por las resistencias, que tienen menos grosor, soldamos R9, pero con la R8 tener la
precaución de no cortar una de las patillas para solucionar un error de una pista incompleta. Es que
no me puedo estar quieto e hice algunos cambios y ese pad quedó sin conectar. Por suerte la ñapa es
muy sencilla y no queda mal.

Continuamos con los integrados. El AQH1213, que solo lo había smd, es algo más tedioso soldarlo.
Yo lo hago así: hay que enderezar las patillas con un alicate y hacerlas coincidir con los agujeros.
Después , por el otro lado se aporta estaño, que entra por los orificios y suelda las patillas.

Soldar el resto de componentes hasta que quedar así:

En esta versión hay una nueva huella para una resistencia de carga (burden resistor), que permite
emplear otro transformador de corriente (bobina CT o pinza amperimétrica) como la SCT-013-000
Yo lo he probado y funciona perfectamente. En este caso hay de desoldar la resistencia smd R4 de
22 ohm y sustituirla por una de 47 ohm de agujero pasante. Luego hay que modificar el valor para
los cálculos del amperimetro que tiene cargado el arduino, que inicialmente es de 220. Se hace
desde la app con el comando RAPI $SA. Hay que cambiarlo a un valor de 210 y ajustarlo con
valores próximos a este.
Si tienes la pinza del proyecto, no debes hacer nada.

Ahora hay que montar el resto de la placa:

Hasta quedar así:

Atención, en esta versión el Control pilot esta intercambiado con el PP. Asimismo, ya se conectan
los dos pines de control de la placa de reles. Ver el esquema de conexiones.

Para más información

Iremos completando el tutorial a medida que se vaya actualizando la información en el grupo de telegram: «OpenEVSE«.

Integración del cargador de vehículo eléctrico OpenEVSE en domoticz

Para integrar el OpenEVSE en domoticz clica aquí.

Uso del OpenEVSE única y exclusivamente con excedentes fotovoltaicos con y sin vertido a red (con o sin inyección cero)

Para utilizar el OpenEVSE única y exclusivamente con excedentes fotovoltaicos con y sin vertido a red (con o sin inyección cero) clica aquí.

Uso del OpenEVSE con control dinámico de potencia (fotovoltaica cuando haya disponible y potencia contratada por la noche). Válido tanto para domoticz como para Home Assistant (HA)

Para utilizar el OpenEVSE con control dinámico de potencia (fotovoltaica cuando haya disponible y potencia contratada por la noche) clica aquí.

La APP de OpenEVSE

Recordar que uno de los miembros del grupo de telegram de «OpenEVSE» (@Toppeer2) ha creado una APP para gestionar la carga del OpenEVSE desde el móvil. Queremos agradecer que compartiera su trabajo!

https://play.google.com/store/apps/details?id=com.irifa.programar_carga_ev

Para cualquier duda o consulta tienes disponible el grupo de telegram «Domoticz a lo Spain» para entrar, ponerte cómodo y participar cuanto quieras.

Clica aquí para entrar en él

Cualquier duda, sugerencia o comentario será bien recibida en la web!