Проблема с подключением PIR датчиков

IlliaS
Offline
Зарегистрирован: 20.08.2020

Всем привет, я пытаюсь подключить два PIR датчика, чтобы они поворачивали серву в зависимости от того, возле какого из них сейчас человек. https://www.tinkercad.com/things/8BBlhfSHQAg-cool-blad-jaban/editel Вот так я собрал схему, в тинкеркаде она работает, IRL нет.

Буду очень благодарен если поможете.

Вот код:

#include <Servo.h>
Servo myservo;
int inputPin = 9;
int inputPin2 = 10;
int pirState = LOW;
int val = 0;
int val2 = 0;
 
void setup() {
pinMode(inputPin, INPUT);
pinMode(inputPin2, INPUT);
Serial.begin(9600);
myservo.attach(8);
}
 
void loop() {
val = digitalRead(inputPin);
val2 = digitalRead(inputPin2);
if (val == HIGH){
 myservo.write(180);
 delay(500);
 Serial.println ("Motion L");
  }
if (val2 == HIGH) {
  myservo.write(0);
  delay(500);
  Serial.println ("Motion R");
}
}
IlliaS
Offline
Зарегистрирован: 20.08.2020

Проблема в том, что датчики реагируют постоянно, даже когда в их поле никого нет

Потенциометры на них уже как только не крутил пытаясь изменить чувствительность.

rkit
Offline
Зарегистрирован: 23.11.2016

IlliaS пишет:

Проблема в том, что датчики реагируют постоянно, даже когда в их поле никого нет

Ты из соседней комнаты по видеокамере с ночным видением с этим работаешь?

IlliaS
Offline
Зарегистрирован: 20.08.2020

rkit пишет:

IlliaS пишет:

Проблема в том, что датчики реагируют постоянно, даже когда в их поле никого нет

Ты из соседней комнаты по видеокамере с ночным видением с этим работаешь?

нет, сижу за одним столом с датчиками

 

b707
Offline
Зарегистрирован: 26.05.2017

пины к земле подтянуты? или там внутри датчиков подтяжка есть7

rkit
Offline
Зарегистрирован: 23.11.2016

ага

IlliaS
Offline
Зарегистрирован: 20.08.2020

что это значит? на плату с датчиков понятное дело

b707
Offline
Зарегистрирован: 26.05.2017

IlliaS пишет:

Буду очень благодарен если поможете.

Вот код:

вставьте код по правилам.

IlliaS
Offline
Зарегистрирован: 20.08.2020
#include <Servo.h>
Servo myservo;
int inputPin = 9;
int inputPin2 = 10;
int pirState = LOW;
int val = 0;
int val2 = 0;
 
void setup() {
pinMode(inputPin, INPUT);
pinMode(inputPin2, INPUT);
Serial.begin(9600);
myservo.attach(8);
}
 
void loop() {
val = digitalRead(inputPin);
val2 = digitalRead(inputPin2);
if (val == HIGH){
 myservo.write(180);
 delay(500);
 Serial.println ("Motion L");
  }
if (val2 == HIGH) {
  myservo.write(0);
  delay(500);
  Serial.println ("Motion R");
}
}

 

b707
Offline
Зарегистрирован: 26.05.2017

IlliaS пишет:

что это значит? на плату с датчиков понятное дело

IlliaS - отвечая нескольким участникам сразу - цитируйте сообщение, на которое отвечете или хотя бы указывайте. кому обращаетесь

Вот этот ответ выше - это кому, rkit или мне?

IlliaS
Offline
Зарегистрирован: 20.08.2020

Что это значит? На плату понятное дело проводами подвел

IlliaS
Offline
Зарегистрирован: 20.08.2020

b707 пишет:

IlliaS пишет:

что это значит? на плату с датчиков понятное дело

IlliaS - отвечая нескольким участникам сразу - цитируйте сообщение, на которое отвечете или хотя бы указывайте. кому обращаетесь

Вот этот ответ выше - это кому, rkit или мне?

Вам

b707
Offline
Зарегистрирован: 26.05.2017

"что это значит" - это про подтяжку пинов?

почитайте:

http://arduino.ru/Tutorial/DigitalPins

особенно про "подтягивающие резисторы".

если у ваших датчиков их нет, выход датчика будет хаотически менятся от любого дуновения ветерка

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

IlliaS пишет:

Всем привет, я пытаюсь подключить два PIR датчика, чтобы они поворачивали серву в зависимости от того, возле какого из них сейчас человек. https://www.tinkercad.com/things/8BBlhfSHQAg-cool-blad-jaban/editel Вот так я собрал схему, в тинкеркаде она работает, IRL нет.

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

IlliaS
Offline
Зарегистрирован: 20.08.2020

mykaida пишет:

IlliaS пишет:

Всем привет, я пытаюсь подключить два PIR датчика, чтобы они поворачивали серву в зависимости от того, возле какого из них сейчас человек. https://www.tinkercad.com/things/8BBlhfSHQAg-cool-blad-jaban/editel Вот так я собрал схему, в тинкеркаде она работает, IRL нет.

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

Прошу прощения, держите

IlliaS
Offline
Зарегистрирован: 20.08.2020

IlliaS пишет:

mykaida пишет:

IlliaS пишет:

Всем привет, я пытаюсь подключить два PIR датчика, чтобы они поворачивали серву в зависимости от того, возле какого из них сейчас человек. https://www.tinkercad.com/things/8BBlhfSHQAg-cool-blad-jaban/editel Вот так я собрал схему, в тинкеркаде она работает, IRL нет.

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

Прошу прощения, держите

https://imgur.com/a/xmxCiaz

IlliaS
Offline
Зарегистрирован: 20.08.2020

b707 пишет:

"что это значит" - это про подтяжку пинов?

почитайте:

http://arduino.ru/Tutorial/DigitalPins

особенно про "подтягивающие резисторы".

если у ваших датчиков их нет, выход датчика будет хаотически менятся от любого дуновения ветерка

 

По Вашему совету добавил в код

pinMode(9, INPUT);
pinMode(10, INPUT);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);

После попытки запуска программы выдает ошибку 

robot:8:8: error: expected constructor, destructor, or type conversion before '(' token
robot:9:8: error: expected constructor, destructor, or type conversion before '(' token
robot:10:13: error: expected constructor, destructor, or type conversion before '(' token
robot:11:13: error: expected constructor, destructor, or type conversion before '(' token
exit status 1
expected constructor, destructor, or type conversion before '(' token
 
b707
Offline
Зарегистрирован: 26.05.2017

IlliaS пишет:

По Вашему совету добавил в код

pinMode(9, INPUT);
pinMode(10, INPUT);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);

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

Цитата:
После попытки запуска программы выдает ошибку 

robot:8:8: error: expected constructor, destructor, or type conversion before '(' token
robot:9:8: error: expected constructor, destructor, or type conversion before '(' token
robot:10:13: error: expected constructor, destructor, or type conversion before '(' token
robot:11:13: error: expected constructor, destructor, or type conversion before '(' token
exit status 1
expected constructor, destructor, or type conversion before '(' token
причина ошибки не в этих строчках, выложите полный код, посмотрим
IlliaS
Offline
Зарегистрирован: 20.08.2020
IlliaS пишет:

b707 пишет:

"что это значит" - это про подтяжку пинов?

почитайте:

http://arduino.ru/Tutorial/DigitalPins

особенно про "подтягивающие резисторы".

если у ваших датчиков их нет, выход датчика будет хаотически менятся от любого дуновения ветерка

 

По Вашему совету добавил в код

pinMode(9, INPUT);
pinMode(10, INPUT);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);

После попытки запуска программы выдает ошибку 

robot:8:8: error: expected constructor, destructor, or type conversion before '(' token
robot:9:8: error: expected constructor, destructor, or type conversion before '(' token
robot:10:13: error: expected constructor, destructor, or type conversion before '(' token
robot:11:13: error: expected constructor, destructor, or type conversion before '(' token
exit status 1
expected constructor, destructor, or type conversion before '(' token
 

#include <Servo.h>
Servo myservo;
int inputPin = 9;
int inputPin2 = 10;
int pirState = LOW;
int val = 0;
int val2 = 0;
pinMode(9, INPUT);
pinMode(10, INPUT);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);

void setup() {
pinMode(inputPin, INPUT);
pinMode(inputPin2, INPUT);
Serial.begin(9600);
myservo.attach(8);
}

void loop() {
val = digitalRead(inputPin);
val2 = digitalRead(inputPin2);
if (val == HIGH){
 myservo.write(180);
 delay(500);
 Serial.println ("Motion L");
  }
if (val2 == HIGH) {
  myservo.write(0);
  delay(500);
  Serial.println ("Motion R");
}
}

 

IlliaS
Offline
Зарегистрирован: 20.08.2020

b707 пишет:

IlliaS пишет:

По Вашему совету добавил в код

pinMode(9, INPUT);
pinMode(10, INPUT);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);

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

Цитата:
После попытки запуска программы выдает ошибку 

robot:8:8: error: expected constructor, destructor, or type conversion before '(' token
robot:9:8: error: expected constructor, destructor, or type conversion before '(' token
robot:10:13: error: expected constructor, destructor, or type conversion before '(' token
robot:11:13: error: expected constructor, destructor, or type conversion before '(' token
exit status 1
expected constructor, destructor, or type conversion before '(' token
причина ошибки не в этих строчках, выложите полный код, посмотрим

#include <Servo.h>
Servo myservo;
int inputPin = 9;
int inputPin2 = 10;
int pirState = LOW;
int val = 0;
int val2 = 0;
pinMode(9, INPUT);
pinMode(10, INPUT);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);

void setup() {
pinMode(inputPin, INPUT);
pinMode(inputPin2, INPUT);
Serial.begin(9600);
myservo.attach(8);
}

void loop() {
val = digitalRead(inputPin);
val2 = digitalRead(inputPin2);
if (val == HIGH){
 myservo.write(180);
 delay(500);
 Serial.println ("Motion L");
  }
if (val2 == HIGH) {
  myservo.write(0);
  delay(500);
  Serial.println ("Motion R");
}
}

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Ошибка компиляции возникает от того, что строки 8-11 находятся вне тела функции. Если вы перенесете их внутрь, setup() например, то скомпилируется нормально. Но лучше использовать pinMode(9, INPUT_PULLUP);

IlliaS
Offline
Зарегистрирован: 20.08.2020

asam пишет:

Ошибка компиляции возникает от того, что строки 8-11 находятся вне тела функции. Если вы перенесете их внутрь, setup() например, то скомпилируется нормально. Но лучше использовать pinMode(9, INPUT_PULLUP);

Не помогает, все так же два датчика постоянно срабатывают

12:54:28.376 -> Motion L

12:54:28.896 -> Motion R

И т.д.

Так выглядит монитор порта

b707
Offline
Зарегистрирован: 26.05.2017

IlliaS пишет:

Не помогает, все так же два датчика постоянно срабатывают

вы ответы читаете или как? - я вам написал. что если у вас датчики замыкаются на плюс - то эти строчки вам не помогут, надо пины датчиков ФИЗИЧЕСКИ к GND подтягивать

Если вы сами элементарных вещей не знаете, например что такое подтяжка - то слушайте. что вам говорят. А не хотите слушать - разбирайтесь сами.

IlliaS
Offline
Зарегистрирован: 20.08.2020

b707 пишет:

IlliaS пишет:

Не помогает, все так же два датчика постоянно срабатывают

вы ответы читаете или как? - я вам написал. что если у вас датчики замыкаются на плюс - то эти строчки вам не помогут, надо пины датчиков ФИЗИЧЕСКИ к GND подтягивать

Если вы сами элементарных вещей не знаете, например что такое подтяжка - то слушайте. что вам говорят. А не хотите слушать - разбирайтесь сами.

Они подтянуты через breadboard

b707
Offline
Зарегистрирован: 26.05.2017

IlliaS пишет:

Они подтянуты через breadboard

пины подтянуты через бредбоард и еще эти 4 строчки добавлены? - оригинаьно :) Строчки уберите из кода

IlliaS
Offline
Зарегистрирован: 20.08.2020

