СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Акселерометр и ультразвуковой датчик растояния

Категория: Прочее

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Акселерометр и ультразвуковой датчик растояния»

Акселерометр ADXL345


Акселерометр – это устройство, которое позволяет измерить динамическое и статическое ускорение по трём осям X, Y и Z. Благодаря статическому ускорению можно определить положение в пространстве (акселерометр как датчик поворота), а благодаря динамическому (движение или встряска) – направление ускорения.

Цифровой акселерометр ADXL345 – это 3-осевой акселерометр с высоким разрешением (13 бит) по осям с пределом до ±16g. Модуль обладает пониженным энергопотреблением и малыми размерами. Информационный обмен с модулем осуществляется по последовательным интерфейсам I2C или SPI (3- или 4-проводной).

Существует множество модулей для Arduino с акселерометром ADXL345. Модуль может выглядеть, например, так:



Схема подключения (I2C):



Для работы воспользуемся библиотекой ADXL345

Код позволяет получить сырые и обработанные данные ускорения по каждой оси.



#include

#include

ADXL345 accelerometer;

void showRange(void)

{

Serial.print("Selected measurement range: ");

switch (accelerometer.getRange())

{

case ADXL345_RANGE_16G: Serial.println("+/- 16 g"); break;

case ADXL345_RANGE_8G: Serial.println("+/- 8 g"); break;

case ADXL345_RANGE_4G: Serial.println("+/- 4 g"); break;

case ADXL345_RANGE_2G: Serial.println("+/- 2 g"); break;

default: Serial.println("Bad range"); break;

}

}

void showDataRate(void)

{

Serial.print("Selected data rate: ");

switch (accelerometer.getDataRate())

{

case ADXL345_DATARATE_3200HZ: Serial.println("3200 Hz"); break;

case ADXL345_DATARATE_1600HZ: Serial.println("1600 Hz"); break;

case ADXL345_DATARATE_800HZ: Serial.println("800 Hz"); break;

case ADXL345_DATARATE_400HZ: Serial.println("400 Hz"); break;

case ADXL345_DATARATE_200HZ: Serial.println("200 Hz"); break;

case ADXL345_DATARATE_100HZ: Serial.println("100 Hz"); break;

case ADXL345_DATARATE_50HZ: Serial.println("50 Hz"); break;

case ADXL345_DATARATE_25HZ: Serial.println("25 Hz"); break;

case ADXL345_DATARATE_12_5HZ: Serial.println("12.5 Hz"); break;

case ADXL345_DATARATE_6_25HZ: Serial.println("6.25 Hz"); break;

case ADXL345_DATARATE_3_13HZ: Serial.println("3.13 Hz"); break;

case ADXL345_DATARATE_1_56HZ: Serial.println("1.56 Hz"); break;

case ADXL345_DATARATE_0_78HZ: Serial.println("0.78 Hz"); break;

case ADXL345_DATARATE_0_39HZ: Serial.println("0.39 Hz"); break;

case ADXL345_DATARATE_0_20HZ: Serial.println("0.20 Hz"); break;

case ADXL345_DATARATE_0_10HZ: Serial.println("0.10 Hz"); break;

default: Serial.println("Bad data rate"); break;

}

}

void setup(void)

{

Serial.begin(9600);

// Инициализация ADXL345

Serial.println("Initialize ADXL345");

if (!accelerometer.begin())

{

Serial.println("Could not find a valid ADXL345 sensor, check wiring!");

delay(500);

}

// Установка диапазона измерений

// +/- 2G: ADXL345_RANGE_2G

// +/- 4G: ADXL345_RANGE_4G

// +/- 8G: ADXL345_RANGE_8G

// +/- 16G: ADXL345_RANGE_16G

accelerometer.setRange(ADXL345_RANGE_16G);

// Показать текущие настройки

showRange();

showDataRate();

}

void loop(void)

{

// Считать сырые данные

Vector raw = accelerometer.readRaw();

// Считать нормализованные данные

Vector norm = accelerometer.readNormalize();

// Вывод сырых данных

Serial.print(" Xraw = ");

Serial.print(raw.XAxis);

Serial.print(" Yraw = ");

Serial.print(raw.YAxis);

Serial.print(" Zraw: ");

Serial.print(raw.ZAxis);

// Вывод нормализованных данных m/s^2

Serial.print(" Xnorm = ");

Serial.print(norm.XAxis);

Serial.print(" Ynorm = ");

Serial.print(norm.YAxis);

Serial.print(" Znorm = ");

Serial.print(norm.ZAxis);

Serial.println();

delay(100);

}


Данная программа вернет примерно такие данные:



Обратите внимание, что на ось Z действует ускорение, близкое к 9,8 м/с^2. Если положить датчик на бок, то ускорения изменятся:



Теперь ускорение по Z близко к 0, а вот Y — близко к 9,8 м/с^2. Эти данные будут меняться при движении. Например, при падении.







Ультразвуковой датчик расстояния Ардуино HC-SR04


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





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



Ультразвуковой дальномер HC SR04 имеет такие технические параметры:

  • Питающее напряжение 5В;

  • Рабочий параметр силы т ока – 15 мА;

  • Сила тока в пассивном состоянии

  • Обзорный угол – 15°;

  • Сенсорное разрешение – 0,3 см;

  • Измерительный угол – 30°;

  • Ширина импульса – 10-6 с.

Датчик оснащен четырьмя выводами (стандарт 2, 54 мм):

  • Контакт питания положительного типа – +5В;

  • Trig (Т) – выход сигнала входа;

  • Echo (R) – вывод сигнала выхода;

  • GND – вывод «Земля».

Для получения данных, необходимо выполнить такую последовательность действий:

  • Подать на выход Trig импульс длительностью 10 микросек;

  • В ультразвуковом дальномере hc sr04 подключенном к arduino произойдет преобразование сигнала в 8 импульсов с частотой 40 кГц, которые через излучатель будут посланы вперед;

  • Когда импульсы дойдут до препятствия, они отразятся от него и будут приняты приемником R, что обеспечит наличие входного сигнала на выходе Echo;

  • На стороне контроллера полученный сигнал при помощи формул следует перевести в расстояние.

При делении ширины импульса на 58.2, получим данные в сантиметрах, при делении на 148 – в дюймах.

Подключение к Arduino



Выполнить подключение ультразвукового датчика расстояния к плате Arduino достаточно просто.



Скетч для подключения датчика hc-sr04 к Arduino

int trigPin = 8; // назначаем имя для Pin8

int echoPin = 9; // назначаем имя для Pin

void setup() {

Serial.begin (9600); // подключаем монитор порта

pinMode(trigPin, OUTPUT); // назначаем trigPin (Pin8), как выход

pinMode(echoPin, INPUT); // назначаем echoPin (Pin9), как вход

}

void loop() {

int duration, cm; // назначаем переменную "cm" и "duration" для показаний датчика

digitalWrite(trigPin, LOW); // изначально датчик не посылает сигнал

delayMicroseconds(2); // ставим задержку в 2 ммикросекунд

digitalWrite(trigPin, HIGH); // посылаем сигнал

delayMicroseconds(10); // ставим задержку в 10 микросекунд

digitalWrite(trigPin, LOW); // выключаем сигнал

duration = pulseIn(echoPin, HIGH); // включаем прием сигнала

cm = duration / 58; // вычисляем расстояние в сантиметрах

Serial.print(cm); // выводим расстояние в сантиметрах

Serial.println(" cm");

delay(1000); // ставим паузу в 1 секунду

}




Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!