Подключаем ультразвуковой датчик к ардуино

Введение

В данной статье объясняется, как определить местоположение объекта с помощью Arduino, двух ультразвуковых датчиков и формулы Герона для треугольников. Движущихся частей в проекте нет.

Формула Герона позволяет рассчитать площадь любого треугольника, для которого известны все стороны. Как только вы узнаете площадь треугольника, вы сможете рассчитать положение одного объекта (относительно известной базовой линии), используя тригонометрию и теорему Пифагора.

Точность отличная. При использовании распространенных ультразвуковых датчиков HC-SR04 или HY-SRF05 возможны большие области обнаружения.

Конструкция проста: всё, что вам нужно, это острый нож, два сверла, паяльник и ножовка по дереву.

Изображения:

  • видеоролик, показывающий работу устройства;
  • фото 1 показывает собранный эхолокатор;
  • на фото 2 показан типовой дисплей. Объект отображается красной (мигающей) точкой;
  • на фото 3 показана тестовая установка, используемая на видео. Было необходимо установить два ультразвуковых датчика HY-SRF05 на 50 см ниже базовой линии, чтобы полностью «осветить» зону обнаружения со звуком.
Эхолокатор на двух датчиках и ArduinoЭхолокатор на двух датчиках и Arduino

Рисунок 1 – Собранный эхолокатор на двух датчиках и Arduino
Рисунок 2 – Скриншот экрана обнаружения объектаРисунок 3 – Тестовый стенд для проверки эхолокатора на Arduino

Схема

Схема проста, часть деталей запаивается на макетной плате.

Через скользящие контакты от Arduino к датчику VL53L03X подключаются контакты +5В, земля и две линии интерфейса I2C (SCL и SDA). К датчику Холла подключается земля, +5В и вывод D8 от Arduino. Также между +5В и D8 устанавливается резистор на 10кОм.

На повышающего преобразователя подаётся 5В. На плате построечным резистором устанавливается выходное напряжение примерно 12В. Эти 12В с выхода стабилизатора подключаются к выводам «питание мотора» модуля драйвера моторов. Так же по линии 12В устанавливается электролитический конденсатор, который нужен что бы драйвер мотора работал без сбоев (на плате его может не быть совсем, а даже когда запаян керамический или танталовый конденсатор, его ёмкости обычно недостаточно). 5В подключается к выводам «питание логики» драйвера моторов. Не перепутайте, где выводы «питание логики» и «питание мотора», иначе драйвер может выйти из строя.

Платы бывают разные, иногда плюс питания для мотора обозначается, допустим надписью VMOT, а плюс питания логики обозначаться как VCC. Выводов GND на плате может быть один или несколько, в данном случае это не имеет значения.

Выводы STEP, DIR и EN от драйвера моторов подключаются к Arduino, а выводы RESET и SLEEP соединяются между собой.

На платах с драйвером моторов A4988 обычно запаян подстроечный резистор, им настраивается ограничение по току для шагового мотора. Ограничение тока для шаговых моторов очень желательно настроить. Если ограничить ток слишком сильно, мотор под нагрузкой или не сможет вообще проворачивать вал или будут пропуски шагов. Если задать слишком большой ток и источник питания способен будет его обеспечить, мотор будет греться или его обмотки просто сгорят. Так же это абсолютно ненужная нагрузка на источник питания. При питании от аккумулятора это приведёт к тому, что он будет быстрей разряжаться. При питании от USB (блока питания, порт компьютера или ноутбука и т.д.) в лучшем случае будет просто лишняя нагрузка, в худшем, когда блок питания или порт не рассчитан на такой ток и нет защиты, это даже может привести к выходу из строя блока питания или порта.

Вот и все. В качестве источника питания используется USB-кабель, подключенный к Arduino NANO.

Печать корпуса и сборка

Возьмите скользящие контакты и поместите его в верхнюю часть корпуса. Убедитесь, что вращающаяся часть кольца находится на верхней стороне корпуса, чтобы она вращалась одновременно с диском. Теперь установите шаговый мотор, который фиксируется к корпусу двумя 3M винтами и гайкам. Крышка готова:

Вплавьте две резьбовые вставки в корпус вращающегося диска, на котором будет закрепляется датчик нужно вплавить вставные гайки. Для этого можно использовать паяльник:

Теперь пропускаем провода от скользящих контактов через отверстие вращающегося диска:

После чего берём датчик и припаиваем к нему 4 провода (+5V, GND, SCL и SDA) от скользящих контактов:

С помощью двух болтов М3 закрепляем модуль дальномера на корпусе вращающегося диска:

Если у вас модуль с другим расстоянием между крепёжными отверстиями, модуль можно закрепить только одним болтом. Если крепёжных отверстий совсем нет, модуль можно приклеить (двустороння липкая лента, термоклеем с помощью клеевого пистолета и т.д.).

Когда датчик будет закреплён, вращающийся диск надевается на подшипник:

На вращающуюся крышку приклеивается неодимовый магнит, а в верхнюю крышку вставляется датчик холла:

Магнит служит для того, чтобы на него на него срабатывал датчик Холла и в этот момент в коде происходит установка переменной «угол» в некоторое значение. Если магнит по размерам позволяет наклеить его по центру под датчиком, это будет самый лучший вариант, т.к. при срабатывании переменной «угол» нужно будет присвоить значение 0. Если нет, магнит можно наклеить возле датчика. Тогда переменной «угол» нужно будет присвоить не 0, а соответствующее значение (на какой угол относительно магнита повёрнут датчик). Если магнит находится с противоположной стороны, нужно присвоить 180. Если угол составляет 20 градусам (на фото выше угол немного больше):

Тогда переменной «угол» нужно присвоить 20 и т.д.

На макетную плату по схеме, приведенной ранее, запаиваем конденсатор, драйвер мотора, 10K резистор, датчик Холла, провода от Arduino и стабилизатора питания:

Всё припаяно, теперь закрепляем (двусторонней липкой лентой, клеем, термоклеем и т.д.) Arduino Nano внутри корпуса и наш лидар почти готов:

Осталось вплавить в нижнюю крышку корпуса три вставные гайки, затем прикрутить крышку корпуса, надеть на шкив пасик и можно переходить к программированию и экспериментам.

Микроволновый датчик приближения RCWL-0615

Модуль датчика RCWL-0615 является альтернативой обычным датчикам движения PIR, которые широко используются в охранной сигнализации. В ИК-датчиках используется механизм анализа черного тела, что означает, что он проверяет тепло, выделяемое человеческими телами. RCWL-0516 использует доплеровскую радиолокационную технологию для обнаружения движущихся объектов. Он работает на частоте около 3,2 ГГц и использует чип обработки RCWL-9196.

RCWL-0516 излучает микроволны и анализирует отраженные волны, чтобы проверить наличие каких-либо изменений. Эти датчики могут обнаруживать движущиеся объекты через стены и другие материалы и имеют диапазон чувствительности до 7 метров. Обычно они дешевле и менее подвержены ошибкам. При обнаружении движения выходной контакт (OUT) уровня TTL датчика переключается с НИЗКОГО (0 В) на ВЫСОКОЕ (3,3 В) в течение конечного времени (от 2 до 3 с), а затем возвращается в свое состояние покоя (НИЗКОЕ).

Основные характеристики RCWL-0615

  • Мощность передачи: 20 мВт (минимум) / 30 мВт (максимум)
  • Входное напряжение: 4–28 В постоянного тока
  • Расстояние обнаружения: 5–7 м
  • Частота датчика: ~ 3,2 ГГц

Распиновка RCWL-0615

  • VIN — 4В — 28В DC источник питания
  • CDS — вход отключения датчика (низкий = отключить) (для датчиков LDR)
  • GND — Земля
  • 3volt — выход постоянного тока (максимум 100 мА)
  • OUTPUT — HIGH /LOW(3.3 V)  ВЫХОД — ВЫСОКИЙ / НИЗКИЙ (3.3 В) (в соответствии с обнаружением движения)

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

Схема соединений

Подключите Arduino к RCWL-0516, символьному ЖК-дисплею, зуммеру и светодиоду, как показано на схеме ниже.

Таблица соединений 1:

Arduino Pin Number
LED 2
Content 3

Таблица соединений 2:

Arduino Analog IO Character LCD
A5 SCL
A4 SDA

Таблица соединений 3:

Arduino Nano RCWL-0516
GND GND
5V VIN
D2 OUT

Вывод 3V3 на RCWL-0516 является выходным выводом. Вывод CDS позволяет вам добавить LDR (светозависимый резистор) к плате, что позволяет работать в режиме низкого энергопотребления, чтобы датчик активировался только в темноте. После подключения перепроверьте соединения, а затем загрузите исходный код (ниже).

2. Различные виды молниеотводов

Существуют различные способы защиты от молнии. Мы уже кратко говорили о тех защитных мероприятиях, которые применяются на линиях передач электрической энергии. Теперь посмотрим, как защищать от грозовых разрядов здания и различные другие постройки.

Наиболее распространёнными являются молниеотводы, представляющие собой металлический стержень (называемый молниеприёмником), возвышающийся над защищаемым сооружением и соединённый с землёй металлическим проводником. Этот проводник служит для отвода тока молнии в землю и называется токоотводом. Для лучшего соединения с землёй токоотвод в земле имеет разветвления, состоящие из нескольких металлических стержней или проволоки, располагающихся наподобие корней дерева. Вся эта подземная металлическая система называется заземлением. Мы уже видели, что чем лучше связь токоотвода с землёй, тем с меньшей опасностью для окружающих может быть отведён разряд.

На рис. 18 показан молниеотвод, установленный на крыше дома. Такого вида молниеотводы называются стержневыми. Стержневые молниеотводы часто устанавливаются на отдельно стоящих деревянных столбах или металлических мачтах.

Рис. 18. Дом, защищенный от поражения молнией.

Другим видом молниеотводов являются антенны и сетки, натягиваемые над сооружениями. Все эти молниеотводы служат одной цели: предохранить сооружение от попадания в него молнии, отвести молнию в землю с наименьшим ущербом для хозяйства и жизни людей и животных.

При устройстве молниеотводов любого типа основным является вопрос — какое пространство этот молниеотвод может защитить? Чем выше молниеотвод, тем с большего пространства вокруг себя он может как бы собрать молнии. Стержневой молниеотвод защищает во все стороны от себя одинаково. Вокруг него образуется «защищённое пространство», имеющее форму конуса (такую форму имеет шалаш, составленный из палок — см. рис. 19). Расстояние от окружности, на которую опирается этот шалаш, до её центра, где стоит молниеотвод, такое же, как высота молниеотвода. Всё, что находится внутри этого конуса, будет защищено от молнии.

Рис. 19. Пространство, заключённое в этом конусе, защищено от грозовых разрядов.

Если нужно защитить от молнии какое-либо небольшое сооружение, то ставят на него или около него стержневой молниеотвод такой высоты, чтобы всё сооружение попало в защищаемое пространство внутри изображённого здесь конуса.

Example code HC-SR04 with I2C LCD and Arduino

To display the measured distance on a 2004 or 1602 I2C LCD, all you have to do is make the following connections and upload the code below. The HC-SR04 sensor is connected in the same way as before.


HC-SR04 with Arduino and I2C LCD wiring diagram.

I2C LCD Connections

I2C LCD Arduino
GND GND
VCC 5 V
SDA A4
SCL A5

If you are not using an Arduino Uno, the SDA and SCL pins can be at a different location. An Arduino UNO with the R3 layout (1.0 pinout), also has the SDA (data line) and SCL (clock line) pin headers close to the AREF pin. Check the table below for more details.

Board SDA SCL
Arduino Uno A4 A5
Arduino Nano A4 A5
Arduino Micro 2 3
Arduino Mega 2560 20 21
Arduino Leonardo 2 3
Arduino Due 20 21

I2C pin locations for different Arduino boards

The code uses the LiquidCrystal_I2C library, which you can download here on GitHub. Make sure that you have this exact library installed! It also includes the Wire.h library, which allows you to communicate with I2C devices. This library should come pre-installed with the Arduino IDE.

LiquidCrystal_I2C-master.zip

If you want to learn more about how to control a I2C LCD with Arduino, you can check out the full tutorial here.

How to control a character I2C LCD with Arduino

/*
HC-SR04 ultrasonic distance sensor with Arduino and I2C LCD example code.
More info: https://www.makerguides.com
*/

// Include the libraries:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


// Define Trig and Echo pin:
#define trigPin 2
#define echoPin 3

// Define SDA and SCL pin for LCD:
#define SDAPin A4 // Data pin
#define SCLPin A5 // Clock pin

// Connect to LCD via I2C, default address 0x27 (A0-A2 not jumpered):
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27,20,4); //Change to (0x27,16,2) for 1602 LCD 

// Define variables:
long duration;
int distance;

void setup() {
  // Define inputs and outputs:
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 

  // Initiate the LCD:
  lcd.init();
  lcd.backlight();
}

void loop() {
  // Clear the trigPin by setting it LOW:
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);

  // Trigger the sensor by setting the trigPin high for 10 microseconds:
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Read the echoPin. This returns the duration (length of the pulse) in microseconds:
  duration = pulseIn(echoPin, HIGH);

  // Calculate the distance:
  distance = duration*0.034/2;

  // Display the distance on the LCD:
  lcd.setCursor(0,0); // Set the cursor to column 1, line 1 (counting starts at zero)
  lcd.print("Distance = "); // Prints string "Display = " on the LCD
  lcd.print(distance); // Prints the measured distance
  lcd.print(" cm  "); // Prints "cm" on the LCD, extra spaces are needed to clear previously displayed characters
  
  delay(50);
}

Note that I used a 20 x 4 LCD display. If you have a different size LCD (16 x 2 is also common) you need to change line 20 to . If your LCD doesn’t have the default I2C address, 0x27, check out the complete I2C tutorial where I explain how you can find out what the address is.

Используемые компоненты

Список деталей:

1 х Arduino NANO
1 х Модуль с датчиком VL53L0X
1 х Повышающий преобразователь
1 х Шаговый мотор
1 х Драйвер шагового мотора на микросхеме A4988
1 х Скользящие контакты (slip ring) на 6 проводов. Диаметр 12.5мм, длина 15мм или меньше
1 х 6710ZZ подшипник
1 х Датчик Холла 49E
1 х Макетная плата
1 х 100 мкФ электролитический конденсатор
1 х 5 мм х 1 мм неодимовый магнит

Так же понадобиться резистор на 10К, немного M3 винтов, гаек, вставных гаек (резьбовые вставки, insert nuts), «пасик» и напечатанный на 3D-принтере корпус, припой и паяльник.

3D-файлы для печати можно скачать по следующей
. Для печати использовался PLA пластик. Вместо стального подшипника можно использовать напечатанный (стальные шарики продаются пакетами, к примеру, как запасные для линейных направляющих). Модель для печати можно начертить самостоятельно или  попробовать поискать на сайте
,
  и т.д., к примеру введя в поиск «parametric bearing». Вместо подшипника можно распечатать просто пластиковое кольцо, например, из PLA, PETG, нейлона или пэт. Если используемый пластик будет недостаточно скользить или переживаете, что со временем из-за трения протрёт, сверху и снизу можно наклеить липкую ленту или кольцо из какого-нибудь материала (плёнки для ламинации, плёнки для лазерной печати, упаковки для фломастеров, тонкостенной коробочки и т.д.). 

Повышающий стабилизатор нужен для шагового мотора. Такие моторы обычно потребляют максимум сотни миллиампер. Стабилизатор желательно взять с запасом, допустим на 1А или больше. Выходное напряжение питания у стабилизатора, 12В или более. Выбирая стабилизатор, так же учитывайте, что они не должен быть слишком большой, иначе его нельзя будет поместить внутри корпуса.

Что потребуется приобрести для сборки ультразвукового дальномера

Для того чтобы изготовить ультразвуковой дальномер на базе ардуино, не придётся тратить большие суммы. На китайских ресурсах, которые стали столь популярны в последнее время, такие элементы стоят довольно дёшево.

Основным видимым элементом, позволяющим визуально считывать данные с прибора, будет, конечно же, жидкокристаллический дисплей.

ФОТО: YouTube.comЖидкокристаллический дисплей, на котором будет отображаться информация о расстоянии до объекта

Вторым элементом, который напрямую будет контактировать с дисплеем, отметим I2C модуль (1602) для arduino. По сути, это ЖК-адаптер. Он может продаваться отдельно, хотя намного удобнее приобрести жидкокристаллический дисплей уже в сборе с модулем.

