Nota

Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

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

  • Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime speciali.

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

  • Promozioni festive e concorsi: Partecipa a concorsi e promozioni durante le festività.

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

2.1.7 Potenziometro

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 funzione ADC può essere utilizzata per convertire segnali analogici in segnali digitali, e in questo esperimento viene utilizzato l’ADC0834 per ottenere la funzione ADC. In questo progetto, implementiamo questo processo utilizzando un potenziometro. Il potenziometro modifica la quantità fisica - la tensione, che viene convertita dalla funzione ADC.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/list_2.1.4_potentiometer.png

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

Nome

ARTICOLI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link qui sotto.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED

ACQUISTA

Potenziometro

ACQUISTA

ADC0834

-

Schema Elettrico

../_images/image311.png ../_images/image312.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/image180.png

Nota

Posiziona il chip facendo riferimento alla posizione corrispondente indicata nell’immagine. Nota che le scanalature sul chip dovrebbero essere sul lato sinistro quando è posizionato.

Passo 2: Apri il file del codice

cd ~/raphael-kit/python/

Passo 3: Esegui.

sudo python3 2.1.7_Potentiometer.py

Dopo l’esecuzione del codice, ruota la manopola del potenziometro e l’intensità del LED cambierà di conseguenza.

Codice

Nota

Puoi Modificare/Reimpostare/Copiare/Eseguire/Interrompere il codice qui sotto. Ma prima devi accedere al percorso del codice come raphael-kit/python. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.

#!/usr/bin/env python3

import RPi.GPIO as GPIO
import ADC0834
import time

LedPin = 22

def setup():
    global led_val
    # Imposta la modalità di numerazione GPIO su BCM
    GPIO.setmode(GPIO.BCM)
    # Imposta tutte le modalità dei LedPin come output e il livello iniziale su Alto (3.3V)
    GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH)
    ADC0834.setup()
    # Imposta il led come canale PWM e la frequenza a 2KHz
    led_val = GPIO.PWM(LedPin, 2000)

    # Imposta tutti i valori iniziali a 0
    led_val.start(0)

# Definisci una funzione MAP per mappare i valori, ad esempio da 0~255 a 0~100
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

def destroy():
    # Ferma tutti i canali PWM
    led_val.stop()
    # Rilascia le risorse
    GPIO.cleanup()

def loop():
    while True:
        res = ADC0834.getResult()
        print ('res = %d' % res)
        R_val = MAP(res, 0, 255, 0, 100)
        led_val.ChangeDutyCycle(R_val)
        time.sleep(0.2)

if __name__ == '__main__':
    setup()
    try:
        loop()
    except KeyboardInterrupt: # Quando viene premuto 'Ctrl+C', il programma destroy() verrà eseguito.
        destroy()

Spiegazione del Codice

import ADC0834

Importa la libreria ADC0834. Puoi verificare il contenuto della libreria chiamando il comando nano ADC0834.py.

def setup():
    global led_val
    # Imposta la modalità di numerazione GPIO su BCM
    GPIO.setmode(GPIO.BCM)
    # Imposta tutte le modalità dei LedPin come output e il livello iniziale su Alto (3.3v)
    GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH)
    ADC0834.setup()
    # Imposta il led come canale PWM e la frequenza a 2KHz
    led_val = GPIO.PWM(LedPin, 2000)

    # Imposta tutti i valori iniziali a 0
    led_val.start(0)

In setup(), definisci il metodo di numerazione come BCM, imposta LedPin come canale PWM e assegna una frequenza di 2Khz.

ADC0834.setup(): Inizializza ADC0834 e collega i pin definiti CS, CLK, DIO di ADC0834 rispettivamente a GPIO17, GPIO18 e GPIO27.

def loop():
    while True:
        res = ADC0834.getResult()
        print ('res = %d' % res)
        R_val = MAP(res, 0, 255, 0, 100)
        led_val.ChangeDutyCycle(R_val)
        time.sleep(0.2)

La funzione getResult() viene utilizzata per leggere i valori analogici dei quattro canali di ADC0834. Per impostazione predefinita, la funzione legge il valore di CH0, e se desideri leggere altri canali, inserisci il numero del canale in ( ), es. getResult(1).

La funzione loop() prima legge il valore di CH0 e lo assegna alla variabile res. Successivamente, chiama la funzione MAP per mappare il valore letto del potenziometro a 0~100. Questo passaggio viene utilizzato per controllare il ciclo di lavoro di LedPin. Ora, puoi vedere che la luminosità del LED cambia con il valore del potenziometro.

Immagine del Fenomeno

../_images/image181.jpeg