.. 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.