PCB LoRa universal board

Nouveau projet en cours...

Conception d'une petite platine destinée à l'expérimentation de solutions IOT LoRa. Modulable au choix, de la version minimaliste à la plus complète avec plusieurs capteurs.
Optimisée pour une consommation ultra basse, cette platine est parfaitement adaptée pour des capteurs météo simples, des digis LoRa et toutes sortes d'IOT LoRa.
Un petit panneau solaire peut alimenter la platine pour une autonomie limitée par la durée de vie de la batterie 18650.

Concept

Cette platine a été pensée pour faire de l'expérimentation avec un Arduino promini 3,3V 8 MHz et des modules externes et a été optimisée pour une consommation la plus faible possible.
Le promini a été choisi en raison de son faible coût et de sa consommation extrêmement faible lorsqu'on supprime les LED et le régulateur 3,3 V intégrés.
La relativement faible capacité de ce processeur est cependant suffisante pour bon nombre de projets.

Caractéristiques :
- Dimensions 65 x 90 mm
- Module Arduino promini 3,3 V / 8 MHz
- Module RFM95W avec connecteur d'antenne
- Horloge DS3231
- Support pile CR2302 de sauvegarde de l'horloge
- Support de batterie 18650
- Circuit de charge solaire ou USB CN3163
- Mesure du courant et tension de charge INA219
- Régulateur 3,3 V
- Sortie VCC commutée par MOSFET pour capteurs ou modules externes
- Borniers à vis pour I2C, Onewire, panneau solaire, interrupteur M/A, VCC_SW, et toutes les pins de l'Arduino + port USB C.
- Configurable par ponts de soudure. (JP)
- Points de tests des tensions. (TP)
- Optimisée très faible consommation.

lora univ board dwn

Description
L'alimentation de la platine s'effectue à l'aide d'un accu Li-Ion 16850 implanté sur le circuit imprimé et qui peut être rechargé à l'aide d'un panneau solaire ou d'un port USB via un régulateur de charge CN3163. Le courant maximum de charge a été limité à 1 A.

Un capteur de tension et courant optionnel INA219 permet de mesurer le courant de charge et la tension d'entrée et de la batterie.

Si le INA219 et/ou CN3163 ne sont pas utilisés, des diviseurs de tension optionnels à résistances permettent de mesurer une tension externe et celle de la batterie.

Un bornier à vis permet d'insérer un interrupteur M/A ou de mesurer le courant consommé en intercalant un ampèremètre.

Il y a possibilité d'installer un régulateur de tension 3,3 V RT9080-33 si le besoin s'en fait sentir. Un pont à souder permet de choisir avec ou sans régulateur.

Une horloge en temps réel DS3231 sauvegardée par une pile CR2032 peut être installée et peut servir à réveiller le processeur mis en veille profonde à des heures programmées ou des intervalles réguliers par une interruption et/ou donner l'heure.

Un module LoRa RFM95W peut également être installé afin de rendre cette platine communicante en modulation LoRa.

Enfin un transistor MOSFET optionnel permet de couper la sortie VCC à l'aide de la pin de commande D5 de l'Arduino pour alimenter certains modules externes. Lui aussi peut être shunté par un pont la pin de commande peut alors servir à alimenter directement un module qui ne DOIT pas consommer plus de 20 mA.
Un pont à souder permet de choisir l'une ou l'autre option.

Un connecteur pour le port i2c a été ajouté ainsi qu'un connecteur qui permet de relier 1 ou 2 capteurs OneWire ou un autre type de capteur utilisant 2 pins de l'Arduino (HX711 par exemple)
Le capteur OneWire peut être alimenté par la sortie D6 de l'Arduino afin d'économiser l'énergie lors du mode veille.

Toutes les pins de l'Arduino sont également disponibles sur des borniers à vis afin de faire des mesures ou expérimentations. 

Utilisation des pins de l'Arduino pro-mini

 A0  DS3231 power supply
 A1  INA219 power supply
 A2 PCINT11  DS3231 INT/SQW (jumper JP6)
 A3  CN3163 DONE
 A4  SDA
 A5  SCL
 A6 Ana only  Input voltage measure 
 A7 Ana only  Battery voltage measure
 D0 PD0  RX
 D1 PD1  TX
 D2 PD2 INT0  LoRa DIO0
 D3 PD3 INT1  LoRa DIO1 (jumper JP7)
 D4 PD4  LoRa RESET
 D5 PD5  VCC switch for the MOSFET or direct supply (jumper JP2)
 D6 PD6  OTHER sensors DATA1 (Onewire or another sensor)
 D7 PD7  CN3163 CHARGE
 D8 PB0  OTHER sensors PWR
 D9 PB1  OTHER sensors DATA2 (Onewire or another sensor)
 D10  LoRa CS
 D11  LoRa MOSI
 D12  LoRa MISO
 D13  LoRa SCK

 Consommations

