Ик датчик движения sen0018 - длительное HIGH подскажите новичку

Arslan
Offline
Зарегистрирован: 08.11.2012

Добрый день.

Подключаю указанный датчик. Читаем его значение. Проводим в его зоне рукой например. Получаем значение High как и должно быть, но это значение почему-то возращается в течении примерно десяти секунд после движения. Мне казалось, что так должно быть не более 1-2 сек. В чем я не прав ?

  int i =0;
  int valueSensor = LOW;
void setup(){
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(3,INPUT); 
}

void loop(){

  int valueSensor = digitalRead(3);
  if (valueSensor==HIGH){
    Serial.println(i);
    digitalWrite(13, HIGH);
    i=i+1;
  }else{
    digitalWrite(13, LOW);
    i = 0;
  }
  delay(1000);  
}
 
maksim
Offline
Зарегистрирован: 12.02.2012

Не нашел ни одной фоты вашего датчика сзади, но на нормальных датчиках есть потенциеметры, которыми регульруется чувствительность и время работы.

У вас на оборотной стороне, что нибудь есть?

Arslan
Offline
Зарегистрирован: 08.11.2012

Большое спасибо за ответ. Дейсвительно есть регулировка и она позволяет настроить.

maksim
Offline
Зарегистрирован: 12.02.2012

  

dimka
dimka аватар
Offline
Зарегистрирован: 21.09.2012
датчик движения + GSM прослушка помещения
При обнаружение движения датчик отправляет положительные сигнал на вход Arduino
Ардуино посылает сигнал на Servo. вперед назад вперед назад, (нажимает на кнопку вызова на телефоне)
Servo прикреплена к телефону скотчем
/* урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
датчик движения + GSM прослушка помещения
При обнаружение движения датчик отправляет положительные сигнал на вход Arduino
Ардуино посылает сигнал на Servo. вперед назад вперед назад, (нажимает на кнопку вызова на телефоне)
Servo прикреплена к телефону скотчем

Servo, и Мобильный телефон, вещи несовместимые, пришлось их с большим трудом подружить

Инфракрасный датчик движения Infrared PIR Motion Sensor Arduino
https://www.youtube.com/watch?v=y_QwZPsv-ec

*/


#include <Servo.h> 
Servo dimkaservo1;

const int buttonPin = 11;     // датчик движения подключён к 11 пину
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  pinMode(buttonPin, INPUT);
  dimkaservo1.attach(7); //подключаем  Servo (при подключении питания)Servo подключён к 7 пину
  dimkaservo1.write(30); //устанавливаем положение 30 градусов (при подключении питания)
  //при подключении питания,датчик движения выдаёт ложные сигналы. даем ему 5 секунд чтобы он пришел в норму
  digitalWrite(buttonPin,LOW),   delay(5000); 

}

void loop(){ 
  // detach отключаем Servo чтоб не дребезжала 
  dimkaservo1.detach();
  buttonState = digitalRead(buttonPin);
  //если сработал датчик движения,заново подключаем  Servo
  if (buttonState == HIGH) dimkaservo1.attach(7),     
  //поворачиваем   Servo туда сюда обратно......  
  dimkaservo1.write(80), delay(1000), dimkaservo1.write(30), delay(1000),dimkaservo1.write(80), delay(1000), dimkaservo1.write(30),
  delay(1000),
  // detach отключаем Servo чтоб не дребезжала.+ (Во время звонка!) Servo ведет себя неадекватно поэтому выключаем её
  dimkaservo1.detach(),
  // датчик движения Тоже начинает болезненно реагировать (Во время звонка!) на телефонный сигнал, поэтому выключаем его на 60 секунд
  //рекомендую время увеличить, хотя для теста можно и сократить
  digitalWrite(buttonPin,LOW),   delay(60000);


} 



/* урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
 датчик движения + GSM прослушка помещения v.02
 Version 0.2 - 2013/06/22
 При обнаружение движения датчик отправляет положительные сигнал на вход Arduino
 Ардуино посылает сигнал на Servo. вперед назад вперед назад, (нажимает на кнопку вызова на телефоне)
 Servo прикреплена к телефону скотчем
 
 Servo, и Мобильный телефон, вещи несовместимые, пришлось их с большим трудом подружить
 
 Инфракрасный датчик движения Infrared PIR Motion Sensor Arduino
 https://www.youtube.com/watch?v=y_QwZPsv-ec
 
 датчик движения + GSM прослушка помещения.Arduino Servo Infrared PIR Motion Sensor. Version 0.1 
 http://www.youtube.com/watch?v=nh3xH3LTmyw
  
 */

#include <Servo.h> 
Servo dimkaservo1;

//Чтобы не использовать провода для питания, и датчик движения подключить напрямую к Arduino Nano
//Сделан из ПИНА (16) плюс 5 вольт
//а из ПИНА (14) минус (GND)

//Превращаем аналоговый ПИН (A2), в цифровой ПИН (16). 
#define high1 16
//Превращаем аналоговый ПИН (A0), в цифровой ПИН (14). 
#define GND1 14

//Превращаем аналоговый ПИН (A1), в цифровой ПИН (15).
const int buttonPin = 15;     // датчик движения подключён к 15 пину-(A1)
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {

  dimkaservo1.attach(7); //подключаем  Servo (при подключении питания)Servo подключён к 7 пину
  dimkaservo1.write(30); //устанавливаем положение 30 градусов (при подключении питания)
  

  pinMode(high1,OUTPUT);
 // Делаем его плюсом 5 вольт
  digitalWrite(high1,HIGH);
  
  pinMode(GND1,OUTPUT);
 // Делаем его минусом (GND)
  digitalWrite(GND1,LOW);

  pinMode(buttonPin, INPUT);
  //при подключении питания,датчик движения выдаёт ложные сигналы. даем ему 5 секунд чтобы он пришел в норму
  digitalWrite(buttonPin,LOW); delay(5000);  
   
}

void loop(){ 
  // detach отключаем Servo чтоб не дребезжала 
  dimkaservo1.detach();
  buttonState = digitalRead(buttonPin);
  //если сработал датчик движения,заново подключаем  Servo
  if (buttonState == HIGH) dimkaservo1.attach(7),     
  //поворачиваем   Servo туда сюда обратно......  
  dimkaservo1.write(85), delay(1000), dimkaservo1.write(30), delay(1000),dimkaservo1.write(85), delay(1000), dimkaservo1.write(30),
  delay(1000),
  // detach отключаем Servo чтоб не дребезжала.+ (Во время звонка!) Servo ведет себя неадекватно поэтому выключаем её
  dimkaservo1.detach(),
  // датчик движения Тоже начинает болезненно реагировать (Во время звонка!) на телефонный сигнал, поэтому выключаем его на 60 секунд
  //рекомендую время увеличить, хотя для теста можно и сократить
  digitalWrite(buttonPin,LOW),   delay(60000);
} 




 

 

alexeko
Offline
Зарегистрирован: 03.01.2014

Доброго времени суток.

Дополню данный пост, маленьким листингом (для начинающих)

Задержка в секундах на выключение

const int ledPin=13; // Светодиодный сигнальный индикатор
const int OutPin=7;  // выход на реле
long previousMillis = 0;        // храним время последнего переключения светодиода
long interval = 15000;           // интервал между включение/выключением светодиода (X секунд)


void setup(){
Serial.begin(9600);
pinMode(2, INPUT); // Вход считывающий данные посылаемые инфракрасным модулем
pinMode(ledPin, OUTPUT);// Светодиодный сигнальный индикатор
pinMode(OutPin, OUTPUT);// выход на реле
}


void loop() {
int sensorValue = digitalRead(2);
unsigned long currentMillis = millis();

if(sensorValue==1) // если есть сигнал то...
{
   previousMillis = currentMillis; // присваиваем секунды
   digitalWrite(ledPin,HIGH);       // зажгем диод
}else                               // или
digitalWrite(ledPin,LOW);           // гасим диод

  //проверяем не прошел ли нужный интервал, если прошел то
  if(currentMillis - previousMillis > interval)
  {
      //digitalWrite(ledPin,LOW);
      digitalWrite(OutPin,HIGH);  // ВЫХОД НА РЕЛЕ
  }
   else{
     //digitalWrite(ledPin,HIGH);
     digitalWrite(OutPin,LOW); // ВЫХОД НА РЕЛЕ
   }

Serial.println(sensorValue, DEC); //Данные в монитор
}