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

Файл, приведенный ниже, будет работать с цифровыми датчиками ускорения 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” теперь возвращают корректные значения углов.

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

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

  • Данный заголовочный файл включает в себя следующие глобальные переменные:
  • 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 минус данные калибровки

Функции в программе 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). Пропускная способность фильтра будет изменяться в соответствии с представленной ниже таблицей.

  1. Если int BW не в диапазоне 0-6, фильтр низких частот отключается, что соответствует установке – бесконечность.
  2. MPU6050_SetGains(int gyro,int accel)
  3. Эта функция используется для установки максимального значения шкалы измерений
  4. 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), что учтено в коде.

Калибровка mpu6050

Калибровка гироскопа и акселерометра – это очень важный шаг. Приведенные значения для гироскопа имеют вид: “gyro_x_scalled = ”, так как для получения угла поворота относительно оси по данным угловой скорости, необходимо провести интегрирование.

Если “gyro_x_scalled” содержит ошибку или неверно выбрана база, эта ошибка также интегрируется и превращается в значительную погрешность в результате. Так что в идеале измерения должны показывать нуль, если гироскоп не движется вокруг каких-либо осей координат.

На практике добиться идеала практически невозможно, так что наша задача – минимизировать эту ошибку.

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

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

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

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

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

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

Расчет угла с помощью гироскопа mpu6050

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

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

В дальнейшем в статье мы будем рассматривать все на примере оси x. Для расчета угла необходимо проинтегрировать переменную “gyro_x_scalled”

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

является количеством итераций

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

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

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

Мы предполагаем, что начальные углы относительно осей x, y, z после калибровки равны 0, 0 и 90 градусов соответственно, так что для итерации n=0:

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

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

В этом смысле жаль, что платы Arduino достаточно медленные, кристаллы у них работают с частотой 16 МГц и снятие измерений каждые 10-20 мс становится достаточно затруднительным (учитывая тот факт, что процессор занят не только расчетом угла, но и другими параллельными задачами).

Мы можем использовать T в виде переменной или константы, я, лично, предпочитаю использовать константу для каждого цикла. В проекте динамические факторы не учитывались, просто использовалась частота итераций с разрывом в 20 мс (0.02 с).

Погрешность гироскопа – «дрифт» (drift)

Из-зза неидеальной калибровки гироскопа, “gyro_x_scalled” никогда не равна нулю и со временем “angle_x_gyro” изменяет свои значения.

Для решения данной проблемы, проводится расчет угла с помощью акселерометра и полученные значения сравнывиются с углом гироскопа. Так как модуль MPU6050 располагается горизонтально, ускорение по оси z равно 1g (то есть, 9.

81) как это показано на рисунке. Мы можем использовать этот вектор ускорения и его проекцию на ось y для расчета угла между осями x и y.

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

Угол, который рассчитывается с помощью акселерометра, рассчитывается по зависимости:

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

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

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

Так что для лучшего результата, углы с гироскопа и акселерометра объединяются с помощью фильтра:

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

  • Окончательно уравнение для определения угла наклона принимает вид:
  • На рисунке ниже приведена имплементация полученных зависимостей в оболочке Arduino IDE

Окончательный расчет угла наклона и подбор коэффициентов усиления для фильтра

