Nota

Ciao, benvenuto nella Community SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 con altri appassionati.

Perché unirsi?

  • 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 anticipo agli annunci dei nuovi prodotti e alle anteprime.

  • Sconti speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e giveaway: Partecipa a giveaway e promozioni festive.

👉 Pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!

2.2.1 Fotoresistenza (MCP3008)

Nota

../_images/mcp3008_and_adc0834.jpg

A seconda della versione del tuo kit, identifica se hai ADC0834 o MCP3008 e procedi con la sezione corrispondente.

Introduzione

La fotoresistenza è un componente comunemente utilizzato per rilevare l’intensità della luce ambientale. Aiuta il controllore a distinguere tra giorno e notte e a realizzare funzioni di controllo della luce come le lampade notturne. Questo progetto è molto simile a quello con il potenziometro, con la differenza che qui si varia la tensione in base alla luce rilevata.

Componenti necessari

In questo progetto sono necessari i seguenti componenti.

../_images/list2_2.2.1_photoresistor.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTE

LINK DI ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED

ACQUISTA

MCP3008

-

Fotoresistore

ACQUISTA

Schema elettrico

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

../_images/schematic_2.2.1_photoresistor_mcp3008.png

Procedure sperimentali

Passo 1: Monta il circuito.

../_images/july24_2.2.1_photoresistor_mcp3008.png

Passo 2: Vai alla cartella del codice.

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

Passo 3: Compila il codice.

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

Passo 4: Esegui il file eseguibile.

./photoresistor

Quando il codice è in esecuzione, la luminosità del LED cambierà in base all’intensità della luce rilevata dalla fotoresistenza.

Nota

Se non funziona dopo l’esecuzione o compare un errore del tipo: "wiringPi.h: No such file or directory", fai riferimento a Installazione e verifica di WiringPi.

Codice

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

#define SPI_CHANNEL 0      // Usa il canale SPI 0 (CE0)
#define SPI_SPEED   1000000 // Velocità SPI 1 MHz
#define LedPin      3       // GPIO3 (WiringPi) per PWM LED

// Leggi il valore ADC da MCP3008, canale 0~7
int readMCP3008(int channel) {
    if (channel < 0 || channel > 7) return -1;

    unsigned char buffer[3];
    buffer[0] = 1;                          // Bit di avvio
    buffer[1] = (8 + channel) << 4;         // SGL/DIF = 1, D2-D0 = canale
    buffer[2] = 0;

    wiringPiSPIDataRW(SPI_CHANNEL, buffer, 3);

    // Combina il risultato
    int result = ((buffer[1] & 3) << 8) | buffer[2];
    return result;
}

int main(void) {
    if (wiringPiSetup() == -1) {
        printf("Inizializzazione wiringPi fallita!\n");
        return 1;
    }

    if (wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) {
        printf("Configurazione SPI fallita!\n");
        return 1;
    }

    softPwmCreate(LedPin, 0, 100); // Inizializza PWM software

    while (1) {
        int analogVal = readMCP3008(0); // Lettura da CH0
        printf("Valore ADC: %d\n", analogVal);

        // Scala il valore ADC a 10 bit (0–1023) all'intervallo PWM (0–100)
        int pwmVal = analogVal * 100 / 1023;
        softPwmWrite(LedPin, pwmVal);

        delay(100);
    }

    return 0;
}

Spiegazione del codice

Il codice qui è identico a quello della sezione 2.1.7 Potenziometro. Se hai altre domande, consulta la spiegazione del codice in 2.1.7 Potenziometro (MCP3008) per maggiori dettagli.