Да би било који пројекат заживео, морамо да користимо сензоре. Сензори делују као очи и уши за све уграђене апликације, помаже дигиталном микроконтролеру да разуме шта се заправо догађа у овом стварном аналогном свету. У овом упутству ћемо научити како повезати ултразвучни сензор ХЦ-СР04 са ПИЦ микроконтролером.
ХЦ-СР04 је ултразвучни сензор који се може користити за мерење растојања било где између 2цм до 450цм (теоријски). Овај сензор се показао достојним уклапањем у многе пројекте који укључују откривање препрека, мерење удаљености, мапирање околине итд. На крају овог чланка научићете како овај сензор ради и како га повезати са микроконтролером ПИЦ16Ф877А за мерење удаљености и приказа на ЛЦД екрану. Звучи занимљиво зар не !! Па кренимо…
Потребни материјали:
- ПИЦ16Ф877А МЦУ са подешавањем програмирања
- ЛЦД екран 16 * 2
- Ултразвучни сензор (ХЦ-СР04)
- Повезивање жица
Како ради ултразвучни сензор?
Пре него што наставимо даље, требали бисмо знати како ради ултразвучни сензор како бисмо могли много боље да разумемо овај водич. Ултразвучни сензор који се користи у овом пројекту приказан је у наставку.
Као што видите, има два кружна ока попут избочина и четири затича који излазе из њега. Две пројекције попут ока су ултразвучни талас (у даљем тексту амерички талас) предајник и пријемник. Предајник емитује амерички талас на фреквенцији од 40Хз, тај талас путује кроз ваздух и рефлектује се назад кад осети неки предмет. Повратне таласе посматра пријемник. Сада знамо колико је времена потребно да се овај талас одбије и врати, а брзина америчког таласа је такође универзална (3400цм / с). Користећи ове информације и доленаведене средњошколске формуле можемо израчунати пређену удаљеност.
Удаљеност = Брзина × Време
Сад кад знамо како амерички сензор ради, дозволите нам како се он може повезати са било којим МЦУ / ЦПУ-ом помоћу четири пина. Ова четири пина су Вцц, Триггер, Ецхо и Гроунд. Модул ради на + 5В, па се за напајање модула користе Вцц и уземљење. Преостала два пина су И / О пинови помоћу којих комуницирамо са нашим МЦУ. Окидач Пин треба прогласити као излазни пин и направио максимум за 10ус, то ће преносити амерички талас у ваздуху као 8 циклуса звучног праска. Једном када се примети талас, Ецхо пин ће се повисити за тачан временски интервал који је требало америчком таласу да се врати натраг у сензорски модул. Стога ће овај Ецхо пин бити декларисан као улаза тајмер ће се користити за мерење колико је дуго пин био висок. То би даље могло да се разуме на доњем временском дијаграму.
Надам се да сте постигли привремени начин повезивања овог сензора са ПИЦ-ом. У овом упутству користит ћемо модул Тајмер и ЛЦД модул и претпостављам да сте им упознати, ако не, вратите се на доље наведени водич јер ћу прескочити већину информација повезаних с њим.
- ЛЦД повезивање са ПИЦ микроконтролером
- Разумевање тајмера у ПИЦ микроконтролеру
Кружни дијаграм:
Комплетна шема кола за повезивање ултразвучног сензора са ПИЦ16Ф877А приказана је испод:
Као што је приказано, коло не укључује ништа више од ЛЦД екрана и самог ултразвучног сензора. Амерички сензор може се напајати са + 5В, па га стога директно напаја регулатор напона 7805. Сензор има један излазни пин (окидачки пин) који је повезан на пин 34 (РБ1), а улазни пин (Ецхо пин) повезан је на пин 35 (РБ2). Комплетна пин веза приказана је у доњој табели.
С.Но: |
ПИЦ број пина |
Пин Наме |
Повезан |
1 |
21 |
РД2 |
РС ЛЦД |
2 |
22 |
РД3 |
Е ЛЦД |
3 |
27 |
РД4 |
Д4 ЛЦД-а |
4 |
28 |
РД5 |
Д5 ЛЦД-а |
5 |
29 |
РД6 |
Д6 ЛЦД-а |
6 |
30 |
РД7 |
Д7 ЛЦД-а |
7 |
34 |
РБ1 |
Окидач САД |
8 |
35 |
РБ2 |
Одјек САД |
Програмирање вашег ПИЦ микроконтролера:
Комплетан програм за овај туторијал је дат на крају ове странице, даље у наставку објаснио сам вам код у мале значење које треба да разумете. Као што је раније речено, програм укључује концепт ЛЦД повезивања и тајмера који неће бити детаљно објашњени у овом упутству, јер смо их већ обрађивали у претходним водичима.
Унутра је главна функција коју започињемо иницијализацијом ИО пинова и других регистара као и обично. Дефинишемо ИО пинове за ЛЦД и амерички сензор, а такође покрећемо регистар Тимер 1 подешавањем да ради на 1: 4 пре-скалару и да користи интерни сат (Фосц / 4)
ТРИСД = 0к00; // ПОРТД декларисан као излаз за повезивање ЛЦД ТРИСБ0 = 1; // Дефинишемо пин РБ0 као улаз који ћемо користити као пин прекида ТРИСБ1 = 0; // Окидачки пин америчког сензора шаље се као излазни пин ТРИСБ2 = 1; // Ецхо пин америчког сензора постављен је као улазни пин ТРИСБ3 = 0; // РБ3 је излазни пин за ЛЕД Т1ЦОН = 0к20; // 4 прес-скаларни и унутрашњи сат
Тајмер 1 је 16-битни тајмер који се користи у ПИЦ16Ф877А, регистар Т1ЦОН контролира параметре модула тајмера и резултат ће бити ускладиштен у ТМР1Х и ТМР1Л јер ће 16-битни резултат првих 8 бити сачуван у ТМР1Х, а следећих 8 у ТМР1Л. Овај тајмер се може укључити или искључити помоћу ТМР1ОН = 0 и ТМР1ОН = 1 респективно.
Сада је тајмер спреман за употребу, али морамо да пошаљемо америчке таласе ван сензора, да бисмо то урадили морамо да држимо окидач пин високим 10 уС, то се ради помоћу следећег кода.
Окидач = 1; __делаи_ус (10); Окидач = 0;
Као што је приказано на временском дијаграму изнад, Ецхо пин ће остати низак све док се талас не врати назад, а затим ће ићи високо и остати висок тачно време потребно за повратак таласа. Ово време мора да се мери помоћу модула Тимер 1, што се може урадити доњом линијом
док је (Ецхо == 0); ТМР1ОН = 1; вхиле (Ецхо == 1); ТМР1ОН = 0;
Једном када се време измери, резултујућа вредност ће бити сачувана у регистрима ТМР1Х и ТМР1Л, ови регистри се морају удружити да би се прикупила 16-битна вредност. То се постиже помоћу линије испод
тиме_такен = (ТМР1Л - (ТМР1Х << 8));
Овај тиме_такен ће бити у бајтовима форме, да бисмо добили стварну вредност времена морамо користити доњу формулу.
Време = (16-битна вредност регистра) * (1 / Интерни сат) * (Пре-скала) Интерни сат = Фосц / 4 Где је у нашем случају Фосц = 20000000Мхз и Пре-сцале = 4 Отуда ће вредност Интерног сата 5000000Мхз и вредност времена биће Тиме = (16-битна вредност регистра) * (1/5000000) * (4) = (16-битна вредност регистра) * (4/5000000) = (16-битна вредност регистра) * 0,0000008 секунди (ИЛИ) Време = (вредност 16-битног регистра) * 0,8 микро секунди
У нашем програму вредност 16-битног регистра се чува у променљивој тиме_такен и стога се доњи ред користи за израчунавање тиме_такта у микро секундама
заузето време = заузето време * 0,8;
Следеће морамо пронаћи како израчунати удаљеност. Као што знамо растојање = брзина * време. Али овде би резултат требало поделити са 2, јер талас покрива и растојање преноса и удаљеност пријема. Брзина нашег таласа (звука) је 34000цм / с.
Удаљеност = (Брзина * Време) / 2 = (34000 * (16-битна вредност регистра) * 0.0000008) / 2 Удаљеност = (0.0272 * 16-битна вредност регистра) / 2
Дакле, растојање се може израчунати у центиметрима као доле:
растојање = (0,0272 * заузето време) / 2;
Након израчунавања вредности удаљености и потребног времена, једноставно их морамо приказати на ЛЦД екрану.
Мерење удаљености помоћу ПИЦ-а и ултразвучног сензора:
Након успостављања веза и отпремања кода, експериментално подешавање би требало да изгледа отприлике овако приказано на доњој слици.
ПИЦ Перф плоча, приказана на овој слици, направљена је за нашу серију ПИЦ туторијала, у којој смо научили како да користимо ПИЦ микроконтролер. Можда ћете се желети вратити на те водиче за ПИЦ микроконтролер користећи МПЛАБКС и КСЦ8 ако не знате како да нарежете програм помоћу Пицкит-а 3, јер ћу прескочити све те основне информације.
Сада поставите објекат испред сензора и он би требао приказати колико је предмет удаљен од сензора. Такође можете приметити да је потребно време приказано у микро секундама да се талас пошаље и врати назад.
Можете преместити објекат на жељену удаљеност и проверити вредност која се приказује на ЛЦД-у. Успео сам да измерим растојање од 2 цм до 350 цм са тачношћу од 0,5 цм. Ово је сасвим задовољавајући резултат! Надам се да сте уживали у упутству и научили како сами нешто да направите. Ако сумњате, напустите их у одељку за коментаре испод или користите форуме.
Такође проверите повезаност ултразвучног сензора са другим микроконтролерима:
- Мерење даљине засновано на Ардуино и ултразвучном сензору
- Измерите удаљеност помоћу Распберри Пи и ултразвучног сензора ХЦСР04
- Мерење удаљености помоћу ХЦ-СР04 и АВР микроконтролера