Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Mesure n'importe quel courant alternatif avec ACS712

Composants et fournitures

Arduino UNO
× 1
OLED i²c 128x32
× 1
ACS712 30A
× 1
LCD 16x2 i²c
× 1

À propos de ce projet

S'IL VOUS PLAÎT SOYEZ PRUDENT SI VOUS UTILISEZ LA LIGNE ÉLECTRIQUE

Bonjour et bienvenue dans un autre tutoriel, celui-ci concerne la mesure du courant alternatif (AC), en utilisant ACS712 J'utilise la version 30Amps qui est ACS712 30A, et notre belle carte Arduino Uno, j'ai essayé d'ajouter un écran OLED mais malheureusement terminé jusqu'à le casser pendant le tournage du didacticiel, je suis donc passé à l'écran LCD, mais vous trouverez ci-dessous le câblage et les codes pour les deux versions.

Et par « Tout AC… », je veux dire que nous allons voir un code/une bibliothèque qui fonctionne pour tous les types de signaux, pas seulement une onde sinusoïdale, et notre ampèremètre sera capable de calculer la VRAIE RACINE MOYENNE SQUARE. Et notez que le capteur utilise l'effet Hall (production d'une différence de tension aux bornes d'un conducteur électrique, transversale à un courant électrique dans le conducteur et à un champ magnétique appliqué perpendiculaire au courant)

Vous pouvez combiner ce projet avec celui-ci :Mesure facile de la tension alternative à l'aide d'Arduino et de ZMPT101B

Les tests seront effectués sur une ampoule à incandescence, contrôlée par un variateur de lumière en série avec un multimètre de référence et le module capteur de courant ACS712.

Voici le plan :

  • Nous devons d'abord interfacer notre module avec la carte Arduino et vérifier la forme du signal lorsque le gradateur est allumé - Cycle complet - Demi-cycle.
  • Ensuite, nous allons vérifier un code simple qui ne nécessite aucune bibliothèque, mais qui ne fonctionne qu'avec le signal Sinewaves (il sera testé).
  • Après cela, nous allons voir le code qui mesurera le TRMS de l'AC, et utilisera l'écran LCD.

Pièces

S'il vous plaît soyez prudent lorsque vous choisissez l'ACS712, n'essayez pas de jouer prudemment comme je l'ai fait (en achetant une version 30Amps), cela donnera juste de grosses fluctuations lorsque vous essayez de l'utiliser pour un usage domestique ou des applications de petits amplis, alors voici pour moi une version 5A ou 10A aurait été bien. Notez également que 30A ou 20A… affecteront également vos étalonnages, mais il est expliqué comment étalonner en vidéo et dans les commentaires des codes.

Ce sont les pièces que j'ai utilisées, vous pouvez remplacer l'UNO par n'importe quelle carte compatible, ou ce LCD i²c par un OLED ou n'importe quel écran que vous préférez.

Essai 1

Câblage et code

Le câblage du test 1 se trouve ci-dessous (Câblage 1), à côté du code (Code 1).

Résultats

Téléchargez le code et lancez le traceur série, vous devriez pouvoir voir un signal de type onde sinusoïdale, la ligne rouge montre quand j'ai baissé le gradateur et le courant a commencé à avoir la forme que vous trouvez habituellement dans un triac.

Essai 2

Maintenant, si vous souhaitez mesurer le courant en utilisant uniquement le code ci-dessus, vous obtiendrez des valeurs d'environ 512 à 511, elles ne reflètent pas du tout la valeur RMS. Donc, pour mesurer la valeur RMS du signal, nous allons garder le même câblage que ci-dessus, mais nous avons maintenant besoin d'un autre code qui peut calculer le RMS.

Câblage et code

Le câblage est le même que (Câblage 1), mais avec un code différent peut être trouvé ci-dessous (Code 2).

Résultats

Comme vous pouvez le voir, les valeurs à gauche (RMS) sont les mêmes que la valeur mesurée par le multimètre, à droite ce sont les valeurs de crête à crête, et notez que le gradateur est à plein cycle car j'utilise une ampoule de 75W et 230VAC/50Hz.

