Arduino:Примеры/Радиальный ультразвуковой датчик расстояния
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Черновик |
Радиальный ультразвуковой датчик расстояния
Данный пример демонстрирует построение радиального дальномера, с помощью ультразвукового датчика расстояния, установленного на серводвигателе и 4 светодиодов. Расстояние измеряется в каждой из 4 позиций(15, 65, 115, 165 градусов),а яркость четырех светодиодов соответствует расстоянию до объекта.
В этом примере используется стабилизатор напряжения на 5В L4940V5 для питания сервопривода. Это является лучшим решением, по нескольким причинам. Хоть и в неподвижном положении сервоприводы потребляют небольшой ток, при выполнении команд ток потребления может достигать нескольких сотен миллиампер, что может привести к скачкам напряжения. При недостаточном напряжении питания вал сервопривода будет перемещаться неустойчиво. Поэтому сервоприводам необходимо обеспечить отдельным источником питания.
Необходимое оборудование
- Плата Arduino;
- Серводвигатель;
- Ультразвуковой датчик HC-SR04
- Провода-перемычки;
- Стабилизатор напряжения на 5V L4940V5;
- Конденсатор 1 мкФ;
- Конденсатор 22 мкФ;
- Светодиоды, 4шт.;
- Резисторы 1 кОм, 4шт;
Цепь
Соберите схему согласно монтажной схеме. Прикрепите ультразвуковой датчик к серводвигателю.
ОСТОРОЖНО! Выход стабилизатора напряжения не нужно соединять с шиной 5V платы Arduino. Соединить необходимо только шины земли стабилизатора и платы Arduino. |
Обратите внимание на конденсаторы на входе и выходе стабилизатора напряжения, они устраняют пульсации напряжения.
Код
#include <Servo.h> // подключение библиотеки Servo
#define SERVO 9 // вывод для подключения сигнального провода серводвигателя
#define LED1 3 // вывод для подключения LED1
#define LED2 5 // вывод для подключения LED2
#define LED3 6 // вывод для подключения LED3
#define LED4 11 // вывод для подключения LED4
#define TRIGPIN 8 // вывод для подключения сигнального провода с выводом trig ультразвукового датчика
#define ECHOPIN 7 // вывод для подключения сигнального провода с выводом echo ультразвукового датчика
Servo myServo; // создаем объект класса Servo
int dist1 = 0; // переменная для хранения дистанции в первой позиции
int dist2 = 0; // переменная для хранения дистанции в второй позиции
int dist3 = 0; // переменная для хранения дистанции в третьей позиции
int dist4 = 0; // переменная для хранения дистанции в четвертой позиции
float v=331.5+0.6*20; // скорость звука при температуре 20 градусов Цельсия(вы можете указать свое значение вместо 20) в м/с
void setup()
{
myServo.attach(SERVO); // подключаем объект серводвигателя к контакту SERVO (т.е. 9-му)
pinMode(LED1, OUTPUT); // конфигурируем вывод LED1(т.е. 3-ий) как выход
pinMode(LED2, OUTPUT); // конфигурируем вывод LED2(т.е. 5-ий) как выход
pinMode(LED3, OUTPUT); // конфигурируем вывод LED3(т.е. 6-ий) как выход
pinMode(LED4, OUTPUT); // конфигурируем вывод LED4(т.е. 11-ий) как выход
pinMode(TRIGPIN, OUTPUT); // конфигурируем вывод TRIGPIN (8-ой) как выход
pinMode(ECHOPIN, INPUT); // конфигурируем вывод ECHOPIN (7-ой) как вход
}
void loop()
{
// Осуществляем перемещение вала серводвигателя по 4 позициям
dist1 = readDistance(15); // Измеряем расстояния с помощью ультразвукового датчика при перемещении вала серводвигателя на 15 градусов
analogWrite(LED1, dist1); // Регулируем яркость светодиода LED1
delay(300); // Задержка перед следующим измерением
dist2 = readDistance(65); // Измеряем расстояния с помощью ультразвукового датчика при перемещении вала серводвигателя на 65 градусов
analogWrite(LED2, dist2); // Регулируем яркость светодиода LED2
delay(300); // Задержка перед следующим измерением
dist3 = readDistance(115); // Измеряем расстояния с помощью ультразвукового датчика при перемещении вала серводвигателя на 115 градусов
analogWrite(LED3, dist3); // Регулируем яркость светодиода LED3
delay(300); // Задержка перед следующим измерением
dist4 = readDistance(165); // Измеряем расстояния с помощью ультразвукового датчика при перемещении вала серводвигателя на 165 градусов
analogWrite(LED4, dist4); // Регулируем яркость светодиода LED4
delay(300); // Задержка перед следующим измерением
}
int readDistance(int pos)
{
myServo.write(pos); // перемещаем вал сервопривода на 'pos' градусов
delay(600); // задержка
int dist = echoDistance(); // чтение данных с ультразвукового датчика расстояния
dist = constrain(dist, 0, 400); // ограничение значения
dist = map(dist, 0, 400, 0, 255); // преобразование к необходимому диапазону
Serial.println(dist);
return dist; // возврат значения расстояния, измеренного в текущей позиции вала серводвигателя
}
float echoDistance()
{
digitalWrite(TRIGPIN, LOW); // подаем низкий уровень сигнала
delayMicroseconds(3); // ждем 3 мкс
digitalWrite(TRIGPIN, HIGH); // подаем высокий уровень сигнала
delayMicroseconds(5); // ждем 5 мкс
digitalWrite(TRIGPIN, LOW); // подаем низкий уровень сигнала
float tUs = pulseIn(ECHOPIN, HIGH); // вычисляем длительность перехода ECHOPIN из HIGH в LOW
float t = tUs / 2000000; // переводим мкс -> с (делим на 1000000) и отрезаем промежуток времени затраченный звуком на обратный путь (делим на 2)
float d = t*v*100; // дистанция в см
return d; // возвращаем значение дистанции
}
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы с устаревшим атрибутом подсветки синтаксиса «enclose»
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Черновик
- Надо доработать
- Черновой вариант статьи
- Черновой вариант
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino