Датчик наклона на базе ардуино своими руками

Содержание

Модуль фоторезистора KY-018

Данный модуль представляет собой делитель напряжения, состоящий из фоторезистора и постоянного резистора сопротивлением 10 кОм

Датчик наклона на базе ардуино своими руками

Модуль имеет габаритный размер 30 x 14 мм и массу 1,2 г. Для подключения служит трехконтактный разъем. Центральный контакт – питание +5В, контакт «-» — общий, контакт «S» — информационный. Потребляемый ток 270 мкА.

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

Если загрузить в Arduino программу AnalogInput2, то в мониторе последовательного порта среды разработки Arduino IDE можно наблюдать, как меняются показания, снимаемые с аналогового входа платы Arduino.

Модуль легко сделать глазом робота или датчиком освещенности умного дома.

KY-002, датчик вибрации SW-18015P

Датчик наклона на базе ардуино своими рукамиKY-002 внешний вид

Датчик наклона на базе ардуино своими рукамиKY-002 схема датчика

 Датчик вибрации стоит около 7 р, сама плата датчика от 60 р за шт.
 Применяется в схемах где необходимо слежение за вибрацией, т.е., например, в схемах автосигнализации на вибрацию корпуса или в производственных схемах за слежением вибрации. У меня такого датчика нет но вероятно устройство следующее: представляет собой трубку в трубке, причем внутренняя трубка имеет некоторые свободный ход. Вероятно подвешена на пружине (в принципе изготовление «на коленке» займет от силы 10 минут). При вибрации внутренняя трубка начинает колебаться и, таким образом, касается стенок наружной трубки. Эти касания подают на выход датчика логический ноль, в то время как в состоянии отсутствия вибрации на выходе логическая единица. Пример обработки сигналов дачтчика вибрации можете посмотреть ЗДЕСЬ.

Характеристики KY-020.

Датчик наклона на базе ардуино своими руками

KY-020 состоит из резистора 10 кОм и шарового переключателя с двунаправленной проводимостью, который размыкает / замыкает цепь в зависимости от степени ее наклона. Угол наклона не измеряется.

Датчик наклона на базе ардуино своими руками

Схема датчика наклона KY-020 исключительно простая. Здесь присутствует сопротивление, которое подтягивает сигнальный выход к питанию, а сам датчик при срабатывании замыкается на землю.

  • Рабочее напряжение: От 3,3 В до 5 В
  • Тип выхода: Цифровой

Схема подключения KY-020.

Подключите линию питания (посередине) и землю (-) модуля к +5 и GND соответственно. Сигнальный контакт (S) подключите к 3 пину на Arduino.

Схема подключения модуля наклона KY-020 к Arduino NANO.

Датчик наклона на базе ардуино своими руками

Код для Arduino включения светодиода при наклоне модуля KY-020.

int led = 13 ;// назначение пина для светодиода
int tiltSensorPin = 3; // назначение пина для датчика наклона
int value ;// переменная для хранения значения датчика
void setup ()
{
  pinMode (led, OUTPUT) ;// пин светодиода работает как выход
    pinMode (tiltSensorPin, INPUT) ; //пин дачика наклона работает как вход
}
void loop ()
{
  value = digitalRead (tiltSensorPin) ;// чтение значения с датчика
    if (value == HIGH) // когда с датчика появляется высокий уровень то светодиод горит
  {
    digitalWrite (led, HIGH);
  }
  else
  {
    digitalWrite (led, LOW);
  }
}

Следующий скетч включает встроенный светодиод, который подключен к 13-му контакту Arduino, когда модуль обнаруживает изменение степени наклона. Модуль наклона KY-020 включает и выключает светодиод.

Функции в программе Arduino для работы с mpu6050

MPU6050_ReadData()

Эта функция считывает данные с акселлерометра, гироскопа и датчика температуры. После считывания данных, значения переменных (temp_scalled, accel_x_scalled, accel_y_scalled, accel_z_scalled, gyro_x_scalled, gyro_y_scalled and gyro_z_scalled) обновляются.

MPU6050_ResetWake()

Эта функция сбрасывает настройки чипа на значения по-умолчанию. Рекомендуется использовать сброс настроек перед настройкой чипа на выполнения определенной задачи.

MPU6050_SetDLPF(int BW)

Эта функция настраивает встроенный фильтр низких частот. Переменная int BW должна содержать значения (0-6). Пропускная способность фильтра будет изменяться в соответствии с представленной ниже таблицей.

