Movimiento de servomotor con buzzer

Estoy con un proyecto y soy novato totalmente, ando con tinkercad y viendo todo tipo de tutoriales para aprender, pero estoy por tirar la toalla.
El proyecto consiste:
un sensor tcrt5000 esta dando señal constantemente, cuando deja de dar la señal un servo se activa haciendo un movimiento de 90 grados durante 5 segundos y mientras tanto un buzzer este sonando durante dos segundos.
Cuando el sensor vuelva a tener señal se restablece el servomotor a 0 grados y si volveria a perder la señal empezaria el ciclo de nuevo.
Estoy perdido no...lo siguiente.
Gracias de antemano.

Moderador
Lee las normas del foro y postea tu código para poder sugerirte algo.

he cogido y le he pedido ayuda a la IA , es que cuando paso lo que hago yo al programa de Arduino salen 40 fallos, al menos el de la IA no, lo que no sé si funcionara lo que yo quiero. Estoy a falta de recibir materiales. Os dejo aqui el que me ha desarrollado la IA.

#include <Servo.h>

Servo myservo;  // crea el objeto Servo
int buzzerPin = 8;  // asocia el buzzer al pin digital 8
int sensorPin = 2;  // asocia el sensor TCRT5000 al pin digital 2
int sensorState = 0;  // variable para almacenar el estado del sensor

void setup() {
  myservo.attach(9);  // asocia el servo al pin digital 9
  pinMode(buzzerPin, OUTPUT);  // establece el pin del buzzer como salida
  pinMode(sensorPin, INPUT);   // establece el pin del sensor como entrada
}

void loop() {
  sensorState = digitalRead(sensorPin);  // lee el estado del sensor

  if (sensorState == LOW) {  // si el sensor deja de recibir señal
    myservo.write(90);       // mueve el servo a 90 grados
    digitalWrite(buzzerPin, HIGH);  // enciende el buzzer
    delay(2000);                   // espera 2 segundos
    digitalWrite(buzzerPin, LOW);   // apaga el buzzer
  } else {  // si el sensor vuelve a recibir señal
    delay(1000);  // espera 1 segundo
    if (digitalRead(sensorPin) == HIGH) {  // verifica si aún recibe señal
      myservo.write(0);  // vuelve a la posición inicial de 0 grados
    }
  }
}

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado/editado, lo cortas y click en (<CODE/>)


La IA puede hacer bastante buen trabajo si sabes orientarla pero ahi veo un delay de 2 seg y otro de 1 segundo.
Que tiene que ver eso con

Luego si esperas que siga atento a tu sensor no puedes usar delay() porque el código se detiene cada vez que lo encuentra. Debes usar millis() que no detiene el flujo del programa. Ahora su uso no es tan simple, tampoco tan complejo. Hay tutoriales en la sección Documentación de este foro.

Voy a dejar el servo siempre a 90 grados en vez de darle los cinco segundos de accionamineto y lo dejo hasta final de ciclo, luego que se baje cuando el sensor este con señal durante mas de un segundo. Asi espero haber solucionado el problema de las interrupciones en el ciclo y hacer que termine aunque de pequeñas señales

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.