Приветствую всех на сайте «В гостях у Самоделкина». В этой статье предлагаю Вам рассмотреть одно интересное многофункциональное измерительное устройство. Автор объединил несколько датчиков вместе, что позволят устройству измерять расстояние с помощью оптических дальномеров, длину с помощью поворотного энкодера и напечатанного для него колеса, измерять уровень с помощью модуля 3-х осевого гироскопа и акселерометра, а также углы, с помощью этого же модуля и, наконец, измерять количество оборотов в минуту (оптический тахометр с другим видом ИК-датчика). Все это располагается в напечатанном на 3D принтере корпусе, который разработал автор, и питается от аккумулятора через зарядный и защитный модуль TP4056. Для управления режимами работы и настроек у устройства есть четыре сенсорные кнопки, чувствительность которых позволяет разместить их непосредственно внутри корпуса не проделывая никаких отверстий. Для вывода значения применяется OLED-дисплей, и напоследок — устройство можно использовать как лазерную указку. Посмотрим, как это сделать. Ниже Вы можете видеть список деталей для этого проекта. Убедитесь, что вы используете те же компоненты.
Список необходимого:
1 х 3D файлы STL (архив в конце статьи)
1 х Arduino NANO
1 х Лазерный датчик расстояния VL53L0X
1 х Инфракрасный оптический датчик измерения расстояния SHARP 2Y0A21
1 х Инфракрасный датчик препятствий
4 х Сенсорные кнопки
1 х OLED дисплей 128*64 I2C
1 х 3-х осевой гироскоп и акселерометр MPU6050
1 х Лазерный модуль
1 х 3,7 В LiPo аккумулятор
1 х поворотный энкодер
1 х Плата заряда и защиты аккумулятора TP4056
1 х Ползунковый переключатель
1 х зуммер активный на 5В
Резисторы (10 кОм, 20 кОм)
Провода, припой, паяльник и т. д.
ЧАСТЬ 1 - Что нам нужно
Хорошо, ребята, давайте начнем этот урок и сначала посмотрим, что нам нужно. Начнем с того, что рассмотрим используемые датчики, а позже перейдем к корпусу. Итак, устройство будет измерять расстояние. Для этого применено два датчика и тому есть причина. Один имеет сравнительно большой диапазон до 80 см, однако другой датчик имеет высокую точность, но только до 20 см. Поэтому автор использовал датчик SHARP GP2Y0A21 для измерения расстояния до 80 см с разрешением в сантиметр, а для измерения расстояния до 20 см с точностью до миллиметра использован датчик VL53L0X. Работа обоих датчиков основана на инфракрасном излучении, однако основаны они на разных принципах: GP2Y0A21 измеряет угол падения отраженного света на матрицу (заблуждение, что такие датчики работают по принципу эхолокации), VL53L0X же основан на лазере, который пульсирует с заданной частотой, в то время как чувствительная матрица считывает попадание луча на объект. Высчитывая разницу во времени между подачей импульса и фиксацией его матрицей можно с высокой точностью определить расстояние до объекта. К стати, такой же принцип используется в астрономии, в своё время несколько космических аппаратов, как наших так и зарубежных, оставили на поверхности луны специальные отражатели. Направляя на эти отражатели лазерный луч и дождавшись когда он вернется обратно, на данный момент времени, с точностью до одного миллиметра можно определить расстояние до луны. Так ученые выяснили, что каждый год луна отдаляется от земли на 5 см.
Далее устройство будет измерять угол и уровень. Для этого применен 3-х осевой гироскоп совмещенный с акселерометром MPU6050. Расположить этот датчик необходимо строго в середине корпуса, что бы датчик правильно реагировал на отклонения во всех направлениях. Устройство также позволяет измерить длину (на плоскости), для этого применен поворотный энкодер и напечатанное для него на трехмерном принтере колесо. Диаметр окружности колеса заранее известен, поэтому за один оборот энкодера колесо будет проходить известное расстояние. От себя хочу сказать, что на месте автора я бы взял для этой цели колесико от мышки, которое так же является энкодером, но при этом рассчитано на длительную работу и имеет хорошую обрезиненную поверхность, что в самый раз для этих целей. Разумеется, придется подправить в коде диаметр окружности колеса и, возможно, количество шагов которые энкодер имеет на один оборот. Также устройство будет измерять обороты, и для этого автор использовал другой инфракрасный модуль с ИК-светодиодом и ИК-фототранзистором. Сделав на вращающейся детали или валу белую метку можно фиксировать количество оборотов. Так же автор установил модуль лазерной указки, по его словам, чтобы в режиме измерения угла можно было на стене сделать отметку под нужным углом, указывая на нужную точку лазером.
Теперь давайте посмотрим на последние части, которые нам нужны. Конечно, нам нужна плата Arduino. Затем нам нужно четыре емкостные сенсорные кнопки. Так же необходим аккумулятор на 3,7 В и зарядный модуль к нему. Наконец, нам нужен OLED dsiplay, ползунковый переключатель для включения и выключения устройства и зуммер для звуковых уведомлений. Помимо этого, конечно, понадобятся провода, припой и паяльник, а так же сам корпус.
ЧАСТЬ 2 - Схема
На изображении ниже Вы можете видеть графическое обозначение соединения всех электронных компонентов. OLED-дисплей, MPU6050 и VL5L0X используют шину i2c, они подключаются к аналоговым входам А4 и А5 Arduino для передачи данных и синхронизации. Датчик SHARP имеет делитель напряжения на выходе. Так же необходимо применить внутренний источник опорного напряжения ардуино на 1,1В, что будет логическим уровнем для этого аналогового датчика. Это необходимо в связи с тем, что в качестве источника питания применяется аккумуляторная батарея, и если не использовать внутреннюю привязку 1,1 В для аналогового считывания, значение будет меняться вместе с падением напряжения питания батареи. Измерьте мультиметром значение делителя напряжения и укажите его в коде. Подключите все модули к цифровым контактам. Убедитесь, что лазер имеет резистор для ограничения тока, иначе Вы выведите его из строя.
ЧАСТЬ 3 - Смонтируйте все в корпус
3.1 Поворотный энкодер
Сначала устанавливаем поворотный энкодер, который будет использоваться для измерения расстояния. Для этого на него необходимо установить колесо предварительно напечатанное на трехмерном принтере, либо изготовленное в ручную. Важно знать диаметр колеса, что потребуется для последующих вычислений в коде, поэтому измерьте его. Подпаяйте три провода данных, землю и питание. Установите пластиковое колесо, а затем пропустите провода через отверстие в корпусе и установите энкодер на место. Я бы посоветовал предварительно надеть на колесо отрезок велосипедной камеры или несколько резиновых уплотнительных колечек подходящего диаметра для улучшения сцепления колеса с поверхностью. Приклейте энкодер термоклеем или любым другим.
3.2 Датчики VL5L0X и SHARP
Теперь припаяйте провода к модулям VL5L0X и SHARP 2YA021. Один датчик подключается 4 проводами, другой тремя. Установите VL5L0X при помощи винтов с торца корпуса так, чтобы датчик был обращен наружу. Затем привинтите датчик SHARP и убедитесь, что он не выступает за пределы корпуса, так как для работы с устройством в режиме цифрового уровня необходимо, что бы все грани корпуса были ровными и не имели выступов. Если он выступает — просто подложите несколько шайбочек.
3.3 Уровень и тахометр
Для определения угла и измерения уровня используется модуль гироскопа и акселерометра (датчик ускорения) MPU6050, который работает по шине i2c. Подпаяйте землю, питание и провода данных к этому модулю и приклейте его в середине корпуса в нижней части и убедитесь, что сделали это ровно, без перекосов в любых плоскостях, это важно. Затем припаяйте 3 провода к ИК-датчику и установите его так, что бы ИК светодиод и фототранзистор выходили наружу корпуса через соответствующие отверстия. Далее подстроечным резистором на этом модуле добейтесь того, что бы датчик уверено срабатывал на проходящую мимо него белую полосу, но при этом не было ложных срабатываний. Возьмите игрушечный моторчик и прикрепите к нему картонный диск темного цвета с белой полосой, или просто помахайте мимо него белой палочкой, в общем я думаю Вы придумаете как это сделать. Этот датчик будет нам показывать RPM (revolution per minute) - обороты в минуту.
3.4 Аккумулятор и лазер
Наконец, подключите провода от аккумулятора к клеммам B+ и B- зарядного модуля. Установите в корпус включатель питания и подпаяйте к нему провода в разрыв плюсового провода от аккумулятора. Убедитесь, что модуль зарядного устройства работает и заряжает аккумулятор и установите его в корпус. Установите на своё место лазерную указку, пора подключать всё к ардуино.
3.5 Аруино
Наконец подпаяйте провода Vcc, gnd и data к четырём емкостным сенсорным кнопкам. Приклейте их, как показано на фото ниже, в верхней части напечатанного корпуса. Подпаяйте провода к OLED-дисплею и приклейте его туда же. Теперь подключите все провода к Arduino, как указано на схеме. Также по желанию добавьте небольшой активный зуммер, если не хотите его использовать — то и один сенсорный модуль так же не понадобится. Наконец — скачайте код, загрузите его в плату Arduino и протестируйте.
ЧАСТЬ 4 - Код
Код длинный, потому что у устройства есть множество режимов. Сначала обязательно скачайте все библиотеки, которые вы также можете найти архивом в конце статьи. Установите библиотеки в среду Arduino IDE, скачайте основной код, скомпилируйте и загрузите в Arduino. В коде мы определяем, что на какие пины подключено, по желанию можете подстроить это под себя, а так создаем переменные. Например каждый раз, когда фиксируется, что кнопка "Mode" нажата, мы меняем режим измерения, и внутри каждого цикла режима мы производим разные вычисления.
//INPUTS/OUTPUTS
#define zero_button 4
#define mode_button 5
#define plus_button 6
#define sound_button 7
#define rot_data 8
//#define rot_clock 9
#define battery_in A0
#define sharp_in A1
#define IR_rpm_in 10
#define laser_out 2
#define buzzer 3
Внешний вид готового устройства:
Чтобы увидеть все режимы работы, смотрите полное видео ниже:
Скачать архив со всем необходимым (файлы для печати, библиотеки, код) Вы можете тут:
Ну а на этом все, и всем удачи в творчестве!
Источник (Source)
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.