Магнитный замок
- Войдите на сайт для отправки комментариев
Чт, 11/05/2017 - 19:08
Добрый вечер ! подскажите как добавить пищалку как у домофона чтоб при открытии был сигнал на то время как будет открыта дверь. Спасибо.
// подключать считыватель + (МК) с пином 13 через резистор 4.7кОМ к нему же ( к пину дату считывателя) #include <OneWire.h> OneWire ds(10); void setup(void) { pinMode(13, OUTPUT); digitalWrite(13, HIGH); } void loop(void) { byte key[8] = {0x1, 0xCC, 0x1D, 0xF0, 0x9, 0x0, 0x0, 0xB0}; // ключ byte addr[8]; byte val = 0; if (ds.search(addr)) { for (byte i = 0; i < 8; i++) if (addr[i] == key[i]) val++; if (val == 8) { digitalWrite(13, LOW); delay(3000); // задержка digitalWrite(13, HIGH); } ds.reset_search(); } }
Каким образом у Вас определяется что дверь открыта? Или Вы имели в виду пока отключён электромагнит?
да, я имею введу пока отключен элмагнит чтоб был звук пишалки
и если возможно как добавить кнопку открытия двери из нутри ( извиняйте я только учусь буду благодарен)
да, я имею введу пока отключен элмагнит чтоб был звук пишалки
Ну тогда включать и выключать пищалку надо вместе с электромагнитом. Есть ещё нюанс - активная или пассивная пищалка. Активная сама пищит при подаче напряжения. Пассивной нужно подавать сигнал с определённой частотой. Кусок вашего кода (строки 21 -23) изменить так:
и если возможно как добавить кнопку открытия двери из нутри ( извиняйте я только учусь буду благодарен)
Как работать с кнопками уже много расписано и показано. Изучите для начала:
Тактовая кнопка
Работа с кнопками. В помощь новичку
класс титановый велосипед для тактовой кнопки
Кнопки, PWM, функции
Опрос кнопки добавить в строку 16. Или сделать через прерывание attachInterrupt().
А строку 13 надо бы вынести в setup().
пищалку плюс цепляю на выход элмагнита тоесть 13 пин минус на GND в итоге получается что пищалка постоянно пишит а при срабатывании ключа ( мангит ВЫКЛ.) пишалка перестает пищать и через 3 сек опять начинает пишать вместе с электромагнитом
что делаю не так?
Ну дык правильно, вы же подключили пищалку и электромагнит на один пин. Включается электромагнит - включается и пищалка. Цепляйте пищалку на другой пин и управляйте инверсно относительно электромагнита. Я же написал выше пример.
Да я понял ! с этим вопросов нет, а как можно реализовать чтоб он не просто пищал... а "пикал"
Спасибо!
Да я понял ! с этим вопросов нет, а как можно реализовать чтоб он не просто пищал... а "пикал"
Спасибо!
вам проще поставить реле, если есть питание на замке то реле включено, а пищалку подцепить к НЗ контактам. а если реализовать что бы пикал, нужно делать отдельную функцию без delay, а спомощью millis()
СПАСИБО!, я все понял что Вы имели введу.)))) затупил я что то просто!)
СПАСИБО!, я все понял что Вы имели введу.)))) затупил я что то просто!)
если хотите пищать, то вам придется убирать delay и все переводить на millis
вот так это будет выглядеть, проверить не на чем, попробуйте скажете что не так
отпишитесь если даже работает
с данным скетчем пищалка вообще не реагирует не на что . все подключенно правильно на вот этом коде она пикает один раз с короткой задержкой.
не принципиально чтоб она пищала всегда когда дверь открыта , как сделать так чтоб она при открытии несколько раз пикнула, допустим как у обычного домофона на подьезде.
схему подключения пищалки и замка нарисуйте, как подключенно, через реле или напрямую
не принципиально чтоб она пищала всегда когда дверь открыта , как сделать так чтоб она при открытии несколько раз пикнула, допустим как у обычного домофона на подьезде.
она будет пищать 3 секунды, пока на замке нету питания
попробуйте так
Реле пока не какого нет , сейчас собираю все на макетной, проше на "коленке"
к 10 пину подключен считыватель ключей таблеток
к 13 пину подключен (пока обычный светодиод)
к 12 пину подключена пищалка
в общем то вот пока вуся схема, считыватель срабатывает отключает питание на 13 пине на 3 секунды.
на данный момент пикает пишалка один раз, с задержкой 200мс.
Вот так все работает))))) пищалка пикнула несколько раз, в общем то как и нужно было пока что. СПАСИБО!
сейчас нужно посидеть подумать как вообще это работает. Я только учусь не обесудьте)
вопрос ! чтоб сделать кнопку допустим открытия изнутри мне нужно подключить ее паралельно считывателю?
хотя нет !.... нужен же ключь! а как тогда сделать чтоб кнопка открыла я не понимаю.
для начала надо добавить кнопку как я описывал выше
потом надо задать что этот пин будет работать как вход включим подтягивающий резистор на +5В что бы при отпущенной кнопке на ней была строгая 1-ца
для данной цели вам думаю не нужно будет делать антидребезг кнопки http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku а хватит простой команды digitalRead(BUTTON == LOW) .т.е.
П.С. кнопка будет работать если ее подключить одним контактом к земле ардуино(GND) а вторым к 11 пину
еще
019
pinMode(13, OUTPUT);
020
digitalWrite(13, HIGH);
021
pinMode(12, OUTPUT);
022
digitalWrite(13, HIGH);
023
pinMode(11, INPUT);
024
digitalWrite(11,HIGH);
нужно заменить на
019
pinMode(DOOR, OUTPUT);
020
digitalWrite(DOOR, HIGH);
021
pinMode(BUZZER, OUTPUT);
022
digitalWrite(BUZZER, HIGH);
023
pinMode(BUTTON, INPUT);
024
digitalWrite(BUTTON,HIGH);
что бы меняя первые строки в define можно было изменять пины не изменяя самого кода(для удобства если захотите вдруг другие пины использовать)
Ок , я вас понял! Спасибо.
как понимаю в скобках "()" нужно указывать время отсчета? срабатывания пишалки и магнита!?
при компиляции последнии пример ругается на 33 строке
'ds' не был объявлен в этой области
Ок , я вас понял! Спасибо.
как понимаю в скобках "()" нужно указывать время отсчета? срабатывания пишалки и магнита!?
нет, ничего указывать не нужно это просто начали отсчет функция millis() - смотрить время которое идет в ардуино, оно сбрасывается каждые 49 суток, т.е. идет от 0 до 4,294,967,295 миллисекунд, и мы задаем переменной time_buzzer и time_door именно то время которое ардуина проходит в фоновом режиме. т.е. 0,1,2,3.....600,601 а тут мы взяли и присвоили time_buzzer = millis(); это означает что time_buzzer = 601 и потом когда мы проверяем а сколько натикало в millis() смотрим а там уже не 601 а 801 условие пройдено
т.е. if (801>=601+200)
при компиляции последнии пример ругается на 33 строке
'ds' не был объявлен в этой области
да действительно, случайно забыл убрать "//" перед OneWire ds(10);
а что бы регулировать переодичность пищалки и время срабатывания двери - нужно
004
#define TIME_PERIOD_BUZZER 200 //переодичность включения\выключения пищалки изменить цифру 200 миллисекунд на допустим 100 тогда будет пищать быстрее
005
#define TIME_PERIOD_DOOR 3000 // сколько будет открыта дверь изменить цифру на 9000 тогда замок будет разблокирован на 9секунт вместо 3-ех мною заданных
Прошил МК теперь не срабатывает магнит ( тоесть не срабатывает ключь) и пищалка постоянно пищит не каких реакции Вот скетч
как нопку подключили? схему нарисуйте
сам запутался... эх бывает
как Вы и сказали 11пин и земля между ними получается кнопка ( нормально разомкнутая)
изменил строку 62
все равно так же , пищит пишалка и ключ не срабатывает не каких реакции
Блин Где-то ошибся ладно домой приеду разберусь сейчас просто уже не могу еду домой
Измените у себя только 62 строку а не мой берите
В последнем варианте который вы прислали
// подключать считыватель + (МК) с пином 13 через резистор 4.7кОМ к нему же ( к пину дату считывателя)
Вот
Не будет работать с ладно сейчас домой доеду и допишу нормально все будет Неудобно с телефона и за рулём
без изминений , пищит не срабатывает. и нет сигнала на магнит
// подключать считыватель + (МК) с пином 13 через резистор 4.7кОМ к нему же ( к пину дату считывателя)
раскоментировал //OneWire ds(10);
ругается на 38 строку 'open_door' was not declared in this scope
все заработало:
ДА!!! теперь все работает! Вот и готовый замок на электромагните. Может быть кому то и пригодится тоже .
Особая благодарность в помощи d13lider .
Вот картинка со схемой подключения (вроде нарисовал понятно)
Так же версия скетча который работает.
Доброго времени суток. А подскажите как сюда прописать еще пару ключей? Замок собрал на замену почившему ВИЗИТУ, работает прекрасно. Вот ключи не могу добавить.
Доброго времени суток. А подскажите как сюда прописать еще пару ключей? Замок собрал на замену почившему ВИЗИТУ, работает прекрасно. Вот ключи не могу добавить.
Смотря как у вас с программированием.
Если понимаете - вместо одномерного массива key[8] организуйте двумерный массив keys[N][8], где N - число ключей. Забейте в него идентификаторы ключей, а в программе в цикле сравнивайте массив addr[] с каждым ключом из двумерного массива.
А если с программированием голяк - вам проще будет первый ключ скопировать в любом металлоремонте на новые болванки, чтобы все ключи имели одинаковый код.
Спасибо за подсказку. С программированием на 2 с плюсом. Но буду пробовать разбираться. Когда тебе за 50 как то трудновато дается изучение с нуля.
Думаю, способ с копированием ключей будет и проще, и правильней. В принципе, разные ключи нужны только в одном случае - если вы с их помощью хотите идентифицировать жильцов и, к примеру, вести запись кто когда пришел и ушел :)
А если это просто домофон - то проще всем ключам назначить один и тот же номер. На "секретность" это не влияет никак.
Да, я это уже понял. Собрал сейчас на НАНО копировальщик и записал 5 ключей. Но 4, хоть прибей, не хотят перезаписываться. Пока хватить и 5 шт. Буду изучать дальше, может получиться создать массив. Спасибо.
Прошу помощи. Как оказалось не так уж замок прекрасно работает Если к замку приложить "чужой" ключ на 3-5сек. то замок открывается, но потом "свой" ключ перестает открывать. После сброса "свой" ключ открывает замок.
Значить, ошибка где-то в логике, в коде. Вангую, портица память массива правильных ключей.
Там всего один ключ записан.
byte key[8] = {0x1, 0x66, 0xA9, 0x31, 0xF, 0x0, 0x0, 0x14}; // ключ
выкладывайте полный код, будем разбираться
Там всего один ключ записан.
Вот он и портица. Код правил какнить, или тот же, 1 в 1 как в #39?