Im vorherigen Abschnitt haben wir den Strom mittels eines Shunt Widerstands gemessen bzw. errechnet. Nun nutzen wir den Adafruit INA219 Stromsensor um den Strom des DC-Motors bzw. die Leistungsaufnahme zu bestimmen.

Auch der INA219 Stromsensor ermittelt den Strom mittels eines Shunt Widerstand. Dieser ist 0,1 Ω klein. Neben dem Strom kann der INA219 auch Gleichspannungen bis zu 26 V messen. Der Strommessbereich geht bis 3,2 A bei einer Fehlergenauigkeit von 1 %.

Material:

  • Breadboard
  • ESP32
  • USB-Kabel
  • Jumper Kabel (14x)
  • Motortreiber L298N
  • DC Motor
  • IR-Sensor/ IR-Fernbedienung
  • Adafruit INA219
  • Arduino IDE

StromsensorStromsensor

Abbildung 1: Stromsensor INA219
Quelle: BBS 2 Wolfsburg

Der Stromsensor wird zwischen den Motortreiber und den Motor geschaltet. Die Schaltung aus dem vorherigen Projektschritt wird folgendermaßen erweitert:

Steckplatine:

Steckplatine

Abbildung 2: Stromsensor Steckplatine
Quelle: BBS 2 Wolfsburg

Schaltplan:

Schaltplan

Abbildung 3: Stromsensor Schaltplan
Quelle: BBS 2 Wolfsburg

Anschließend schließen wir den Stromsensor zwischen dem 5 V GPIO des ESP32 und dem Motortreiber an und messen neben dem Stromfluss auch die aufgenommene Leistung von Motortreiber mit angeschlossenem Motor.

Steckplatine:

Steckplatine

Abbildung 4: Stromsensor Zuleitung Steckplatine
Quelle: BBS 2 Wolfsburg

Schaltplan:

Schaltplan
Abbildung 5: Stromsensor Zuleitung Schaltplan

Quelle: BBS 2 Wolfsburg  

Damit das Programm funktioniert, muss noch die Bibliothek "Adafruit INA 219 by adafruit" installiert werden. Falls Sie Probleme bei der Installation von Bibliotheken haben, schauen Sie unter Schritt 3 "Abwendung des Spannungsteilers" -> "LED an- bzw. ausdimmen" nach, wie Sie eine Bibliothek installieren.

Neben dem Strom und der Leistung wird Ihnen im seriellen Monitor auch die Busspannung, Ladespannung und Spannung über dem Shunt Widerstand angezeigt.

Über den seriellen Monitor erhalten wir folgende Ausgaben bei laufendem Motor:

Ausgabe

Abbildung 6: Ausgabe bei Schaltung aus Abbildung 2/3
Quelle: BBS 2 Wolfsburg

Ausgabe

Abbildung 7: Ausgabe bei Schaltung aus Abbildung 4/5
Quelle: BBS 2 Wolfsburg

Aus Abbildung 6 ist ersichtlich, dass der Motor mit ca. 4 V versorgt wird. Die Stromaufnahme schwankt zwischen 60 mA und 80 mA. Daraus ergibt sich eine Leistungsaufnahme von etwas über 300 mW.

Source Code:

//Bibliotheken zum auslesen einer IR-Fernbedienung
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

#include <Wire.h> #include <Adafruit_INA219.h> #define RECV_PIN 34 //Pin an dem der IR-Empfänger angeschlossen ist #define M1_PIN 26 //Pin 1 zur steuerung des Motors #define M2_PIN 27 //Pin 2 zur steuerung des Motors Adafruit_INA219 ina219; IRrecv irrecv(RECV_PIN); //Objekt der Klasse IRrecv erstellen decode_results results; int IRcode=0; //variable für den Empfangen Tastencode void setup() { irrecv.enableIRIn(); // Starte den receiver Serial.begin(115200); //Serielle Kommunikation starten pinMode(M1_PIN, OUTPUT); pinMode(M2_PIN, OUTPUT); digitalWrite(M1_PIN, LOW); //Fahre nicht digitalWrite(M2_PIN, LOW); while (!Serial) { // Pause bis der serielle Monitor geöffnet wird delay(1); } uint32_t currentFrequency; Serial.println("Hello!"); if (! ina219.begin()) { Serial.println("Failed to find INA219 chip"); while (1) { delay(10); } } Serial.println("Measuring voltage and current with INA219 ..."); } void loop() { if (irrecv.decode(&results)) //Wenn ein IR-Signal empfangen wurde { IRcode=(results.value); //Das Empfangsignal in der Variable speichern Serial.print(IRcode,HEX); //Gebe es hexadezimal im SM aus Serial.println(""); if(IRcode==0xFF01FE) //Wenn die Taste ->(hoch) betätigt wird { digitalWrite(M1_PIN, HIGH); //Fahre Vorwärts digitalWrite(M2_PIN, LOW); } else if(IRcode==0xFF41BE) //Wenn die Taste OFF betätigt wird { digitalWrite(M1_PIN, LOW); //Fahre nicht digitalWrite(M2_PIN, LOW); } irrecv.resume(); //IR-Empfänger für den nächsten Wert bereit machen. delay(30); } float shuntvoltage = 0; float busvoltage = 0; float current_mA = 0; float loadvoltage = 0; float power_mW = 0; shuntvoltage = ina219.getShuntVoltage_mV(); busvoltage = ina219.getBusVoltage_V(); current_mA = ina219.getCurrent_mA(); power_mW = ina219.getPower_mW(); loadvoltage = busvoltage + (shuntvoltage / 1000); Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V"); Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV"); Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V"); Serial.print("Current: "); Serial.print(current_mA); Serial.println(" mA"); Serial.print("Power: "); Serial.print(power_mW); Serial.println(" mW"); Serial.println(""); delay(2000); }
Zuletzt geändert: Montag, 28. Juni 2021, 19:57