Ложное срабатывание PIR датчика при подключении SIM900

YaSerg
Offline
Зарегистрирован: 02.03.2017

Всем привет!

Пытаюсь собрать сигнализацию на основе:
1. Платы Wemos D1 R2;
2. GSM Sheld SIM 900 (не подключается бетербродом!);
3. Двух PIR датчиках HC-SR501;
4. Двух светодиодов и резисторов.

SIM900 соединён с Wemos D1 7 и 8 пином (RX и TX), а так же землёй и VIN, питание от разных БП (для SIM900 5В 2А), соединение пинов 5В не даёт никакой разницы.

Это фактически мой первый проект, собираю больше для себя. Очень интересно как всё устроено. Первоначально собрал и проверил с отправкой e-mail. Всё работало отлично. Потом подклюбчил SIM900 и вот тут выскакивает глюк: при срабатывании одного из датчиков, почему то второй так же даёт сигнал HIGH. Не всегда но 80% случаев, отключаем SIM900 датчки нормально работают.

Скетч:

#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(D7, D8);
 
unsigned long previousMillis = 0;        // начало отсчета первого датчика движения
unsigned long previousMillis2 = 0;        // начало отсчета первого датчика движения
 
// constants won't change :
const long interval = 120000;           // пауза между отправкой уведомлений (milliseconds) об обнаружении движения
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30;  
 
const char* ssid     = "illusion";      // SSID of local network
const char* password = "14041984";   // Password on network
 
WiFiClient client;
char servername[]="my-server.ru";  // сервер на который отправлять запрос
String result;
 
#define pirPin D3 // Пин с датчика с комнаты №1
#define pirPin2 D2 // Пин с датчика с комнаты №2
#define ledPin D13 // Желтый светодиод
#define ledPin2 D12 // Зеленый светодиод
 
void setup()
{
  Serial.begin(19200);
  Serial.println("Connecting");
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
  }
  Serial.println("Connected");
  delay(1000);
  
  pinMode(pirPin, INPUT);
  pinMode(ledPin,OUTPUT);
  pinMode(pirPin2, INPUT);
  pinMode(ledPin2,OUTPUT);
 
  Serial.println("Calibrating sensors");
 
  for(int i = 0; i < calibrationTime; i++)
  {
    //Во время калибровки будет мигать сигнальный диод
    i % 2 ? digitalWrite(ledPin2, HIGH) : digitalWrite(ledPin2, LOW);
    delay(1000);
  }
 
  Serial.println("Calibrating OK");
 
  digitalWrite(ledPin, LOW);
  digitalWrite(ledPin2, LOW);
  digitalWrite(pirPin, LOW);
  digitalWrite(pirPin2, LOW);

//порт общения с GSM Sheld'ом
gprsSerial.begin(19200);
delay(500);
gprsSerial.println("AT");

}

void loop()
{
unsigned long currentMillis = millis();
int pirVal = digitalRead(pirPin);
int pirVal2 = digitalRead(pirPin2);

//Если обнаружили движение в комнате 1
if(pirVal == HIGH)
{
digitalWrite(ledPin, HIGH);
// Serial.print("Motion detected в комнате 1");
if (currentMillis - previousMillis >= interval) {
sendDataToServer("kitchen");
sendTextMessage("kitchen");
Serial.println("Sended");
Serial.println(previousMillis);
// save the last time you blinked the LED
previousMillis = currentMillis;
Serial.println(currentMillis);
}
// дописать условие else выводить оставшийся интервал до влючения
}

//Если обнаружили движение в комнате 2
if(pirVal2 == HIGH)
{
digitalWrite(ledPin2, HIGH);
// Serial.print("Motion detected в комнате 2");
if (currentMillis - previousMillis2 >= interval) {
sendDataToServer("guestroom");
sendTextMessage("guestroom");
Serial.println("Sended");
Serial.println(previousMillis);
// save the last time you blinked the LED
previousMillis2 = currentMillis;
Serial.println(currentMillis);
}
// дописать условие else выводить оставшийся интервал до влючения
}

//Если закончилост движение в комнате 1
if(pirVal == LOW)
{
digitalWrite(ledPin, LOW);
// Serial.print("No motion в комнате 1");
}

//Если закончилост движение в комнате 2
if(pirVal2 == LOW)
{
digitalWrite(ledPin2, LOW);
// Serial.print("No motion в комнате 2");
}

}

void sendDataToServer(String room)
{
if (client.connect(servername, 80)) { //starts client connection, checks for connection
Serial.println("connected");
client.println("GET /send_email.php?room="+room+" HTTP/1.1"); //Send data
client.println("Host: artbishu.ru");
client.println("Connection: close"); //close 1.1 persistent connection
client.println(); //end of get request
}
else {
Serial.println("connection failed"); //error message if no client connect
Serial.println();
}

while(client.connected() && !client.available()) delay(1); //waits for data
while (client.connected() || client.available()) { //connected or data available
char c = client.read(); //gets byte from ethernet buffer
result = result+c;
}

client.stop(); //stop client
Serial.println(result);

}

void sendTextMessage(String room) {

// Устанавливает текстовый режим для SMS-сообщений
gprsSerial.print("AT+CMGF=1\r");
delay(100); // даём время на усваивание команды
// Устанавливаем адресата: телефонный номер в международном формате
gprsSerial.println("AT + CMGS = \"+7номер-куда-отправлять-смс\"");
delay(100);
// Пишем текст сообщения
gprsSerial.println("Move detected in - "+room);
delay(100);
// Отправляем Ctrl+Z, обозначая, что сообщение готово
gprsSerial.println((char)26);
Serial.println("SMS Sended");
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Монтажную схему Вы не привели, но думаю, что у Вас проблемы с общей землёй. При включении относительно мощной нагрузки происходит скачок. Почитайте вот эту статью, сравните рисунки 2 и 3 и посмотрите на свой монтаж. Думаю, всё решится.

YaSerg
Offline
Зарегистрирован: 02.03.2017

ЕвгенийП пишет:

Монтажную схему Вы не привели, но думаю, что у Вас проблемы с общей землёй. При включении относительно мощной нагрузки происходит скачок. Почитайте вот эту статью, сравните рисунки 2 и 3 и посмотрите на свой монтаж. Думаю, всё решится.

Прочитал и чувствую себя оленем ))) только постигаю микроэлектронику. Понял процентов на 10.
Как я понял надо седенить землю не только вемоса и сим900, но и землю блоков питания, а так же землю от БП можно соеденить с PIR датчиками.

Поправьте меня пожалуйста если я ошибаюсь, сильно прошу не пинать )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Земля в схеме должна быть общей. Вы поймите простую вещь: напряжение - это ведь разность потенциалов между двумя точками. За ноль принимается "земля" и всё считается от неё. Если у Вас в разных частях схему разные земли, то как они поймут напряжения друг друга? Другое дело (и об это статья), надо соединять земли прямо на источнике питания, а не тянуть от устройства к устройству.

YaSerg
Offline
Зарегистрирован: 02.03.2017

ЕвгенийП пишет:

Земля в схеме должна быть общей. Вы поймите простую вещь: напряжение - это ведь разность потенциалов между двумя точками. За ноль принимается "земля" и всё считается от неё. Если у Вас в разных частях схему разные земли, то как они поймут напряжения друг друга? Другое дело (и об это статья), надо соединять земли прямо на источнике питания, а не тянуть от устройства к устройству.

Т.е. соеденить земли БП, а пинами землю лучше вообще не соединять на устройствах, только VIN соеденить?
Или лучшее вообще запитать от одного БП?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Нет, ну как как пины не соединять, кончено на пины землю подводить надо.

YaSerg
Offline
Зарегистрирован: 02.03.2017

ЕвгенийП пишет:

Нет, ну как как пины не соединять, кончено на пины землю подводить надо.

Слушайте, озаботившись этими помехами спрошу, а стоит делать лапшу и соединить все три земли или один из пинов? А ещё VIN нужно соединять, по моему без него шилд не отвечал.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я не понял вопроса. Рисуйте схему.

YaSerg
Offline
Зарегистрирован: 02.03.2017

ЕвгенийП пишет:

Я не понял вопроса. Рисуйте схему.

Попытаюсь упростить, если нге получится буду рисовать. На плате Ардуино три пина GND на все на них дать землю с БП или на любой из пинов?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так не пойдёт. Откуда мне знать как и чем Вы её питаете? Через её преобразователь или прямо на пины - не хочу угадывать.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Земля общая, что на преобразователе, что на пинах.

Подавайте на любой пин.

russo
Offline
Зарегистрирован: 20.11.2014

Попробуйте подальше отнести PIR элемент от GSM модуля. Возможно излучение GSM модуля влияет на компараторы которые стоят в PIR элементе.

YaSerg
Offline
Зарегистрирован: 02.03.2017

Питаю отдельными БП, через вход для БП. датчики на расстоянии 5 метров от контроллера на витой паре.

russo
Offline
Зарегистрирован: 20.11.2014

попробуйте подтянуть пины PIR и PIR2 резисторами (10 КОм) к питанию или земле. Можно это сделать програмно.

До ваших датчиков 5 метров, короший контур для наводки помех

YaSerg
Offline
Зарегистрирован: 02.03.2017

Воспользовался советом ЕвгенийП, все отлично работает! Спасибо!

Землю завел куда можно, датчики вообще от отдельного БП запитал.

YaSerg
Offline
Зарегистрирован: 02.03.2017

russo пишет:

попробуйте подтянуть пины PIR и PIR2 резисторами (10 КОм) к питанию или земле. Можно это сделать програмно.

До ваших датчиков 5 метров, короший контур для наводки помех

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

Condensator
Offline
Зарегистрирован: 02.06.2017

ЕвгенийП пишет:
Земля в схеме должна быть общей. Поймите простую вещь: напряжение - это ведь разность потенциалов между двумя точками. За ноль принимается "земля" и всё считается от неё. Если в разных частях схему разные земли, то как они поймут напряжения друг друга? Другое дело (и об это статья), надо соединять земли прямо на источнике питания, а не тянуть от устройства к устройству.

ЕвгенийП,  мой случай тоже неправильная земля ?

 

YaSerg
Offline
Зарегистрирован: 02.03.2017

А у меня опять появились залипания и ложные срабатывания PIR сенсоров. 

Оказалось что когда провод питания блико к антене, он видимо даёт по общей земле наводку на контроллер и все PIR во время звонка имеют сигнллан HIGH, зотделил провода алюминевым скотчем, стало иделаьно.  Всем большое спасибо за помощь!

YaSerg
Offline
Зарегистрирован: 02.03.2017

russo пишет:

попробуйте подтянуть пины PIR и PIR2 резисторами (10 КОм) к питанию или земле. Можно это сделать програмно.

До ваших датчиков 5 метров, короший контур для наводки помех

А как это сделать програмно. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

YaSerg пишет:

russo пишет:

попробуйте подтянуть пины PIR и PIR2 резисторами (10 КОм) к питанию или земле. Можно это сделать програмно.

До ваших датчиков 5 метров, короший контур для наводки помех

А как это сделать програмно. 

Никак. Паяльником.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не знаю.

YaSerg
Offline
Зарегистрирован: 02.03.2017

ЕвгенийП пишет:

YaSerg пишет:

russo пишет:

попробуйте подтянуть пины PIR и PIR2 резисторами (10 КОм) к питанию или земле. Можно это сделать програмно.

До ваших датчиков 5 метров, короший контур для наводки помех

А как это сделать програмно. 

Никак. Паяльником.

Принято, будем паять.

Товарищ russo просто говорил про програмное использвание )

russo
Offline
Зарегистрирован: 20.11.2014

pinMode(pin,INPUT_PULLUP); // вход с подтяжкой

Это подтяжка входа ардуины к плюсу питания

на ESP8266 не пробовал, надо в даташиите смотреть, может быть там есть еще INPUT_DOWN (вроде верно написал)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

russo пишет:

pinMode(pin,INPUT_PULLUP); // вход с подтяжкой

Это подтяжка входа ардуины к плюсу питания

Не прокатит. Там же просили 10К, а в ATMega подтягивающие резисторы 20-50К.

russo
Offline
Зарегистрирован: 20.11.2014

Про 10 КОм это я писал, можно и больше в данном случае.

У топикстартера платка на esp8266

YaSerg
Offline
Зарегистрирован: 02.03.2017

russo пишет:

Про 10 КОм это я писал, можно и больше в данном случае.

У топикстартера платка на esp8266

Да, на моей плате есть два разъема таких, а что такое pull-down?
Как я понял подтягивающий резистор будет сглаживать скачки от сигнала датчика?

russo
Offline
Зарегистрирован: 20.11.2014

немного инфы про подтягивающий резмстор, для чего нужен http://kazus.ru/forums/showthread.php?t=6747

У PIR датчика, насколько мне известно, выход "сухой контакт". Поэтому его необходимо подтягивать резистором, что бы вход микроконтроела помехи не ловил.

pull-down это подтяжка к минусу питания резистором. Вообще есть его величество GOOGLE, пользуйтесь поисковиком, а если что-то не понятно, спрашивайте.

YaSerg
Offline
Зарегистрирован: 02.03.2017

Из прочитанного удалость понять что для моего проекта подходит так же pull-down. Верно? Суть сгладить помехи возникающие при импульсе датчика движения.

russo
Offline
Зарегистрирован: 20.11.2014

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

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

YaSerg
Offline
Зарегистрирован: 02.03.2017

Всем привет! Начал собирать проект в коробку и обратно столкнулся с проблемой "наводки" (срабатывание PIR датчиков при сигнале SMS или звонке SIM900).

Подскажите как можно от этого избавиться, пробую отделяться антистаичными пакетами в котрых пришли платы в 90% случаев помогает.
Пробовал так же алюминевый скотч предварительно проклеев места контактов изолетой (что бы не коротнуло), помогает хуже антистатичных пакетов.

Почитал интернет, для избавления от помех люди изолируются фольгой подключая её к масса или ставится шунтирующий диод. Но тут у меня всё сложеннее. Куда ставиться, какой? )))

YaSerg
Offline
Зарегистрирован: 02.03.2017

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

Если в классической просто соединяется напряму все проводами, тот тут я вижу:

1. Питание + подключен через резистор 10К
2. Выход (сигнал датчика) подключен через резистор 1К

а теперь непонятные мне моменты

3. земля содиянется с резистором R1 через что-то ВС547
4. Выход питания подключен пину 1 контроллера + соединён с сигнальным выходом, который подключен к пину два

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Судя по всему, пин 1 микросхемы IC1 – питание. Пин 2 – вход сигнала с датчика.

Резистор R2 притягивает пин 2 к питанию (PULLUP). Он нужен для того, чтобы когда датчик отключен на пине 2 был надёжный HIGH. Когда датчик сработает, на пине 2 появится LOW.

Транзистор VT1 нужен для того, чтобы когда датчик сработает на пине был  именно LOW, а когда не срабатывает, то именно HIGH – именно земля и напряжение питания, а не что-то непонятное, что там датчик выдаст.

Резистор R1 ограничивает ток базы транзистора.

Я бы ещё добавил резистор на 15 – 50 кОм между базой транзистора и землёй.

YaSerg
Offline
Зарегистрирован: 02.03.2017

ЕвгенийП пишет:

Судя по всему, пин 1 микросхемы IC1 – питание. Пин 2 – вход сигнала с датчика.

Резистор R2 притягивает пин 2 к питанию (PULLUP). Он нужен для того, чтобы когда датчик отключен на пине 2 был надёжный HIGH. Когда датчик сработает, на пине 2 появится LOW.

Транзистор VT1 нужен для того, чтобы когда датчик сработает на пине был  именно LOW, а когда не срабатывает, то именно HIGH – именно земля и напряжение питания, а не что-то непонятное, что там датчик выдаст.

Резистор R1 ограничивает ток базы транзистора.

Я бы ещё добавил резистор на 15 – 50 кОм между базой транзистора и землёй.

У меня датчик выдаёт наоборот LOW когда нет движения и HIGH когда обнаружено движение. Я так понял в данной схеме что-то инветирует сигнал? Транзистор подключается одной ногой к + другой к сигнальному кабелю и третьей к земле?

russo
Offline
Зарегистрирован: 20.11.2014

Я бы убрал эти соединяющие шнурки на разъемах и все запаял бы.

YaSerg
Offline
Зарегистрирован: 02.03.2017

russo пишет:

Я бы убрал эти соединяющие шнурки на разъемах и все запаял бы.

Так и сделаю, когда эксперемент закончится. Пока требуется мобильность.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

YaSerg пишет:

У меня датчик выдаёт наоборот LOW когда нет движения и HIGH когда обнаружено движение. Я так понял в данной схеме что-то инветирует сигнал? Транзистор подключается одной ногой к + другой к сигнальному кабелю и третьей к земле?

Ну, конечно. Транзистор и инвертирует. Подключается он как показано на схеме, только я бы ещё резистор добавил, но я уже писал про это.

YaSerg
Offline
Зарегистрирован: 02.03.2017

ЕвгенийП пишет:

YaSerg пишет:

У меня датчик выдаёт наоборот LOW когда нет движения и HIGH когда обнаружено движение. Я так понял в данной схеме что-то инветирует сигнал? Транзистор подключается одной ногой к + другой к сигнальному кабелю и третьей к земле?

Ну, конечно. Транзистор и инвертирует. Подключается он как показано на схеме, только я бы ещё резистор добавил, но я уже писал про это.

Наконец-то разобрался чуток ) Получается в номальном состоянии цепь замкнута, а когда датчик выдаёт HIGH резистор получая сигнал размыкает цепь?

А вот как подключается так и не понял. Из моих познаний на схеме соединяются + и земля и ещё синальный кабель и откуда-то ещё выход на пин 2.

russo
Offline
Зарегистрирован: 20.11.2014

Посмотрел ваше фото и прочитал первый пост, мне не понятно -

почему на Vin вы 5 вольт подаете? Нужно 7-12 вольт, если я не ошибаюсь.

И про соединение разъемными проводками -  вы не предполагаете что это может быть вашей проблемой в ложном срабатывани?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

YaSerg пишет:

Наконец-то разобрался чуток ) Получается в номальном состоянии цепь замкнута, а когда датчик выдаёт HIGH резистор получая сигнал размыкает цепь?

Ну, не знаю. В нормальном положении транзистор закрыт и потому на пине 2 сидит напряжение питания. Если с датчика на базу транзистора придёт хотя бы 0,6 вольта, транзистор откроется и на пине 2 окажется потенциал земли.

YaSerg пишет:

А вот как подключается так и не понял.

Точно как нарисовано. Чего именно Вы не поняли?

YaSerg
Offline
Зарегистрирован: 02.03.2017

russo пишет:

Посмотрел ваше фото и прочитал первый пост, мне не понятно -

почему на Vin вы 5 вольт подаете? Нужно 7-12 вольт, если я не ошибаюсь.

И про соединение разъемными проводками -  вы не предполагаете что это может быть вашей проблемой в ложном срабатывани?

Разъм Vin у меня свободен. Питаются устройства с припаянных снизу проводов ко входному разьму питания.

Разъёмными проводами уже соединял без коробки, когда подальше всё лежит норм работает. Поэтому изадался вопросом экранировать GSM модуль или придумывать вышеупомянутые схемы с помощью резисторов и транзитора.

YaSerg
Offline
Зарегистрирован: 02.03.2017

Пробовал взять питание для двух датчиков от арудины результат моргание как светофор )

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