Сигнализация с датчиком наклона на микроконтроллере AVR ATmega8

В этой статье мы рассмотрим сигнализацию на микроконтроллере ATmega8 (семейство AVR), основанную на анализе колебаний.

Сигнализация с датчиком наклона на микроконтроллере AVR ATmega8: внешний вид

Данную сигнализацию можно использовать для защиты от воров. Сигнализация основана на использовании датчика наклона (tilt sensor), внешний вид которого показан на следующем рисунке.

Внешний вид датчика наклона

Одним из ключевых компонентов рассматриваемого датчика наклона является цилиндр (хорошо видный на фото), в который помещен свободно катающийся металлический шар. Внизу цилиндра расположены два металлических контакта. Когда датчик наклоняют шар скатывается вниз и замыкает цепь между этими контактами. Это замыкание цепи обнаруживается операционным усилителем датчика, который подает на выход датчика высокое напряжение. Мы этот сигнал в дальнейшем будем передавать на микроконтроллер ATmega8 для соответствующей обработки.

Необходимые компоненты

Аппаратное обеспечение

  1. Микроконтроллер ATmega8 (купить на AliExpress).
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. Конденсаторы 1000 мкФ (купить на AliExpress) и 100 нФ (купить на AliExpress).
  4. Светодиод (купить на AliExpress).
  5. Кнопки (5 шт.).
  6. Резистор 220 Ом (купить на AliExpress).
  7. Резистор 10 кОм (купить на AliExpress).
  8. Источник питания с напряжением 5 Вольт.
  9. Транзистор 2n3906 (купить на AliExpress).
  10. Звонок (зуммер) (купить на AliExpress).
  11. Датчик наклона (купить на AliExpress).
  12. Резистор 1 кОм (6 шт.) (купить на AliExpress).

Программное обеспечение

  1. Atmel Studio версии 6.1 (или выше).
  2. Progisp или flash magic (необязательно).

Работа схемы

Схема устройства приведена на следующем рисунке.

Схема сигнализации с датчиком наклона на микроконтроллере AVR

В данном случае у нас нет необходимости в использовании внешнего тактового генератора – возможностей внутреннего RC-генератора микроконтроллера ATmega8 нам будет вполне достаточно. Внешний тактовый генератор, в основном, востребован в приложениях реального времени, в которых важна точность измерения временных интервалов. При покупку микроконтроллера его фьюзы сконфигурированы на работу от внутреннего RC-генератора.

Принцип действия схемы несложен. Когда происходит какое то колебание - проник нарушитель и сдвинул положение датчика наклона, датчик посылает импульс высокого напряжения на ATmega8. При получении этого импульса микроконтроллер посылает сигнал тревоги на звонок, который воспроизводит соответствующий звук.

После этого только авторизованное лицо может отключить сигнализацию. Для этой цели служат 5 кнопок, представленные на схеме, которые реализуют 4999 возможных комбинаций. И только одна из этих комбинаций (назначенная) отключает сигнализацию. Таким образом, только лицо, знающее правильную комбинацию, может отключить сигнал тревоги.

Исходный код программы на языке С (Си) с пояснениями

Программа для рассматриваемой схемы представлена следующим фрагментом кода на языке С (Си). Комментарии к коду программу поясняют принцип работы отдельных команд.

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
562 просмотров


Комментарии

