Суть работы предлагаемого устройства довольно проста: контакты провода замыкаются и помещаются в одежде или сумке так, что не разомкнув их, нельзя извлечь ценный предмет. Пока цепь замкнута, устройство молчит, как только цепь размыкается, динамик начинает противно пищать. Для того, чтобы понимать, что устройство действительно работает (батарейка не села), мы будем периодически мигать светодиодом. Я опишу базовую концепцию устройства, а читатель уже может самостоятельно модифицировать его под свои нужды, например усилить мощность сигнала в динамике, или мигать сразу несколькими, более мощными диодами.
Ядром нашего переносного устройства будет микроконтроллер ATTiny 13. Конечно, реализовать подобное решение можно различными способами на разной элементной базе, однако мой вариант реализации будет основан именно на этом МК. Прошивку для МК мы будем писать на ассемблере с подробными комментариями.
Вот необходимые детали:
- МК ATtiny 13 – 1 шт.
- Резистор – 10Ком,0,125 Вт -1 шт.
- Резистор – 100-300 Ом,0,125 Вт – 1 шт.
- Светодиод
- Динамик
- Держатель для элемента питания типа CR 2024
- Элемент питания
- Монтажная плата
Предложенный набор деталей является рекомендуемым, и читатель вполне может заменить, к примеру, элементы питания на другие. Важно обеспечить напряжение не менее 3 В. Также обращаю внимание на упоминание монтажной платы.
Для создания данного устройства нам потребуется лишь небольшой фрагмент, который можно отпилить с помощью ножовки. Думаю, что для начинающих радиолюбителей такой вариант монтажа будет лучше, чем травление платы.
Схема устройства довольно простая:
Теперь рассмотрим алгоритм работы нашей программы. Учитывая, что писать прошивку мы будем на ассемблере - не самом интуитивно понятном языке программирования, наличие диаграммы поможет понять принцип работы алгоритма. Несмотря на кажущуюся простоту, здесь есть ряд моментов, на которые необходимо обратить внимание.
Как видно из диаграммы, каждое включение или отключение диода и динамика представляют собой выполнение определенного цикла, в процессе выполнения которого устройство повторяет одно и то же действие.
Это касается как мигания светодиода, когда цепь замкнута, так и мигания и подачи звукового сигнала при размыкании цепи.
Перейдем к рассмотрению программной реализации.
.include "tn13def.inc" ;----------------- .equ SW =3 ; вход на PB3 .equ sekunda =4000 ; интервал времени, примерно соответствующий 1 секунде .equ LED_ON =800 ; сколько времени горит светодиод (0,2c) ;------------- .def loop =r17 ; счетчик цикла .def counter =r18 ; счетчик времени .def flag =r19 ; счетчик задержки .def temp =r22 ; переменная для хранения временных значений ;**************************************************************************** .cseg ; основной код программы .org 0 rjmp reset ; переход к старту программы ;==================================================================== ; macros задержки delay ;==================================================================== .macro delay ; данному макросу передается три значения @0 – число итераций, равное 1 сек., @1 – переменная для временных значений @2 – число секунд inc @1 ; увеличиваем на 1 значение переданного параметра @1 mov counter,@1 ; далее идет отсчет задержки pause: mov loop,counter; инициализируем значение счетчика sol: rcall Interval; переход на метку Interval dec loop; снижаем значение счетчика на единицу brne sol ; пока не ноль переходим на метку, если 0 выполняем следующую команду ldi flag,@2 ; загружаем значение @2 Cycle: ldi XL,Low (@0); нижний байт @0 в XL ldi XH,high(@0); верхний байт @0 в XH delay_: sbiw XL,1 ; вычитаем 1 из XL brne delay_ ; пока не 0 dec flag ; вычитаем 1 brne Cycle; цикл пока не 0 dec counter ; вычитаем 1 brne pause ; цикл пока не 0 .endm ;конец макроса reset: ;начало основной программы ;------------------ Инициализация портов -------------------------------- ldi temp,0b11110111; 247 в двоичном виде out DDRB,temp ;выгружаем в DDRB Com temp ; переводим в обратный код Out PORTB,temp ; выгружаем в PORTB main: ;основная процедура clr temp; обнуляем значение temp cbi PORTB,1; сброс разряда (включение диода) delay sekunda,temp, 30 ; пауза sbi PORTB,1; установка разряда (выключение диода) delay sekunda,temp,30 sbis PINB,SW ; пропустить следующую команду, если на SW разряд установлен (цепь разомкнута) rjmp main ; переходим к началу alarm: ; действия при разрыве цепи cbi PORTB,2; установка разряда (включение динамика) cbi PORTB,1; установка разряда (включение диода) delay sekunda,temp,30; пауза sbi PORTB,2; установка разряда (выключение динамика) sbi PORTB,1; установка разряда (выключение диода) delay sekunda,temp,30; rjmp main; переходим к началу ;---------------------------------функция Interval------------------------------------------ Interval: ldi YL,Low (LED_ON) ; ldi YH,high (LED_ON) ; on_: sbiw YL,1 brne on_ ret
В качестве средства разработки и компиляции использовалась среда AVR Studio 4. Микроконтроллер прошивался с помощью Avrdude.
FUSE биты не изменялись. На рисунке приведены исходные, использовавшиеся при прошивке.
Процесс сборки
Вот что нам потребуется
После сборки на макетной плате по приведенной выше схеме, получаем следующее:
А вот так выглядит готовое устройство. В качестве корпуса выбрана капсула от шоколадного яйца Киндер сюрприз. На фото динамик вынесен отдельно, для установки рядом с ухом, а плата и батарейка помещаются внутрь пластикового корпуса.
Устройство в собранном виде.
Полное описание процесса сборки устройства представлено на видео
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
МК AVR 8-бит | ATtiny13 | 1 | Поиск в магазине Отрон | |||
Резистор | 10 кОм | 1 | Поиск в магазине Отрон | |||
Резистор | 100-300 | 1 | Поиск в магазине Отрон | |||
Светодиод | 1 | Поиск в магазине Отрон | ||||
Динамик | 1 | Поиск в магазине Отрон | ||||
Скачать список элементов (PDF)
Прикрепленные файлы:
- article_1.rar (4 Кб)
Комментарии (6) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]