Modules utilisés Running Sleep Deep sleep
Arduino seul 4 mA 4.6 µA 0.1 µA
Arduino + DS3231 + BME280 4.5 mA 4.6 µA 0.3 µA
Arduino + DS3231 + BME280 + INA219 4 mA 0.66 mA 5.9 µA
Arduino + DS3231 + BME280 + INA219 + DS18B20 (via D9) 4 mA 10 µA 5.3 µA
Arduino + DS3231 + BME280 + INA219 + DS18B20 + RFM95W 6 / 105 mA  2 mA 7.6 µA
Arduino + DS3231 + BME280 + INA219 (switched) + DS18B20 + RFM95W 6 / 100 mA 2.5 µA

En veille, le capteur INA219 consomme à lui seul plus de 5 µA, alors que le BME280 consomme 0,1 µA.
Son alimentation a donc été coupée lors de la veille à l'aide de la pin A1, tout comme celle du DS18B20.
Avec tous les modules équipés, la carte ne consomme que 2.5 µA en veille!

 Composants

Arduino promini 3,3V 8 MHz  1 Platine micro-contrôleur version avec les broches A6 et A7
RT9080-33GJ5  1 Régulateur de tension 3,3V
DS3231  1 horloge en temps réel https://fr.aliexpress.com/item/1005006442741894.html
INA219BID  1 version SOIC mesure du courant et tension via i2c https://fr.aliexpress.com/item/33047166203.html
CN3163  1 régulateur de charge solaire pour batterie 18650 https://fr.aliexpress.com/item/1005006005982053.html
RFM95W  1 Module LoRa 433 MHz https://fr.aliexpress.com/item/1005001723778746.html
AO3407  2 Transistor MOSFET P https://fr.aliexpress.com/item/4000830412884.html
AO3400  1 Transistor MOSFET N https://fr.aliexpress.com/item/1005008067935379.html
SS14  1 Diode Schottky 1A-40V https://fr.aliexpress.com/item/1005006643435874.html
Support de batterie CR2032  1 Support SMD pour batterie CR2032 https://fr.aliexpress.com/item/1005006329002433.html
Support de batterie 18650  1 Support SMD pour batterie 18650 https://fr.aliexpress.com/item/1005005704957712.html
Connecteur HJ-SMA716  1 https://fr.aliexpress.com/item/10000000835065.html
Connecteur USB-C 6P  1 Connecteur USB-C 6 broches (6P) https://fr.aliexpress.com/item/1005007419369264.html
Bornier à vis 8 plots esp. 2,5 mm  2 https://fr.aliexpress.com/item/1005008259103404.html
Bornier à vis 4 plots esp. 2,5 mm  3
Bornier à vis 3 plots esp. 2,5 mm  1
Bornier à vis 2 plots esp. 2,5 mm  4
Batterie 18650  1 Batterie 18650 3500 mAh https://fr.aliexpress.com/item/32771532107.html
1 µF/10V  4 Condensateur SMD 1206
0.1 µF/10V  7 Condensateur SMD 1206
0.1 Ω/1 W  1 Résistance SMD 2512
1 kΩ  1 Résistance SMD 1206
4.7 kΩ  3 Résistance SMD 1206
5.1 kΩ  2 Résistance SMD 1206
10 kΩ  2 Résistance SMD 1206
18 kΩ  1 Résistance SMD 1206
33 kΩ  1 Résistance SMD 1206
100 kΩ  3 Résistance SMD 1206
1 MΩ  1 Résistance SMD 1206

hand point up solid fullJe n'ai aucun intérêt commercial avec les vendeurs proposés. Vu la volatilité de ces vendeurs, les liens ne sont peut-être plus valables.
Les composants achetés séparément sont malheureusement plus chers que les platines complètes achetées en Chine!
Pour ma part, j'ai donc démonté certains composants de ces platines (DS3231, INA219, résistance 0.1 Ω, CN3163)

 Réalisation

