Вас ніколи не дивувало, що в момент наближення вашого автомобіля до світлофора червоний сигнал в ньому міняється на зелений? Або що при в’їзді на територію автомобільного ресторану автоматично звучить вітальне повідомлення?

Не дивуйтеся, оскільки в цьому розділі теж пропонується схема, яка дозволить вам виявити автомобіль, що наближається. Існує багато способів виявлення автомобіля. Зазвичай автомобіль має великий металевий кузов і в присутності такої великої маси металу електричні характеристики котушки індуктивності змінюються. Заміривши це зміна характеристик, ми зможемо виявити присутність автомобіля. Блок-схема подібної системи наведена на рис. 5.33.

Рис. 5.33. Блок-схема датчика наближення автомобіля

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

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

Мета проекту-створити пристрій, який виявляє присутність автомобілів і підраховує їх кількість. Система живиться від батарейок; графічний дисплей показує число виявлених автомобілів.

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

Пристрій складається з двох частин: генератора (рис. 5.34) і схеми з мікроконтролером і дисплеєм (рис. 5.35). До складу генератора входять два конденсатори (С1 і С2) і котушка індуктивності (підключена до контактів Х1-1 і XI-2

показаного на малюнку роз’єму). Частота коливань дорівнює F = 1 / (2ПУ / LC). С = С1 · С2 / (С1 + С2) – це еквівалентна ємність. Котушка індуктивності складається з декількох витків ізольованого мідного дроту, укладених в захисний

пластмасовий корпус, який потім закопується в землю. Велике значення має розмір котушки: вона повинна бути приблизно шість футів («1,8 м) в довжину і чотири фути (« 1,2 м) в ширину. Десять витків мідного проводи дадуть індуктивність від 500 до 1000 мкГн. Якщо вибрати ємності Cl = С2 = 1000 пФ, то частота генератора складе від 200 до 300 кГц. Таку частоту мікроконтролер AVR здатний заміряти без праці.

Рис. 5.34. Принципова схема генератора

Рис. 5.35. Принципова схема блоку обробки

Сигнал з генератора подається на мікроконтролер (рис. 5.32) Tiny861 з тактуванням від кварцу 7,37 МГц. Вибір такої частоти випадковий. Просто такий кварц із частотою менше 8 МГц, виявився у нас під рукою (оскільки максимальна частота була у нас версії Tiny861 становила 10 МГц). Пристрій живиться від батарейки і перетворювача LP2950-3.3V, оскільки для графічного дисплея Nokia 3310 потрібна напруга живлення 3,3 В. Крім цього, передбачений роз’єм ISP для програмування мікроконтролера.

Конструкція

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

Схема з мікроконтролером зібрана на спеціально виготовленій друкованій платі. Генератор зібраний на стандартній монтажній платі. Обидві схеми з’єднані двома роз’ємами (харчування і сигнал генератора). На платі генератора передбачений ще роз’єм для підключення індуктивності. На рис. 5.36 і 5.37 показані плати генератора і контролера, на рис. 5.38 – зовнішній вигляд готового пристрою разом з котушкою індуктивності.

Рис. 5.36. Друковані плати генератора і мікроконтролера (сторона компонентів)

Рис. 5.37. Друковані плати генератора і мікроконтролера (сторона друкованих провідників)

Рис. 5.38. Зовнішній вигляд готового детектора автомобілів

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

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

Таймер Timer 1 инициализируется в режимі CLEAR TIMER ON COMPARE MATCH. Значення OCR1A встановлюється в 1 секунду, з якої 0,1 секунди виділяється для Timer 0 для підрахунку зовнішніх імпульсів (що приходять з котушки) і 0,9 секунди система перебуває в стані кінцевого автомата (лістинг 5.10).

TIMSK | = (1 «ОС1Е1А); // Активізувати переривання порівняння TCCR1B | = ((1 «WGM12) | (1« CS12)); // Попередній дільник 256,

// WGM для режиму СТС

OCR1A = 31250; // Для переривання в 1 секунду

sei (); // Активізувати глобальне переривання

