Tutorial_Python_GPIOZero Bladzijde 109
Alle codes (van proefjes) overzichtelijk op een rij
Staat het project er niet bij kijk dan hier
In dit hoofdstuk leren we hoe we een fotoresistor kunnen gebruiken om een automatisch dimmend nachtlampje te maken.
Project 10.1 Nachtlamp
Een fotoresistor is erg gevoelig voor de hoeveelheid aanwezig licht. We kunnen profiteren van het kenmerk om een nachtlampje te maken met de volgende functie. Wanneer het omgevingslicht minder is (donkerdere omgeving), zal de LED automatisch helderder worden ter compensatie en wanneer het omgevingslicht groter is (helderder omgeving) zal de LED automatisch dimmen ter compensatie.
Componentenlijst

Componentenkennis
Fotoweerstand
Een fotoresistor is eenvoudigweg een lichtgevoelige weerstand. Het is een actief bestanddeel dat de weerstand verlaagt met betrekking tot het ontvangen van helderheid (licht) op het lichtgevoelige oppervlak van de component. De weerstand van een fotoresistor
De waarde zal veranderen in verhouding tot het gedetecteerde omgevingslicht. Met dit kenmerk kunnen we a gebruiken Fotoresistor om de lichtintensiteit te detecteren. De fotoresistor en het elektronische symbool zijn als volgt.

Het onderstaande circuit wordt gebruikt om de verandering van de weerstandswaarde van een fotoresistor te detecteren:

In het bovenstaande circuit, wanneer het weerstandsdal van een fotoresistor verandert als gevolg van een verandering in de lichtintensiteit, zal de spanning tussen de fotoresistor en weerstand R1 zal ook veranderen.
Daarom kan de intensiteit van het licht worden verkregen door deze spanning te meten.
Schakeling met ADS7830
Het gebruikte circuit is vergelijkbaar met het Soft light-project. Het enige verschil is dat het ingangssignaal van de AIN0-pin is van ADC verandert van een potentiometer naar een combinatie van een fotoresistor en een weerstand.


Configureer I2C en installeer Smbus als u dat nog niet heeft gedaan klik dan hier voor uitleg.
Code
De code die in dit project wordt gebruikt, is identiek aan die in het vorige hoofdstuk.
Python-code 10.1.1 Nachtlamp
Als u I2C niet heeft geconfigureerd, raadpleeg dan Configureer I2C en installeer Smbus. Als u dat wel heeft gedaan, ga dan verder.
Observeer eerst het projectresultaat en leer vervolgens in detail over de code.
Nadat het programma is uitgevoerd en u de fotoresistor afdekt of het licht erop laat schijnen, wordt de helderheid groter van de LED verandert dienovereenkomstig.
Net als in eerdere projecten zal het Terminal-venster de huidige invoer weergeven spanningswaarde van ADC-module A0-pin en de geconverteerde digitale hoeveelheid.
Het volgende is de programmacode:
#!/usr/bin/env python3
#############################################################################
# Filename : Nightlamp.py
# Description : Control LED with Photoresistor
# Author : www.freenove.com
# modification: 2023/05/11
########################################################################
from gpiozero import PWMLED
import time
from ADCDevice import *
ledPin = 17 # define ledPin
led = PWMLED(ledPin)
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
print ('ADC Value : %d, Voltage : %.2f'%(value,voltage))
time.sleep(0.01)
def destroy():
led.close()
adc.close()
if __name__ == '__main__': # Program entrance
print ('Program is starting ... ')
setup()
try:
loop()
except KeyboardInterrupt: # Press ctrl-c to end the program.
destroy()
print("Ending program")