Nota

Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto Tecnico Esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa a giveaway e promozioni durante le festività.

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

2.2.1 Fotoresistore

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

Il fotoresistore è un componente comunemente utilizzato per rilevare l’intensità della luce ambientale nella vita quotidiana. Aiuta il controller a riconoscere il giorno e la notte, realizzando funzioni di controllo della luce come la lampada notturna. Questo progetto è molto simile a quello del potenziometro e potresti pensare che cambi la tensione per rilevare la luce.

Componenti Necessari

Per questo progetto, avremo bisogno dei seguenti componenti.

../_images/2.2.1_photoresistor_list.png

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

Nome

COMPONENTI NEL KIT

LINK

Raphael Kit

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK D’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED

ACQUISTA

ADC0834

-

Fotoresistore

ACQUISTA

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 alla cartella del codice.

cd ~/raphael-kit/python-pi5

Passo 3: Esegui il file eseguibile.

sudo python3 2.2.1_Photoresistor_zero.py

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

Avvertimento

Se viene visualizzato l’errore RuntimeError: Cannot determine SOC peripheral base address, fare riferimento a If gpiozero doesn’t work..

Code

Nota

Puoi Modificare/Resettare/Copiare/Eseguire/Fermare il codice qui sotto. Ma prima, devi accedere alla directory del codice come raphael-kit/python-pi5. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.

#!/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()

# Definisci 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

# Loop 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('valore = %d' % analogVal)

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

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

# Esegui il loop principale e gestisci KeyboardInterrupt per una chiusura pulita
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 basate sul tempo 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 per il controllo PWM.

    # Definisci 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 loop che legge continuamente il valore analogico dall’ADC0834, lo mappa su un valore PWM corrispondente e regola la luminosità del LED. Viene incluso un breve ritardo (time.sleep(0.2)) per rendere visibili i cambiamenti e per evitare di sovraccaricare la CPU.

    # Loop 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 ADC a un valore PWM e imposta la luminosità del LED
            led.value = float(analogVal/255)
    
            # Attendi per 0,2 secondi
            time.sleep(0.2)
    
  5. Esegue la funzione loop e include la gestione degli errori per una chiusura pulita con KeyboardInterrupt. Garantisce che il LED venga spento quando il programma viene interrotto.

    # Esegui il loop principale e gestisci KeyboardInterrupt per una chiusura pulita
    try:
        loop()
    except KeyboardInterrupt:
        # Spegni il LED prima di uscire
        led.value = 0