Результаты снимались для различных параметров коэффициентов усиления фильтра и приведены на рисунках по порядку. Коэффициент усиления 1 означает, что фактически идут измерения только с гироскопа. Можно заметить, что в конце angle_x и angle_y отклоняются от значений, рассчитанных с помощью значений с акселерометра.

    В моем случае, для дальнейшего проекта использовался коэффициент усиления 0.95. В зависимости от динамики системы, можно его повышать, но не до 1, так как значения будут сильно отклоняться от истинных.

    Источник: http://arduino-diy.com/arduino-MPU6050-dlya-opredeleniya-ugla-naklona

    Самодельное противоугонное устройство на Ардуино и датчике отпечатков пальцев

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

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

    Для начала мы модифицируем пусковую систему транспортного средства. Основным соединением является проводник IG от замка зажигания, по которому подается напряжение питания на регулятор напряжения, далее на микроконтроллер Arduino для его включения и выключения и сканирования пальца на датчике в течение 10 секунд.

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

    Если в течение 10 секунд датчик не определил отпечаток пальца или отпечаток не совпадает с эталонным, тогда система запуска отключается, и пуск двигателя не происходит.

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

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

    В данном проекте противоугонное устройство устанавливается на 2-х дверный купе Mitsubishi Lancer 2000.

    Шаг 1: Используемые компоненты

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

    Плата Arduino UnoДатчик, реагирующий на отпечатки пальцевРегулируемый источник питанияРелейный блокNPN-транзистор BC547BРезистор 1 кОм

    Шаг 2: Схема электрооборудования

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

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

    Шаг 3: Подготовка программных компонентов

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

    1. Загрузите среду разработки Arduino IDE2. Установите Arduino IDE.3. Загрузите библиотеку Adafruit Fingerprint4. Добавьте Adafruit fingerprint к библиотеке Arduino.

    Запустите Arduino IDE. Нажмите Sketch>Import Library> (Скетч-Импортировать библиотеку) и кликните Add library (Добавить библиотеку). Разместите в папку библиотеку Adafruit fingerprint.

    5. Запустите Arduino IDE. Нажмите File>Adafruit-Fingerprint-Sensor-Library-Master> и кликните blank (программа blank.ino).

    Загрузите blank.ino в Arduino Uno. Микроконтроллер Arduino не будет выполнять какие-либо операции, поскольку программа служит в качестве интерфейса между микроконтроллером и датчиком, реагирующим на отпечатки пальцев.

    6. Установите SFGDemo v.20: http://www.adafruit.com/product/7517. Подключите датчик, реагирующий на отпечатки пальцев, как показано на схеме8. Загрузите отпечатки пальцев, используя SFGDemoV2.0

    Шаг 4: Загрузка основной программы

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

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

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

    Шаг 5: Сборка, часть 1

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

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

    Шаг 6: Сборка, часть 2

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

    Шаг 7: Сборка, часть 3

    Плату с Arduino Uno лучше всего установить за датчиком определения отпечатков пальцев. Я немного подточил посадочное место, чтобы плата Arduino Uno заняла правильное положение.

    Шаг 8: Сборка, часть 4

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

    Шаг 9: Сборка, часть 5

    1. Подсоедините все необходимые компоненты, как показано на схеме электрооборудования на шаге 2.

    Шаг 10: Установка

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

    Оригинал статьи

    Прикрепленные файлы:

    • fingerprintModifiedwithsleepfunction.ino (5 Кб)

    Источник: https://cxem.net/arduino/arduino151.php

    Механические датчики для Arduino

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

    Количество датчиков предназначенных для совместной работы с платформой Arduino поистине не поддается исчислению. При желании можно приобрести почти какой угодно готовый модуль от банальной кнопки до детектора радиации. Такие датчики можно приобрести как по отдельности, так и в наборах самого разнообразного размера. Один из таких сравнительно дешевых наборов можно приобрести на Али за 10 долларов. Набор поставляется в полиэтиленовом пакете, некоторые из датчиков, примерно треть были упакованы в отдельные пакеты. Вместе с датчиками в посылку вложен отдельный листок с перечнем комплектации.

    Данный набор включает в себя 37 приборов, которые позволяют регистрировать разнообразные явления и процессы, а также небольшое количество простейших устройств вывода информации [1-3].

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

    Набор можно подключить к платам типа Arduino UNO или Arduino Nano без использования пайки, что является несомненным плюсом на первом этапе работы.

    В первой части данного обзора речь пойдет о механических датчиках, реагирующих на нажатие, вибрацию, поворот и т.п. Большая часть описанных ниже датчиков подключаются, по сути, аналогично цифровой кнопке. Для примера в память микроконтроллера на плате Arduino UNO можно записать программу, которая по командам от датчика зажигает светодиод, подключенный к 13 цифровому порту, код взят из [4].

    Модуль тактовой кнопки KY-004 [5]

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

    Размер модуля 24 х 15 мм, масса 1,3 г. Помимо кнопки на плате установлен резистор, сопротивлением 10 кОм. Для подключения служит трех контактный разъем, общий вывод разъема обозначен знаком «-», центральный контакт служит для подачи напряжения питания +5В, информационный контакт обозначен «S»

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

    В целом обычная цифровая кнопка. Применение такого модуля, пожалуй, оправдано только в схемах, где требуется подключить к микроконтроллеру 1-2 кнопки.

    Датчик вибрации KY-002 [6]

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

    Размер модуля 24 х 15 х 15 мм, масса 1,2 г. Конструктивно датчик представляет собой цилиндрическую металлическую пружину по оси, которой располагается проводник, который замыкается при резких ускорения, сообщаемых устройству [7]. Схема подключения, логика работы и маркировка контактов, аналогичны таковым у модуля тактовой кнопки KY-004

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

    Следует иметь в виду, что этот датчик по-разному реагирует на ускорения в различных направлениях. Ускорения попрек оси датчика он воспринимает хорошо, а вот на ускорения вдоль оси датчика реагирует заметно хуже. Датчик припаян к плате маркировка контактов, на которой совпадает с таковой у двух предыдущих датчиков.

    Датчик удара KY-031 [8]

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

    Размер модуля 30 х 18 мм, масса 1,6 г. Датчик представляет собой пружинный контакт в прямоугольном пластиковом корпусе. Датчик чувствителен к ускорениям направленным поперек продольной оси датчика

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

    Датчик поворота KY-020 [9]

    Размер модуля 24 х 15 мм, масса 1,3 г. Датчик представляет собой металлический шарик, который замыкает контакты, в том случае, когда плата изменяет свое положение в пространстве примерно на 90 градусов.

    Полезное:  Raspberry Pi 3: подключение, установка, настройка

    • Устройство подключается полностью идентично кнопке KY-004.

    Следует иметь в виду, что датчик совершенно не подходит для определения малых поворотов. В целом, как и два предыдущих механических датчика данная конструкция иногда может срабатывать не очень надежно.

    Механический датчик поворота

    Механический датчик поворота (Валкодер или энкодер) KY-040 [10-15].

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

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

    Размер модуля 30 х 18 мм, высота 28 мм, масса 6,5 г. В плате имеется два крепежных отверстия, диаметром 3 мм, на расстоянии 14 мм друг от друга. Модуль имеет пять выводов:

    • “GND” – общий,
    • “+” – питание 5 В,
    • “SW” – вывод кнопки,
    • “DT” и “CLK” – выводы сигналов с валкодера.

    Работа с кнопкой аналогична таковой для любой цифровой кнопки, например KY-004, или аналогичной.

    С выводов “DT” и “CLK” при вращении штока устройства можно считать последовательности сигналов высокого и низкого логического уровня, сдвинутые по фазе примерно на четверть периода.

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

    Джойстик KY-040 [16-17]

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

    Ручка джойстика механически связана с парой переменных резисторов, сопротивлением 10 кОм. Отклонение ручки вызывает изменение сопротивления резисторов. При нажатии на джойстик замыкается расположенная под ним кнопка.

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

    Размер модуля 40 х 26 мм, высота 28 мм, масса 9,8 г. В плате есть четыре крепежных отверстия, диаметром 3 мм, расположенных в вершинах прямоугольника со сторонами 20 и 26 мм. На плате имеется пять выводов:

    1. “GND” – общий,
    2. “+5V” питание,
    3. “VRx” — выводы переменного резистора кодирующего перемещение по оси X,
    4. “VRy” — выводы переменного резистора кодирующего перемещение по оси Y,
    5. “SW” — вывод кнопки.
    1. Можно написать простую программу, которая будет при помощи светодиода, подключенного к 13 цифровому порту отображать нажатие кнопки джойстика, а информацию о сопротивлении переменных резисторов выводить в терминал последовательного порта.
    • 1) https://arduino-kit.ru/catalog/id/37-v-1-nabor-datchikov
    • 2) https://arduinomaster.ru/arduino-kit/nabor-arduino-sensor-kit-37-v-1/
    • 3) https://mysku.ru/blog/china-stores/37299.html
    • 4) http://robocraft.ru/blog/arduino/57.html
    • 5) https://arduino-kit.ru/catalog/id/modul-taktovoy-knopki
    • 6) https://arduino-kit.ru/catalog/id/modul-datchika-vibratsii
    • 7) https://arduino-kit.ru/userfiles/image/SW-1801_a.jpg
    • 8) https://arduino-kit.ru/catalog/id/modul-datchika-udara
    • 9) https://arduino-kit.ru/catalog/id/modul-datchika-naklona_
    • 10) https://arduino-kit.ru/catalog/id/modul-datchika-vrascheniya-_valkoder_
    • 11) https://mysku.ru/blog/aliexpress/40668.html
    • 12) https://datagor.ru/microcontrollers/281-chto-est-valkoder….html
    • 13) http://www.zi-zi.ru/docs/modules/info_KY-040.pdf
    • 14) http://cxem.net/arduino/arduino8.php
    • 15) http://mypractic.ru/urok-55-rabota-s-inkrementalnym-enkoderom-v-arduino-biblioteka-encod_er-h.html
    • 16) http://soltau.ru/index.php/arduino/item/384-kak-podklyuchit-dzhojstik-k-arduino
    • 17) http://www.zi-zi.ru/module/module-ky023

    Вторую часть обзора читайте здесь. Специально для 2 Схемы.ру — Denev

    25,00

    НАЖМИТЕ ТУТ И ОТКРОЙТЕ КОММЕНТАРИИ

    Источник: https://2shemi.ru/mehanicheskie-datchiki-dlya-arduino/

    Датчики наклона

    Простейший датчик наклона
    Модуль датчика наклона KY-020
    Модуль датчика наклона KY-017
    Модуль датчика наклона KY-027

    Простейший датчик наклона

    Датчик наклона — это капсула с двумя металлическими шариками внутри. Шарики перекатывается в капсуле и замыкают или размыкают цепь. Таким образом, датчик выдаёт простой цифровой сигнал: логический ноль или единицу в зависимости от того, в какую сторону наклонена капсула. Датчик наклона можно использовать в качестве простого переключателя при наклоне.

    Самая распространённая модель — это SW-200D. У датчика один вывод серебристый, а второй — золотистый.

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

    Технические характеристики

    • Время отклика: 2 мс
    • Сопротивление при замкнутом: до 10 Ом
    • Сопротивление при разомкнутом: свыше 10 мОм
    • Рабочее напряжение: до 12 В
    • Потребляемый ток: до 20 мА
    • Допустимая температура: от -40 до +80°C
    • Допустимая влажность: 95% RH (40°C до 96 часов)
    • Усилие отрыва: 500 гс на 1 мин
    • Время жизни: 100000 циклов
    • Размер: 12 x 3,6 мм
    • Вес: менее 1 г

    Соединим по следующей схеме. Один вывод датчика наклона соединим с аналоговым выводом A5, также к этому выводу добавим резистор 220Ом и притянем его к GND. Второй вывод датчика соединим с 5V. Для наглядности добавим в схему светодиод к контакту 8.

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

    При наклоне в одну сторону светодиод будет светиться, в остальных случаях светодиод остаётся выключенным.

    const int ledPin = 8;

    void setup()
    {
    pinMode(ledPin, OUTPUT);
    Serial.begin(9600);
    }

    void loop()
    {
    int val; // data from an analog pin

    val = analogRead(A5); // read the voltage value of analog pin 5
    Serial.println(val);

    if (val > 512) // if larger 2.5V
    {
    digitalWrite(ledPin, HIGH); // turn on LED
    }
    else // otherwise
    {
    digitalWrite(ledPin, LOW); // turn off LED
    }
    }

    При просмотре показаний я увидел, что в обычном состоянии значение равно 0, при попытке чуть-чуть наклонить датчик в одну сторону показания резко увеличиваются до 900 с лишним единиц. Промежуточных результатов практически нет.

    Модуль датчика наклона KY-020

    Предыдущий датчик также можно встретить в виде модуля KY-020.

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

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

    У модуля три вывода: земля, питание, цифровой вывод.

    KY-020 | Arduino
    —————-
    — | GND
    + | 5V
    S | D

    Входит в состав набора Набор из 37 датчиков

    Модуль датчика наклона KY-017

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

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

    У модуля три вывода: земля, питание, цифровой вывод.

    Датчик наклона на базе Ардуино своими руками
    KY-017 | Arduino
    ————-
    — | GND
    + | 5V
    S | D

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

    int ledPin = 13;
    int tiltPin = 3;
    int val;

    void setup()
    {
    pinMode(ledPin, OUTPUT);
    pinMode(tiltPin, INPUT);
    }

    void loop()
    {
    val = digitalRead(tiltPin);
    if(val == HIGH)
    {
    digitalWrite(ledPin, HIGH);
    }
    else
    {
    digitalWrite(ledPin, LOW);
    }
    }

    Входит в состав набора Набор из 37 датчиков

    Модуль датчика наклона KY-027

    Модуль датчика наклона KY-027 состоит из светодиода с резистором на 10кОм и колбы с шариком ртути. При наклоне в сторону электродов шарик скатывается и замыкает их.

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

    Если сравнивать с моделью KY-017, то можно увидеть разное количество выводов (3 и 4) и разные типы светодиодов (встроенный и внешний).

    Часто модуль поставляется парами, чтобы отслеживать наклоны в двух плоскостях.

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

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

    KY-027 (A) | Arduino
    ——————
    G | GND
    + | 5V
    S | D
    L | D

    KY-027 (B) | Arduino
    ——————
    G | GND
    + | 5V
    S | D
    L | D
    Датчик наклона на базе Ардуино своими руками
    int ledPinA = 9;
    int switchPinA = 8;
    int switchStateA = 0;
    int ledPinB = 6;
    int switchPinB = 7;
    int switchStateB = 0;
    int brightness = 0;

    void setup()
    {
    pinMode(ledPinA, OUTPUT);
    pinMode(ledPinB, OUTPUT);
    pinMode(switchPinA, INPUT);
    pinMode(switchPinB, INPUT);
    }

    void loop()
    {
    switchStateA = digitalRead(switchPinA);
    if (switchStateA == HIGH && brightness != 255)
    {
    brightness ++;
    }
    switchStateB = digitalRead(switchPinB);
    if (switchStateB == HIGH && brightness != 0)
    {
    brightness —;
    }
    analogWrite(ledPinA, brightness); // A slow fade out
    analogWrite(ledPinB, 255 — brightness); // B slow bright up
    delay(20);
    }

    Входит в состав набора Набор из 37 датчиков

    Дополнительные материалы

    Компонент KY-027 для Fritzing

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

    Реклама

    Источник: http://developer.alexanderklimov.ru/arduino/sensors/tilt.php

    Ловим горизонт с Arduino

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

    Инструменты и материалы

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

    Найменование Количество
    Акселерометр MMA7260 1 шт.
    Трех-степенная платформа 1 шт.
    Макетная плата 1 шт.
    Стяжка 1 шт.
    Соединительные провода 8 шт.
    Белый медведь 1 шт.

    Самой необходимой деталью для нашей установки является акселерометр.

    На просторах сети имеется множество предложения для Arduino в части акселерометров и самый доступный — это трех-осевой акселерометр MMA7260. В продаже он уже поставляется на плате, где уже имеется стабилизатор 3,3в 800мА для питания.

    На выходах осей X, Y, Z распаяны фильтры в виде RC-цепочек, а также сам он имеет фильтр низких частот (что не очень заметно при первом знакомстве).

    В соответствии с документацией на устройство, имеется возможность выбора чувствительности (4 режима), а также включение и выключения режима сна.

    Настройка чувствительности датчика осуществляется с помощью входов G1 и G2. Максимальный уровень чувствительности 1.5g (00), минимальный 6g (11).

    Схема подключения

    Подключение акселерометра к плате Arduino осуществляется по схеме, представленной ниже:Датчик наклона на базе Ардуино своими руками Чтобы акселерометр всегда выдавал значения его принудительно необходимо вывести из режима сна, просто подав на выход SL (Sleep) питание. Выбор режима чувствительности осуществляется с помощью перемычек J1 и J2. Первоначально данную схему можно собрать на макетной плате, после чего можно распаять длинные проводки. Перемычки ставятся на контактную площадку 3х2, где крайние левые два контакта 3.3в, центральные G1 и G2 соответственно, а крайние правые контакты «земля». В результате после сборки получается следующая конструкция:Датчик наклона на базе Ардуино своими руками Подключение трехстепенной платформы к Arduino осуществляется на три выхода с поддержкой ШИМ, а входы от датчика положения на три аналоговых входа A0…A2. Пример подключения узлов к Arduino:Датчик наклона на базе Ардуино своими руками

    Программирование

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

    1. int x, y, z;
    2. // Калибровка датчика
    3. int dx=357;
    4. int dy=385;
    5. int dz=178;
    6. void setup()
    7. {
    8.    Serial.begin(9600);
    9. }
    10. void loop()
    11. {
    12.   // Значения осей с датчика
    13.   x = analogRead(A0) — dx;
    14.   y = analogRead(A1) — dy;
    15.   z = analogRead(A2) — dz;
    16.   // Вывод в Serial monitor
    17.   Serial.print(«X: «);
    18.   Serial.print(x);
    19.   Serial.print(«Y:»);
    20.   Serial.print(y);
    21.   Serial.print(«Z:»);
    22.   Serial.println(z);
    23.   //Период опроса
    24.   delay(100);
    25. }

    * This source code was highlighted with Source Code Highlighter.

    Тестирование

    Перед началом работы, необходимо произвести калибровку датчика, по следующей методике: 1) Установить в прошивке контроллера значения калибровки равные нулю, записать прошивку в контроллер; 2) Зафиксировать датчик в горизонтальном положении; 3) Снять показания с датчика в течение 3 секунд; 4) Вычислить средние значения в горизонтальном положении и внести поправку в калибровочные значения. Данные измерения необходимо делать на минимальной чувствительности или близкой к ней, чтобы исключить лишние показания при ударах стала или любые другие воздействия. До проведения калибровки датчик выдавал следующие значения:Датчик наклона на базе Ардуино своими руками По графику видно, что завяленные фильтры низких частот работают довольно странно, так как шумят оси очень сильно. Для подавления шума необходимо или писать свой фильтр низких частот или нормировать шкалу измерений к меньшей (в случае с сервоприводами шум частично подавляется таким методом). В результате полученных измерений были получены следующие поправки:

    • dx = 357
    • dy = 385
    • dz = 178

    После калибровки показания датчика стали показывать реальную картину:Датчик наклона на базе Ардуино своими руками В таком виде уже можно использовать показания датчика в своих проектах.

    Результат

    UPD. Программная фильтрация сигнала осуществляется по алгоритму, представленному в википедии:

    function lowpass(real[0..n] x, real dt, real RC)   var real[0..n] y   var real α := dt / (RC + dt)   y[0] := x[0]

      for i from 1 to n

        y[i] := α * x[i] + (1-α) * y[i-1]

      return y

    * This source code was highlighted with Source Code Highlighter.

    хотя второй вариант мне нравится больше:  for i from 1 to n     y[i] := y[i-1] + α * (x[i] — y[i-1])

    * This source code was highlighted with Source Code Highlighter.

    Источник: https://habr.com/post/127165/

    Домашняя сигнализация на Arduino

    Здравствуй, дорогой читатель! Сегодняшняя статья посвящена созданию простой домашней системы безопасности, при помощи доступных компонентов. Это маленькое и дешёвое устройство поможет тебе защитить ваше жилище от проникновения при помощи Arduino, датчика движения, дисплея и динамика. Питаться устройство сможет от батарейки или USB-порта компьютера.

    Итак, начнём!

    Как оно работает?

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

    Для более широкого радиуса действия используют линзы Френеля, которые собирают ИК-излучение с разных направлений и концентрируют его на самом датчике.

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

    • На рисунке видно, как линза искажает лучи, которые падают на неё.
    • Стоит отметить, что роботы без особо греющихся частей и хладнокровные излучают в ИК-диапазоне очень слабо, поэтому датчик может не сработать в случае, если тебя решат обнести сотрудники Boston Dynamics или рептилоиды.
    • Когда происходит изменение уровня ИК излучения в диапазоне действия, это будет обрабатываться на Arduino после чего на LCD дисплее будет выводится статус, светодиод будет мигать, а спикер пищать.

    Что нам потребуется?

    Кстати, если не хочется покупать все эти детали по отдельности — рекомендуем обратить внимание на наши стартовые наборы. К примеру, всё необходимое и даже больше есть в нашем стартовом наборе Кавасаки-2.

    Подключаем!

    Подключение датчика движения очень простое:

    1. Пин Vcc подключаем к 5V Ардуино.
    2. Пин Gnd подключаем к GND Ардуино.
    3. Пин OUT подключаем к цифровому пину №7 от Arduino

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

    Теперь присоединим светодиод и спикер. Тут всё так же просто:

    1. Короткую ножку (минус) светодиода подключаем к земле
    2. Длинную ножку (плюс) светодиода подключаем к выходу №13 Arduino
    3. Красный провод спикера к выходу №10
    4. Чёрный провод – к земле

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

    И теперь самое сложное – подключение LCD дисплея 1602 к Arduino. Дисплей у нас без I2C, поэтому потребуется много выходов Arduino, но результат будет того стоить. Схема представлена ниже:

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

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

    Пин дисплея Пин Arduino
    RS 12
    Enable 11
    D4 5
    D5 4
    D6 3
    D7 2

    Теперь ты знаешь, как подключить дисплей 1602 к Arduino UNO R3 (ровно как и к любой версии Arduino от Mini до Mega).

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

    Программируем

    Пришло время перейти к программированию. Ниже представлен код, который надо лишь залить и, если вы собрали всё верно – устройство готово!

    #include
    int ledPin = 13; // Пин светодиода
    int inputPin = 7; // Пин, к которому подключен Out датчика движения
    int pirState = LOW; // Текущее состояние (в начале ничего не обнаружено)
    int val = 0; // Переменная для чтения состояния цифровых входов
    int pinSpeaker = 10; // Пин, к которому подключен динамик. Требуется использовать пин с ШИМ (PWM)

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Инициалиация LCD дисплея

    void setup() { // Определение направления передачи данных на цифровых пинах
    pinMode(ledPin, OUTPUT);
    pinMode(inputPin, INPUT);
    pinMode(pinSpeaker, OUTPUT);
    // Запуск вывода отладочной информации через последовательный порт
    Serial.begin(9600);

    // Запуск вывода на LCD дисплей
    lcd.begin(16, 2);
    // Устанавливаем индекс на дисплеи, с которого начнём вывод
    // (2 символ, 0 строки)
    lcd.setCursor(2, 0);
    // Вывод на LCD дисплей
    lcd.print(«P.I.R Motion»);
    // Снова перемещаем
    lcd.setCursor(5, 1);
    // Выводим
    lcd.print(«Sensor»);
    // Пауза, чтобы успели прочитать, что вывели
    delay(5000);
    // Очистка
    lcd.clear();

    // Аналогично
    lcd.setCursor(0, 0);
    lcd.print(«Processing Data.»);
    delay(3000);
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print(«Waiting For»);
    lcd.setCursor(3, 1);
    lcd.print(«Motion….»);
    }

    void loop() { // Считываем показание датчика
    val = digitalRead(inputPin);
    if (val == HIGH) {
    // Если есть движение, то зажигаем светодиод и включаем сирену
    digitalWrite(ledPin, HIGH);
    playTone(300, 300);
    delay(150);

    // Если движения до данного момента не было, то выводим сообщение
    // что оно обнаружено
    // Код ниже нужен для того, чтобы писать лишь смену состояния, а не каждый раз выводить значение
    if (pirState == LOW) {
    Serial.println(«Motion detected!»);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(«Motion Detected!»);

    pirState = HIGH;
    }
    } else {
    // Если движене закончилось
    digitalWrite(ledPin, LOW);
    playTone(0, 0);
    delay(300);
    if (pirState == HIGH){
    // Сообщаем, что движение было, но уже закончилось
    Serial.println(«Motion ended!»);
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print(«Waiting For»);
    lcd.setCursor(3, 1);
    lcd.print(«Motion….»);
    pirState = LOW;
    }
    }
    }

    // Функция воспроизведения звука. Duration (длительность )- в миллисекундах, Freq (частота) — в Гц
    void playTone(long duration, int freq) {
    duration *= 1000;
    int period = (1.0 / freq) * 100000;
    long elapsed_time = 0;
    while (elapsed_time < duration) { digitalWrite(pinSpeaker,HIGH); delayMicroseconds(period / 2); digitalWrite(pinSpeaker, LOW); delayMicroseconds(period / 2); elapsed_time += (period); } }

    Заключение

    Итоговая схема представлена на рисунке:

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

    На ней Arduino уже запитана от батарейки 9V, а не от USB порта.

    Источники

    Источник: https://tpai.ru/blog/stati/domashnyaya-signalizaciya-ili-ispolzovanie-datchika-dvizheniya-i-lcd-monitora-s-arduino

    Как подключить аналоговый акселерометр ADXL335 к Arduino

    Акселерометры используют для определения вектора ускорения. Акселерометр ADXL335 имеет три оси, и благодаря этому он может определять вектор ускорения в трёхмерном пространстве.

    Ввиду того, что сила земного притяжения – это тоже вектор, мы можем определять ориентацию акселерометра в трёхмерном пространстве относительно центра Земли.

    На иллюстрации приведены рисунки из паспорта на акселерометр ADXL335.

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

    Датчик наклона на базе Ардуино своими рукамиПринцип снятия измерений с аналогового акселерометра ADXL335

    Рассмотрим подробнее, что же показывает нам акселерометр. Пусть датчик лежит горизонтально, например, на столе. Тогда проекция вектора ускорения будет равна «1g» по оси Z, или Zout = 1g. По остальным двум осям будут нули: Xout = 0 и Yout = 0.

    При повороте датчика «на спину», он будет направлен в противоположную сторону относительно вектора силы тяжести, т.е. Zout = −1g. Аналогично измерения снимаются по всем трём осям.

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

    Если датчик сильно тряхнуть вдоль вертикальной оси Z, то значение Zout будет больше, чем «1g». Максимальное измеряемое ускорение составляет «±3g» по каждой из осей («плюс» и «минус» тут обозначают направление ускорения).

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

    2Схема подключения акселерометра к Arduino

    Чип аналогового акселерометра ADXL335 довольно мелкий и помещён в BGA корпус, и в домашних условиях его сложно смонтировать на плату. Поэтому я буду использовать готовый модуль GY-61 с акселерометром ADXL335.

    Для питания акселерометра необходимо подать на вывод VCC модуля напряжение +3,3 В. Измерительные каналы датчика подключаются к аналоговым выводам Arduino, например, «A0», «A1» и «A2». Это вся схема 🙂

    Датчик наклона на базе Ардуино своими рукамиСхема подключения аналогового трёхосевого акселерометра ADXL335 к Arduino

    3Калибровкааналогового акселерометра ADXL335

    Arduino имеет 10-разрядный АЦП, а максимальное допустимое напряжение на выводе – 5 вольт. Измеренные напряжения кодируются битами, которые могут принимать только 2 значения – 0 или 1.

    Это значит, что весь диапазон измерений будет поделён на (1+1)10, т.е. на 1024 равных отрезка.

    Для того чтобы перевести снимаемые показания в вольты, нужно каждое измеренное на аналоговом входе значение поделить на 1024 (отрезка), а затем умножить на 5 (вольт).

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

    //определяем аналоговые пины: const int xPin = A0; const int yPin = A1; const int zPin = A2; void setup() { //инициализируем послед. порт: Serial.begin(9600); } void loop() { // считываем показания: int xRead = analogRead(xPin); int yRead = analogRead(yPin); int zRead = analogRead(zPin); //Выводим показания в порт в Вольтах: Serial.print(«x: «); Serial.print(xRead * 5 / 1024.0); Serial.print(» | y: «); Serial.print(yRead * 5 / 1024.0); Serial.print(» | z: «); Serial.println(zRead * 5 / 1024.0); delay(100); //задержка 100 мс }

    Посмотрим, что же реально приходит с акселерометра на примере оси Z (см. последний столбец на иллюстрации). Когда датчик расположен горизонтально и смотрит вверх, приходят числа (2,03±0,01). Это должно соответствовать ускорению «1g» по оси Z и углу 0° согласно паспорту на ADXL335. Перевернём датчик. Приходят числа (1,69±0,01), что должно соответствовать «−1g» и углу 180°.

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

    4Определение ускоренийпо трём осям акселерометра

    Снимем значения с акселерометра при углах 90° и 270° и занесём в таблицу. Таблица показывает углы поворота акселерометра (столбец «A») и соответствующие им значения Zout в вольтах (столбец «B»).

    Датчик наклона на базе Ардуино своими рукамиОпределение ускорений по трём осям акселерометра ADXL335

    Для наглядности приведён график напряжений на выходе Zout в зависимости от угла поворота. Голубое поле – это область значений в спокойном состоянии (при ускорении 1g). Розовое поле на графике – это запас для того чтобы мы могли измерять ускорение до +3g и до −3g.

    При угле поворота 90° на ось Z приходится нулевое ускорение. Т.е. значение 1,67 вольт – это условный ноль Z0. Тогда определим ускорение так: g = Zout – Z0 / Sz, здесь Zout – измеренное значение в милливольтах, Z0 – значение при нулевом ускорении в милливольтах, Sz – чувствительность датчика по оси Z, измеренная в мВ/g.

    Чувствительность акселерометра приведена в паспорте и равна в среднем 300 мВ/g или 0,3 В/g, но вообще лучше провести калибровку акселерометра и вычислить значение чувствительности конкретно для вашего датчика по формуле: Sz = Z(0°) – Z(90°) В данном случае чувствительность акселерометра по оси Z = 2,03 – 1,68 = 0,35 В/g. Аналогично чувствительность нужно будет посчитать для осей X и Y.

    В столбце «С» таблицы приводится расчётное ускорение при чувствительности, равной 350 мВ/g. Как видно, расчёты практически совпадают с номинальными величинами, которые даются на первом рисунке из паспорта на датчик ADXL335, т.е. наш датчик довольно точно показывает свою ориентацию в пространстве (я показал это просто для самопроверки, дальше это не пригодится).

    5Определение углов поворота акселерометра

    Вспомнив базовый курс школьной геометрии, выведем формулу для вычисления углов поворота акселерометра: angle_X = arctg[ √(Gz2 + Gy2) / Gx ]. Значения получаются в радианах. Чтобы перевести радианы в градусы, поделим результат на число π и умножим на 180°.

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

    const int xPin = A0; //определяем аналоговые пины, const int yPin = A1; //к которым подключим const int zPin = A2; //три канала акселерометра const float Vmax = 5.0; //макс. допустимое напряжение на аналоговом входе const float x0 = 1.71; //значения по осям при нулевых «g»; const float y0 = 1.69; //эти значения вы должны определить const float z0 = 1.68; //самостоятельно (см.шаг 4) const float sens_x = 0.35; //чувствительность по осям в В/g; const float sens_y = 0.35; //эти значения вы должны определить const float sens_z = 0.35; //самостоятельно (см.шаг 4) void setup() { Serial.begin(9600); //инициализация последовательного порта } void loop() { unsigned int value_x = analogRead(xPin); //считываем значения с акселерометра unsigned int value_y = analogRead(yPin); unsigned int value_z = analogRead(zPin); float Gx=(value_x*Vmax/1024.0 − x0)/sens_x; //определяем ускорения по осям float Gy=(value_y*Vmax/1024.0 − y0)/sens_y; float Gz=(value_z*Vmax/1024.0 − z0)/sens_z; Serial.print(«Gx: » + String(Gx)); //выводим ускорения в послед. порт Serial.print(» | Gy: » + String(Gy)); Serial.println(» | Gz: » + String(Gz)); float angle_x = atan(sqrt(Gz*Gz + Gy*Gy) / Gx)*180 / PI; //ищем углы поворота float angle_y = atan(sqrt(Gx*Gx + Gz*Gz) / Gy)*180 / PI; float angle_z = atan(sqrt(Gx*Gx + Gy*Gy) / Gz)*180 / PI; Serial.print(«x: » + String(round(angle_x))); //выводим углы поворота акселерометра Serial.print(«o | y: » + String(round(angle_y))); Serial.println(«o | z: » + String(round(angle_z)) + «o»); Serial.println(); delay(500); }

    При выводе в порт Serial.print() символ обозначает знак табуляции, чтобы столбцы были ровные, и значения располагались друг под другом.

    Символ + означает конкатенацию (объединение) нескольких строк. Оператор String() явно указывает компилятору, что численное значение нужно преобразовать в строку.

    Оператор round() округляет угол с точностью до 1°.

    Датчик наклона на базе Ардуино своими рукамиПодключение аналогового акселерометра ADXL335 к Arduino с помощью макетной платы

    Итак, мы с вами научились снимать и обрабатывать данные с аналогового акселерометра ADXL335 при помощи Arduino.

    Полезный совет

    Определите «нулевые» значения напряжений и чувствительности по осям X, Y и Z для вашего датчика с помощью скетча, описанного в разделе «Калибровка аналогового акселерометра ADXL335». Иначе углы и ускорения будут вычисляться со значительными ошибками.

    Источник: https://soltau.ru/index.php/arduino/item/350-kak-podklyuchit-akselerometr-k-arduino

    Использование датчика холла с arduino

    В этой статье мы рассмотрим, как использовать модуль датчик холла совместно с Arduino. Датчик холла — это датчик, который меняет свой выходной потенциал (напряжение) в зависимости от присутствии или отсутствии магнитного поля.

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

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

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

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

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

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

    По виду они обычно выглядят как плата с 3 контактами: один контакт сигнал и другие 2 для питания датчика. Это существенно упрощает подключение модуля к любому микроконтроллеру или исполнительной схеме.

    В сегодняшнем материале Elwo.ru покажет, как работает датчик холла, подключив его вместе со светодиодом к Arduino блоку. Arduino будет запрограммирован таким образом, что, когда магнит приближается к датчику холла — светодиод включается, а когда магнит удаляется — он гаснет.

    Схема принципиальная

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

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

    Датчик Холла — Ардуино

    • VCC — 5V
    • GND — GND
    • SIG — D2

    LED можно подсоединить сразу в Arduino с положительной ногой в pin 13 Arduino и другой ногой в земляной штырь без резистора, потому что arduino имеет внутренний резистор прикрепленный к pin 13.

    Требуемые компоненты для схемы

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

    • Датчик холла
    • Arduino Uno
    • LED
    • Магнит
    • Провода

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

    Теперь можем перейти к коду для этого проекта.

    Код прошивки МК

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

    В функции настройки void мы объявляем pinmode для контактов Arduino, к которому подключены светодиод и датчик Холла.

    Далее идет функция void loop, задача здесь как если бы надо было использовать кнопку для управления светодиодом с Arduino между ними. Читаем выход датчика холла и храним в переменной с именем state.

    Полный код для этого проекта показан далее:

    • int hallSensorPin = 2;     
      int ledPin =  13;    
    • int state = 0;          
    • void setup() {
        pinMode(ledPin, OUTPUT);      
        pinMode(hallSensorPin, INPUT);     
    • }
    • void loop(){
        
    •   state = digitalRead(hallSensorPin);
    •   if (state == LOW) {        
          digitalWrite(ledPin, HIGH);  
        } 
        else {
          digitalWrite(ledPin, LOW); 
        }
    • }

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

       Схемы на микроконтроллерах

    Источник: https://elwo.ru/publ/skhemy_na_mikrokontrollerakh/ispolzovanie_datchika_kholla_s_arduino/9-1-0-1088

    Ссылка на основную публикацию