Placa de sensores con ESP32 (modulo Heltec Wireless Shell)

Buenas!

Me presento y les muestro una idea para que sea criticada (en el sentido estricto, que esta mal, que esta pésimo, etc) y acepto sugerencias, que marquen errores, lo que sea.

Me llamo Gustavo, no soy técnico electrónico ni ingeniero, solo un hobbista con mas ignorancia que conocimientos de electrónica pero con las mañanas libres durante la pandemia, lo que me lleva a meterme en cosas que no conozco e intento aprender, y aquí llegamos al ESP32.

La idea inicial fue armar un dispositivo sencillo con un modulito ESP32 y un BME280, al que después le fui agregue un modulo Lora, logre conectarlo con TTN usando LoraWan, y ahi es donde empezó la tontería de querer hacer algo que definitivamente no se hacer: Construir una placa que acepte varios sensores, con un modulo Heltec Wireless Shell (Viene con Lora, Wifi y BLE incluidos), y ahí como es todo 3.3v lo quise hacer tolerante a los 5v entonces le agregué convertidores de nivel lógico, y ahi es justamente una de las macanas que me mandé.

Porque ese modulo Heltec en lugar de uno que ya viniera listo para conectar los pines? Black Friday, estaba de oferta, se ve bueno y es diminuto.

modulo_heltec_ws.jpg

El proyecto va a funcionar en una caja estanca, con un panel solar de 12v / 10w y una batería sellada de 12v 7ah. Para este tipo de dispositivo es demasiado, pero es que donde estoy viviendo han pasados semanas enteras lloviendo y sin ver el sol y el conjunto no estaba caro. La idea era también hacerle un controlador de carga con su correspondiente circuito de power path para que no use la batería cuando hay suficiente energía en el panel, pero por ahora eso queda para una segunda etapa, voy a usar un controlador comercial chino y barato y listo.

Sensores lleva un BME280 para medir presión, temperatura y humedad, sensor de radiación UV (VEML6070), sensor de luz (TSL2561), una veleta con un sensor de angulo magnético AS5200, pluviómetro y un anemómetro simple con un sensor hall. Originalmente iba a tener un RTC DS3231, pero parece que esta en falta, y al final lo saque. También un slot de MicroSD para que mantenga un registro de estos datos por si por alguna razón el gateway LoraWan no esta disponible.

La alimentación tiene un buck converter para bajar la tensión de 12v a 5v. pero que quede todo listo por si después le agrego el power path y que acepte los 18v que puede llegar a entregar el panel, y después un LDO para pasar de 5v a 3.3v. Originalmente el buck converter iba a ser TPS56339DDCR de Texas Instruments) y el LDO iba a ser el XC6220B331MR-G, también de TI, no por nada en particular simplemente que el sitio de TI tiene las herramientas para hacer los calculos de los componentes de manera súper fácil, y para mi nivel de ignorancia venia muy bien. Después ante la falta de stock decidí cambiarlos, el buck converter ahora es un TPS54202DDCR y el LDO es el AMS1117-3.3, el motivo del cambio es puramente económico, y porque esta combinación que ahora uso ya la vi en el esquemático de algunas controladoras de impresoras 3D, por eso era facil conseguir todo listo. La corriente de 2A en el buck converter y 1A en el LDO es mas que suficiente para alimentar varios de estos dispositivos, pero bueno, es lo que hay. Por ahí podría poner algo de 1A en el buck y 500ma en el LDO solo para reducir el tamaño de los componentes, por ejemplo el inductor, pero por ahora no es critico.

1624447939095.png

Respecto a los convertidores de nivel lógico, la idea original también cambio. Para el bus I2C uso un PCA9306, porque era lo que había encontrado inicialmente específicamente para ese uso, pero después quise que también los IO funcionaran con 5v, y como hay 12 GPIO disponibles (y 5 GPI), me decidí a poner tres convertidores de nivel de 4 bit TXS0104EDR, que al final termine cambiando por dos TXS0108EPWR de 8 bit porque cuestan la mitad, y ahí esta una de las tonterías que aun no cambié, me quedan 4 bit libres, y creo que podría usarlo para el I2C y quitar el PCA9306, pero al final no lo voy a hacer, por ahora así queda nomas.

Este es el esquematico hasta ahora:

Schematic_Heltec_WS_sensor_board.png

No hay mucho mas para decir, todo es bastante sencillo en cuanto al esquema electronico siguiendo los datasheets, pero en algunos cálculos hago agua muy feo, como por ejemplo el divisor de tensión para el pin ENABLE del buck converter, lo dejo asi porque asi esta en el esquema del cual "tome prestada" la idea, pero no se como se llega a eso porque cuando intento resolver las ecuaciones para el calculo de esas resistencias según el datasheet a mi me da otros valores. Podria dejar el pin EN flotante, y eso ya funcionaría, pero la idea de poner ese divisor de tensión es que cuando la tensión baja de 12v el dispositivo el buck converter se apaga, asique si ese divisor no funciona simplemente lo quito y ya todo funciona sin la protección por baja tensión.

Otro de los puntos donde seguramente hay muchos errores es en el PCB, por lo que seguramente seguramente ahí tendré que corregir muchas cosas. Lo voy a mandar a hacer en China, con JLCPCB, una tirada de 5 que es lo minimo, y 2 de ellos van a venir montados, los otros tres con los componentes para montar. Uso SMD con footprint 0603 porque es lo que puedo soldar y desoldar a mano con lupa, menos que eso no me da la vista. Va en 4 capas: componentes, GND, +3.3v, reverso donde se trazan algunas lineas horizontales y el resto rellenado con GND. La diferencia de dinero entre hacerlo en 2 y 4 capas no es mucha, y me simplifica el trazado de las pistas. El tamaño actual de la placa es de 90mm x 65mm aproximadamente y se podria reducir un poco mas "amuchando" algunos componentes, pero la idea es que yo pueda soldarlo manualmente, al menos hasta que me arme el hornito para hacer el reflow.

1624449121405.png1624449168371.png

Finalmente hay un header para conectar un convertidor USB a UART para poder hacer los updates de firmware por USB, pero también tiene agregado un botón para habilitar WiFi y poder hacer los updates OTA, via WiFi. Si el WiFi esta habilitado los paquetes de datos van directo al MQTT, si no se mandan a traves de LoraWan. Aun me falta corregir muchas cosas en el firmware, pero va empezando a funcionar.

Bueno, esto es lo que hay, No se si es bueno o malo, sin dudas que no es perfecto, y es posible que algunas cosas no tengan mucho sentido, como las "aeroventilas" que Homero le agregaba al diseño de su auto, por ejemplo usar un convertidor de nivel para el i2c cuando tengo 4 bit disponibles en uno de los convertidores usados en el GPIO, pero todo es modificable.

Seguramente hay muchos errores pero no son intencionales, es pura ignorancia, por lo que considero muy apropiado que sean señalados, prefiero aprender algo ahora y no despues que tengo todo armado.

Saludos y muchas gracias.

Gustavo
 
Buenas! Vamos a seguir siguiendo.

Me encontre con algunos temas a resolver tanto en el circuito como en el PCB, entonces decidi cambiar algunas cosas.

- Circuito de proteccion para inversion de tension: Un mosfet, una resistencia y un zener espero que sirvan. La tension maxima a la que pretendo que esto funcione es 24v y el mosfet soporta hasta 40v, entonces es mas que suficiente. Le puse un zener de 10v y un resistor de 100k entre G y S porque la tension maxima entre gate y source no puede exeder los 12v.

- Cambie el buck converter por un AIZ1280CI porque la frecuencia del circuito de switching es mayor que el que usaba y me premite usar bobinas mas chicas. Es de 1.2A, que es menos que el TPS54202DDCR que usaba antes, pero cuesta la mitad y 1.2A deberia sobrar para este proyecto.

- Tambien cambie el LDO, puse NCP114BSN330T1G porque es mucho mas pequeño que el AMS1117 que usaba en el primer diseño, cuesta mas o menos lo mismo, y es de 300mah, mas que suficiente para el MCU con Lora y Wifi. Todos los sensores son de 5v, asique no necesito mas que eso.

- Dado que todos los dispositivos externos van a 5v entonces le agregue un fusible electronico seteado a 1A para impedir que un cable cortado, mal conectado o cualquier cosa traiga problemas. Use un TPS25921ADR.

- Leyendo el datasheet encontre que los convertidores de nivel que uso para el IO no son suficientemente rapidos para usarlos para I2C, entonces agregue tres terminales mas y ahora hay disponibles 3 entradas mas, (solo entradas, no tienen salida).

- Modificaciones varias al PCB, reacomodando componentes para que quede mas facil para soldar y a la vez reduje la cantidad de pistas y el recorrido en la otra cara del PCB. A su vez el plano de tension (tercera de las cuatro capas) esta dividido en 2, una parte de +3.3V y otra de +5V, separados por un espacio libre de 2mm entre las dos areas de cobre.

Y asi es como queda el circuito final (final hasta ahora).

1625066868385.png

Asi va quedando el PCB (lado A y lado B):

1625066939505.png1625066984821.png

Asi es como esta dividido el plano de tension, siendo el area de cobre mas grande de +3.3V y la mas pequeña en forma de L de +5V:

1625067041223.png

Y asi es mas o menos como se veria la placa terminada. Faltan detalles menores de serigrafia y algunas cosas mas, pero nada de otro mundo. Vamos a ver que sale.

1625067143677.png

Saludos.

Gustavo
 
Arriba