датчик расстояния для дома

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: датчик расстояния для дома

Сообщение sergejey » Пт окт 25, 2013 11:05 am

Stanislav,

спасибо за наводку -- хороший вариант.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Stanislav
Сообщения: 22
Зарегистрирован: Пн апр 08, 2013 3:54 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: датчик расстояния для дома

Сообщение Stanislav » Пт окт 25, 2013 12:06 pm

Если у кого-то нет желания использовать радиопередачу, поплавок, в принципе, можно и без передатчика зацепить, проводом. В нормальном положении контакты замкнуты, как уровень превышается, контакты размыкаются. Такие поплавки отдельно тоже продаются на ебее.
Скорее, проводом даже более надежно. Передатчик передает несколько раз код. Раз 8 подряд, чтобы наверняка. Но есть одна проблема. Если вдруг в этот же момент у вас или соседей сработают датчики движения, открытия дверей или радио помехи на данной частоте и т.д., вероятнее всего, что сигнал от поплавка будет утерян. А передается он той самой очередью, но всего один раз. Как следствие, если сигнал пропущен, вы и не узнаете о переполнении. а замыкание, размыкание контролировать на ардуино проще простого.
Проверял, как сработает датчик на длинном проводе. Около 50 метров без проблем. Длиннее кабеля не нашел дома. Проверял на медном кабеле 2*1,5кв. Думаю, что с витой парой или телефонным тоже будет работать отлично.
з.ы. для автоматизации вытяжки в туалете тоже можно использовать. В бачок установить и логику ардуино прописать.
Евгений
Сообщения: 42
Зарегистрирован: Пн авг 26, 2013 11:34 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: датчик расстояния для дома

Сообщение Евгений » Пт окт 25, 2013 12:32 pm

Stanislav
А можете написать подробнее про соединение с Arduino через RF-модуль?
Stanislav
Сообщения: 22
Зарегистрирован: Пн апр 08, 2013 3:54 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: датчик расстояния для дома

Сообщение Stanislav » Пт окт 25, 2013 1:00 pm

Я делал следующим образом:
Купил приемники и передатчики на 315 и 433 Мгц.
Использовал библиотеку RCSwitch.h
Там в примерах есть образец приемника. Сначала отправляем полученные данные в серийный порт, имитируем срабатывание датчика, записываем код, потом добавляем условие, когда код соответствует заданному, обрабатывается событие. В данном случае, отправка статуса в MDM.
Вот, как-то так.
Если нужен, скину скетч.
Евгений
Сообщения: 42
Зарегистрирован: Пн авг 26, 2013 11:34 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: датчик расстояния для дома

Сообщение Евгений » Пт окт 25, 2013 1:11 pm

Да, поделитесь пожалуйста скетчем. Так будет проще разобраться, хочу пару таких датчиков прикрутить к системе
Stanislav
Сообщения: 22
Зарегистрирован: Пн апр 08, 2013 3:54 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: датчик расстояния для дома

Сообщение Stanislav » Пт окт 25, 2013 1:20 pm

Я сейчас на работе. Код который в данный момент работает, находится у меня дома. Пока могу скинуть "начальный вариант". Здесь все работает, отличие от того, который крутится дома только в количестве условий для датчиков (их уже намного больше). Больше никаких изменений не вносил, все работает стабильно, без нареканий.
Прошу прощение за беспорядок в коде. Если будут вопросы, я постараюсь все разъяснить.

Код: Выделить всё

#include <SPI.h>
#include <RCSwitch.h>
#include <Ethernet.h>
#include <SD.h>
#include <DHT.h>



byte mac[] = { 0xDE, 0xDF, 0xBE, 0xEF, 0xFE, 0xDE }; 
IPAddress ip(192,168,1, 178);
IPAddress rserver(192,168,1,2);
IPAddress Elbu(192,168,1,177);
byte gateway[] = { 192, 168, 1, 1 };//gateway         
byte subnet[] = { 255, 255, 255, 0 }; //subnet
//EthernetServer server(80);//server port
EthernetClient client;
EthernetServer server(80);



#define DHTPINV 22
#define DHTPINH 23

#define DHTTYPEV DHT21
#define DHTTYPEH DHT11

#define SWITCH_TO_W5100 digitalWrite(4,HIGH); digitalWrite(10,LOW)
#define SWITCH_TO_SD digitalWrite(10,HIGH); digitalWrite(4,LOW)
#define ALL_OFF digitalWrite(10,HIGH); digitalWrite(4,HIGH)

DHT dhtV(DHTPINV, DHTTYPEV);
DHT dhtH(DHTPINH, DHTTYPEH);



RCSwitch rc315 = RCSwitch();

long previousMillis = 0;
long previousMillis2 = 0;
long interval = 10000;
long interval2 = 3000;

boolean MajorDoMo = true;

int value315 = 0;

int TempVannaya = 0;
int HumVannaya = 0;
int TempHome = 0;
int HumHome = 0;

int bell = 24;

char buf[80];


byte timerForDHTV = 0;
byte timerForDHTH = 0;
byte timerForBell = 0;

// Переменные сенсоров движения
byte allowMotGostinaya = 1;
byte allowMotVannaya = 1;
byte allowMotKuhnya = 1;
byte allowMotSpalnya = 1;
byte allowMotVeranda = 1;
byte allowMotZal = 1;
byte allowMotKoridor = 1;
byte allowMotGostevaya = 1;
byte allowMotGaraj = 1;
byte allowMotDvorPolisad = 1;
byte allowMotDvorMain = 1;
byte allowMotDvorLetDush = 1;

//Переменные кнопочных переключателей
byte allowButGostinaya = 1;
byte allowButVannaya = 1;
byte allowButKuhnya = 1;
byte allowButSpalnya = 1;
byte allowButVeranda = 1;
byte allowButZal = 1;
byte allowButKoridor = 1;
byte allowButGostevaya = 1;
byte allowButGaraj = 1;
byte allowButDvorPolisad = 1;
byte allowButUlicaUgol = 1;
byte allowButDvorLetDush = 1;
byte allowButKlapanUlica = 1;
byte allowButRozetkiSpalnya= 1;
byte allowButRozetkiDino = 1;
byte allowButVityajka = 1;

byte allowBell = 1;


void tempHumVannaya()
{
float hV = dhtV.readHumidity();
float tV = dhtV.readTemperature();
  TempVannaya=tV;
  HumVannaya=hV;
}

void tempHumHome()
{
float hH = dhtH.readHumidity();
float tH = dhtH.readTemperature();
  TempHome=tH;
  HumHome=hH;
}


void sendHTTP(){
  if (client.connect(rserver, 80)) 
{ 
 //Serial.println("OK"); 
client.println(buf);
//rclient.println("Host: 192.168.8.3"); // IP компьютера на котором установлен сервер majordomo
client.println(); 
client.stop();
}
}


void setup() {
  SWITCH_TO_W5100;
  attachInterrupt(1, switches, RISING);
  pinMode(53,OUTPUT);
  Serial.begin(9600);
  Ethernet.begin(mac, ip, gateway, subnet);
  rc315.enableReceive(0);
dhtV.begin();
dhtH.begin();
// Receiver on inerrupt 0 => that is pin #2
}

void switches(){
  if (digitalRead(bell)&&allowBell==1){
    allowBell=0;
   sprintf(buf, "GET /objects/?object=buttonZvonok&op=m&m=statusChanged&status=1 HTTP/1.0");
  sendHTTP(); 
  }
}