int BW Пропускная способность фильтра
0 или Any бесконечность
1 184
2 94
3 44
4 21
5 10
6 5

Если int BW не в диапазоне 0-6, фильтр низких частот отключается, что соответствует установке – бесконечность.

MPU6050_SetGains(int gyro,int accel)

Эта функция используется для установки максимального значения шкалы измерений

int gyro Макс. знач.[угол/с] int accel Макс. знач. [м/с2]
250 2g
1 500 1 4g
2 1000 2 8g
3 2000 3 16g

MPU6050_ReadData()

Эта функция использует масштабные коэффициенты для расчета результата. Если не используются значения (0-3), MPU6050_ReadData() отобразит необработанные значения с датчика с погрешностью калибровки. Для получения обработанных значений, установите переменные для калибровки (accel_x_OC, accel_y_OC, accel_z_OC, gyro_x_OC, gyro_y_OC and gyro_z_OC) в нуль.

MPU6050_OffsetCal()

Эта функция позволяет откалибровать акселерометр и гироскоп. Рассчитанные значения записываются в переменные accel_x_OC, accel_y_OC, accel_z_OC, gyro_x_OC, gyro_y_OC и gyro_z_OC для дальнейшей коррекции. Для проведения калибровки необходимо расположить оси x и y axes платы MPU6050 в горизонтальной плоскости, а ось z – перпендикулярно к основанию. Даже незначительные перемещения платы во время калибровки понижают точность расчета базовой точки. Ось z калибруется относительно силя земного притяжения — 9.81 м/с2 (1g), что учтено в коде.

Arduino и датчик MPU6050

Файл, приведенный ниже, будет работать с цифровыми датчиками ускорения MPU6050, которые подключены к плате Arduino через I2C протокол по адресу 0x68. Работоспособность проверена на платах Arduino Uno и Arduino Mega. Данный файл заголовка требует файл Wire.h перед добавлением “gyro_Accel.h”. Кроме того, перед вызовом встроенных функций, надо инициализировать шину I2Cс помощью команды Wire.begin();.

Программа для Arduino с файлом заголовка и примером расположены на Github

Логи версии:

Версия 0.1 beta (Дата:2014-06-22): Сам файл заголовка для калибровки и чтения данных с датчика MPU6050 через i2c протокол и пример использования заголовочного файла для расчета угла.

Версия 0.2 beta (Дата:2014-10-08): Исправлены баги в файле примера. “accel_x_scalled” и “accel_y_scalled” теперь возвращают корректные значения углов.

Датчик наклона на базе ардуино своими руками

Для управления работой Ардуино необходимо разработать управляющую программу.

Для начала подключаем необходимые библиотеки:

#include <TimerOne.h>   —  библиотека таймера

#include <LiquidCrystal_I2C.h>  — библиотека работы с дисплеем по шине i2c

LiquidCrystal_I2C lcd(0x27,16,2);  — указываем i2c адрес (наиболее распространенное значение), а также параметры экрана

Объявляем переменные и константы:

const int RPM_PIN=3; — константа определяющая номер цифрового входа для подключения датчика Холла

volatile int rpm                = 0;   — частота импульсов (сразу обнуляем)

volatile int rpm_k            = 0;   — счетчик импульсов входного сигнала (обнуляем)

volatile boolean kontrol;

volatile int rpm_array = {0,0,0};    — массив промежуточных значений частоты вращения (не менее трёх значений) для усреднения (сразу обнуляем)

volatile int rpm_result         = 0;    — расчётная частота вращения вала (обнуляем)

 void rpm_count(){

  rpm_k++;       —

  digitalWrite(13, HIGH); — на долю секунды выводим сигнал на красный сетодиод при каждом поступившем импульсе входного сигнала (для контроля работы схемы и датчика)

  delayMicroseconds(500);  — длительность свечения красного светодиода

  digitalWrite(13, LOW);  — выключение красного светодиода

}

void SensorData(){

  rpm = rpm_k;  rpm_k = 0; записываем подсчитанное число импульсов с датчика Холла в переменную частоты вращения, а счетчик обнуляем

  digitalWrite(10, HIGH); — на долю секунды выводим сигнал на зеленый сетодиод при каждом отсчете образцового сигнала (для контроля работы)

  delayMicroseconds(500);  digitalWrite(10, LOW);

}

Объявляем основную процедуру Ардуино

