proyecto fotocelula y motor

Hola,

tengo un proyecto de clase con arduino, aparentemente es muy sencillo pero no consigo dar con ello :cry: :cry: .

  1. el motor de inicio est√° apagado.
    2.si se corta la fotocelula(y se mantiene cortada x tiempo) el motor funcionar√° durante 10 segundos.

const int ledPin = 13; // the number of the LED pin

// Variables will change :
int ledState = LOW; // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated

// constants won't change :
const long interval = 10000; // interval at which to blink (milliseconds)

void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}

void loop() {
// here is where you'd put code that needs to be running all the time.

// check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;

// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}

// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}

ante todo muchas gracias a todos.

Hola amigo podrías ser mas explícito con tu proyecto ya que no se entiende mucho lo que quieres hacer y el código que esta posteado es un BlinkWhithoutDelay vulgar y silvestre pero adaptado a 10 segundos.

Seg√ļn logre entender tienes un motor que normalmente esta apagado y si la fotocelda se abre sus contactos, es decir, deja de detectar iluminaci√≥n entonces el motor debe arrancar por 10 segundos y luego apagarse. Es correcto?

lo primero es hola amiga jejeje.

se que me he explicado un poco mal lo siento.

voy a intentar explicarlo mejor con lo que me han dicho exactamente.

con una llave de tres posiciones hagamos:

  1. primera posición el sistema se enciende y tenemos una fotocelula que acciona el motor cuando deja de ser cortada y cuando es cortada el motor trabaja durante 10 segundos.
    2.segunda posición el sistema funciona sin parar a no ser q volvamos a la posición 1 de la llave.

no se si m he explicado mejor jeje

M√°s o menos en que consiste? Quieres hacer mover una banda transportadora y cuando pase alg√ļn objeto que transporta en ella esta se detenga a los 10 segundos?

Y disculpa lo de amigo. Se√Īorita :slight_smile:

si mas o menos pero esq la celula est√° al final de la cinta

Se√Īorita, ac√° le voy a proporcionar un c√≥digo para que lo verifiques, sin embargo debido a la poca informaci√≥n que suministras no puedo adivinar que es exactamente lo que se quiere hacer.

Se tiene una llave On-Off la cual usaremos ON para indicar que la banda trabajara en autom√°tico y Off en manual.

Se asume que el sensor que detecta el paso de un objeto es un fotodiodo que todo el tiempo esta en estado HIGH y cuando pase un objeto la se√Īal se interrumpir√° y pasara a estado LOW.

En modo manual la banda nunca parara y en modo autom√°tico solo parara a los 10 segundos cuando detecte un objeto que pas√≥ e interrumpi√≥ la se√Īal. Posterior a esos 10 segundos la banda se parara y no arrancara.

Solo faltara incluir en el código la parte para arrancar nuevamente la banda en modo automático ya que no nos dijiste que pasaría una vez que pasen los 10 segundos y la banda se detenga.

Cuando está en modo automático y el motor detecta el paso de un objeto por la fotocelula, éste se va a detener a los 10 segundos y no volverá a arrancar ya que el permisivo pasara a LOW. Ahora bien, si deseas arrancar de nuevo, debes pasar a manual la llave y con eso el permisivo vuelve a HIGH y podrás pasar nuevamente a automático.

//Llave en posición OFF = Manual. Motor de la banda nunca se detiene
//Llave en posición ON = automatico para apagar a lso 10 seg.
//Se asume que el sensor que tienes para detectar el paso de un objeto siempre te da una se√Īal LOW al ser interrumpida. De resto esta siempre en HIGH
//La variable permisivo se usa para que una vez parada la cinta a los 10 segundos, ésta no vuelva a arrancar ya que entraria en un bucle infinito de 10 segundos.

int llave;
int estado;
int permisivo;

void setup() {
¬† pinMode(4,INPUT);¬† ¬† ¬†  //Pin 4 se define como entrada para leer la se√Īal de tu fotocelula
  pinMode(5,OUTPUT);      //Pin 5 se define como salida para encender o apagar tu motor
  digitalWrite(5,HIGH);   //iniciamos con el motor de la banda encendido.
}

void loop() {
 
¬† if(llave == HIGH){¬† ¬† ¬† ¬† ¬†  //si la llave esta en ON, es decir, en automatico entonces verificamos si hay interrupcion de la se√Īal de la fotocelula
¬† ¬† estado = digitalRead(4);¬† ¬†  //aca gravo ell estado de la se√Īal del sensor
¬† ¬† ¬†  if (estado == LOW)&&(permisivo == HIGH){¬† ¬†  //Siempre debe estar en HIGH pero al pasar algun objeto entonces se interrumpe la se√Īal y pasa a LOW
          delay(10000);            //Esperamos 10 segundos y luego apagamos el motor
          digitalWrite(5,LOW);     //apagamos el motor
          digitalWrite(6,LOW);     //Aca le quitamos el permisivo para que no vuelva a arrancar y caiga en un bucle infinito
       }
  }else{
    digitalWrite(5,HIGH);    //si la llave esta en Off indica que esta en manual y siempre estara el motor encendido
    digitalWrite(6,HIGH);    //Se mantiene el permisivo en HIGH para cuando queramos pasar a automatico
  }

}

Muchas gracias!!!

Se supone q de primeras todo tiene q estar apagado y manejarlo en modo manual por lo que la bandeja llegaría al final de la cinta, luego se pondria en modo automatico y si hay varias bandejas en el sistema al levantar la q esta cortada x la fotocelula el sistema aunq vuelva a ser cortada aguantaría 10 segundos y volvería a apagarse y así siempre q se levante o se vuelva a poner en modo manual… Siento mucho explicarme tan mal

ok prueba el código y me comentas cualquier cosa. Saludos.