Почти умный дом [сигнализация]
- Войдите на сайт для отправки комментариев
Доброго дня, комрады.
За неимением бложиков и прочих не очень нужных вещей, в этой теме я буду рассказывать о проекте, который я ласково называю "Почти умный дом". Почему "почти" ? Потому что, мне кажется, что именно "Умный дом" - это удел коммерческих реализаций с профессиональными инженерами и программистами, а я пытаюсь, в меру своего интереса, изобразить нечто похожее.
Стремясь к максимальному удешевлению и ничем не ограниченный во времени, я решил сделать следующую систему.
Краткое описание: Комплекс датчиков, объединенных платформой arduino с подключением к компьютеру.
Особенности: смс оповещения при определенных событиях, запись в sql базу и использование (в моем случае) ubuntu 10.04
Подробно: 1. Датчик утечки воды. Вдохновлен был идеей http://habrahabr.ru/company/masterkit/blog/122984/
2. Датчик открытия двери на основе геркона. После открытия необходима авторизация через iButton протокол (домофонным ключом)
3... и любой другой датчик, будь то PIR датчик движения, фотодатчик и др
Конфигурация компьютера: ПК, на базе ubuntu 10.04 с подключенным по USB телефоном (/dev/ACM0). По usb подключен adruino как /dev/ttyUSB0. Разводка датчиков по квартире осуществляется с помощью витой пары.
идеи "чего бы добавить еще" приветствуются!
В этом посте будет принципиальная схема.
предварительный вариант:
Код arduino
В этом посте будет лежать актуальный код для arduino, и краткое описание датчиков, обрабатываемых устройством.
Код обрабатывает открытие двери и датчик воды.
#include <OneWire.h>
#include "pitches.h"
const
byte
greenLed = 10;
//зеленая лампочка
const
byte
redLed = 11;
//красная лампочка
const
byte
gerkonPin = 8;
//gerkon
const
byte
iButtonPin = 12;
//пин для ibutton
const
byte
tonePin = 7;
// пин для пищалки
const
byte
waterPin = 9;
// пин датчика воды
const
byte
alarmTime = 15;
// время, чтобы поднести ключ при разблокировке
const
byte
startTime = 10;
// время на закрытие двери при постановке на сигнализацию
OneWire ds(iButtonPin);
//ibutton
byte
code1[5] = {0x01, 0x58, 0x3E, 0xD8, 0x11};
//первый ключ
byte
code2[5] = {0x01, 0x90, 0xBA, 0xAB, 0x00};
// второй ключ
boolean waterAlarmed = 0;
//флаг сработавшего оповещения о воде
boolean alarmState = 0;
//флаг работающей сигнализации
boolean gerkonState = 0;
//первично закрытая дверь (1 - закрыто, 0 - открыто), пока на кнопке.
boolean Hacked = 0;
// стандартные коды: 1- включение, 2- выключение, 3- тревога
void
setup()
{
Serial.begin(9600);
delay(2000);
//задержка включения
pinMode(greenLed, OUTPUT);
//задаем режим работы пинов
pinMode(redLed, OUTPUT);
pinMode(waterPin, INPUT);
pinMode(gerkonPin, INPUT);
Notify(98);
// оповещение о включении ардуино (напр. после перезагрузки)
}
void
loop()
{
byte
returnedValue = 0;
if
(alarmState==0) {
//Сигнализация выключена, ждем пока поднесут ключ для ВКЛЮЧЕНИЯ
returnedValue = findKey();
if
(returnedValue == 1) {
// нашли известный ключ
guardON();
//вкл статус сигнализации
}
}
if
(alarmState==1) {
// если включена сигнализация, то
gerkonState = digitalRead(gerkonPin);
//смотрим геркон
//Serial.println(gerkonState, HEX);
if
(gerkonState == 1 && Hacked != 1) {
//открылась дверь и квартира не взломана ;)
Notify(1);
// сообщаем компьютеру об открытии двери
alarmON();
//включаем сигналку
}
returnedValue = findKey();
//нужно выключить изнутри квартиры
if
(returnedValue == 1) {
// нашли известный ключ и
alarmState=0;
guardOFF();
}
}
returnedValue = 0;
//обнуляем для обработки датчиков воды
//returnedValue = checkWater();
//if (returnedValue==1) { // запускаем оповещение о срабатывании датчика воды
// Notify(10); //сообщаем о срабатывании датчика воды
//}
delay (500);
}
int
checkWater()
//функция проверки датчика воды
{
int
WsensorState = analogRead(waterPin);
//Serial.println(WsensorState);
if
(WsensorState == 1 && waterAlarmed == 0){
waterAlarmed =1;
return
1;
}
return
0;
}
int
findKey()
// функция поиска ключа
{
byte
i;
byte
addr[5];
byte
checkOK = 0;
//счетчик совпадений массива с эталоном
//Serial.println("searching key...");
if
( !ds.search(addr)) {
// тут надо сделать нормально сделатЬ!!!
ds.reset_search();
for
( i = 0; i < 5; i++) {
// КРИВОКОД
if
(addr[i]==code1[i] || addr[i]==code2[i]) {
checkOK++;
}
}
if
(checkOK == 5 )
return
1;
}
return
0;
}
void
guardON()
// выполнение действие при на сигнализацию
{
int
j;
alarmState=1;
//включаем статус сигнализации
guardSound(1);
//бибикаем
for
(j=0; j < startTime; j++) {
guardBlink(1);
//моргаем лампочками и ждем время для закрытия двери
}
Notify(0);
}
void
guardOFF()
// выполнение действие при снятии с сигнализации
{
alarmState=0;
// выключаем статус сигнализации
Hacked = 0;
// отменям статус "взломано"
digitalWrite(greenLed, LOW);
guardSound(2);
//бибикаем
guardBlink(2);
//моргаем лампочками
Notify(3);
}
int
alarmON()
// выполнение действий при срабатывании сигнализации
{
int
checkcount=0;
while
(checkcount < alarmTime) {
// даем alarmTime секунд для поднесения ключа
int
alarmCancel = findKey();
//ищем ключик
if
(alarmCancel == 1) {
// нашли ключ
guardOFF();
//отключаем сигналку,
break
;
// выходим из цикла
}
checkcount++;
guardBlink(3);
//пищим о том, что ищем ключ
guardSound(3);
//светим о том, что ищем ключ
}
if
(checkcount==alarmTime) {
// если не нашли, то включаем оповещение
Notify(2);
guardBlink(4);
//пищим о том, что УСЁ ПРОПАЛО
guardSound(4);
//светим о том, что УСЁ ПРОПАЛО
Hacked = 1;
}
}
int
guardBlink (
int
x)
//функция светового оповещения
{
if
(x==1) {
// первое ожидание для закрытия двери.
digitalWrite(redLed, HIGH);
digitalWrite(greenLed, LOW);
delay(500);
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH);
delay(500);
}
if
(x==2) {
// выключаем сигнализацию и диоды
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
}
if
(x==3) {
// во время ожидания ключа при открытой двери
digitalWrite(redLed, HIGH);
delay (250);
digitalWrite(redLed, LOW);
delay (250);
}
if
(x==4) {
// просрочено, ахтунг
digitalWrite(redLed, HIGH);
}
}
int
guardSound (
int
x)
//функция звукового оповещения
{
if
(x==1) {
int
melody[] = {
// музыка при включении сигнализацию
NOTE_G3, NOTE_G3, NOTE_G3
};
int
noteDurations[] = {
4,4,4
};
for
(
int
thisNote = 0; thisNote < 3; thisNote++) {
int
noteDuration = 1000/noteDurations[thisNote];
tone(tonePin, melody[thisNote],noteDuration);
int
pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(tonePin);
}
}
if
(x==2) {
// выключаем сигнализацию
int
melody[] = {
NOTE_C2, NOTE_G1,NOTE_G2, NOTE_A1, NOTE_G1,0, NOTE_B2, NOTE_C3
};
int
noteDurations[] = {
4, 8, 8, 4,4,4,4,4
};
for
(
int
thisNote = 0; thisNote < 8; thisNote++) {
int
noteDuration = 1000/noteDurations[thisNote];
tone(tonePin, melody[thisNote],noteDuration);
int
pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(tonePin);
}
}
if
(x==3) {
//тон ожидания ключа
tone(tonePin,NOTE_C4, 100);
}
if
(x==4) {
//тон просроченного ключа
tone(tonePin,NOTE_E4, 500);
}
}
int
Notify(
int
x)
//функция оповещения в последователньый порт
{
if
(x==0) {
// оповещение о постановке на сигнализацию
Serial.println(
"0x00"
);
}
if
(x==1) {
// оповещение о открытии двери
Serial.println(
"0x01"
);
}
if
(x==2) {
// оповещение о взломе квартиры!
Serial.println(
"0x02"
);
}
if
(x==3) {
// оповещение о выключении сигнализации
Serial.println(
"0x03"
);
}
if
(x==98) {
// оповещение о включении ardunio
Serial.println(
"9x98"
);
}
if
(x==99) {
// оповещение о ОШИБКЕ
Serial.println(
"9x99"
);
}
}
Тут я опишу фичу, которую решил добавить чуть позже. Это контроль напряжения в сети 220В.
Нашел в барахле опторазвязку с маркировкой L 00039 817A, и планирую применить его к своборному пину. Схема и фотки будут позже.
Ну и собственно тут будет сам код программы, которая крутится на компьютере и слушает ком-порт и выполняет команды.
После некоторых раздумий я решил сделать скрипт на питоне.
Идея такова, что он будет перезапускаться (допустим каждые полчаса) без перезагрузки МК. Шанс, что что-то произойдет во время перезапуска ничтожно мал. Это нужно для проверки подключения ардуино (т.к. когда я открываю и слушаю её, то даже если она отваливается, что скрипт все равно продолжает слушать)
Структура mysql:
база smart-house, таблица sensors, логин smart, пароль smart. В таблице sensors 4 поля: id (инкрементный), date (формат DATETIME), sensor (TEXT), stat (TEXT).
Позже можно отдельно реализовать таблицу сенсоров, чтобы выбирать из них.
код на питоне совсем прост (подсветка для питона не работает) :)
#!/usr/bin/python
#coding=UTF-8
import serial, os, MySQLdb,
time
#нужные компоненты
devdb =
'/dev/ttyUSB0'
,
'/dev/ttyUSB1'
#возможные варианты подключения ардуино
error = 0 #количество ошибок обращения к устройствам (поиск ардуины)
debugMode = 0 #режим 0 - обычный, 1 - подробный (подробное оповещение по смс), хз зачем надо.
def action(code): #запись в базу данных sql
print code
db = MySQLdb.connect(
"localhost"
,
"smart"
,
"smart"
,
"smart-house"
)
if
code==
'9x98'
:
db.query(
"insert into sensors (date,sensor,state)values (now(),'Arduino','Arduino ON')"
)
db.close()
elif code==
'0x00'
:
db.query(
"insert into sensors (date,sensor,state)values (now(),'Door sensor','Door guard: ON')"
)
db.close()
elif code==
'0x01'
:
db.query(
"insert into sensors (date,sensor,state)values (now(),'Door sensor','Door opened')"
)
db.close()
elif code==
'0x02'
:
db.query(
"insert into sensors (date,sensor,state)values (now(),'Door sensor','DOOR ALARM')"
)
db.close()
elif code==
'0x03'
:
db.query(
"insert into sensors (date,sensor,state)values (now(),'Door sensor','Door guard: OFF')"
)
db.close()
elif code==
'1x10'
:
db.query(
"insert into sensors (date,sensor,state)values (now(),'Water sensor','WATER ALARM')"
)
db.close()
elif code==
'9x99'
:
db.query(
"insert into sensors (date,sensor,state)values (now(),'Arduino','No connection to Arduino')"
)
db.close()
else
:
db.close()
base = { #библиотека соответствий код-действие. формат
'BaseCode'
:
'BaseAction'
,
'0x00'
:
''
, # постановка на сигнализацию
'0x01'
:
''
, # открытие двери
'0x02'
:
'/home/bakemono/Dropbox/Scripts/sms/arduino/arduino_alarm_door.sh'
, # оповещение о взломе по смс
'0x03'
:
''
, # отключение сигнализации
'0x04'
:
''
, # свободно
'0x05'
:
''
, # свободно
'1x10'
:
'/home/bakemono/Dropbox/Scripts/sms/arduino/arduino_alarm_water.sh'
,# оповещение по смс о затоплении)
'9x98'
:
''
, # включение ардуино
'9x99'
:
'/home/bakemono/Dropbox/Scripts/sms/arduino/arduino_not_found.sh'
, # ошибка, ардуино не обранужена
}
debugBase = { #библиотека для подробного оповещения
'0x00'
:
''
, # постановка на сигнализацию
'0x01'
:
''
, # открытие двери
'0x02'
:
'/home/bakemono/Dropbox/Scripts/sms/arduino/arduino_alarm_door.sh'
, # оповещение о взломе по смс
'0x03'
:
'/home/bakemono/Dropbox/Scripts/sms/arduino/arduino_guardOFF_door.sh'
, # отключение сигнализации
'0x04'
:
''
, # свободно
'0x05'
:
''
, # свободно
'1x10'
:
'/home/bakemono/Dropbox/Scripts/sms/arduino/arduino_alarm_water.sh'
,# оповещение по смс о затоплении)
'9x98'
:
''
, # включение ардуино
'9x99'
:
'/home/bakemono/Dropbox/Scripts/sms/arduino/arduino_not_found.sh'
, # ошибка, ардуино не обранужена
}
for
device in devdb: #подцепляемся по очереди списка devdb (вверху)
try
:
DevCheck = os.path.exists(device) #(проверяем наличие устройства, чтобы в ексепшн не валиться)
if
DevCheck == True:
print
'work with '
, device
ser = serial.Serial(device, 9600) #открываем порт
while
1:
BaseCode = ser.readline().strip()
BaseAction = base.get(BaseCode) # получаем в переменную BaseAction значение из библиотеки base в соответствии с кодом BaseCode
action(BaseCode) # вызываем функцию записи в sql
if
debugMode == 0: #работаем в зависимости от режима оповещения
BaseAction = base.get(BaseCode) #обычной оповещение
#os.system(BaseAction)
elif debugMode == 1: #подробное оповещение
BaseAction = debugBase.get(BaseCode)
#os.system(BaseAction)
except:
pass
#action('9x99')
#error = error + 1
#time.sleep(5)
#os.system('9x99')
записи в БД выглядят так
Датчики
1. Датчик открытия двери
На данный момент, в черновой спецификации используются следующие провода:
1 - земля
2 - +5В
3 - красный светодиод
4 - зеленый светодиод
5 - пищалка
6 - устройство чтения iButton
7 - собственно датчик открытия двери (геркон)
8 - пока свободно
Отличительная особенность: используется компьютерная розетка RJ-45
[обновлено] Обновил вариант считывающего устройства ля домофонного ключа. Такой пока и прицеплю себе. В левом углу проделаны отверстия, динамик под ними скрыт.
2 светодиода, пищалка и читалка домофонных ключей. Провод от датчика двери (геркона) заходит сверху.
Для разводки внутри розетки использовались выводы самой розетки (для соединения по витой паре)
2. Датчик воды
Опять же в целях удешевления всего вышеизложенного, было принятно решение использовать датчик на основе бутылочной крыжки и двух параллельных медных проводов на расстоянии около 1мм и сопротивления (уточню) 50 КОм
По деньгам что вышло:
1200р - комплект ардуино на ebay (платформа, дислпей, куча проводов, резисторы кнопычки и прочая мелочь
400р - кнопка (читалка) iButton
Розетка, витая пара, и прочая мелочь досталась бесплатно. частично с работы, частично нашел еще где-то :)
возможность сброса на USB0 - просто при работе с портом, попытайся подкючиться, если вернет true- все ОК, если false - подключайся к след. порту, делая это в цикле. выход из цикла при успешном подключении (ключевое слово break; - делаешь в if-условии, типа if(connect(blabla)==true) {break;}, иначе цикл идет дальше.
вот такую идею тебе подкинул)
обращайся в скайп)
привет) я занимался похожим проектом, но за неимением средств приостановил его) могу добавить, что прогу на ПК для слушания ком порта удобнее написать на шарпе, там не надо использовать эти замысловатые WinAPI функции. Вся инфа на MSDN по тегам SerialPort
madguitar уточню, что софт под виндовс пока не планировал делать
тогда на питоне) там вообще порт как файл открыл и читай-пиши)
http://robocraft.ru/blog/algorithm/208.html например вот так
Не совсем уверен что система сигнализации это "умный дом", имхо "умный дом" это всетаки централизованное управление в доме чем-то. Тоесть если при срабатывание датчика воды пищит - это сигнализация, если перекрывает воду - это умный дом.
Что происходит при прикладывании таблетки? Может на электорнике съэкономить, (Вместо использования ардуины - используй только контроллер с минимумом обвязки, если планируется подключение к компу, то подумай RF232 самая известная мс преобразователь, но не самая дешевая) и подключить электромеханический замок (типа такого, можно найти и дешевле: www.trascon.ru/index.php)?
Также совсем не сложно добавить управление розетками и светом, обычно делая умный дом начинают именно с этого.
Ну и желательно следить за напряжением сети и потребляемым током.
Mogalkov
Соглашусь, да. умный дом - это скорее свет и прочие упраялемые устройства.
Я же решил начать с сигнализации, а "умный дом" - это, скорее для меня идеалогия автоматизации и компьютеризации, если можно так выразиться.
Да и делаю я это не потому, что боюсь, что меня ограбят, а потому что возможность такая есть. ДА и просто круто это) Насчет управления светом и розетками я тоже думал, есть некоторые мысли...
Mogalkov
Соглашусь, да. умный дом - это скорее свет и прочие упраялемые устройства.
Я же решил начать с сигнализации, а "умный дом" - это, скорее для меня идеалогия автоматизации и компьютеризации, если можно так выразиться.
Да и делаю я это не потому, что боюсь, что меня ограбят, а потому что возможность такая есть. ДА и просто круто это) Насчет управления светом и розетками я тоже думал, есть некоторые мысли...
Понятное дело что делаешь не из страха что ограбят а ради прикола, тот кто боится что ограбят ставит сигнализацию с контролем в милиции и тому подобное. Замок я указал потому что тоже прикольно, не ключ крутишь а таблетку прикладываешь и замок открывается (подал на замок 12в и он открылся, в ардуине это либо через реле либо через транзисторный ключ с выхода, HIGH открыт). А электромагнитные замки мне не нравятся, электричество отрубили и дверь на распашку, электричество жрет постоянно. А вообще имхо самая большая проблемма в подобных решениях - это связь, самое простое - провода, но их прятать надо, либо в короб либо стену штробить.
А электромагнитные замки мне не нравятся, электричество отрубили и дверь на распашку, электричество жрет постоянно.
Для этого есть електромеханические замки и источники резервногопитания ихмо такое оборудование питается как минимум 12в, а замок это защелка ппричем их несколько вариантов и запасной как правило это обычный ключь который открывает эту защелку.
но мне кажется смысл есть делать на Proximy Frid картах от СКУД ( система управления доступом)
ибо нет возможности откопировать ключь как это возможно сделать на далласах (таблетках)
*удалено*
Вообщем потихоньку продвигаемся. Мысли чего бы еще прикрутить приветствуются
Появилась идея - сделать чайник с веб интерфейсом ( в котором выбривается температура нагрева) :)
*удалено*
Вообщем потихоньку продвигаемся. Мысли чего бы еще прикрутить приветствуются
Появилась идея - сделать чайник с веб интерфейсом ( в котором выбривается температура нагрева) :)
А еще неплохо чтобы он сам наполнялся (можно использовать электрически управляемый кран или насос, за уровнем воды вполне может следить поплавок). Сам наливал воду в стакан (насос и пара трубок, или мощьная серва наклоняющая чайник). Сам кидал заварку и сахар, можно использовать спиральную подачу как в торговых автоматах. Сам все это привозил (пара моторчиков, датчики препятствия, gps модуль). Нехилый чайничек получается, но в принципе все это вполне реализуемо.
может с чегонибудь по просче начать
Товарищи !
Нужна некоторая консультация по следущему вопросу. Выше я написал, что хочу сделать контроль 220В напряжения в домашней электросети. Для этого я нашел опторазвязку 817A (даташит http://octopart.com/h11a817a-fairchild+semiconductor-704481 а именно тут http://datasheet.octopart.com/H11A817A-Fairchild-datasheet-4722.pdf )
Идея была такова: на диодный мост 2KBP06M (даташит http://www.datasheetcatalog.org/datasheets/150/490075_DS.pdf через резистор 50 кОм поступает питание по 220В. оттуда напрямую подключена опторазвязка 817А. Вообщем, когда я подаю напряжение, на свободных концах опторазвязки возникает сопротивление в 60 Ом, но при этом реально быстро нагревается резистор. Больше 30 сек я не держал включенным, но и за это время он успел достаточно нагреться.
(при необходимости, могу нарисовать схему, но под рукой нет редактора, так что только в гимпе)
Вопрос. Т.к. я планирую эту конструкцию держать 24ч включеной, подскажите пожалуйста что можно поменять в данной схеме для контроля напряжения в сети. по возможности с имеющимися деталями)
Спасибо
думаю, что стоит изучить все даташиты на конкретный резистрор. и собрать комбо (последовательно поставить)из самых мощных, которые найдутся.
последовательно - один сгорит, ток не пойдет, надежнее.
а вообще 220 страшная штука, лучше не шутить)
Чтобы увеличивать мощьность рассеивания резистеров - их ставят паралельно, тоесть к примеру два 5Вт резистера по 100Ком если поставить паралельно будут работать как 1резистор 10Вт 50Ком.
Диодный мост тут нафиг не сдался, тебе достаточно одного диода включенного в обраттку, в том же даташите у модели
H11AA814 он уже стоит, к 817 ты можешь просто выпрямительный диод прикрутить таким же образом. И откуда взялось 50К сопративление?
Для контроля наличия электро питания лучше использовать безконтактный способ на основе AC Current Sensor Transformer. На ebay такой сенсор обойдется рублей в 400, к тому же есть готовые шелды под него и реализованные проекты: openenergymonitor.org www.desert-home.com/p/test-html-code.html .
Я не претендую на специалиста, но тоже планирую такую систему в своей новой квартире, так вот что я нарыл:
1. промышленность выпускает системы обнаружения утечек (нептун, невод, гидролок, автостораж и множество иностранных) которые стыкуются почти стандартно;
2. есть системы регулирования тепла (управляемые вентили-регуляторы температуры на батареи-радиаторы с приводом);
3. датчики обнаружения, присутствия, нажатия, и т.д,
В общем случае все давно решено, если не строить самоделку в смысле стратегии и протоколов - то есть технология Z-Wave (посмотрите сервер Vera - чудная штука) и более старая американская технология Х10.
В любом случае - на все это выпускаются стандартные модули под ДИН рейку и монтируемые в корпус выкючателей и розеток, а так же множество вариантов исполнения. Если Вы сами все будете делать на Ardu, то тут нет поддержки, нет эстетики, ну и конечно если что-то с Вами случитя (не дай бог - а у меня так было ) и в это время заглючит Ваш продукт - то родные останутся без воды, еды и т.д.) - вот собственно и все что я хотел сказать.
Олег.
приветствую товарищи ... позвольте присоединиться к вашей банде - сам страдаю идеей почти умного дома ...
перечитал гору всякой литературы, с ибея уже едут микроконтроллеры, жк-панелька, rf-трансмиттеры и прочая мелочь - как доедут, перейду к практической части ...
по сути проекта:
1. контолировать надо не напряжение, а ток. для этого можно (нужно) использовать датчик холла: ru.wikipedia.org/wiki/%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82_%D0%A5%D0%BE%D0%BB%D0%BB%D0%B0
с ардуиной дружит на ура.
2. не совсем понял, зачем тут нужен комп? если задача писать лог - можно на сд-карту писать текстовик и скриптом его читать. ардуина с сд-картой дружит отлично.
3. у себя планирую пока следующее: планируется следующая система: а) ардуино-мама - ничего не измеряет, просто ведет лог и опрашивает ардуино-детей. опрашивает по радиоканалу, тк с проводами уже пролет. б) есть ардуино дети (по количеству комнат + ванная + коридор): комнаты - датчик влажности, датчик температуры, шаговые двигатели управления освещением, датчики открытия окон; ванная/кухня - датчики протечки, эл.м. клапаны, нагреватель воды; корридор - управление освещением по всему периметру (типа выключить свет везде по уходу), плюс жк панель для графического отображения ситуации везде и тач-панель для команд. ардуино-дети разговаривают по: с мамой по радиоканалу, внутри комнаты - есть еще ик-приемник, который с отдельного пульта принимает команды.
4. может закручу еще веб-байду какую-нибудь, но пока еще не решил окончательно.
я снова вернулся.
Много чего было за это время :)
Все предыдущие желающие сотрудничества куда-то потерялись :(
Было желание переписать весь код, кучу всего оптимизировать, сделать консоль управления. Но то одно, то другое... то с машиной провозился... в общем я снова в деле.
maus как приедут МК пиши, может чего придумаем.
позвольте полюбопытствовать, тов. maus, вы откуда ?
bakemono я не пропал у меня тоже делов хватает но потихоньку стараюсь мутить есть два мк нано v4 , Mega .
еще моник 2х строчный на 16 символов.
еще фото транзисторы ик диоды и датчики обьема от Охранной системы.
источник бесперебойного питания на 12 вольт.
мы из Киева. Позавчера пришла первая партия с ибея, но пока только хвостики к батарейкам на 9в. Жду, пока придет все остальное. А там и ардуина, и меги (пару штук отдельно), и жк-шка и ик датчики/приемники ... одним словом много добра всякого ...
Доброго времени суток! Относительно давно работаю в сфере охранно-пожарных сигнализаций. Начинал с монтажа и обслуживания, сейчас руковожу техническим отделом одного ЧОПа. Последнее время заинтересовался следующей идеей, на мой взгляд весьма перспективной: создание на базе того же Ардуина (с Ethernet) приемо-контрольного охранного прибора...
Необходим следующий функционал: - постановка/снятие с охраны с помощью ibutton ключа, - контроль в охраняемое время состояния охранных извещателей (состояния подключаемой цепи), - передача информациии TCP\IP протоколом через интернет на статик IP сервера. Ну и без серверно ПО тут тоже скорее всего не обойтись...
Что скажете, насколько сложно эту идею реализовать? )
Доброго времени суток! Относительно давно работаю в сфере охранно-пожарных сигнализаций. Начинал с монтажа и обслуживания, сейчас руковожу техническим отделом одного ЧОПа. Последнее время заинтересовался следующей идеей, на мой взгляд весьма перспективной: создание на базе того же Ардуина (с Ethernet) приемо-контрольного охранного прибора...
Необходим следующий функционал: - постановка/снятие с охраны с помощью ibutton ключа, - контроль в охраняемое время состояния охранных извещателей (состояния подключаемой цепи), - передача информациии TCP\IP протоколом через интернет на статик IP сервера. Ну и без серверно ПО тут тоже скорее всего не обойтись...
Что скажете, насколько сложно эту идею реализовать? )
Руководители технического отдела, относительно давно работающие в сфере охранно-пожарных сигнализаций. Должны сами определять сложность данного проекта. Так как сложность зависеть от знаний.. То что одному легко, другому невозможно. Точно не знаю, но думаю есть уже готовые решение этого проекта.
mosknikita, посмотрите пожалуйста тут: ajc.su/zhelezo/signalizaciya-v-pomeshhenie-na-arduino/
Необходим следующий функционал: - постановка/снятие с охраны с помощью ibutton ключа, - контроль в охраняемое время состояния охранных извещателей (состояния подключаемой цепи), - передача информациии TCP\IP протоколом через интернет на статик IP сервера. Ну и без серверно ПО тут тоже скорее всего не обойтись...
Что скажете, насколько сложно эту идею реализовать? )
Технически - возможно все. Были бы бюджеты :). Квалифицированный труд - стоит дорого. А вот целесообразность - вызывает сомнение (если это не просто "хобби для души"). Если это "разовый проект" - дешевле, все-таки, искать что-то готовое.
Привет, меня зовут Константин.
Занимаюсь подобной разработкой, есть деньги на развитие.
Свяжись со мной по адресу bigsensinc@gmail.com.
Skype: hermeswallet
Доброго времени суток! Относительно давно работаю в сфере охранно-пожарных сигнализаций. Начинал с монтажа и обслуживания, сейчас руковожу техническим отделом одного ЧОПа. Последнее время заинтересовался следующей идеей, на мой взгляд весьма перспективной: создание на базе того же Ардуина (с Ethernet) приемо-контрольного охранного прибора...
ха-ха, может вы его еще и сертифицируете :) во конкуренты животы понадрывают:)))
ха-ха, может вы его еще и сертифицируете :) во конкуренты животы понадрывают:)))
Вот это провалы во времени, посту сто лет в обед.
Перестаньте употреблять валерьянку!
Прошу прощения если не в тему, но нужного для себя не нашёл....... Пожайлуста помогите в разработке и написание программы, хочу собрать gsm сигнализацию на Ардуино Мега 2560 для гаража. Чтобы она срабатывала на открытие ворот (герконовый датчик) вторжение в гараж (датчик движения) и запись тревожных событий на видео камеру, и отправкой видео/фото на эл. почту и отправкой sms уведомлений о тревогах. Не мешало бы ещё датчик задымления и пожара. Да и чуть не забыл про ключь/таблетку которой буду снимать и ставить на охрану.
В наличие есть контролёр Ардуино Мега 2560, куча разных датчиков движения от профессиональных охранных сигнализаций, видеокамера видеонаблюдения, остальное смогу подкупить....
Пожайлуста помогите в разработке и написание программы
То есть, разработать и написать программу за Вас? Тогда Вам сюда - Ищу исполнителя (напишут за вознаграждение)
скетч частично работает (вывод в компорт о запуске) и все ни диоды ни чтения ключа ни сирена
и да как это ключь имеет такой длины значения
1
OneWire ds(iButtonPin);
//ibutton
2
byte
code1[5] = {0x01, 0x58, 0x3E, 0xD8, 0x11};
//первый ключ
3
byte
code2[5] = {0x01, 0x90, 0xBA, 0xAB, 0x00};
// второй ключ
1
= { 0x01, 0xCA, 0x4E, 0xA5, 0x00, 0x00, 0x00, 0x0E };
не 5 байт а 8
c трудом но сделал рабочим код
001
char
* RUS(
char
* StrIn){
char
* StrOut=StrIn; uint8_t i[4]={0,0,StrIn[0],StrIn[1]};
while
(i[2]>0&&i[0]<255){
if
(i[2]==0xd0&&i[3]>0x8F&&i[3]<0xC0){StrOut[i[1]]=i[3]+0x30;i[0]++;}
else
if
(i[2]==0xd0&&i[3]==0x81){StrOut[i[1]]=0xA8;i[0]++;}
else
if
(i[2]==0xd1&&i[3]>0x7F&&i[3]<0x90){StrOut[i[1]]=i[3]+0x70;i[0]++;}
else
if
(i[2]==0xd1&&i[3]==0x91){StrOut[i[1]]=0xB8;i[0]++;}
else
{StrOut[i[1]]=i[2];} i[0]++; i[1]++; i[2]=StrIn[i[0]]; i[3]=StrIn[i[0]+1];} StrOut[i[1]]=
'\0'
;
return
StrOut;}
002
#include <OneWire.h>
003
#include "pitches.h"
004
const
byte
greenLed = 10;
//зеленая лампочка
005
const
byte
redLed = 11;
//красная лампочка
006
const
byte
gerkonPin = 8;
//gerkon
007
const
byte
iButtonPin = 12;
//пин для ibutton
008
const
byte
tonePin = 7;
// пин для пищалки
009
const
byte
waterPin = 9;
// пин датчика воды
010
011
const
byte
alarmTime = 15;
// время, чтобы поднести ключ при разблокировке
012
const
byte
startTime = 10;
// время на закрытие двери при постановке на сигнализацию
013
014
OneWire ds(iButtonPin);
//ibutton
015
byte
code1[8] = {0x01, 0xF0, 0x30, 0xB5, 0x00, 0x00, 0x00, 0xDB};
//первый ключ
016
byte
code2[8] = {0x01, 0xCA, 0x4E, 0xA5, 0x00, 0x00, 0x00, 0x0E};
// второй ключ
017
018
boolean waterAlarmed = 0;
//флаг сработавшего оповещения о воде
019
boolean alarmState = 0;
//флаг работающей сигнализации
020
boolean gerkonState = 0;
//первично закрытая дверь (1 - закрыто, 0 - открыто), пока на кнопке.
021
boolean Hacked = 0;
022
// стандартные коды: 1- включение, 2- выключение, 3- тревога
023
void
setup
()
024
{
025
Serial
.begin(9600);
026
delay(2000);
//задержка включения
027
pinMode(greenLed, OUTPUT);
//задаем режим работы пинов
028
pinMode(redLed, OUTPUT);
029
pinMode(waterPin, INPUT);
030
pinMode(gerkonPin, INPUT);
031
Notify(98);
// оповещение о включении ардуино (напр. после перезагрузки)
032
}
033
void
loop
()
034
{
035
byte
returnedValue = 0;
036
if
(alarmState==0) {
//Сигнализация выключена, ждем пока поднесут ключ для ВКЛЮЧЕНИЯ
037
returnedValue = findKey();
038
if
(returnedValue == 1) {
// нашли известный ключ
039
guardON();
//вкл статус сигнализации
040
}
041
}
042
if
(alarmState==1) {
// если включена сигнализация, то
043
gerkonState = digitalRead(gerkonPin);
//смотрим геркон
044
// Serial.println(gerkonState, HEX);
045
if
(gerkonState == 1 && Hacked != 1) {
//открылась дверь и квартира не взломана ;)
046
Notify(1);
// сообщаем компьютеру об открытии двери
047
alarmON();
//включаем сигналку
048
}
049
returnedValue = findKey();
//нужно выключить изнутри квартиры
050
if
(returnedValue == 1) {
// нашли известный ключ и
051
alarmState=0;
052
guardOFF();
053
}
054
}
055
returnedValue = 0;
//обнуляем для обработки датчиков воды
056
//returnedValue = checkWater();
057
//if (returnedValue==1) { // запускаем оповещение о срабатывании датчика воды
058
// Notify(10); //сообщаем о срабатывании датчика воды
059
//}
060
delay (500);
061
}
062
int
checkWater()
//функция проверки датчика воды
063
{
064
int
WsensorState = analogRead(waterPin);
065
Serial
.println(WsensorState);
066
if
(WsensorState == 1 && waterAlarmed == 0){
067
waterAlarmed =1;
068
return
1;
069
}
070
return
0;
071
}
072
int
findKey()
// функция поиска ключа
073
{
074
byte
i;
075
byte
addr[8];
076
byte
checkOK = 0;
//счетчик совпадений массива с эталоном
077
// Serial.println("searching key...");
078
if
( !ds.search(addr)) {
// тут надо сделать нормально сделатЬ!!!
079
// Serial.println("No key connected..."); // сообщаем об этом
080
return
;
// и прерываем программу
081
082
for
(
int
i = 0; i < 8; i++)
083
ds.reset_search();
// сброс ключа
084
085
if
(addr[i]==code1[i] || addr[i]==code2[i]) {
086
checkOK++;
087
}
088
089
if
(checkOK == 5 )
090
return
1;
091
}
092
return
0;
093
}
094
void
guardON()
// выполнение действие при на сигнализацию
095
{
096
int
j;
097
alarmState=1;
//включаем статус сигнализации
098
guardSound(1);
//бибикаем
099
for
(j=0; j < startTime; j++) {
100
guardBlink(1);
//моргаем лампочками и ждем время для закрытия двери
101
}
102
Notify(0);
103
}
104
void
guardOFF()
// выполнение действие при снятии с сигнализации
105
{
106
alarmState=0;
// выключаем статус сигнализации
107
Hacked = 0;
// отменям статус "взломано"
108
digitalWrite(greenLed, LOW);
109
guardSound(2);
//бибикаем
110
guardBlink(2);
//моргаем лампочками
111
Notify(3);
112
}
113
int
alarmON()
// выполнение действий при срабатывании сигнализации
114
{
115
int
checkcount=0;
116
while
(checkcount < alarmTime) {
// даем alarmTime секунд для поднесения ключа
117
int
alarmCancel = findKey();
//ищем ключик
118
if
(alarmCancel == 1) {
// нашли ключ
119
guardOFF();
//отключаем сигналку,
120
break
;
// выходим из цикла
121
}
122
checkcount++;
123
guardBlink(3);
//пищим о том, что ищем ключ
124
guardSound(3);
//светим о том, что ищем ключ
125
}
126
if
(checkcount==alarmTime) {
// если не нашли, то включаем оповещение
127
Notify(2);
128
guardBlink(4);
//пищим о том, что УСЁ ПРОПАЛО
129
guardSound(4);
//светим о том, что УСЁ ПРОПАЛО
130
Hacked = 1;
131
}
132
}
133
int
guardBlink (
int
x)
//функция светового оповещения
134
{
135
if
(x==1) {
// первое ожидание для закрытия двери.
136
digitalWrite(redLed, HIGH);
137
digitalWrite(greenLed, LOW);
138
delay(500);
139
digitalWrite(redLed, LOW);
140
digitalWrite(greenLed, HIGH);
141
delay(500);
142
}
143
if
(x==2) {
// выключаем сигнализацию и диоды
144
digitalWrite(redLed, LOW);
145
digitalWrite(greenLed, LOW);
146
}
147
if
(x==3) {
// во время ожидания ключа при открытой двери
148
digitalWrite(redLed, HIGH);
149
delay (250);
150
digitalWrite(redLed, LOW);
151
delay (250);
152
}
153
if
(x==4) {
// просрочено, ахтунг
154
digitalWrite(redLed, HIGH);
155
}
156
}
157
int
guardSound (
int
x)
//функция звукового оповещения
158
{
159
if
(x==1) {
160
int
melody[] = {
// музыка при включении сигнализацию
161
NOTE_G3, NOTE_G3, NOTE_G3
162
};
163
int
noteDurations[] = {
164
4,4,4
165
};
166
for
(
int
thisNote = 0; thisNote < 3; thisNote++) {
167
int
noteDuration = 1000/noteDurations[thisNote];
168
tone(tonePin, melody[thisNote],noteDuration);
169
int
pauseBetweenNotes = noteDuration * 1.30;
170
delay(pauseBetweenNotes);
171
noTone(tonePin);
172
}
173
}
174
if
(x==2) {
// выключаем сигнализацию
175
int
melody[] = {
176
NOTE_C2, NOTE_G1,NOTE_G2, NOTE_A1, NOTE_G1,0, NOTE_B2, NOTE_C3
177
};
178
int
noteDurations[] = {
179
4, 8, 8, 4,4,4,4,4
180
};
181
for
(
int
thisNote = 0; thisNote < 8; thisNote++) {
182
int
noteDuration = 1000/noteDurations[thisNote];
183
tone(tonePin, melody[thisNote],noteDuration);
184
int
pauseBetweenNotes = noteDuration * 1.30;
185
delay(pauseBetweenNotes);
186
noTone(tonePin);
187
}
188
}
189
if
(x==3) {
//тон ожидания ключа
190
tone(tonePin,NOTE_C4, 100);
191
}
192
if
(x==4) {
//тон просроченного ключа
193
tone(tonePin,NOTE_E4, 500);
194
}
195
}
196
int
Notify(
int
x)
//функция оповещения в последователньый порт
197
{
198
if
(x==0) {
// оповещение о постановке на сигнализацию
199
Serial
.println(RUS(
"Сигнализация включена"
));
200
}
201
if
(x==1) {
// оповещение о открытии двери
202
Serial
.println(RUS(
"Дверь открыта"
));
203
}
204
if
(x==2) {
// оповещение о взломе квартиры!
205
Serial
.println(RUS(
"Тревога, проникновение"
));
206
}
207
if
(x==3) {
// оповещение о выключении сигнализации
208
Serial
.println(RUS(
"Сигнализация отключена"
));
209
}
210
if
(x==98) {
// оповещение о включении ardunio
211
Serial
.println(RUS(
"Arduino готово к работе"
));
212
}
213
if
(x==99) {
// оповещение о ОШИБКЕ
214
Serial
.println(RUS(
"Error"
));
215
}
216
}
доделал поиск ключа и сравнения
и изменил милодию сирены
001
char
* RUS(
char
* StrIn){
char
* StrOut=StrIn; uint8_t i[4]={0,0,StrIn[0],StrIn[1]};
while
(i[2]>0&&i[0]<255){
if
(i[2]==0xd0&&i[3]>0x8F&&i[3]<0xC0){StrOut[i[1]]=i[3]+0x30;i[0]++;}
else
if
(i[2]==0xd0&&i[3]==0x81){StrOut[i[1]]=0xA8;i[0]++;}
else
if
(i[2]==0xd1&&i[3]>0x7F&&i[3]<0x90){StrOut[i[1]]=i[3]+0x70;i[0]++;}
else
if
(i[2]==0xd1&&i[3]==0x91){StrOut[i[1]]=0xB8;i[0]++;}
else
{StrOut[i[1]]=i[2];} i[0]++; i[1]++; i[2]=StrIn[i[0]]; i[3]=StrIn[i[0]+1];} StrOut[i[1]]=
'\0'
;
return
StrOut;}
002
#include <OneWire.h>
003
#include "pitches.h"
004
const
byte
greenLed = 10;
//зеленая лампочка
005
const
byte
redLed = 11;
//красная лампочка
006
const
byte
gerkonPin = 8;
//gerkon
007
const
byte
iButtonPin = 12;
//пин для ibutton
008
const
byte
tonePin = 7;
// пин для пищалки
009
const
byte
waterPin = 9;
// пин датчика воды
010
011
const
byte
alarmTime = 3;
// время, чтобы поднести ключ при разблокировке
012
const
byte
startTime = 5;
// время на закрытие двери при постановке на сигнализацию
013
014
OneWire ds(iButtonPin);
//ibutton
015
byte
code1[8] = {0x01, 0x9F, 0xDC, 0x02, 0x00, 0x00, 0x96, 0x1C};
//первый ключ
016
017
018
boolean waterAlarmed = 0;
//флаг сработавшего оповещения о воде
019
boolean alarmState = 0;
//флаг работающей сигнализации
020
boolean gerkonState = 0;
//первично закрытая дверь (1 - закрыто, 0 - открыто), пока на кнопке.
021
boolean Hacked = 0;
022
// стандартные коды: 1- включение, 2- выключение, 3- тревога
023
void
setup
()
024
{
025
Serial
.begin(115200);
026
delay(2000);
//задержка включения
027
pinMode(greenLed, OUTPUT);
//задаем режим работы пинов
028
pinMode(redLed, OUTPUT);
029
pinMode(waterPin, INPUT);
030
pinMode(gerkonPin, INPUT);
031
Notify(98);
// оповещение о включении ардуино (напр. после перезагрузки)
032
}
033
void
loop
()
034
{
035
byte
returnedValue = 0;
036
if
(alarmState==0) {
//Сигнализация выключена, ждем пока поднесут ключ для ВКЛЮЧЕНИЯ
037
returnedValue = findKey();
038
if
(returnedValue == 1) {
// нашли известный ключ
039
guardON();
//вкл статус сигнализации
040
}
041
}
042
if
(alarmState==1) {
// если включена сигнализация, то
043
gerkonState = digitalRead(gerkonPin);
//смотрим геркон
044
// Serial.println(gerkonState, HEX);
045
if
(gerkonState == 1 && Hacked != 1) {
//открылась дверь и квартира не взломана ;)
046
Notify(1);
// сообщаем компьютеру об открытии двери
047
alarmON();
//включаем сигналку
048
}
049
returnedValue = findKey();
//нужно выключить изнутри квартиры
050
if
(returnedValue == 1) {
// нашли известный ключ и
051
alarmState=0;
052
guardOFF();
053
}
054
}
055
returnedValue = 0;
//обнуляем для обработки датчиков воды
056
//returnedValue = checkWater();
057
//if (returnedValue==1) { // запускаем оповещение о срабатывании датчика воды
058
// Notify(10); //сообщаем о срабатывании датчика воды
059
//}
060
delay (500);
061
}
062
int
checkWater()
//функция проверки датчика воды
063
{
064
int
WsensorState = analogRead(waterPin);
065
Serial
.println(WsensorState);
066
if
(WsensorState == 1 && waterAlarmed == 0){
067
waterAlarmed =1;
068
return
1;
069
}
070
return
0;
071
}
072
int
findKey()
// функция поиска ключа
073
074
075
076
{
077
byte
i;
078
byte
addr[8];
079
byte
checkOK = 0;
//счетчик совпадений массива с эталоном
080
//Serial.println("searching key...");
081
if
(!ds.search(addr)) {
// тут надо сделать нормально сделатЬ!!!
082
//Serial.println("No key connected..."); // сообщаем об этом
083
ds.reset_search();
084
delay(200);
085
return
;
// и прерываем программу
086
087
for
(
int
i = 0; i<8; i++)
088
Serial
.print(addr[i],HEX);
089
Serial
.print(
" "
);
090
}
091
Serial
.println(
"\n"
);
092
093
094
for
(
int
i=0; i<8; i++)
095
096
if
(addr[i]==code1[i]) {
097
checkOK++;
098
}
099
100
if
(checkOK == 8 ){
101
return
1;
102
}
103
return
0;
104
}
105
106
107
108
void
guardON()
// выполнение действие при на сигнализацию
109
{
110
int
j;
111
alarmState=1;
//включаем статус сигнализации
112
guardSound(1);
//бибикаем
113
for
(j=0; j < startTime; j++) {
114
guardBlink(1);
//моргаем лампочками и ждем время для закрытия двери
115
}
116
Notify(0);
117
}
118
void
guardOFF()
// выполнение действие при снятии с сигнализации
119
{
120
alarmState=0;
// выключаем статус сигнализации
121
Hacked = 0;
// отменям статус "взломано"
122
digitalWrite(greenLed, LOW);
123
guardSound(2);
//бибикаем
124
guardBlink(2);
//моргаем лампочками
125
Notify(3);
126
}
127
int
alarmON()
// выполнение действий при срабатывании сигнализации
128
{
129
int
checkcount=0;
130
while
(checkcount < alarmTime) {
// даем alarmTime секунд для поднесения ключа
131
int
alarmCancel = findKey();
//ищем ключик
132
if
(alarmCancel == 1) {
// нашли ключ
133
guardOFF();
//отключаем сигналку,
134
break
;
// выходим из цикла
135
}
136
checkcount++;
137
guardBlink(3);
//пищим о том, что ищем ключ
138
guardSound(3);
//светим о том, что ищем ключ
139
}
140
if
(checkcount==alarmTime) {
// если не нашли, то включаем оповещение
141
Notify(2);
142
guardBlink(4);
//пищим о том, что УСЁ ПРОПАЛО
143
guardSound(4);
//светим о том, что УСЁ ПРОПАЛО
144
Hacked = 1;
145
}
146
}
147
int
guardBlink (
int
x)
//функция светового оповещения
148
{
149
if
(x==1) {
// первое ожидание для закрытия двери.
150
digitalWrite(redLed, HIGH);
151
digitalWrite(greenLed, LOW);
152
delay(500);
153
digitalWrite(redLed, LOW);
154
digitalWrite(greenLed, HIGH);
155
delay(500);
156
}
157
if
(x==2) {
// выключаем сигнализацию и диоды
158
digitalWrite(redLed, LOW);
159
digitalWrite(greenLed, LOW);
160
}
161
if
(x==3) {
// во время ожидания ключа при открытой двери
162
digitalWrite(redLed, HIGH);
163
delay (250);
164
digitalWrite(redLed, LOW);
165
delay (250);
166
}
167
if
(x==4) {
// просрочено, ахтунг
168
digitalWrite(redLed, HIGH);
169
}
170
}
171
int
guardSound (
int
x)
//функция звукового оповещения
172
{
173
if
(x==1) {
174
int
melody[] = {
// музыка при включении сигнализацию
175
NOTE_G3, NOTE_G3, NOTE_G3
176
};
177
int
noteDurations[] = {
178
4,4,4
179
};
180
for
(
int
thisNote = 0; thisNote < 3; thisNote++) {
181
int
noteDuration = 1000/noteDurations[thisNote];
182
tone(tonePin, melody[thisNote],noteDuration);
183
int
pauseBetweenNotes = noteDuration * 1.30;
184
delay(pauseBetweenNotes);
185
noTone(tonePin);
186
}
187
}
188
if
(x==2) {
// выключаем сигнализацию
189
int
melody[] = {
190
NOTE_C2, NOTE_G1,NOTE_G2, NOTE_A1, NOTE_G1,0, NOTE_B2, NOTE_C3
191
};
192
int
noteDurations[] = {
193
4, 8, 8, 4,4,4,4,4
194
};
195
for
(
int
thisNote = 0; thisNote < 8; thisNote++) {
196
int
noteDuration = 1000/noteDurations[thisNote];
197
tone(tonePin, melody[thisNote],noteDuration);
198
int
pauseBetweenNotes = noteDuration * 1.30;
199
delay(pauseBetweenNotes);
200
noTone(tonePin);
201
}
202
}
203
if
(x==3) {
//тон ожидания ключа
204
tone(tonePin,NOTE_C4, 100);
205
}
206
if
(x==4) {
//тон просроченного ключа
207
tone(tonePin, 500);
//включаем на 500 Гц
208
delay(100);
//ждем 100 Мс
209
tone(tonePin, 1000);
//включаем на 1000 Гц
210
delay(100);
//ждем 100 Мс
211
}
212
}
213
int
Notify(
int
x)
//функция оповещения в последователньый порт
214
{
215
if
(x==0) {
// оповещение о постановке на сигнализацию
216
Serial
.println(RUS(
"Сигнализация включена"
));
217
}
218
if
(x==1) {
// оповещение о открытии двери
219
Serial
.println(RUS(
"Дверь открыта"
));
220
}
221
if
(x==2) {
// оповещение о взломе квартиры!
222
Serial
.println(RUS(
"Тревога, проникновение"
));
223
}
224
if
(x==3) {
// оповещение о выключении сигнализации
225
Serial
.println(RUS(
"Сигнализация отключена"
));
226
}
227
if
(x==98) {
// оповещение о включении ardunio
228
Serial
.println(RUS(
"Устройство готово к работе"
));
229
}
230
if
(x==99) {
// оповещение о ОШИБКЕ
231
Serial
.println(RUS(
"Ошибка"
));
232
}
233
}
Всем здравствуйте! Есть ли тут еще кто живой?
Я не силен в программировании, с ардуино имею дело от случая к случаю. Сломал голову уже, но ничего путевого не получается. Не могу реализовать взятие на охрану с открытой дверью. То есть дверь открыта, ставим на охрану, берётся и не орет. Потом дверь закрываем и при следующем открытии уже срабатывает тревога.