2.11 - Drehen Sie den Knopf

In vorherigen Projekten haben wir den digitalen Eingang am Pico W verwendet. Ein Taster kann beispielsweise den Pin von einem niedrigen (aus) auf einen hohen Pegel (ein) umschalten. Dies ist ein binärer Arbeitszustand.

Der Pico W kann jedoch auch eine andere Art von Eingangssignal empfangen: den analogen Eingang. Dieser kann in einem beliebigen Zustand von vollständig geschlossen bis vollständig geöffnet sein und verfügt über eine Reihe möglicher Werte. Der analoge Eingang ermöglicht es dem Mikrocontroller, die Lichtintensität, Schallintensität, Temperatur, Feuchtigkeit usw. der physischen Welt zu erfassen.

Normalerweise benötigt ein Mikrocontroller eine zusätzliche Hardware, um den analogen Eingang umzusetzen - den Analog-Digital-Wandler (ADC). Aber der Pico W hat bereits einen integrierten ADC, den wir direkt nutzen können.

pin_adc

Der Pico W hat drei GPIO-Pins, die analogen Eingang nutzen können: GP26, GP27, GP28, also die analogen Kanäle 0, 1 und 2. Zusätzlich gibt es einen vierten analogen Kanal, der mit dem eingebauten Temperatursensor verbunden ist und hier nicht vorgestellt wird.

In diesem Projekt versuchen wir, den Analogwert eines Potentiometers auszulesen.

Erforderliche Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Set zu kaufen. Hier ist der Link:

Name

ELEMENTE IN DIESEM KIT

KAUF-LINK

Kepler Kit

450+

Kepler Kit

Die Teile können auch einzeln über die folgenden Links gekauft werden.

SN

KOMPONENTENBESCHREIBUNG

ANZAHL

KAUF-LINK

1

Raspberry Pi Pico W

1

BUY

2

Micro-USB-Kabel

1

3

Steckbrett

1

BUY

4

Jumperkabel

Mehrere

BUY

5

Widerstand

1(220Ω)

BUY

6

LED

1

BUY

7

Potentiometer

1

BUY

Schaltplan

sch_pot

Das Potentiometer ist ein analoges Bauelement und kann in zwei verschiedene Richtungen gedreht werden.

Verbinden Sie den mittleren Pin des Potentiometers mit dem analogen Pin GP28. Der Raspberry Pi Pico W enthält einen mehrkanaligen, 16-Bit-Analog-Digital-Wandler. Das bedeutet, dass er die Eingangsspannung zwischen 0 und der Betriebsspannung (3,3V) auf einen Ganzzahlwert zwischen 0 und 65535 abbildet, sodass der Wert von GP28 zwischen 0 und 65535 liegt.

Die Berechnungsformel lautet wie folgt:

(Vp/3.3V) x 65535 = Ap

Programmieren Sie anschließend den Wert von GP28 (Potentiometer) als PWM-Wert von GP15 (LED). Auf diese Weise werden Sie feststellen, dass sich die Helligkeit der LED beim Drehen des Potentiometers gleichzeitig verändert.

Verkabelung

wiring_pot

Code

Bemerkung

  • Sie können die Datei 2.11_turn_the_knob.ino im Pfad kepler-kit-main/arduino/2.11_turn_the_knob öffnen.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

  • Vergessen Sie nicht, die Platine (Raspberry Pi Pico) und den korrekten Anschluss auszuwählen, bevor Sie auf die Schaltfläche Hochladen klicken.

Wenn das Programm läuft, können wir den aktuell von Pin GP28 gelesenen Analogwert im seriellen Monitor sehen. Drehen Sie den Knopf, und der Wert wird sich von 0 bis 1023 ändern. Gleichzeitig wird die Helligkeit der LED zunehmen, je höher der Analogwert ist.

Wie funktioniert es?

Um den seriellen Monitor zu aktivieren, müssen Sie die serielle Kommunikation in setup() starten und die Datenrate auf 9600 einstellen.

void setup() {
    pinMode(ledPin, OUTPUT);
    Serial.begin(9600);
}

In der Loop-Funktion wird der Wert des Potentiometers gelesen, dann wird dieser Wert von 0-1023 auf 0-255 abgebildet, und schließlich wird der abgebildete Wert verwendet, um die Helligkeit der LED zu steuern.

void loop() {
    int sensorValue = analogRead(sensorPin);
    Serial.println(sensorValue);
    int brightness = map(sensorValue, 0, 1023, 0, 255);
    analogWrite(ledPin, brightness);
}
  • analogRead() wird verwendet, um den Wert des sensorPin (Potentiometer) zu lesen und ihn der Variable sensorValue zuzuweisen.

int sensorValue = analogRead(sensorPin);
  • Der Wert von SensorValue wird im seriellen Monitor ausgegeben.

Serial.println(sensorValue);
  • Hier wird die Funktion map(value, fromLow, fromHigh, toLow, toHigh) benötigt, da der gelesene Potentiometerwert im Bereich 0-1023 liegt und der Wert eines PWM-Pins im Bereich 0-255 liegt. Sie wird verwendet, um eine Zahl von einem Bereich in einen anderen umzumappen.

int brightness = map(sensorValue, 0, 1023, 0, 255);
  • Nun können wir diesen Wert verwenden, um die Helligkeit der LED zu steuern.

analogWrite(ledPin, brightness);