.. note:: Ciao, benvenuto nella Community di appassionati SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati. **Perché unirti?** - **Supporto esperto**: Risolvi problemi post-vendita e sfide tecniche con l'aiuto della nostra community e del nostro team. - **Impara e condividi**: Scambia suggerimenti e tutorial per migliorare le tue competenze. - **Anteprime esclusive**: Accedi in anteprima agli annunci dei nuovi prodotti e alle anticipazioni. - **Sconti speciali**: Godi di sconti esclusivi sui nostri prodotti più recenti. - **Promozioni festive e giveaway**: Partecipa a giveaway e promozioni per le festività. 👉 Pronto a esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti oggi stesso! .. _2.1.4_js_pi5_mcp3008: 2.1.4 Potenziometro (MCP3008) ============================= .. note:: .. image:: ../img/mcp3008_and_adc0834.jpg :width: 25% :align: left A seconda della versione del kit, identifica se hai **ADC0834** o **MCP3008** e segui la sezione corrispondente. Introduzione ------------ La funzione ADC viene utilizzata per convertire segnali analogici in valori digitali. In questo esperimento, utilizziamo il chip ADC MCP3008 per effettuare questa conversione. Un potenziometro viene utilizzato per generare una tensione variabile, che modifica la grandezza fisica. L’MCP3008 converte poi questa tensione analogica in un valore digitale che può essere letto ed elaborato dal Raspberry Pi. Componenti necessari -------------------- In questo progetto, abbiamo bisogno dei seguenti componenti. .. image:: ../img/list2_2.1.4_potentiometer.png Schema elettrico ---------------- .. list-table:: :widths: 30 30 30 30 :header-rows: 1 * - Nome T-Board - Fisico - 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.1.7_potentiometer_mcp3008.png Procedura sperimentale ---------------------- **Passo 1:** Montare il circuito. .. image:: ../img/2.1.7_Potentiometer_bb.png .. note:: Posiziona il chip facendo riferimento alla posizione corrispondente mostrata nell'immagine. Nota che le scanalature sul chip devono essere sul lato sinistro quando viene posizionato. **Passo 2:** Aprire il file di codice. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/nodejs/ **Passo 3:** Eseguire il codice. .. raw:: html .. code-block:: sudo node potentionmeter-2.js Dopo l'esecuzione del codice, ruotando la manopola del potenziometro, l'intensità del LED cambierà di conseguenza. **Codice** .. code-block:: js const Gpio = require('pigpio').Gpio; const mcpadc = require('mcp-spi-adc'); // Apri il canale 0 dell’MCP3008 (ingresso analogico CH0) const adc = mcpadc.openMcp3008(0, { speedHz: 1000000 }, (err) => { if (err) { console.error("Impossibile aprire il canale ADC:", err); process.exit(1); } console.log("Canale 0 MCP3008 aperto con successo."); // Inizializza LED su GPIO22 in modalità uscita PWM const led = new Gpio(22, { mode: Gpio.OUTPUT }); // Legge il valore ADC ogni 100 ms e aggiorna la luminosità del LED setInterval(() => { adc.read((err, reading) => { if (err) { console.error("Errore nella lettura ADC:", err); return; } // Converte il valore in virgola mobile (0.0–1.0) nell'intervallo PWM (0–255) const pwmVal = Math.round(reading.value * 255); console.log(`Valore analogico attuale: ${pwmVal}`); // Aggiorna la luminosità del LED tramite PWM led.pwmWrite(pwmVal); }); }, 100); }); **Spiegazione del codice** .. code-block:: js const Gpio = require('pigpio').Gpio; Questa riga importa il modulo ``pigpio``, che consente un controllo preciso di PWM e GPIO sul Raspberry Pi. .. code-block:: js const mcpadc = require('mcp-spi-adc'); Questa riga importa la libreria ``mcp-spi-adc``, che consente la comunicazione con l'MCP3008 tramite l'interfaccia SPI. .. code-block:: js const adc = mcpadc.openMcp3008(0, { speedHz: 1000000 }, (err) => { if (err) { console.error("Impossibile aprire il canale ADC:", err); process.exit(1); } }); Inizializza il canale di ingresso analogico 0 dell’MCP3008. Imposta la velocità di comunicazione SPI a 1 MHz. Se l’inizializzazione fallisce, registra un errore ed esce dal programma. .. code-block:: js const led = new Gpio(22, { mode: Gpio.OUTPUT }); Crea un oggetto GPIO per il pin 22 del Raspberry Pi. Questo pin è configurato come uscita e sarà utilizzato per controllare la luminosità di un LED tramite PWM. .. code-block:: js setInterval(() => { adc.read((err, reading) => { if (err) { console.error("Errore nella lettura ADC:", err); return; } const pwmVal = Math.round(reading.value * 255); console.log(`Valore analogico attuale: ${pwmVal}`); led.pwmWrite(pwmVal); }); }, 100); Ogni 100 millisecondi, questa funzione legge il valore analogico dal canale 0 dell’MCP3008. L’ADC restituisce un numero in virgola mobile normalizzato tra 0.0 e 1.0. Questo valore viene scalato all’intervallo 0–255 e scritto su GPIO22 tramite ``pwmWrite()`` per controllare la luminosità del LED. Il valore PWM viene anche stampato sulla console.