Boya Iridium con Arduino y GPS | Diseño electrónica (esquemas y PCB)

En esta entrada voy a presentar el diseño de la electrónica seleccionado para este proyecto. Incluye un importante novedad, y es que los circuitos electrónicos se van a montar en formato PCB de fabricación profesional.


Indice ‘Boya Iridium con Arduino‘ | Proyecto Elcano:

  1. Introducción
  2. Análisis de concepto y costes
  3. ⇒ Diseño electrónica (esquemas y PCB)
  4. Montaje hardware (próximamente)
  5. Programación en Arduino (próximamente)
  6. Lanzamiento y seguimiento (próximamente)

Para este proyecto he decido dar un salto y hacer el diseño electrónico de forma mas profesional utilizando la herramienta KiCad. Aprovechando que la herramienta permite también diseñar PCB, toda la electrónica de este proyecto estará montada sobre PCB de fabricación profesional (JLCPCB.com). 

Antes de nada, quiero aclarar un par de temas relacionado con la disposición de los componentes dentro de la caja (la boya propiamente dicha). La boya estará compuesta por dos niveles, un nivel superior (con la placa solar, el módulo GPS con la antena, el módulo Iridum y un pequeño PCB) y un nivel inferior (con el PCB principal). Lo veremos todo más adelante en otra entrada, cuando comience con el montaje: 

Boya Iridium con Arduino | Localización componentes

Si bien haber situado el PCB principal en el nivel superior hubiese simplificado el cableado, he decidido hacerlo así para evitar que la electrónica esté al sol, y evitar sobrecalentamientos. Además de esto, las dimensiones de la placa solar tampoco hubiesen permitido situar el PCB en el nivel superior. Como contrapartida, hacerlo así obliga a tener un pequeño PCB en en el nivel superior para poder llevar algunas funcionalidades muy concretas al nivel superior y facilitar la accesibilidad.

PCB inferior (principal) y PCB superior (secundario) 

En esta entrada nos centraremos en el diseño electrónico de esquemas y PCB

  • PCB inferior: PCB principal, donde irá toda la electrónica. Este PCB irá situado físicamente en la parte inferior de la boya, por lo que quedará bastante inaccesible una vez terminado el montaje, ya que quedará debajo del nivel superior. Tiene unas dimensiones de 122mm x 86mm:

Boya Iridium con Arduino | PCB inferior

Ver esquemas PCB inferior 

  • PCB superior: pequeño PCB que irá en la parte superior de la boya, para tener acceso a ella al abrir la tapa transparente sin tener que desmontar nada. Solo incorpora un led, que parpadeará cada aproximadamente 3 segundos para estar seguros de que todo funciona correctamente a través de la tapa, y un jumper, para aislar la batería (que irá en el PCB inferior) de forma fácil:

Boya Iridium con Arduino | PCB superior

Ver esquemas PCB superior

PCB inferior (PCB principal) | Diseño explicado

A continuación, vamos a analizar los esquemas y el diseño del PCB inferior o PCB principal, bloque por bloque:

Etapa de entrada

La etapa de entrada está compuesta principalmente de la placa solar, el cargador de baterías, y la batería de Li-ion.

ComponenteFabricanteReferencia
Conector en PCB inferior (J4)JST Sales America‎B2B-PH-K-S(LF)(SN)
Diodo Schottky (D5)Micro Commercial1N5820-TP
Cargador de baterías (U1)TP4056
Batería (BT1)RS PRO880-1558
Placa solarSeeed Technology‎313070005‎

La etapa de entrada está compuesta por un conector macho JST de dos pines (J4) donde se conectará la placa solar, que ya incorpora cable y conector compatible. He utilizado un diodo Schottky (D5) como protección para bloquear posibles corrientes circulando hacia la placa solar. El cargado de baterías que he utilizado es el TP4056 (U1) que ya había utilizado anteriormente en otro proyecto, será el encargado de cargar la batería con la energía de la placa solar. La batería seleccionada es de 2600mAh, y comprada a un fabricante fiable como es RS. Cuidado con comprar baterías de Li-Ion en portales como Ebay, la mayoría son falsas. La función de jumper es poder aislar la batería de forma manual a la hora de hacer pruebas. 

Boya Iridium con Arduino | Etapa de entradaEl cargador TP4056 irá situado en el borde del PCB y con el conector USB hacia afuera para facilitar la carga por USB y no tener componentes delante que puedan entorpecer la conexión del cable. 

Boya Iridium con Arduino | Etapa de entrada, PCB

