hola, buenas tardes, comienzo a meterme en este campo y sinceramente no se que esta mal con mi proyecto, estoy usando un sensor pir para detectar un movimiento, para ello saque un código genérico de Internet, cuando quise usar el monitor serial para ver el resultado, este no dejaba de lanzarme resultados, a pesar de que no me movía en lo absoluto, decidí buscar otro código pensando que quizás este era el error, pero por mas códigos que uso me sigue pasando lo mismo, lo mas extraño, es que decidí probar el proyecto, pero esta vez sin conectar el sensor, y valla mi sorpresa cuando me seguía detectando movimiento aun cuando solo era la placa arruino la que estaba conectada
este es el codigo que he usado la ultima vez, aunque dada los resultados puedo creer que no tiene nada que ver
int LEDPin= 13;
int PIRPin= 7;
void setup()
{
Serial.begin(9600);
pinMode(LEDPin, OUTPUT);
pinMode(PIRPin, INPUT);
}
void loop()
{
int val = digitalRead(PIRPin);
if (val == HIGH)
{
Serial.println("detectado");
delay(1000);
}
}
p.d. las confecciones también son de lo mas simples y también ya trate de modificar los protencimetros de sensibilidad y tiempo de detección
No se si sabes que el sensor necesita un tiempo de aproximadamente unos 30 a 40 segundos para estabilizarse con el ambiente antes de empezar a medir, yo les suelo poner 1 minuto (puedes poner ese tiempo en el void setup), pero si como dices sin sensor te hace lo mismo...
de todas formas te dejo un codigo que puedas probar, puedes esperar unos 30 segundos antes de la primera medida o ponerle un simple delay de 30 segundos en el void setup para que se estabilice antes de la primera medida, pero no afecte al resto del tiempo que este en funcionamiento
const int LEDPin = 13; // pin para el LED
const int PIRPin = 2; // pin de entrada (for PIR sensor)
int pirState = LOW; // de inicio no hay movimiento
int val = 0; // estado del pin
void setup()
{
pinMode(LEDPin, OUTPUT);
pinMode(PIRPin, INPUT);
Serial.begin(9600);
}
void loop()
{
val = digitalRead(PIRPin);
if (val == HIGH) //si está activado
{
digitalWrite(LEDPin, HIGH); //LED ON
if (pirState == LOW) //si previamente estaba apagado
{
Serial.println("Sensor activado");
pirState = HIGH;
}
}
else //si esta desactivado
{
digitalWrite(LEDPin, LOW); // LED OFF
if (pirState == HIGH) //si previamente estaba encendido
{
Serial.println("Sensor parado");
pirState = LOW;
}
}
}
Como cuesta leer las indicaciones!! No viste este hilo Antes de crear tu hilo lee esto De todos modos te felicito por postear bien, aunque no en la sección debida rescatemos lo bueno. Movido a Software.
El código entrega resultados porque eso es lo que has programado
Pero bueno, en general nadie enseña lo que te diré a continuación
Esto es detección x flanco. Tu PIR cuando esta detectando entrega un HIGH o 1
const byte LEDPin = 13;
const byte PIRPin = 7;
bool val, valAnt = false;
void setup() {
Serial.begin(9600);
pinMode(LEDPin, OUTPUT);
pinMode(PIRPin, INPUT);
}
void loop() {
val = digitalRead(PIRPin);
if (val == HIGH && valAnt == LOW) { si pasamos de LOW a HIGH o sea de 0 a 1 =>
Serial.println("detectado");
}
valAnt = val;
}
uso una variable que llamé valAnt de Anterior que guarda el estado anterior.
La actualizo luego de hacer la consulta
Entonces cuando pregunto: ha cambiado el PIR, solo verá un cambio y te lo presentará pero hasta que no se reponga, es decir, hasta que deje de ver movimiento y luego una vez mas no vea un nuevo movimiento no reportará nada.
@Mikms
bueno, he probado ese código, incluso le puse el delay de un minuto y trate de hacer varias pruebas, pero tan pronto pasa el tiempo me marca sensor activado, pero ya no hace nada mas, eso durante la primera prueba, después ya completamente ya no marcaba nada
@surbyte
perdón por postearlo en la sección incorrecta, si leí ese foro pero en software y no sabia que cada sección tenia uno, proyecto se me hizo el mas indicado para postearlo por que no se si sea de hardware o software,
Ya probé con tu código y pasa lo mismo, incluso lo modifique agregándole un delay de un segundo y siempre tras detectare movimiento la variable val cambiara a 0 y mostrara "no detectado" y lo único que logre fue un ciclo donde en un segundo me detecta y al otro no, aquí lo gracioso es cuando decidí desconectar el sensor, y fue cuando comenzó a detectarme una vez y de 3 a 7 veces no detectarme, parece que detecta aleatoriamente a pesar de que el sensor no esta conectado, incluso incluí la función del otro código de esperar 60 segundos para que calibrara el sensor, pero es que la lo mismo
El delay no tiene nada que hacer con un flanco.
Un PIR detecta un objeto y si el objeto se mueve sigue manteniendo el estado de salida por lo que mi código no va a cambiar.
Ahora si tu PIR no tiene ajustado un retardo de tiempo como para que permanezca en ON durante al menos unos segundos no se que pasará. Actuaría como un pulsador que esta loco.
Porque no intentas con esta variante de mi código.
las mismas variables globales. El mismo setup pero cambia esto en el loop
void loop() {
val = digitalRead(PIRPin);
if (val == HIGH && valAnt == LOW) { si pasamos de LOW a HIGH o sea de 0 a 1 =>
Serial.println("detectado 0 a 1");
}
if (val == LOW && valAnt == HIGH { si pasamos de HIGH a LOW o sea de 1 a 0 =>
Serial.println("detectado 1 a 0");
}
valAnt = val;
}
Si el monitor serie muestra resultados permanentemente tu PIR tiene algun fallo o no has ajustado debidamente el preset.
sabes que el pir tiene varias formas de configurarlo no?, ya sea mediante un jumper o puente o mediante los potenciometros que trae para que trabaje
con retardo, con una sola activacion, mas sensibilidad o menos, etc.
creo que deberias postear esa informacion + como lo tienes cableado aunque sea muy simple.