В гілки s0 (лістинг 5.11) налаштовується базова частота в відсутність автомобіля (коли користувач натискає кнопку 1 схеми).

В гілки si (лістинг 5.12) перевіряється поява автомобіля. Якщо частота перевищить сумарне значення базової частоти і верхньої межі частоти (який користувач може налаштувати на свій розсуд у файлі detector.h (за замовчуванням це 6 кГц)), то система вважає, що з’явився автомобіль, і тому включає зелений світлодіод і вимикає червоний. Після цього управління передається в гілку s2.

Гілка s2 (лістинг 5.13) відстежує від’їзд автомобіля. Якщо частота падає нижче сумарного значення базової частоти і нижньої межі частоти, який користувач може налаштувати на свій розсуд у файлі detector.h (за замовчуванням це 2 кГц), то система вважає, що автомобіль виїхав, і тому вимикає зелений світлодіод і включає червоний. Лічильник числа автомобілів збільшується на одиницю і після цього управління передається назад в гілку si.

Гілка s0

if (! (SWITCH_PIN &: (1 «2))) // При натисканні кнопки {

base_freq = changing_freq; // Встановити базову частоту display_base_freq (base_freq); // Показати її на дисплеї select_case = si; // Обрана гілка si>

I Лістинг 5.12

Гілка si

while (changing_freq> (base_freq + upper_threshold_freq)) // Якщо частота перевищує межу {

select_case = s2; // Обрана гілка s2

LED_PORT Sc = – (1 «LED_GREEN); // Включення зеленого світлодіода LED_PORT I = (1 «LED_RED); // Вимкнення червоного світлодіода break;

}

I Лістинг 5.13

Гілка s2

while (changing__freq < (base_freq + lower_threshold_freq)) // Якщо частота повернулася в норму {-

LED_PORT & = ~ (1 «LED_RED); // Включення червоного світлодіода LED_PORT | = (1 «LED_GREEN); // Вимкнення зеленого світлодіода

car_counter = car_counter + l; // Збільшення лічильника машин display_car (car_counter); // Показати кількість машин select_case = si; // Обрана гілка si break;

}

У процедурі обробки переривання для Timer 1 (лістинг 5.14) відбувається ініціалізація Timer 0, який спрацьовує від зовнішніх імпульсів, що приходять на контакт ТО. Timer 0 вважає приходять імпульси.

Ми підраховуємо число імпульсів протягом 0,1 секунди, після чого обчислюємо частоту і відображаємо її на екрані графічного дисплея.

Лістинг 5.14

ISR (TIMERl_COMPA_vec t)

// Налаштовуємо процедуру обробки переривання на режим Compare

{

// Підраховуємо число імпульсів за 0,1 секунди ovf “counter = О?

// Налаштовуємо Timer 0 для зовнішніх імпульсів TCCRO = ((1 «CS02) | (1« CS01) | (1 «CS00));

// Активуємо режим Normal, зовнішня тактова частота // збільшує TCNT0

TCNT1=0;

TCNT0=0;

while ((3125)>=(uint32_t)TCNT1)

{

if(TCNT0==255)

{

ovf_counter += 1;

TCNT0=0;

}

counts = TCNTO;

}

// Обчислення для визначення поточної частоти

counts = (ovf„counter * 255) + counts;

freq=(float)counts;

freq=freq*10;

counts=(uint32_t)freq;

counts=counts/10;

changing_freq = counts;

LCD„partclear () ; display_changing_freq();

}

Фрагмент коду лістингу 5.15 міститься у файлі detector.h, і користувач повинен змінити його у відповідності зі своїми потребами. Тут задані верхній і нижній межі частот, які використовуються для визначення появи і від’їзду машини.

*ηητ5.ϊ5_                     ….. ;*.·?………………… :…………..

#define upper_threshold_freq 600

// В кілогерцах, ділимо частоту на 10

// Тобто в даному випадку це б кГц (6000/10 = 600)

#define lower_threshold_freq 200

// В кілогерцах, ділимо частоту на 10

// Тобто в даному випадку це 2 кГц (2000/10 = 200)

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

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

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