Сигнализация с датчиком наклона на микроконтроллере AVR ATmega8 — 17 комментариев

  1. Добрый день, Есть небольшой вопрос.Что представляет собой значение 'check();'? Просто его описание 'int check();', Кажется инициализации переменной, и почему там находятся кавычки?

    • Добрый вечер, check в этой программе - это не переменная, это функция, которая возвращает значение целого типа. И где вы увидели кавычки?

      • Здравствуйте еще раз, теперь стало понятно что это функция, только я имел ввиду по ошибке не кавычки а скобки возле функции чек, а точнее параметры.

  2. Добрый день, При компиляции кода в CodeVision AVR выдает ошибки
    Error: C:\Users\smole\Desktop\Rode\main.c(1): can't open #include file: avr\io.h
    Error: C:\Users\smole\Desktop\Rode\main.c(9): the 'main' function must return 'void' type
    Error: C:\Users\smole\Desktop\Rode\main.c(12): undefined symbol 'DDRC'
    Error: C:\Users\smole\Desktop\Rode\main.c(13): undefined symbol 'DDRB'
    Error: C:\Users\smole\Desktop\Rode\main.c(16): undefined symbol 'bit_is_clear'
    Error: C:\Users\smole\Desktop\Rode\main.c(20): undefined symbol 'bit_is_clear'
    Error: C:\Users\smole\Desktop\Rode\main.c(37): undefined symbol 'PORTB'
    Error: C:\Users\smole\Desktop\Rode\main.c(38): undefined symbol 'PORTB'
    Error: C:\Users\smole\Desktop\Rode\main.c(42): undefined symbol 'PORTB'
    Error: C:\Users\smole\Desktop\Rode\main.c(43): undefined symbol 'PORTB'
    Error: C:\Users\smole\Desktop\Rode\main.c(49): undefined symbol 'bit_is_clear'
    Error: C:\Users\smole\Desktop\Rode\main.c(64): undefined symbol 'int'
    Error: C:\Users\smole\Desktop\Rode\main.c(64): undefined symbol 'i'
    Error: C:\Users\smole\Desktop\Rode\main.c(64): undefined symbol 'i'
    Error: C:\Users\smole\Desktop\Rode\main.c(73): no matching if

    Не подскажете, как это исправить?

    • Добрый вечер, ну у вас какой то полный ахтунг, почти ничего не работает из того, что есть в программе. Не работал с CodeVision AVR, но могу предположить, что у вас выставлены какие то неправильные настройки в этой программе, неправильно выбран тип микроконтроллера и т.д. У вас даже базовая, можно сказать, библиотека avr\io.h не подключается в программе. И, по всей видимости, большая часть ваших ошибок связана с тем, что как раз не подключается данная библиотека. Я бы посоветовал сначала отладить вашу CodeVision AVR на самой простейшей программе для работы с микроконтроллерами AVR - например, программе мигания светодиодом

      • Если не составляет труда, вы могли бы поделиться hex файлом к этому проекту?

        • К сожалению не могу, я этот проект сам не делал, статья переведена с иностранного сайта. Но код программы достаточно простой, понять его несложно.
          Посмотрите комментарии ниже, у одного из пользователей этот проект также сначала не компилировался в CodeVision AVR, но потом все получилось неожиданно. Ситуация аналогичная вашей

  3. Я так понимаю это все на С++ написано, а в assembler можно ли это перевести, я курсач делаю, а мы делали на асемблере просто, боюсь препод не примет.
    Р.С. я в программировании полный 0, даже можно не отправлять меня куда-либо научиться

    • Да, это все написано на С++, как в ассемблер это перевести я не знаю, знаю только как перевести это в HEX код

  4. Добрый день, я студент и сейчас учусь программировать микроконтроллеры, не могли бы вы поделиться hex файлом для прошивки? Я бы был вам очень признателен

    • Добрый вечер, к сожалению сейчас вынужден работать на компьютере (надеюсь временно), на котором не установлено программное обеспечение чтобы сделать hex файл из представленной в этой статье программе. Но этот процесс достаточно хорошо описан в статье программирование микроконтроллеров AVR с помощью программатора USBASP и Atmel Studio 7.0. Также hex файл можно сделать с помощью CodeVisionAVR - этот процесс описан в статье про подключение GSM модуля к микроконтроллеру AVR ATmega16. Также можно использовать программу AVRDUDE_PROG.

      • Спасибо за такой быстрый ответ, честно, учитывая когда была написана статья, я думал, что мне уже не ответят) Просто проблема в том, что я уже собирался сделать hex файл в Code Vision AVR, но компилятор мне выдал несколько ошибок. Например, не объявлены переменные bit_is_clear и bit_is_set, переменную i он тоже не видит, и ещё несколько ошибок. Поэтому я предложил, что код представлен не в полном виде. Могли бы вы объяснить, в каком виде представить эти переменные? Заранее большое спасибо

        • Я стараюсь оперативно (в течение 1-2 дня) отвечать на все свежие комментарии на сайте. Но когда в отпуске - то так не получается уже, к сожалению.
          bit_is_clear и bit_is_set - это не переменные, это команды, позволяющие проверить состояние контакта: на нем логический ноль (bit_is_clear) или логическая единица (bit_is_set).

          • Как ни странно, но сначала мне компилятор выдавал кучу ошибок, а сегодня я просто создал новый проект и все скомпилировалось... Наверно, это тот самый эффект сисадмина, когда профи заходит в комнату и сразу помимо компьютера чинится все в радиусе одного офиса) Сегодня буду собирать и тестировать схему)

            • Удачи. Я рад что у вас начало получаться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *