Servo activado HC-SR505 (activación constante en el suministro de 5 V)

0

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.

simular este circuito : esquema creado usando CircuitLab

#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);




}

}
    
pregunta bodkin77

0 respuestas

Lea otras preguntas en las etiquetas