Как да се измери разстоянието между две точки с помощта на Arduino?

В електрониката през повечето време ултразвуковите сензори се използват за измерване на разстоянието от една конкретна точка до друга. Много е лесно да напишете код на дъската Arduino и да интегрирате ултразвуков сензор за изпълнение на тази задача. Но в тази статия ще възприемем различен подход. Ще използваме два отделни ултразвукови сензора, които ще бъдат интегрирани с два отделни Arduino. Тези два модула ще бъдат поставени в две различни точки, между които трябва да се измери разстоянието. Единият сензор ще бъде направен като приемник, а другият - като предавател. По този начин ще можем да измерим разстоянието между тях само чрез локализиране на позицията на предавателя с помощта на много ултразвукови приемници. Техниката, която използваме тук, се нарича Триангулация.



Измерване на разстояние с помощта на Arduino

Използваната тук техника е просто полезна за системи с малък мащаб, където се намира малко разстояние. За да се приложи в голям мащаб, със сигурност са необходими някои модификации. Всички предизвикателства, пред които е било изправено по време на изпълнението на този проект, са разгледани по-долу.



Как да използвам Arduino и ултразвуков сензор за измерване на разстоянието?

Тъй като знаем резюмето зад проекта, нека продължим напред и да съберем допълнителна информация, за да стартираме проекта.



Стъпка 1: Събиране на компонентите (хардуер)

Ако искате да избегнете неудобства в средата на който и да е проект, най-добрият подход е да направите пълен списък на всички компоненти, които ще използваме. Втората стъпка, преди да започнете да правите веригата, е да преминете през кратко проучване на всички тези компоненти. Списък на всички компоненти, от които се нуждаем в този проект, е даден по-долу.



  • Джъмперни проводници
  • 5V AC към DC адаптер (x2)

Стъпка 2: Събиране на компонентите (софтуер)

  • Proteus 8 Professional (Може да се изтегли от Тук )

След като изтеглите Proteus 8 Professional, проектирайте схемата върху него. Тук съм включил софтуерни симулации, за да е удобно за начинаещи да проектират схемата и да направят подходящи връзки на хардуера.

Стъпка 3: Работа на HCR-05

Тъй като вече знаем основната резюме на нашия проект, нека продължим напред и да преминем през кратко проучване на работата на HCR-05 . Можете да разберете основната работа на този сензор от следната диаграма.

Този сензор има два щифта, спусъчен щифт, и еко щифт които се използват за измерване на разстоянието между две конкретни точки. Процесът се инициира чрез изпращане на ултразвукова вълна от сензора. Тази задача се извършва чрез задействане на тригера за 10us. Веднага след изпълнението на тази задача от предавателя се изпраща 8 звукови изблика на ултразвукови вълни. тази вълна ще се движи във въздуха и веднага щом удари обект по пътя си, ще отвърне на удара и ще бъде получена от приемника, вграден в сензора.



Когато ултразвуковата вълна ще бъде приета от приемника след отразяване на сензора, той ще постави еко щифт до високо състояние. Този щифт ще остане във високо състояние за времето, което ще бъде точно равно на времето, необходимо на ултразвуковата вълна да премине от предавателя и обратно към приемника на сензора.

За да направите своя ултразвуков сензор предавател само, просто направете триъгълния щифт като изходен щифт и изпратете висок импулс към този щифт за 10us. Ултразвуков взрив ще бъде иницииран веднага щом това стане. Така че, когато вълната трябва да се предава, трябва да се контролира само спусъка на ултразвуковия сензор.

Няма как да направите ултразвуковия сензор като само приемник тъй като издигането на ECO щифта не може да се контролира от микроконтролера, защото е свързано с триъгълния щифт на сензора. Но има едно нещо, което можем да направим, е да покрием предавателя на този ултразвуков сензор с тиксо, за да не излиза UV вълна. Тогава ECO щифтът на този предавател няма да бъде засегнат от предавателя.

Стъпка 4: Работа на веригата

Сега, тъй като сме накарали и двата сензора да работят отделно като предавател и приемник, има голям проблем, с който се сблъскваме тук. Приемникът няма да знае времето, необходимо на ултразвуковата вълна да премине от предавателя към приемника, защото не знае кога точно е предадена тази вълна.

