Lecteur de courant élevé avec le ESP32

Lecture de courant par effet Hall utilisant deux circuits D-1085 basé sur le ACS758 – 50 ampères

Affichage du résultat sur tout mobile ou ordinateur compatible Bluetooth à partir d’un émulateur de terminal

Datasheet du D-1085

Affichage des lectures capturées avec l’application « Serial Bluetooth Terminal » sur Android

Programme « lecture_courant_D-1085_50_amp_plus_ADS1115_00.ino »

/*
*   lecture_courant_D-1085_50_amp_plus_ADS1115_00
*   
*  Création : 2021-11-13
*  Auteur : Richard Morel 
*  
*  Lecture de courant par effet Hall
*  deux circuits D-1085 basé sur le ACS758 - 50 ampères
*  
*  Affichage du résultat sur tout mobile ou ordinateur compatible Bluetooth,
*  à partir d'un émulateur de terminal
*  
*  #18 ADS1115 Analog-to-Digital Converter Tutorial
*  https://www.youtube.com/watch?v=tnfBslyfLRQ&list=PLrfG_Hi1Epg5ChswqLZT6xrwM1xCCeVi8&index=7&t=347s
*  
*  Remarque :
*  L'ACS758 donne un écart de voltage de sortie différent selon le sens du courant 
*  pour un courant de même valeur.
*  
*  La source d'alimentation 5 volts doit être très stable
*  
*  
*/


#include<ADS1115_lite.h>
ADS1115_lite ads(ADS1115_DEFAULT_ADDRESS);  // 0x48 addr pin connected to GND

float   VoltageLeft;
float   VoltageRight;
int16_t adc0;
int16_t adc1;
float   AmpLeft;
float   AmpRight;
float   voltInullLeft   = 2.512;
float   voltInullRight  = 2.509;
float   sensitivityACS758_50A_Left  = 0.040; // Volt/A
float   sensitivityACS758_50A_Right = 0.040; // Volt/A

//******  Bluetooth pour le transfert de données *********************
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
BluetoothSerial SerialBT;

#define MAX_PACKETSIZE 32   //Serial receive buffer
char buffUART[MAX_PACKETSIZE];
unsigned int buffUARTIndex = 0;
unsigned long preUARTTick  = 0;

// *******  Traite les échanges sur BLUETOOTH ******** 
 #include "echange_Bluetooth_et_traitement.h"

//************************************************************************
//
// FONCTION FONCTION FONCTION FONCTION FONCTION FONCTION FONCTION FONCTION
//
//************************************************************************


void ads_config(){
  ads.setGain(ADS1115_REG_CONFIG_PGA_6_144V); // +/-6.144V range = Gain 2/3 - 1 bit =0.1875mV
  ads.setSampleRate(ADS1115_REG_CONFIG_DR_8SPS); // Set to the fastest MODE 8Samples per sec
  //ads.setSampleRate(ADS1115_REG_CONFIG_DR_860SPS); // Set to the fastest MODE 860Samples per sec
}

int16_t ads_read_0(){ 
  ads.setMux(ADS1115_REG_CONFIG_MUX_SINGLE_0);  // Single mode input on AIN0 (AIN0 - GND)
  ads.triggerConversion();  // Triggered mannually 
  return ads.getConversion();  // returns int16_t value
}

int16_t ads_read_1(){ 
  ads.setMux(ADS1115_REG_CONFIG_MUX_SINGLE_1);  // Single mode input on AIN1 (AIN1 - GND)
  ads.triggerConversion();  // Triggered mannually 
  return ads.getConversion();  // returns int16_t value
}

//************************************************************************
//
// SETUP   SETUP   SETUP   SETUP   SETUP   SETUP   SETUP  SETUP  SETUP
//
//************************************************************************

void setup(){
  Serial.begin(115200);
  delay(10); 
  Serial.println("Programme : lecture_courant_D-1085_50_amp_plus_ADS1115_00");

  ads_config(); // call to ads_config function
  
  // *********** BLUETOOTH ****************************
  // Ce Bluetooth n'est pas pris en charge pas IOS
  if(!SerialBT.begin("ESP32_Telemetrie_00")){ //Bluetooth device name , NIP non disponible
    Serial.println("Erreur lors de l'initialisation du Bluetooth");
  }else{
    Serial.println("Bluetooth initialisé");
  } 

  Serial.println("PRÊT");
}

//************************************************************************
//
// LOOP   LOOP   LOOP   LOOP   LOOP   LOOP   LOOP  LOOP  LOOP
//
//************************************************************************


void loop(){

  adc0 = (ads_read_0());
  VoltageLeft = (adc0 * 0.1875)/1000;
  AmpLeft= (VoltageLeft-voltInullLeft)/sensitivityACS758_50A_Left;

  //Serial.println(adc0);
  /*Serial.print(" VoltageLeft : ");
  Serial.print(VoltageLeft, 3);
  Serial.print(" AmpLeft :");
  Serial.print(AmpLeft);*/
  
  adc1 = (ads_read_1());
  VoltageRight = (adc1 * 0.1875)/1000;
  AmpRight= (VoltageRight-voltInullRight)/sensitivityACS758_50A_Right;

  //Serial.println(adc1);
  /*Serial.print(" *** VoltageRight : ");
  Serial.print(VoltageRight, 3);
  Serial.print(" AmpRight :");
  Serial.println(AmpRight);*/
  



  envoieDataVersClient();

   delay(300);
}

« echange_Bluetooth_et_traitement.h »

// ------------------------------------------------------------------------------- 
//            ÉCHANGE ET TRAITEMENT BLUETOOTH
// ------------------------------------------------------------------------------- 
//
//***** Renvoi des données du ESP32 vers le Client ****
// ****Trame de réponse : [ |DATA|#|#|#|#|#| ]  # est un nombre.
void envoieDataVersClient(){
      //delay(0);
      int inPauseDeTransmission = 0;  // > 50 Temporisation pour éviter les engorgements si requis 
      SerialBT.print("[ |");                     delay(inPauseDeTransmission);
      SerialBT.print("VoltageLeft|");            delay(inPauseDeTransmission);
      SerialBT.print(VoltageLeft, 3);            delay(inPauseDeTransmission);
      SerialBT.print("|");                       delay(inPauseDeTransmission);
      SerialBT.print("Courant Moteur Gauche|");  delay(inPauseDeTransmission);
      SerialBT.print(AmpLeft);                   delay(inPauseDeTransmission);
      SerialBT.print("|");                       delay(inPauseDeTransmission);
      SerialBT.print("VoltageRight|");           delay(inPauseDeTransmission);
      SerialBT.print(VoltageRight, 3);           delay(inPauseDeTransmission);
      SerialBT.print("|");                       delay(inPauseDeTransmission);
      SerialBT.print("Courant Moteur Droit");    delay(inPauseDeTransmission);
      SerialBT.print("|");                       delay(inPauseDeTransmission);
      SerialBT.print(AmpRight);                  delay(inPauseDeTransmission);
      SerialBT.print("| ]");                     delay(inPauseDeTransmission);
      SerialBT.print("\n");
}