View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Test du capteur de courant ACS714 avec affichage sur écran LCD (ampèremètre 30A)

ARDUINO - CAN - LCD
Par X. HINAULT - Créé le 14/03/2010

1.  Présentation

Ce programme mesure une intensité à l'aide du capteur de courant 30 A ACS714 et affiche le résultat sur un écran LCD

Ce programme utilise les fonctionnalités suivantes :

  • un afficheur LCD alphanumérique 4x20 en mode 4 bits
  • la conversion analogique numérique 10bits sur les voies analogiques analog 0,

Voir la page : Capteur de courant -30A/+30A ACS 714

A noter que la capteur 30 A a un sensibilité moyenne de l'ordre de 66mV/A. Pour plus de précisions, préférer la modèle 5A qui a une précision de 180mV/A environ. Tout dépend de ce que l'on veut mesurer.

2.  Matériel Nécessaire

2.1  L'espace de développement Arduino

  • ... pour éditer, compiler le programme et programmer la carte Arduino.

2.2  Le matériel suivant pour réaliser le montage associé

  • une plaque d'essai pour montage sans soudures,
  • des straps,
  • Un capteur de courant ACS714

Acheté ici ( 9 Euros TTC seulement !) : http://www.watterott.com/en/ACS714-Current-Sensor-Carrier-30-to-30A
Une carte de chez Pololu : http://www.pololu.com/catalog/product/1187
Fiche technique (datasheet)du CI ACS714 : Datasheet du capteur ACS 714 - fabricant Allegro

3.  Note technique

Un point important dans l'utilisation de ce capteur est que la résistance interne du convertisseur analogique-numérique crée un pont diviseur avec une résistance de sortie interne au capteur. Il en résulte une tension d'atténuation Vatt = Vo x k.

Pour connaître le facteur k, il suffit de faire le rapport Vo réelle / Vo théorique = k. Le plus simple est de faire une mesure de Vo à vide. Dès lors on a :

k = Vo à vide réelle / Vo à vide théorique = Vo à vide réelle / 2500 (en mV)

Et pour toute mesure on aura : Vo théorique = Vo réel / k = Vo réel x 2500 / Vo réel à vide

En ce qui me concerne, j'ai trouvé Vo réel à vide à 2443mV.

Voir le datasheet, notamment la figure 6 pour plus de détails. Voir également le programme ci-dessous.

4.  Instructions de montage

  • Connecter sur la broche 6 la broche RS du LCD
  • Connecter sur la broche 7 la broche E du LCD
  • Connecter sur la broche 8 la broche D4 du LCD
  • Connecter sur la broche 9 la broche D5 du LCD
  • Connecter sur la broche 10 la broche D6 du LCD
  • Connecter sur la broche 11 la broche D7 du LCD
  • Broche Analog 0 (=broche 14) en entrée Analogique

5.  Le schéma théorique du montage


Le schéma théorique du montage

6.  Le circuit du montage


Le schéma du montage à réaliser

7.  Explication du programme

7.1  Structure globale du programme

Ce programme simple comprend :

  • une entête déclarative
  • une partie « configuration » qui ne sera exécutée qu'une fois (fonction setup( ) )
  • une partie constituée d'une boucle sans fin que le programme répètera à l'infini ( fonction loop( ) ) : c'est le coeur du programme.

7.2  Déroulement du programme

Le programme se déroule de la façon suivante :

  • Après avoir pris en compte les instructions de la partie déclarative,
  • puis après avoir exécuté la partie configuration ( fonction setup( ) ),
  • le programme bouclera sans fin ( fonction loop ( ) ), exécutant de façon répétée le code compris dans la boucle sans fin.

Le déroulement du programme

8.  Au niveau de la partie déclarative :

Inclusion des librairies utilisées

  • On inclut les librairies des fonctionnalités utilisées :
    • Inclusion de la librairie pour l'afficheur LCD alphanumérique :

#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD 

Déclaration de constantes utiles

  • On déclare les constantes utiles dans le programme :

Déclaration des constantes de broches

  • Déclaration des constantes pour les broches utilisées dans le programme :

const int RS=6; //declaration constante de broche 
const int E=7; //declaration constante de broche 
const int D4=8; //declaration constante de broche 
const int D5=9; //declaration constante de broche 
const int D6=10; //declaration constante de broche 
const int D7=11; //declaration constante de broche 
const int Voie_0=0; //declaration constante de broche analogique

Déclaration des variables globales

  • Déclaration des variables globales du programmes :
    • Déclaration des variables globales utilisées pour la conversion analogique-numérique
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique
float mesuref=0.0;// Variable pour calcul résultat décimal de conversion analogique numérique


Déclarations des objets utiles pour les fonctionnalités utilisées

  • Déclaration des objets utiles pour les fonctionnalités utilisées :
    • Déclaration d'un objet LCD alphanumérique :

LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// Création d'un objet LiquidCrystal = initialisation LCD en mode 4 bits 


9.  Au niveau de la fonction d'initialisation setup( ) :

Initialisation des fonctionnalités utilisées :

  • On initialise les différentes fonctionnalités utilisées :
    • Initialisation de l'utilisation de l'afficheur LCD alpha-numérique
lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes 

delay(10); // pause rapide pour laisser temps initialisation


  • Test de l'afficheur LCD alpha-numérique
// Test du LCD

lcd.print("LCD OK") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes

lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(10); // pour laisser temps effacer écran


configuration des broches utilisées :

  • Configuration des broches en sortie :


  • Configuration des broches en entrée :


  • Activation du rappel au + interne des broches en entrée si nécessaire :


10.  Au niveau de la boucle principale, la fonction loop ( ) :

  • ...

// --- ici instructions à exécuter par le programme principal ---

  • ...

// --- ici instructions à exécuter par le programme principal ---

  • Le programme recommence en boucle les instructions de la fonction loop( ).

Se reporter aux commentaires présents dans le programme pour plus de détails.

11.  Autres Fonctions du programme :

  • ...

// --- ici instructions à exécuter par la fonction ---

12.  Mise en oeuvre du programme

12.1  Préparation du montage et programmation de la carte Arduino :

  • Commencer par réaliser le montage indiqué sur plaque d'expérimentation
  • Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle

12.2  Fonctionnement

  • ...

13.  Le programme complet en langage Arduino :

A copier/coller directement dans l'éditeur Arduino


// --- Programme Arduino ---
// par X. HINAULT - Le 13/03/2010
// www.mon-club-elec.fr 

// --- Que fait ce programme ? ---
/* mesure une intensité à l'aide du capteur de courant 30 A ACS714
et affiche le résultat sur un écran LCD

le capteur fournit une tension de sortie analogique 2.5V +/- 66mV/A

*/

// --- Fonctionnalités utilisées ---
// Utilise un afficheur LCD alphanumérique4x20 en mode 4 bits 
// Utilise la conversion analogique numérique 10bits sur les voies analogiques  analog 0, 

// --- Circuit à réaliser ---

// Connecter  sur la broche 6 la broche RS du LCD
// Connecter  sur la broche 7 la broche E du LCD
// Connecter  sur la broche 8 la broche D4 du LCD
// Connecter  sur la broche 9 la broche D5 du LCD
// Connecter  sur la broche 10 la broche D6 du LCD
// Connecter  sur la broche 11 la broche D7 du LCD
// Broche Analog 0 (=broche 14) en entrée Analogique 

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD 

// --- Déclaration des constantes ---

// --- constantes des broches ---

const int RS=6; //declaration constante de broche 
const int E=7; //declaration constante de broche 
const int D4=8; //declaration constante de broche 
const int D5=9; //declaration constante de broche 
const int D6=10; //declaration constante de broche 
const int D7=11; //declaration constante de broche 
const int Voie_0=0; //declaration constante de broche analogique

// --- Déclaration des variables globales ---
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique
float mesuref=0.0;// Variable pour calcul résultat décimal de conversion analogique numérique

long intensite; // variable de calcul de l'intensite

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// Création d'un objet LiquidCrystal = initialisation LCD en mode 4 bits 


//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage --- 

lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes 

delay(10); // pause rapide pour laisser temps initialisation

// Test du LCD

lcd.print("LCD OK") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes

lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(10); // pour laisser temps effacer écran


// ------- Broches en sortie -------  


// ------- Broches en entrée -------  


// ------- Activation du rappel au + interne des broches en entrée si nécessaire -------  


} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal --- 

// --- mesure brute ---
mesure_brute=analogRead (Voie_0); // réalise une mesure analogique sur la voie 0

lcd.setCursor(0,0); 
lcd.print("CAN brute = ");
lcd.print(mesure_brute); 
lcd.print(" "); // espace propreté

// --- tension en mV ---
//mesure_brute=mesure_brute-512; // sortie analogique centrée sur 2.5V
mesuref=mesure_brute*5000.0/1023.0; // calcul de la tension en mV
mesuref=mesuref*2500.0/2443.0; // correction diviseur tension sortie capteur Vo théorique àvide / Vo réel à vide
// cf fig 6 datasheet capteur acs714
mesuref=mesuref-2500.0; // sortie analogique centrée sur 2.5V 

lcd.setCursor(0,1); 
lcd.print("Mesure mV = ");
lcd.print(mesuref,2); // float avec 2 décimales
lcd.print(" "); // espace propreté

// ---- calcul intensité en mA --- 
intensite=map(long(mesuref),0,66,0,1000); // calcul intensité en mA

lcd.setCursor(0,2); 
lcd.print("Intensite = ");
lcd.print(intensite); 
lcd.print("   "); // espace propreté

delay(100); // entre 2 mesures

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

//*************** Autres Fonctions du programme *************

// --- Fin programme ---