Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauche tiefer in Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten ein.

Warum beitreten?

  • Expertenunterstützung: Löse Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.

  • Lernen & Teilen: Tausche Tipps und Tutorials aus, um deine Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalte frühzeitigen Zugang zu neuen Produktankündigungen und Vorschauen.

  • Sonderrabatte: Genieße exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Verlosungen: Nimm an Verlosungen und Feiertagsaktionen teil.

👉 Bereit, mit uns zu entdecken und zu erschaffen? Klicke auf [hier] und tritt noch heute bei!

2.1.4 Potentiometer (MCP3008)

Bemerkung

../_images/mcp3008_and_adc0834.jpg

Je nach deiner Kit-Version überprüfe bitte, ob du ADC0834 oder MCP3008 hast, und fahre mit dem entsprechenden Abschnitt fort.

Einführung

Die ADC-Funktion wird verwendet, um analoge Signale in digitale Werte umzuwandeln. In diesem Experiment verwenden wir den MCP3008-ADC-Chip für diese Umwandlung. Ein Potentiometer wird eingesetzt, um eine variable Spannung zu erzeugen, die eine physikalische Größe verändert. Der MCP3008 wandelt diese analoge Spannung in einen digitalen Wert um, der vom Raspberry Pi gelesen und verarbeitet werden kann.

Benötigte Komponenten

In diesem Projekt benötigen wir die folgenden Komponenten.

../_images/list2_2.1.4_potentiometer.png

Schaltplan

T-Board-Name

Physical

WiringPi

BCM

SPICE0

pin24

10

8

SPIMOSI

pin19

12

10

SPIMISO

pin21

13

9

SPISCLK

pin23

14

11

GPIO22

pin15

3

22

../_images/schematic_2.1.7_potentiometer_mcp3008.png

Experimentelle Schritte

Schritt 1: Baue die Schaltung auf.

../_images/2.1.7_Potentiometer_bb.png

Bemerkung

Bitte platziere den Chip entsprechend der Position in der Abbildung. Beachte, dass sich die Kerbe des Chips auf der linken Seite befinden sollte, wenn er richtig platziert ist.

Schritt 2: Öffne die Code-Datei.

cd ~/davinci-kit-for-raspberry-pi/nodejs/

Schritt 3: Führe den Code aus.

sudo node potentionmeter-2.js

Nachdem der Code läuft, drehe den Knopf am Potentiometer – die Helligkeit der LED ändert sich entsprechend.

Code

const Gpio = require('pigpio').Gpio;
const mcpadc = require('mcp-spi-adc');

// Öffne MCP3008 Kanal 0 (analoger Eingang CH0)
const adc = mcpadc.openMcp3008(0, { speedHz: 1000000 }, (err) => {
if (err) {
    console.error("Fehler beim Öffnen des ADC-Kanals:", err);
    process.exit(1);
}

console.log("MCP3008 Kanal 0 erfolgreich geöffnet.");

// Initialisiere LED an GPIO22 im PWM-Ausgabemodus
const led = new Gpio(22, { mode: Gpio.OUTPUT });

// Lese alle 100 ms den ADC-Wert und aktualisiere die LED-Helligkeit
setInterval(() => {
    adc.read((err, reading) => {
    if (err) {
        console.error("Fehler beim Lesen des ADC:", err);
        return;
    }

    // Konvertiere den Gleitkommawert (0.0–1.0) in den PWM-Bereich (0–255)
    const pwmVal = Math.round(reading.value * 255);

    console.log(`Aktueller analogVal: ${pwmVal}`);

    // Aktualisiere die LED-Helligkeit über PWM
    led.pwmWrite(pwmVal);
    });
}, 100);
});

Code-Erklärung

const Gpio = require('pigpio').Gpio;

Diese Zeile importiert das Modul pigpio, das eine präzise PWM- und GPIO-Steuerung auf dem Raspberry Pi ermöglicht.

const mcpadc = require('mcp-spi-adc');

Diese Zeile importiert die Bibliothek mcp-spi-adc, die die Kommunikation mit dem MCP3008-ADC über die SPI-Schnittstelle ermöglicht.

const adc = mcpadc.openMcp3008(0, { speedHz: 1000000 }, (err) => {
    if (err) {
        console.error("Fehler beim Öffnen des ADC-Kanals:", err);
        process.exit(1);
    }
});

Initialisiert den analogen Eingangskanal 0 des MCP3008. Setzt die SPI-Kommunikationsgeschwindigkeit auf 1 MHz. Falls die Initialisierung fehlschlägt, wird ein Fehler protokolliert und das Programm beendet.

const led = new Gpio(22, { mode: Gpio.OUTPUT });

Erstellt ein GPIO-Objekt für Pin 22 am Raspberry Pi. Dieser Pin ist als Ausgang konfiguriert und wird verwendet, um die Helligkeit einer LED per PWM zu steuern.

setInterval(() => {
    adc.read((err, reading) => {
        if (err) {
            console.error("Fehler beim Lesen des ADC:", err);
            return;
        }

        const pwmVal = Math.round(reading.value * 255);
        console.log(`Aktueller analogVal: ${pwmVal}`);
        led.pwmWrite(pwmVal);
    });
}, 100);

Alle 100 Millisekunden liest diese Funktion den Analogwert vom MCP3008-Kanal 0. Der ADC gibt eine normalisierte Gleitkommazahl zwischen 0.0 und 1.0 zurück. Dieser Wert wird in den Bereich 0–255 skaliert und mit pwmWrite() an GPIO22 geschrieben, um die LED-Helligkeit zu steuern. Der PWM-Wert wird zudem in der Konsole ausgegeben.