8 Potentiometer en LED


Eerder leerden we hoe we ADC en PWM moesten gebruiken. In dit hoofdstuk leren we hoe u de helderheid van een LED kunt regelen met behulp van een potentiometer.

Project 8.1 Zacht licht

In dit project maken we een zacht licht. We zullen een ADC-module gebruiken om ADC-waarden van een potentiometer te lezen en wijs dit toe aan de duty-cycle-verhouding van de PWM die wordt gebruikt om de helderheid van een LED te regelen. Dan kun je de helderheid van een LED door de potentiometer aan te passen.


Componentenlijst

Configureer I2C en installeer Smbus als u dat nog niet heeft gedaan klik dan hier voor uitleg.

n klik dan hier voor uitleg.

Code

Python-code 8.1.1 Softlight
Als u I2C niet heeft geconfigureerd, raadpleeg dan hoofdstuk 7. Als u dat wel heeft gedaan, ga dan verder.
Observeer eerst het projectresultaat en leer vervolgens in detail over de code.

Gebruik de onderstaande Softlight.py code

Nadat het programma is uitgevoerd, zal het aanpassen van de potentiometer de spanningswaarden weergeven van de potentiometer in het Terminal-venster en de omgerekende digitale grootheid. Als gevolg hiervan is de helderheid van LED gewijzigd.

#!/usr/bin/env python3
########################################################################
# Filename    : ADC.py
# Description : Use ADC module to read the voltage value of potentiometer.
# Author      : www.freenove.com
# modification: 2023/05/11
########################################################################
from gpiozero import PWMLED
import time
from ADCDevice import *

led = PWMLED(17,frequency=1000)      # define LED pin according to BCM Numbering
adc = ADCDevice() # Define an ADCDevice class object

def setup():
    global adc
    if(adc.detectI2C(0x48)): # Detect the pcf8591.
        adc = PCF8591()
    elif(adc.detectI2C(0x4b)): # Detect the ads7830
        adc = ADS7830()
    else:
        print("No correct I2C address found, \n"
        "Please use command 'i2cdetect -y 1' to check the I2C address! \n"
        "Program Exit. \n");
        exit(-1)
        
def loop():
    while True:
        value = adc.analogRead(0)      # read the ADC value of channel 0
        led.value = value / 255.0      # Mapping to PWM duty cycle       
        voltage = value / 255.0 * 3.3  # calculate the voltage value
        print ('ADC Value : %d, Voltage : %.2f'%(value,voltage))
        time.sleep(0.03)

def destroy():
    led.close()
    adc.close()
    
if __name__ == '__main__':   # Program entrance
    print ('Program is starting ... ')
    try:
        setup()
        loop()
    except KeyboardInterrupt: # Press ctrl-c to end the program.
        destroy()
        print("Ending program")

Lees in de code de ADC-waarde van potentiometers en wijs deze toe aan de werkcyclus van de PWM om de LED te besturen helderheid.

Scroll naar boven