Ausgabe über digitales Display
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
Steckplatine:

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

Abbildung 2: Ausgabe über digitales Display (Schaltplan)Der Arduino Code aus dem Abschnitt "Leistungsmessung mit Stromsensor" muss noch leicht modifiziert werden, um eine Ausgabe über das digitale Display zu erzeugen.
Quelle: BBS 2 Wolfsburg
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);
}
Last modified: Monday, 28 June 2021, 7:57 PM