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” теперь возвращают корректные значения углов.
Глобальные переменные
Данный заголовочный файл включает в себя следующие глобальные переменные:
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). Пропускная способность фильтра будет изменяться в соответствии с представленной ниже таблицей.
Если int BW не в диапазоне 0-6, фильтр низких частот отключается, что соответствует установке – бесконечность.
MPU6050_SetGains(int gyro,int accel)
Эта функция используется для установки максимального значения шкалы измерений
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 | Каталог самоделок
Необходимость в толщиномере лакокрасочных покрытий (ЛКП) особо ощутима при покупке автомобиля с пробегом. Только им можно выявить достоверно места крашенных или шпаклеванных деталей. При этом неоднородность слоя краски является сигнализирующим фактором.
Можно взять во временное пользование профессиональный измеритель ЛКП, но его придется вскоре возвращать. А покупка подержанной машины может растянуться на несколько месяцев.
Измеритель толщины работает следующим образом:
- Проводится калибровка. Поскольку разные автомобили имеют различную толщину краски, то процедура калибровки в начале работы необходима. К тому же после калибровки температурные изменения меньше влияют на точность результатов. Выполняется просто, прикладывается датчик к чистой окрашенной поверхности и нажимается кнопка «калибровка». Данные о толщине покрытия, выраженные в условных единицах, записываются в EEPROM (програмно перезаписываемую память).
- Выполняется измерение, горит зеленый светодиод. Зеленый светодиод горит, когда отклонение измеренной толщины от записанной незначительно, «норма». Для выполнения измерения, прибор прикладывается к подозрительным и потенциально подверженным ударам и коррозии местам, нажимается кнопка «измерение».
- Загорается один из белых светодиодов — небольшое отклонение слоя краски от записанной величины, «подозрительно».
- Загорается один из синих светодиодов — затерты следы царапин или есть второй слой краски, «шлифовано» или «краска».
- Загорается один из красных светодиодов — толщина покрытия близка к нулю или превышает в 0.2 раза записанное значение, «металл» или «шпаклевка».
При нажатии на кнопку «измерение» замеры толщины проводятся 3 раза, а потом вычисляется среднее значение. Можно получать результат мгновенно, задав проведение измерения всего один раз.
Датчиком прибора является катушка индуктивности, устройством для вычисления величины индуктивности служит плата Arduino.
Толщиномер с индикацией на светодиодах получается компактным. Для установки LCD модуля понабилось бы изготовить громоздкий корпус.
Необходимые детали:
- Маленькая и удобная плата Arduino nano.
- Кусок паечной макетной платы.
- Две маленькие тактовые кнопки.
- Батарея питания «Крона».
- Два красных светодиода.
- Два синих светодиода.
- Два белых светодиода.
- Один зеленый светодиод.
- Резисторы 1 кОм — 10 штук.
- Выпрямительный диод IN4007 или другой малой мощности, небольшого размера.
- Конденсатор неполярный 100 нФ.
- Катушка индуктивности — 100 витков проволоки 0,1 мм. кв. на ферритовом сердечнике d=8 мм.
Сложности могут возникнуть при изготовлении катушки. Необходимо найти одну чашечку ферритового броневого сердечника.
На конической части шариковой ручки разместить две картонные щечки на нужном расстоянии друг от друга, чтобы — так получится импровизированный каркас самодельной катушки. Берем обмоточный провод минимальной толщины, около 0.
1 мм, чтобы необходимое количество витков из него поместилось внутри сердечника. Намотав около 100 витков на шариковую ручку, снимаем одну из щечек временного каркаса, и надавливая на другой картонный кружок, заталкиваем получившуюся катушку внутрь ферритовой чашки.
Выпавшие витки заправляем на сердечник пинцетом. Капнув суперклеем на витки, фиксируем их, и закрываем катушку подходящим картонным кружком. Готовая катушка закрепляется на плате термоклеем.
От того, насколько качественно изготовлена катушка, будет зависеть точность измерителя толщины.
Конденсатор следует подобрать с минимальным ТКЕ (температурным коэффициентом емкости). Рекомендуется найти металлопленочный неполярный конденсатор, у керамических элементов ТКЕ достигает недопустимых значений.
После сборки всех деталей получается такая конструкция.
Здесь реализована идея сборки простейшего прибора с минимумом навесных деталей.
Принцип работы устройства в следующем:
- Реализована схема, определяющая резонансную частоту LC-контура.
На измерительную катушку и конденсатор (LC-контур) подается калиброванный сигнал, аппроксимированно синусоидальный, после чего работает счетчик, пока сиглал в контуре не затухнет до уровня «0» — срабатывания компаратора Arduino nano.
- Отсчитанное счетчиком время пропорционально резонансной частоте LC-контура.
Текст программы: толщиномер на Arduino.zip
Вывод: предложенная схема дает возможность собрать профессиональное устройство высокой точности, для этого нужно качественно собрать катушку, выбрать неполярный конденсатор с минимальным ТКЕ, подключить экранный модуль LCD, вставить формулу перерасчета значений счетчика в микрометры.
Источник: https://volt-index.ru/high-tech/arduino/tolshhinomer-lakokrasochnyih-pokryitiy-na-arduino.html
Угломер электронный, магнитный, уровень, транспортир, инклинометр
Инклинометр модели Digital inclinometer станет полезным аксессуаром для людей, которые занимаются слесарными, столярными, строительными работами и т.п.
С его помощью можно быстро и точно определить угол наклона горизонтальной или вертикальной поверхности, что будет полезно, например, при изготовлении мебели, установке направляющих для гипсокартонных конструкций и т.п. Электронный угломер может измерять угол наклона любой из 4-х боковых сторон.
Для работы уклономеру требуется питание 9 В постоянного тока. Питание осуществляется от батарейки типоразмера 6F22 “Крона” (не идет в комплекте поставки). Устанавливается батарейка в специальный бокс на тыльной стороне устройства. Для установки батарейки требуется открутить 4 винта.
Для этого понадобится крестообразная отвертка (идет в комплекте поставки). Далее установить батарейку в специальный отсек и закрутить винты крышки обратно. Информация отображается на LCD дисплее диагональю 1,8″.
Электронный угломер оснащен тремя кнопками:
- ON/OFF – включение/выключение угломера;
- ZERO – установка “нуля”;
- HOLD/Tilt% – фиксация значения измеренного угла. Также с помощью этой кнопки можно переключить единицы измерения из градусов на проценты (для измерения наклона в процентах). Для этого нужно нажать и удерживать эту кнопку в течение 2 секунд.
Для установки и надежной фиксации на металлических поверхностях угломер оснащен тремя магнитными держателями, которые находятся на нижней боковой стороне корпуса устройства.
Калибровка электронного угломера Digital inclinometer. Когда возникает сомнения в достоверности показаний угломера, требуется произвести калибровку.
Для калибровки угломера сначала требуется выключить его, нажав на кнопку “ON/OFF”, далее нужно одновременно нажать и удерживать кнопки “ON/OFF” и “ZERO” до появления на дисплее надписи “CAL1”. Это будет означать что режим калибровки прибора активирован.
Через 10 секунд нажмите кнопку “ZERO” (на дисплее отобразится надпись “CAL2”), поверните прибор на 90 градусов по часовой стрелке (вправо) и установите его на правую грань относительно дисплея.
Через 10 секунд нажмите кнопку “ZERO” (на дисплее отобразится надпись “CAL3”), поверните угломер на 90 градусов по часовой стрелке (вправо) и установите его на верхнюю грань относительно дисплея.
Далее, через 10 секунд нажмите кнопку “ZERO” (на дисплее отобразится надпись “CAL4”), поверните прибор на 90 градусов по часовой стрелке (вправо) и установите его на левую грань относительно дисплея. Через 10 секунд после этого нажмите кнопку “ZERO” (на дисплее отобразится надпись “CAL5”), поверните прибор на 90 градусов по часовой стрелке (вправо) и установите его на нижнюю грань относительно дисплея. Через 10 секунд нажмите кнопку “ZERO”, на дисплее отобразится надпись “PASS” и через некоторое время “0.00°”.
После проделанных операций калибровка электронного угломера Digital inclinometer завершена.
Характеристики:
модель: Digital inclinometer; диапазон измерения углов: 4×90°; разрешение: 0,05°; точность: ±0,2°; погрешность: 0,1°; питание: 9 В постоянного тока (батарейка типоразмера 6F22 “Крона”); рабочая температура: от 0°С до +40°С; габариты угломера (д х ш х т): 57 х 57 х 31 мм; габариты угломера в упаковке (д х ш х т): 92 х 81,5 х 42 мм; вес угломера: 173 г; вес комплекта поставки: 236 г;
материал корпуса: нержавеющая сталь.
Комплект поставки:
- электронный угломер;
- крестообразная отвертка;
- инструкция на английском и китайском языках.
Источник: https://freedelivery.com.ua/instrumenty-47/izmeritelnye-pribory-testery-66/uglomer-elektronnyj-magnitnyj-uroven-transportir-inklinometr.html
Ультразвуковой дальномер на ардуино
Сегодня сделаем простую, но весьма полезную штуковину. Ультразвуковой дальномер с дисплеем и точностью измерения почти до 1 мм.
Всё, что нужно для самопального девайса
Для создания собственного дальномера нам понадобятся китайские компоненты, которые умещаются в корпус для самоделок. Во-первых, электро ультразвуковой дальномер за 50 руб., который подает звуковой сигнал и измеряет время возврата после отражения от препятствия. Платформа arduino nano. Это главный мозг системы.
Он управляет всеми железками. Дисплей на 595 микросхемы за 80 руб. Батарейный отсек под 3 пальчиковые батарейки. Два переключателя. Один на включение, 2 на смену режима работы. Корпус для электронных самоделок и за 60 руб. Все компоненты купленный на aliexpress. Схема подключения очень простая. Скачать ее можно здесь.
Купить все детали в этом китайском магазине.
Мастера покупают изобретения в китайском интернет-магазине.
Если взять arduino с ногами, то можно соединить компоненты при помощи проводов перемычек. Ну тогда всё это не помещается в корпус.
Поэтому придётся паять. Прежде чем делать это, нужно удалить модули и шторки. Сначала разделяем пластик.
Затем, используя невероятно хитрое приспособление из плоскогубцев и резинки из велосипедной камеры, выпаиваем все штырьки.
Для соединения компонентов используем китайский монтажный провод. Он тоньше, чем хотелось бы, но за 300 руб. Его огромная катушка. Провода 8 разных цветов позволит не запутаться даже в сложных схемах. Паять провода сразу на arduino. Потом окончательно соединяем, кроме переключателей. Поскольку их нужно паять после установки в корпус.
С задней стороны корпуса откусываем стойки под печатную плату. Они не пригодятся. Чтобы сделать отверстие под датчик, снимаем с него размеры. Всё размечаем. Сверлим. Крепить будем на горячую и сопли. Так что зашкуриваем. Если всё сделано правильно, датчик должен встать на свое место. Заливаем клеем. Теперь нужно установить дисплей.
Для этого разметить окошко.
Сначала сверлим отверстия по углам. Затем ножом делаем царапины по периметру. Раскаленным ножом разрезаем диагонали. Взламываем. Получается ровная кошка, которая нужно немного доработать напильником.
Слева и справа от дисплея поставим переключатели. Снова дорабатываем напильником. Дисплей вставляем и заливаем скотчем, чтобы он лежал в одной плоскости с корпусом. С обратной стороны заливаем горячим клеем. Ждём, когда застынет, снимаем скотч.
Получаем идеально вмонтированный дисплей.
На двухсторонний скотч крепим батарейный отсек и добавляем провода от переключателей. Дальномер почти готов. Электроника подключена и расставлена на своих местах.
Установка прошивки на прибор для определения расстояний до объектов
Осталось подключить arduino к компьютеру и подключить прошивку. Заходим на страничку проекта. Ссылка в начале статьи. Качаем архив. Если это ваш первый опыт работы с arduino, читайте подробную инструкцию.
Открываем файл прошивки и смотрим. Настройка всего 1. Длина корпуса дальномера. Для работы с дисплеем используется написанная автором видео библиотека. Для работы с дальномером библиотека newping.
Разработчик обещает более высокую точность измерений.
Как функционирует измеритель расстояния?
Как это работает? Каждые 50 миллисекунд производится измерение и вывод на дисплей. А каждые 300 микросекунд дисплей пинается. Дело в том, что дисплей сделан на плохом чипе без динамической индикации. Приходится тратить ресурсы и arduino на то, чтобы 3300 раз в секунду пинать дисплей, чтобы он показывал цифры. Смотрите продолжение на видеоролике с пятой минуты.
AlexGyver.
Источник: http://izobreteniya.net/ultrazvukovoy-dalnomer-na-arduino/
Курс Arduino – Дальномеры
Дальномеры
В этом уроке мы поподробнее познакомимся с дальномерами.
Ультразвуковой дальномер HC-SR04
На сегодняшний день (2016 г) стоит не более 1$ на AliExpress.
Датчик имеет 4 вывода:
- Vcc – На этот контакт подается питание в 5В.
- Trig – На этот контакт нужно подать логическую единицу на 10мкс, чтобы дальномер испустил ультразвуковую волну.
- Echo – После того, как ультразвуковая волна вернется обратно, на этот контакт будет подана логическая единица на время, пропорциональное расстоянию до объекта
- Gnd – Этот контакт подключается к земле.
Ультразвуковой дальномер – работает по принципу “летучей мыши”. Он посылает ультразвуковую волну и считает время, за которое волна возвратится. Зная скорость звука и время, за которое волна пришла обратно, можно рассчитать расстояние до объекта.
С помощью этого дальномера мы соберем небольшой парктроник, который можно будет увеличить и собрать готовое устройство для парковки автомобиля. Еще я покажу, как можно использовать дальномер для управления своими устройствами.
Дальномер
Давайте соберем простенькую схему для того чтобы понять, как работает дальномер.
Код
#define ECHO 13 #define TRIG 12 void setup()
{ pinMode(ECHO, INPUT); // На ECHO нужно подать логическую единицу pinMode(TRIG, OUTPUT); //С TRIG мы будем считывать значение расстояния Serial.begin(9600); //Установим соединение с Serial портом
} void loop() { //Подаем на TRIG HIGH и сразу LOW digitalWrite(TRIG, HIGH); digitalWrite(TRIG, LOW); //Считываем длину пришедшего сигнала в микросекундах int dist = pulseIn(ECHO, HIGH) / 54; // Делим на 54, чтобы перевести показания в см Serial.println(dist); //Выводим показания дальномера в Serial delay(300); //Ждем немного, чтобы глаз успевал различать показания
}
Пояснения
pulseIn(ECHO, HIGH); – С помощью этой функции мы считали время, на которое на пине ECHO устанавливается значение HIGH. Это время считается в микросекундах.
В общем виде pulseIn(); можно записать так:
pulseIn(пин, значение, таймаут);
Пин – Пин, на котором будет производиться подсчет времени.
Значение – Уровень ожидаемого сигнала, при котором будет проводиться подсчет. HIGH или LOW.
Таймаут – время в микросекундах, в течение которого ожидается приход сигнала. По истечении таймаута значение, возвращаемое функцией, будет приравнено к нулю.
Так, с принципом работы дальномера разобрались. Время сделать парктроник для игрушечных машинок.
Парктроник
Схема парктроника выглядит так:
Код
#define ECHO 3 // Прием сигнала с дальномера
#define TRIG 2 // Подача сигнала на дальномер
#define COUNT 5 // Кол-во светодиодов
#define BUZZ 6 // Пин для пищалки
#define FIRST 9 // Первый пин светодиодов #define dist_setup 1 //Подстроечный коэффициент
#define frequency 5000 void setup() { for(int i = 0; i < COUNT; ++i) //Обозначаем светодиоды как выход... { pinMode(i+FIRST, OUTPUT); } pinMode(ECHO, INPUT); //...ECHO как вход... pinMode(TRIG, OUTPUT); //...TRIG как выход... pinMode(BUZZ, OUTPUT); //...пищалку как выход Serial.begin(9600); //Установим соединение с Serial } void loop() { digitalWrite(TRIG, HIGH); //Подаем команду на дальномер digitalWrite(TRIG, LOW); int dist = pulseIn(ECHO, HIGH) / 54; //Измеряем расстояние до объекта dist = constrain(dist, 2, 60); //Полученные значения загоняем в диапазон от 2 до 60 //Сравниваем полученные показания и включаем нужный режим if (dist < 10) { all_led_on(); } else if ( dist < 20 * dist_setup) { four_led_on(); } else if (dist < 30 * dist_setup) { three_led_on(); } else if(dist < 40 * dist_setup) { two_led_on(); } else if(dist < 50 * dist_setup) { one_led_on(); } else { for(int i = 0; i < COUNT; ++i) { digitalWrite(i+FIRST, LOW); } noTone(BUZZ); }
} // Описание режимов void one_led_on() { digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); digitalWrite(13, HIGH); tone (BUZZ, frequency, 1000); delay(1000); } void two_led_on() { digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, HIGH); digitalWrite(13, HIGH); tone(BUZZ, frequency, 700); delay(700); } void three_led_on() { digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); tone(BUZZ, frequency, 400); delay(400); } void four_led_on() { digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); tone(BUZZ, frequency, 200); delay(200); } void all_led_on() { for(int i = 0; i < COUNT; ++i) { digitalWrite(i+FIRST, HIGH); } tone(BUZZ, frequency, 5000); delay(5000); }
Пояснения
Парктроник снабжен светодиодной и звуковой индикацией. При приближении объекта на заданные расстояния раздаются более частые сигналы, и загорается больше светодиодов.
dist_setup – это коэффициент, с помощью которого можно регулировать расстояние до срабатывания парктроника.
У меня он равен единице. Если вам нужно уменьшить расстояние – нужно уменьшить коэффициент, но тогда он будет в виде 0.xxx. Для этого вводится переменная типа float.
Частоту писка можно также изменять. Для этого нужно изменить значение frequency. Но следует помнить, что пищит пьезоизлучатель ужасно. Крайне. И, мне кажется, что он быстро отобьет у вас желание им пользоваться дальше или дольше 5 минут.
Как вариант – понизить частоту до 20 Гц или подключить обычный динамик на 8 Ом, к примеру.
Пароль
Теперь попробуем сделать секретный шифр, который зажигает светодиоды. А если в схему включить сервомотор с задвижкой, то можно сделать замок на дверь или ящичек с паролем.
Внимание на схему.
Код
//Пины первого дальномера #define TRIG1 12 #define ECHO1 13 //Пины второго дальномера #define TRIG2 10
#define ECHO2 11 //Светодиоды #define FIRST 3
#define COUNT 5 //Кнопка сброса #define RESET 2 //Переменные для пароля int key1;
int key2;
int key3; void setup() { //Обозначение светодиодов как выход for( int i = 0; i < COUNT; i++) { pinMode(i+FIRST, OUTPUT); } //Обозначение пинов на дальномерах pinMode(TRIG1, OUTPUT); pinMode(ECHO1, INPUT); pinMode(TRIG2, OUTPUT); pinMode(ECHO2, INPUT); pinMode(RESET, INPUT_PULLUP);
} void loop() { //Подача сигнала на дальномеры digitalWrite(TRIG2, HIGH); digitalWrite(TRIG2, LOW); int dist2 = pulseIn(ECHO2, HIGH,3000) / 54; digitalWrite(TRIG1, HIGH); digitalWrite(TRIG1, LOW); int dist1 = pulseIn(ECHO1, HIGH) / 54; //Дополнительная индикация "ввода" символов if(dist1 < 10 && dist2 < 10)
{ digitalWrite(5, HIGH); delay(100);
} if(dist2 > 20 && dist2 < 25)
{ digitalWrite(4, HIGH); delay(100);
}
if(dist1 > 20 && dist1 < 25)
{ digitalWrite(6, HIGH); delay(100);
} //Код пароля + индикация "ввода" символов if(dist2 > 10 && dist2 10 && dist1 < 15)
{ digitalWrite(7, HIGH); delay(100); key1 = 0;
} if(dist1 > 20 && dist1 < 25 && key1 == 1)
{ key2 = 1;
} else if(dist2 > 20 && dist2
Источник: http://cxem.net/arduino/arduino196.php
Измеритель толщины ЛКП на Arduino nano
В процессе поиска, подходящего для меня автомобиля с пробегом, столкнулся с необходимостью проверки лакорасочного покрытия (ЛКП) на однородность, для выявления крашеных или шпаклеваных деталей.
Сначала в руки мне попал профессиональный измеритель толщины ЛКП, но давали мне его ненадолго, а процесс поиска машины, наоборот, растянут по времени. Измеритель пришлось вернуть владельцу, а подходящая машина найдена не была.
А нельзя ли сделать простейший измеритель толщины краски самому?
Первым результатом поиска по интернету, стала классическая схема, на основе двухобмоточного трансформатора с открытой магнитной системой.
На первичную обмотку подается некий сигнал, а со вторичной обмотки подается сигнал на измеритель. Измеряемый образец, замыкает магнитную систему и чем толще краска, тем меньше связь между обмотками, тем меньше выходной сигнал. Но искать подходящее железо для трансформатора и мотать его было лень, продолжил поиски.
Кроме этого подобные схемы имеют сильную нелинейность зависимости уровня сигнала от толщины покрытия.
Затем попалась схема, которя работает на основе изменения индуктивного сопротивления датчика.
На измерительную катушку подается калиброваный сигнал (лучше синусоидальный) , катушка включена в плечо измерительного моста, после установки нуля, проводится измерение.
А нельзя ли еще проще? Ход мыслей примерно такой: “если датчик – это индуктивность, значит нужно устройство измерения индуктивности”
Еще я вспомнил, что у меня валяется несколько плат Arduino. Брал пару лет назад поиграться.Сформулировал, для себя, задачу – “Измерение индуктивности на Arduino минимумом навесных деталей”.
В результате поисков, наткнулся на страницу https://github.com/sae/Arduino-LCQmeter/blob/master/LC-gen.ino
эта программа и стала прототипом простейшего измерителя ЛКП.В качестве основной платы, выбрана Arduino nano за небольшие габариты.
Суть работы в следующем: на измеряемый LC-контур подается импульс “накачки”, после чего запускается счетчик до до тех пор, пока сигнал на контуре, не пройдет через “0” компаратора, после чего процесс повторяется.
В результате, показания счетчика пропорциональны резонансной частоте LC контура.Сначала опробовал идею на столе, с выводом информации на компьютер.
Вроде работаетХотя у меня был LCD модуль, но с ним устройство получалось громоздким и требовало изготовления корпуса.Решил сделать индикацию толщины на светодиодах.
Нарисовал схему, спаял шилд на макетке, предусмотрел контроль напряжения батареи.
Проблемой оказалось изготовление катушки. Если чашек ферритовых броневых сердечников нашел много и разных, то каркасов катушек не нашел ни одного.
После нескольких попыток сделать каркас самостоятельно, было найдено следующее решение: на коническом корпусе шариковой ручки были установлены две картонные щечки, намотано приблизительно подходящеее количество витков, чтоб поместилось внутрь сердечника.
Провод взял минимальной толщины, какой был под рукой (около 0.08) количества витков не помню, что-то около 100. после намотки, одну щечку снял. и подталкивая за другую щечку поместил получившуюся катушку внутрь сердечника. Выпавшие витки, заправил в катушку пинцетом.
После этого капнул на витки суперклеем и закрыл катушку оставшейтся щечкой. Катушку на плате закрепил термоклеем.Конденсатор желательно металлопленочный, только не керамический, поскольку у керамики такой емкости недопустимый ТКЕ
В результате, получилась такая конструкция:
Текст программы для загрузки: Скетч для Arduino.zip
Работа с устройством: Поскольку разные машины имеют разную тощину ЛКП, сначала делается процедура калибровки. Кроме этого процедура калибровки, позволяет снизить влияние температуры на результаты измерения.
Для калибровки, нужно прижать устройство к покрытию автомобиля, и нажать кнопку “калибровка”После проведения калибровки, значение толщины ЛКП, выраженное в “условных единицах” записывается в eeprom.для проведения измерения, прибор прикладывается к разным местам ЛКП автомобиля и нажимается кнопка “Измерение”.
Если отклонение измеренного результата от записанного, невелико, загорается зеленый светодиод.
Если отклонение превышает некоторую границу – загорается белый светодиод – “подозрительно”Если есть второй слой краски, или была полировка – загорается один из синих “краска” или “полировка”Если покрытие близко к нулю или превышает 0.2, то загораются красные светодиоды “шпаклевка” или “металл”
Каждое измерение толщины производится 3 раза, а потом значение усредняется. Возможно, одного раза достаточно. Это позволит получать результат практически мгновенно.
Не стоит рассматривать эту поделку, как образец готового изделия. Это всего лишь пример того, как можно решить поставленную задачу “подручными” средствами.
Но, подозреваю, что на основе этого измерителя, можно изготовить измеритель с профессиональной точностью.
Для этого нужно будет, качественно намотать катушку, подобрать конденсатор, с минимальным TKE, подключить экранный модуль, подобрать формулу пересчета “сырого” значения в микрометры.
Борис Падорин, ООО “Долина-Сервис”
Источник: http://dolina-s.ru/blog/page/izmeritel-tolshhiny-lkp-na-arduino
Урок 3. Подключение ультразвукового датчика HC-SR04 к Arduino
Добрый день, уважаемые программисты. Сегодня мы переходим к третьему уроку. Мы научимся подключать ультразвуковой дальномер HC-SR04 к Arduino. Разберем принцип работы дальномера, его характеристики и программирование этого устройства.
Ну что, приступим! Начнем мы с характеристики дальномера.
Характеристики ультразвукового датчика HC-SR04
Большим превосходством такого ультразвукового датчика над инфракрасными является то, что на ультразвуковые датчики не влияют источники света или цвет препятствие.
Могут возникнуть проблемы с измерением расстояния до тонких или пушистых объектов. Хотелось бы сказать, что скорость звука в воздухе зависит от температуры.
Следовательно, погрешность измерения будет меняться от повышения или понижения температуры.
- Рабочее напряжение 4,8 В до 5,5 В (± 0.2В макс).
- Диапазон измерения: от 2 см до 400 см.
- Диапазон рабочих температур: 0 ° С до 60 ° С (± 10%).
- Ток потребления в режимах ожидания до 2 мА.
- Ток потребления в режимах работы 15 мА.
- Ультразвуковой диапазон работы на частоте 40 кГц.
- Угол обзора 15 градусов.
- Измеряемое расстояние от 0,03 до 0,6 мс разрешающей способностью 3 мм.
- От 0,6 до 5 погрешность увеличивается.
Датчик имеет 4 вывода:
- VCC: “+” питание
- TRIG (T): вывод входного сигнала
- ECHO (R): вывод выходного сигнала
- GND: “-” питание
Необходимые компоненты для подключения ультразвукового дальномера
- Arduino (в нашем случае – UNO)
- Breadboard (макетная плата для удобного подключения приборов к Arduino)
- Провода
- Ультразвуковой датчик HC-SR04
Принцип работы ультразвукового дальномера HC-SR04
- Подаем импульс продолжительностью 10 мкс, на вывод Trig.
- Внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 КГц и посылается вперед через “T глазик”.
- Дойдя до препятствия, импульсы отражаются и принимаются “R глазиком”. Получаем выходной сигнал на выводе Echo.
- Непосредственно на стороне контроллера переводим полученный сигнал в расстояние.
Схема подключение дальномера к Arduino
Вам представлена схема подключения ультразвукового датчика к Ардуино. Как вы можете заметить, она очень проста и очень интересна. Но следует не забывать о правильном подключении. Мой совет: никогда не торопитесь подключать прибор потому, что вы больше затратите времени на поиск ошибки в подключении.
Следующим этапом является изучение скетча программы
Программирование ультразвукового датчика HC-SR04
#define Trig 8 /* Обозначаем пин подачи импульса*/
#define Echo 9 /* Обозначаем пин приема импульса*/
void setup() {
pinMode (Trig, OUTPUT); /*инициируем как выход */
pinMode (Echo, INPUT); /*инициируем как вход */
Serial.
begin (9600); /* устанавливаем скорость порта */
}
unsigned int impulseTime=0;
unsigned int distance_sm=0;
void loop() {
digitalWrite (Trig, HIGH); /* Подаем импульс на вход trig дальномера */
delayMicroseconds (10); /* Импульс длится 10 микросекунд */
digitalWrite (Trig, LOW); // Отключаем подачу импульса
impulseTime=pulseIn (Echo, HIGH);
/*Принимаем импульс и подсчитываем его длину*/
distance_sm =impulseTime/58; /* Пересчитываем его значение в сантиметры */
Serial.println( distance_sm); /* Выводим значение на порт программы */
delay (200);
}
После того как вы вставили этот код, загрузите его в программу и включите “монитор порта”. Там вы увидите расстояние от датчика до препятствия, поэкспериментируйте с изменением расстояния объекта.
Вот что должно у вас получиться !
Вам возможно будет интересно
Источник: http://helpduino.ru/podklychenie_dalnometra_%20HC-SR04.html
Пластиковый угломер, информация и обзор – toolgir.ru
И снова здравствуйте, дорогие читатели. Сегодня я решил рассказать вам об одном интересном угломере, которым я пользуюсь уже долгое время и очень доволен, что именно он попал мне в руки. Мой угломер в обзоре от немецкого kwb, но найти его аналоги можно под разными брендами и даже без них, поэтому это скорее обзор возможностей и принципа работы.
Угломеры
В любом инженерном и ремесленном деле измерение и построение углов – одна из важнейших операций. Даже для сборки простого ящика нужно выверить 90°, не говоря уж о более сложных конструкциях.
Неудивительно, что существует куча различных инструментов для этих измерений. Один из самых древних и известных – это транспортир. С ним не понаслышке знаком каждый еще со школьных лет.
Но сам по себе транспортир больше чертежный инструмент. Измерять и наносить углы на материале им еще можно, а измерить, например, внутренний угол откосов им самим уже не получится.
Простым и известным столярным и слесарным инструментом для измерения и построения углов является малка.
В своем стандартном варианте малка лишь инструмент переноса углов – по эталонному углу или транспортиру фиксируется угол, который после этого можно наносить, сравнивать, мерить и т.д.
По этой причине она обычно используется в паре с транспортиром.
Более продвинутые малки могут иметь собственную шкалу для разметки и определения угла, а с современным развитием электроники появились даже электронные.
Исторический вариант простейшего угломера – это две линейки, объединенные общей осью. Эта конструкция и по сей день используется в большинстве электронных и механических угломеров.
Существуют и другие, более сложные конструкции. Естественно, у всех есть свои особенности, достоинства и недостатки.
Например, крайний правый на фото не способен измерять внутренние углы (на случай, если вы вдруг хотели купить подобный).
Самый важный показатель любого измерительного инструмента – это точность, не исключение и угломеры.
Очевидно, что наибольшей точностью будут обладать угломеры, оснащенные нониусом или электроникой. Но сама по себе конструкция еще не вердикт, все зависит от производителя.
Если вам нужна эталонная точность и качество, смотрите в сторону лидеров вроде Mitutoyo, Starrett. Главное не пугайтесь, узнав цену.
Из подручных средств простейший угломер можно сделать, взяв два полотна (или два куска) ножовки по металлу, и соединив их болтом через отверстие для крепления.
Все вышеперечисленные приспособления не устраивали меня либо функционалом, либо ценой, пока я не наткнулся на пластиковый угломер kwb.
Международный действующий патент на него (US 4766675 A от 1988 года) принадлежит тайваньской компании CCKL. Creator International.
Продается он много лет под многими достойными именами. Из известных мне зарубежных: General Tools 29, Empire Level 2791, KWB 0658-00. В России продает его псевдо-канадский брэнд FIT (российская контора, заказывающая товар из Китая, но выдающая себя за Канадскую компанию).
Называется он у них почему-то «угломер-квадрант» (маркетологи FIT, наверное, просто не в курсе, что «квадрант» – это ранний вариант секстанта и представляет собой четверть окружности). Пластиковая модель – FIT 19301, большая алюминиевая 50 см длиной — FIT 19317.
Большой угломер (SKRAB 40307) продает и российского бренд Skrab (вроде у них когда-то был и пластиковый).
Все указанные варианты этого угломера полностью идентичны по конструкции и имеют достаточно положительные отзывы. На счет качества – не могу сказать, всех их в руках держать не доводилось. Возможно, он продается и под другими брендами. В любом случае, аналоги я озвучил для информации, чтобы вы могли выбрать любой из наиболее вам доступных.
Мой угломер в обзоре принадлежит немецкому маркетинговому брэнду kwb. Данная компания продает очень неплохой ручной инструмент и принадлежности, и имеет вполне достойную репутацию. Часть продукции производится в Германии, часть в Китае, часть еще где-то.
Обзор пластикового угломера KWB 0658-00
Упаковка
Упакован угломер KWB в блистер. Такие же угломеры других производителей обычно упакованы аналогично.
Интерес представляет обратная сторона картонного вкладыша. Во-первых, там инструкция, во-вторых информация о производителе – «Designed by kwb, made in R.O.C.» (разработано в kwb, сделано в Китайской Республике). Первая половина, как мы уже выяснили выше – неправда, kwb не имеет отношения к разработке этого угломера.
А вот на счет второй половины я поясню, так как многие (да и я сам когда-то) путаются в этом вопросе.
В общем, лучше бы так и написали «Тайвань» – к нему в наших кругах доверия больше.
Внешний вид и устройство
Конструктивно угломер представляет собой транспортир, являющейся частью параллелограммного механизма. Выполнено все из желтого глянцевого ABS пластика. Качество материала отличное, но все же пластик есть пластик… эх, такой бы из нержавейки!
Собрана данная конструкция на латунные шарниры, Ход плотный, но мягкий, люфтов нет вообще. Есть барашек, позволяющий зафиксировать необходимые показания.
Размеры угломера – 155 мм х 100 мм (в положении, как на фото), весит он совсем немного – 26 грамм.
Параллелограммный механизм позволяет угломеру складываться и трансформироваться в нужную для текущих измерений форму.
Еще фото с разных ракурсов:
Шкала напоминает шкалу обычного транспортира с маркировкой от 0° до 180°. Минимальный угол, который практически можно измерить – примерно 15° (и для наружных и для внутренних углов). Имеет несколько уровней обозначений для различных измерений. В правом верхнем углу логотип компании, владеющей патентом на этот угломер (возможно, они его и производят).
Все линии и обозначения нанесены черной краской, сделано это достаточно четко и ровно. К отшелушиванию краска не склонна, что важно.
Инструкция
Обратная часть вкладыша упаковки угломера kwb имеет весьма доходчивые иллюстрации по использованию. Не знаю, есть ли у всех производителей такие, а кому-то вообще может достаться этот угломер без упаковки, поэтому приведу фотографии инструкции, «на всякий случай».
Угломер имеет три шкалы. Основная шкала – B, у нее две нумерации: прямая и обратная.
Измерение наружных и внутренних углов – наиболее простые измерения, которые должен иметь делать любой угломер:
Измерение углов сложной формы и относительные измерения:
Измерение внешних углов малых деталей и величины уклона:
Нониус
Данный угломер имеет нониус с шагом в 10 минут для более точного определения угла. Те, кто умеют пользоваться штангенциркулем, уже знакомы с этой системой, и знают, как она работает. Для остальных поясню. Нониус (или Верньер (Vernier) в честь изобретателя этой шкалы) – вспомогательная шкала для точного определения долей деления основной шкалы.
На фото мы видим две шкалы: верхняя – основная и нижняя вспомогательная – нониус. Принцип следующий:
-
0 деление на вспомогательной шкале указывает на базовое значение основной шкалы. В данном случае 75 с лишним градусов.
-
Для того чтобы узнать точное значение этого «лишнего» нужно найти которая из рисок нониус (нижней шкалы) наиболее точно совпадает с любой риской верхней шкалы. В данном случае это 30 минутная риска, что дает нам полное значение в 75°30′.
Выводы
Плюсы:
- Интересная и уникальная конструкция
- Хорошее качество изготовления
- Может измерять как наружные, так и внутренние углы
- Измерение нестандартных углов в труднодоступных конструкциях
- Имеет нониус
- Барашек для фиксации и переноса измерений
- Практический диапазон измерений – ~15°-180°
Минусы:
Вердикт – отличная вещь, за эти деньги лучше просто не найти. Возможности и конструкция делает этот угломер практически идеальным инструментом для мелких работ: хобби, моделирование, работы по дереву, контроль угла Edge-подобных систем заточки и т.д. Для более крупных и грубых работ у него есть алюминиевый старший брат той же конструкции (но с меньшей точностью измерений).
В общем, рекомендую угломер KWB 0658-00 обеими руками, под этим названием или любым другим. Аналоги я озвучил, другие способы измерения и построения углов тоже. Выбирайте…
Источник: http://www.toolgir.ru/plastikovyiy-uglomer-info-i-obzor/