La platine est à câbler suivant ses besoins.
A minima, il faut :
- Arduino promini débarrassé de son régulateur 3,3V et des LED afin d'obtenir une consommation très faible (0,1 µA) 
- support de batterie 18650
- batterie 18650
- Connecteur CN2 ou cavalier
- JP1 ponté (pas de régulateur 3,3V)

 ideaMonter l'Arduino promini sur des broches pour plus de commodités !

On rajoutera les capteurs ou modules à convenance, ainsi que les composants concernés :

Capteur i2c (BME280 par exemple)
- CN9, R17, R18, C12

Capteur Onewire (DS18B20 par exemple)
CN8, R16, C3

Chargeur solaire CN3163
CN1,U1, Q1, D1, C1, C4, R3, R6, R7

Charge par USB
Connecteur USB1

Capteur INA219
U3, C9 (R13, R14)

DS3231
- U6, support BAT2, C11
- JP6 si on veut gérer l'interruption INT pour réveiller le processeur.

Module LoRa
- U5, RF1, C10
- JP5 si on veut utiliser le protocole LoRawan

Régulateur 3,3V
- U2 RT9080-33GJ5, C5, C7 (JP1 absent)

Commutation pour VCC externe
- CN 10, Q2, Q3, R9, R11, C13

Mesure de la tension VIN (ou externe) par entrée A6
- CN1, R4, R5, C2

Mesure de la tension BATTERIE par entrée A7
- R8, R12, C8

 Si on n'utilise pas le chargeur CN3163, il y a possibilité d'utiliser l'entrée SOLAR sur CN1 pour mesurer une tension externe, comme une batterie.
Il faut alors ponté JP7.
caution icon Ne JAMAIS dépasser une tension de 3,3V sur l'entrée A6 de l'Arduino. Dimensionner le diviseur R4, R5 en conséquence!
Notamment si vous écrivez une routine de mesure qui utilise comme référence la tension 1,1V de l'Arduino, veillez à ne pas dépasser cette tension.

Configuration des cavaliers

 JP1  VCC 3.3V regulator  JP1 ON (NO regulator) JP1 OFF (with regulator)
 JP2  VCC_SW switch selector  JP2 ON (D5 output) JP2 OFF (via MOSFET)
 JP3  A0 address of INA219  
 JP4  A1 address of INA219  
 JP5  DIO1 of RFM95W  JP5 ON (D3 wired to LoRa DIO1)  JP5 OFF (no DIO1 use)
 JP6  INT/SQW of DS3231  JP6 ON (D8 wired to INT/SQW) JP6 OFF (no INT/SQW use)
 JP7  W/O CN3163  JP7 ON (No USB connector and needed components) JP7 OFF (USB input used + CN3163)

Logiciel

Mon logiciel permet de tester tous les ensembles de cette réalisation et n'est qu'un exemple à adapter au besoin de chacun.
Il est disponible en téléchargement sur mon Github.

Il permet de :
- mesurer la température d'un capteur DS18B20
- mesurer la température, humidité, pression d'un capteur BME280
- mesurer le courant de charge et la tension d'entrée et de la batterie avec l'INA219
- donner l'heure à l'aide d'une RTC DS3231 ou de réveiller tout le montage à l'aide d'une interruption programmable
- calculer la tension d'alimentation de l'Arduino à l'aide d'une routine interne.
- transmettre des informations via LoRa en APRS
- commuter la tension de la batterie à l'aide d'un MOSFET de puissance pour alimenter un montage/capteur externe

 Dans le logiciel, il faut commenter ou décommenter les lignes suivantes pour utiliser les différentes parties du montage :

// LoRa parameters

const long TXFREQUENCY  = 433775000;   // Tx frequency in Hz
const int FREQ_ERR      = -15000;      // Freq error in Hz. Start with 0, and measure real frequency and correct this value.
const byte TXPOWER      = 20;          // in dBm, output power on the SX1278 module, max 20 dBmconst int TXPERIOD      = 600;         // in seconds, interval between 2 transmissions

 

// define the sensors, uncomment
//#define SHT31_ENABLED               // uncomment if we want a SHT31 sensor#define BME280_ENABLED                // uncomment if we want a BME280 sensor
#define INA219_ENABLED
#define DS3231_ENABLED
#define ONEWIRE_ENABLED
#define LORA_ENABLED