Датчик растяжения своими руками
В 2009 году автор принимал участие в проекте по разработке специальных сенсорных перчаток для оцифровки жестов оператора сурдоперевода. Для проекта понадобились датчики изгиба (тензорезисторы) в количестве 10 штук, цена которых значительно превосходило финансовые возможности автора на тот момент.
Перерыв Интернеты тематические сайты, автор обнаружил несколько инструкций по самостоятельному изготовлению так необходимых ему датчиков. В то же время, автор столкнулся с некоторыми проблемами, в основном касательно доступа к компонентам конструкции. Во всех найденных инструкциях предусматривалось использования неопрена, либо, на худой конец, токопроводящей нити или токопроводящей материи. Стоимость доставки делала заказ перечисленных выше материалов неоправданно дорогим, и существенно превышала их стоимость.
Однако, автор решил поэкспериментировать с рядом материалов, в том числе копиркой и материалом, из которого изготавливаются антистатические упаковочные пакеты для электроники.
Наконец, по прошествии двух недель, позитивные результаты были достигнуты, а созданные тогда датчики продолжают работать и по сегодняшний день.
По мнению автора, если ваш рабочий бюджет ограничен как у него, либо вы ограничены в получении необходимых материалов и элементов конструкции, эта инструкция по изготовлению самодельных датчиков изгиба как раз для вас.
Примечание переводчика: Вот тут полностью согласен. В РФ ОДИН! датчик стоит от 600 до 800 рублей, в то время как в украинских магазинах от 130 до 180 гривен (порядка 20 $).
Материалы и инструменты:
Необходимые материалы и инструменты
Материалы:
- Антистатические пакеты 10х15 Сантиметров
- Кабельная стяжка (лучше всего длиной 20-25 Сантиметров)
- Изолента (широкая, шириной 2,4 Сантиметра и узкая 1,1 Сантиметр шириной)
- Соединительные провода с гнездами (проволочные перемычки) длиной около 20 Сантиметров
Инструменты:
- Карандаш (обычный грифельный, механический не рекомендуется, поскольку может повредить рабочую поверхность )
- Скальпель
- Инструмент для очистки изоляции проводов
Подготовка
По мнению автора, подготовительная часть занимает больше всего времени, поэтому ниже приводим несколько советов для сокращения этого этапа.
Подготовка антистатических пакетов:
Соль нашего датчика — антистатический пакет
Пакеты с известными размерами (в нашем случае – 10х15 Сантиметров) весьма удобны для изготовления равных кусков с точными размерами (длина и ширина пакета нам уже известна). Примите во внимание, что вам необходимо удалить (отрезать скальпелем) обе кромки пакета по длинным (15 сантиметровым) сторонам, в то же время оставив нижнюю кромку. В последующем, это поможет вырезать ДВА одинаковых куска пакета, разрезая обе его стороны одним движением.
Совет! Для вырезания равных по площади отрезков антистатического пакета автор настоятельно рекомендует использовать распечатанный и наклеенный на картон шаблон необходимого размера. Действия: вырезать два куска пленки размером 0,8х15 Сантиметров и один кусок размером 1,7х15 сантиметров.
Важно! Если вы:
- Растянули/помяли материал
- Повредили его иными предметами
- Пролили на него растворяющие жидкости
- Повредили его карандашом
- Повредили его иным способом
начинайте всё с начала.
Подготовка проволочных перемычек
Проводники
Не знаю как кто, но автор считает их просто превосходными. В нашем проекте вам предстоит разделить их на две равные части по 10 сантиметров. После этого, отмерьте 5 сантиметров каждого проводника от отрезанного края и зачистьте изоляцию. Из очищенной части провода сформируйте петлю и легким скручивание зафиксируйте ее возле начала изолированной части провода. У вас чудесная петля. Теперь повторите для всех кусков провода. Внимание! Ни в коем случае не спаивайте провода! Впоследствии это может привести к нелинейному искажению резистивности вашего датчика. Отставьте проводники в «природном» виде.
Подготовка изоленты
- Отрежьте 2 отрезка узкой (1,1 сантиметр) изоленты длинной 17 Сантиметров.
- Отрежьте 1 отрезок широкой (2,4 сантиметра) изоленты длиной 19 Сантиметров.
Сборка конструкции). Медленно на верно
Сборка датчика
Возьмите полоску узкой (1,1 Сантиметр) изоленты, и поместите ее на стол липкой частью вверх. Точно по середине изоленты разместите полоску (размер 0,8х15 сантиметров), вырезанную из антистатического пакета. Удостоверьтесь, что вокруг полоски антистатического материала остались бортики липкой части изоленты. Тщательно разгладьте полоску из пакета на изоленте.
Важно! Все надписи на антистатической полосе должны быть обращены к липкой части изоленты! Полоса из пакета должна смотреть внутренней частью вверх!
Теперь, поместите провод петлей на полосу из антистатического материала таким образом, чтобы изолированная часть провода примерно на 0.5 Сантиметра заходила на нее. Повторите описанные выше операции с другой полосой изоленты. После этого, сложите вдвое вдоль больший кусок пленки размером 1,7х15 Сантиметров.
Важно! Все надписи на полосе должны быть обращены внутрь сгиба!
Поместите сложенную вдвое полосу антистатического материала между двумя полосками узкой изоленты и аккуратно склейте получившийся «сэндвич». Следите за тем, чтобы ни одна деталь не выступала за края антистатической подложки и не выступала на клейкую часть изоленты.
Нам нужно усиление!
Усиление датчика
Наш датчик готов и вполне может использоваться в ваших проектах. В то же время, он еще слишком хрупок и практически лишен возможности возвращаться в состояние покоя. Именно для усиления датчика нам понадобятся широкая изолента и кабельные стяжки. Кроме того, стяжки будут играть роль пружины для возвращения датчику его первоначальной формы, то есть, в состояние покоя ну или логического нуля.
Итак:
- Поместите широкую изоленту на стол клейкой стороной вверх.
- На изоленту вдоль ее оси поместите кабельную стяжку и обрежьте ее выступающие части.
- Вдоль оси изоленты поверх кабельной стяжки поместите датчик.
- Заверните свободные стороны широкой полосы изоленты вокруг датчика.
- Тщательно разгладьте изоленты для лучшего контакта склеиваемых деталей.
- Поверх щели между завернутыми краями широкой изоленты наклейте полоску узкой (1,1 Сантиметр изоленты).
- На датчик со стороны кабелей наденьте кусок термоусадочной трубки и прогрейте его поцелуем зажигалкой.
Все готово! Развлекайтесь!
Тот самый делитель
Для подключения вашего датчика к микроконтроллеру вам необходимо собрать схему простого делителя напряжения. Номиналы деталей делителя приведены на его принципиальной схеме.
Помните! У микроконтроллеров семейства Arduino выходное напряжение составляет 5 Вольт, так что автор предлагает вам собрать схему, которая расположена справа.
О том, где могут описанные в статье датчики, мы поговорим в следующий раз.
(A-Z Source)
Источник
Доброго времени суток любители ардуино! Как то зависая в просторах интернета наткнулся на довольно занимательную статью о том, как сделать руку манипулятор, повторяющею движения руки человека, вдохновлённый простотой и эффектностью самоделки самоделки решил собрать её. Нашёл на Аллиэкспресс датчики изгиба для руки передатчика и немного офигел, одна штука стояла в районе 15-20$, получается что 5 таких датчиков только для одной руки будут стоить 75-100$ и это только на датчики! Через некоторое время узнал, как сделать такие датчики своими руками, оказывается это очень просто и дёшево.
И так для датчика изгиба нам понадобится:
-плата Arduino Uno (
покупал тут
)
-breadboard
-соединительные провода типа «папа-мама» или «папа-папа»
-сервомотор
-картон
-бумага
-фольга
-карандаш
-источник питания от 6 до 12 вольт (я использую соединённые последовательно 4 батарейки на 1,5 В)
Из инструментов нам понадобится:
-клеевой пистолет
-ножницы
И так первым делом вырезаем из картона две полоски по длине на 2см больше вашего указательного пальца и в ширину около 1 см:
Вырезаем одну такую же полоску из бумаги только чуть по меньше:
Карандашом заштриховываем как можно лучше обе стороны бумажной полоски:
Вырезаем две полоски из фольги, размером меньше бумажной:
Приклеиваем их к картонным полоскам так как показано на фото:
От соединительных проводов «папа-мама» отрезаем выход «мама» и очищаем их концы от изоляции:
Приматываем из скотчем либо припаиваем:
Прикладываем к одной из половинок бумажную полоску, так чтобы она соприкасалась с фольгой, затем накрываем второй половинкой стороной с фольгой, надавливаем и заклеиваем по бокам:
Делаем с помощью термоклея такие вот «змейки» с каждой стороны, они нужны чтобы конструкция была более гибкой
Берём ардуино и подключаем выход 5v к плюсу breadboard, а Gnd к минусу:
К серводвигателю добавляем соединительный провода и подсоединяем его к ардуино следующим образом:
Коричневый провод к Gnd
красный к 5v
оранжевый к 9 пину
К нашему датчику изгиба добавляем два провода типа «папа-папа»
Подсоединяем их к breadboard:
Один из концов датчика подсоединяем к плюсу breadboard через резистор в 22 Килоома (к сожалению я перепутал и подсоединил его в к другому выходу, но на работоспособности это не откликнулось), а другой к минусу:
На ту линию breadboarda на которой находится конец датчика подключённый к плюсу , добавляем ещё один провод и выводи его на выход A0 на Ардуино:
Теперь подключаем Ардуино к компьютеру, запускаем Arduino IDE и загружаем в него следующий скетч:
#include
Servo servo1;
const int flexpin = 0;
void setup()
{
Serial.begin(9600);
servo1.attach(9);
}
void loop()
{
int flexposition;
int servoposition;
flexposition = analogRead(flexpin);
servoposition = map(flexposition, 1018, 1023, 0, 90);
servoposition = constrain(servoposition, 0, 90);
servo1.write(servoposition);
Serial.print(«sensor: «);
Serial.print(flexposition);
Serial.print(» servo: «);
Serial.println(servoposition);
delay(1000);
}
Включаем монитор порта к которому подключено Ардуино и загружаем скетч
Теперь наблюдаем за изменениями которые происходят в мониторе порта при изгибание нашего датчика, видим что 1023 это 90 градусов, а 1020 и 1019 это 0, поэтому в моём случае я меняю число 1018 в скетче на 1020, у вас может быть по другому. Теперь 1020 это 0 градусов, а 1023 это 90 градусов. После всех изменений загружаем новый настроенный скетч на плату Ардуино
Ну вот и всё! Наш простейший и главное дешёвый датчик изгиба готов!
Если все сделать правильно то при сгибании датчика сервопривод будет делать поворот на 90 градусов а при разгибании будет возвращаться в исходное положение. Конечно точность данного датчика уступает покупному, но для не особо замороченных проектов подойдёт, к тому же если сделать всё аккуратно и произвести точную настройку то получится почти как покупной. надеюсь данная статья кому нибудь пригодится.
Всем спасибо за внимание!
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Источник
Предисловие
В данной статье рассмотрим как сделать руку-клавиатуру, а также самодельный датчик изгиба (сгибания). На одной руке, как правило, 5 пальцев — это дает сделать 32 (2^5) комбинации. Но на русский язык не потянет (33-32 символа), а вот на английский язык как раз, ещё и останется место для space/backspace/enter и т.д.
Немного идей: если подумать, то это интересный джойстик; если присоединить вторую руку, то это 1024 комбинации, а это возможно музыкальный инструмент; внедрить гироскоп/акселерометр и улучшить до мышки.
Подготовка
Нам понадобится:
- Arduino — разницы особо нету какую использовать, потребуется 5 аналоговых входов, 3.3V, 5V
- Блютуз модуль — связь в одну сторону, поэтому разницы нет, у меня был hc-06
- 5 фоторезисторов (3 мм.), 5 светодиодов (3 мм.)
- Термоусадка, трубка из под капельницы, провода
- Резисторы: 1 кОм (х5)
- Питание — крона
Датчик изгиба
Прежде чем открывать IDE нужно собрать хотя бы один датчик изгиба и удостовериться в его работоспособности. Почему бы его не купить? Так как его в своем городе не нашел, а в Китае стоит 20$/штука, кроме того максимум я находил длиной в 8 сантиметров, выигрывают они только формой (тонкие).
До этого с фоторезисторами не имел дела, поэтому для начала просто посмотрел на принцип работы, подобрал сопротивление, оценил диапазон, а также выявил что из 10 купленных 1 не работал, не зря проверял.
После собраться собственно сам датчик. На рисунке изображена схема датчика, я думаю понятно что необходимо сделать.
Советую постараться найти фоторезисторы именно 3 мм., так как иначе вставить их в трубку очень проблематично. Вот что получилось:
Проводов таких тонких у меня не было, а оптоволокно завезли уже… В общем телефонный провод как раз.
Теперь можно натянуть термоусадку и убедится в работе.
Проверить работоспособность можно таким кодом:
const int pinPhoto = A0;
void setup() {
pinMode( pinPhoto, INPUT );
}
void loop() {
Serial.println( analogRead( pinPhoto ) );
delay(100);
}
Выводиться должно значение от 0 до 1024, у меня вышло так:
Сгибаем датчик:
Скетч и код на ПК
Будет две программы: скетч на плату и программа на ПК. Так как готов только один датчик, а уже очень хочется узнать реально ли эмулировать клавиатуру через Arduino, то включим пк. А пока “заменим” датчики изгиба на кнопки:
Программа на ПК
Что нам надо? Получить данные с блютуз модуля, соотнести с нужным символом, задействовать клавишу в нужное окно. Код по ссылке.
Алгоритм:
- Присоединится по блютуз
- С помощью ReadCOM() считываем байт посылаемый микроконтроллером, отправляем значение в метод SendKey, так же туда отправляется хэндл текущего окна, чтобы метод знал куда записать символ
- Проверяем что к нам пришло, если это значение соответствует space, backspace, enter, то сработает нужное нажатие, если же ни один из вышеперечисленных, то возьмется из массива нужный символ
Зачем массив если можно было пустить по порядку все символы? Да, можно было, так и было на какой-то стадии, но некоторые комбинации для пальцев легче чем другие, а так же есть определенная частота использование тех или иных букв в алфавите:
Может показаться что уже за нас всё сделано, но не тут то было, сколько я не гуглил “сложность комбинаций пальцами рук” и тд, ничего годного не нашел. Пришлось самостоятельно и субъективно оценивать сложность комбинаций, для каждого советую эту таблицу заполнить самостоятельно и переписать массив. Кратко: самая легкая комбинация — самая частая буква.
1 | 00001 | g |
2 | 00010 | t |
3 | 00011 | n |
4 | 00100 | space |
5 | 00101 | z |
6 | 00110 | s |
7 | 00111 | h |
8 | 01000 | e |
9 | 01001 | q |
10 | 01010 | r |
11 | 01011 | d |
12 | 01100 | l |
13 | 01101 | u |
14 | 01110 | o |
15 | 01111 | backspace |
16 | 10000 | a |
17 | 10001 | c |
18 | 10010 | m |
19 | 10011 | w |
20 | 10100 | f |
21 | 10101 | y |
22 | 10110 | p |
23 | 10111 | b |
24 | 11000 | i |
25 | 11001 | v |
26 | 11010 | k |
27 | 11011 | x |
28 | 11100 | j |
29 | 11101 | |
30 | 11110 | |
31 | 11111 | enter |
Скетч на Arduino
Для начала: разницы между кодом для кнопочной версии и версии с датчиками практически нету, за исключением пару строк для считывания данных. Способов считать данные много есть, но самый хороший алгоритм мне показался такой:
- Получить один из сигналов
- Записать его в переменную sendValue
- Дождаться комбинации 00000 (разжал пальцы), либо если пришел сигнал больше sendValue, то запишем новый сигнал в sendValue
- Если комбинация 00000 и sendValue не равен 0, то отправляем данные
Как считается полученное число с датчиков? Обычным переводом с двоичной системы в десятичную, каждый последующий сигнал + 2n.
Зачем такой механизм? Мы не можем одновременно нажать на необходимые кнопки, либо, что еще сложнее, согнуть нужные пальцы в одно мгновение, поэтому нам нужно не отправлять сразу данные, а ждать “последняя ли это комбинация?”, поймём мы это с помощью изначальной комбинации( 00000 ), это будет как “стопбит”, после которого программа будет понимать, что следует направить число, если там конечно же лежит не сам “стопбит”.
Зачем нужно сравнивать sendValue и новый сигнал? После того как человек загнул, например, 01011 и начинает разгибать пальцы для исходной комбинации (00000 ), то он уже сделает другую комбинацию, так как пальцы мы разжимаем тоже не мгновенно, после того как пользователь разожмет любой из пальцев комбинация сразу станет по числовому значение меньше, чем была в “пик”, именно по-этому запоминает ”наибольшую” комбинацию.
Константы представленные на скрине (600, 350, 300, 300, 480) были подобраны практическим путем, каждый датчик в отдельности выводил, загибал палец до комфортного “изгиба” и записывал текущее значение.
Сборка устройства
Общая схема представлена на рисунке ниже. На самом деле самое сложно, как оказалось, это учитывать размеры, некоторые провода свободно висят и мешают, а другие натягиваются и иногда рвуться. Кроме того датчики вышли больше чем надо для пальцев, эдак взял с запасом ) И собственно сама перчатка, я взял строительную, что не совсем привлекательно. Также если клеить непосредственно сразу на перчатку, то при сгибание датчики будут уходить в бок, поэтому решено было посадить их на липучки и в случае чего их можно снять.
Вторая версия
После того как собрал “устройство” было решено сделать “всё по новой”, несколько улучшений:
- Убрать резисторы для светодиодов, так как 5 светодиодов Arduino с выхода 3.3 вольта отлично вывозит и без резисторов
- Убрать резисторы и пайку с трубки капельницы, так как теряется удобство сгибание пальцами, а так же эта пайка ломается и поместить туда резисторы вовсе была очень плохая идея
- Положить плату на шилд, так как и проводов много, и смотрится все не очень красиво
Схема не сильно изменилась:
Несколько фото новой версии:
Результат
Рука-клавиатура не новый проект, но сделать самому и редактировать как душе угодно намного приятнее готового, тем более мы получаем не только клавиатуру, а универсальное устройства, которое можно связать и с телефоном, и с другими устройствами (управлять, например, “механической рукой”). Также на заметку кому-нибудь такие датчики, вдруг пригодятся )
Стоимость
Резисторы 1кОм(5х) + Светодиоды(5х) | ~ 0.5$ |
Arduino Nano | ~ 2$ |
Shield Arduino Nano | ~ 2.5$ |
Термоусадка, капельница, липучки, перчатка, клей | ~ 2$ |
HC-06 | ~ 3$ |
Итого: | 10$ |
Источник
Arduino и датчик изгиба
В некоторых случаях электронной системе требуются данные о степени изгиба той или иной механической части устройства. Например, это может быть нога или рука робота. Также помимо робототехники такая задача актуальна в автомобилестроении, медицине, приборах виртуальной реальности и т.п.
Для получения информации о механическом изгибе применяют специальные датчики в виде тонкой длинной резистивной полоски. Такой датчик меняет свое сопротивление в зависимости от величины изгиба. То есть он преобразует изменение механической структуры в электрическое сопротивление, при этом чем больше изгиб, тем больше значение сопротивления. Датчики изгиба или Flex-датчики довольно дешевы и просты в применении, поэтому их без проблем можно использовать в проектах с Arduino.
Запатентованная технология Flex-датчика основана на резистивных углеродных элементах. Благодаря тому, что это переменный печатный резистор, его можно сделать довольно длинным на тонкой гибкой подложке. Когда подложка согнута, на выходе датчика присутствует некоторое сопротивление, соответствующее с радиусу изгиба. Иными словами, гибкие датчики являются аналоговыми резисторами, которые работают в составе переменных аналоговых делителей напряжения. Обычно в конфигурации делителя напряжения и используется гибкий датчик, как это показано ниже.
Перед работой с датчиком следует учесть один момент. Хотя активная часть датчика (область между черными квадратами) достаточно прочная, ее выводы подвержена излому. Рекомендуется усилить или закрепить эту область (например, зажать или склеить датчик на черном квадрате, расположенном ближе к контактам), чтобы убедиться, что она не сгибается вместе с остальной частью датчика.
Для считывания данных с датчика подойдет обычная функция analogRead(). В данном проекте используются красный, зеленый и синий светодиоды, которые подключены к выводам Arduino под номерами 4, 3 и 2 соответственно. Они позволяют индицировать три уровня изгиба датчика. При отсутствии изгиба датчика светится только синий светодиод, тогда как небольшой изгиб зажигает зеленый светодиод. При большой степени изгиба загорается красный светодиод, а остальные два светодиода гаснут. Вывод с делителя напряжения подключается к линии A1 платы Arduino. Вся схема подключения показана на рисунке ниже.
Далее приведен код (скетч) для работы Arduino с датчиком изгиба.
#define blue 2
#define green 3
#define red 4
unsigned int f;
void setup()
{
pinMode(blue,OUTPUT);
pinMode(green,OUTPUT);
pinMode(red,OUTPUT);
Serial.begin(9600);
}
void loop()
{
f=analogRead(1);
Serial.println(f);
if(f>300) //Изгиба нет; загорается синий светодиод
{
digitalWrite(blue,HIGH);
digitalWrite(green,LOW);
digitalWrite(red,LOW);
}
else if((f<300)&&(f>260)) // Небольшой изгиб; загорается зеленый светодиод
{
digitalWrite(green,HIGH);
digitalWrite(blue,LOW);
digitalWrite(red,LOW);
}
else // Большой изгиб; загорается красный светодиод
{
digitalWrite(red,HIGH);
digitalWrite(green,LOW);
digitalWrite(blue,LOW);
}
delay(50);
}
© digitrode.ru
Теги: Arduino, датчик изгиба
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Источник