Por temas de optimización del espacio, la batería irá situada en el borde opuesto del PCB:

Boya Iridium con Arduino | Batería, PCB

El cargador TP4056 admite una tensión de entrada máxima de 8V según la hoja de datos del fabricante, y la placa solar que he seleccionado genera hasta 8.2V en vacío. La caída de tensión en el diodo D5 es de 0.2V a corriente de 10uA, por lo que la tensión de entrada en el peor caso no debería superar los 8V. De todas formas este punto lo comprobaré in-situ al recibir la placa solar:

Diodo schottky

Conector auxiliar y PCB superior

El conector auxiliar es el nexo de unión entre el PCB superior y el PCB inferior. Si bien el nivel superior también van situadas placa solar, módulo GPS y módulo Iridium, estos no forman parte del PCB superior como tal, y llevan cables independientes de conexión con el PCB inferior. La conexión se hará utilizando un cable de 10 hilos, que unirá ambos conectores.

ComponenteFabricanteReferencia
Conector J1 (PCB inferior)Molex‎053047-1010
Conector J1 (PCB superior)Molex053047-1010
CableMolex15134-1002 

El objetivo de este conector (y por lo tanto, del PCB superior), es llevar algunas funcionalidades muy concretas al nivel superior para facilitar su accesibilidad.  El conector que he utilizado el mismo que para conectar el módulo Iridium como veremos mas adelante en esta entrada, el objetivo de esto es ahorra costes utilizando el menor número de componentes diferentes posible. Estas funcionalidades son dos:

Boya Iridium con Arduino | Conector auxiliar, PCB inferior

  1. Un led para conocer el estado del sistema a través de la tapa transparente. En realidad voy a utilizar 2 led, uno en cada PCB. El led del PCB inferior servirá únicamente para la etapa de pruebas.
  2. Un jumper para aislar la batería de forma fácil con solo abrir la tapa. Este jumper también irá en ambos PCB, pero el inferior servirá únicamente para la etapa de pruebas.

El esquema de este conector en el PCB inferior es el siguiente: 

Boya Iridium con Arduino | Conector auxiliar, PCB inferior

El esquema correspondiente en el PCB superior es el siguiente: 

Boya Iridium con Arduino | Conector auxiliar, PCB superior

Boya Iridium con Arduino | Conector auxiliar, PCB superior

Alimentación Arduino (5V)

El objetivo de este módulo es elevar la tensión de batería (variable entre 3.3V y 4.2V), a 5V constantes. Para ello voy a utilizar 2 DC/DC elevadores, y 3 diodos. El objetivo de utilizar tantos componentes es hacer un OR de alimentaciones, y tener DC/DC redundantes. 

ComponenteFabricanteReferencia
DC/DC principal (J8)Polulu

U3V12F5

DC/DC auixiliar (J7)Polulu

S7V8A

Diodo Schottky (D1, D2, D3)Micro CommercialM1N5820-TP

El DC/DC es un componente pequeño (1cm x 1cm) y muy barato (0.5€), pero de una importancia vital. Es la fuente que suministrará la energía a muchos de los componentes electrónicos mas importantes, entre otros, la placa Arduino y el módulo GSP. Si este pequeño componente falla y deja de suministrar los 5V, perdemos completamente todo, es un elemento crítico. Para intentar paliar esta situación, he añadido un DC/DC redundante, y la posibilidad de alimentar la electrónica directamente desde batería a través del diodo D1 en caso de que ambos DC/DC fallen. Utilizando diodos generamos un OR de alimentaciones, donde la salida de tensión mas elevada será la única que alimente la electrónica. 

Boya Iridium con Arduino | Salida DCDC, 5V

  • DC/DC principal: el DC/DC principal será el central (conector J8 de 3 pines). Este suministrará los 5V necesarios para alimentar la electrónica. 
  • DC/DC auxiliar: He añadido un DC/DC auxiliar (conector J7 de 4 pines) que se puede activar y desactivar mediante una salida digital desde la placa Arduino. Por defecto estará apagado (salida a 0V). En caso de que el el DC/DC principal falle, se activará este.
  • Alimentación directa desde batería: En caso de que ambos DC/DC fallen, o para la transición desde que el principal falla y hasta conectar el auxiliar, la electrónica pasará a alimentarse directamente desde la batería a través del diodo D1. Es un modo al que nunca se debería llegar, ya que módulos como el GPS no admiten tensiones tan bajas. Es solo para en caso de perder ambos DC/DC, tener una fuente de alimentación extra para no perderlo todo y conseguir alargar la vida de la boya. 

