Це пристрій-модифікація попереднього проекту сигналізації для холодильника (див. Проект 27 в розділі 5). Основна ідея залишається все тією ж, але ланцюг генерування сигналу змінена. Раніше для роботи динаміка використовувався один транзистор. Тепер ми підключили динамік до Н-мосту. Результат – більш гучний звук при тому ж джерелі живлення, але на іншому микроконтроллере (ATtiny45).

Специфікація проекту

Мета – все та ж, що і в попередньому проекті, просто ми хочемо отримати більш гучний сигнал.

Опис пристрою

Принципова схема пристрою була приведена на рис. 6.6. Стабілізатора напруги немає, тому при підключенні батарей слід дотримуватися обережності. Мікроконтролер живиться від чотирьох батарейок розміру ААА напругою по 1,5 В. Діод D1 захищає схему від випадкової подачі напруги зворотної полярності. Ємність С1 припаяна біля контактів живлення мікроконтролера (для фільтрації перешкод). Схема (як ми вже згадували) була зроблена під два проекти, тому для цієї мети є дві перемички. Перемички JP1 і JP2 призначені для підключення фоторезистора і світлодіода до мікроконтролера (замикаються контакти 2 і 3). LED1 – це триміліметровий світлодіод для індикації стану двері холодильника (відкрита / закрита). Мікроконтроллер- ATtiny45. Заміна мікроконтролера потрібно тому, що в Tiny45 є два додаткових виходу ШІМ, які необхідні для керування звуковим підсилювачем у вигляді Н-моста (в ATtinyl3 їх немає). Ці два апаратних каналу ШІМ знаходяться в таймері Timer 1. До виходу Н-моста підключений динамік. Для відфільтровування високочастотного ШІМ-сигналу (несучої) паралельно динаміку включений фільтр низьких частот з двох котушок по 11 мГн і конденсаторів по 0,1 мкФ. Фоторезистор LDR підключений до контакту PCINT мікроконтролера через резистор опором 47 кому, що забезпечує необхідний розмах сигналу для переривання мікроконтролера. Конденсатор С2 призначений для фільтрації перешкод, що виникають при генеруванні звукового сигналу.

Програма запускається в залежності від рівня напруги на контакті переривання мікроконтролера. При наявності світла опір фоторезистора зменшується до кількох килоом, падіння напруги на ньому незначне і відповідає рівню логічного 0. Це виводить мікроконтролер із сплячого режиму (оскільки виникає переривання по зміні стану контакту). Потім мікроконтролер чекає вказане кількість часу, і, якщо логічний рівень не змінюється, спрацьовує звуковий сигнал. Якщо дверцята холодильника закрита, то рівень логічного сигналу стає високим (оскільки за відсутності світла опір фоторезистора порядку мегаом). Напруга на фоторезистори близько до логічного 1, тому мікроконтролер знову переходить у вимкнений стан.

Конструкція

Компонування плати в програмі EAGLE (разом з принциповою схемою) можна завантажити за посиланням: www.avrgenius.com/tinyavrl.

Друкована плата однобічна (на стороні компонентів є всього декілька перемичок). Сторони розпаяних плати показані на рис. 6.7 і 6.8. Фоторезистор припаяний вище, щоб на нього потрапляло світло від лампочки холодильника.

Програмування

Відкомпільований вихідний код (разом з файлом MAKEFILE) можна завантажити за посиланням: www.avrgenius.com/tinyavrl.

Тактова частота дорівнює 8 МГц. Контролер запрограмований за допомогою STK500 в режимі програмування ISP. Програма працює так само, як і в попередньому проекті (за винятком функціонування таймера). Мікроконтролер

ATtiny45 має додаткові виходи ШІМ (на таймері TIMER 1). Контакт ОС1А і його додатковий контакт використовуються для управління Н-мостом. Частота роботи TEMER1 встановлюється за допомогою внутрішньої системи автопідстроювання частоти (PLL), тому він працює на частоті 64 МГц. Частота на ШІМ-виході дорівнює 64/256 МГц (це приблизно 250 кГц). Таким чином, генерується високочастотна несуча і сигнал модулюється за допомогою щим. Шпаруватість високочастотної несучої змінюється відповідно зі звуковим сигналом, а тривалість звуку для конкретної мелодії встановлюється відповідно до звуковим тоном. Це робиться за допомогою таблиці, в якій містяться вісім значень: const char sin_wav [8] PROGMEM =

{128, 218, 255, 218, 128, 38, 1, 38};

Ці значення можна використовувати в головному циклі while для кодування синусоидальной обвідної високочастотного несучої.

81ДІ ^

if (d_alarm) // Цикл для відтворення звуку {

_delay_us(time);

// Затримка для відтворення мелодії 0CR1A = pgm_read_byte (sin_wav + sample);

// Зміна шпаруватості за допомогою синусоїдальних сигналів sample ++; if (sample> = 7) sample = 0;

}

Фрагмент коду лістингу 6.5 виконується, коли керуюча змінна d_alarm дорівнює 1 (аналогічно попередній версії сигналізації для холодильника). Усередині оператора if змінна sample зберігає зсув в таблиці, а відлік змінюється шляхом зміни значення порівняння TIMER! при зміні вмісту регістра ocria (як уже було показано раніше). Період часу конкретної мелодії обумовлений частотою генерується хвилі. Пристрій відтворює сім різних частот (кожну протягом приблизно 330 мс). Це робиться за допомогою таблиці частот:

const int sin_freq[7] PROGMEM=

{200, 300, 400, 500, 600, 700, 800};

Зміна частоти і затримку мелодії розраховує процедура обробки переривання таймера TIMER0, яка в попередньому проекті обчислювала також затримку в дев’ять секунд. Лістинг 6.6 містить код для маніпулювання частотами.

ШІЯМ

if ((d_alarm)&&(count==10))

// Відлік часу відтворення звуку {count = 0; if (freq <7) freq ++; else freq = 0;

f req_run=pgm_read_word ( (sin_freq+freq)) ; time= (125000/freq_run) ; PORTBA=(l«LED_PIN) ;

}

Оператор if – частина переривання таймера TIMERO. Мінлива count зберігає час відтворення звуку (330 мс). Після закінчення 330 мс переривання таймера змінює відтворену частоту шляхом зміни значення змінної freq_run. Мінлива time, що задає час відтворення мелодії, обчислюється за формулою time = i25000 / freq_run. Тривалість відтворення виходить в мікросекундах, вона використовується в раніше показаному циклі while головної програми.

Робота пристрою

Фоторезистор встановлюють біля лампочки холодильника. Коли дверцята зачинені, мікроконтролер знаходиться у вимкненому стані і споживає дуже невеликий струм. Коли дверцята холодильника відкривають, загоряється світлодіод, а якщо двері залишаються відкритими більше дев’яти секунд, включається звуковий сигнал.

Джерело: Гадре, Д., Цікаві проекти на базі мікроконтролерів tinyAVR / Дхананья Гадре, Нігула Мелхотра: Пер. з англ. – СПб .: БХВ-Петербург, 2012. – 352 с .: іл. – (Електроніка)