Node autònom amb alimentació solar, antena DIY, Arduino Pro Micro i transceiver RFM95
Contingut
Introducció
(TBD)
Construcció de l'antena
Mirar també:
El disseny que es proposa és utilitzar el mòdul RFM95 (transceiver), amb Arduino Pro Mini, i una placa PCB expressa que et permet soldar el connector de l'antena directament a la placa, i també les connexions del RFM95 al MCU.
Una altra possibilitat, la més ràpida, és utilitzar directament el TTGO que ja tinc.
Calculadora d'antenes:
Les dimensions de la meva antena:
Freqüència: 868 MHz Velocity Factor = 0.95 vf A. Vertical Monopole Radiating Element (λ*0.25)*vf: 8.2 cm B. Radials (λ*0.28)*vf: 9.2 cm (hi ha 4 radials) Actual wavelength: 34.6 cm
NOTA: The quarter wave vertical antenna is the simplest form of vertical antenna. It provides good performance combined with an omnidirectional radiation pattern and simplicity of construction. Per tant, l'antena que he construït és omnidireccional, i per l'aplicació que vull fer (projecte Tancalaporta), és millor un disseny d'antena unidireccional: una Yagi antenna, per exemple.
Conceptes d'antenes
RSSI: Received Signal Strength Indicator
El RSSI de l'antena es pot veure en els missatges de TTN. És a dir, dins de la trama que envia un node, el que interessa és el payload. Però també es pot veure informació interessant com el RSSI, que dóna idea de la qualitat del senyal.
El indicador de fuerza de la señal recibida (RSSI por las siglas del inglés Received Signal Strength Indicator), es una escala de referencia (en relación a 1 mW) para medir el nivel de potencia de las señales recibidas por un dispositivo en las redes inalámbricas (típicamente WIFI o telefonía móvil).
La escala tiene al valor 0 (cero) como centro; representa 0 RSSI, o 0 dBm. Aunque teóricamente puede darse el caso de medirse valores positivos, generalmente la escala se expresa dentro de valores negativos; cuanto más negativo, mayor pérdida de señal.
El RSSI indica intensidad recibida, no calidad de señal, ya que esta última se determina contrastando la intensidad de la señal respecto de la relación señal/ruido (Eb/No).
Nota: En esta escala, un nivel de 0 dBm es igual a 1 mW (milivatio).
Interpretación de los valores. En una escala de 0 a -80 RSSI:
0: señal ideal, difícil de lograr en la práctica. -40 a -60: señal idónea con tasas de transferencia estables. dependiendo. -60: enlace bueno; ajustando TX y basic rates se puede lograr una conexión estable al 80%. -70: enlace normal -bajo; es una señal medianamente buena, aunque se pueden sufrir problemas con lluvia y viento. -80: es la señal mínima aceptable para establecer la conexión; puede ocurrir caídas, que se traducen en corte de comunicación (pérdida de llamada, perdida de datos, mensajes (sms) corruptos (ilegibles).
Esta escala se aplica a algunos dispositivos. Según el tipo de modulación y receptor el valor saldrá indicado de esta manera o de otra similar. No siempre es una escala logarítmica. El fabricante es el que indica que significa la escala. (si son dbm dbuV...) y en función de la modulación se saben los márgenes aceptables
Tabla de equivalencias aproximada para averiguar el nivel de cobertura en función de los dbm en aire recibidos:
Más de -71 dBm = Excelente Entre -87 y -71 = Muy buena Entre -97 y -87 = Buena Entre -111 y -97= Baja cobertura A partir de -113 dBm = Sin cobertura
SWR (Stationary Wave Ratio, o Relació d'Ona Estacionària, ROE)
Videos per aclarir conceptes
Andreas Spiess videos:
Antenes direccionals: Yagi Antenna
Es troba per intermet calculadores de Yagi antenes. S'ha de posar 868MHz, i s'ha de decidir quants elements vols.
In summary to increase range:
- Elevate your antennas.
- Use antennas with higher gains.
- Use directional antennas and not omnidirectional ones.
Articles:
Mòdul RFM95/RFM96
Chip marking confusion between RFM95 and RFM96 RFM95 and RFM96 can be confused because they both have a chip marked with “RF96“. They are in fact different, as can be noticed in the photo above. Although the chip is the same, the components are mounted differently, reflecting their different frequency operation. The markings on the back of the module also makes this distinction.
el de 868MHz és el RF95 (però compte! perquè els dos xips estan marcats com a RF96). Revisar el video de l'enllaç (https://lowpowerlab.com/guide/moteino/transceivers/).
Footprint:
DIO2 - - GND DIO1 - - MISO 3.3V - - SCK DIO4 - - NSS DIO3 - - RESET GND - - DIO5 ANA - - GND
Compres
- Mòdul TP4056 per carregar bateries Li-Io tipus 18650.
5pcs TP4056 1A 5V Lithium Battery Charging Module Mini/Micro USB Interface. Cost: 3.50e
Com es veu en la imatge, a IN+/In- connectaré la meva placa solar, i la meva bateria 18650 la connectaré a Batt+/Batt-. A més, el circuit global l'alimentaré aquí, amb la bateria. Evidentment, l'objectiu del mòdul TP4056 és carregar la bateria Li-io. Hi ha dos leds: un de càrrega, i un altre de full.
El meu node és un Wemos TTGO LORA32 amb OLED. Les especificacions diuen que es pot alimentar entre 3.3 i 7V. Intentaré alimentar-lo amb una sola bateria Li-io de 3.7V.
- Flat Top 18650 Batería 9800mAh 3.7V Li-ion Recargable Battery
He comprat 4 unitats (8e)
També necessito les porta-piles per a les bateries 18650 de 3.7V
Panell solar: 8DE4 5W 5V USB Portátil Solar Panel De Viaje Camping Escalada Teléfono Móvil 7DE3
Allò interessant és que ja té la sortida USB (5V), que alimentarà directament el carregador TP4056. Cost: 3.6e.
Fins ara he treballat amb el Wemos TTGO (pantalla OLED). De cara al meu projecte té un desavantatge, i és que el connector d'antena tan petit que té segur que no és la millor opció. De cara a fer una antena pròpia, el que té sentit és poder soldar directament l'antena, i fer servir connectors més fiables. Per tant, el millor és utilitzar un RFM95 xino, que estarà connectat a un micro-arduino. A aquest RFM95 el podré soldar directament.
- Lora-TM Ultras Wireless transceptor modules 868MHz/915MHz/433 MHz RFM95/RFM96
- https://www.ebay.es/itm/Lora-TM-Ultras-Wireless-transceptor-modules-868MHz-915MHz-433-MHz-RFM95-RFM96/223060382946?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649
5,85e la unitat (2 unitats).
Els connectors per l'antena:
- PL259 Male to SMA Female cable (1x PL259 SMA Female to UHF Male RF Straight Pigtail Jumper RG58 Coax Cable 100cm -> aquí em vaig equivocar doncs havia de ser SMA male. Per això necessito l'adaptador SMA Macho a SMA Macho.)
- PL259 Female Connectoring (PL259 SO259 UHF Female Connector Chassis Mount Socket Jack Flange RG213 RG58)
- 2Pcs SMA Macho a SMA Macho Enchufe en serie RF Adaptador Coaxial Conector K&Y
Efectivament, existeix el PL259 Macho a SMA Macho que és el que havia d'haver comprat:
- Uhf PL259 Macho a SMA Macho Conector Coleta Extensión Cable 50 cm RG174
Boost Converter: 3.7V -> 6V (4.35e)
LM2587 DC-DC Boost Converter 3-30V Step up to 4-35V Power Supply Module MAX 5A
La idea era que amb la pila de 3.7V alimentar-ho tot. Però és una mica crític. Si em fixo bé en el projecte original (https://omkarjr.in/posts/projects/LoraTCL/), de la pila tinc un boost converter a 5-6V, i amb aquests volts alimento el pin RAW del Arduino Pro Mini, assegurat-me que el Vcc del Arduino Mini són 3.3V. Fent-ho d'aquesta manera no hi ha d'haver problema.
Microcontrolador: Arduino Pro Mini (versió 3.3V)
Compte perquè hi ha dues versions: el de 5V i el de 3.3V. Ara mateix no sé quin és el que tinc. Com s'identifica?
The regulator should be marked K850(5.0V) or K833(3.3V). The 16MHz resonator may be marked with "A1" or "A'N" The 8MHz resonator may be marked with "80'0" As others have indicated, you can apply up to 12V at the RAW pin, and measure the output of the regulator.
El tema és que els clons xinos (com el que tinc) no tenen perquè tenir aquestes referències. En el rellotge puc mirar si puc llegir 8 o 16. Però el més pràctic és aplicar 6-12V a RAW, i llegir el valor de Vcc.
Per al meu projecte necessito el de 3,3V, doncs la idea és alimentar el conjunt amb una sola pila de 3,7V.
Evidentment, no s'ha de confondre el Arduino Mini amb el Arduino Micro i el Arduino Nano. A més, l'Arduino Mini té una versió més petita, la Arduino Pro Mini, i és aquesta la que té dues versions (5V i 3.3V), i és la que m'interessa.
Construcció. KiCAD
Com a microcontrolador utilitzaré un Arduino pro mini (3.3V, 8MHz) compatible:
Pins: Veure info més detallada a: https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/1/0/4/graphicalDatasheet.png
DTR TXO RXI VCC GND GND TXO RAW RXI GND RST RST GND VCC 2 A3 3 A2 4 A1 5 A0 6 13 (CLK) 7 12 (MISO) 8 11 (MOSI) 9 10 GND A6 A7
Faig una llibreria per a KiCAD amb aquesta geometria i pinout. Separació entre pins: 2,54mm. Separació de les dues files: 15mm. Les files de dalt i baix no cal ficar-les, no les necessito.
Els 6 pins de dalt (DTR...GND) són els pins que necessito per al programador USB/FTDI.
Interface Arduino Pro Mini - RFM95
Segueixo els pins de:
Arduino Ard.Pin RFM95 RST RST RESET VCC 3.3V GND GND D4 4 DIO0 D5 5 DIO1 D6 6 DIO5 D7 7 DIO2 D10-SS 10 NSS MOSI 11 MOSI MISO 12 MISO CLK 13 SCK
Però compte, que aquest pinatge ha d'estar d'acord amb el codi del sketch (té a veure amb la llibreria LMIC). Sobretot pel que fa referència als DIOs (a quins pins digitals de l'Arduino van connectats).
placa v1
(TBD)
Software (sketch arduino)
Com que tinc un Arduino Pro Mini, necessitaré un FTDI-USB per programar l'Arduino.
article1:
- https://things4u.github.io/HardwareGuide/Arduino/Mini-Sensor-HTU21/mini-lora.html
- https://things4u.github.io/HardwareGuide/Arduino/Mini-Sensor-HTU21/mini-lowpower.html
(codi d'exemple)
fòrum1:
que ens porta a l'article2 i article3:
- article2: https://www.thethingsnetwork.org/labs/story/build-the-cheapest-possible-node-yourself
- article3: https://www.thethingsnetwork.org/labs/story/creating-a-ttn-node (aquest és el principal)
De tota la documentació que he mirat, implementaré l'exemple que es proposa en l'article3:
Creo l'aplicació dins de TTN, i dins de l'aplicació creo un Device:
A TheThingsNetwork creem una nova aplicació: application ID: lora_node_rfm95 Description: Node autònom amb Arduino Pro Mini, RFM95, alimentat per placa solar i pila Application EUIS: 70B3D57ED001464D { 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x01, 0x46, 0x4D } Dins de l'aplicació registrem un Device: REGISTER DEVICE Device ID: sensor01 Activation Method: OTAA Device EUI: 00AB372545ED3DA9 { 0x00, 0xAB, 0x37, 0x25, 0x45, 0xED, 0x3D, 0xA9 } Application EUI: 70B3D57ED001464D { 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x01, 0x46, 0x4D } App Key: 9077CF3E3E2FD06A4769D6AED54555EB { 0x90, 0x77, 0xCF, 0x3E, 0x3E, 0x2F, 0xD0, 0x6A, 0x47, 0x69, 0xD6, 0xAE, 0xD5, 0x45, 0x55, 0xEB } Example code: const char *appEui = "70B3D57ED001464D"; const char *appKey = "9077CF3E3E2FD06A4769D6AED54555EB"; static const u1_t DEVEUI[8] = { 0x00, 0xAB, 0x37, 0x25, 0x45, 0xED, 0x3D, 0xA9 }; static const u1_t APPEUI[8] = { 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x01, 0x46, 0x4D }; static const u1_t APPKEY[16] = { 0x90, 0x77, 0xCF, 0x3E, 0x3E, 0x2F, 0xD0, 0x6A, 0x47, 0x69, 0xD6, 0xAE, 0xD5, 0x45, 0x55, 0xEB };
Dins del sketch, a més, he de tenir la configuració correctta de com he implementat el protocol SPI, que té a veure com he connectat els pins del MCU amb el transceiver: (veure més amunt)
// Pin mapping is hardware specific. // Pin mapping Doug Larue PCB const lmic_pinmap lmic_pins = { .nss = 10, .rxtx = 0, //LMIC_UNUSED_PIN, .rst = 0, .dio = {4, 5, 7}, };
Llegir amb calma:
Per què necessito el protocol SPI? Doncs perquè aquesta és la manera de comunicar el MCU amb el transceiver (MOSI, MISO,...).
Control del consum
Un cop funcioni, com que l'objectiu és que sigui un mode autònom i que duri molt de temps, s'haurà de controlar el consum.
El primer aspecte de disseny per minimitzar el consum és l'el·lecció del MCU. El Arduino Pro Mini és de 8MHz (versió de 3.3V). La versió de 5V va a 16MHz.
Per controlar el consum res millor que un amperímetre. En el model que jo tinc, els cables són groc, verd i negre.
- El negre va al negatiu de la font que vull controlar
- El groc va al negatiu de la càrrega/motor que vull controlar
- El vermell va al positiu de la font i al positiu del motor/càrrega. És a dir, el positiu del motor i el positiu de la càrrega s'han de connectar. Si no connecto el vermell del amp/volt, l'amperímetre també llegeix el valor, la única cosa que el voltímetre no dóna el valor de la tensió. És normal que el valor de la tensió sigui una mica menys que la lectura en la font d'alimentació: quan es connecta una càrrega, hi ha una caiguda de tensió.
Com s'explica en l'article3 (https://www.thethingsnetwork.org/labs/story/creating-a-ttn-node), en l'apartat Low Power the ProMini (Optional - experienced users only), es pot desconnectar el regulador de tensió i els leds de l'Arduino per tal de minimitzar el consum.
A més, l'exemple que estic utilitzant té en ment minimitzar l'enviament de dades, i posa el MCU en mode sleep la major part del temps. El diagrama de blocs del codi seria el següent:
- The code prevents too much sending
- No higher frequency than once per minute (envia una dada cada minut)
- EV_TXCOMPLETE: part of the code executed after a transmission:
- Receive and handle incoming data
- Fire a new transmission
- Do_Send: part of the code to prepare the data to send:
- Beware of too much ASCII -> serialize your data!
- Put your processor to sleep if there is nothing to do:
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
En aquest codi s'envia una dada cada minut. Això s'aconsegueix
int sleepcycles = 7; // every sleepcycle will last 8 secs, total sleeptime will be sleepcycles * 8 sec ... i en el loop principal: sleeping = false; for (int i=0;i<sleepcycles;i++) { LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); //sleep 8 seconds }
Per tant, si vull enviar menys dades, la única cosa que he de fer és augmentar el número de cicles.
creat per Joan Quintana Compte, novembre 2018