ИК-датчик, который включает двигатели постоянного тока - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю над сайд-проектом, в котором при обнаружении движения ИК-датчиком двигатели постоянного тока (2х) включаются на 5 секунд, а затем отключаются. И если движение прекратилось, двигатели постоянного тока отключатся.

Так что моя проблема в том, что я не достигаю желаемых результатов, о которых я только что упомянул выше. С моей точки зрения, кажется, что мой датчик движения просто выключается и включается самостоятельно, а двигатели постоянного тока ведут себя так, как должно быть при работе в течение 5 секунд, но датчик движения говорит, что движение есть, несмотря на то, что движение, которое заставляет двигатели постоянного тока работать. Двигатели постоянного тока должны работать, когда есть движение.

Я попробовал это точное оборудование и компоненты на другом Arduino UNO и макете, похоже, проблема связана с кодом.

Я также попытался сделать шаг назад и посмотреть, смогу ли я включить детектор движения, чтобы включить светодиод. В мониторе последовательного порта, похоже, обнаруживается, что обнаруживается движение, но на самом деле его нет.

Я также пытался настроить потенциометр на ИК-датчике, а также (настроить чувствительность и время) его. Я также попытался переключить «повторяемый» триггер и «неповторяемый» триггер и посмотреть, не было ли это проблемой.

Я попытался заменить батарею на 9 В, чтобы проверить, не влияет ли это на работу двигателей постоянного тока.

Я также дважды проверил и убедился, что каждый провод был в правильном положении.

На данный момент ниже приведен последовательный монитор ... для данного кода, который я предоставил. Это то, что он предоставляет мне. ** Имейте в виду, что я не помещаю никаких движений в блок Arduino, и по какой-то странной причине он обнаруживает, что есть движение.

Вот что показывает последовательный монитор ...

2:31:43.219 -> Motors are ON
02:31:43.219 -> Motion detected!
02:31:48.215 -> Motors are ON
02:31:48.249 -> Motors are OFF
02:31:48.249 -> Motion stopped!
02:31:53.232 -> Motors are ON
02:31:53.232 -> Motion detected!
02:31:58.220 -> Motors are ON
02:31:58.253 -> Motors are OFF
02:31:58.253 -> Motion stopped!
02:32:03.238 -> Motors are ON
02:32:03.238 -> Motion detected!
02:32:08.230 -> Motors are ON
02:32:08.265 -> Motors are OFF
02:32:08.265 -> Motion stopped!
const int switchMotion=2;
const int motorPin=9;
const int motorPinB=8;
int motionState=0;
int motionDetected = LOW;

void setup() {
  //Selecting as an input and output the switch and the motor
  pinMode(switchMotion,INPUT);
  pinMode(motorPin,OUTPUT);
  pinMode(motorPinB, OUTPUT);
  Serial.begin(9600); //Set serial out if we want debugging
  delay(5000); //Allow time for the PIR Sensor to calibrate
}

void loop() {

 motionState = digitalRead(switchMotion);  // Reads the motion sensor

 if(motionState == HIGH) // checks if Sensor is HIGH 
  {


    digitalWrite(motorPin,HIGH); //turn on Motor A 
    digitalWrite(motorPinB,HIGH); //turn on Motor B
    delay(5000);  //runs for 5 seconds and stops 
    Serial.println("Motors are ON");


 if (motionDetected == LOW) {        
     Serial.println("Motion detected!"); // print Motion Detected
     motionDetected = HIGH;       // update variable state to HIGH
   }



 else  {
    digitalWrite(motorPin,LOW);    //turn off Motor A
    digitalWrite(motorPinB,LOW);   //turn off Motor B
    Serial.println("Motors are OFF");
   if (motionDetected == HIGH){
       Serial.println("Motion stopped!");
        motionDetected = LOW;       // update variable state to LOW


       }
     }    
  }
}

Цель состоит в том, чтобы, когда человек находится рядом с датчиком движения PIR, двигатели постоянного тока включались на заданный период времени, а когда период времени истек, двигатели выключались, и было установлено время задержки для датчик движения, чтобы снова обнаружить движение, чтобы двигатели постоянного тока снова включились. Это должен быть постоянный цикл, когда нет движения - двигатели постоянного тока должны быть выключены. И когда есть движение - двигатели постоянного тока должны быть включены. Исключение составляет время охлаждения.

Фактические результаты таковы, что

Я ожидаю, что motionDetected будет функционировать должным образом, но когда пришло время проверить его, он считывает, что движение обнаружено / не обнаружено, несмотря на отсутствие реального движения. Я ожидаю, что датчик движения будет функционировать должным образом, чтобы двигатели постоянного тока могли соответственно включаться / выключаться.

1 Ответ

0 голосов
/ 08 апреля 2019

Ваша логика испорчена.

If the sensor is low, nothing happens.

first run of loop after sensor turned high:
  turn on the motors,
  wait 5 seconds,
  print "Motors are ON",
  print "Motion detected",
  set motionDetected HIGH.

second run of loop (if sensor is still high):
  turn on the motors,
  wait 5 seconds,
  print "Motors are ON",
  now motionDetected is HIGH so:
    turn off motors
    print "Motors are OFF"
    print "Motion stopped"
    set motionDetected LOW

second run of loop if (sensor is low again):
  nothing happens -> motors stay on

Чтобы исправить это, убедитесь, что else принадлежит правильному if!Вы хотите выключить двигатели, когда датчик находится на низком уровне, а не когда датчик находится на высоком уровне и был высоким ранее.

Также отпечатки следует размещать до задержки.Какой смысл печатать «обнаружение движения» через 5 секунд после того, как вы его действительно обнаружили.

...