Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Messen Sie jeden Wechselstrom mit ACS712

Komponenten und Verbrauchsmaterialien

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

Über dieses Projekt

BITTE SEIEN SIE VORSICHTIG, WENN SIE DIE STROMLEITUNG VERWENDEN

Hallo und willkommen zu einem anderen Tutorial, in diesem geht es um das Messen von Wechselstrom (AC), mit ACS712 Ich verwende die 30Amps-Version, die ACS712 30A ist, und unser schönes Arduino Uno-Board, ich habe versucht, einen OLED-Bildschirm hinzuzufügen, aber leider beendet Ich habe es während des Drehs des Tutorials abgebrochen, also wechselte ich zum LCD, aber unten finden Sie die Verkabelung und die Codes für beide Versionen.

Und mit „Any AC…“ meine ich, dass wir einen Code/eine Bibliothek sehen werden, die für alle Signaltypen funktioniert, nicht nur für Sinuswellen, und unser Amperemeter wird in der Lage sein, das TRUE ROOT MEAN SQUARE zu berechnen. Beachten Sie, dass der Sensor den Hall-Effekt nutzt (Erzeugung einer Spannungsdifferenz über einen elektrischen Leiter, quer zu einem elektrischen Strom im Leiter und zu einem angelegten Magnetfeld senkrecht zum Strom)

Sie können dieses Projekt mit diesem kombinieren:Einfache Messung der Wechselspannung mit Arduino und ZMPT101B

Die Tests werden an einer Glühbirne durchgeführt, die von einem Lichtdimmer in Reihe mit einem Referenzmultimeter und dem Stromsensormodul ACS712 gesteuert wird.

Hier ist der Plan:

  • Zuerst müssen wir unser Modul mit dem Arduino-Board verbinden und die Signalform überprüfen, wenn der Dimmer eingeschaltet ist – Vollzyklus – Halbzyklus.
  • Dann prüfen wir einen einfachen Code, der keine Bibliothek benötigt, aber nur mit Sinuswellen funktioniert (wird getestet).
  • Danach sehen wir den Code, der die TRMS des AC misst, und verwenden das LCD.

Teile

Seien Sie bitte vorsichtig bei der Auswahl des ACS712, versuchen Sie nicht, auf Nummer sicher zu gehen (indem Sie eine 30-Ampere-Version kaufen). für mich wäre eine 5A oder 10A Version in Ordnung gewesen. Beachten Sie auch, dass 30A oder 20A … auch Ihre Kalibrierungen beeinflussen, aber es wird in Video- und Codekommentaren erklärt, wie man kalibriert.

Das sind die Teile, die ich verwendet habe, Sie können die UNO durch jedes kompatible Board ersetzen, oder das LCD i²c durch ein OLED oder ein beliebiges Display, das Sie bevorzugen.

Test 1

Verkabelung und Code

Die Verdrahtung für Test 1 finden Sie unten (Verdrahtung 1) neben dem Code (Code 1).

Ergebnisse

Laden Sie den Code hoch und starten Sie den seriellen Plotter. Sie sollten in der Lage sein, ein sinusförmiges Signal zu sehen. Die rote Linie zeigt, wenn ich den Dimmer heruntergedreht habe und der Strom begann, die Form zu haben, die Sie normalerweise in einem Triac finden.

Test 2

Wenn Sie nun den Strom nur mit dem obigen Code messen möchten, erhalten Sie Werte um 512 – 511, sie spiegeln den RMS-Wert überhaupt nicht wider. Um den RMS-Wert des Signals zu messen, behalten wir die gleiche Verdrahtung wie oben bei, aber jetzt benötigen wir einen anderen Code, der den RMS-Wert berechnen kann.

Verkabelung und Code

Die Verdrahtung ist die gleiche wie (Wiring 1), jedoch mit einem anderen Code unten (Code 2).

Ergebnisse

Wie Sie sehen können, sind die Werte auf der linken Seite (RMS) die gleichen wie die vom Multimeter gemessenen Werte, auf der rechten Seite sind dies Peak-to-Peak-Werte. Beachten Sie, dass der Dimmer im vollen Zyklus arbeitet, da ich eine 75-W-Glühbirne verwende und 230VAC/50Hz.

!!!!!!!!!!!!!!! ABER !!!!!!!!!!!!!!!!!!!!!

Hier habe ich meinen Lichtdimmer ganz heruntergedreht, was bedeutet, dass ich ungefähr 1/4 eines Zyklus habe, das Multimeter gibt mir 0,21 A, aber mein Code gibt mir 0,36 A, der Code misst immer noch von Spitze zu Spitze, aber Wie Sie oben sehen können, ist mein Signal nicht linear, wenn ich den Dimmer ganz herunterdrehe.

Und das ist der Unterschied zwischen einer TRMS-Messung und einer Messung, die nur mit Sinuswellensignalen arbeitet.

Test 3

Jetzt sehen Sie das Problem des obigen Codes, aber zum Glück gibt es eine Bibliothek zur Rettung. Ich schätze diese Bibliothek wirklich für all die Arbeit, die sie leistet, denn wie Sie wissen, müssen Sie Integralrechnung verwenden, wenn Sie einen RMS-Wert berechnen möchten, und das ist auf einem elektronischen Entwicklungsboard sehr schwer zu erreichen, Sie können die cpp-Datei der Bibliothek überprüfen, um zu sehen, welche Methoden verwendet werden, wie z

Verkabelung, Code und Bibliothek

Die Verdrahtung ist die gleiche wie die oben verwendete (Verdrahtung 1), und unten finden Sie den Code (Code 3).

Und hier können Sie die Filterbibliothek herunterladen:Laden Sie die Bibliothek hier herunter

Ergebnisse

Die korrekten Ergebnisse sind in der Mitte, die linken sind ohne Kalibrierung und die rechten werden verwendet, um die Kalibrierung zu demonstrieren (siehe Video).

Wie Sie gesehen haben, reagieren die beiden Codes auf ein nicht lineares Signal, aber der zweite fungiert als TRMS-Multimeter.

Test mit LCD/OLED

Hier behalten wir die gleichen Dinge bei. Alles, was wir tun, ist, anstatt den seriellen Monitor zu verwenden, können wir LCD oder OLED verwenden

Verkabelung, Codes und Bibliotheken

Die Verdrahtungen finden Sie unten (Wiring_LCD) und (Wiring_OLED), Codes auch unten (Code_ACS712_LCD) und (Code_ACS712_OLED).

Hier sind die OLED-Bibliotheken

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

Und hier ist die LCD_i2c_library

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

Ergebnis

Dies ist der einzige Test, den ich durchführen konnte, weil ich meinen OLED-Bildschirm zerbrochen habe, als ich versuchte, das Video-Tutorial zu drehen. Insgesamt funktioniert dies genauso, wie wir es zuvor gesehen haben, es wird nur auf einem LCD-i²c-Bildschirm angezeigt. (Ja, die TRMS-Werte sind nicht die Spitze-zu-Spitze-Methode).

Das ist alles Leute, ich hoffe, euch gefällt dieses Tutorial. Vergesst nicht, das Video-Tutorial zu liken und den SurtrTech-Kanal zu abonnieren, wenn ihr Unterstützung zeigen wollt, vielen Dank.

Jede Frage lass es in den Kommentaren.

Code

  • Code_1.ino
  • Code_2.ino
  • Code_3.ino
  • Code_ACS712_LCD.ino
  • Code_ACS712_OLED.ino
Code_1.inoArduino
Dieser Code dient zum Testen des Moduls und zur Visualisierung der Signalform
/*Dieser Code funktioniert mit dem ACS712 Stromsensor, er ermöglicht das Lesen der Rohdaten Es ist besser, ihn mit einem seriellen Plotter zu verwenden Weitere Details auf www.surtrtech.com*/ #define Current_sensor A0 // Der analoge Sensoreingang Pinfloat i;void setup () {Serial.begin (9600); pinMode (Current_sensor, INPUT);}void loop () { i =analogRead (Current_sensor); Serial.println(i); Verzögerung (100); //Das Ändern oder Entfernen der Verzögerung ändert die Art und Weise, wie das Signal angezeigt wird //stellen Sie es ein, bis Sie die richtige Sinuswellenform erhalten}
Code_2.inoArduino
Dieser Code verwendet die Spitze-Spitze-Messmethode, um den Effektivwert eines Sinuswellensignals zu berechnen
/* Dieser Code funktioniert mit dem ACS712-Stromsensor, er ermöglicht die Berechnung des Effektivwerts eines sinusförmigen Wechselstroms * er verwendet den Spitze-Spitze-Wert Methode zur Berechnung des RMS * Weitere Informationen finden Sie unter www.surtrtech.com */#define SAMPLES 300 //Anzahl der Samples, die Sie bei jeder Schleife nehmen möchten#define ACS_Pin A0 //ACS712 Datenpin analog inputfloat High_peak,Low_peak; // Variablen zum Messen oder Berechnen des Float Amps_Peak_Peak, Amps_RMS;void setup () { Serial.begin (9600); pinMode (ACS_Pin, EINGANG); // Pin-Modus definieren} ungültige Schleife () {read_Amps (); // Starten Sie die Funktion read_Amps Amps_RMS =Amps_Peak_Peak * 0,3536 * 0,06; //Jetzt haben wir den Spitze-zu-Spitze-Wert normalerweise erfordert die Formel nur das Multiplizieren mit 0,3536 //aber da die Werte sehr groß sind, sollten Sie mit 0,06 multiplizieren, Sie können es zuerst nicht verwenden, // Ihre Berechnungen durchführen und mit vergleichen reale Werte, die von einem Amperemeter gemessen werden. zB:0.06=Realer Wert/Messwert Serial.print(Amps_RMS); // Hier zeige ich den RMS-Wert und den Peak-to-Peak-Wert, Sie können drucken, was Sie wollen und das Symbol "A" hinzufügen ... Serial.print ("\t"); Serial.println (Amps_Peak_Peak); delay (200);}void read_Amps () // read_Amps-Funktion berechnet die Differenz zwischen der hohen Spitze und der niedrigen Spitze { // Spitze-zu-Spitze-Wert abrufen Int cnt; //Zähler High_peak =0; // Wir nehmen zunächst an, dass unser High Peak gleich 0 ist und der Low Peak 1024 ist, ja invertiert Low_peak =1024; for(cnt=0; cnt High_peak) //Wenn dieser Wert höher ist als der High Peak (zuerst 0) { High_peak =ACS_Value; //Der obere Spitzenwert ändert sich von 0 auf den gefundenen Wert} if(ACS_Value  
Code_3.inoArduino
Dieser Code verwendet Statistikformeln, um die TRMS eines Signals unabhängig von der Größe zu berechnen und auf dem seriellen Monitor anzuzeigen
/* Dieser Code funktioniert mit dem ACS712-Stromsensor, er ermöglicht die Berechnung des TRMS-Signals * Besuchen Sie www.surtrtech.com für weitere Details */#include  //Diese Bibliothek führt eine massive Arbeit durch, überprüft ihre .cpp-Datei#define ACS_Pin A0 //Sensordaten-Pin auf A0 analoger Eingangsfloat ACS_Value; //Hier behalten wir die Rohdatenwerte bei.float testFrequency =50; // Testsignalfrequenz (Hz) float windowLength =40.0/testFrequency; // wie lange das Signal gemittelt werden soll, für statististfloat intercept =0; // wird basierend auf Kalibrierungstests angepasst. Schwimmersteigung =0,0752; // muss basierend auf Kalibrierungstests angepasst werden //Bitte sehen Sie sich das ACS712 Tutorial-Video von SurtrTech an, um zu sehen, wie Sie sie erhalten, da dies von Ihrem Sensor abhängt, oder schauen Sie unten nach:Float Amps_TRMS; // geschätzter tatsächlicher Strom in Ampereunsigned long printPeriod =1000; // in Millisekunden // Verfolgen Sie die Zeit in Millisekunden seit dem letzten Lesen unsigned long previousMillis =0;void setup () { Serial.begin ( 9600 ); // Starten Sie den seriellen Port pinMode (ACS_Pin, INPUT); // Den Pin-Modus definieren}void loop () { RunningStatistics inputStats; // Statistiken erstellen, um das rohe Testsignal zu betrachten inputStats.setWindowSecs( windowLength ); // Setze die Fensterlänge während (wahr) { ACS_Value =analogRead (ACS_Pin); // den analogen Eingangswert lesen:inputStats.input(ACS_Value); // Log zur Statistikfunktion if((unsigned long)(millis() - previousMillis)>=printPeriod) { // jede Sekunde machen wir die Berechnung previousMillis =millis(); // Aktualisierungszeit Amps_TRMS =Intercept + Slope * inputStats.sigma(); Serial.print ( "\t Ampere:"); Serial.print (Amps_TRMS); } }}/* Über die Steigung und den Achsenabschnitt * Zuerst müssen Sie wissen, dass alle TRMS-Berechnungen von Funktionen aus der Bibliothek durchgeführt werden, es ist der Wert "inputStats.sigma()" * Zuerst können Sie anzeigen, dass "inputStats.sigma ()" als Ihren TRMS-Wert, dann versuchen Sie, ihn zu messen, wenn der Eingang 0,00A beträgt * Wenn der gemessene Wert 0 ist, wie ich es habe, können Sie den Achsenabschnitt auf 0 belassen, andernfalls müssen Sie addieren oder subtrahieren, um das zu erreichen Wert gleich 0 * Mit anderen Worten "Entfernen Sie den Offset" * Schalten Sie dann die Stromversorgung auf einen bekannten Wert ein, verwenden Sie beispielsweise eine Glühbirne oder eine LED, deren Leistung Sie kennen, und Sie kennen bereits Ihre Spannung, also ein wenig Mathe. Bekomme die theoretischen Ampere * du dividierst diesen theoretischen Wert durch den gemessenen Wert und hier hast du die Steigung, jetzt platziere sie oder ändere sie */
Code_ACS712_LCD.inoArduino
Dieser Code verwendet die TRMS-Berechnungsmethode und zeigt sie auf dem LCD an i²c
/* Dieser Code funktioniert mit ACS712 und LCD ic * Er misst den TRMS eines Wechselstroms und zeigt den Wert auf dem Bildschirm an * Besuchen Sie www.SurtrTech.com für weitere Details */#include  //Diese Bibliothek macht eine riesige Arbeit, überprüfen Sie ihre .cpp-Datei#include  //LCD-IC-Bibliothek#define ACS_Pin A0 //ACS712 Datenpin#define I2C_ADDR 0x27 //I2C-Adresse, Sie sollten den Code verwenden, um die Adresse zuerst (0x27) hier zu scannen#define BACKLIGHT_PIN 3 // LCD-Pins deklarieren#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); // Deklaration der lcdfloat testFrequency =50; // Testsignalfrequenz (Hz) float windowLength =40.0/testFrequency; // wie lange das Signal gemittelt werden soll, für statististfloat intercept =0; // wird basierend auf Kalibrierungstests angepasst. Schwimmersteigung =0,0752; // muss basierend auf Kalibrierungstests angepasst werden //Bitte sehen Sie sich das ACS712 Tutorial-Video von SurtrTech an, um zu sehen, wie Sie sie erhalten, da dies von Ihrem Sensor abhängt, oder schauen Sie unten nach:Float Amps_TRMS; float ACS_Value;unsigned long printPeriod =1000; unsigned long previousMillis =0;void setup () { digitalWrite (2, HIGH); lcd.begin (16,2); lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight (HIGH); // Beleuchtung Hintergrundbeleuchtung lcd.home (); }void loop() { RunningStatistics inputStats; // Statistiken erstellen, um das rohe Testsignal zu betrachten inputStats.setWindowSecs( windowLength ); Während (wahr) { ACS_Value =analogRead (ACS_Pin); // den analogen Eingangswert lesen:inputStats.input(ACS_Value); // Log zur Statistikfunktion if((unsigned long)(millis() - previousMillis)>=printPeriod) { // jede Sekunde machen wir die Berechnung previousMillis =millis(); // Aktualisierungszeit Amps_TRMS =Intercept + Slope * inputStats.sigma(); // Werte kalibrieren lcd.clear(); // lcd löschen und an einer bestimmten Position drucken lcd.setCursor(2,0); lcd.print (Ampere_TRMS); lcd.print("A"); } }}/* Über die Steigung und den Achsenabschnitt * Zuerst müssen Sie wissen, dass alle TRMS-Berechnungen von Funktionen aus der Bibliothek durchgeführt werden, es ist der Wert "inputStats.sigma()" * Zuerst können Sie anzeigen, dass "inputStats.sigma ()" als Ihren TRMS-Wert, dann versuchen Sie, ihn zu messen, wenn der Eingang 0,00A beträgt * Wenn der gemessene Wert 0 ist, wie ich es habe, können Sie den Achsenabschnitt auf 0 belassen, andernfalls müssen Sie addieren oder subtrahieren, um das zu erreichen Wert gleich 0 * Mit anderen Worten "Entfernen Sie den Offset" * Schalten Sie dann die Stromversorgung auf einen bekannten Wert ein, verwenden Sie beispielsweise eine Glühbirne oder eine LED, deren Leistung Sie kennen, und Sie kennen bereits Ihre Spannung, also ein wenig Mathe. Bekomme die theoretischen Ampere * du dividierst diesen theoretischen Wert durch den gemessenen Wert und hier hast du die Steigung, jetzt platziere sie oder ändere sie */
Code_ACS712_OLED.inoArduino
Dieser Code verwendet die TRMS-Berechnungsmethode und zeigt den Wert auf dem OLED an.
/* Dieser Code funktioniert mit ACS712 und OLED ic * Er misst den TRMS eines Wechselstroms und zeigt den Wert auf dem Bildschirm an * Besuchen Sie www.SurtrTech. com für weitere Details */#include  //Diese Bibliothek macht eine riesige Arbeit. Überprüfen Sie ihre .cpp-Datei#include  //OLED-Bibliotheken#include #define ACS_Pin A0#define SCREEN_WIDTH 128 // OLED-Anzeigebreite, in Pixel#define SCREEN_HEIGHT 32 // OLED-Anzeigehöhe, in Pixel#define OLED_RESET -1 // Reset-Pin # (oder -1, wenn Arduino-Reset-Pin geteilt)float testFrequency =50; // Testsignalfrequenz (Hz) float windowLength =40.0/testFrequency; // wie lange das Signal gemittelt werden soll, für statististfloat intercept =0; // wird basierend auf Kalibrierungstests angepasst. Schwimmersteigung =0,0752; // muss basierend auf Kalibrierungstests angepasst werden //Bitte sehen Sie sich das ACS712 Tutorial-Video von SurtrTech an, um zu sehen, wie Sie sie erhalten, da dies von Ihrem Sensor abhängt, oder schauen Sie unten nach:Float Amps_TRMS; float ACS_Value;unsigned long printPeriod =1000; unsigned long previousMillis =0; Adafruit_SSD1306-Anzeige (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Anzeigenamen deklarieren (display)void setup () { display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Starten Sie das OLED-Display display.clearDisplay (); display.display();}void loop() { RunningStatistics inputStats; // Statistiken erstellen, um das rohe Testsignal zu betrachten inputStats.setWindowSecs( windowLength ); Während (wahr) { ACS_Value =analogRead (ACS_Pin); // den analogen Eingangswert lesen:inputStats.input(ACS_Value); // Log in Statistikfunktion if((unsigned long)(millis() - previousMillis)>=printPeriod) { //Führe die Berechnungen alle 1s durch previousMillis =millis(); // Aktualisierungszeit Amps_TRMS =Intercept + Slope * inputStats.sigma(); display.clearDisplay(); display.setTextSize(3); display.setTextColor (WEISS); display.setCursor(15,10); display.print (Ampere_TRMS); display.println(" A"); display.display(); } }}/* Über die Steigung und den Achsenabschnitt * Zuerst müssen Sie wissen, dass alle TRMS-Berechnungen von Funktionen aus der Bibliothek durchgeführt werden, es ist der Wert "inputStats.sigma()" * Zuerst können Sie anzeigen, dass "inputStats.sigma ()" als Ihren TRMS-Wert, dann versuchen Sie, ihn zu messen, wenn der Eingang 0,00A beträgt * Wenn der gemessene Wert 0 ist, wie ich es habe, können Sie den Achsenabschnitt auf 0 belassen, andernfalls müssen Sie addieren oder subtrahieren, um das zu erreichen Wert gleich 0 * Mit anderen Worten "Entfernen Sie den Offset" * Schalten Sie dann die Stromversorgung auf einen bekannten Wert ein, verwenden Sie beispielsweise eine Glühbirne oder eine LED, deren Leistung Sie kennen, und Sie kennen bereits Ihre Spannung, also ein wenig Mathe. Bekomme die theoretischen Ampere * du dividierst diesen theoretischen Wert durch den gemessenen Wert und hier hast du die Steigung, jetzt platziere sie oder ändere sie */

Schaltpläne

Verwendete Verdrahtung der Tests 1,2 und 3 LCD i²c . verwenden OLED 128x32 verwenden

Herstellungsprozess

  1. Messen der Luftqualität auf OpenSensors
  2. CO2-Überwachung mit K30-Sensor
  3. taubblinde Kommunikation mit 1Sheeld/Arduino
  4. Münzprüfer mit Arduino steuern
  5. Arduino mit Bluetooth zur Steuerung einer LED!
  6. Kapazitiver Fingerabdrucksensor mit einem Arduino oder ESP8266
  7. Mit Nextion Display spielen
  8. Nunchuk-gesteuerter Roboterarm (mit Arduino)
  9. Animieren Sie einen Billy Bass Mouth mit einer beliebigen Audioquelle
  10. Messung der Sonneneinstrahlung mit Arduino