.. 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 [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! .. _2.2.1_js_pi5_mcp3008: 2.2.1 Photorésistance (MCP3008) =============================== .. note:: .. image:: ../img/mcp3008_and_adc0834.jpg :width: 25% :align: left 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 : .. image:: ../img/list2_2.2.1_photoresistor.png Schéma de câblage ----------------- .. list-table:: :widths: 30 30 30 30 :header-rows: 1 * - 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 .. image:: ../img/schematic_2.2.1_photoresistor_mcp3008.png Procédures expérimentales ------------------------- **Étape 1 :** Construire le circuit. .. image:: ../img/2.2.1_Photoresistor_bb.png **Étape 2 :** Aller dans le dossier du code. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/nodejs/ **Étape 3 :** Exécuter le code. .. raw:: html .. code-block:: sudo node photoresistor-2.js **Code** .. code-block:: js 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** .. code-block:: js 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. .. code-block:: js 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. .. code-block:: js 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. .. code-block:: js 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``. .. code-block:: js 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. .. code-block:: js 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. .. code-block:: js 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.