Boya Iridium con Arduino | Salida DCDC, 5V, PCB inferior

En funcionamiento normal, el DC/DC principal tendrá 5V a la salida, el auxiliar estará apagado, y la tensión de batería estará como mucho a 4.2V, por lo que solo conducirá el diodo D3 y toda la corriente la suministrará el DC/DC principal. 

En caso de que este falle, la tensión a la salida de este DC/DC caerá a 0V, por lo que empezará a conducir el diodo D1. Utilizando una entrada analógica monitorizaré cual es la tensión que tenemos a la salida del OR de alimentaciones, y si se detecta que esta ha hasta 4.2V, significará que el DC/DC principal ha dejado de funciona y que está conduciendo el diodo D1 (alimentación directa desde batería). En este caso, a través de una salida digital de la placa Arduino activaré el DC/DC auxiliar, que es el que comenzará a suministrar los 5V de salida.

En caso de que este también falle, conducirá el diodo D1 y la electrónica pasará a alimentase directamente desde batería. 

Lectura de la tensión de batería y salida 5V

Utilizando entradas analógicas el sistema hará lecturas periódicas tanto de la tensión de batería como de la tensión a la salida de 5V.

Esta funcionalidad es bastante simple y no presenta dificultad especial. De todas formas, la lógica presentada en el apartado anterior exige pensar en como se va a hacer la lectura de la tensión cuando la propia tensión de alimentación de la placa Arduino varía. Es un bucle infinito: queremos leer la tensión de alimentación que le llega a la placa Arduino, pero para ello necesitamos conocer cual es esa tensión de alimentación para hacer la conversión. Es la pescadilla que se muerde la cola:

void loop() {
  valor5V = analogRead(A4);
  voltage = valor5V * (5.0 / 1023.0);
}

El problema aquí es que lo 5.0 / 1023.0 voltios utilizados para la conversión no tiene por que ser 5V siempre… al conducir el diodo D1 y alimentar la placa Arduino directamente desde batería, habría que hacer la conversión con la propia tensión de batería, que es la tensión que estamos intentado leer, la cual no conocemos. 

Para solucionar esto, voy a utilizar como referencia la salida de 3.3V que incorpora la placa Arduino para hacer las lecturas de tensión. Esta salida se mantiene constante a 3.3V independientemente de la tensión de alimentación de la placa Arduino (siempre que esta sea superior a 3.3V claro). Esto me permite leer la tensión de entrada sin conocer a que tensión se está alimentando la electrónica:

void loop() {
  valor3_3V = analogRead(A3);
  valor5V = analogRead(A4);

  voltage = valor5V * 3.3 / valor3_3V;
}

Por último, añadir que la lectura de tensión de batería y de alimentación 5V se hará a través de una resistencia de 10k para evitar alimentar la placa Arduino a través de las entradas analógicas como ya me ha pasado anteriormente. 

MPU6050 y Watchdog

El conexionado de estos dos módulos es muy sencillo, y no requiere de explicaciones. 

Por mencionar algo, he decidido alimentar el Watchdog directamente desde tensión de batería, ya que el consumo es menor, y necesito que esté siempre alimentado.

Boya Iridium con Arduino | Watchdog

El sensor MPU6050 en cambio, lo he alimentado desde una salida digital de Arduino debido a su bajo consumo. Esto me permitirá resetear si se detecta que el sensor deja de funcionar, e incluso quitar alimentación cuando no se use para ahorrar energía. De todas formas, en sensor MPU6050 cuenta con un modo de bajo consumo, donde este cae hasta 50uA, y no será necesario quitar la alimentación al sensor:

Boya Iridium con Arduino | MPU6050

La localización de estos componentes en el PCB es la siguiente: 

Boya Iridium con Arduino | Watchdog y MPU6050, PCB inferior

Módulo GPS

El módulo GPS irá situado en el nivel superior, ya que necesita tener visión clara del cielo para comunicarse de forma efectiva. Al estar toda la electrónica de control en el PCB del nivel inferior, se utilizará un cable de 6 hilos y un conector de 6 pines para comunicar este módulo con la placa Arduino. La distancia entre pines es de únicamente 1mm, por lo que la soldadura en el PCB se podría complicar: 

ComponenteFabricanteReferencia
Conector en PCB inferior (J2)JST Sales AmericaBM06B-SRSS-TB(LF)(SN)
CableJST Sales AmericaA06SR06SR30K152A
Módulo GPSGLOBALSATEM-506
MOSFET (Q2)ON-SemiconductorFDP7030BL

