Монтирую систему на реальном объекте и столкнулся с тем что pir датчики HC-SR501 ужасно глючат, на коротких проводах все норм, на длинных самопроизвольно срабатывают
Питание датчика от arduino 5V, ардуино запитываю от 12V, провода витая пара без экранировки
может есть у кого-то наработки по этой теме?
фото монтажа
https://yadi.sk/i/Mdkhx7OV3BTVit
https://yadi.sk/i/lUWDBkh83BTVpk
https://yadi.sk/i/YWJAgbmE3BTVuo
Код: Выделить всё
#include "SPI.h"
#include "Ethernet.h"
#include "WebServer.h"
#include "DHT.h"
const int photoPin1 = A0; // датчик света в кабинете
int val1 = 0; //переменная храннения значения датчика света
int raw = 0;
template<class T> inline Print &operator <<(Print &obj, T arg) { obj.print(arg); return obj; }
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE4, 0xDE, 0x35 }; // MAC-адрес нашего устройства
byte ip[] = { 192, 168, 1, 120 };
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = { 192, 168, 1, 1 };
byte dns_server[] = { 192, 168, 1, 1 };
// ip-адрес удалённого сервера
byte rserver[] = { 192, 168, 1, 130 };
long requestMillis; // Задаем переменную времени последней передачи данных на сервер температура
long interval = 200000; // Задаем максимальный интервал между передачами данных на сервер температура
long requestMillis_lig; // Задаем переменную времени последней передачи данных на сервер датчик света
long interval_lig = 400000; // Задаем максимальный интервал между передачами данных на сервер датчик света
#define pirPin1 22 // pir1_tualet_2fl SW_tualet_2fl
#define pirPin2 23 // pir1_spaln_rodi sw_spaln_rodi
#define pirPin3 24 // pir1_garderob sw_garderob
#define pirPin4 25 // pir1_spaln_roma sw_spaln_roma
#define pirPin5 26 // pir1_spaln_dets sw_spaln_dets
#define pirPin6 27 // pir1_kabinet sw_kabinet
#define pirPin7 28 // pir1_Hall_2fl sw_Hall_2fl
#define DHTPIN_1 30// Пин DHT1 tualet_2fl
#define DHTPIN_2 31// Пин DHT2 spaln_rodi
#define DHTPIN_3 32// Пин DHT3 garderob
#define DHTPIN_4 33// Пин DHT4 spaln_roma
#define DHTPIN_5 34// Пин DHT5 spaln_dets
#define DHTPIN_6 35// Пин DHT6 kabinet
#define DHTPIN_7 36// Пин DHT7 Hall_2fl
#define DHTTYPE DHT11 // DHT 22 (AM2302)
int buttonState = 0;
int status1 = 0;
DHT dht_1(DHTPIN_1, DHTTYPE);
DHT dht_2(DHTPIN_2, DHTTYPE);
DHT dht_3(DHTPIN_3, DHTTYPE);
DHT dht_4(DHTPIN_4, DHTTYPE);
DHT dht_5(DHTPIN_5, DHTTYPE);
DHT dht_6(DHTPIN_6, DHTTYPE);
DHT dht_7(DHTPIN_7, DHTTYPE);
/**********************/
float old_temperature1=0;
float old_temperature2=0;
float old_temperature3=0;
float old_temperature4=0;
float old_temperature5=0;
float old_temperature6=0;
float old_temperature7=0;
float old_humidity=0;
float old_heatindex=0;
int old_light = 0;
int old_door=0;
int old_movement_1=0;
int old_movement_2=0;
int old_movement_3=0;
int old_movement_4=0;
int old_movement_5=0;
int old_movement_6=0;
int old_movement_7=0;
int gateState = 0;
int old_Irms;
char buf[80];
int cmd = 0; //код выполняемой команды
/************************/
EthernetClient rclient;
#define PREFIX ""
WebServer webserver(PREFIX, 80);
/*********************************************************************************************************/
// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
Serial.println(buf);
if (rclient.connect(rserver, 80)) {
Serial.println("OK");
rclient.println(buf);
rclient.println("Host: 192.168.1.3");
rclient.println();
delay(2000);
rclient.stop();
} else {
Serial.println("FAILED");
}
}
void setup()
{
Ethernet.begin(mac, ip);
webserver.begin();
pinMode( photoPin1, INPUT );
pinMode(pirPin1, INPUT); // Датчик движения pir1_tualet_2fl
old_movement_1=digitalRead(pirPin1);
digitalWrite(pirPin1, LOW); //начинаем работу движения нет
pinMode(pirPin2, INPUT); // Датчик движения pir1_spaln_rodi
old_movement_2=digitalRead(pirPin2);
digitalWrite(pirPin2, LOW); //начинаем работу движения нет
pinMode(pirPin3, INPUT); // Датчик движения pir1_garderob
old_movement_3=digitalRead(pirPin3);
digitalWrite(pirPin3, LOW); //начинаем работу движения нет
pinMode(pirPin4, INPUT); // Датчик движения pir1_spaln_roma
old_movement_4=digitalRead(pirPin4);
digitalWrite(pirPin4, LOW); //начинаем работу движения нет
pinMode(pirPin5, INPUT); // Датчик движения pir1_spaln_dets
old_movement_5=digitalRead(pirPin5);
digitalWrite(pirPin5, LOW); //начинаем работу движения нет
pinMode(pirPin6, INPUT); // Датчик движения pir1_kabinet
digitalWrite(pirPin6, LOW); //начинаем работу движения нет
old_movement_6=digitalRead(pirPin6);
pinMode(pirPin7, INPUT); // Датчик движения pir1_Hall_2fl
old_movement_7=digitalRead(pirPin7);
digitalWrite(pirPin7, LOW); //начинаем работу движения нет
//pinMode(5, INPUT); // Датчик входной двери
//digitalWrite(5, HIGH);
// old_door=!digitalRead(5);
//pinMode(9,OUTPUT); //В меге инициируем IR библиотеку через 9-й пин
// digitalWrite(9, LOW);// Задаём низкий уровень сигнала
Serial.begin(115200); // Скорость порта
dht_1.begin();
dht_2.begin();
dht_3.begin();
dht_4.begin();
dht_5.begin();
dht_6.begin();
dht_7.begin();
}
void loop()
{
webserver.processConnection();
// pir1_tualet_2fl
int current_movement_1=digitalRead(pirPin1);
// Serial.println(current_movement_1);
if (current_movement_1!=(int)old_movement_1) {
old_movement_1=(int)current_movement_1;
sprintf(buf, "GET /objects/?object=pir1_tualet_2fl&op=m&m=statusChanged& HTTP/1.0", (int)current_movement_1);
sendHTTPRequest();
}
// pir1_spaln_rodi
int current_movement_2=digitalRead(pirPin2);
// Serial.println(current_movement_2);
if (current_movement_2!=(int)old_movement_2) {
old_movement_2=(int)current_movement_2;
sprintf(buf, "GET /objects/?object=pir1_spaln_rodi&op=m&m=statusChanged& HTTP/1.0", (int)current_movement_2);
sendHTTPRequest();
}
// pir1_garderob
int current_movement_3=digitalRead(pirPin3);
// Serial.println(current_movement_2);
if (current_movement_3!=(int)old_movement_3) {
old_movement_3=(int)current_movement_3;
sprintf(buf, "GET /objects/?object=pir1_garderob&op=m&m=statusChanged& HTTP/1.0", (int)current_movement_3);
sendHTTPRequest();
}
// pir1_spaln_roma
int current_movement_4=digitalRead(pirPin4);
// Serial.println(current_movement_4);
if (current_movement_4!=(int)old_movement_4) {
old_movement_4=(int)current_movement_4;
sprintf(buf, "GET /objects/?object=pir1_spaln_roma&op=m&m=statusChanged& HTTP/1.0", (int)current_movement_4);
sendHTTPRequest();
}
// pir1_spaln_dets
int current_movement_5=digitalRead(pirPin5);
// Serial.println(current_movement_5);
if (current_movement_5!=(int)old_movement_5) {
old_movement_5=(int)current_movement_5;
sprintf(buf, "GET /objects/?object=pir1_spaln_dets&op=m&m=statusChanged& HTTP/1.0", (int)current_movement_5);
sendHTTPRequest();
}
// pir1_kabinet
int current_movement_6=digitalRead(pirPin6);
// Serial.println(current_movement_6);
if (current_movement_6!=(int)old_movement_6) {
old_movement_6=(int)current_movement_6;
sprintf(buf, "GET /objects/?object=pir1_kabinet&op=m&m=statusChanged& HTTP/1.0", (int)current_movement_6);
sendHTTPRequest();
}
// pir1_Hall_2fl
int current_movement_7=digitalRead(pirPin7);
// Serial.println(current_movement_7);
if (current_movement_7!=(int)old_movement_7) {
old_movement_7=(int)current_movement_7;
sprintf(buf, "GET /objects/?object=pir1_Hall_2fl&op=m&m=statusChanged& HTTP/1.0", (int)current_movement_7);
sendHTTPRequest();
}
// температура tualet_2fl
if ((millis() - requestMillis) > interval) // Если последняя передача данных на сервер была более 30 минут назад (например температура не менялась)...
{
float current_temp1=0;
float current_hum1=0;
current_temp1=dht_1.readTemperature();
current_hum1=dht_1.readHumidity();
if (isnan(current_temp1) || isnan(current_hum1))
{
Serial.println("Failed to read from DHT");
// requestMillis = millis();
} else {
if (old_temperature1!=(float)current_temp1) {
int temp1 = (current_temp1 - (int)current_temp1) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=temp_tualet_2fl&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp1, abs(temp1));
sendHTTPRequest();
old_temperature1=(float)current_temp1;
// requestMillis = millis();
}
}
}
// температура spaln_rodi
if ((millis() - requestMillis) > interval) // Если последняя передача данных на сервер была более 30 минут назад (например температура не менялась)...
{
float current_temp2=0;
float current_hum2=0;
current_temp2=dht_2.readTemperature();
current_hum2=dht_2.readHumidity();
if (isnan(current_temp2) || isnan(current_hum2))
{
Serial.println("Failed to read from DHT");
// requestMillis = millis();
} else {
if (old_temperature2!=(float)current_temp2) {
int temp2 = (current_temp2 - (int)current_temp2) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=temp_spaln_rodi&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp2, abs(temp2));
sendHTTPRequest();
old_temperature2=(float)current_temp2;
// requestMillis = millis();
}
}
}
// температура garderob
if ((millis() - requestMillis) > interval) // Если последняя передача данных на сервер была более 30 минут назад (например температура не менялась)...
{
float current_temp3=0;
float current_hum3=0;
current_temp3=dht_3.readTemperature();
current_hum3=dht_3.readHumidity();
if (isnan(current_temp3) || isnan(current_hum3))
{
Serial.println("Failed to read from DHT");
// requestMillis = millis();
} else {
if (old_temperature3!=(float)current_temp3) {
int temp3 = (current_temp3 - (int)current_temp3) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=temp_garderob&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp3, abs(temp3));
sendHTTPRequest();
old_temperature3=(float)current_temp3;
// requestMillis = millis();
}
}
}
// температура spaln_roma
if ((millis() - requestMillis) > interval) // Если последняя передача данных на сервер была более 30 минут назад (например температура не менялась)...
{
float current_temp4=0;
float current_hum4=0;
current_temp4=dht_4.readTemperature();
current_hum4=dht_4.readHumidity();
if (isnan(current_temp4) || isnan(current_hum4))
{
Serial.println("Failed to read from DHT");
// requestMillis = millis();
} else {
if (old_temperature4!=(float)current_temp4) {
int temp4 = (current_temp4 - (int)current_temp4) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=temp_spaln_roma&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp4, abs(temp4));
sendHTTPRequest();
old_temperature4=(float)current_temp4;
// requestMillis = millis();
}
}
}
// температура spaln_dets
if ((millis() - requestMillis) > interval) // Если последняя передача данных на сервер была более 30 минут назад (например температура не менялась)...
{
float current_temp5=0;
float current_hum5=0;
current_temp5=dht_5.readTemperature();
current_hum5=dht_5.readHumidity();
if (isnan(current_temp5) || isnan(current_hum5))
{
Serial.println("Failed to read from DHT");
// requestMillis = millis();
} else {
if (old_temperature5!=(float)current_temp5) {
int temp5 = (current_temp5 - (int)current_temp5) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=temp_spaln_dets&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp5, abs(temp5));
sendHTTPRequest();
old_temperature5=(float)current_temp5;
//requestMillis = millis();
}
}
}
// температура pir1_kabinet
if ((millis() - requestMillis) > interval) // Если последняя передача данных на сервер была более 30 минут назад (например температура не менялась)...
{
float current_temp6=0;
float current_hum6=0;
current_temp6=dht_6.readTemperature();
current_hum6=dht_6.readHumidity();
if (isnan(current_temp6) || isnan(current_hum6))
{
Serial.println("Failed to read from DHT");
// requestMillis = millis();
} else {
if (old_temperature6!=(float)current_temp6) {
int temp6 = (current_temp6 - (int)current_temp6) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=temp_kabinet&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp6, abs(temp6));
sendHTTPRequest();
old_temperature6=(float)current_temp6;
// requestMillis = millis();
}
}
}
// температура Hall_2fl
if ((millis() - requestMillis) > interval) // Если последняя передача данных на сервер была более 30 минут назад (например температура не менялась)...
{
float current_temp7=0;
float current_hum7=0;
current_temp7=dht_7.readTemperature();
current_hum7=dht_7.readHumidity();
if (isnan(current_temp7) || isnan(current_hum7))
{
Serial.println("Failed to read from DHT");
// requestMillis = millis();
} else {
if (old_temperature6!=(float)current_temp7) {
int temp7 = (current_temp7 - (int)current_temp7) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=temp_Hall_2fl&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp7, abs(temp7));
sendHTTPRequest();
old_temperature7=(float)current_temp7;
requestMillis = millis();
}
}
}
//датчик света
if ((millis() - requestMillis_lig) > interval_lig) // Если последняя передача данных на сервер была более 30 минут назад (например температура не менялась)...
{
val1 = analogRead(photoPin1); // считываем значение с фоторезистора
Serial.println(val1);
sprintf(buf, "GET /objects/?object=lightsensor&op=m&m=lightChanged&l=%i HTTP/1.0", (int)val1);
sendHTTPRequest();
//val1 = val1/4; // конвертируем из 0-1023 к 0-255
// analogWrite(ledPin1,val); // устанавливаем значение
requestMillis_lig = millis();
}
}