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.2.1 Fotowiderstand (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

Ein Fotowiderstand ist eine häufig verwendete Komponente zur Erfassung der Umgebungslichtintensität. Er hilft dem Controller, Tag und Nacht zu unterscheiden und Lichtsteuerungsfunktionen wie z. B. ein Nachtlicht zu realisieren. Dieses Projekt ähnelt sehr dem Potentiometer – nur dass hier die Spannung durch Licht beeinflusst wird.

Benötigte Komponenten

In diesem Projekt benötigen wir die folgenden Komponenten.

../_images/list2_2.2.1_photoresistor.png

Prinzip

Ein Fotowiderstand oder eine Fotozelle ist ein lichtgesteuerter, variabler Widerstand. Der Widerstand eines Fotowiderstands sinkt mit zunehmender Lichtintensität – mit anderen Worten: Er weist Photoleitfähigkeit auf. Ein Fotowiderstand kann in lichtempfindlichen Detektorschaltungen sowie in licht- und dunkelheitsgesteuerten Schaltkreisen eingesetzt werden.

../_images/image1961.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.2.1_photoresistor_mcp3008.png

Experimentelle Schritte

Schritt 1: Baue die Schaltung auf.

../_images/july24_2.2.1_photoresistor_mcp3008.png

Schritt 2: Wechsle in den Code-Ordner.

cd ~/davinci-kit-for-raspberry-pi/c/2.2.1-2/

Schritt 3: Kompiliere den Code.

gcc 2.2.1_Photoresistor.c -o photoresistor -lwiringPi -lm

Schritt 4: Führe die ausführbare Datei aus.

./photoresistor

Während der Code läuft, ändert sich die Helligkeit der LED entsprechend der vom Fotowiderstand erfassten Lichtintensität.

Bemerkung

Falls es nach dem Ausführen nicht funktioniert oder die Fehlermeldung „wiringPi.h: No such file or directory“ erscheint, siehe Installieren und Überprüfen von WiringPi.

Code

#include <wiringPi.h>
#include <wiringPiSPI.h>
#include <stdio.h>
#include <softPwm.h>

#define SPI_CHANNEL 0       // SPI-Kanal 0 (CE0) verwenden
#define SPI_SPEED   1000000 // 1 MHz SPI-Geschwindigkeit
#define LedPin      3       // GPIO3 (WiringPi) für LED-PWM

// ADC-Wert vom MCP3008 lesen, Kanal 0~7
int readMCP3008(int channel) {
    if (channel < 0 || channel > 7) return -1;

    unsigned char buffer[3];
    buffer[0] = 1;                          // Startbit
    buffer[1] = (8 + channel) << 4;         // SGL/DIF = 1, D2-D0 = Kanal
    buffer[2] = 0;

    wiringPiSPIDataRW(SPI_CHANNEL, buffer, 3);

    // Ergebnis zusammenführen
    int result = ((buffer[1] & 3) << 8) | buffer[2];
    return result;
}

int main(void) {
    if (wiringPiSetup() == -1) {
        printf("wiringPi-Initialisierung fehlgeschlagen!\n");
        return 1;
    }

    if (wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) {
        printf("SPI-Setup fehlgeschlagen!\n");
        return 1;
    }

    softPwmCreate(LedPin, 0, 100); // Software-PWM initialisieren

    while (1) {
        int analogVal = readMCP3008(0); // Von CH0 lesen
        printf("ADC-Wert: %d\n", analogVal);

        // 10-Bit-ADC-Wert (0–1023) auf PWM-Bereich (0–100) skalieren
        int pwmVal = analogVal * 100 / 1023;
        softPwmWrite(LedPin, pwmVal);

        delay(100);
    }

    return 0;
}

Code-Erklärung

Der Code ist derselbe wie in Abschnitt 2.1.4 Potentiometer. Wenn du weitere Fragen hast, siehe die Code-Erklärung unter 2.1.4 Potentiometer (MCP3008) für Details.