За да разрешим този проблем, трябва да изпратим a ВИСОКО сигнал към ECO на приемника веднага щом се предаде ултразвуковата вълна към сензора на предавателя. Или с прости думи, можем да кажем, че ECO на приемника и спусъка на предавателя трябва да бъдат изпратени едновременно до HIGH. Така че, за да постигнем това, по някакъв начин ще накараме спусъка на приемника да премине високо, веднага щом спусъка на предавателя стане висок. Този спусък на приемника ще остане висок, докато ECO щифтът премине НИСКО . Когато ултразвуков сигнал ще бъде получен от ECO щифта на приемника, той ще отиде НИСКО. Това ще означава, че спусъка на сензора на предавателя току-що е получил ВИСОКИ сигнал. Сега, щом ECO спадне, ще изчакаме известно закъснение и ще поставим спусъка на приемника HIGH. По този начин задействанията на двата сензора ще бъдат синхронизирани и разстоянието ще бъде изчислено, като се знае закъснението във времето на движението на вълната.

Стъпка 5: Сглобяване на компонентите

Въпреки че използваме само предавателя на единия ултразвуков сензор и приемника на другия, но е задължително да свържете всичките четири извода на ултразвуков сензор до Arduino. За да свържете веригата, следвайте стъпките, дадени по-долу:

  1. Вземете два ултразвукови сензора. Покрийте приемника на първия сензор и предавателя на втория сензор. За тази цел използвайте бяла тиксо и се уверете, че тези две са напълно покрити, така че даден сигнал да не напуска предавателя на втория сензор и да не попада сигнал в приемника на първия сензор.
  2. Свържете два Arduino на две отделни платки и свържете съответните им сензори с тях. Свържете задействащия щифт към pin9 на Arduino и ecoPin към pin10 на Arduino. Включете ултразвуковия сензор от 5V на Arduino и общите всички основания.
  3. Качете приемния код в Arduino на приемника и предавателния код в Arduino на предавателя.
  4. Сега отворете серийния монитор на приемащата страна и отбележете разстоянието, което се измерва.

Схемата на този проект изглежда така:

Електрическа схема

Стъпка 6: Първи стъпки с Arduino

Ако все още не сте запознати с Arduino IDE, не се притеснявайте, защото по-долу е обяснена поетапна процедура за настройка и използване на Arduino IDE с платка за микроконтролер.

  1. Изтеглете най-новата версия на Arduino IDE от Arduino.
  2. Свържете вашата платка Arduino Nano към вашия лаптоп и отворете контролния панел. в контролния панел щракнете върху Хардуер и звук . Сега кликнете върху Устройства и принтери. Тук намерете порта, към който е свързана вашата платка за микроконтролер. В моя случай е така COM14 но при различните компютри е различно.

    Намиране на порт

  3. Щракнете върху менюто Инструмент. и настройте дъската на Arduino Nano от падащото меню.

    Съвет за настройка

  4. В същото меню на инструмента задайте номера на порта, който сте наблюдавали преди в Устройства и принтери .

    Настройка на порт

  5. В същото меню на инструмента задайте процесора на ATmega328P (стар Буутлоудър ).

    Процесор

  6. Изтеглете кода, приложен по-долу, и го поставете във вашия ID на Arduino. Щракнете върху качване бутон, за да запишете кода на дъската на вашия микроконтролер.

    Качване

За да изтеглите кода, Натисни тук.

Стъпка 7: Разбиране на кодекса

Кодът, използван в този проект, е много прост и доста добре коментиран. В приложената папка има два файла с кодове. Кодът на предавателя и кодът на страната на приемника са дадени поотделно. Ще качим тези кодове в двете съответни дъски на Arduino. Въпреки че е обяснително, това е описано накратко по-долу.

Код за страната на предавателя

1. В началото се инициализират щифтове на платката Arduino, които ще бъдат свързани към ултразвуковия сензор. След това се декларират променливите, които ще се използват за съхраняване на стойности за изчисляване на времето и разстоянието по време на изпълнението на кода.

// дефинира номера на пинове const int trigPin = 9; // Свържете тригера на ултразвуков сензор към щифт 9 на Arduino const int echoPin = 10; // Свържете еко щифта на ултразвуков сензор към pin10 на Arduino // дефинира променливи продължителност; // променлива за съхраняване на времето, необходимо на ултразвуковата вълна t пътуване int разстояние; // променлива за изчисляване на разстоянието

2. настройка за празнота () е функция, която работи само веднъж в началото, когато платката е включена или е натиснат бутонът за активиране. Тук и двата щифта на Arduino са обявени за използвани като ВХОД и ИЗХОД . В тази функция е зададена скорост на предаване. Скоростта на предаване е скоростта в битове в секунда, с която микроконтролерът комуникира с ултразвуковия сензор.

void setup () {pinMode (trigPin, OUTPUT); // Задава trigPin като изходен pinMode (echoPin, INPUT); // Задава echoPin като Input Serial.begin (9600); // Стартира серийната комуникация}

3. цикъл void () е функция, която се изпълнява отново и отново в цикъл. Тук сме кодирали микроконтролера, така че той изпраща HIGH сигнал към тригерния щифт на ултразвуковия сензор, изсъхва за 20 микросекунди и изпраща LOW сигнал към него.

void loop () {// Задава trigPin на HIGH състояние за 10 микро секунди digitalWrite (trigPin, HIGH); // изпращаме HIGH сигнал на спусъка на първия сензор delayMicroseconds (10); // изчакваме 10 микро секунди digitalWrite (trigPin, LOW); // изпращаме LOW сигнал към спусъка на първото закъснение на сензора (2); // изчакайте 0,2 секунди}

Код за страната на приемника

1. В началото се инициализират щифтове на платката Arduino, които ще бъдат свързани към ултразвуковия сензор. След това се декларират променливите, които ще се използват за съхраняване на стойности за изчисляване на времето и разстоянието по време на изпълнението на кода.

// дефинира номера на пинове const int trigPin = 9; // Свържете тригера на ултразвуков сензор към щифт 9 на Arduino const int echoPin = 10; // Свържете еко щифта на ултразвуков сензор към pin10 на Arduino // дефинира променливи продължителност; // променлива за съхраняване на времето, необходимо на ултразвуковата вълна t пътуване int разстояние; // променлива за изчисляване на разстоянието

2. настройка за празнота () е функция, която работи само веднъж в началото, когато платката е включена или е натиснат бутонът за активиране. Тук и двата щифта на Arduino са декларирани, че се използват като INPUT и OUTPUT. В тази функция е зададена скорост на предаване. Скоростта на предаване е скоростта в битове в секунда, с която микроконтролерът комуникира с ултразвуковия сензор.

void setup () {pinMode (trigPin, OUTPUT); // Задава trigPin като изходен pinMode (echoPin, INPUT); // Задава echoPin като Input Serial.begin (9600); // Стартира серийната комуникация}

3. void Trigger_US () е функция, която ще бъде извикана за фалшиво задействане на тригера на втория ултразвуков сензор. Ще синхронизираме времето за задействане на тригера на двата сензора.

void Trigger_US () {// Фалшив тригер на американския сензор digitalWrite (trigPin, HIGH); // Изпращане на HIGH сигнал към задействащия щифт на Second sensor delayMicroseconds (10); // изчакваме 10 micro secnds digitalWrite (trigPin, LOW); // изпращане на LOW сигнал до втория изпращач на щифта на спусъка}

Четири. void Calc () е функция, която се използва за изчисляване на времето, необходимо на ултразвуковия сигнал да премине от първия сензор до втория сензор.

void Calc () // функция за изчисляване на времето, необходимо на ултразвуковата вълна за пътуване {продължителност = 0; // продължителността първоначално е зададена на нула Trigger_US (); // извикваме функцията Trigger_US while (digitalRead (echoPin) == HIGH); // докато състоянието на eo pin с голямо закъснение (2); // поставяме закъснение от 0,2 секунди Trigger_US (); // извикваме продължителността на функцията Trigger_US = pulseIn (echoPin, HIGH); // изчисляване на необходимото време}

5. Тук в цикъл void () функция, ние изчисляваме разстоянието, като използваме времето, необходимо на ултразвуковия сигнал за пътуване от първия сензор до втория сензор.

цикъл void () {Pdistance = разстояние; Calc (); // извикваме функцията Calc () разстояние = продължителност * 0,034; // изчисляване на разстоянието, изминато от ултразвуковата вълна, ако (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ('Измерено разстояние:'); // печат на сериен монитор Serial.println (разстояние / 2); // печат на сериен монитор} //Serial.print('Distance: '); //Serial.println(distance/2); забавяне (500); // изчакайте 0,5 секунди}