10 Fotoweerstand en LED


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.

Image

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

Image

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.

Image
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:

Nightlamp.py

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

Scroll naar boven