Stromstärke Sensor

Erstellt von Marc Reid
Benötigtes Material
  • Arduino Uno
  • USB-Kabel für den Arduino
  • ACS712 5A Sensor
  • 3x MW-Kabel
Als PDF
PDF-Download
Arbeitsblatt

Beschreibung

Mit dem Arduino lassen sich über die analogen Pins (A0-A5) Stromspannungen messen. Damit kann man z.B. mithilfe eines Fotowiderstandes die Helligkeit in einem Raum festellen. Wenn man aber nun die Stromstärke messen möchte, muss man diese erst in eine Spannung umwandeln. Der der ACS712 Sensor macht dies mithilfe des Hall-Effekts. Dieser wandelt gibt dann pro gemessenes Ampere 185mV aus, welche wir dann mit dem Arduino messen können.

Mit analogRead(PIN) kann man diese Spannung von 0-5V messen, wobei bei 0V 0 und bei 5V 1023 ausgegeben wird. Alle Spannungen zwischen 0 und 5V verhalten sich linear dazu.

Verkabelung

BauteilArduino
GNDGND
VCC5V
OutA0
Schaltplan

Schaltplan

Code

int ACS_PIN = A0;  // PIN an dem der ACS712 angeschlossen ist

// Solange kein Strom am Sensor fließt, gibt der Sensor eine Spannung von
// circa 2.49 Volt aus. Diese muss also von der gemessenen Spannung abgezogen
// werden. Die Werte 2.49 und 0.185 können verfeinert werden, in dem die
// U-I-Kennlinie des ACS712-Sensors aufgenommen wird. Benötigt wird ein
// Labornetzgerät, an dem man die Stromstärke regeln kann. Es wird eine feste
// Stromstärke eingestellt und der Spannungswert am Seriellen Monitor abgelesen.
float ACS_VOLTAGE_OFFSET = 2.49;
float ACS_GRADE          = 0.185;  // Steigung der U-I-Kennlinie

void setup() {
  pinMode(ACS_PIN, INPUT);  // Aktiviere das Lesen von Werten auf ACS_PIN
  Serial.begin(9600);       // Starte die serielle Schnittstelle
}

// Mit dieser Methode wird die durch den Strom induzierte Hallspannung im ACS712
// gemessen. Wegen des Halleffekts ist die Hallspannung proportional zur
// Stromstärke.
float get_current(int N) {
  float voltage_sum = 0;  // Variable um die gemessene Spannung aufzusummieren

  // N Messungen durchführen.
  for (int n = 0; n < N; n++) {
    float input = analogRead(ACS_PIN);       // Wert zwischen 0 und 1023 am
                                             // Analog-Pin ACS_PIN ablesen.
    float voltage = (input / 1024.0) * 5.0;  // Spannung zwischen 0 V und 5 V
                                             // aus dem abgelesen Wert
                                             // berechnen.
    voltage_sum = voltage_sum + voltage;  // Messwerte der Spannung aufaddieren,
                                          // um später einen Mittelwert zu
                                          // bilden.
  }
  // Mittelwert aus den am Pin A0 gemessenen Spannungen bilden.
  float voltage_avg = voltage_sum / N;

  // Wenn wert die Stromstärke ist, dann folgt aus einer Ausgelichsgeraden aus
  // voltage_avg = 2.49 + 0.185*current, umgestellt nach current ergibt das die
  // Formel.
  float current = (voltage_avg - ACS_VOLTAGE_OFFSET) / ACS_GRADE;

  // Gebe die berechnete Stromstärke zurück.
  return current;
}

void loop() {
  // Stromstärke messen über 10000 Messungen gemittelt.
  float current = get_current(10000);

  // Spannungswert im seriellen Monitor anzeigen.
  Serial.print("I = ");
  Serial.print(current, 2);  // Gebe die Stromstärke mit 5 Nachkommastellen aus
  Serial.println(" A");

  // Warte 500ms
  delay(500);
}

Das Material und dessen Inhalte sind - sofern nicht anders angegeben - lizenziert unter der Creative Commons Lizenz CC BY-NC-SA 4.0 (für den vollständigen Lizenztext siehe https://creativecommons.org/licenses/by-sa/4.0/legalcode )