El conexionado del módulo seleccionado se muestra a continuación. Este módulo necesita alimentación de 5V, por lo que se alimentará de este potencial (salida del DC/DC). 

Boya Iridium con Arduino | GPS

Las entradas asociadas en la placa Arduino son las siguientes. Utilizaré la librería SoftwareSerial.h (pines D3 y D4) para las comunicaciones por puerto serie, ya que las salidas RX y TX de la placa Arduino las he reservado para el módulo Iridium. El GPS cuenta con una señal Directive que indica el estado de la señal GPS. He reservado un pin para esta señal a pesar de no tener claro aun si la utilizaré para algo: 

Boya Iridium con Arduino | Entradas/salidas GPS

Puede llamar la atención el MOSFET utilizado en el potencia GND. Este MOSFET será en encargado de cortar la alimentación del módulo GPS cuando estemos en modo bajo consumo. Debido a que el módulo GPS ya cuenta con una función de bajo consumo que se activa por software, puede que no sea necesario conectar/desconectar el módulo cada vez que se quiera utilizar. Para ello he añadido el jumper JP2. De esta forma, una vez que tenga el módulo en mis manos y haga pruebas de consumo, si considero que la función software de bajo que consumo que incluye es suficiente, no montaré el MOSFET y lo puentearé con el jumper JP2.

Boya Iridium con Arduino | GPS en el PCB inferior

Módulo Iridium

Igual que el módulo GPS, el módulo Iridium irá en el nivel superior, ya que necesita tener visión clara del cielo para comunicarse de forma efectiva. Al estar toda la electrónica de control en el PCB del nivel inferior, se utilizará un cable de 10 hilos y un conector de 10 pines para comunicar este módulo con la placa Arduino

ComponenteFabricanteReferencia
Conector en PCB inferior (J3)Molex053047-1010
CableMolex15134-1002
Módulo IridiumRockBlock
MOSFET (Q1)ON-SemiconductorFDP7030BL

Este módulo se alimentará directamente desde batería, ya que puede funcionar alimentado de esta forma. De esta forma evitamos sobrecargar el DC/DC y evitarnos las pérdidas que se generan: 

Boya Iridium con Arduino | Módulo Iridium

Las entradas asociadas en la placa Arduino son las siguientes. Al igual que el módulo GPS, este se comunica por puerto serie. Tiene varias salidas más, como Ring o NetAv, para los que he reservado entradas digitales en la placa Arduino a pesar de no saber si las usaré:

Boya Iridium con Arduino | Entradas/salidas Iridium

Boya Iridium con Arduino | Entradas/salidas Iridium

He utilizado la misma lógica de MOSFET + jumper por si el modo bajo consumo activado por software que incorpora no fuera suficiente y quisiera desconectarlo cada que vaya a estar tiempo sin utilizarse.

Boya Iridium con Arduino | Módulo Iridium en PCB inferior

Placa Arduino 

Con todo lo mencionado anteriormente, las entradas/salidas de la placa Arduino han quedado ocupadas casi al completo: 

Boya Iridium con Arduino | Entradas/salidas Arduino

Realizaré algunas modificaciones en el hardware de la placa Arduino Nano para reducir su consumo en modo sleep y reducirlo a tan solo 90uA (micro-amperior). 

Fabricación de PCB

Los PCB será fabricados en China por JLCPCB.com, un gigante de este mundo, que tiene unos precios realmente bajos. Sin contar el envío, el PCB inferior me ha costado unos 1.2€/unidad, y el superior unos 0.3€/unidad. 

Realmente merece la pena dedicar algo de tiempo a aprender como utilizar software de diseño PCB (yo he utilizado KiCad), ya que en sistemas complejos como este, hacer la soldaduras a manos puede ser un quebradero de cabeza, además de un punto débil al depender la vida del proyecto de tu habilidad para soldar. Para mi ha sido la primera vez, y no puedo estar mas contento.

Y gracias a la magia de Internet

… las placas han llegado ya a mi casa. Como veis, me he decantado por hacer PCB de color blanco. He montado algunos componentes para que veáis como quedará 🙂


Siguiente entrada del proyecto Elcano:

  1. Introducción
  2. Análisis de concepto y costes
  3. Diseño electrónica (esquemas y PCB)
  4. ⇒ Montaje hardware (próximamente)
  5. Programación en Arduino (próximamente)
  6. Lanzamiento y seguimiento (próximamente)
Rate this post
5 Comentarios

Añadir un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *