UBISS2024exam: Difference between revisions

From Sketching with Hardware at LMU Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
<syntaxhighlight lang="python" line='line'>import time
<syntaxhighlight lang="python" line='line'>
from machine import Pin
 
x = Pin(6, Pin.OUT)
from machine import Pin, ADC
while (True):
from time import sleep
  x.on()
 
  time.sleep_ms(500)
# Initialize the light sensor (LDR) and LED
  x.off()
ldr = ADC(Pin(12))
  time.sleep_ms(100)
led = Pin(20, Pin.OUT)
 
def get_duty_cycle(light_value):
    # Map the light value to the duty cycle
    # Completely dark (350) -> 90% on, 10% off
    # Completely bright (790) -> 10% on, 90% off
    min_light = 350
    max_light = 790
    min_duty = 90
    max_duty = 10
   
    duty_cycle = min_duty + (max_duty - min_duty) * ((light_value - min_light) / (max_light - min_light))
    return duty_cycle
 
while True:
    # Read the light value
    light_value = ldr.read_u16()  # Read the analog value (16-bit)
    light_value = (light_value / 65535) * (790 - 350) + 350  # Scale to 350-790 range
 
    # Calculate the duty cycle
    duty_cycle = get_duty_cycle(light_value)
   
    # Calculate on and off times
    on_time = duty_cycle / 100.0
    off_time = 1.0 - on_time
   
    # Control the LED
    led.on()
    sleep(on_time)
    led.off()
    sleep(off_time)
 
 
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 13:54, 13 June 2024

from machine import Pin, ADC
from time import sleep

# Initialize the light sensor (LDR) and LED
ldr = ADC(Pin(12))
led = Pin(20, Pin.OUT)

def get_duty_cycle(light_value):
    # Map the light value to the duty cycle
    # Completely dark (350) -> 90% on, 10% off
    # Completely bright (790) -> 10% on, 90% off
    min_light = 350
    max_light = 790
    min_duty = 90
    max_duty = 10
    
    duty_cycle = min_duty + (max_duty - min_duty) * ((light_value - min_light) / (max_light - min_light))
    return duty_cycle

while True:
    # Read the light value
    light_value = ldr.read_u16()  # Read the analog value (16-bit)
    light_value = (light_value / 65535) * (790 - 350) + 350  # Scale to 350-790 range

    # Calculate the duty cycle
    duty_cycle = get_duty_cycle(light_value)
    
    # Calculate on and off times
    on_time = duty_cycle / 100.0
    off_time = 1.0 - on_time
    
    # Control the LED
    led.on()
    sleep(on_time)
    led.off()
    sleep(off_time)