b707 пишет:

IlliaS пишет:

Они подтянуты через breadboard

пины подтянуты через бредбоард и еще эти 4 строчки добавлены? - оригинаьно :) Строчки уберите из кода

Убрал, ничего(

#include <Servo.h>
Servo myservo;
int inputPin = 9;
int inputPin2 = 10;
int pirState = LOW;
int val = 0;
int val2 = 0;

void setup() {
Serial.begin(9600);
myservo.attach(8);
}

void loop() {
val = digitalRead(inputPin);
val2 = digitalRead(inputPin2);
if (val == HIGH){
 myservo.write(180);
 delay(500);
 Serial.println ("Motion L");
  }
if (val2 == HIGH) {
  myservo.write(0);
  delay(500);
  Serial.println ("Motion R");
}
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Дак может они оба человека ловят - конечно оба и будут срабатывать.

IlliaS
Offline
Зарегистрирован: 20.08.2020

sadman41 пишет:

Дак может они оба человека ловят - конечно оба и будут срабатывать.

Они направлены от меня в другую сторону, я не думаю, что они могут опознавать шкаф как человека :)

IlliaS
Offline
Зарегистрирован: 20.08.2020

Есть шанс того, что мне привезли два бракованных датчика?

И правильный ли у меня код в общем?

sadman41
Offline
Зарегистрирован: 19.10.2016

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

IlliaS
Offline
Зарегистрирован: 20.08.2020

sadman41 пишет:

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

Замотал в черную плотную кофту в несколько слоев, продолжает на что-то реагировать.

gfx125
Offline
Зарегистрирован: 27.05.2017

А ничего что у вас на схеме датчики подключены к пинам 8 и 10, а в скетче вы используете 9, 10?

Вас же просили привести схему в соответствии с кодом.

 

 

 

IlliaS
Offline
Зарегистрирован: 20.08.2020

gfx125 пишет:

А ничего что у вас на схеме датчики подключены к пинам 8 и 10, а в скетче вы используете 9, 10?

Вас же просили привести схему в соответствии с кодом.

 

 

 

Это скриншот с сайта, там я забыл поменять пины местами. IRL у меня датчики подключены на 9 10

sadman41
Offline
Зарегистрирован: 19.10.2016

Мультиметром напряжение на выходе поменяйте без подключения к Ардуине. В черном пакете должно отсутствовать.

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:
Мультиметром напряжение на выходе поменяйте без подключения к Ардуине.

он сейчас все отключит и померяет :) - напряжения не будет

IlliaS
Offline
Зарегистрирован: 20.08.2020

sadman41 пишет:
Мультиметром напряжение на выходе поменяйте без подключения к Ардуине. В черном пакете должно отсутствовать.

Что Вы имеете ввиду под фразой "без подключения к ардуине"? Если я отключу датчики от ардуины оно понятное дело будет отсутствовать.

b707
Offline
Зарегистрирован: 26.05.2017

IlliaS пишет:

Что Вы имеете ввиду под фразой "без подключения к ардуине"? Если я отключу датчики от ардуины оно понятное дело будет отсутствовать.

Гриш, а я что говорил? :)

IlliaS - сигнальный провод датчика отключите от Ардуины, подключите к красному щупу мультиметра в режиме измерения напряжения. Черный провод мультиметра - к контакту GND датчика

Питание и землю на датчике оставьте включенными

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

IlliaS пишет:

Есть шанс того, что мне привезли два бракованных датчика?

А Вы что, не проверили каждый из датчиков отдельно прежде, чем ставить их в сложную конструкцию?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

К сожалению Вы не сообщили, что у Вас за датчики (поверьте, бывают разные), но рассмотрим общий случай - на датчике есть 2 подстроечных резистора "задержка срабатывания" и "чувствительность". Так вот, если чувствительность вывернута на максимум, то датчик начинает "шуметь". 

Да и скорее всего вход датчика, как и говорили коллеги, надо подтягивать к земле.

Подключите питание к датчику и посмотрите изменение напряжения на сигнальном выходе относительно земли. Если там скачет не поймешь как - уменьшите чувствительность.