.. note::
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook!
Tauchen Sie tiefer in Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten ein.
**Warum beitreten?**
- **Expertenunterstützung**: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
- **Lernen & Teilen**: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
- **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugriff auf neue Produktankündigungen und exklusive Einblicke.
- **Spezielle Rabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
- **Festliche Aktionen und Giveaways**: Nehmen Sie an Verlosungen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu forschen und zu kreieren? Klicken Sie auf [|link_sf_facebook|] und treten Sie noch heute bei!
.. _2.2.1_c_mcp3008:
2.2.1 Fotowiderstand (MCP3008)
===============================
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
Abhängig von Ihrer Kit-Version identifizieren Sie bitte, ob Sie **ADC0834** oder **MCP3008** haben, und fahren Sie mit dem entsprechenden Abschnitt fort.
Einführung
------------
Der Fotowiderstand ist ein häufig verwendetes Bauteil zur Messung der Umgebungslichtintensität.
Er hilft dem Controller, Tag und Nacht zu erkennen und Lichtsteuerungsfunktionen wie z. B. ein Nachtlicht zu realisieren.
Dieses Projekt ist dem Potentiometer sehr ähnlich, nur dass hier die Spannung in Abhängigkeit vom Licht gemessen wird.
Benötigte Komponenten
------------------------------
Für dieses Projekt benötigen wir die folgenden Komponenten:
.. image:: ../img/list2_2.2.1_photoresistor.png
Es ist definitiv bequem, ein komplettes Kit zu kaufen. Hier ist der Link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Name
- ELEMENTE IN DIESEM KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Sie können die Komponenten auch einzeln über die folgenden Links erwerben:
.. list-table::
:widths: 30 20
:header-rows: 1
* - KOMPONENTENBESCHREIBUNG
- KAUFLINK
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_led`
- |link_led_buy|
* - :ref:`cpn_mcp3008`
- \-
* - :ref:`cpn_photoresistor`
- |link_photoresistor_buy|
Schaltplan
--------------------
.. list-table::
:widths: 30 30 30 30
:header-rows: 1
* - T-Board-Name
- physikalisch
- WiringPi
- BCM
* - SPICE0
- pin24
- 10
- 8
* - SPIMOSI
- pin19
- 12
- 10
* - SPIMISO
- pin21
- 13
- 9
* - SPISCLK
- pin23
- 14
- 11
* - GPIO22
- pin15
- 3
- 22
.. image:: ../img/schematic_2.2.1_photoresistor_mcp3008.png
Experimentelle Verfahren
-------------------------------------------------
**Schritt 1:** Schließen Sie den Stromkreis an.
.. image:: ../img/july24_2.2.1_photoresistor_mcp3008.png
**Schritt 2:** Wechseln Sie in den Code-Ordner.
.. raw:: html
.. code-block::
cd ~/raphael-kit/c/2.2.1-2/
**Schritt 3:** Kompilieren Sie den Code.
.. raw:: html
.. code-block::
gcc 2.2.1_Photoresistor.c -o photoresistor -lwiringPi -lm
**Schritt 4:** Führen Sie die ausführbare Datei aus.
.. raw:: html
.. code-block::
./photoresistor
Während der Code läuft, ändert sich die Helligkeit der LED entsprechend der von dem Fotowiderstand erfassten Lichtintensität.
.. note::
Wenn es nach dem Ausführen nicht funktioniert oder die Fehlermeldung „wiringPi.h: No such file or directory“ erscheint, lesen Sie bitte :ref:`install_wiringpi`.
**Code**
.. code-block:: c
#include
#include
#include
#include
#define SPI_CHANNEL 0 // Verwende SPI-Kanal 0 (CE0)
#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 kombinieren
int result = ((buffer[1] & 3) << 8) | buffer[2];
return result;
}
int main(void) {
if (wiringPiSetup() == -1) {
printf("wiringPi init failed!\n");
return 1;
}
if (wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) {
printf("SPI setup failed!\n");
return 1;
}
softPwmCreate(LedPin, 0, 100); // Software-PWM initialisieren
while (1) {
int analogVal = readMCP3008(0); // Von CH0 lesen
printf("ADC Value: %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 identisch mit dem in Abschnitt 2.1.7 Potentiometer.
Wenn Sie weitere Fragen haben, sehen Sie sich bitte die Code-Erklärung in :ref:`2.1.7_c_mcp3008` an.