void setup(){

   lcd.begin();    — инициализируем дисплей

   pinMode(RPM_PIN,INPUT);    — устанавливаем режим работы входной линии ардуино на ввод

   attachInterrupt(digitalPinToInterrupt(RPM_PIN),  rpm_count,  RISING);  — настраиваем функцию прерывания, срабатывание по переднему фронту

   Timer1.attachInterrupt(SensorData);  — настраиваем срабатывание прерывания по таймеру

   Timer1.initialize(1000000);  — указываем период работы таймера – 1 с.

   pinMode(10, OUTPUT); — устанавливаем режим работы цифрового выхода 10 и 13 на вывод

   pinMode(13, OUTPUT);

}

Объявляем основной цикл программы

void loop(){

    rpm_result = 0;    — обнуляем итоговый результат

    for (int i=0; i<=1; i++)    { — цикл буферизации предыдущих значений измеренного сигнала в массив

      rpm_array=rpm_array;     }   

    rpm_array = 60*rpm/2;   — вычисляем текущее значение частоты вращения вала и записываем в последний элемент массива

    for (int i=0; i<=2; i++)    {       — вычисляем сумму элементов массива для усреднения

      rpm_result = rpm_result+rpm_array;     }

    rpm_result = rpm_result/3;    — вычисляем среднее значение частоты вращения

    lcd.setCursor(0, 0);     — указываем положение курсора на экране дисплея

    lcd.print(»                «);   — очищаем 1 строку дисплея от предыдущего результата

    lcd.setCursor(0, 0);  — указываем положение курсора на экране дисплея

    lcd.print(«N(ob/min): «);lcd.print(rpm_result);   — выводим частоту вращения в об/мин

    delay(500); — делаем паузу между обновлениями экрана, чтобы он не мигал

}

Разработанную программу загружаем в память Ардуино. Подключив Ардуино к шине USB ПК, не забываем выбрать правильный порт в меню Системы программирования Ардуино, а также правильно указываем модель платы Ардуино.

https://youtube.com/watch?v=qilXenglHKE

Фотопрерыватель KY-010

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

Модуль фотопрерывателя имеет габариты 24 х 15 мм и массу 1,2 г

Данное устройство представляет собой инфракрасный светодиод с токограничительным резистором. Светодиод освещает фототранзистор, с коллектора которого и снимается полезный сигнал. Модуль имеет три вывода: центральный немаркированный – питание +5В, контакт «-» — общий, контакт «S» — информационный. Потребляемый ток 10 мА.

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

Немного теории

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

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

  • тангаж;
  • крен;
  • рыскание.

Первый параметр определяет угол наклона вверх или вниз передней части квадрокоптера, позволяя выполнить снижение или подъем дрона. Крен определяет угол наклона, когда правая часть оказывает ниже или выше левой. Рыскание определяет угол поворота квадрокоптера Arduino вокруг вертикальной оси, проходящей через его центр тяжести, обеспечивая дрону поворот в горизонтальной плоскости на нужный угол.

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

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

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

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

Полный код программы приведен в конце статьи, здесь же сначала рассмотрим его некоторые фрагменты.

Сначала в программе нам необходимо задать режимы работы используемых контактов. Pin 2 и Pin 3 конфигурируются в режим вывода данных – к ним подключены светодиод и зуммер, а Pin 4 конфигурируется в режим ввода данных – он считывает данные от датчика наклона.

Arduino

void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, INPUT);
}

1
2
3
4
5

voidsetup(){

pinMode(2,OUTPUT);

pinMode(3,OUTPUT);

pinMode(4,INPUT);

}

Теперь, всегда когда датчик наклонен свыше определенного угла на его выходе появляется напряжение высокого уровня (HIGH), которое считывается с помощью Pin 4 платы Arduino. То есть когда на Pin 4 будет напряжение высокого уровня, нам необходимо включать светодиод и зуммер.

Arduino

void loop() {
if (digitalRead(4) == 1)
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
delay(300);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
delay(300);
}
}

1
2
3
4
5
6
7
8
9
10
11

voidloop(){

if(digitalRead(4)==1)

{

digitalWrite(2,HIGH);

digitalWrite(3,HIGH);

delay(300);

digitalWrite(2,LOW);

digitalWrite(3,LOW);

delay(300);

}

}

Решения этого проекта можно применить, к примеру, в противоугонной сигнализации или коробке для особо важных (секретных) документов.

