Проект tinyAVR 25. Индуктивный датчик появления автомобиля и счетчик

November 10, 2014 by admin Комментировать »

Вас никогда не удивляло, что в момент приближения вашего автомобиля к светофору красный сигнал в нем меняется на зеленый? Или что при въезде на территорию автомобильного ресторана автоматически звучит приветственное сообщение?

Не удивляйтесь, поскольку в этом разделе тоже предлагается схема, которая позволит вам обнаружить приближающийся автомобиль. Существует много способов обнаружения автомобиля. Обычно автомобиль имеет большой металлический кузов и в присутствии такой большой массы металла электрические характеристики катушки индуктивности изменяются. Замерив это изменение характеристик, мы сможем обнаружить присутствие автомобиля. Блок-схема подобной системы приведена на рис. 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 с.: ил. — (Электроника)

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты