За да оживее всеки проект, трябва да използваме сензори. Сензорите действат като очи и уши за всички вградени приложения, той помага на цифровия микроконтролер да разбере какво всъщност се случва в този истински аналогов свят. В този урок ще научим как да свързваме ултразвуков сензор HC-SR04 с микроконтролер PIC.
Най- HC-SR04 е ултразвуков сензор, който може да се използва за измерване на разстояние някъде между 2 см до 450 см (теоретично). Този сензор се е доказал като достоен, като се включи в много проекти, които включват откриване на препятствия, измерване на разстояние, картографиране на околната среда и т.н. В края на тази статия ще научите как работи този сензор и как да го свържете с микроконтролера PIC16F877A за измерване на разстоянието и дисплея на LCD екрана. Звучи интересно нали !! Така че нека да започнем…
Необходими материали:
- PIC16F877A MCU с настройка за програмиране
- LCD 16 * 2 дисплей
- Ултразвуков сензор (HC-SR04)
- Свързващи проводници
Как работи ултразвуков сензор?
Преди да продължим, трябва да знаем как работи ултразвуков сензор, за да можем да разберем този урок много по-добре. Ултразвуковият сензор, използван в този проект, е показан по-долу.
Както можете да видите, той има две кръгли очи като издатини и четири щифта, излизащи от него. Двете окоподобни проекции са ултразвукова вълна (наричана по-нататък американска вълна) предавател и приемник. Предавателят излъчва американска вълна с честота 40Hz, тази вълна пътува във въздуха и се отразява обратно, когато усети обект. Връщащите се вълни се наблюдават от приемника. Сега знаем времето, необходимо на тази вълна да се отрази и да се върне, а скоростта на американската вълна също е универсална (3400cm / s). Използвайки тази информация и формулите по-долу за гимназията, можем да изчислим изминатото разстояние.
Разстояние = Скорост × Време
След като вече знаем как работи американски сензор, нека да видим как той може да бъде свързан с всеки MCU / CPU с помощта на четирите пина. Тези четири щифта са съответно Vcc, Trigger, Echo и Ground. Модулът работи на + 5V и следователно Vcc и заземяващият щифт се използват за захранване на модула. Другите два щифта са I / O щифтовете, чрез които комуникираме с нашия MCU. В щифт спусъка трябва да се декларира като изходен пин и направи висока за 10US, това ще предаде на САЩ вълна във въздуха като 8 цикъл звуков взрив. След като вълната се наблюдава, Echo щифтът ще се издигне за точния интервал от време, който е бил използван от американската вълна, за да се върне обратно към сензорния модул. Следователно този Echo щифт ще бъде деклариран като входи таймер ще се използва за измерване колко дълго щифтът е бил висок. Това може допълнително да се разбере от времевата диаграма по-долу.
Надявам се, че сте стигнали до ориентировъчен начин за свързване на този сензор с PIC. Ще използваме модула Timer и LCD модула в този урок и предполагам, че сте запознати и с двете, ако не, моля, върнете се към съответния урок по-долу, тъй като ще пропусна повечето от информацията, свързана с него.
- LCD взаимодействие с PIC микроконтролер
- Разбиране на таймерите в PIC Microcontroller
Електрическа схема:
Пълната електрическа схема за свързване на ултразвуков сензор с PIC16F877A е показана по-долу:
Както е показано, схемата не включва нищо повече от LCD дисплей и самия ултразвуков сензор. Американският сензор може да се захранва от + 5V и следователно той се захранва директно от регулатора на напрежение 7805. Сензорът има един изходен щифт (Trigger pin), който е свързан към щифт 34 (RB1), а входният щифт (Echo pin) е свързан към щифт 35 (RB2). Пълната връзка на щифта е илюстрирана в таблицата по-долу.
S.No: |
ПИК номер на ПИК |
Име на ПИН |
Свързан с |
1 |
21. |
RD2 |
RS на LCD |
2 |
22. |
RD3 |
E на LCD |
3 |
27 |
RD4 |
D4 на LCD |
4 |
28 |
RD5 |
D5 на LCD |
5 |
29 |
RD6 |
D6 на LCD |
6 |
30 |
RD7 |
D7 на LCD |
7 |
34 |
RB1 |
Тригер на САЩ |
8 |
35 |
RB2 |
Ехо на САЩ |
Програмиране на вашия PIC микроконтролер:
Пълната програма за този урок е дадена в края на тази страница, по-нататък по-долу обясних кода на малки значения, за да можете да го разберете. Както беше казано по-рано, програмата включва концепцията за LCD интерфейс и таймер, които няма да бъдат обяснени подробно в този урок, тъй като вече сме ги разгледали в предишните уроци.
Вътре основната функция, която започваме с инициализиране на IO пиновете и други регистри, както обикновено. Определяме IO щифтовете за LCD и US сензор и също така инициираме регистъра Timer 1, като го настройваме да работи на 1: 4 предварително скаларен и да използва вътрешен часовник (Fosc / 4)
TRISD = 0x00; // PORTD деклариран като изход за свързване на LCD TRISB0 = 1; // Определете RB0 пина като вход, който да използвате като прекъсващ щифт TRISB1 = 0; // Задействащият щифт на американския сензор се изпраща като изходен щифт TRISB2 = 1; // Ехо пинът на US сензора е зададен като входен пин TRISB3 = 0; // RB3 е изходен щифт за LED T1CON = 0x20; // 4 скала и вътрешен часовник
Таймерът 1 е 16-битов таймер, използван в PIC16F877A, регистърът T1CON контролира параметрите на таймерния модул и резултатът ще се съхранява в TMR1H и TMR1L, тъй като при 16-битов резултат първите 8 ще се съхраняват в TMR1H и следващите 8 в TMR1L. Този таймер може да бъде включен или изключен, като се използват съответно TMR1ON = 0 и TMR1ON = 1.
Сега таймерът е готов за използване, но ние трябва да изпратим американските вълни от сензора, за да направим това, трябва да поддържаме щифта на спусъка висок за 10uS, това се прави от следния код.
Задействане = 1; __забавяне_us (10); Задействане = 0;
Както е показано на времевата диаграма по-горе, Echo щифтът ще остане нисък, докато вълната се върне обратно и след това ще отиде високо и ще остане висок за точното време, необходимо на вълните да се върнат обратно. Това време трябва да се измери от модула Таймер 1, което може да се направи от долния ред
докато (Ехо == 0); TMR1ON = 1; докато (Ехо == 1); TMR1ON = 0;
След като се измери времето, получената стойност ще бъде запазена в регистрите TMR1H и TMR1L, тези регистри трябва да бъдат събрани, за да се съберат, за да получат 16-битовата стойност. Това се прави с помощта на реда по-долу
time_taken = (TMR1L - (TMR1H << 8));
Този time_taken ще бъде във формата байтове, за да получим действителната стойност на времето, трябва да използваме формулата по-долу.
Time = (16-битова стойност на регистъра) * (1 / Вътрешен часовник) * (Предварително мащабиране) Вътрешен часовник = Fosc / 4 Където в нашия случай, Fosc = 20000000Mhz и Pre-scale = 4 Следователно стойността на Вътрешния часовник ще бъде 5000000Mhz и стойността на времето ще бъде Time = (16-битова стойност на регистъра) * (1/5000000) * (4) = (16-битова стойност на регистъра) * (4/5000000) = (16-битова стойност на регистъра) * 0,0000008 секунди (ИЛИ) Време = (16-битова стойност на регистъра) * 0,8 микро секунди
В нашата програма стойността на 16-битовия регистър се съхранява в променливата time_taken и следователно долният ред се използва за изчисляване на time_taken в микро секунди
взето време = взето време * 0,8;
След това трябва да намерим как да изчислим разстоянието. Както знаем разстояние = скорост * време. Но тук резултатът трябва да бъде разделен на 2, тъй като вълната покрива както разстоянието на предаване, така и разстоянието на приемане. Скоростта на нашата вълна (звук) е 34000cm / s.
Разстояние = (Скорост * Време) / 2 = (34000 * (16-битова стойност на регистъра) * 0.0000008) / 2 Разстояние = (0.0272 * 16-битова стойност на регистъра) / 2
Така разстоянието може да се изчисли в сантиметри, както по-долу:
разстояние = (0,0272 * време_заето) / 2;
След като изчислим стойността на разстоянието и времето, необходимо е просто да ги покажем на LCD екрана.
Измерване на разстоянието с помощта на PIC и ултразвуков сензор:
След като осъществите връзките и качите кода, вашата експериментална настройка трябва да изглежда подобно на това, показано на снимката по-долу.
Платката PIC Perf, показана на тази снимка, е направена за нашата серия уроци по PIC, в която научихме как да използваме PIC микроконтролера. Може да искате да се върнете към тези уроци за PIC Microcontroller, използващи MPLABX и XC8, ако не знаете как да запишете програма с помощта на Pickit 3, тъй като ще пропусна цялата тази основна информация.
Сега поставете обект пред сензора и той трябва да покаже на колко разстояние е обектът от сензора. Можете също така да забележите времето, през което вълната се предава и връща обратно в микросекунди.
Можете да преместите обекта на предпочитаното разстояние и да проверите стойността, която се показва на LCD дисплея. Успях да измерим разстоянието от 2 см до 350 см с точност до 0,5 см. Това е напълно задоволителен резултат! Надявам се, че ви е харесал урокът и сте се научили как да направите нещо сами. Ако имате някакви съмнения, пуснете ги в раздела за коментари по-долу или използвайте форумите.
Също така проверете взаимодействието на ултразвуков сензор с други микроконтролери:
- Измерване на разстояние на базата на Arduino и ултразвуков сензор
- Измерете разстоянието с помощта на ултразвуков сензор Raspberry Pi и HCSR04
- Измерване на разстояние с помощта на HC-SR04 и AVR микроконтролер