Lösung: LED PWM IV
Sketch: Quelltext
// Variablen
int Helligkeit=0; // Helligkeit in 10 Stufen
int pwm_wert=0; // PWM-Wert für analogWrite()
float strom = 0; // Mittlere Stromstärke
void setup() {
pinMode(8, INPUT_PULLUP); // + Taster
pinMode(7, INPUT_PULLUP); // - Taster
pinMode(9, OUTPUT); // interne LED
digitalWrite(9, LOW); // interne LED aus
// ***** serielle Schnittstelle initialisieren *****
Serial.begin(9600);
while(!Serial) {}
}
void loop() {
// ***** Tastaturabfrage *****
if (digitalRead(8)==LOW){
if (Helligkeit < 10) {
Helligkeit = Helligkeit + 1;
// ***** PWM Berechnung *****
pwm_wert = (255*Helligkeit)/10;
analogWrite(9, pwm_wert);
// ***** PWM Ende *****
delay(200); // Tasten entprellen
// Auf Messergebnis warten
strom = analogRead(0);
strom = strom*5/1024;
strom = strom*1000/150; // Berechnung Stromstärke in mA
// ***** serielle Ausgabe
Serial.println("Tastverhältnis " + String(Helligkeit*10) + " %");
Serial.println("Mittlere Stromstärke " + String(strom) + " mA");
}
}
if (digitalRead(7)==LOW){
if (Helligkeit > 0) {
Helligkeit = Helligkeit - 1;
// ***** PWM Berechnung *****
pwm_wert = (255*Helligkeit)/10;
analogWrite(9, pwm_wert);
// ***** PWM Ende *****
delay(200); // Tasten entprellen
// Auf Messergebnis warten
strom = analogRead(0);
strom = strom*5/1024;
strom = strom*1000/150; // Berechnung Stromstärke in mA
// ***** serielle Ausgabe
Serial.println("Tastverhältnis " + String(Helligkeit*10) + " %");
Serial.println("Mittlere Stromstärke " + String(strom) + " mA");
}
}
}
Quelltext a: Serielle Ausgabe nach jeder Änderung von Helligkeit.
Sketch: Erklärung
Die Berechnung der PWM-Ausgabe und der Stromstärke erfolgt nach jeder Änderung der Variablen Helligkeit.
Variablen
Die globale Variable Helligkeit wird als int (Integer) definiert und mit 0 initialisiert.
Die globale Variable pwm_wert wird als int (Integer) definiert und mit 0 initialisiert.
Die globale Variable strom wird als float (Fließkommazahl) definiert und mit 0 initialisiert.
Setup
Pin 8 und Pin 7 werden als INPUT_PULLUP definiert.
Pin 9 (externe LED mit Vorwiderstand) als OUTPUT .
Die interne LED wird ausgeschaltet.
Die Serielle Schnittstelle wird initialisiert mit 9600 Baud.
Loop
Der Loop-Teil wurde basierend auf dem Sketch LED PWM III modifiziert.
Zunächst wird pwm-wert berechnet und an Pin 9 ausgegeben.
Die Wartezeit von 200 ms dient dazu, dass sich der Messwert einschwingen und stabilisieren kann.
Nachdem sich der Messwert stabilisiert hat, wird er über den A/D-Wandler mit dem Befehl analogRead() am Pin A0 eingelesen.
Die Stromstärke wird in zwei Schritten berechnet und über die serielle Schnittstelle ausgegeben.
Schaltplan / Layout
Elektronik / Hardware
Man muss darauf achten, den Taster richtig anzuschließen, ggf. muss man vorher mit einem Durchgangsprüfer die Pinbelegung des Tasters prüfen.
Da Pin 8 und Pin 9 low-active sind, müssen die Taster mit GND verbunden werden.
Die LED muss mit einem passenden Vorwiderstand in Reihe geschaltet werden.
Andernfalls können die LED oder das Arduino-Board beschädigt oder zerstört werden.
Wichtig ist auch die Glättung des PWM-Signals mit einem RC-Tiefpass, damit die Messwerte stabil bleiben.
|