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

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

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

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

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

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

001/*Схема подключения NRF24L01
0021 - GND
0032 - VCC 3.3V !!! NOT 5V
0043 - CE to Arduino pin D9
0054 - CSN to Arduino pin D10
0065 - SCK to Arduino pin D13
0076 - MOSI to Arduino pin D11
0087 - MISO to Arduino pin D12
0098 - UNUSED
010 
011----Подключение датчика Холла
012pin A0
013 
014-----Подключение RGB led
015R - pin D4
016G - pin D3
017B - pin D2
018т.к анод + общий, то зажиганиие нужного цвета достигается снятием напряжения с нужной ноги
019 
020-----------Пищалка
021pin D5
022*/
023/*-----( Import needed libraries )-----*/
024#include
025#include
026#include
027/*-----( Declare Constants and Pin Numbers )-----*/
028#define CE_PIN 9
029#define CSN_PIN 10
030#define Hall A0
031int REDpin = 4;
032int GREENpin = 3;
033int BLUEpin = 2;
034int beep = 0;
035// NOTE: the "LL" at the end of the constant is "LongLong" type
036const uint64_t pipe = 0xE8E8F0F0E1LL; // Определяем трубу передачи
037/*-----( Declare objects )-----*/
038RF24 radio(CE_PIN, CSN_PIN); // создаем радио
039/*-----( Declare Variables )-----*/
040int sens[2]; // массив для данных датчика
041void setup() /****** SETUP: RUNS ONCE ******/
042{
043Serial.begin(9600);
044radio.begin();
045radio.setDataRate(RF24_250KBPS); // Скорость передачи
046radio.setChannel(100); // Номер канала от 0 до 127
047radio.setRetries(15, 15); // Кол-во попыток и время между попытками
048radio.openWritingPipe(pipe);
049 
050pinMode (REDpin, OUTPUT);
051pinMode (GREENpin, OUTPUT); // прописали RGB светодиод
052pinMode (BLUEpin, OUTPUT);
053 
054pinMode(5, OUTPUT); // устанавливаем 5 ногу для пищалки
055 
056}//--(end setup )---
057 
058void loop() /****** LOOP: RUNS CONSTANTLY ******/
059{
060int i;
061long dark = 0;
062 
063for (i = 0; i < 1000; i++) {
064dark = dark + analogRead(Hall); //считали значение датчика Холла и в итоге усреднили 1000 значений
065}
066 
067dark = dark / 1000; // среднее значение Холла для анализа
068 
069if (dark > 510) {
070digitalWrite(REDpin, LOW); // замок открыт. зажигаем красный
071digitalWrite(GREENpin, HIGH);
072digitalWrite(BLUEpin, HIGH);
073beep++; // начинаем считать циклы, в течение которых открыт замок
074if (beep > 1500) { // значение подобрано опытным путем. примерно 3 минуты до тревоги
075alarm();
076}
077 
078}
079else if (dark >= 215 && dark <= 495) {
080digitalWrite(REDpin, HIGH); // замок закрыт на один оборот. зажигаем синий
081digitalWrite(GREENpin, HIGH);
082digitalWrite(BLUEpin, LOW);
083beep = 0; // сброс счетчика тревоги
084}
085else if (dark < 210) {
086digitalWrite(REDpin, HIGH); // замок закрыт на два оборота зажигаем зеленый
087digitalWrite(GREENpin, LOW);
088digitalWrite(BLUEpin, HIGH);
089beep = 0; // сброс счетчика тревоги
090}
091 
092// sens[0] = beep;
093sens[0] = 101; // код датчика Холла - 101
094sens[1] = dark;
095radio.write( sens, sizeof(sens) ); // передали в эфир
096 
097}//--(end main loop )--
098 
099// функция тревоги. Пищим, моргаем
100void alarm() {
101analogWrite(5, 20); // значение должно находится между 0 и 255
102// поэкспериментируйте для получения хорошего тона
103digitalWrite(REDpin, HIGH);
104delay(200); // пауза delayms мс
105analogWrite(5, 0); // 0 - выключаем пьезо
106digitalWrite(REDpin, LOW);
107delay(200); // пауза delayms мс
108}

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

01/*- WHAT IT DOES: Receives data from another transceiver with
022 Analog values from a Joystick
03Displays received values on Serial Monitor
041 - GND
052 - VCC 3.3V !!! NOT 5V
063 - CE to Arduino pin 9
074 - CSN to Arduino pin 10
085 - SCK to Arduino pin 13
096 - MOSI to Arduino pin 11
107 - MISO to Arduino pin 12
118 - UNUSED
12/*-----( Import needed libraries )-----*/
13#include
14#include
15#include
16/*-----( Declare Constants and Pin Numbers )-----*/
17#define CE_PIN 9
18#define CSN_PIN 10
19// NOTE: the "LL" at the end of the constant is "LongLong" type
20const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe
21/*-----( Declare objects )-----*/
22RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
23/*-----( Declare Variables )-----*/
24//int joystick[2]; // 2 element array holding Joystick readings
25int hall[2]; // массив для данных датчика
26void setup() /****** SETUP: RUNS ONCE ******/
27{
28Serial.begin(9600);
29delay(1000);
30Serial.println("Nrf24L01 Receiver Starting");
31radio.begin();
32radio.setDataRate(RF24_250KBPS); // Скорость передачи - три строки от Осипова
33radio.setChannel(100); // Номер канала от 0 до 127
34radio.setRetries(15,15); // Кол-во попыток и время между попытками
35 
36radio.openReadingPipe(1,pipe);
37radio.startListening();;
38}//--(end setup )---
39void loop() /****** LOOP: RUNS CONSTANTLY ******/
40{
41if ( radio.available() )
42{ // Read the data payload until we've received everything
43bool done = false;
44while (!done)
45{ // Fetch the data payload
46done = radio.read( hall, sizeof(hall) );
47Serial.print("Hall = ");
48Serial.print(hall[0]);
49Serial.print(" ");
50Serial.println(hall[1]);
51// Serial.print(" Y = ");
52// Serial.println(joystick[1]);
53}
54}
55else
56{
57// Serial.println("No radio available");
58}
59}//--(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

 в скетче

1#include
2#include
3#include

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

1#include <SPI.h>
2#include <nRF24L01.h>
3#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 пишет:

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

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