Датчик наклона на базе ардуино своими руками

Далее приведен полный текст программы.

Arduino

void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, INPUT);
}
void loop() {
if (digitalRead(4) == 1)
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
delay(300);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
delay(300);
}
}

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

voidsetup(){

pinMode(2,OUTPUT);

pinMode(3,OUTPUT);

pinMode(4,INPUT);

}

voidloop(){

if(digitalRead(4)==1)

{

digitalWrite(2,HIGH);

digitalWrite(3,HIGH);

delay(300);

digitalWrite(2,LOW);

digitalWrite(3,LOW);

delay(300);

}

}

Калибровка mpu6050

Калибровка гироскопа и акселерометра – это очень важный шаг. Приведенные значения для гироскопа имеют вид: “gyro_x_scalled = ”, так как для получения угла поворота относительно оси по данным угловой скорости, необходимо провести интегрирование. Если “gyro_x_scalled” содержит ошибку или неверно выбрана база, эта ошибка также интегрируется и превращается в значительную погрешность в результате. Так что в идеале измерения должны показывать нуль, если гироскоп не движется вокруг каких-либо осей координат. На практике добиться идеала практически невозможно, так что наша задача – минимизировать эту ошибку. Кроме того, для компенсации «дрифта», можно использовать акселерометр для расчета угла наклона, сравнения полученных данных с результатами гироскопа и последующей компенсацией данной погрешности. Расчет угла будет рассмотрен в этой статье отдельно ниже.

На рисунках далее показано использование функции MPU6050_OffsetCal() непосредственно в программе в Arduino IDE.

Скетч Arduino для калибровки платы акселерометра/гироскопа MPU6050:

Датчик наклона на базе ардуино своими руками

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

Датчик наклона на базе ардуино своими руками

Основные технические характеристики резистивных датчиков давления

Эти характеристики относятся к модели датчика давления Interlink 402, но практически все остальные датчики (недорогой Китай в том числе) обладают похожими параметрами. Естественно, уточнение характеристик по даташиту вашей модели не помешает.

  • Размер: 1/2″ (12.5 мм) чувствительной поверхности. Толщина – 0.02″ (Interlink выпускает некоторые модели, размер которых составляет 1.5″x1.5″)
  • Цена: около 7 долларов от западных производителей. 2-3 доллара в Китае.
  • Диапазон сопротивлений: бесконечность/разомкнутая цепь (нет внешнего давления), от 100 КОм (легкое давление) до 200 Ом (максимальное давление)
  • Диапазон силы: от 0 до 20 lb. (0 – 100 Ньютонов) на каждый 0.125 квадратный дюйм поверхности
  • Источник питания: любой! Использует силу тока менее 1 мА (зависит от резисторов и напряжения питания)

Инструменты

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

  1. Паяльник. Хорошим выбором станут приборы с регулируемой мощностью, их можно приспособить к любой ситуации.
  2. Проводники. Естественно, датчик необходимо будет подсоединять к МК, и для этого не всегда подходят стандартные пины.
  3. Переходник под usb-порт. Если на вашем микроконтроллере нет встроенного порта, побеспокойтесь о том, чтобы его можно было подключить к ПК другим способом. Ведь вам необходимо будет подгружать дополнительные библиотеки и новую прошивку в ваш проект.
  4. Припой, канифоль и прочие мелочи, в том числе изолированное рабочее пространство.
  5. Сам чип и МК, а также, при необходимости, корпус будущего устройства. Наиболее опытные инженеры предпочитают распечатывать оболочку для своих проектов на 3Д принтере, однако, если вы живёте в крупном городе, не обязательно тратиться. Можете поискать компании, дающие в аренду принтеры.

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

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

Установка платы датчика Холла

Во-первых, для реализации тахометра, мне нужен был небольшой неодимовый магнит, который нужно было прикрепить на вал шпинделя. Перерыл все ящики — я ничего подходящего не нашел. Зато нашел старый, нерабочий cd-rom от ноутбука. Вот в нем, в катушке электромагнита открывания, как раз и нашел, то, что нужно — небольшой, прямоугольный неодимовый магнит!

Определив высоту и полярность, я приклеил магнит к валу на «суперклей» и обтянул вал с магнитом термоусадкой. На копус шпинделя приклеил прокладку, а уже на прокладку — плату. Как видите — получилось довольно аккуратно. Защитный колпачек в процессе обдумывания, так что, пока без него

