Header Ads

Senseur de courant Alternatif ACS712 - senseur invasif

Description
Basé sur l'ACS712 d'Allegro, ce senseur se branche en série avec la charge sur un circuit alternatif et permet de mesurer le courant qui traverse le senseur.
Senseur ACSENS-ACS712 disponible chez MC Hobby

Le senseur utiliser le champ magnétique généré par le courant (et donc l'effet hall) pour mesurer le courant qui le traverse.. Le senseur produit en sortie une tension continue proportionnelle au courant à raison de 0.100V/A (100 mV par ampère). Vous pouvez donc lire cette tension sur une entrée analogique de votre Arduino.

Attention: ce senseur est sensible au champ magnétique, ce qui pourrait fausser vos lectures. Le simple fait d'approcher un aimant de l'ACS712 modifie la tension de sortie du senseur.

Note: Il est important de faire une lecture a vide (sans courant) pour obtenir la valeur de calibration du senseur.

Montage
Voici comment insérer un senseur ACS712 dans un circuit électrique.

Brancher un ACS712 sur un Arduino - Wiki.mchobby.be
Réseau électrique - Mise en garde
Le montage sur Breadboard ou plaque de prototypage expose la partie haute tension de votre montage à un contact accidentel. Faire des raccordements sur le réseau électrique n'est pas sans risque et certain accidents peuvent conduire à de graves brûlures, voire à la mort dans les cas les plus graves!
Il convient donc d'être prudent.
Si vous ne disposez pas de compétence en haute tension où si vous hésitez, n'hésitez pas à faire appel à quelqu'un disposant des compétences nécessaires.
Un fois votre montage/raccordement terminé, il est préférable de le placer dans un environnement permettant d'éviter tout contact accidentel (ex: une boite hermétique prévu à cet effet). Toujours fixer un senseur/composant/montage pouvant exposer un risque de contact avec sa partie haute tension. 

Le code
float zero_senseur; 
int PIN_ACS712 = A0;

// Obtient la valeur du senseur de courant ACS712
//
// Effectue plusieurs lecture et calcule la moyenne pour pondérer
// la valeur obtenue.
float valeurACS712( int pin ){
  int valeur;
  float moyenne = 0;
  
  int nbr_lectures = 50;
  for( int i = 0; i < nbr_lectures; i++ ){
      valeur = analogRead( pin );
      moyenne = moyenne + float(valeur);
  }
  moyenne = moyenne / float(nbr_lectures);
  return moyenne;
}

void setup(){
  // calibration du senseur  (SANS COURANT)
  zero_senseur = valeurACS712( PIN_ACS712 );
  
  Serial.begin( 9600 );
}

float courant; 
float courant_efficace;     
float tension_efficace = 230; // tension efficace du réseau electrique
float puissance_efficace; 
float ACS712_RAPPORT = 100; // nbr de millivolts par ampère

void loop(){
  float valeur_senseur = valeurACS712( PIN_ACS712 );
  // L'amplitude en courant est ici retournée en mA
  // plus confortable pour les calculs
  courant = (float)(valeur_senseur-zero_senseur)/1024*5/ACS712_RAPPORT*100000;
  // Courant efficace en mA
  courant_efficace = courant / 1.414; // divisé par racine de 2

  // Calcul de la puissance.
  //    On divise par 1000 pour transformer les mA en Ampère
  puissance_efficace = (courant_efficace * tension_efficace/1000);
  
  Serial.println( "zero_senseur - lecture - courant efficace (mA) - Puissance (W)" );
  Serial.print( zero_senseur );
  Serial.print( " - " );
  Serial.print( valeur_senseur );
  Serial.print( " - " );
  Serial.print( courant_efficace );
  Serial.print( "mA - " );
  Serial.print( puissance_efficace );
  Serial.println( " W" );
  
  delay( 1000 ); // attendre une seconde 
}

Où acheter