Сензор за разстояние HC-SR04 и Arduino UNO R3, Ubuntu Real Notes - Mikrotik
Задача: Да разберете как да свържете сензора за разстояниеHC-SR04 къмArduino UNO R3
Сензорът за разстояние, който имамHC-SR04 с него, мога да определя разстоянието до всеки обект.- Какъв е обхватът му?
- Как да го свържете къмArduino UNO R3
- И каква скица трябва да се използва за визуализиране на работата, защото не само това, след като сте разбрали връзката, вие също трябва по някакъв начин да видите плода на вашия труд.
IDE система заArduino, работеща наUbuntu Trusty Desktop моя домашен лаптоп.
Не твърдя, че сам измислих всичко по-долу, просто овладявам вече направеното (изучавам) и не повтарям след някой като този с нахлуване в непозната област на микроелектрониката, уви, не мога да разбера.
Ами да тръгваме:
Ултразвуковият далекомерHC-SR04 се основава на принципа на ехолокацията. Той излъчва звукови импулси в пространството и получава сигнал, отразен от препятствие. Разстоянието до обекта се определя от времето на разпространение на звуковата вълна до препятствието и обратно.
Модел- Захранващо напрежение: 5V DC
- Ток на покой: 2mA
- Работен ток: 15mA
- Ъгъл на наблюдение: измерва разстоянието по формулата:S (разстояние) = V (скорост) * T (време)
Как да се свържа:
сензорHC-SR04 GND (маса ) -Arduino UNO R3 (Захранване: GND)
HC-SR04 Ехо сензор () - Arduino UNO R3 (Цифров вход:11 порт)
- сензорHC-SR04 Trig () - Arduino UNO R3 (Цифров вход :12 порт)
- HC-SR04 VCC сензор () - Arduino UNO R3 (Захранване :5V )
Сега свързвамUSB кабела (USB A - USB B) към платкатаArduino UNO R3 и към лаптопа.
Сега ще анализирам следната скица, за да получа разстоянието от сензора до обекта, резултатът от работата ще бъде изведен към серийния порт. Стартирамсредата за разработка на Arduino: Приложения - Програмиране - Arduino IDE
Сега нека напишем скица, която определя разстоянието до препятствието и я извежда към серийния порт. Първо задаваме номерата на пиновеTRIG иECHO - това са пинове12 и11. След това декларираме тригера като изход, а ехото като вход. Инициализираме серийния порт със скорост9600 бода. При всяко повторение на цикълаloop() ние четем разстоянието и го извеждаме към порта.
c onst int trigPin = 12;
const int echoPin = 11;void setup()
pinMode(trigPin, OUTPUT); // тригер - изходен щифт
pinMode(echoPin, INPUT); // ехо - вход
Serial.begin(9600); // инициализация последна. порт
>void loop()
далечно разстояние = getDistance(); // получаваме разстоянието от сензора
Serial.println(разстояние); // изход към сериен порт
закъснение(100);
>// Определяне на разстоянието до обекта в cm
long getDistance()
long distacne_cm = getEchoTiming() * 1,7 * 0,01;
върни distacne_cm;
>// Дефиниране на време на забавяне
long getEchoTiming()
digitalWrite(trigPin, LOW);
закъснение Микросекунди(2);
digitalWrite(trigPin, HIGH); // генериране на стартов импулс
закъснение Микросекунди(10);
digitalWrite(trigPin, LOW);
// определяне на продължителността на HIGH ниво на щифта echoPin, ms:
дълга продължителност = pulseIn(echoPin, HIGH);
продължителност на връщане;
ФункциятаgetEchoTiming() генерира задействащ импулс. Той просто създава този 10-микросекунден импулс, който е тригер за далекомера да започне да излъчва звуков пакет в космоса. Тогава тя си спомня времето от началото на предаването на звуковата вълна до пристигането на ехото.
ФункциятаgetDistance() изчислява разстоянието до обект. От училищния курс по физика помним, че разстоянието е равно на скоростта по времето:S = V×t Скорост на звука във въздуха340 m/s, знаем времето в микросекунди (променливапродължителност ). Разделете на1 000 000, за да получитеduration в секунди. Тъй като звукът пътува два пъти по-голямо разстояние - до обекта и обратно - все пак трябва да разделите резултата наполовина. Така се оказва, че разстоянието до обекта еS = 34 000 см/сек × продължителност / 1 000 000 сек / 2 = 1,7 см/сек / 100, което е, което написахме в скицата.
Микроконтролерът извършва операцията умножение по-бързо от операцията деление, следователно:100 Замених с еквивалента× 0,01. И как да го определим?
След като все още съм в средата за разработка, щраквам върху „Проверка “, така че нямам никакви грешки, сега „Качване “ към заявката през кой сериен порт да кача скицата, посочвам, че през устройството:/dev/ttyACM0 и щраквам върхуОК.
Ако скицата е качена, трябва да пише „Качването е завършено “. Аз също нямам проблем с това.
За да проверите дали всичко по-горе работи, отворете прозорец за извеждане на информация от серийния порт отArduino IDE :Услуга - Монитор на портове и тук се появиха числата:
Като насочите сензора или го блокирате с дланта си, информацията на серийния порт ще се промени.
Сега същата връзка на сензора иArduino, но използвайки библиотеката, например: библиотекаultrasonic
за да използвате тази библиотека, трябва да я поставите вдиректорията с предварително инсталирани библиотеки на Arduino IDE:
$ намерете библиотеки grep arduino
библиотеките се намират в директорията:/usr/share/arduino/libraries
$ sudo mkdir /usr/share/arduino/libraries/ultrasonic
$ sudo mv Ultrasonic/* /usr/share/arduino/libraries/ultrasonic/
Сега самата скица с нейното приложение, но първо трябва да изчистите какво е написано вArduino UNO R3, за това създаваме скица във формата:Файл - Създаване
void setup()<>;
void loop()<>;
Щраквам върху "Проверка " - "Изтегляне ".
Създавам нова скица с помощта на библиотеката:Файл - Създаване
#включване
// включва библиотеката
Ултразвуков ултразвук (12, 11); // Trig - 12, Echo - 11
Serial.begin(9600); // инициализация последна. порт
float dist_cm = ultrasonic.Ranging(CM); // разстояние в cm
Serial.println(dist_cm); // отпечатване на разстояние до порт
закъснение(100);
Резултатът от работата му е същият - мониторът на серийния порт показва разстоянието до обекта в сантиметри.
След като все още съм в средата за разработка, щраквам върху „Проверка “, така че нямам никакви грешки, сега „Изтегляне“ на заявката през кой сериен порт да кача скицата, посочвам, че през устройството:/dev/ttyACM0 и щраквам върхуOK.
Ако скицата е заредена, тогава трябва да има надпис „Зарежданезавършен ". Аз също нямам проблем с това.
За да проверим дали всичко по-горе работи, отваряме прозорец за извеждане на информация от серийния порт отArduino IDE : “Услуга ” - “Монитор на портове ” и числата се завъртяха:
Това са стойности в сантиметри.
От библиотекаultrasonic.h
- CM е сантиметри
- INC е инчове
Ако напишетеfloat dist_cm = ultrasonic.Ranging(INC); в скицата, разстоянието ще се покаже в инчове.
А сега моите въпроси към горното:
- Как да разберете кои аргументи на функция какво правят?
- ако има помощ за използването на библиотеката
- Trig — връзка към12 порт от сензор към платкаArduino
- Echo — връзка към порт13 от сензор към платкаArduino
Serial.begin(9600) → свържете се къмArduino сериен порт чрез интерфейс/dev/ttyACM0 със скорост9600
Следните параметри са предварително дефинирани в библиотекатаultrasonic.h :
- #define CM 1 → това са сантиметри
- #define INC 0 → това са инчове
- float dist_cm = ultrasonic.Ranging(CM) → вземете разстоянието в сантиметри
- Serial.println(dist_cm) → отпечата полученото разстояние
Също така в директорията/libraries/ultrasonic има примери, напримерUltrasonicDemo.pde описва как да свържете сензора към дисплея иArduino на място, така че измереното разстояние да не се показва на „Port Monitor “, а на свързания дисплей.
Използвайте прокси ((блокиран от Roskomnadzor, използвайте vpn или прокси)), когато използвате клиент на Telegram:
ще се появява по-често :)
ICD карта:4432-7300-2472-8059 Yandex пари: 41001520055047