void loop() {
  EthernetClient client=server.available();
  if (MajorDoMo == true) {
  unsigned long currentMillis=millis();
  
  if(timerForDHTV == 2) { 
    timerForDHTV = 0;
    
    
    tempHumVannaya();
     Serial.println(TempVannaya);
    Serial.println(HumVannaya);
    
    sprintf(buf, "GET /objects/?object=tempVannaya&op=m&m=statusChanged&status=%d HTTP/1.0", TempVannaya);
   sendHTTP();
  sprintf(buf, "GET /objects/?object=humVannaya&op=m&m=statusChanged&status=%d HTTP/1.0", HumVannaya);
 sendHTTP();
 
        
    
  /*
  if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=inhouseSensors&p=tempVannaya&op=set&v=");
   client.println(TempVannaya);
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  } 
  
  
 
   if (client.connect(rserver, 80)) {
   Serial.println("Connected");
    
    // Make a HTTP request:
   
  client.print("GET /objects/?object=humVannaya&op=m&m=statusChanged&status=");
    client.println(HumVannaya);
    client.println();
    client.stop();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("Failed to connect to server");
  } 
 
  
  */
  }
  
  
  if (timerForDHTH == 30){
    timerForDHTH = 0;
    tempHumHome();
     Serial.println(TempHome);
    Serial.println(HumHome);
    
    sprintf(buf, "GET /objects/?object=tempHouse&op=m&m=statusChanged&status=%d HTTP/1.0", TempHome);
    sendHTTP();
    sprintf(buf, "GET /objects/?object=humHouse&op=m&m=statusChanged&status=%d HTTP/1.0", HumHome);
    sendHTTP();
    
  /*  if (client.connect(rserver, 80)) {
    Serial.println("Connected");
    
    // Make a HTTP request:
   
    client.print("GET /objects/?object=tempHouse&op=m&m=statusChanged&status=");
    client.println(TempHome);
    //rclient.println("");
    client.println();
    client.stop();
             }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("Failed connect to server");
  } 
  
  
  if (client.connect(rserver, 80)) {
    Serial.println("Connected");
    
    // Make a HTTP request:
   
    client.print("GET /objects/?object=humHouse&op=m&m=statusChanged&status=");
    client.println(HumHome);
    //rclient.println("");
    client.println();
    client.stop();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("Failed connect to server");
  } 
  
  
  
  
  */
  }
  
  
  if (timerForBell==40){
   allowBell=1;
   timerForBell=0;
  } 
  
  if (currentMillis - previousMillis2 > interval2){
   previousMillis2 = currentMillis;
   value315 = 0;
   allowButGostinaya = 1;   
 allowButVannaya = 1;
 allowButKuhnya = 1;
 allowButSpalnya = 1;
 allowButVeranda = 1;
 allowButZal = 1;
 allowButKoridor = 1;
 allowButGostevaya = 1;
 allowButGaraj = 1;
 allowButDvorPolisad = 1;
 allowButUlicaUgol = 1;
 allowButDvorLetDush = 1;
 allowButKlapanUlica = 1;
allowButRozetkiSpalnya= 1;
allowButRozetkiDino = 1;
allowButVityajka = 1;
   
  }
  
  if (currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;
    timerForDHTV = timerForDHTV + 1;
    timerForDHTH = timerForDHTH + 1;
    timerForBell = timerForBell + 1;
    
value315 = 0;
allowMotGostinaya = 1;
allowMotVannaya = 1;
allowMotKuhnya = 1;
allowMotSpalnya = 1;
allowMotVeranda = 1;
allowMotZal = 1;
allowMotKoridor = 1;
allowMotGostevaya = 1;
allowMotGaraj = 1;
allowMotDvorPolisad = 1;
allowMotDvorMain = 1;
allowMotDvorLetDush = 1;
  }
  
  if (rc315.available()) {
    value315 = rc315.getReceivedValue();
      if (value315 == 0) {
      Serial.print("Unknown encoding");
    } else {
     Serial.print("Received ");
      Serial.print( rc315.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( rc315.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( rc315.getReceivedProtocol() );
      Serial.println(value315);
    }
    rc315.resetAvailable();
  }



// Условие срабатывания датчиков движения
  switch (value315) {
    case 21841:
    if (allowMotGostinaya == 1){
      allowMotGostinaya = 0;
      Serial.println("sent: motion Gostinaya");
      
      sprintf(buf, "GET /objects/?object=Gostinaya&op=m&m=statusChanged&status=1 HTTP/1.0");
      Serial.println(buf);
      sendHTTP();
   /* if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=Gostinaya&op=m&m=statusChanged&status=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  }
*/  
  
}
      break;
    case 22353:
    if (allowMotVannaya == 1) {
      allowMotVannaya = 0;
      Serial.println("sent: motion Vannaya");
      sprintf(buf, "GET /objects/?object=Vannaya&op=m&m=statusChanged&status=1 HTTP/1.0");
      Serial.println(buf);
      sendHTTP();
      
  /*    if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=Vannaya&op=m&m=statusChanged&status=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  }         
  */
}
      break;
    // default: необязателен
  }
  
  
/*
// Условие срабатывания кнопок

  switch (value315) {
    case 21955:
    //21808
    if (allowButVannaya == 1) {
      allowButVannaya = 0;
      Serial.println("sent: button vannaya");}
    
    if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("?REL4=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  } 
   
 
  
  
      break;
      
    case 4556:
    if (allowButGostinaya == 1) {
      allowButGostinaya = 0;
      Serial.println("sent: button");}
  
  if (client.connect(Elbu, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET ?REL4=0");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  }
         
  
      break;
    
    case 4544:
    if (allowButKuhnya == 1) {
      allowButKuhnya = 0;
      Serial.println("sent: button");}
if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=buttonKuhnya&op=m&m=statusChanged&status=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  }

 

      break;
    
    case 4367:
    if (allowButSpalnya == 1) {
      allowButSpalnya = 0;
      Serial.println("sent: button");}
      if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=buttonSpalnya&op=m&m=statusChanged&status=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  }
 
 
     
      break;
      
      
    case 21808:
    if (allowButGaraj == 1) {
      allowButGaraj = 0;
      Serial.println("sent: button garaj");}
  
  if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=buttonGaraj&op=m&m=statusChanged&status=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  }
  

  
  
      break;
      
      
     case 21772:
    if (allowButUlicaUgol == 1) {
      allowButUlicaUgol = 0;
      Serial.println("sent: button");}
      if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=buttonUlicaUgol&op=m&m=statusChanged&status=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  } 
  
 
      
      
      break;
      
      case 21811:
    if (allowButRozetkiSpalnya == 1) {
      allowButRozetkiSpalnya = 0;
      Serial.println("sent: button");}
  if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=buttonRozetkiSpalnya&op=m&m=statusChanged&status=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  }
  
  
  
  
      break;
      
      case 4364:
    if (allowButRozetkiDino == 1) {
      allowButRozetkiDino = 0;
      Serial.println("sent: button");}
  if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=buttonRozetkiDino&op=m&m=statusChanged&status=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  }
  
  
  
  
      break;
      
      case 21820:
    if (allowButVityajka == 1) {
      allowButVityajka = 0;
      Serial.println("sent: button vityajka");}
      if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=buttonVityajka&op=m&m=statusChanged&status=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  }   
  
  
      
      break;
      
      case 219556:
    if (allowButKlapanUlica == 1) {
      allowButKlapanUlica = 0;
      Serial.println("sent: button");}
  
  if (client.connect(rserver, 80)) {
        
    // Make a HTTP request:
   
   client.print("GET /objects/?object=buttonKlapanUlica&op=m&m=statusChanged&status=1");
   client.println();
   client.stop();
            }
  else {
    Serial.println("Failed to connect to server");
  }
  
 
  
      break;
      
    /*case ?????:
    if (allowButKoridor == 1) {
      allowButKoridor = 0;
      Serial.println("sent: button ");}
      break;
     */
    /* case ?????:
    if (allowButDetskaya == 1) {
      allowButDetskaya = 0;
      Serial.println("sent: button");}
      break;
     */
    /* case ?????:
    if (allowButZal == 1) {
      allowButZal = 0;
      Serial.println("sent: button");}
      break;
     */
    /* case ?????:
    if (allowButGostevaya == 1) {
      allowButGostevaya = 0;
      Serial.println("sent: button");}
      break;
     
     
     
     
  }
  */
}
}

    
  
  



Евгений
Сообщения: 42
Зарегистрирован: Пн авг 26, 2013 11:34 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: датчик расстояния для дома

Сообщение Евгений » Пт окт 25, 2013 1:32 pm

Stanislav

Благодарю!
Stanislav
Сообщения: 22
Зарегистрирован: Пн апр 08, 2013 3:54 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: датчик расстояния для дома

Сообщение Stanislav » Пт окт 25, 2013 1:41 pm

Рад помочь
Ответить