lehrkraefte:blc:informatik:ffprg2-2020:electronic-basics

Elektronik Grundlagen

  • Spannung $U$ in V (Volt), 0V (GND, Ground) 3.3V auf dem ESP32 (plus 5V (VIN) vom USB). (Analogie: Wasserdruck, Höhenunterschied)
  • Strom $I$ in A (Ampère), max 10-20mA auf den Pins (Analogie: Wasserfluss (Liter pro Sekunde))
  • Widerstand $R$ in $\Omega$ (Ohm). Z.B. typischer Vorwiderstand für LED: $R$=220$\Omega$. (Analogie: Rohrdicke (grosser Widerstand ist dünnes Rohr)).

Es gilt: $$U = R \cdot I \qquad R = \frac{U}{I} \qquad I = \frac{U}{R}$$

Beispiele:

  • Strom bei 3.3V über 220$\Omega$ Widerstand: $0.015A = 15mA$. Also gerade noch ok für ESP32.
  • Strom bei 3.3V über 50k$\Omega$ Widerstand (typischer Pullup/Pulldown-Widerstand): $0.00007 A = 0.07mA$.
  • Widerstände addieren sich.
  • Spannung wird aufgeteilt → Potentiometer, Messen variabler Widerstände (z.B. Photowiderstand).

Beispiele:

  • U=3.3V, R1=220$\Omega$, R2=1k$\Omega$. Dann ist der Strom durch beide Widerstände $I=U/(R1+R2)$. Die Spannung über R2 ist U2=R2*I2 = R2*I = R2/(R1+R2)*U = 2.7V$.
  • Ein Photoresistor hat einen Widerstand von 250$\Omega$ bei Vollicht bis 50k$\Omega$ bei Dunkelheit. Dieser wird in Serie mit einem 10k$\Omega$ Widerstand geschaltet und mit 3.3V versorgt. In welchem Bereich variiert die Spannung zwischen den beiden Widerständen?

Bauteile: ESP32, Photoresistor, 10k$\Omega$ Widerstand, 3 m-m-Kabel.

photoresistor.ino
#define APIN 34
 
void setup() {
  Serial.begin(115200);
}
 
void loop() {
  int value = analogRead(APIN);
  Serial.printf("value = %d\n", value);
  delay(100);
}

Mehr zu den ADC (analog-digital-converter) des ESP32: https://randomnerdtutorials.com/esp32-adc-analog-read-arduino-ide/

Und noch viel genauer: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html

Erweitern Sie den Test-Sketch, dass folgende Ausgabe in folgendem Stil produziert wird, wobei U die Spannung über dem 10k$\Omega$ Widerstand, I der Strom durch die Widerstände und R der aktuelle Widerstand des Photowiderstands ist:

986 ergibt U=0.79V, I=0.08mA, R=31541
2559 ergibt U=2.06V, I=0.21mA, R=6006

Lösungsvorschlag

Lösungsvorschlag

void loop() {
  int value = analogRead(APIN);
  float u = 3.3*value/4096.0;
  float i = u/10000.0;
  int r = (3.3-u)/i;
  Serial.printf("%d ergibt U=%.2fV, I=%.2fmA, R=%d\n", value, u, 1000*i, r);
  delay(100);
}

Ein Potentiometer hat zwischen den äusseren Anschlüssen einen konstanten Widerstand (z.B. 10k$\Omega$). Der Anschluss dazwischen teilt den Gesamtwiderstand variabel zwischen 0 und dem Gesamtwiderstand.

Eine Diode lässt Strom nur eine Richtung durch. Bei Leuchtdioen ist das lange Bein der Plus-Pol, beim Minuspol sind die Dioden oft “angesägt”. Dioden sind wie eine Schleuse, die sich nur in eine Richtung öffnen lässt. Dafür braucht es aber eine minimale Spannung (typischwerweise 1.5V bis 3V für rote bis blaue LEDs). Ist die Spannung überschritten, fliesst beliebig viel Strom und zerstört die Diode. Darum muss immer ein Vorwiderstand in Serie geschaltet werden, der den Strom begrenzt.

Ziel wäre es, ein Spannungs/Strom-Diagramm für ein LED zu machen. Leider ist der ADC des ESP32 so schlecht, dass das kaum sinnvoll geht. Hier das Resultat einer roten LED, aufgezeichnet mit dem Arduino:

  • lehrkraefte/blc/informatik/ffprg2-2020/electronic-basics.txt
  • Last modified: 2020/08/24 09:56
  • by Ivo Blöchliger