Wird der Stromsensor in den fahrenden T1 verbaut ist es nicht mehr möglich Ausgaben über den seriellen Monitor anzeigen zu lassen. Daher wird die Schaltung aus dem Schritt "Leistungsmessung mit Stromsensor" um ein digitales Display erweitert.

Material:

  • Breadboard
  • ESP32
  • USB-Kabel
  • Jumper Kabel (14x)
  • Motortreiber L298N
  • DC Motor
  • IR-Sensor/ IR-Fernbedienung
  • Adafruit INA219
  • digitales Display TM1637 4-stellig 7-Segment
  • Arduino IDE
Das digitale Display wird mit einer Spannung von 3,3 V versorgt. Die Datenleitung des Displays wird mit GPIO 25 verbunden und die Taktleitung mit GPIO 23.

Steckplatine:

Steckplatine
Abbildung 1: Ausgabe über digitales Display (Steckplatine)
Quelle: BBS 2 Wolfsburg
Schaltplan:

Schaltplan
Abbildung 2: Ausgabe über digitales Display (Schaltplan)
Quelle: BBS 2 Wolfsburg
Der Arduino Code aus dem Abschnitt "Leistungsmessung mit Stromsensor" muss noch leicht modifiziert werden, um eine Ausgabe über das digitale Display zu erzeugen.
Zuvor muss noch die Bibliothek "TM1637 by Avishay Orpaz" installiert werden. Sollten Sie dabei Probleme haben können sie sich im Projekt 4 "T1-Monitoring" -> "Schritt 2: Programmieren der Temperaturerfassung" -> "Einbinden von Bibliotheken" Hilfe holen.
 
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>

#include <TM1637Display.h>    //Bibliothek für Display

#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;

//Daten- und Taktpin des Displays festlegen und Initialisierung des Displays
#define CLK 23
#define DIO 25
TM1637Display display(CLK, DIO);


IRrecv irrecv(RECV_PIN);  //Objekt der Klasse IRrecv erstellen
decode_results results;   

int IRcode=0;             //variable für den Empfangen Tastencode



void setup() 
{

 //Helligkeit des Displays einstellen
  display.setBrightness(0x0f);

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) {
      // will pause Zero until serial console opens
      delay(1);
  }

  uint32_t currentFrequency;
    
  Serial.println("Hello!");
  
  // Initialize the INA219.
  // By default the initialization will use the largest range (32V, 2A).  However
  // you can call a setCalibration function to change this range (see comments).
  if (! ina219.begin()) {
    Serial.println("Failed to find INA219 chip");
    while (1) { delay(10); }
  }
  // To use a slightly lower 32V, 1A range (higher precision on amps):
  //ina219.setCalibration_32V_1A();
  // Or to use a lower 16V, 400mA range (higher precision on volts and amps):
  //ina219.setCalibration_16V_400mA();

  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("");

//Temperatur in °C ohne Nachkommastelle auf dem Display anzeigen
  display.showNumberDec(power_mW * 1);

  delay(2000);
}
Zuletzt geändert: Montag, 28. Juni 2021, 19:57