Nota

Ciao e benvenuto nella Community di Appassionati di SunFounder per Raspberry Pi, Arduino ed ESP32 su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 insieme ad 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 consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci dei nuovi prodotti e a contenuti esclusivi.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri nuovi prodotti.

  • Promozioni Festive e Giveaway: Partecipa a concorsi e promozioni festive.

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

2.2.1 Fotoresistenza

Nota

../_images/mcp3008_and_adc0834.jpg

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

Introduzione

La fotoresistenza è un componente comune utilizzato per rilevare l’intensità della luce ambientale. Aiuta il controllore a riconoscere il giorno e la notte e a realizzare funzioni di controllo dell’illuminazione, come le lampade notturne. Questo progetto è molto simile al potenziometro, e puoi considerarlo come un cambio di tensione per il rilevamento della luce.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/2.2.1_photoresistor_list.png

Schema Elettrico

../_images/2.2.1_photoresistor_schematic_1.png ../_images/2.2.1_photoresistor_schematic_2.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/2.2.1_photoresistor_circuit.png

Passo 2: Vai nella cartella del codice.

cd ~/davinci-kit-for-raspberry-pi/python-pi5

Passo 3: Esegui il file eseguibile.

sudo python3 2.2.1_Photoresistor.py

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

Avvertimento

Se compare l’errore RuntimeError: Cannot determine SOC peripheral base address, consulta Se gpiozero non funziona.

Codice

Nota

Puoi Modificare/Reimpostare/Copiare/Eseguire/Interrompere il codice qui sotto. Prima di farlo, però, vai al percorso del codice sorgente, come davinci-kit-for-raspberry-pi/python-pi5. Dopo aver modificato il codice, potrai eseguirlo direttamente per vedere il risultato.

#!/usr/bin/env python3
from gpiozero import PWMLED
import ADC0834
import time

# Inizializza un LED PWM sul pin GPIO 22
led = PWMLED(22)

# Configura il modulo ADC0834
ADC0834.setup()

# Definisce una funzione per mappare i valori da un intervallo a un altro
def MAP(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

# Ciclo principale per leggere il valore ADC e controllare la luminosità del LED
def loop():
    while True:
        # Leggi il valore analogico dall'ADC
        analogVal = ADC0834.getResult()
        print('value = %d' % analogVal)

        # Mappa il valore dell'ADC a un valore PWM e imposta la luminosità del LED
        led.value = float(analogVal/255)

        # Attendi 0,2 secondi
        time.sleep(0.2)

# Esegui il ciclo principale e gestisci l'interruzione con Ctrl+C per una chiusura ordinata
try:
    loop()
except KeyboardInterrupt:
    # Spegni il LED prima di uscire
    led.value = 0

Spiegazione del Codice

  1. Questo segmento importa la classe PWMLED dalla libreria gpiozero, necessaria per controllare i LED PWM. Include anche il modulo ADC0834 per interfacciarsi con il convertitore analogico-digitale e il modulo time per eseguire funzioni temporizzate come sleep.

    #!/usr/bin/env python3
    from gpiozero import PWMLED
    import ADC0834
    import time
    
  2. Inizializza un LED PWM collegato al pin GPIO 22 e configura il modulo ADC0834, preparandolo per l’uso nel progetto.

    # Inizializza un LED PWM sul pin GPIO 22
    led = PWMLED(22)
    
    # Configura il modulo ADC0834
    ADC0834.setup()
    
  3. Definisce una funzione per mappare un valore di input da un intervallo a un altro. Questa funzione è essenziale per tradurre le letture dell’ADC in un intervallo adatto al controllo PWM.

    # Definisce una funzione per mappare i valori da un intervallo a un altro
    def MAP(x, in_min, in_max, out_min, out_max):
        return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
    
  4. Questa sezione contiene un ciclo che legge continuamente il valore analogico dall’ADC0834, lo mappa a un valore PWM corrispondente e regola la luminosità del LED. È incluso un breve ritardo (time.sleep(0.2)) per rendere visibili le modifiche e per evitare di sovraccaricare la CPU.

    # Ciclo principale per leggere il valore ADC e controllare la luminosità del LED
    def loop():
        while True:
            # Leggi il valore analogico dall'ADC
            analogVal = ADC0834.getResult()
            print('value = %d' % analogVal)
    
            # Mappa il valore dell'ADC a un valore PWM e imposta la luminosità del LED
            led.value = float(analogVal/255)
    
            # Attendi 0,2 secondi
            time.sleep(0.2)
    
  5. Esegue la funzione loop e include la gestione degli errori per una chiusura ordinata su KeyboardInterrupt. Assicura che il LED sia spento quando il programma viene interrotto.

    # Esegui il ciclo principale e gestisci l'interruzione con Ctrl+C per una chiusura ordinata
    try:
        loop()
    except KeyboardInterrupt:
        # Spegni il LED prima di uscire
        led.value = 0