Ложное срабатывание PIR датчика при подключении SIM900
- Войдите на сайт для отправки комментариев
Всем привет!
Пытаюсь собрать сигнализацию на основе:
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);
//порт общения с 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");
}
Монтажную схему Вы не привели, но думаю, что у Вас проблемы с общей землёй. При включении относительно мощной нагрузки происходит скачок. Почитайте вот эту статью, сравните рисунки 2 и 3 и посмотрите на свой монтаж. Думаю, всё решится.
Монтажную схему Вы не привели, но думаю, что у Вас проблемы с общей землёй. При включении относительно мощной нагрузки происходит скачок. Почитайте вот эту статью, сравните рисунки 2 и 3 и посмотрите на свой монтаж. Думаю, всё решится.
Прочитал и чувствую себя оленем ))) только постигаю микроэлектронику. Понял процентов на 10.
Как я понял надо седенить землю не только вемоса и сим900, но и землю блоков питания, а так же землю от БП можно соеденить с PIR датчиками.
Поправьте меня пожалуйста если я ошибаюсь, сильно прошу не пинать )))
Земля в схеме должна быть общей. Вы поймите простую вещь: напряжение - это ведь разность потенциалов между двумя точками. За ноль принимается "земля" и всё считается от неё. Если у Вас в разных частях схему разные земли, то как они поймут напряжения друг друга? Другое дело (и об это статья), надо соединять земли прямо на источнике питания, а не тянуть от устройства к устройству.
Земля в схеме должна быть общей. Вы поймите простую вещь: напряжение - это ведь разность потенциалов между двумя точками. За ноль принимается "земля" и всё считается от неё. Если у Вас в разных частях схему разные земли, то как они поймут напряжения друг друга? Другое дело (и об это статья), надо соединять земли прямо на источнике питания, а не тянуть от устройства к устройству.
Т.е. соеденить земли БП, а пинами землю лучше вообще не соединять на устройствах, только VIN соеденить?
Или лучшее вообще запитать от одного БП?
Нет, ну как как пины не соединять, кончено на пины землю подводить надо.
Нет, ну как как пины не соединять, кончено на пины землю подводить надо.
Слушайте, озаботившись этими помехами спрошу, а стоит делать лапшу и соединить все три земли или один из пинов? А ещё VIN нужно соединять, по моему без него шилд не отвечал.
Я не понял вопроса. Рисуйте схему.
Я не понял вопроса. Рисуйте схему.
Попытаюсь упростить, если нге получится буду рисовать. На плате Ардуино три пина GND на все на них дать землю с БП или на любой из пинов?
Так не пойдёт. Откуда мне знать как и чем Вы её питаете? Через её преобразователь или прямо на пины - не хочу угадывать.
Земля общая, что на преобразователе, что на пинах.
Подавайте на любой пин.
Попробуйте подальше отнести PIR элемент от GSM модуля. Возможно излучение GSM модуля влияет на компараторы которые стоят в PIR элементе.
Питаю отдельными БП, через вход для БП. датчики на расстоянии 5 метров от контроллера на витой паре.
попробуйте подтянуть пины PIR и PIR2 резисторами (10 КОм) к питанию или земле. Можно это сделать програмно.
До ваших датчиков 5 метров, короший контур для наводки помех
Воспользовался советом ЕвгенийП, все отлично работает! Спасибо!
Землю завел куда можно, датчики вообще от отдельного БП запитал.
попробуйте подтянуть пины PIR и PIR2 резисторами (10 КОм) к питанию или земле. Можно это сделать програмно.
До ваших датчиков 5 метров, короший контур для наводки помех
Воспользуюсь советом, а чему лучше притянуть. И можете сказать в двух словах какую роль они выполнят. Простите я далек от электроники, это моя первая "игрушка".
ЕвгенийП, мой случай тоже неправильная земля ?
А у меня опять появились залипания и ложные срабатывания PIR сенсоров.
Оказалось что когда провод питания блико к антене, он видимо даёт по общей земле наводку на контроллер и все PIR во время звонка имеют сигнллан HIGH, зотделил провода алюминевым скотчем, стало иделаьно. Всем большое спасибо за помощь!
попробуйте подтянуть пины PIR и PIR2 резисторами (10 КОм) к питанию или земле. Можно это сделать програмно.
До ваших датчиков 5 метров, короший контур для наводки помех
А как это сделать програмно.
попробуйте подтянуть пины PIR и PIR2 резисторами (10 КОм) к питанию или земле. Можно это сделать програмно.
До ваших датчиков 5 метров, короший контур для наводки помех
А как это сделать програмно.
Никак. Паяльником.
мой случай тоже неправильная земля ?
Не знаю.
попробуйте подтянуть пины PIR и PIR2 резисторами (10 КОм) к питанию или земле. Можно это сделать програмно.
До ваших датчиков 5 метров, короший контур для наводки помех
А как это сделать програмно.
Никак. Паяльником.
Принято, будем паять.
Товарищ russo просто говорил про програмное использвание )
pinMode(pin,INPUT_PULLUP); // вход с подтяжкой
Это подтяжка входа ардуины к плюсу питания
на ESP8266 не пробовал, надо в даташиите смотреть, может быть там есть еще INPUT_DOWN (вроде верно написал)
pinMode(pin,INPUT_PULLUP); // вход с подтяжкой
Это подтяжка входа ардуины к плюсу питания
Не прокатит. Там же просили 10К, а в ATMega подтягивающие резисторы 20-50К.
Про 10 КОм это я писал, можно и больше в данном случае.
У топикстартера платка на esp8266
Про 10 КОм это я писал, можно и больше в данном случае.
У топикстартера платка на esp8266
Да, на моей плате есть два разъема таких, а что такое pull-down?
Как я понял подтягивающий резистор будет сглаживать скачки от сигнала датчика?
немного инфы про подтягивающий резмстор, для чего нужен http://kazus.ru/forums/showthread.php?t=6747
У PIR датчика, насколько мне известно, выход "сухой контакт". Поэтому его необходимо подтягивать резистором, что бы вход микроконтроела помехи не ловил.
pull-down это подтяжка к минусу питания резистором. Вообще есть его величество GOOGLE, пользуйтесь поисковиком, а если что-то не понятно, спрашивайте.
Из прочитанного удалость понять что для моего проекта подходит так же pull-down. Верно? Суть сгладить помехи возникающие при импульсе датчика движения.
Вы не помехи сглаживаете, а добиваетесь точного определения входного сигнала от вышего датчика движения.
Схему подключения ве не предоставили, поэтому как подтягивать резистор, к питанию или земле, я не знаю.
Всем привет! Начал собирать проект в коробку и обратно столкнулся с проблемой "наводки" (срабатывание PIR датчиков при сигнале SMS или звонке SIM900).
Подскажите как можно от этого избавиться, пробую отделяться антистаичными пакетами в котрых пришли платы в 90% случаев помогает.
Пробовал так же алюминевый скотч предварительно проклеев места контактов изолетой (что бы не коротнуло), помогает хуже антистатичных пакетов.
Почитал интернет, для избавления от помех люди изолируются фольгой подключая её к масса или ставится шунтирующий диод. Но тут у меня всё сложеннее. Куда ставиться, какой? )))
Так же нашёл вот такую схем подключения, но не особо с ней смог разобраться. Помогите прочесть.
Если в классической просто соединяется напряму все проводами, тот тут я вижу:
1. Питание + подключен через резистор 10К
2. Выход (сигнал датчика) подключен через резистор 1К
а теперь непонятные мне моменты
3. земля содиянется с резистором R1 через что-то ВС547
4. Выход питания подключен пину 1 контроллера + соединён с сигнальным выходом, который подключен к пину два
Судя по всему, пин 1 микросхемы IC1 – питание. Пин 2 – вход сигнала с датчика.
Резистор R2 притягивает пин 2 к питанию (PULLUP). Он нужен для того, чтобы когда датчик отключен на пине 2 был надёжный HIGH. Когда датчик сработает, на пине 2 появится LOW.
Транзистор VT1 нужен для того, чтобы когда датчик сработает на пине был именно LOW, а когда не срабатывает, то именно HIGH – именно земля и напряжение питания, а не что-то непонятное, что там датчик выдаст.
Резистор R1 ограничивает ток базы транзистора.
Я бы ещё добавил резистор на 15 – 50 кОм между базой транзистора и землёй.
Судя по всему, пин 1 микросхемы IC1 – питание. Пин 2 – вход сигнала с датчика.
Резистор R2 притягивает пин 2 к питанию (PULLUP). Он нужен для того, чтобы когда датчик отключен на пине 2 был надёжный HIGH. Когда датчик сработает, на пине 2 появится LOW.
Транзистор VT1 нужен для того, чтобы когда датчик сработает на пине был именно LOW, а когда не срабатывает, то именно HIGH – именно земля и напряжение питания, а не что-то непонятное, что там датчик выдаст.
Резистор R1 ограничивает ток базы транзистора.
Я бы ещё добавил резистор на 15 – 50 кОм между базой транзистора и землёй.
У меня датчик выдаёт наоборот LOW когда нет движения и HIGH когда обнаружено движение. Я так понял в данной схеме что-то инветирует сигнал? Транзистор подключается одной ногой к + другой к сигнальному кабелю и третьей к земле?
Я бы убрал эти соединяющие шнурки на разъемах и все запаял бы.
Я бы убрал эти соединяющие шнурки на разъемах и все запаял бы.
Так и сделаю, когда эксперемент закончится. Пока требуется мобильность.
У меня датчик выдаёт наоборот LOW когда нет движения и HIGH когда обнаружено движение. Я так понял в данной схеме что-то инветирует сигнал? Транзистор подключается одной ногой к + другой к сигнальному кабелю и третьей к земле?
Ну, конечно. Транзистор и инвертирует. Подключается он как показано на схеме, только я бы ещё резистор добавил, но я уже писал про это.
У меня датчик выдаёт наоборот LOW когда нет движения и HIGH когда обнаружено движение. Я так понял в данной схеме что-то инветирует сигнал? Транзистор подключается одной ногой к + другой к сигнальному кабелю и третьей к земле?
Ну, конечно. Транзистор и инвертирует. Подключается он как показано на схеме, только я бы ещё резистор добавил, но я уже писал про это.
Наконец-то разобрался чуток ) Получается в номальном состоянии цепь замкнута, а когда датчик выдаёт HIGH резистор получая сигнал размыкает цепь?
А вот как подключается так и не понял. Из моих познаний на схеме соединяются + и земля и ещё синальный кабель и откуда-то ещё выход на пин 2.
Посмотрел ваше фото и прочитал первый пост, мне не понятно -
почему на Vin вы 5 вольт подаете? Нужно 7-12 вольт, если я не ошибаюсь.
И про соединение разъемными проводками - вы не предполагаете что это может быть вашей проблемой в ложном срабатывани?
Наконец-то разобрался чуток ) Получается в номальном состоянии цепь замкнута, а когда датчик выдаёт HIGH резистор получая сигнал размыкает цепь?
Ну, не знаю. В нормальном положении транзистор закрыт и потому на пине 2 сидит напряжение питания. Если с датчика на базу транзистора придёт хотя бы 0,6 вольта, транзистор откроется и на пине 2 окажется потенциал земли.
А вот как подключается так и не понял.
Точно как нарисовано. Чего именно Вы не поняли?
Посмотрел ваше фото и прочитал первый пост, мне не понятно -
почему на Vin вы 5 вольт подаете? Нужно 7-12 вольт, если я не ошибаюсь.
И про соединение разъемными проводками - вы не предполагаете что это может быть вашей проблемой в ложном срабатывани?
Разъм Vin у меня свободен. Питаются устройства с припаянных снизу проводов ко входному разьму питания.
Разъёмными проводами уже соединял без коробки, когда подальше всё лежит норм работает. Поэтому изадался вопросом экранировать GSM модуль или придумывать вышеупомянутые схемы с помощью резисторов и транзитора.
Пробовал взять питание для двух датчиков от арудины результат моргание как светофор )
Возможно наводка идет потому что питается контроллер и шилд через параллельный кабель?