ФОТО: YouTube.comI2C модуль для arduino – здесь он уже впаян на место и готов к работе

Следующий элемент – «глаза» будущего дальномера. В их роли выступает плата ультразвукового дальномера. Она довольно компактна, а потому проблем с размещением её в небольшой коробочке не будет.

ФОТО: YouTube.comУльтразвуковой дальномер – именно он будет собирать и передавать данные о расстоянии к «мозгу» собранного прибора

И наконец, «сердце и мозг» изготавливаемого устройства – сама плата ардуино. В продаже она ещё девственно чиста, поэтому понадобится залить на неё скетч. Ссылка на него обязательно будет в сегодняшней статье.

ФОТО: YouTube.com«Сердце и мозг» собираемого прибора – готовая печатная плата ардуино

Ну, и напоследок ‒ оставшиеся мелочи, необходимые для работы ультразвукового дальномера, среди которых:

  • батарея 9 В, типа «Крона» с коннектором;
  • выключатель;
  • любая пластиковая коробка, в которой поместятся все детали, несколько отрезков проводов.

ФОТО: YouTube.comОстальные мелкие детали, которые понадобятся для работы

Шаг 6: тестирование

Рисунок 10 – Скетч ProcessingРисунок 11 – Графический экран Processing

Подключите USB кабель Arduino к компьютеру.

Запустите “dual_sensor_echo_locator.pde”, нажав кнопку запуска вверху слева в Processing 3 IDE.

На вашем экране должны начать появляться числа, разделенные запятой (рисунок 10).

Сообщение об ошибке при запуске

При запуске может появиться сообщение об ошибке. Если это так, то измените в строке 88 (рисунок 10) на номер, связанный с вашим COM портом.

В зависимости от вашей системы могут быть указаны несколько COM портов. Один из номеров будет работать.

На рисунке 10 номер связан с моим «COM4»

Расположение датчиков

Расположите датчики на расстоянии 100 см друг от друга и 100 см от объекта, фронтальной стороной к нему.

Медленно поворачивайте оба датчика к диагонально противоположному углу воображаемого квадрата со стороной 1 метр.

Когда вы будете вращать датчики, то найдете положение, в котором на графическом дисплее появится мигающая красная точка.

Также, когда датчики захватят ваш объект, будут отображаться дополнительные данные (рисунок 11):

  • расстояние d1
  • расстояние d2
  • базовая линия (base)
  • смещение (offset)
  • полупериметр (s)
  • площадь (area)
  • координата X
  • координата Y

Программа для Arduino

/*Ультразвуковой датчик расстояния и Arduino – полный гайд

Распиновка ультразвукового датчика расстояния:

VCC: +5V

Trig : Триггер (INPUT) – 11 пин

Echo: Эхо (OUTPUT) – 12 пин

GND: GND

*/

int trigPin = 11;    //Триггер – зеленый проводник

int echoPin = 12;    //Эхо – желтый проводник

long duration, cm, inches;

void setup() {

//Serial Port begin

Serial.begin (9600);

//Инициализирум входы и выходы

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

}

void loop()

{

// Датчик срабатывает и генерирует импульсы шириной 10 мкс или больше

// Генерируем короткий LOW импульс, чтобы обеспечить «чистый» импульс HIGH:

digitalWrite(trigPin, LOW);

delayMicroseconds(5);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

// Считываем данные с ультразвукового датчика: значение HIGH, которое

// зависит от длительности (в микросекундах) между отправкой

// акустической волны и ее обратном приеме на эхолокаторе.

pinMode(echoPin, INPUT);

duration = pulseIn(echoPin, HIGH);

// преобразование времени в расстояние

cm = (duration/2) / 29.1;

inches = (duration/2) / 74;

Serial.print(inches);

Serial.print(«in, «);

Serial.print(cm);

Serial.print(«cm»);

Serial.println();

delay(250);

}

Скетч ультразвукового дальномера на arduino с помощью HC-SR04 и TM1637

// подключение индикатора TM1637
#include <TM1637.h>
#define CLK 3
#define DIO 2 
TM1637 tm1637(CLK,DIO);

// пины для HC-SR04
int echoPin = 12; 
int trigPin = 11; 

void setup() { 
  Serial.begin (9600); // для вывода в мониторе порта
  pinMode(trigPin, OUTPUT); // пин отправки сигнала
  pinMode(echoPin, INPUT);  // пин приема сигнала

  // инициализация индикатора
  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL);
} 
 
void loop() { 
  int duration, mm; // переменные для хранения расстояния
  // останавливаем отправку сигнала
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 
  // отправляем ультрозвуковой сигнал
  digitalWrite(trigPin, HIGH); 
  // ждем 10 микроскунд
  delayMicroseconds(10); 
  // останавливаем отправку сигнала
  digitalWrite(trigPin, LOW); 
  // замеряет длину положительного импульса на пине echoPin
  duration = pulseIn(echoPin, HIGH); 
  // высчитываем расстояние до препядствия
  mm = duration / 5.8;
  // вывод данных в монитор порта
  Serial.print(mm); 
  Serial.println(" mm"); 
  // вывод данных на индикатор
  tm1637.display( mm );
  delay(100);
}

Скетч для Ардуино

Скопируйте прилагаемый ниже скетч в Arduino IDE и найдите строку «int d = 18;» и измените «18» на глубину вашего резервуара в сантиметрах.


// Обратите внимание, что нумерация контактов arduino
// отличается от выводов микроконтроллера

int d = 18; // Введите глубину вашего резервуара в сантиметрах

int trig = 11; // Прикрепите триггер ультразвукового датчика к пину 11
int echo = 10; // Прикрепите эхо ультразвукового датчика к контакту 10
int pin1 = 2; // Высший уровень
int pin2 = 3;
int pin3 = 4;
int pin4 = 5;
int pin5 = 6;
int pin6 = 7; // Самый низкий уровень

void setup() {
pinMode (pin1, OUTPUT); // Установка контактов для управления вводом / выводом
pinMode (pin2, OUTPUT);
pinMode (pin3, OUTPUT);
pinMode (pin4, OUTPUT);
pinMode (pin5, OUTPUT);
pinMode (pin6, OUTPUT);
}

