Hola buenas, tengo un problema , resulta que he hecho una maqueta de una casa domotizada para un proyecto, tengo una puerta de garage que abro y cierro a traves de bluethooth , el problema es que que he puesto un sensor de infrarrojos a cada lado de la puerta para que sepa cuando pararse al abrirse y otro al cerrarse. cuando se cierra pues el infrarrojo lo detecta y se para, pero como se mantiene detectado pues no se puede abrir, y lo mismo pasa al contrario. No sé como hacer para que se pare cuando lo detecte pero a la vez se pueda seguir moviendo el servo.
#include <Servo.h>
const int inf = 52; // infrarrojo 1
const int servo = 10;
const int inf1 = 53; //infrarrojo 2
Servo garage;
int valor = 0;
int valor1 = 0;
void setup()
{
pinMode (inf , INPUT);
pinMode (inf1 , INPUT);
garage.attach(10);
pinMode(servo,OUTPUT);
pinMode(11,OUTPUT);
Serial.begin(9600);
}
void loop()
{
valor1 = digitalRead(inf1);
valor = digitalRead(inf);
if (valor == 0)
{
garage.write(90);
}
if (valor1 == 0)
{
garage.write(90);
}
while (Serial.available())
{
char dato= Serial.read();
digitalWrite(6,LOW);
switch(dato)
{
case 'S':
{
garage.write(120);
break;
}
case 'Z':
{
garage.write(60);
break;
}
}
}
Hola buenas, tengo un problema , resulta que he hecho una maqueta de una casa domotizada para un proyecto, tengo una puerta de garage que abro y cierro a traves de bluethooth , el problema es que que he puesto un sensor de infrarrojos a cada lado de la puerta para que sepa cuando pararse al abrirse y otro al cerrarse. cuando se cierra pues el infrarrojo lo detecta y se para, pero como se mantiene detectado pues no se puede abrir, y lo mismo pasa al contrario. No sé como hacer para que se pare cuando lo detecte pero a la vez se pueda seguir moviendo el servo. El servo es de continua, por lo que a 90 esta parado a 60 gira hacia un lado y a 120 gira hacia el otro, la puerta no se cuanto pesa , he dicho que es una maqueta ( de cartón pluma) por lo tanto la puerta pesará 10 gramos que se yo. Si , la puerta es corredera, utilicé la barra engranada de un lector de CD y pegué un engranaje al servo para que cuando se mueva engrane con la puerta y ésta se mueva a través de una guía y blablabla.... Si el problema no es mover la puerta. En principio paraba la puerta utilizando un delay y mas o menos calculando cuanto tardaba en abrirse o cerrase, pero de este mode al abrirla 3 o 4 veces acaba descordinandose y se queda medio abierta o medio cerrada, asi que decidi comprar sensores de infrarrojos pero veo que no hay forma humana de hacerlo funciona, creo que tenia q haber comprado finales de carrera porque creo que los infrarrojos no sirven para esta función. Pero por si acaso yo lo pregunto
#include <Servo.h>
const int inf = 52; // infrarrojo 1
const int servo = 10;
const int inf1 = 53; //infrarrojo 2
Servo garage;
int valor = 0;
int valor1 = 0;
void setup()
{
pinMode (inf , INPUT);
pinMode (inf1 , INPUT);
garage.attach(10);
pinMode(servo,OUTPUT);
pinMode(11,OUTPUT);
Serial.begin(9600);
}
void loop()
{
valor1 = digitalRead(inf1);
valor = digitalRead(inf);
if (valor == 0)
{
garage.write(90);
}
if (valor1 == 0)
{
garage.write(90);
}
while (Serial.available())
{
char dato= Serial.read();
digitalWrite(6,LOW);
switch(dato)
{
case 'S':
{
garage.write(120);
break;
}
case 'Z':
{
garage.write(60);
break;
}
}
}
Crea una variable booleanda (doorOpen por ejemplo), true para abierta y false para cerrada, las seteas segun el caso y listo, supongamos que esta abierta (doorOpen = true) empezaras a cerrarla, al cerrar doorOpen = false, cuando quieras abrirla de nuevo, entonces asi no importa que el sensor quede activado o no, porque la apertura o cierre solo dependera del estado de la variable.