LoRaWan: Dispositif Longue Durée

Dans le but d’obtenir un objet connecté totalement autonome et n’ayant besoin d’aucune intervention humaine sur plusieurs mois, voire plusieurs années, plusieurs articles ont été fusionné afin d’atteindre cet objectif:

  • Capteur humidité et température, transmission LoRaWAN vers TTN;
  • LoRaWan: Mise en veille avec RTC externe;
  • LoRaWan: Mesure d’un voltage par les pins.

Matériel:

Carte Seeeduino LoRaWan, trouvable ici;

Carte Seeeduino LoRaWan

DS3231, une RTC précise et économe en énergie, trouvable ici;

DS3231

« Charge & discharge »(DD04 CVSA) : Module de gestion de la charge et décharge, trouvable ici.

Il gère automatiquement la recharge et la décharge entre la batterie, la source d’alimentation et l’appareil à alimenter.

(DD04 CPMA) : Module de protection des surintensités 3,7-4,2V, trouvable ici.

Il protège une batterie li-po des surintensités.

Panneau Solaire.

La source d’alimentation peut-être une autre énergie renouvelable comme l’éolien. Ce panneau délivre 6V.

2 Batteries li-po 3,7V et 1400mAh (elles seront en dérivation).

Une batterie li-po de 3,7V.

2 résistances de 1KOhm et ~255KOhm.

Branchements:

Schéma du dispositif longue durée.

Code:

#include "LowPower.h"
#include <DS3232RTC.h>
#include <time.h>
#include <Wire.h>
#include <LoRaWan.h>


char buffer[256];

DS3232RTC myRTC(false);

int i = 0;

void initLora() { //initialisation de la carte pour l'envoide des données
  
  lora.init();


  memset(buffer, 0, 256);
  lora.getVersion(buffer, 256, 1);
    
  memset(buffer, 0, 256);
  lora.getId(buffer, 256, 1);

  lora.setId("260112FD", "008ACA85645E38F9", "70B3D57ED00093DB");

  lora.setKey("1627D96A73B10A8A2481C9207E7C15F5", "17B96E838DAD796458B63E5500C21419", NULL);
  
  lora.setDeciveMode(LWABP);
  lora.setDataRate(DR0, EU868);
  
  lora.setChannel(0, 868.1);
  lora.setChannel(1, 868.3);
  lora.setChannel(2, 868.5);
  
  lora.setReceiceWindowFirst(0, 868.1);
  lora.setReceiceWindowSecond(869.5, DR3);

  lora.setDutyCycle(false);
  lora.setJoinDutyCycle(false);

  lora.setPort(1);
}

void wakeUp() //Contient des codes qui seront executés au début d'un reveil.
{
  myRTC.alarm(ALARM_1);
}

void setup() {

  initLora();

  pinMode(0, INPUT);

  myRTC.begin();

  myRTC.alarmInterrupt(ALARM_1, true);

  myRTC.setAlarm(ALM1_MATCH_MINUTES, 5, 0, 0, 1);

  lora.init();
  lora.setDeviceLowPower();

  attachInterrupt(0, wakeUp, LOW);

  myRTC.alarm(ALARM_1);
  
}

void loop() {
    
    int temperature = 1;
    int hymidity = 2;    
    int voltage = 0;

    for(i=0; i<20; i++){
      voltage = voltage + analogRead(0);
      delay(50);
    }

    voltage = voltage/20;
    voltage = voltage / 2.44;
  
    byte data[6];
    data[0] = temperature >> 8;
    data[1] = temperature & 0xFF;
    data[2] = hymidity >> 8;
    data[3] = hymidity & 0xFF;
    data[4] = voltage >> 8;
    data[5] = voltage & 0xFF;
      
    lora.transferPacket(data, 6);

    LowPower.standby();


}
Code Dispositif longue durée

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *