Измерение расстояния до объекта на пути человека, оборудования, транспортного средства или движущегося объекта используется в большом количестве приложений, таких как управление движением роботов, управление транспортными средствами, трость для слепых, медицинское оборудование и т. д. Сегодня доступны различные методы измерения расстояния, но измерение с помощью ультразвукового датчика является одним из самых дешевых среди других вариантов.
В этом проекте мы собираемся использовать ультразвуковой датчик HC-SR04 с запрограммированным с помощью Arduino IDE микроконтроллером ATtiny85 и модуль дисплея OLED для создания цифровой ультразвуковой линейки. Эта плата может использоваться для измерения расстояний, обнаружения объектов и многих других приложений.
Схема ультразвуковой линейки с использованием ATtiny85 приведена далее.
На изображении выше показана принципиальная схема взаимодействия ультразвукового датчика и OLED-дисплея с микросхемой Attiny85. Интерфейс между OLED-дисплеем и ATtiny85 должен быть реализован с использованием протокола I2C. Следовательно, контакт SCL (PB2) ATtiny85 подключен к контакту SCL OLED-дисплея. Точно так же вывод SDA (PB0) ATtiny85 подключен к выводу SDA OLED-дисплея. Контакты Echo и Trig ультразвукового датчика подключены к контактам PB3 и PB4 ATtiny85 соответственно. Наконец, для питания всех компонентов мы использовали батарею на 9 В. Затем эти 9 В преобразуются в 5 В с помощью стабилизатора напряжения AMS117-5V.
Плата и конечная сборка могут выглядеть следующим образом.
Микроконтроллер ATtiny85 был запрограммирован в среде Arduino IDE как Digispark. Далее приведен код программы.
#include "TinyWireM.h"
#include "TinyOzOLED.h"
const int trigPin = 4;
int echoPin = 3;
int duration, cm;
void setup() {
TinyWireM.begin();
OzOled.init();
OzOled.clearDisplay();
OzOled.setNormalDisplay();
OzOled.sendCommand(0xA1);
OzOled.sendCommand(0xC8);
pinMode(trigPin, OUTPUT);
}
void loop()
{
//OzOled.clearDisplay();
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
cm = microsecondsToCentimeters(duration);
displayOLED();
delay(1000);
OzOled.clearDisplay();
}
void displayOLED() {
OzOled.printString("Distance:", 3, 3);
OzOled.printNumber(cm, 0, 12, 3);
OzOled.printString("(In CM)", 5, 5);
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}
После сборки печатной платы и программирования ATtiny85 мы можем протестировать ультразвуковую линейку для измерения расстояния. Для этого подайте на плату с напряжение 9 В и подождите, пока измеренное расстояние не отобразится на OLED-дисплее.
Вы можете использовать шкалу или измерительную ленту, чтобы проверить правильность измеренного расстояния.
© digitrode.ru