датчик закрытия замка входной двери

Dejmos
Offline
Зарегистрирован: 19.02.2016

Наверняка многие люди сталкивались с ситуацией когда память не сохранила, закрыли ли мы дверь. Приходится мчаться домой или весь день мучаться на работе и проклинать себя за забывчивость. А если в семье еще есть маленькие школьники и пожилые родственники, которые не отличаются пунктуальностью, то вопрос еще сильнее обостряется.Итак, нужно было придумать датчик закрытия замка входной двери. Схема с герконом, которая применяется в охранных сигнализациях, мне не подходила, ибо дверь может быть закрыта, но не заперта. Можно было поставить замок с защелкой, но появляется другая проблема - забытые дома ключи.Перейдем к решению проблемы.Так как руки чешутся автоматизировать свое жилище, то решил применить Ардуино. Датчик закрытия замка будет сообщать центральному модулю, все ли в порядке.У меня были в хозяйстве китайские сильные магниты, диаметр которых случайно совпал с диаметром засовов замка (12мм). Это и послужило толчком.

Замок закрывается на 2 оборота. Ход каждого оборота примерно 1 см. Спилил на толщину магнита (3мм) средний засов. Для надежности крепления просверлил по оси засова отверстие 3мм глубиной 10мм и закрепил винтом М3, залив суперклеем. Замерил, насколько засов входит в дверную раму. Теперь надо разместить датчик Холла. Клеевым пистолетом приклеил его к обрезку клеевого стержня рассчитанной длины и приклеил это внутри дверной рамы.

В дверной раме сделал маленькое отверстие, чтобы протянуть 3 провода от датчика Холла по дверной раме до щитка.. Щиток у меня находится при выходе из квартиры, так что длина проводов от датчика примерно 1,2 м. Около щитка расположил RGB светодиод, который обозначает, открыт или закрыт замок.В щитке стоит Ардуино с NRF24L01 и постоянно отсылает информацию центральному модулю о состоянии замка.Сам модуль выполнен на обрезке макетки. Запитан от старого зарядника китайфона. На DIN шину крепится с помошью клеммы ЗНИ4. Пищалка из старой материнки.

Скетч передатчика:

/*Схема подключения NRF24L01
1 - GND
2 - VCC 3.3V !!! NOT 5V
3 - CE to Arduino pin D9
4 - CSN to Arduino pin D10
5 - SCK to Arduino pin D13
6 - MOSI to Arduino pin D11
7 - MISO to Arduino pin D12
8 - UNUSED

----Подключение датчика Холла
pin A0

-----Подключение RGB led
R - pin D4
G - pin D3
B - pin D2
т.к анод + общий, то зажиганиие нужного цвета достигается снятием напряжения с нужной ноги

-----------Пищалка
pin D5
*/
/*-----( Import needed libraries )-----*/
#include 
#include 
#include 
/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN 9
#define CSN_PIN 10
#define Hall A0
int REDpin = 4;
int GREENpin = 3;
int BLUEpin = 2;
int beep = 0;
// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Определяем трубу передачи
/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // создаем радио
/*-----( Declare Variables )-----*/
int sens[2]; // массив для данных датчика
void setup() /****** SETUP: RUNS ONCE ******/
{
Serial.begin(9600);
radio.begin();
radio.setDataRate(RF24_250KBPS); // Скорость передачи
radio.setChannel(100); // Номер канала от 0 до 127
radio.setRetries(15, 15); // Кол-во попыток и время между попытками
radio.openWritingPipe(pipe);

pinMode (REDpin, OUTPUT);
pinMode (GREENpin, OUTPUT); // прописали RGB светодиод
pinMode (BLUEpin, OUTPUT);

pinMode(5, OUTPUT); // устанавливаем 5 ногу для пищалки

}//--(end setup )---

void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
int i;
long dark = 0;

for (i = 0; i < 1000; i++) {
dark = dark + analogRead(Hall); //считали значение датчика Холла и в итоге усреднили 1000 значений
}

dark = dark / 1000; // среднее значение Холла для анализа

if (dark > 510) {
digitalWrite(REDpin, LOW); // замок открыт. зажигаем красный
digitalWrite(GREENpin, HIGH);
digitalWrite(BLUEpin, HIGH);
beep++; // начинаем считать циклы, в течение которых открыт замок
if (beep > 1500) { // значение подобрано опытным путем. примерно 3 минуты до тревоги
alarm();
}

}
else if (dark >= 215 && dark <= 495) {
digitalWrite(REDpin, HIGH); // замок закрыт на один оборот. зажигаем синий
digitalWrite(GREENpin, HIGH);
digitalWrite(BLUEpin, LOW);
beep = 0; // сброс счетчика тревоги
}
else if (dark < 210) {
digitalWrite(REDpin, HIGH); // замок закрыт на два оборота зажигаем зеленый
digitalWrite(GREENpin, LOW);
digitalWrite(BLUEpin, HIGH);
beep = 0; // сброс счетчика тревоги
}

// sens[0] = beep;
sens[0] = 101; // код датчика Холла - 101
sens[1] = dark;
radio.write( sens, sizeof(sens) ); // передали в эфир

}//--(end main loop )--

// функция тревоги. Пищим, моргаем
void alarm() {
analogWrite(5, 20); // значение должно находится между 0 и 255
// поэкспериментируйте для получения хорошего тона
digitalWrite(REDpin, HIGH);
delay(200); // пауза delayms мс
analogWrite(5, 0); // 0 - выключаем пьезо
digitalWrite(REDpin, LOW);
delay(200); // пауза delayms мс
}

Скетч приемника:

/*- WHAT IT DOES: Receives data from another transceiver with
2 Analog values from a Joystick
Displays received values on Serial Monitor
1 - GND
2 - VCC 3.3V !!! NOT 5V
3 - CE to Arduino pin 9
4 - CSN to Arduino pin 10
5 - SCK to Arduino pin 13
6 - MOSI to Arduino pin 11
7 - MISO to Arduino pin 12
8 - UNUSED
/*-----( Import needed libraries )-----*/
#include 
#include 
#include 
/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN 9
#define CSN_PIN 10
// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe
/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/*-----( Declare Variables )-----*/
//int joystick[2]; // 2 element array holding Joystick readings
int hall[2]; // массив для данных датчика
void setup() /****** SETUP: RUNS ONCE ******/
{
Serial.begin(9600);
delay(1000);
Serial.println("Nrf24L01 Receiver Starting");
radio.begin();
radio.setDataRate(RF24_250KBPS); // Скорость передачи - три строки от Осипова
radio.setChannel(100); // Номер канала от 0 до 127
radio.setRetries(15,15); // Кол-во попыток и время между попытками

radio.openReadingPipe(1,pipe);
radio.startListening();;
}//--(end setup )---
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
if ( radio.available() )
{ // Read the data payload until we've received everything
bool done = false;
while (!done)
{ // Fetch the data payload
done = radio.read( hall, sizeof(hall) );
Serial.print("Hall = ");
Serial.print(hall[0]);
Serial.print(" ");
Serial.println(hall[1]);
// Serial.print(" Y = ");
// Serial.println(joystick[1]);
}
}
else
{
// Serial.println("No radio available");
}
}//--(end main loop )---

Развитие идеи: можно отслеживать, в какое время ребенок из школы пришел, когда ушел, отслеживая через интернет. Можно охранную сигнализацию делать, т.к. Ардуино ест немного, то даже при выключении электричества при наличии батарейного питания сможет передавать сигнал тревоги.

karl2233
Offline
Зарегистрирован: 05.07.2015

а тот же геркон поставить вместо датчика Холла? не проще ли будет?

NE_XT
NE_XT аватар
Offline
Зарегистрирован: 22.05.2012

karl2233 пишет:

а тот же геркон поставить вместо датчика Холла? не проще ли будет?

:) с датчиком Холла можно определить -  на один оборот замок закрыт или на два, и еще закрыта ли дверь или приоткрыта.

karl2233
Offline
Зарегистрирован: 05.07.2015

