что делает датчик касания
Что делает датчик касания
Введение:
4.1. Изучаем первый датчик – датчик касания
Рис. 1
Первым датчиком, который мы изучим, будет датчик касания (Рис. 2).
Рис. 2
Этот датчик, по сути, представляет собой специальную кнопку, которая может находиться в двух состояниях: «Нажатие» (Рис. 3 поз. 1) или «Освобождение» (Рис. 3 поз. 2). Также, последовательный переход в состояние «Нажатие», а затем «Освобождение» называется: «Щелчок» (Рис. 3 поз. 3) и может обрабатываться программой. как самостоятельное событие.
Рис. 3
4.2. Оранжевая палитра – Управление операторами
Какие же инструменты представляет нам среда программирования для получения информации с датчиков и реагирования на эту информацию в программе? Давайте начнем знакомиться с программными блоками, расположенными в Оранжевой палитре, которая называется «Управление операторами». (Рис. 4)
Рис. 4
Программные блоки Оранжевой палитры, не смотря на свою малочисленность, очень важны! С помощью этих блоков мы можем обрабатывать массу событий и условий и сложно представить практическую программу, которая может обойтись без этих блоков.
Программные блоки «Ожидание», «Цикл» и «Переключатель» имеют множество режимов и соответствующих настроек, знакомиться с которыми мы будем на практических примерах, последовательно и с наглядными пояснениями.
4.3. Оранжевая палитра, программный блок «Ожидание»
Перед тем, как приступить к решению практических задач, давайте закрепим датчик касания на нашем роботе, как показано на Рис. 5, и подключим его кабелем к порту «1» модуля EV3.
Рис. 5
Задача №6: необходимо написать программу, запускающую движение робота по щелчку кнопки.
Решение:
Рис. 6
Рис. 7
Итак: при такой настройке блока ожидания выполнение нашей программы будет остановлено до нажатия-отпускания кнопки датчика касания. Только после «Щелчка» выполнение будет передано следующему программному блоку. Установим после блока ожидания один программный блок «Рулевое управление», загрузим программу в робота и убедимся в правильности её выполнения! (Рис. 8)
Рис. 8
Задача №7: необходимо написать программу, останавливающую робота, столкнувшегося с препятствием.
Из датчика касания давайте соберем небольшой бампер, который будет нам сигнализировать о том, что наш робот столкнулся с препятствием. Ниже приведены подробные инструкции для сборки, как из домашней, так и из образовательной версии конструктора Lego mindstorms EV3. Можете поэкспериментировать и придумать собственный вариант конструкции.
Lego mindstorms EV3 home
Lego mindstorms EV3 education
Получившийся элемент закрепим на передней балке нашего робота и соединим датчик касания с портом «1» модуля EV3.
Lego mindstorms EV3 Home
Lego mindstorms EV3 Education
Конструкция готова! Приступим к созданию программы. По условию задачи: робот должен двигаться вперед, пока не наткнется на препятствие. В этом случае датчик касания будет нажат! Для решения снова воспользуемся программным блоком «Ожидание».
Решение:
Рис. 9
Для решения следующей задачи нам понадобится программный блок «Цикл» Оранжевой палитры.
Разработка hexapod с нуля (часть 10) — датчики касания
Всем привет! Был сделан очередной шаг к реализации алгоритма адаптации к ландшафту. До текущего момента я не мог придумать оптимальное решение для определения состояния ноги: наступила она на землю или нет. И вот спустя пол года я случайно наткнулся на интересный датчик, при помощи которого можно реализовать нужную конструкцию, позволяющую определить не только момент касания ногой земли, а так же усилие.
Что? Зачем? Почему?
Для реализации алгоритма адаптации к ландшафту необходимо знать наступила нога на землю или нет. Вариантов реализации этого механизма было несколько, давайте рассмотрим их плюсы и минусы с моей точки зрения:
Тактовая кнопка — решение в лоб.
Плюсы: просто и дешево
Минусы: наличие движущихся частей, необходимых для нажатия на кнопку, а так же для ограничения силы удара по ней во время ходьбы. Мне показалось это не надежным
Немного поясню свои мысли по поводу движущихся частей. Нужно сделать так, чтобы при касании с поверхностью какой-то механизм перемещался вверх-вниз и соответственно давил на кнопку. Наличие движущихся пластиковых частей будет слабым местом конструкции. В мусор — мы не выбираем легких путей.
Датчики тока. Можно установить на силовые цепи сервоприводов шунты и микросхему для измерения падения напряжения на них. Довольно хорошее решение, которое позволит определять не только касание, но и нагрузку на ногу.
Плюсы: отсутствие какой-либо механики, возможность определения нагрузки и перегрузки приводов, да и в целом полезно знать потребление.
Минусы: глобальное потепление. На шунтах в 0.1Ом и токе 3А будет рассеиваться 0.9Вт, их будет 6 шт (на каждую ногу отдельная линия питания). Соответственно 5.4Вт уходят в никуда.
Можно использовать 0.01Ом, но достать их проблемно и стоимость доставки превышает стоимость резисторов. ЧипДип в моем городе просит меня оформить заказ на 4000шт минимум, что явно не подходит.
Места на плате питания не хватает для подобных решений, а если увеличить её размеры, то она не влезет в корпус и про дешевое производство в Китае можно забыть (там размеры прям в притык).
Резистивный датчик давления. Прекрасная идея, но мне они показались довольно хрупкими. Взгляните сами — это же просто пленка с резистивным покрытием
Резистивный датчик давления и одно из его применений
К тому же, я не смог придумать красивой реализации этого в плане дизайна.
Тебе не угодишь, всё не нравится! Нет, не всё
Вот решение всех моих проблем — тензодатчик для весов. Мне нравится в нем всё: прочный, чувствительный, есть отверстия для крепежа и можно собрать на коленке MVP для тестов (ардуино и прочее). Набор из 7 тензодатчиков + плат с АЦП к ним обошелся в 1600р с доставкой при покупке в России.
Но не все так гладко. Проблема заключается в направлении силы, прикладываемой к датчику. Допустимое направление показано на картинке ниже, возможно так же обратное. В других направлениях датчик не может определять воздействие ввиду своей конструкции и об этом поподробнее.
Тут используется мостовая схема измерений, что вполне логично, т.к. деформация алюминиевого бруска происходит на невероятно маленькие значения (там прям на уровне атомов). В состоянии покоя этот мост должен быть сбалансирован, но в реальном мире без калибровки нуля и расчета offset никуда.
Сами датчики растяжения и сжатия представляют собой тензорезисторы, которые изменяют свое сопротивление при деформации.
Так почему сила должна быть направлена именно в таких направлениях, как было показано ранее? Для примера возьмем упрощенный мост c 2 постоянными резисторами по 50 Ом и 2 тензорезисторами по 50 Ом. Напряжение питания моста возьмем 5В.
В состоянии покоя мост сбалансирован, убедимся в этом (разница между двумя делителями напряжения):
Мост разбалансирован и мы получили не только числовое значение деформации, но и её направление. Если деформировать в другом направлении, значение будет положительным.
Если приложить силу сбоку, то тензорезисторы деформируются на одинаковую величину и мост останется сбалансированным. Аналогично будет, если прикладывать силу спереди — оба тензорезистора сожмутся.
Не всё так плохо
Нам нужно лишь направить силу воздействия в нужном направлении и нога гексапода для этого крайне удачно была спроектирована. На картинке ниже красным обозначено направление силы, действующей на ногу. Если разрезать ногу на две части и соединить их алюминиевой балкой, то прикладываемая сила к ноге будет пытаться сжать ногу в «точке сжатия». При этом будет происходить деформация датчика в нужном направлении — он будет работать на излом, а это нам и нужно.
Почему нога спроектирована удачно? Все дело в расположениях точки крепления ноги к приводу и точки опоры\касания к земле — вектор силы (красный) не пересекает её. Это получилось случайно и без умысла 🙂
Датчик можно использовать для калибровки сервоприводов. Сейчас нагрузка распределена не на все конечности равномерно из-за неидеального их расположения. Очень сложно накинуть пластиковый диск на все сервы в одинаковом положении, т.к. от диска к диску зубчики располагаются в разных местах.
Диск для сервопривода
Есть возможность руками в конфигурации сдвигать логический ноль приводов и она используется, но на глаз это делать трудно. Помимо этого вносит свой вклад люфт редуктора привода, вот это компенсировать еще труднее.
При помощи датчика мы можем анализировать силу воздействия на ноги и автоматически сдвигать логический ноль в нужную сторону, компенсируя обе проблемы. Профит!
Реализация
Мне удалось разрезать ногу на 2 половины без ущерба внешнему виду. Мне кажется, что стало даже лучше. Половинки соединяются алюминиевой балкой, сама балка сидит жестко для исключения люфтов и минимизации перекосов.
Сравнение старой и новой ноги
В ноге предусмотрено место, где будет располагаться АЦП для получения значений с тензодатчика. Закрывается всё это счастье крышкой и болтами М2.
Расположение АЦП в ноге необходимо для минимизации расстояния до датчика, т.к. там гуляют мВ, то возможно негативное влияние проводов. К тому же не хотелось кидать аналоговые цепи рядом с шестью силовых DC-DC преобразователей.
В качестве АЦП я выбрал HX711. Ну как выбрал, платки были в комплекте. 80Гц частота измерений и максимально простой цифровой интерфейс — самое то. Хотелось бы конечно I2C, а лучше SPI, но увы. Плата имеет на борту дифф. АЦП и всю необходимую обвязку.
С этих АЦП можно более менее синхронно вычитывать данные и начинать конверсию. Судя по даташиту линия SCK позиционируется как Digital Input, а значит их можно свести в одну и посылать по 25 тактов одновременно на все АЦП (используется канал А с усилением 128). Данные будут синхронно приходить на параллельные линии DOUT, что сэкономит временя передачи данных, при этом следующая конверсия будет начинаться одновременно.
О синхронности и почему её нет
Синхронность тут условная с допустимой погрешностью и старт конверсии АЦП на самом деле не будет одновременным, т.к. они работают от своих внутренних тактовых генераторов, отклонение частоты которых зависит от множества факторов (температура, фаза луны, количество снега на улице и прочее).
Для достижения абсолютной синхронности их как минимум нужно тактировать от одного внешнего генератора. Там целая куча проблем, о которых я знаю и не знаю (всякие паразитные параметры цепей тактирования, их длина и прочее).
Именно по этой причине в процессорах тактирование блоков идет из центра (ЕМНИП), т.к. на высоких частотах начинают влиять законы физики и длина проводника (до дальних блоков импульс доходит позже, чем до близких).
Под провода сделаны каналы внутри ноги, так что никаких торчащих проводов не будет. Это соответственно защитит их от случайного повреждения.
Тесты
Наконец-то дошли до самого интересного — результаты. Я поставил ногу на гексапод и заставил его немного побегать. После нехитрых манипуляций в Excel получился красивый график.
На графике очень хорошо видны моменты касания, а так же моменты отрыва ноги от земли. Я крайне доволен результатами! Единицы измерения тут неизвестны, к ним применен scale, который имеет магическое значение (запустил пример из библиотеки).
Никакой магии, дай мне бины АЦП! Тут уже другой эксперимент и график соответственно отличается. И вот тут уже другое дело: вместо диапазона 0-500 мы получаем 0-100000, ну разве не прелесть? Как это сочно выглядит. На первой половине графика гексапод встал, на второй пошел.
Всякие мелкие пики это дергания приводов (например 3-й), они там пытаются свои редукторы пнуть в заданное положение более точно, а резиновые наконечники не дают скользить ноге.
Можно заметить, что первые 2 пика меньше, чем 4 последних. Это объясняется тем, что во время подъема гексапод упирается всеми 6 ногами и нагрузка распределяется на все ноги. Во время передвижения на земле всего 3 ноги, соответственно нагрузка на них выше, деформация датчика больше, пики выше.
В прошивке нужно будет определить пики и скорее всего это будет просто пороговая функция. Тут нужны эксперименты, побегать быстро\медленно по мягкой\твердой поверхностях и дальше пошевелить мозгами, выбрав оптимальный порог.
Скорее всего будет 2 режима ходьбы: с адаптацией и без. С адаптацией гексапод будет ходить медленно и как бы прощупывать ландшафт под собой. По крайней мере для начала.
Планы
Вот так понемногу гексапод превратился из фанерного прототипа в технологического монстра с кучей различных датчиков и хитрых алгоритмов. Это радует. Иногда даже не верю, что я смог такое сделать в одиночку.
Для продолжения работы необходимо переделать плату управления. В частности нужно добавить еще один микроконтроллер (STM32F030) для сбора и обработки данных с шести таких датчиков. Дальше главный МК будет забирать из него данные при необходимости по I2C или SPI, я пока еще не определился.
Зачем отдельный МК? Да всё просто. У основного STM32F373 кончились ноги и он без этого хорошо загружен. Пусть там работает только ядро (коммуникация и передвижение), а сбором и обработкой вспомогательной инфы занимается другой МК.
Это уже будет четвертый МК на гексаподе: STM32F373 (основной), ESP32 (камера), Ralink (WIFI-UART мост) и STM32F030 (датчики). В три из них нужно заливать прошивку 🙂
Так же нужно добавить акселерометр на плату управления для автоматического выравнивания горизонта.
Еще планирую запихнуть в гексапод полноценный терминал. Там все будет по взрослому: история команд и автозавершение. Сейчас этого сделать нельзя, т.к. нужна дополнительная линия DTR с USB-UART преобразователя для сброса состояния терминала, а нога МК под это не выделена. Конфигурируемых параметров много и ими нужно как-то рулить, желательно через что-нибудь нормальное (сейчас там CLI и это не очень удобно).
Немного фото и видео
Поколдовал над матаном и получилось увеличить скорость передвижения. На видео ДО и ПОСЛЕ.
Робототехника
Введение:
4.1. Изучаем первый датчик – датчик касания
Рис. 1
Первым датчиком, который мы изучим, будет датчик касания (Рис. 2).
Рис. 2
Этот датчик, по сути, представляет собой специальную кнопку, которая может находиться в двух состояниях: «Нажатие» (Рис. 3 поз. 1) или «Освобождение» (Рис. 3 поз. 2). Также, последовательный переход в состояние «Нажатие», а затем «Освобождение» называется: «Щелчок» (Рис. 3 поз. 3) и может обрабатываться программой. как самостоятельное событие.
Рис. 3
4.2. Оранжевая палитра – Управление операторами
Какие же инструменты представляет нам среда программирования для получения информации с датчиков и реагирования на эту информацию в программе? Давайте начнем знакомиться с программными блоками, расположенными в Оранжевой палитре, которая называется «Управление операторами». (Рис. 4)
Рис. 4
Программные блоки Оранжевой палитры, не смотря на свою малочисленность, очень важны! С помощью этих блоков мы можем обрабатывать массу событий и условий и сложно представить практическую программу, которая может обойтись без этих блоков.
Программные блоки «Ожидание», «Цикл» и «Переключатель» имеют множество режимов и соответствующих настроек, знакомиться с которыми мы будем на практических примерах, последовательно и с наглядными пояснениями.
4.3. Оранжевая палитра, программный блок «Ожидание»
Перед тем, как приступить к решению практических задач, давайте закрепим датчик касания на нашем роботе, как показано на Рис. 5, и подключим его кабелем к порту «1» модуля EV3.
Рис. 5
Задача №6: необходимо написать программу, запускающую движение робота по щелчку кнопки.
Решение:
Рис. 6
Рис. 7
Итак: при такой настройке блока ожидания выполнение нашей программы будет остановлено до нажатия-отпускания кнопки датчика касания. Только после «Щелчка» выполнение будет передано следующему программному блоку. Установим после блока ожидания один программный блок «Рулевое управление», загрузим программу в робота и убедимся в правильности её выполнения! (Рис. 8)
Рис. 8
Задача №7: необходимо написать программу, останавливающую робота, столкнувшегося с препятствием.
Из датчика касания давайте соберем небольшой бампер, который будет нам сигнализировать о том, что наш робот столкнулся с препятствием. Ниже приведены подробные инструкции для сборки, как из домашней, так и из образовательной версии конструктора Lego mindstorms EV3. Можете поэкспериментировать и придумать собственный вариант конструкции.
Lego mindstorms EV3 home
Lego mindstorms EV3 education
Получившийся элемент закрепим на передней балке нашего робота и соединим датчик касания с портом «1» модуля EV3.
Lego mindstorms EV3 Home
Lego mindstorms EV3 Education
Конструкция готова! Приступим к созданию программы. По условию задачи: робот должен двигаться вперед, пока не наткнется на препятствие. В этом случае датчик касания будет нажат! Для решения снова воспользуемся программным блоком «Ожидание».
Решение:
Рис. 9
Для решения следующей задачи нам понадобится программный блок «Цикл» Оранжевой палитры.
Презентация была опубликована 8 лет назад пользователемЗоя Охромеева
Похожие презентации
1 «Использование датчика касания»
3 1.Датчик касания нажат 2.Датчик касания отпущен 3.Датчик касания нажат несколько раз Для датчика касания обязательно нужно указывать порт, к которому он подключен.
4 Модель автобуса выполнена с использованием LEGO- микрокомпьютера RCX. В конструкции имеются два датчика касания для работы автоматической двери.
5 В процессе движения модель лифта отслеживает нажатие кнопок на разных этажах здания и и подает предупредительный сигнал. В модели использованы 6 датчиков касания.
7 1.Начало 2.Мельница движется по часовой стрелке. 3.Срабатывает датчик касания. 4.Мельница движется в противоположную сторону 2 сек. 5.Мельница останавливается. 6.Конец.
8 начало конец Лопасти мельницы движутся по часовой стрелке Датчик касания сработал? нет Лопасти мельницы движутся в противоположную сторону 2 сек. Мельница останавливается да Датчик нажат Датчик отпущен Датчик начат 2 раза
9 сборка модели: соберите модель, отвечающую заданным условиям (датчик касания). программирование модели: запустите программу Robolab 2.5.4; запрограммируйте движение Вашей модели до работы датчика касания; запрограммируйте работу датчика касания; запрограммируйте движение модели после срабатывания датчика касания. тестирование модели: загрузите программу на RCX; запустите вашу модель; убедитесь в правильности выполнения всех команд; при необходимости исправьте ошибки. защита проекта покажите работу своей модели другим группам.
10 Нарисуйте схему движения автомобиля: автомобиль препятствие Создайте программу движения автомобиля, который при обнаружении барьера сможет от него отъехать (или объехать препятствие).