print("Hello, ESP32!")
from machine import Pin, PWM, ADC
import time
# Definimos los pines
servo1_pin = 18
servo2_pin = 25 # Pin del segundo servo motor
led_rojo1_pin = 19
led_rojo2_pin = 21
led_rojo3_pin = 22
led_luz_pin = 26 # Pin de la luz LED para el sensor de luz
pot_servo1_pin = 34 # Pin del potenciómetro para Servo 1
pot_servo2_pin = 33 # Pin del potenciómetro del segundo servo
pot_led_pin = 35 # Pin del potenciómetro para LEDs
ldr_pin = 32 # Pin del sensor de luz (LDR)
# Umbral de luz (valor de ADC para oscuridad)
LIGHT_THRESHOLD = 2000
# Configuramos los servos
servo1 = PWM(Pin(servo1_pin), freq=50)
servo2 = PWM(Pin(servo2_pin), freq=50)
# Configuramos los LEDs con PWM
led_rojo1 = PWM(Pin(led_rojo1_pin), freq=1000)
led_rojo2 = PWM(Pin(led_rojo2_pin), freq=1000)
led_rojo3 = PWM(Pin(led_rojo3_pin), freq=1000)
led_luz = Pin(led_luz_pin, Pin.OUT) # LED para indicar la oscuridad
# Configuramos los potenciómetros
pot_servo1 = ADC(Pin(pot_servo1_pin))
pot_servo1.atten(ADC.ATTN_11DB) # Configura la atenuación para un rango completo de 0-3.3V
pot_servo2 = ADC(Pin(pot_servo2_pin))
pot_servo2.atten(ADC.ATTN_11DB) # Configura la atenuación para un rango completo de 0-3.3V
pot_led = ADC(Pin(pot_led_pin))
pot_led.atten(ADC.ATTN_11DB) # Configura la atenuación para un rango completo de 0-3.3V
# Configuramos el sensor de luz
ldr = ADC(Pin(ldr_pin))
ldr.atten(ADC.ATTN_11DB) # Configura la atenuación para un rango completo de 0-3.3V
# Función para mover el servo a un ángulo específico
def set_servo_angle(servo, angle):
# Convertimos el ángulo a un ciclo de trabajo adecuado para el servo
duty = int((angle / 180) * 1023 + 26) # Ajusta este valor si es necesario
servo.duty(duty)
# Inicializamos los servos en la posición 0 grados
set_servo_angle(servo1, 0)
set_servo_angle(servo2, 0)
while True:
# Leer el valor del potenciómetro del primer servo (0-4095)
pot_servo1_value = pot_servo1.read()
# Mapear el valor del potenciómetro a un ángulo del primer servo (0-90)
angle1 = int((pot_servo1_value / 4095) * 90)
# Mover el primer servo al ángulo calculado
set_servo_angle(servo1, angle1)
# Leer el valor del potenciómetro del segundo servo (0-4095)
pot_servo2_value = pot_servo2.read()
# Mapear el valor del potenciómetro a un ángulo del segundo servo (0-90)
angle2 = int((pot_servo2_value / 4095) * 90)
# Mover el segundo servo al ángulo calculado
set_servo_angle(servo2, angle2)
# Leer el valor del potenciómetro de los LEDs (0-4095)
pot_led_value = pot_led.read()
# Mapear el valor del potenciómetro al ciclo de trabajo del PWM (0-1023)
led_duty = int((pot_led_value / 4095) * 1023)
# Controlar los LEDs basados en los ángulos de los servos
if angle1 > 0 or angle2 > 0:
led_rojo1.duty(led_duty)
led_rojo2.duty(led_duty)
led_rojo3.duty(led_duty)
else:
led_rojo1.duty(0)
led_rojo2.duty(0)
led_rojo3.duty(0)
# Leer el valor del sensor de luz (0-4095)
ldr_value = ldr.read()
# Encender el LED de luz si está oscuro
if ldr_value < LIGHT_THRESHOLD:
led_luz.on()
else:
led_luz.off()
# Espera un poco antes de la próxima lectura
time.sleep(0.1)