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.