!!!!!!!!!!!!!!!! MAIS !!!!!!!!!!!!!!!!!!!!!

Ici, j'ai baissé mon variateur de lumière à fond, ce qui signifie que je suis à environ 1/4 de cycle, le multimètre me donne 0,21 A mais mon code me donne 0,36 A, le code mesure toujours de crête à crête, mais comme vous pouvez le voir ci-dessus, mon signal n'est pas linéaire lorsque je baisse le gradateur à fond.

Et c'est la différence entre une mesure TRMS et une mesure qui ne fonctionne qu'avec un signal sinusoïdal.

Test 3

Maintenant, vous voyez le problème du code ci-dessus, mais heureusement, il existe une bibliothèque à la rescousse, j'apprécie vraiment cette bibliothèque pour tout le travail qu'elle fait car, comme vous le savez, si vous voulez calculer une valeur RMS, vous devez utiliser le calcul intégral, et c'est bien difficile à réaliser sur une carte de développement électronique, vous pouvez vérifier le fichier cpp de la bibliothèque pour voir quelles méthodes sont utilisées comme le « Moyen » « Sigma »… Des choses liées aux statistiques/probabilités….

Câblage, code et bibliothèque

Le câblage est le même que le câblage utilisé ci-dessus (Câblage 1), et ci-dessous vous pouvez trouver le code (Code 3).

Et ici, vous pouvez télécharger la bibliothèque de filtres :Téléchargez la bibliothèque ici

Résultats

Les résultats corrects sont au milieu, ceux de gauche sont sans calibrage et les bons sont utilisés pour montrer comment calibrer (consultez la vidéo).

Comme vous avez vu l'énorme différence entre les deux codes de réponse à un signal non linéaire, le second agit comme un multimètre TRMS.

Test avec LCD/OLED

Ici, nous gardons les mêmes choses que nous faisons, au lieu d'utiliser le moniteur série, nous pouvons utiliser un écran LCD ou OLED

Câblage, codes et bibliothèques

Les câblages se trouvent ci-dessous (Wiring_LCD) et (Wiring_OLED), les codes également ci-dessous (Code_ACS712_LCD) et (Code_ACS712_OLED).

Voici les bibliothèques OLED

https://github.com/adafruit/Adafruit_SSD1306https://github.com/adafruit/Adafruit-GFX-Library

Et voici la LCD_i2c_library

https://drive.google.com/file/d/1Oc56q2GPs5SOA-PdbVHHSxKCnI9KY5xd/view

Résultat

C'est le seul test que j'ai pu faire car j'ai cassé mon écran OLED en essayant de filmer le tutoriel vidéo. Globalement, cela fonctionne de la même manière que nous l'avons vu auparavant, il l'affiche simplement sur un écran LCD i²c. (Oui, les valeurs TRMS et non la méthode crête à crête).

C'est tout les amis, j'espère que ce tutoriel vous plaira, n'oubliez pas d'aimer le tutoriel vidéo et de vous abonner à la chaîne SurtrTech si vous voulez montrer votre soutien, merci beaucoup.

N'importe quelle question, laissez-la dans les commentaires.

Code

  • Code_1.ino
  • Code_2.ino
  • Code_3.ino
  • Code_ACS712_LCD.ino
  • Code_ACS712_OLED.ino
Code_1.inoArduino
Ce code sert à tester le module et visualiser la forme du signal
/*Ce code fonctionne avec le capteur de courant ACS712, il permet de lire les données brutes Il est préférable de l'utiliser avec Serial Plotter Plus de détails sur www.surtrtech.com*/ #define Current_sensor A0 //Le pinfloat d'entrée analogique du capteur i;void setup() {Serial.begin(9600);pinMode(Current_sensor, INPUT);}void loop() { i =analogRead(Current_sensor); Serial.println(i); retard (100); //Modifier ou supprimer le délai changera la façon dont le signal est affiché //définissez-le jusqu'à ce que vous obteniez la forme d'onde sinusoïdale correcte}
Code_2.inoArduino
Ce code utilise la méthode de mesure crête à crête pour calculer le RMS d'un signal sinusoïdal
/* Ce code fonctionne avec le capteur de courant ACS712, il permet de calculer le RMS d'un courant alternatif sinusoïdal * il utilise le Peak to Peak méthode pour calculer le RMS * Pour plus d'informations, consultez www.surtrtech.com */#define SAMPLES 300 //Nombre d'échantillons que vous souhaitez prendre à chaque boucle#define ACS_Pin A0 //ACS712 data pin analong inputfloat High_peak,Low_peak; //Variables pour mesurer ou calculerfloat Amps_Peak_Peak, Amps_RMS;void setup() { Serial.begin(9600); pinMode(ACS_Pin,ENTRÉE); //Définir le mode pin}boucle vide() { read_Amps(); //Lancer la fonction read_Amps Amps_RMS =Amps_Peak_Peak*0.3536*0.06; // Maintenant, nous avons la valeur crête à crête normalement, la formule ne nécessite que de multiplier par 0,3536 // mais comme les valeurs seront très grandes, vous devez multiplier par 0,06, vous ne pouvez d'abord pas l'utiliser, // faites vos calculs et comparez-les à valeurs réelles mesurées par un ampèremètre. Ex :0.06=Valeur réelle/Valeur mesurée Serial.print(Amps_RMS); //Ici je montre la valeur RMS et la valeur crête à crête, vous pouvez imprimer ce que vous voulez et ajouter le symbole "A"... Serial.print("\t"); Serial.println(Amps_Peak_Peak); délai (200);} void read_Amps() // la fonction read_Amps calcule la différence entre le pic haut et le pic bas { // obtient la valeur crête à crête int cnt; //Compteur High_peak =0; //Nous supposons d'abord que notre pic haut est égal à 0 et le pic bas est 1024, oui inversé Low_peak =1024; for(cnt=0; cnt High_peak) //Si cette valeur est supérieure au pic le plus élevé (au début est 0) { High_peak =ACS_Value; //Le pic haut passera de 0 à cette valeur trouvée } if(ACS_Value  
Code_3.inoArduino
Ce code utilise des formules statistiques pour calculer le TRMS d'un signal quelle que soit la sape et l'affiche sur le moniteur série
/* Ce code fonctionne avec le capteur de courant ACS712, il permet le calcul du signal TRMS * Visitez www.surtrtech.com pour plus de détails */#include  //Cette bibliothèque fait un travail énorme, vérifiez son fichier .cpp#define ACS_Pin A0 //Broche de données du capteur sur l'entrée analogique A0 flottant ACS_Value ; //Ici, nous gardons les valeurs de données brutessfloat testFrequency =50; // test de fréquence du signal (Hz)float windowLength =40.0/testFrequency; // combien de temps pour faire la moyenne du signal, pour statististfloat intercept =0; // à ajuster en fonction de la pente du flotteur de test d'étalonnage =0,0752 ; // à ajuster en fonction des tests d'étalonnage // Veuillez consulter la vidéo du didacticiel ACS712 de SurtrTech pour voir comment les obtenir car cela dépend de votre capteur, ou regardez ci-dessousfloat Amps_TRMS ; // courant réel estimé en ampsunsigned long printPeriod =1000; // en millisecondes// Temps de suivi en millisecondes depuis la dernière lecture non signé long previousMillis =0;void setup() { Serial.begin( 9600 ); // Démarrez le pinMode du port série (ACS_Pin, INPUT); //Définir le mode pin}boucle void() { RunningStatistics inputStats; // crée des statistiques pour examiner le signal de test brut inputStats.setWindowSecs( windowLength ); //Définir la longueur de la fenêtre while( true ) { ACS_Value =analogRead(ACS_Pin); // lit la valeur analogique :inputStats.input(ACS_Value); // connectez-vous à la fonction Stats if((unsigned long)(millis() - previousMillis)>=printPeriod) { //chaque seconde, nous effectuons le calcul previousMillis =millis(); // temps de mise à jour Amps_TRMS =intercept + pente * inputStats.sigma(); Serial.print( "\t Ampères:" ); Serial.print( Amps_TRMS ); } }}/* A propos de la pente et de l'interception * Vous devez d'abord savoir que tous les calculs TRMS sont effectués par des fonctions de la bibliothèque, c'est la valeur "inputStats.sigma()" * Au début vous pouvez afficher que "inputStats.sigma ()" comme valeur TRMS, puis essayez de mesurer en l'utilisant lorsque l'entrée est de 0,00A * Si la valeur mesurée est 0 comme je l'ai obtenu, vous pouvez conserver l'interception à 0, sinon vous devrez ajouter ou soustraire pour le faire valeur égale à 0 * Autrement dit " supprimer l'offset" * Puis mettez sous tension à une valeur connue, par exemple utilisez une ampoule ou une led dont ous connaissez sa puissance et que vous connaissez déjà votre tension, donc un peu de math vous' ll obtenir les ampères théoriques * vous divisez cette valeur théorique par la valeur mesurée et ici vous avez la pente, maintenant placez-les ou modifiez-les */
Code_ACS712_LCD.inoArduino
Ce code utilise la méthode de calcul TRMS et l'affiche sur le LCD i²c
/* Ce code fonctionne avec ACS712 et LCD ic * Il mesure le TRMS d'un courant alternatif et affiche la valeur sur l'écran * Visitez www.SurtrTech.com pour plus de détails */#include  //Cette bibliothèque fait un travail énorme vérifiez son fichier .cpp#include  //LCD ic library#define ACS_Pin A0 //ACS712 data pin#define I2C_ADDR 0x27 //Adresse I2C, vous devez d'abord utiliser le code pour scanner l'adresse (0x27) ici#define BACKLIGHT_PIN 3 // Déclaration des broches LCD#define En_pin 2#define Rw_pin 1#define Rs_pin 0#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7LiquidCrystal_I2C lcd (I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); //Déclarer le lcdfloat testFrequency =50; // test de fréquence du signal (Hz)float windowLength =40.0/testFrequency; // combien de temps pour faire la moyenne du signal, pour statististfloat intercept =0; // à ajuster en fonction de la pente du flotteur de test d'étalonnage =0,0752 ; // à ajuster en fonction des tests d'étalonnage // Veuillez consulter la vidéo du didacticiel ACS712 de SurtrTech pour voir comment les obtenir car cela dépend de votre capteur, ou regardez ci-dessousfloat Amps_TRMS ; float ACS_Value ; long non signé printPeriod =1000 ; unsigned long previousMillis =0;void setup() { digitalWrite(2,HIGH); lcd.begin (16,2); lcd.setBacklightPin(BACKLIGHT_PIN,POSITIF); lcd.setBacklight(HIGH); // Rétroéclairage lcd.home (); }boucle vide() { RunningStatistics inputStats; // crée des statistiques pour examiner le signal de test brut inputStats.setWindowSecs( windowLength ); while( true ) { ACS_Value =analogRead(ACS_Pin); // lit la valeur analogique :inputStats.input(ACS_Value); // connectez-vous à la fonction Stats if((unsigned long)(millis() - previousMillis)>=printPeriod) { //chaque seconde, nous effectuons le calcul previousMillis =millis(); // temps de mise à jour Amps_TRMS =intercept + pente * inputStats.sigma(); //Calibrer les valeurs lcd.clear(); //efface l'écran lcd et imprime dans une certaine position lcd.setCursor(2,0); lcd.print(Amps_TRMS); lcd.print("A"); } }}/* A propos de la pente et de l'interception * Vous devez d'abord savoir que tous les calculs TRMS sont effectués par des fonctions de la bibliothèque, c'est la valeur "inputStats.sigma()" * Au début vous pouvez afficher que "inputStats.sigma ()" comme valeur TRMS, puis essayez de mesurer en l'utilisant lorsque l'entrée est de 0,00A * Si la valeur mesurée est 0 comme je l'ai obtenu, vous pouvez conserver l'interception à 0, sinon vous devrez ajouter ou soustraire pour le faire valeur égale à 0 * Autrement dit " supprimer l'offset" * Puis mettez sous tension à une valeur connue, par exemple utilisez une ampoule ou une led dont ous connaissez sa puissance et que vous connaissez déjà votre tension, donc un peu de math vous' ll obtenir les ampères théoriques * vous divisez cette valeur théorique par la valeur mesurée et ici vous avez la pente, maintenant placez-les ou modifiez-les */
Code_ACS712_OLED.inoArduino
Ce code utilise la méthode de calcul TRMS et affiche la valeur sur l'OLED.
/* Ce code fonctionne avec ACS712 et OLED ic * Il mesure le TRMS d'un courant alternatif et affiche la valeur sur l'écran * Visitez www.SurtrTech. com pour plus de détails */#include  //Cette bibliothèque fait un travail énorme vérifiez son fichier .cpp#include  //Bibliothèques OLED#include #define ACS_Pin A0#define SCREEN_WIDTH 128 // Largeur d'affichage OLED, en pixels#define SCREEN_HEIGHT 32 // Hauteur d'affichage OLED, en pixels#define OLED_RESET -1 // Réinitialiser la broche # (ou -1 en cas de partage de la broche de réinitialisation Arduino)Float testFrequency =50; // test de fréquence du signal (Hz)float windowLength =40.0/testFrequency; // combien de temps pour faire la moyenne du signal, pour statististfloat intercept =0; // à ajuster en fonction de la pente du flotteur de test d'étalonnage =0,0752 ; // à ajuster en fonction des tests d'étalonnage // Veuillez consulter la vidéo du didacticiel ACS712 de SurtrTech pour voir comment les obtenir car cela dépend de votre capteur, ou regardez ci-dessousfloat Amps_TRMS ; float ACS_Value ; long non signé printPeriod =1000 ; non signé long previousMillis =0;Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Déclaration du nom d'affichage (display)void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Démarrer l'affichage OLED display.clearDisplay(); display.display();}void loop() { RunningStatistics inputStats; // crée des statistiques pour examiner le signal de test brut inputStats.setWindowSecs( windowLength ); while( true ) { ACS_Value =analogRead(ACS_Pin); // lit la valeur analogique :inputStats.input(ACS_Value); // se connecter à la fonction Stats if((unsigned long)(millis() - previousMillis)>=printPeriod) { //Faire les calculs toutes les 1s previousMillis =millis(); // temps de mise à jour Amps_TRMS =intercept + pente * inputStats.sigma(); display.clearDisplay(); display.setTextSize(3); display.setTextColor(BLANC); display.setCursor(15,10); display.print(Amps_TRMS); display.println("A"); display.display(); } }}/* A propos de la pente et de l'interception * Vous devez d'abord savoir que tous les calculs TRMS sont effectués par des fonctions de la bibliothèque, c'est la valeur "inputStats.sigma()" * Au début vous pouvez afficher que "inputStats.sigma ()" comme valeur TRMS, puis essayez de mesurer en l'utilisant lorsque l'entrée est de 0,00A * Si la valeur mesurée est 0 comme je l'ai obtenu, vous pouvez conserver l'interception à 0, sinon vous devrez ajouter ou soustraire pour le faire valeur égale à 0 * Autrement dit " supprimer l'offset" * Puis mettez sous tension à une valeur connue, par exemple utilisez une ampoule ou une led dont ous connaissez sa puissance et que vous connaissez déjà votre tension, donc un peu de math vous' ll obtenir les ampères théoriques * vous divisez cette valeur théorique par la valeur mesurée et ici vous avez la pente, maintenant placez-les ou modifiez-les */

Schémas

Câblage utilisé des tests 1,2 et 3 Utiliser l'écran LCD i²c Utilisez OLED 128x32

Processus de fabrication

  1. Comment mesurer la qualité de l'air sur OpenSensors
  2. Surveillance du CO2 avec le capteur K30
  3. Communication sourds-aveugles avec 1Sheeld/Arduino
  4. Contrôler l'accepteur de pièces avec Arduino
  5. Arduino avec Bluetooth pour contrôler une LED !
  6. Capteur d'empreintes digitales capacitif avec un Arduino ou ESP8266
  7. Jouer avec Nextion Display
  8. Bras robotique contrôlé par Nunchuk (avec Arduino)
  9. Animer une bouche de Billy Bass avec n'importe quelle source audio