Что нужно для работы программы?

Так как микроконтроллер программируется на специально разработанной под него платформе Arduino IDE, никаких дополнительных языков программирования и специальных навыков по работе с ними вам иметь не нужно, достаточно просто подключить Arduino к компьютеру. Также стоит отметить, что микросхема ATmega328 в Arduino Uno изначально содержит предварительно установленный механизм загрузки. Именно он позволяет программировать устройство без каких-либо аппаратных программаторов, а взаимодействие программной среды на компьютере и микросхеме происходит по протоколу STK500.

Для работы с программным обеспечением микроконтроллера вам понадобиться войти в меню «Инструменты», затем выбрать «Платы» и установить Arduino Uno (если вы применяете другую модель, установите ее). После этого через Arduino IDE запрограммируйте плату на логику датчика наклона и можете приступать к эксплуатации готового устройства. Также можно программировать Ардуино через протокол ICSP, но этот метод больше подходит искушенным программистам, а не начинающим конструкторам, поэтому куда проще пользоваться стандартным способом.

Исходный код программы: Датчик наклона на базе Arduino

Источник

Как собрать датчик наклона?

Датчик наклона на базе ардуино своими руками
Рис. 3: электрическая схема датчика наклонаПодключение акселерометра к микроконтроллеру осуществляется по такому принципу:

  • Вывод ST подключается к пину платы Arduino A0;
  • Вывод перемещений по оси Z подключается к пину платы Arduino A1;
  • Вывод перемещений по оси Y подключается к пину платы Arduino A2;
  • Вывод перемещений по оси X подключается к пину платы Arduino A3;
  • Вывод GND подключается к пину платы Arduino A4;
  • Вывод VCC подключается к пину платы Arduino A5.

Затем от микроконтроллера Ардуино производится подключение к дисплею, в данной ситуации состоящего из группы светодиодов. Для подключения от платы берутся выходы с 8 по 12 и пин питания на 5В, которые распределяются по логике схемы следующим образом:

  • Пин 5В является общей точкой подключения;
  • Восьмой подключается к светодиоду, сигнализирующему о наклоне в правую сторону;
  • Девятый подключается к светодиоду, сигнализирующему о стабильном положении датчика по центру (его, для отличия, мы делаем красного цвета, но это не принципиально);
  • Десятый подключается к светодиоду, сигнализирующему о перемещении датчика назад;
  • Одиннадцатый подключается к светодиоду, сигнализирующему о наклоне в левую сторону;
  • Двенадцатый подключается к светодиоду, сигнализирующему о наклоне датчика вперед.

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

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

Рисунок 4: схема для печатной платы

Проверка правильности подключения осуществляется в контрольных точках, приведены на рисунке 3. Напряжение в них должно соответствовать данным из таблицы.

Таблица: уровни напряжения в контрольных точках

Точка на рисунке Напряжение в точке, В
Т0
Т1 5
Т2 Ниже, чем в Т3
Т3 Выше, чем в Т2

Модуль ИК дальномера KY-032

Модуль предназначен для обнаружения препятствий без непосредственного контакта с ними. На печатной плате модуля располагается ИК-светодиод и ИК-фотоприемник, когда интенсивность отраженного от препятствия излучения превышает заданный порог, формируется сигнал срабатывания датчика.

Модуль имеет размер 45 х 16 х 12 мм, массу 4 г, в печатной плате модуля предусмотрено крепежное отверстие диаметром 3 мм. На плате имеется четырехконтактный разъем, через который осуществляется питание модуля и передача информации. Назначение выводов разъема следующее: «GND» — общий провод, «+»– питание +5В, «OUT» — информационный выход, «EN» — управление режимом работы. Для индикации подачи питания на датчик служит светодиод «Pled», при срабатывании загорается светодиод «Sled».

На информационном цифровом выходе «OUT» появляется низкий логический уровень, если в поле зрения датчика имеется препятствие, иначе на выходе высокий логический уровень. В этом можно убедиться, загрузив в память Arduino UNO программу AnalogInput2, тогда при срабатывании датчика в мониторе последовательного порта программы Arduino IDE будет наблюдаться следующая картина.

По данным продавцов , датчик может обнаруживать препятствия на расстоянии от 2 до 40 см. Автору настоящего обзора удалось добиться срабатывания датчика на расстоянии 5,5-3,5 см от белого препятствия (лист бумаги). Черную шероховатую поверхность (бокс CD-дисков) датчик не видит совсем, черную глянцевую поверхность датчик регистрирует расстояния около 2 см.

Согласно документации, для настройки частоты модуляции ИК-импульсов на частоту 38 кГц служит подстроечный резистор промаркированный 103, а для регулирования чувствительности датчика следует использовать подстроечный резистор промаркированный 507. как хорошо видно на предыдущих фотографиях на плате доставшейся автору оба переменных резистора имеют маркировку 103. Возможно это брак в данном конкретном устройстве. Может быть этим и объясняется малая дальность действия датчика.

Датчик потребляет ток 4-5 мА в рабочем режиме и 5-6 мА при срабатывании. Если настроить датчик на минимально расстояние срабатывания, то можно немного уменьшить ток потребления (примерно на 1 мА). На данной фотографии, также видно, сто при срабатывании датчика загорелся светодиод «Sled».

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

Таким образом, с одно стороны датчик можно использовать по назначению, однако по факту этот датчик не превосходит более простые ИК-датчики расстояния

Скетч: Светодиод, реагирующий на наклон датчика

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

Необходимое оборудование

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

  • Одна плата Arduino Uno (см. на eBay)
  • Одна макетная плата (см. на eBay)
  • Один датчик наклона (см. на eBay)
  • Один светодиод
  • Один резистор на 220 Ом
  • Провода-перемычки

Схема

Для этого примера вам нужно лишь добавить один светодиод к схеме, показанной выше, в разделе «Подключение контактов»

Код

Чтобы завершить проект, загрузите код, показанный ниже, на плату Arduino.

1 /* 2 * Автор – Руи Сантос (Rui Santos) 3 * Более подробно о проекте на: https://randomnerdtutorials.com 4 */ 5 6 int ledPin = 12; 7 int sensorPin = 4; 8 int sensorValue; 9 int lastTiltState = HIGH; // значение, которое было считано 10 // с датчика наклона в прошлый раз 11 12 // переменная ниже имеет тип данных «long», потому что в ней 13 // будут храниться данные о времени (в миллисекундах), и это 14 // значение может стать настолько большим, что просто не уместится 15 // в типе данных «int»: 16 toggled 17 long debounceDelay = 50; // задержка для дребезга контактов; 18 // если дребезг по-прежнему есть, 19 // увеличьте эту переменную 20 21 void setup(){ 22 pinMode(sensorPin, INPUT); 23 digitalWrite(sensorPin, HIGH); 24 pinMode(ledPin, OUTPUT); 25 Serial.begin(9600); 26 } 27 28 void loop(){ 29 sensorValue = digitalRead(sensorPin); 30 // если состояние контакта поменялось, 31 // будь его причиной шум или реальное срабатывание… 32 if (sensorValue == lastTiltState) { 33 // …сбрасываем таймер для устранения дребезга: 34 lastDebounceTime = millis(); 35 } 36 if ((millis() — lastDebounceTime) > debounceDelay) { 37 // каким бы ни было считанное значение, оно осталось 38 // даже после задержки для дребезга; следовательно, 39 // принимаем его за реальное значение: 40 lastTiltState = sensorValue; 41 } 42 digitalWrite(ledPin, lastTiltState); 43 44 Serial.println(sensorValue); 45 delay(500); 46 }

Глобальные переменные

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

int accel_x_OC — Содержит измерения положения акселерометра относительно оси x при калибровке

int accel_y_OC — Содержит измерения положения акселерометра относительно оси y при калибровке

int accel_z_OC — Содержит измерения положения акселерометра относительно оси z при калибровке

int gyro_x_OC — Содержит измерения положения гироскопа относительно оси x

int gyro_y_OC — Содержит измерения положения гироскопа относительно оси y

int gyro_z_OC — Содержит измерения положения гироскопа относительно оси z

float temp_scalled — Содержит абсолютное значение температуры в градусах цельсия

float accel_x_scalled — данные оси x акселерометра минус данные калибровки

float accel_y_scalled — данные оси y акселерометра минус данные калибровки

float accel_z_scalled — данные оси z акселерометра минус данные калибровки

float gyro_x_scalled — данные гироскопа относительно оси x минус данные калибровки

float gyro_y_scalled — данные гироскопа относительно оси y минус данные калибровки

float gyro_z_scalled — данные гироскопа относительно оси z минус данные калибровки

Рейтинг
( Пока оценок нет )
Денис Серебряков/ автор статьи
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: