Estoy tratando de hacer que el sensor HC-SR505 (mini PIR) funcione con Arduino y active un servo correctamente. Con el servo desconectado el sensor detecta correctamente. Con el servo conectado y activado, obtengo una detección constante (la mayoría de las veces). Estoy usando la conexión USB de 5V al Arduino para la alimentación. El servo está conectado en paralelo a la misma fuente de 5V. Estoy asumiendo que la caída de voltaje a través del servo debe estar causando que un voltaje inferior a 5V vaya al PIR, causando un disparador. ¿Cómo puedo mantener el voltaje por encima de 5V? Oh, me acabo de dar cuenta de que usar una fuente de 12V podría funcionar. ¡No tengo uno conmigo! ¿O podría usar un condensador de desacoplamiento o suavizado, o agregar un paso de voltaje de 12 V al PIR, o un transistor en alguna parte? ¿Dónde se conectan estos dispositivos? ¿Alguien puede decirme si todas o alguna de estas opciones podrían funcionar y cuál es la más barata? ¿O es mi código (abajo)? Lo combiné de 2 fuentes (una para el PIR solo y otra para el movimiento del servo solo). Buscando a la respuesta. Gracias.
#include <Servo.h>
Servo myservo; //creates a servo object
//a maximum of eight servo objects can be created
int pos = 42; //variable to store servo position
const int pirPin = 8; // This is the D8 pin that we are going to use
unsigned long motionDelay = 5000; // Motion Delay Timer
unsigned long motionTimer; // Motion Trigger Timer
boolean inMotion = false; // Motion sensor need to be read or not flag
void setup() {
// put your setup code here, to run once:
myservo.attach(4); //attaches servo to pin 4
pinMode(pirPin, INPUT); // Prepare the pin as Input pin
Serial.begin(19200); // Prepare the Serial Monitor
}
void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(pirPin) == HIGH && !inMotion)
{
Serial.println("Motion Detected");
for(pos = 38; pos < 45; pos += 1) //goes from 0 to 180 degrees
{ //in steps of one degree
myservo.write(pos); //tells servo to go to position in variable "pos"
delay(200); //waits for the servo to reach the position
}
for(pos = 45; pos>=38; pos-=1) //goes from 180 to 0 degrees
{
myservo.write(pos); //to make the servo go faster, decrease the time in delays for
delay(200); //to make it go slower, increase the number.
}
for(pos = 38; pos < 45; pos += 1) //goes from 0 to 180 degrees
{ //in steps of one degree
myservo.write(pos); //tells servo to go to position in variable "pos"
delay(200); //waits for the servo to reach the position
}
for(pos = 45; pos>=38; pos-=1) //goes from 180 to 0 degrees
{
myservo.write(pos); //to make the servo go faster, decrease the time in delays for
delay(200);
}
motionTimer = millis();
inMotion = true;
} else if (millis() - motionTimer >= motionDelay) {
inMotion = false;
pos=93;
myservo.write(pos);
}
}