void loop()
{ digitalWrite(pin1, LOW); // Сброс светодиодов
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
digitalWrite(pin5, LOW);
digitalWrite(pin5, LOW);

// Установите переменные для продолжительности пинга,
// и расстояние в дюймах и сантиметрах:

long duration, in, cm; // ‘in’ — дюймы и ‘cm’ — сантиметры

// PING запускается HIGH-импульсом в 2 или более микросекундах.
// Дайте короткий LOW импульс заранее, чтобы обеспечить чистый HIGH-импульс:

pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(5);
digitalWrite(trig, LOW);

// Этот же вывод используется для считывания сигнала от PING:
// HIGH-импульс, продолжительность которого — это время (в микросекундах)
// от отправки пинга до приема его эха от объекта

pinMode(echo, INPUT);
duration = pulseIn(echo, HIGH);

// Преобразовать время в расстояние

in = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

delay(100);
if (in

// Это дает расстояние, пройденное пингом, исходящим и возвратным,
// поэтому мы делимся на 2, чтобы получить расстояние от препятствия.

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
// Скорость звука составляет 340 м/с или 29 микросекунд на сантиметр.
// Пинг выходит и обратно, поэтому, чтобы найти расстояние от объекта,
// мы берем половину пройденного расстояния.

return microseconds / 29 / 2;
}

Загрузите код для индикатора уровня воды Arduino непосредственно на плату Arduino или в микроконтроллер ATMega328P.

Исходный код программы

Код программы для приемной части

Arduino

const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance, Pdistance;
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
void loop() {
Pdistance=distance;
Calc();
distance= duration*0.034;
if (Pdistance==distance || Pdistance==distance+1 || Pdistance==distance-1 )
{
Serial.print(«Measured Distance: «);
Serial.println(distance/2);
}
//Serial.print(«Distance: «);
//Serial.println(distance/2);
delay(500);
}
void Calc()
{
duration=0;
Trigger_US();
while (digitalRead(echoPin)==HIGH);
delay(2);
Trigger_US();
duration = pulseIn(echoPin, HIGH);
}
void Trigger_US()
{
// Fake trigger the US sensor
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

constinttrigPin=9;

constintechoPin=10;

// defines variables

longduration;

intdistance,Pdistance;

voidsetup(){

pinMode(trigPin,OUTPUT);// Sets the trigPin as an Output

pinMode(echoPin,INPUT);// Sets the echoPin as an Input

Serial.begin(9600);// Starts the serial communication

}

voidloop(){

Pdistance=distance;

Calc();

distance=duration*0.034;

if(Pdistance==distance||Pdistance==distance+1||Pdistance==distance-1)

{

Serial.print(«Measured Distance: «);

Serial.println(distance2);

}
//Serial.print(«Distance: «);
//Serial.println(distance/2);

delay(500);

}

voidCalc()

{

duration=;

Trigger_US();

while(digitalRead(echoPin)==HIGH);

delay(2);

Trigger_US();

duration=pulseIn(echoPin,HIGH);

}

voidTrigger_US()

{
// Fake trigger the US sensor

digitalWrite(trigPin,HIGH);

delayMicroseconds(10);

digitalWrite(trigPin,LOW);

}

Код программы для передающей части

Arduino

// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
void loop() {
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
delay(2);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

// defines pins numbers

constinttrigPin=9;

constintechoPin=10;

// defines variables

longduration;

intdistance;

voidsetup(){

pinMode(trigPin,OUTPUT);// Sets the trigPin as an Output

pinMode(echoPin,INPUT);// Sets the echoPin as an Input

Serial.begin(9600);// Starts the serial communication

}

voidloop(){

// Sets the trigPin on HIGH state for 10 micro seconds

digitalWrite(trigPin,HIGH);

delayMicroseconds(10);

digitalWrite(trigPin,LOW);

delay(2);

}

Подключение ультразвукового датчика к Arduino с помощью TinkerCad Circuits

С вашим основным пониманием того, как ультразвуковой датчик работает, теперь вы готовы к подключению устройства к Arduino. Чтобы изучить работу ультразвукового датчика, вы можете построить виртуальную функциональную схему с помощью TinkerCad Circuits.

TinkerCad Circuits является бесплатным онлайн-симулятором схем, который позволяет моделировать различные электрические и электронные схемы, прежде чем соединять их на реальной макетной плате. Вы даже можете протестировать проекты Arduino (в том числе код) с TinkerCad Circuits. Вы можете получить ценные знания в области электроники с помощью экспериментов до принятия решения о создании физической схемы.

На рисунке ниже показан проект функционального ультразвукового датчика Arduino, построенного с помощью TinkerCad Circuits.

Используйте схему ниже в качестве ориентира, если у вас есть макетная плата для экспериментов с ультразвуковым датчиком.

Шаг 5: установка программного обеспечения

Установите следующее программное обеспечение в этом порядке:

Arduino IDE

Скачайте и установите Arduino IDE (интегрированную среду разработки) с сайта https://www.arduino.cc/en/main/software, если она еще у вас не установлена.

Скетч Arduino

Скачайте и откройте в Arduino IDE файл «dual_sensor _echo_locator.ino«, загрузите его в свою Arduino Uno R3.

Закройте Arduino IDE, но USB кабель оставьте подключенным.

Скетч Processing

Скопируйте содержимое прикрепленного файла, “dual_sensor_echo_locator.pde” в Processing «Sketch».

Теперь нажмите вверху слева кнопку «Run»… На вашем экране должен появиться графический экран.

Общие сведения

Ультразвуковой датчик HC-SR04 использует точно такую же технологию, что и летучие мыши (ультразвук). Если не вдаваться в подробности, то описать принцип работы можно, датчик посылает звуковые импульсы частотой 40 кГц и прослушивает эхо. В отличии от других датчиков, HC-SR04 не реагирует на солнечный свет или черные предметы, но может давать ложные показания от ткани или тонких предметов.
На передней части HC-SR04 расположено два ультрозвуковых датчика, первый с надписью T (Transmiter) — это передатчик ультрозвуковых волн (TCT40-16T), а второй с надписью R (Receive) — это приемник отраженных ультрозвуковых волн (TCT40-16R), по центру расположен выводной кварцевый генератор на 27 МГц.

С другой стороны датчика HC-SR04, расположена электрическая обвязка, в которой выделяется три основных микросхема и электрическая обвязка. Для взаимодействия с контроллером Arduino установлен четырех выводной разъем, назначение контактов можно посмотреть ниже.

Назначение контактов:
► VCC: «+» питание модуля
► Trig : вход триггера
► Echo: выход, эхо.
► GND: «-» питание модуля

PIR датчик движения Ардуино: характеристики

Сегодня уже никто не удивляется при автоматическом включении освещения в подъездах многоквартирных домов, которые срабатывают при прохождении человека. В большинстве приборов установлены пассивные датчики движения (PIR). Рассмотрим в этой статье устройство датчика движения, схему его подключения к Arduino UNO и соберем на его основе автоматический включатель освещения.

Линза Френеля концентрирует инфракрасное излучение

Модуль с ПИР датчиком состоит из пироэлектрического элемента под пластиковой линзой Френеля — цилиндрическая деталь с прямоугольным кристаллом в центре, который улавливает уровень инфракрасного излучения и пропускает его через себя. При подключении IR к Arduino мы уже выяснили, что все предметы имеют инфракрасное излучение и чем выше температура, тем интенсивнее излучение.

Устройство и распиновка пироэлектрического датчика движения

PIR датчики движения практически одинаковы по устройству. Диапазон чувствительности PIR сенсоров для Ардуино до 6 метров, угол обзора 110° x 70°. Питание — 5 Вольт, а выходной цифровой сигнал имеет значение 0, когда движения нет и значение 1 при наличии движения. Чувствительные элементы устанавливается в герметический корпус, который защищает от влажности и перепадов температур.

Принцип работы ультразвукового датчика HC-SR04

Ультразвуковой датчик HC-SR04 в нашем проекте используется для измерения расстояний в диапазоне 2-400 см с точностью 3 мм. Датчик состоит из ультразвукового передатчика, ультразвукового приемника и схемы управления. Основные принципы работы ультразвукового датчика состоят в следующем:

  1. Вначале с формируется сигнал высокого уровня длительностью 10 мкс, который запускает в работу ультразвуковой датчик.
  2. Затем модуль автоматически посылает 8 импульсов с частотой 40 кГц, а затем проверяет приняты они или нет.
  3. Если эти излученные сигналы принимаются, то вычисляется время между временем передачи этих импульсов и их приемом.

Расстояние затем можно рассчитать по следующей формуле:

Distance= (Time x Speed of Sound in Air (340 m/s))/2

где Time – измеренное датчиком время;Speed of Sound in Air – скорость звука в воздухе, равная 340 м/с.

Временные диаграммы

Как уже указывалось, измерение расстояний осуществляется на основе эхо. Вначале передается импульс длительностью 10 мкс чтобы запустить модуль в работу. После этого модуль автоматически передает 8 импульсов с частотой 40 кГц (то есть ультразвуковая частота) и проверяет эхо – то есть не вернулись ли эти импульсы обратно, отразившись от препятствия. Если импульсы вернулись обратно, то расстояние до препятствия можно рассчитать по следующей формуле:

Distance= (time x speed)/2

В этой формуле мы разделили произведение скорости и времени на 2 потому что измеренное время равно сумме времен распространения звуковой волны до препятствия и обратно. То есть время, чтобы звук достиг препятствия, равно половине времени, измеренного датчиком.

Временные диаграммы работы модуля приведены на следующем рисунке:

Установка датчика H206

Установка данных типов датчиков немного капризна. Они могут устанавливаться только на двигатели, которые имеют ось, выступающие с обоих концов двигателя. Поэтому одна сторона оси прикрепляется к колесу, а к другой стороне оси прикрепляется пластина с сетчатой градуировкой как показано на следующем рисунке.

Поскольку при таком креплении получается что и колесо, и пластина с делениями датчика смонтированы на одной оси, это будет обозначать что они вращаются с одинаковой скоростью. То есть измеряя скорость вращения пластины мы можем определить скорость вращения колеса. При установке убедитесь в том, что отверстия (деления) пластины попадают в область действия инфракрасного датчика потому что только он сможет определить число отверстий, которое прошло через него. При желании вы можете на свой вкус модифицировать механическую часть проекта – главное чтобы соблюдались указанные условия.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий