Note

Bonjour, bienvenue dans la communauté SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts sur Facebook ! Approfondissez vos connaissances sur Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi rejoindre ?

  • Support d’experts : Résolvez les problèmes après‑vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Accédez en avant‑première aux annonces de nouveaux produits et aux aperçus.

  • Réductions spéciales : Profitez de réductions exclusives sur nos tout derniers produits.

  • Promotions et cadeaux festifs : Participez à des concours et promotions spéciales pendant les fêtes.

👉 Prêt à explorer et à créer avec nous ? Cliquez sur [Ici] et rejoignez‑nous dès aujourd’hui !

2.2.1 Photo‑résistance (MCP3008)

Note

../_images/mcp3008_and_adc0834.jpg

Selon la version de votre kit, identifiez si vous disposez d’un ADC0834 ou d’un MCP3008 et suivez la section correspondante.

Introduction

La photo‑résistance est un composant couramment utilisé pour mesurer l’intensité lumineuse ambiante. Elle aide le contrôleur à distinguer le jour et la nuit et permet de réaliser des fonctions de commande de lumière telles qu’une lampe de nuit. Ce projet est très similaire à celui du potentiomètre ; vous pouvez considérer cela comme une variation de tension en fonction de la lumière détectée.

Composants requis

Dans ce projet, nous avons besoin des composants suivants.

../_images/list2_2.2.1_photoresistor.png

Il est bien sûr pratique d’acheter un kit complet, voici le lien :

Nom

ÉLÉMENTS DANS CE KIT

LIEN

Kit Raphael

337

Raphael Kit

Vous pouvez également les acheter séparément via les liens ci‑dessous.

INTRODUCTION DU COMPOSANT

LIEN D’ACHAT

Carte d’extension GPIO

ACHETER

Plaque d’expérimentation (Breadboard)

ACHETER

Fils de Liaison

ACHETER

Résistance

ACHETER

LED

ACHETER

MCP3008

-

Photoresistor

ACHETER

Schéma de câblage

Nom T‑Board

physique

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

Procédures expérimentales

Étape 1 : Construisez le circuit.

../_images/july24_2.2.1_photoresistor_mcp3008.png

Étape 2 : Accédez au dossier du code.

cd ~/raphael-kit/c/2.2.1-2/

Étape 3 : Compilez le code.

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

Étape 4 : Exécutez l’exécutable.

./photoresistor

Lorsque le code est en cours d’exécution, la luminosité de la LED changera en fonction de l’intensité lumineuse détectée par la photo‑résistance.

Note

Si cela ne fonctionne pas après exécution ou s’il y a un message d’erreur : « wiringPi.h : No such file or directory », veuillez vous référer à Installer et vérifier WiringPi.

Code

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

#define SPI_CHANNEL 0       // Utilise le canal SPI 0 (CE0)
#define SPI_SPEED   1000000 // Vitesse SPI 1 MHz
#define LedPin      3       // GPIO3 (WiringPi) pour le PWM de la LED

// Lire la valeur ADC depuis MCP3008, canal 0~7
int readMCP3008(int channel) {
    if (channel < 0 || channel > 7) return -1;

    unsigned char buffer[3];
    buffer[0] = 1;                          // Bit de démarrage
    buffer[1] = (8 + channel) << 4;         // SGL/DIF = 1, D2-D0 = canal
    buffer[2] = 0;

    wiringPiSPIDataRW(SPI_CHANNEL, buffer, 3);

    // Combiner le résultat
    int result = ((buffer[1] & 3) << 8) | buffer[2];
    return result;
}

int main(void) {
    if (wiringPiSetup() == -1) {
        printf("Échec de l’initialisation de wiringPi !\n");
        return 1;
    }

    if (wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) {
        printf("Échec de la configuration SPI !\n");
        return 1;
    }

    softPwmCreate(LedPin, 0, 100); // Initialiser le PWM logiciel

    while (1) {
        int analogVal = readMCP3008(0); // Lecture sur CH0
        printf("Valeur ADC : %d\n", analogVal);

        // Mise à l’échelle de la valeur ADC 10 bits (0–1023) vers la plage PWM (0–100)
        int pwmVal = analogVal * 100 / 1023;
        softPwmWrite(LedPin, pwmVal);

        delay(100);
    }

    return 0;
}

Explication du code

Le code est identique à celui de la section 2.1.7 Potentiomètre (Potentiomètre). Si vous avez d’autres questions, veuillez consulter l’explication du code de cette section pour plus de détails.