- Digitrode
- цифровая электроника вычислительная техника встраиваемые системы
- «Умная» розетка на основе Arduino своими руками
- Arduino.ru
- Розетка работающая по расписанию
- Записки программиста
- Собираем крафтовую розетку с таймером на базе Arduino
- Умная компьютерная розетка на Arduino своими руками
- Предисловие
- Из чего это сделано
- Умная розетка
- Схема подключения:
- Модуль реле
- Bluetooth-модуль
- Деблокиратор
- Схема подключения:
- LCD — модуль
- RFID — модуль
- Структура памяти RFID-карт MIFARE Classic
- Подключение тумблера
- Заключение
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
«Умная» розетка на основе Arduino своими руками
Данный проект позволит вам самостоятельно собрать «умную» розетку, управляемую с компьютера. Основу такой розетки составляют популярная плата Arduino Uno и твердотельное реле.
В первую очередь нужно собрать приведенную ниже схему твердотельного реле на основе оптопары MOC3041 и некоторыми дополнительными компонентами. MOC3041 представляет собой простой недорогой оптрон со светодиодом и фотодиодом. Затем подключите плату Arduino к разъему J1 собранного силового переключателя. Для управления реле мы задействуем линию ввода/вывода D12. Входные разъемы J2 будут представлять собой непосредственно розетку для подключения высокого напряжения 220 В переменного тока, а к разъемам J3 будет подключаться нагрузка, в данном случае лампа. Внимание: будьте предельно осторожны при работе с сетевым напряжением! При контакте с незащищенной кожей оно может вызвать непоправимые повреждения, ожоги или даже летальный случай!
Теперь подключите плату Arduino Uno к вашему компьютеру через порт USB, скопируйте нижеприведенный код в Arduino IDE и загрузите его в Arduino. Этот скетч довольно прост. Он считывает через последовательный порт символ в ASCII-кодировке и меняет логическое состояние линии D12/ При получении «1» линия D12 переходит в высокое логическое состояние (реле замыкается), при «2» в низкое (реле размыкается).
Плата Arduino Uno спроектирована таким образом, что у программного обеспечения имеется возможность сброса этой платы, когда она соединена с компьютером. Одна из линий аппаратного управления потоком данных (DTR) на ATmega8U2 подключена к линии сброса ATmega328 через конденсатор 100 нф. Когда на этой линии появляется низкий логический уровень, микросхема сбрасывается. Программное обеспечение использует эту функцию, чтобы вы могли программировать Arduino по одному нажатию кнопки в Arduino IDE. Но здесь есть некоторые неприятные для нас моменты — плата сбрасывается каждый раз, когда она подключается программно к компьютеру. К счастью, на Arduino Uno есть дорожка RESET-EN, перерезав которую можно отключить автоперезапуск. Чтобы снова включить его, достаточно просто запаять контактные площадки этой дорожки.
В качестве альтернативы аппаратному решению проблемы с автосбросом можно воспользоваться программными решениями. Например, установить терминал HTERM или попробовать гугловский монитор последовательной передачи данных Chrome Browser Serial Port Monitor.
Источник
Arduino.ru
Розетка работающая по расписанию
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Это мой первый проект! Розетка работающая по расписанию.
Цель: необходимо включать увлажнитель воздуха в заданное время.
Модуль времени Ds3231
Код в основном собран из частей, сам писать пока не умею
#include //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
#include //Подключаем библиотеку для использования модуля часов реального времени RTC
RTC_DS1307 RTC; //Создаем переменную класса — для использования RTC
const int RelayChn1 = 6; //Используем цифровой ПОРТ 6 для ПЕРВОГО канала релейного модуля
//Расчет времени ( 60секунд *60 минут *1 = 3600)
const long StartRelCn_1 = 28800; //Время срабатывания 8:00
const long DurationCh_1 = 1800; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:30
const long StartRelCn_1A = 36000; //Время срабатывания 10:00
const long DurationCh_1A = 1800; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:30
const long StartRelCn_1B = 41400; //Время срабатывания 11:30
const long DurationCh_1B = 2400; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:40
const long StartRelCn_1C = 52200; //Время срабатывания 14:30
const long DurationCh_1C = 1800; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:30
const long StartRelCn_1D = 57600; //Время срабатывания 16:00
const long DurationCh_1D = 1800; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:30
const long StartRelCn_1I = 64800; //Время срабатывания 18:00
const long DurationCh_1I = 2400; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:40
const long StartRelCn_1F = 72000; //Время срабатывания 20:00
const long DurationCh_1F = 3600; //ДЛИТЕЛЬНОСТЬ срабатывания реле 1:00
pinMode(RelayChn1,OUTPUT); //Инициализируем порт для ПЕРВОГО канала как ВЫХОД
digitalWrite(RelayChn1,HIGH); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень
Wire.begin(); //Инициируем I2C интерфейс
RTC.begin(); //Инициирум RTC модуль
DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла
long utime = myTime.unixtime(); //сохраняем в переменную — время в формате UNIX
utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секнд в сутках,
if ((utime >= StartRelCn_1) &&
(utime Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Источник
Записки программиста
Собираем крафтовую розетку с таймером на базе Arduino
22 декабря 2017
Розетка с таймером (ее же иногда называют «реле времени») — это устройство, функционал и назначение которого должно быть очевидно из названия. Вы подключаете какую-нибудь лампу в розетку через это устройство, в результате чего получаете возможность запрограммировать лампу. Например, лампа может автоматически включаться каждый день в 9 утра и выключаться в 10 вечера. Зачем это может быть нужно — уход за растениями, создание эффекта присутствия людей в доме с целью отпугивания воров, и так далее. Розетку с таймером в наше время легко купить готовую за небольшие деньги. Однако в этой заметке я расскажу, как сделать такое устройство своими руками.
Важно! Работа с переменным током высокого напряжения смертельно опасна. Если вы решите повторять действия, описанные далее, будьте предельно осторожны.
Примечание: Пользуясь случаем, я хотел бы поблагодарить пользователей форума EasyElectronics.ru с никами STT, BusMaster и Кот495 за то, что проконсультировали меня о некоторых нюансах работы с переменным током.
Спрашивается, зачем делать свое устройство, если можно просто купить готовое?
Ну, во-первых, это весело (если, конечно, вы находите веселым подобные вещи). Во-вторых, розетки с таймером обычно имеют маленькие экранчики без подсветки, на которых очень трудно что-то разобрать, а также неудобные элементы управления. Наше самодельное устройство будет лишено этого недостатка. В-третьих, самодельное устройство может быть запрограммированно сколь угодно сложно, тогда как готовые ограничены лишь парой-тройкой заданных наперед режимов. Наконец, в-четвертых, самодельное устройство может быть с легкостью модифицировано как нам вздумается (взять хотя бы банальное изменение цвета корпуса) и без труда ремонтируется, поскольку мы знаем точно, как оно работает.
Свою розетку с таймером я собрал из следующих компонентов:
- Клон Arduino Nano с разъемом Micro USB (2.82$);
- Китайский экранчик 1602 с I2C адаптером (1.75$);
- Роторный энкодер (0.52$);
- Реле с двумя контактными наборами RT424005 (3.07$);
- Две пары разъемов XT60 (0.66$);
- Ненужное зарядное устройство с USB-выходом (0.00$);
- Повербанк, полученный бесплатно на конференции (0.00$);
- Некоторое количество проводов, термоусадок, двустороннего скотча, болтов и гаек M3, кусок макетки, и прочая мелочь (0.00$);
Вместо зарядного устройства для телефона можно было воспользоваться нормальным AC/DC преобразователем на 5 В, припаиваемым на плату. Но стоят AC/DC преобразователи сравнительно дорого, а лишних зарядных устройств у меня накопилось достаточно много. Так что я предпочел использовать валяющуюся без дела зарядку.
Повербанк тоже валялся без дела. Если лишнего повербанка у вас нет, вместо него можно воспользоваться Li-Ion аккумулятором форм-фактора 18650 в сочетании с платой на базе чипа TP4056 и каким-нибудь повышающим DC/DC преобразователем на ваш выбор. Как использовать эти компоненты ранее было подробно рассказано в заметке Паяем крафтовый повербанк с солнечной панелью. Вообще-то говоря, не всякий повербанк способен заряжаться от сети и одновременно заряжать подключенное к нему устройство. Поэтому в общем случае использовать аккумулятор, TP4056 и повышающий преобразователь DC/DC будет более правильно.
Отмечу также, что повербанк нужен исключительно для того, чтобы часы на устройстве не сбрасывались при отключении электричества в доме. Если для вас это не является проблемой (например, есть ИБП), то можно обойтись и без повербанка.
Названные компоненты были помещены в корпус и соединены таким образом:
Корпус я спроектировал во FreeCAD и распечатал на 3D-принтере RepRap Prusa i3 пластиком PLA. Высчитывать с точностью до миллиметра, где должны находится отверстия для крепления экранчика, мне было лень. Поэтому эти отверстия я просверлил дрелью уже после того, как корпус был напечатан. Разъемы XT60 были закреплены с помощью термоклея.
Заметьте, что реле впаяно в макетку. Так сделано по той причине, что ножки у реле очень хрупкие, и если припаяться к ним напрямую, они быстро отломаются (я проверял!). Если вы решите использовать другое реле, убедитесь, что оно рассчитано на достаточно большой ток, хотя бы 8 А. Проверьте также, что выбранное вами реле является моностабильным. То есть, при пропадании питания на катушке реле должно автоматически разрывать цепь.
Наконец, примите во внимание, что из соображений безопасности следует разрывать фазу и ноль одновременно, а не лишь один из контактов, как рисует в своих туториалах та же Амперка. Дело в том, что втыкаемая в розетку вилка не знает, где у нее ноль, а где фаза, и разрывая лишь один из контактов вы повышаете вероятность поражения пользователя электрическим током при случайном касании, казалось бы, отключенной нагрузки. Таким образом, следует использовать реле с двумя группами контактов.
Софтверная часть не представляет очень уж большого интереса, тем более, что я не сильно заморачивался с качеством кода. Использование экранчиков 1602 с I2C интерфейсом ранее подробно рассматривалось в заметке Об использовании экранчиков 1602 с I2C-адаптером. Что же касается части кода, отвечающей за время, она в существенной части была позаимствована из проекта часов на микроконтроллере ATmega328P. Действительно новым для нас здесь является разве что работа с роторным энкодером, поэтому ее и рассмотрим.
Энкодер обычно имеет пять контактов. Из них два контакта, расположенные с одной стороны, представляют собой обыкновенную кнопку, и потому сейчас нам не интересны. Из трех оставшихся контактов на другой стороне средний подключается к земле, а два оставшихся — ко входам микроконтроллера с активированными подтягивающими резисторами. При вращении ручки энкодера в микроконтроллер будут приходит следующие сигналы:
Как видите, сигнал достаточно просто декодировать. Если по фронту сигнала с контакта A на контакте B сигнал высокий или по спаду сигнала с контакта A на контакте B сигнал низкий, значит пользователь вращает ручку по часовой стрелке. Если же наоборот, по фронту сигнала с контакта A на контакте B сигнал низкий, а по спаду — высокий, значит ручка вращается против часовой стрелки.
Как это часто бывает в мире Arduino, декодирование сигнала от энкодера уже реализовано в библиотеке Rotary. Пример ее использования:
Rotary rot ( 3 , 2 ) ;
// rotory interrupt
PCICR | = ( 1 PCIE2 ) ;
PCMSK2 | = ( 1 PCINT18 ) | ( 1 PCINT19 ) ;
sei ( ) ;
>
ISR ( PCINT2_vect ) <
unsigned char result = rot. process ( ) ;
if ( result == DIR_NONE ) <
// do nothing
> else if ( result == DIR_CW ) <
/* do something . */
> else if ( result == DIR_CCW ) <
/* do something else . */
>
>
В окончательном виде получившееся устройство выглядит так:
Конечно же, на ум приходит множество возможных улучшений. Например, можно добавить функцию управления по Bluetooth или же при помощи SMS. Не помешало бы также вывести на корпус индикацию процесса зарядки и текущего состояния аккумулятора. Где-нибудь сбоку стоило бы добавить кнопку полного отключения, например, на случай длительной транспортировки устройства. Возможность отключения подсветки экранчика была бы не лишней, так как подсветка довольно яркая и может, помимо прочего, мешать спать. Часы на кварцевом резонаторе не слишком точны, раз в пару месяцев их приходится подводить. В связи с этим стоит рассмотреть использование внешних часов реального времени. Ну и в целом получившаяся конструкция довольно громоздка, уродлива и сложна для повторения, не говоря уже о том, что микроконтроллер подошел бы и более простой, например, ATtiny2313. Так что, не лишено смысла сделать нормальную плату.
Как обычно, исходники прошивки и STL-файлы корпуса вы найдете на GitHub.
А что вы думаете об описанном проекте и какие идеи по его улучшению есть у вас?
Источник
Умная компьютерная розетка на Arduino своими руками
Предисловие
Умная розетка на Arduino, что может быть проще. Основной целью данного проекта было разработать розетки с беспроводным управлением, а также «автоматизировать» вход в Windows. Мотивирующая составляющая – разобраться, что такое RFID–метки и как с ними работать. В итоге было разработано два устройства – деблокиратор, который считывает карточки и собственно умная розетка, которая принимает сигнал «включиться» от деблокиратора. Если я Вас заинтересовал прошу к прочтению.
К слову, деблокиратор в данном проекте умеет как читать RFID-метки, так и писать на них. Область применения умной розетки достаточно большая. С их помощью можно удаленно включать и отключать электрические устройства. Так же данный проект может быть использован как пример для создания более сложных устройств управления электрическими устройствами (об этом в заключении). Сначала, думаю, стоит показать проект в работе, а потом рассказать как все работает.
Из чего это сделано
Умная розетка
Схема подключения:
- Arduino Leonardo
- АС-DС миниатюрный блок питания на 12В
- Bluetooth-модуль
- Обычная розетка на 220В, 2 штуки
- Вилка 220В с проводом
- Контактная площадка
- Двухцветный светодиод для индикации работы
- Площадка из ДСП для размещения компонентов
Подробнее о компонентах. Все комплектующие я разместил на площадке из ДСП размером 15 на 15 сантиметров.
Крепление всех комплектующих к площадке выполнено при помощи шурупов и предварительно просверленных в площадке отверстий. В качестве микроконтроллера я использовал именно Arduino Leonardo, так как эта плата в отличие от Uno, например, может выступать в роли USB-HID устройства. На фото Uno, но это фото, сделанное до появления идеи разблокировать Windows с помощью розетки. Leonardo нам нужен, чтобы сымитировать ввод пароля. Вместо Leonardo для этих целей можно было взять Arduino Due, Micro, Zero или Esplora.
Модуль реле
Что касаемо модуля реле, то он на два канала:
Коммутируемые токи до 10А при AC250V или DC30V. Имеется два управляющих пина на каждое реле и пины питания и земли. Важно отметить, что пины в данном модуле инверсные, то есть делая так:
Вы размыкаете реле. Чтобы ток пошел, нужно подать на пин логический ноль.
О проводке. Для низковольтной части схемы я использовал обычные коннекторы из шлейфа DuPont. Для высоковольтной части я взял алюминиевые провода сечением 2 мм. Будьте очень осторожны и внимательны при монтаже высоковольтных проводов!
О блоке питания. Я использовал блок питания для светодиодных лент, выходные параметры которого 12В, 0,4 А — достаточно и не много для Arduino. Зачем он нужен? Нужен для того, чтобы низковольтная часть схемы использовало то же напряжение, которое идет на наши розетки. Плюс от блока питания подается на Vin вход Arduino, минус — на Gnd. На заметку: вполне безопасно подключать USB-кабель одновременно с подключенным блоком питания на Vin.
Bluetooth-модуль
Теперь самое интересное — Bluetooth-модуль. В данном проекте я использовал модуль HC-05, так как он может выступать как в роле мастера, так и в роли слейва.
Слейвом у меня является модуль, установленный в умную розетку, мастером — модуль в деблокираторе. Таким образом, деблокиратор всегда является инициатором подключения. Данные модули можно сконфигурировать так, чтобы при включении они соединялись автоматически. Так я и сделал. Конфигурирование данного bluetooth-модуля выполняется путем отправки ему AT-команд. Для того, чтобы модуль мог принимать AT-команды его нужно перевести в AT-режим. Модуль, который попался мне (FC-114) имеет на борту кнопку (см. фото). Если ее зажать при включении модуль войдет в AT-режим. Согласитесь, неудобно. При таком подходе я не смогу динамически подключиться к какому-либо неизвестному до этого модулю. Было бы хорошо, чтобы можно было подать на какой-либо пин модуля логическую единицу и таким образом войти в AT-режим. Так и сделано во многих модулях, но не в FC-114. Такой пин имеет номер 34 в моем модуле и для того, чтобы в будущем, если понадобится подключаться к bluetooth-модулям динамически, я припаял к пину 34 модуля провод, который можно подключить к пину Arduino.
Теперь о командах для соединения двух bluettoth-модулей HC-05. В режиме слейв каждый модуль HC-05 работает «из коробки». Нужно лишь узнать его MAC-адрес, который мы будем использовать при конфигурировании мастера. Делать это будем при помощи AT-команд, о которых я упоминал выше. Для начала необходимо подключить пин RX bluetooth-модуля к пину 0 Arduino (тоже RX), пин TX соответственно к пину 1 Arduino. Обратите внимание, что здесь соединение не кроссовер, потому что мы используем UART Arduino. Далее необходимо залить на Arduino пустой скетч, так как опять таки мы используем UART Arduino.
Далее, перед включением питания, как я упоминал выше, необходимо зажать маленькую кнопку на bluetooth-модуле, чтобы войти в AT-режим. После этого, используя стандартную IDE (Tools -> Serial Monitor). Также, открыв Serial Monitor, необходимо установить скорость передачи данных (baud rate) равную 38400 и установить подстановку символов \r\n после каждой команды (Both NL & CR). Проверить, что все подключено верно и работает, можно путем ввода «AT». В ответ мы должны получить «OK». Далее можно написать команду «AT+NAME?». В ответ мы должны получить название bluetooth-модуля. На данный момент мы работает со слейв-устройством, поэтому все, что нам нужно, это узнать его MAC-адрес и убедиться, что оно работает в режиме «Slave», а не «Master». Для этого вводим две команды:
Если мы получили 0 — значит, что устройство работает в режиме «Slave», 1 — «Master». Чтобы изменить это значение, команда отправляется таким образом:
Теперь узнаем MAC-адрес Slave’а, чтобы Master знал, к кому ему нужно подключаться. Вводим команду:
Например, ответ был такой: «ADDR:20:2:110001». Это означает, что MAC-адрес нашего Slave’а 20:2:110001.
На этом работа со Slave’ом закончена. Переходим к конфигурированию Master’а. Таким же образом подключаем его к Arduino и заливаем пустой скетч, открываем Serial Monitor, ставим скорость передачи 38400, и подстановку /r/n. Далее вводим команды по порядку.
Итак, подробнее о каждой команде. Команда ORGL полностью сбрасывает устройство, а команда RMAAD удаляет все предыдущие «пары» с другими Slave-устройствами. Команда ROLE, как говорилось выше, имея аргумент 1 означает, что мы хотим, чтобы устройство работало в режиме Master. Команда CMODE с аргументом 1 (по умолчанию равен 0) означает, что наше Master-устройство может подключаться к Slave-устройству с любым адресом (можно задать определенный). Команда INIT запускает библиотеку SPP (Serial Port Profile), нужную для передачи/получения информации. Емкое высказывание зачем она нужна: «В то время как спецификация Bluetooth описывает как работает эта технология, профили определяет то, как с этой технологией работать». Вы можете получить ошибку 17 на данном шаге. Это означает, что библиотека уже запущена, просто продолжайте. Команда INQ означает, что наше Master-устройство начинает поиск Slave-устройств. Вывод данной команды — это список MAC-адресов найденных устройств. Например:
Сигнал и тип можно проигнорировать. Находим MAC-адрес нашего Slave’а и следующей командой LINK соединяем Master-устройство со Slave’ом. Обратите внимание, что здесь двоеточия в MAC-адресе заменяются на запятые. После этого Ваши bluetooth-устройства должны начать моргать два раза в
2 секунды. Это означает, что они соединены. До этого они моргали достаточно часто (два раза в секунду) — это значит, что они в поиске «пары».
Полный список AT-команд:
Деблокиратор
Схема подключения:
- Arduino Uno
- Bluetooth-модуль
- RFID — сенсор
- LCD — модуль
- Тумблер для переключения режима
- Пьезоэлемент
Подробнее о компонентах.
LCD — модуль
В рамках данного проекта был использован LCD-модуль 1620. Данный дисплей способен отобразить 2 строки по 16 символов каждая. Модуль подключается к микроконтроллеру Arduino через интерфейс I2C. I2C – последовательная шина данных для связи интегральных схем, использующая две двунаправленные линии связи (SDA и SCL). Данные передаются по двум проводам — проводу данных и проводу тактов. Есть ведущий (master) и ведомый (slave), такты генерирует master, ведомый лишь принимает байты. Всего на одной двухпроводной шине может быть до 127 устройств. I2C использует две двунаправленные линии, подтянутые к напряжению питания и управляемые через открытый коллектор или открытый сток – последовательная линия данных (SDA, англ. Serial Dаta) и последовательная линия тактирования (SCL, англ. Serial Clock). В скетче для работы с данным модулем используется библиотека LiquidCrystal_I2С. С ее помощью выводить данные на дисплей предельно просто. Данный пример кода выводит две символьные строки на две строки дисплея.
RFID — модуль
С этим модулем и с технологией RFID в целом было особенно интересно разобраться. В рамках данного проекта был использован RFID-модуль RC-522, который работает с картами стандарта HF, в частности MIFARE с частотой 13,56 МГц. Данный модуль подключается к микроконтроллеру Arduino через интерфейс SPI. SPI – последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии. В SPI используются четыре цифровых сигнала:
- MOSI – Служит для передачи данных от ведущего устройства ведомому;
- MISO – Служит для передачи данных от ведомого устройства ведущему;
- SCK – Служит для передачи тактового сигнала для ведомых устройств;
- NSS – выбор микросхемы, выбор ведомого
RFID-модуль выступает в качестве ведомого, а микроконтроллер – в качестве ведущего.
Структура памяти RFID-карт MIFARE Classic
Память чипов MIFARE Classic имеет четкую структуру (в отличие от MIFARE DESFIre, имеющего более сложную, файловую организацию памяти). Память MIFARE 1K и MIFARE 4K разделена на сектора, 16 секторов у MIFARE 1K и 40 секторов у MIfare 4K. Каждый сектор MIFARE 1K и первые 32 сектора MIFARE 4K состоят из трех блоков данных и одного блока для хранения ключей (Sector Trailer). Последние 8 секторов MIFARE 4K состоят из 15 блоков данных и одного (16-го) блока хранения ключей. Блоки данных доступны для чтения/записи при условии успешной авторизации по ключу.
О «служебном» блоке. Блок Sector Trailer хранит секретные значения ключей (А и В) для доступа к соответствующему сектору, а также условие доступа (определяемое значением битов доступа). Блок Sector Trailer всегда последний (четвертый) блок в секторе. Каждый сектор MIFARE Classic может иметь свои собственные ключи доступа и условия записи/чтения данных.
О блоках данных. Каждый блок данных состоит из 16 байт, доступных для записи/чтения (кроме блока 0 сектора 0, где хранится не стираемая информация завода-изготовителя). Запись/чтение данных производится по ключу и битам доступа. Блоки данных могут быть сконфигурированы как блоки для обычной записи/чтения, или как блоки хранения условных единиц (функция электронного кошелька). В обычные блоки данных можно записывать любую информацию (цифры, символы и т.п.). Если блок данных сконфигурирован как блок для хранения условных единиц, то работа с таким блоком происходит по командам increment/decrement. То есть числовое значение, хранящееся в таком блоке, можно только увеличивать и уменьшать.
О правилах доступа. Ко всем секторам карты MIFARE Classic доступ осуществляется по единым правилам. Доступ к тому или иному сектору производится с помощью ключей (Ключ А и Ключ В). С помощью Access Condition (условие доступа в Sector Trailer) задаются условия записи и чтения данных из каждого сектора с использованием одного ключа (А или В) или обоих ключей А и В одновременно. Например, при пользовании клиентами карт MIFARE можно реализовать чтение (только чтение) данных из блока по ключу А, в то время как системный администратор может читать и писать данные к память MIFARE, используя ключ В. В четвертом блоке каждого сектора (Sector Trailer) для обеспечения такого разграничения доступа используются три бита (access bits) C1, C2 и С3. С помощью этих битов можно задать восемь различных режимов доступа к сектору MIFARE. Бит C1 считается младшим значащим битом (LSB).
О том, как я использовал память RFID-меток. В рамках проекта используется два режима: основной – чтение RFID – карты и включение розетки, дополнительный – программирование RFID – карты. Для авторизации RFID – карты деблокиратором на нее записывается секретный ключ длиной в 128 байт. 128 байт = 8 блоков по 16 байт. 3 блока пишутся в сектор 1, 3 блока в сектор 2 и, наконец, 2 оставшихся блока в сектор 3. Для чтения необходима аутентификация по ключу А, для записи – по ключу B, которых находятся в trailer блоке. Длина ключа в 128 байт была выбрана без каких-либо принципов, можно было использоваться хоть всю память карты. Ключ — случайный набор символов, который находится в коде прошивки и деблокиратора, и умной розетки. Такое решение сверх-безопасностью явно не обладает, но в рамках проекта задачи обеспечить защищенную систему не стояло. Об этом также в заключении.
Подключение тумблера
Как мне кажется, имеет смысл также отметить подключение тумблера к Arduino. Тумблер в деблокираторе используется для переключения режима работы. В первом режиме устройство считывает RFID-карты и если в нужных блоках памяти карты записан секретный ключ, о котором говорилось выше, посылает по bluetooth сигнал «Включить розетки и разблокировать Windows» на умную розетку. Во втором режиме, деблокиратор записывает на RFID-карту секретный ключ. Перед записью он карту считывает: если на ней уже записан правильный секретный ключ, он очищает нужные блоки памяти путем записи нулей. Согласитесь, странно снабжать деблокиратор и функцией чтения, и функцией записи RFID-карт. О том почему так — в заключении.
При подключении тумблеров, кнопок, переключателей имеет место «дребезг контактов» — явление, при котором вместо четкого и стабильного переключения мы получаем случайные многократные неконтролируемые замыкания и размыкания контактов. Другими словами, контакты при соприкосновении начинают колебаться (т.е. «дребезжать»), порождая множество срабатываний вместо одного. Соответственно, микроконтроллер «поймает» все эти нажатия, потому что дребезг не отличим от настоящего нажатия на кнопку.
Для подавления «дребезга» я использовал подтягивающий резистор емкостью 20 кОм, встроенный в Arduino. Он осуществляет подтягивание к логической единице. Так как у тумблера оба положения — ON, подтягивание к логической единице — то, что нужно. Используется он таким образом:
Заключение
Итак, у меня получилось два устройства, одно из них принимает сигналы по bluetooth и активирует розетки, а также разблокирует Windows на присоединенном компьютере, а другое — эти сигналы отправляет после успешной валидации по RFID-метке. Однако, как я уже говорил, было странным делать и запись, и чтение в одном устройстве, без какой-либо защиты. Я сделал так лишь потому, что хотел пойти дальше считывания ID RFID-карты и сравнения его с захардкоженым значением, а попробовать поработать с ее памятью, для чего она собственно предназначена. Таким образом, теперь я знаю как записать любую информацию на RFID-карту, как ее считать, как сделать карту Read Only и т.п. Получилась система для домашнего использования. Так и получается, я использую свой девайс дома, умная розетка подключена к компьютеру, в нее подсоединены колонки и зарядное для телефона. Деблокиратор стоит на входе комнаты. Не скажу, что это девайс, без которого я не могу жить, но идеи реального практического применения у него есть. Одна из них вполне осуществима и будет реализована.
Планируется сделать систему контроля доступа к рабочему месту студента в аудитории с компьютерами. Забегая вперед, скажу, что в качестве студенческого билета в нашем университете используется RFID-карта MIFARE 1K. Предположим, что у нас есть небольшая аудитория на 6 компьютеров, другими словами на 6 рабочих мест.
Сперва мы «клонируем» умную розетку — делаем еще 5 таких устройств, чтобы помимо использования компьютера, студент мог подключить свой ноутбук/паяльник/телефон к розетке. Тут нам и пригодится динамическое соединение Master-устройства bluetooth со Slave-устройством, о котором я говорил, рассказывая про bluetooth-модуль. Больше каким-либо образом модифицировать умную розетку не придется. Единственное, придется поискать решение, чтобы нельзя было перепрограммировать микроконтроллер Arduino, присоединенный к компьютеру через USB-кабель.
Теперь стоит сказать об изменениях в деблокираторе. Его мы лишаем функции записи, оставляя возможность только считывать RFID-карты. Если бы мы использовали самодельные RFID-карты, то понадобилось еще сделать устройство для записи RFID-карт. Так как планируется использовать уже готовые студенческие билеты с готовой записанной информацией, данное устройство в рамках будущего проекта не требуется, но в случае использования своих, «кастомных» карт его создание было бы очень простым с учетом проделанной работы над этим проектом. Также, деблокиратор необходимо будет оснастить Ethernet- или WiFi-модулем, для возможности осуществлять запросы на management-сервер. Какой и зачем, спросите вы? Чтобы сделать систему более гибкой и удобной, перед тем как придти поработать в аудиторию, студенту необходимо «забронировать» себе место с помощью данного веб-сайта. Деблокиратор при проверке RFID-карты студента будет обращаться на данный сервер для проверки бронирования (и еще чего-нибудь, если хочется). Остается подумать, как реализовать перепроверку присутствия студента (ушел и не приложил карту) и удобный способ информирования об окончании «рабочего» времени.
Источник