Stanislav,
спасибо за наводку -- хороший вариант.
датчик расстояния для дома
Модератор: immortal
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: датчик расстояния для дома
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 22
- Зарегистрирован: Пн апр 08, 2013 3:54 pm
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: датчик расстояния для дома
Если у кого-то нет желания использовать радиопередачу, поплавок, в принципе, можно и без передатчика зацепить, проводом. В нормальном положении контакты замкнуты, как уровень превышается, контакты размыкаются. Такие поплавки отдельно тоже продаются на ебее.
Скорее, проводом даже более надежно. Передатчик передает несколько раз код. Раз 8 подряд, чтобы наверняка. Но есть одна проблема. Если вдруг в этот же момент у вас или соседей сработают датчики движения, открытия дверей или радио помехи на данной частоте и т.д., вероятнее всего, что сигнал от поплавка будет утерян. А передается он той самой очередью, но всего один раз. Как следствие, если сигнал пропущен, вы и не узнаете о переполнении. а замыкание, размыкание контролировать на ардуино проще простого.
Проверял, как сработает датчик на длинном проводе. Около 50 метров без проблем. Длиннее кабеля не нашел дома. Проверял на медном кабеле 2*1,5кв. Думаю, что с витой парой или телефонным тоже будет работать отлично.
з.ы. для автоматизации вытяжки в туалете тоже можно использовать. В бачок установить и логику ардуино прописать.
Скорее, проводом даже более надежно. Передатчик передает несколько раз код. Раз 8 подряд, чтобы наверняка. Но есть одна проблема. Если вдруг в этот же момент у вас или соседей сработают датчики движения, открытия дверей или радио помехи на данной частоте и т.д., вероятнее всего, что сигнал от поплавка будет утерян. А передается он той самой очередью, но всего один раз. Как следствие, если сигнал пропущен, вы и не узнаете о переполнении. а замыкание, размыкание контролировать на ардуино проще простого.
Проверял, как сработает датчик на длинном проводе. Около 50 метров без проблем. Длиннее кабеля не нашел дома. Проверял на медном кабеле 2*1,5кв. Думаю, что с витой парой или телефонным тоже будет работать отлично.
з.ы. для автоматизации вытяжки в туалете тоже можно использовать. В бачок установить и логику ардуино прописать.
-
- Сообщения: 42
- Зарегистрирован: Пн авг 26, 2013 11:34 am
- Благодарил (а): 0
- Поблагодарили: 2 раза
Re: датчик расстояния для дома
Stanislav
А можете написать подробнее про соединение с Arduino через RF-модуль?
А можете написать подробнее про соединение с Arduino через RF-модуль?
-
- Сообщения: 22
- Зарегистрирован: Пн апр 08, 2013 3:54 pm
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: датчик расстояния для дома
Я делал следующим образом:
Купил приемники и передатчики на 315 и 433 Мгц.
Использовал библиотеку RCSwitch.h
Там в примерах есть образец приемника. Сначала отправляем полученные данные в серийный порт, имитируем срабатывание датчика, записываем код, потом добавляем условие, когда код соответствует заданному, обрабатывается событие. В данном случае, отправка статуса в MDM.
Вот, как-то так.
Если нужен, скину скетч.
Купил приемники и передатчики на 315 и 433 Мгц.
Использовал библиотеку RCSwitch.h
Там в примерах есть образец приемника. Сначала отправляем полученные данные в серийный порт, имитируем срабатывание датчика, записываем код, потом добавляем условие, когда код соответствует заданному, обрабатывается событие. В данном случае, отправка статуса в MDM.
Вот, как-то так.
Если нужен, скину скетч.
-
- Сообщения: 42
- Зарегистрирован: Пн авг 26, 2013 11:34 am
- Благодарил (а): 0
- Поблагодарили: 2 раза
Re: датчик расстояния для дома
Да, поделитесь пожалуйста скетчем. Так будет проще разобраться, хочу пару таких датчиков прикрутить к системе
-
- Сообщения: 22
- Зарегистрирован: Пн апр 08, 2013 3:54 pm
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: датчик расстояния для дома
Я сейчас на работе. Код который в данный момент работает, находится у меня дома. Пока могу скинуть "начальный вариант". Здесь все работает, отличие от того, который крутится дома только в количестве условий для датчиков (их уже намного больше). Больше никаких изменений не вносил, все работает стабильно, без нареканий.
Прошу прощение за беспорядок в коде. Если будут вопросы, я постараюсь все разъяснить.
Прошу прощение за беспорядок в коде. Если будут вопросы, я постараюсь все разъяснить.
Код: Выделить всё
#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;
}
*/
}
}