аааа. ну тогда логично, а то и правда геркон и ардуина это как седло на корове =)

а так прикольно получилось.

axill
Offline
Зарегистрирован: 05.09.2011

Здорово!

Как кдалось засов спилить? Там же должна быть закаленная сталь

тоже хотел подобное сделать, но думал встроить датчик в корпус замка

karl2233
Offline
Зарегистрирован: 05.07.2015

давненько я не видел из каленой стали... но в любом случае - пилится, даже ножевкой... долго, но пилится.

Dejmos
Offline
Зарегистрирован: 19.02.2016

пилил мини гравером наподобие такого. Весьма полезная штука в хозяйстве для мелких работ. Этакая мини болгарка. Спилил засов не спеша за 2 -3 минуты.Гравер + набор насадок 161 шт.

Dejmos
Offline
Зарегистрирован: 19.02.2016

Геркон был в начальном варианте, но я их как-то недолюбливаю. Попадались мне залипающие герконы. Возможно, брак.

Датчик Холла действительно позволяет тонко настроить предел срабатывания насколько закрыт засов (открыто, закрыт 1 оборот, закрыт 2 оборота).

Еще зависело от условий задачи: бабушка любит проверять закрыт ли замок, затем жена идет проверять. А тут все наглядно видно.

karl2233
Offline
Зарегистрирован: 05.07.2015

контроль - наше фсё =) уменя тока котэ проверяет, но он без датчика Холла, поэтому определяет исключительно закрытие двери.

но идея и реализация зачетные.

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

В коде инклюды все пустые это потому, что библиотеки секретные :)???

если поставить ESP8266, и форварднуть наружу, можно через инет видеть состояние замка ( без ардуины) . Меньше паек больше надежности.

Dejmos
Offline
Зарегистрирован: 19.02.2016

 в скетче

#include 
#include 
#include 

надо читать как

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

При копировании скетча на форум пропала часть строки. Начальный пост не могу исправить.

ESP8266 еще не освоил, да и не знаю, сможет она считывать датчик Холла и моргать RGB светодиодом.

Центральный блок по проекту и будет через инет показывать в том числе состояние замка.

Calvin
Calvin аватар
Offline
Зарегистрирован: 08.03.2016

прошу прощенья. я тут человек новый. 

с практичной точки зрения может сразу и запиратель замка соорудить

а то както полумера...

Dejmos
Offline
Зарегистрирован: 19.02.2016

Для меня первоочередной задачей было знать состояние замка. Довольно неприятно, придя вечером домой, обнаружить, что замок двери не заперт. Или сломя голову мчаться издалека, когда тебе кажется, что забыл закрыть замок. Запиратель можно сделать, но хочется чтобы это было эстетично. Не люблю, когда соленоиды привода наружу торчат.

Calvin
Calvin аватар
Offline
Зарегистрирован: 08.03.2016

это молодец!!! 90 % эрдупроектов очень страдают механической частью )))) 

я в свою очередь Очень часто делаю всякие коробочки и адаптеры из всененного пвх. 

могу помочь, посоветовать научить. поделиться материалом (в питере). 

Fearlessfang
Offline
Зарегистрирован: 18.02.2016

Сейчас такие фичи можно даже на простые двери ставить как дополнительную услугу, при этом можно контролировать все двери через телефон и иметь возможность их блокировать

Dejmos
Offline
Зарегистрирован: 19.02.2016

был бы признателен за науку. Совет приму с удовольствием. Материал скорее придется искать у себя в Екатеринбурге.

Dejmos
Offline
Зарегистрирован: 19.02.2016

Посмотрел указанный сайт, ничего по автоматизации не нашел. Реклама?

Fearlessfang
Offline
Зарегистрирован: 18.02.2016

Dejmos пишет:

Посмотрел указанный сайт, ничего по автоматизации не нашел. Реклама?

Єто отдельно с менеджерами обсуждать нужно. мне они заказівали датчики отдельно. Мне в офис нужно было. Можешь просто в поисковике вбить датчики на двери