Note

Bonjour et bienvenue dans la communauté SunFounder Raspberry Pi & Arduino & ESP32 sur Facebook ! Plongez plus profondément dans l’univers du Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi nous rejoindre ?

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

  • Apprenez & Partagez : Échangez des conseils et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Profitez d’un accès anticipé aux annonces de nouveaux produits et à des avant-premières.

  • Réductions spéciales : Bénéficiez de remises exclusives sur nos derniers produits.

  • Promotions festives et concours : Participez à des concours et à des promotions spéciales.

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

2.2.1 Photorésistance (MCP3008)

Note

../_images/mcp3008_and_adc0834.jpg

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

Introduction

La photorésistance est un composant couramment utilisé pour mesurer l’intensité lumineuse ambiante. Elle aide le contrôleur à reconnaître le jour et la nuit, et permet de réaliser des fonctions de contrôle de la lumière, comme l’allumage d’une lampe de nuit. Ce projet est très similaire à celui du potentiomètre, mais ici la variation de tension est liée à la lumière.

Composants requis

Dans ce projet, nous avons besoin des composants suivants :

../_images/list2_2.2.1_photoresistor.png

Schéma de câblage

Nom sur la 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 : Construire le circuit.

../_images/2.2.1_Photoresistor_bb.png

Étape 2 : Aller dans le dossier du code.

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

Étape 3 : Exécuter le code.

sudo node photoresistor-2.js

Code

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

// Ouvrir le canal 0 du MCP3008 (entrée analogique CH0)
const adc = mcpadc.openMcp3008(0, { speedHz: 1350000 }, (err) => {
if (err) {
    console.error("Impossible d’ouvrir le MCP3008 :", err);
    process.exit(1);
}

console.log("MCP3008 initialisé sur SPI0/CE0.");

// Initialiser la LED sur GPIO22 (compatible PWM)
const led = new Gpio(22, { mode: Gpio.OUTPUT });

// Lire l’ADC et mettre à jour la luminosité de la LED toutes les 100 ms
const interval = setInterval(() => {
    adc.read((err, reading) => {
    if (err) {
        console.error("Erreur de lecture ADC :", err);
        return;
    }

    const adcValue = reading.value;          // Valeur flottante entre 0.0 et 1.0
    const pwmValue = Math.round(adcValue * 255); // Échelle 0–255

    console.log(`ADC = ${adcValue.toFixed(4)}, PWM = ${pwmValue}`);

    led.pwmWrite(pwmValue); // Mettre à jour la luminosité de la LED
    });
}, 100);

// Gestion de Ctrl+C (SIGINT) pour un arrêt propre
process.on('SIGINT', () => {
    console.log('\nArrêt en cours...');
    clearInterval(interval);  // Arrêter la boucle
    led.digitalWrite(0);      // Éteindre la LED
    process.exit(0);
});
});

Explication du code

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

Importe le module pigpio, utilisé pour contrôler les broches GPIO du Raspberry Pi. Il prend en charge la sortie PWM nécessaire pour faire varier la luminosité d’une LED.

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

Importe la bibliothèque mcp-spi-adc, qui permet de communiquer avec le convertisseur analogique-numérique MCP3008 via l’interface SPI matérielle du Raspberry Pi.

const adc = mcpadc.openMcp3008(0, { speedHz: 1350000 }, (err) => { ... });

Ouvre le canal d’entrée analogique 0 du MCP3008 en utilisant le SPI matériel. La fréquence d’horloge SPI est définie à 1,35 MHz. En cas d’erreur lors de l’ouverture, le programme l’affiche et s’arrête.

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

Initialise la broche GPIO22 comme sortie. Cette broche contrôle la luminosité de la LED via PWM avec la bibliothèque pigpio.

setInterval(() => {
    adc.read((err, reading) => {
        ...
    });
}, 100);

Met en place une boucle répétée toutes les 100 ms. À chaque cycle, elle lit la valeur analogique du canal 0 du MCP3008. La valeur obtenue est un flottant entre 0.0 et 1.0, représentant le rapport entre la tension d’entrée et la tension de référence.

const pwmValue = Math.round(adcValue * 255);
led.pwmWrite(pwmValue);

Convertit la valeur analogique en un signal PWM 8 bits (0–255) et l’envoie à GPIO22 pour ajuster la luminosité de la LED proportionnellement.

process.on('SIGINT', () => {
    clearInterval(interval);
    led.digitalWrite(0);
    process.exit(0);
});

Ajoute un gestionnaire de signal pour arrêter proprement le programme lorsque Ctrl+C est pressé. Il stoppe la boucle, éteint la LED et termine l’exécution.