В този урок ще разработим схема, използваща сензор за сила, Arduino Uno и серво мотор. Това ще бъде система за управление на серво, при която положението на серво вала е определено от теглото, присъстващо на датчика за сила. Преди да продължим, нека поговорим за серво и други компоненти.
Сервомоторите се използват там, където има нужда от точно движение или положение на вала. Те не се предлагат за високоскоростни приложения. Те се предлагат за ниска скорост, среден въртящ момент и точно приложение на позицията. Тези двигатели се използват в роботизирани машини за управление, полет и системи за управление. Серво мотори се използват и в някои от принтерите и факс машините.
Серво двигателите се предлагат в различни форми и размери. Серво мотор ще има предимно проводници, единият е за положително напрежение, друг е за заземяване и последният е за настройка на положението. ЧЕРВЕНИЯ проводник е свързан към захранването, Черният проводник е свързан към земята и ЖЪЛТИЯ проводник е свързан към сигнала.
Серво мотор е комбинация от DC мотор, система за управление на позицията, предавки. Положението на вала на постояннотоковия двигател се регулира от управляващата електроника в серво, на базата на коефициента на запълване на ШИМ сигнала на ПИН СИГНАЛА. Просто казано управляващата електроника регулира положението на вала чрез управление на мотора с постоянен ток. Тези данни относно положението на вала се изпращат през щифта SIGNAL. Данните за местоположението към управлението трябва да се изпращат под формата на ШИМ сигнал през сигналния щифт на серво мотора.
Честотата на сигнала PWM (Pulse Width Modulated) може да варира в зависимост от типа на серво мотора. Важното тук е DUTY RATIO на PWM сигнала. Въз основа на това ДЪЛЖИМНО СЪОТНОШЕНИЕ управляващата електроника регулира вала.
Както е показано на фигурата по-долу, за да се премести валът на 9o часовник, СЪОТНОШЕНИЕТО НА ВКЛЮЧВАНЕ трябва да бъде 1 / 18.ie. 1 мили секунда от „Време за включване“ и 17 мили секунди от „Време за изключване“ в сигнал от 18 ms.
За да се премести валът на часовник 12 °, времето за включване на сигнала трябва да бъде 1,5 ms и времето за изключване трябва да бъде 16,5 ms.
Това съотношение се декодира от системата за управление в серво и тя регулира позицията въз основа на него.
Този ШИМ тук се генерира с помощта на ARDUINO UNO.
Така че засега знаем, че можем да управляваме вала на SERVO MOTOR, като променяме коефициента на запълване на ШИМ сигнала, генериран от UNO.
Сега нека поговорим за сензор за сила или сензор за тегло.
За да свържем сензор FORCE с ARDUINO UNO, ще използваме 8-битова функция ADC (аналогово към цифрово преобразуване) в arduno uno.
Сензорът FORCE е преобразувател, който променя съпротивлението си при прилагане на натиск върху повърхността. Сензорът FORCE се предлага в различни размери и форми.
Ще използваме една от по-евтините версии, защото тук не се нуждаем от голяма точност. FSR400 е един от най-евтините датчици за сила на пазара. Картината на FSR400 е показана на фигурата по-долу.
Сега е важно да се отбележи, че FSR 400 е чувствителен по дължината, силата или тежестта трябва да се концентрират върху лабиринта в средата на окото на сензора, както е показано на фигурата.
Ако силата се прилага в грешни моменти, устройството може да се повреди трайно.
Друго важно нещо е да знаете, че сензорът може да задвижва токове с голям обхват. Така че имайте предвид движещите токове, докато инсталирате. Също така сензорът има ограничение на силата, което е 10 нютона. Така че можем да приложим само 1 кг тегло. Ако се прилагат тежести над 1 кг, сензорът може да покаже някои отклонения. Ако се увеличи повече от 3 кг. сензорът може да се повреди трайно.
Както беше казано по-рано, този сензор се използва за усещане на промените в налягането. Така че, когато теглото се приложи върху сензора FORCE, съпротивлението се променя драстично. Съпротивлението на FS400 над теглото е показано на графиката по-долу:
Както е показано на горната фигура, съпротивлението между двата контакта на сензора намалява с теглото или проводимостта между два контакта на сензора се увеличава.
Съпротивлението на чист проводник се дава от:
Където, p- Съпротивление на проводника
l = Дължина на проводника
A = площ на проводника.
Сега помислете за проводник със съпротивление „R“, ако върху него се приложи някакво налягане, площта върху проводника намалява и дължината на проводника се увеличава в резултат на налягането. Така че по формула съпротивлението на проводника трябва да се увеличи, тъй като съпротивлението R е обратно пропорционално на площта, а също и право пропорционално на дължината l.
Така че с това за проводник под налягане или тегло съпротивлението на проводника се увеличава. Но тази промяна е малка в сравнение с общото съпротивление. За значителна промяна много проводници са подредени заедно.
Това се случва в датчиците за сила, показани на горната фигура. При внимателно гледане може да видите много линии вътре в сензора. Всяка от тези линии представлява проводник. Чувствителността на сензора е в номера на проводници.
Но в този случай съпротивлението ще намалява с налягане, тъй като използваният тук материал не е чист проводник. Тук FSR са здрави устройства с полимерен дебел филм (PTF). Така че това не са устройства от чист проводник. Те са изградени от материал, който показва намаляване на съпротивлението с увеличаване на силата, приложена върху повърхността на сензора.
Този материал показва характеристики, както е показано на графиката на FSR.
Тази промяна в съпротивата не може да донесе нищо добро, освен ако не можем да ги прочетем. Подходящият контролер може да отчита шансовете само в напрежение и нищо по-малко, за това ще използваме верига на делителя на напрежението, с което можем да извлечем промяната на съпротивлението при промяна на напрежението.
Разделителят на напрежение е резистивна верига и е показан на фигура. В тази резистивна мрежа имаме едно постоянно съпротивление и друго променливо съпротивление. Както е показано на фигурата, R1 тук е постоянно съпротивление, а R2 е СИЛА СИЛА, която действа като съпротивление.
Средната точка на разклонението се измерва. С промяната на R2 имаме промяна при Vout. Така че с това имаме напрежение, което се променя с теглото.
Сега е важно да се отбележи, че входът, взет от контролера за преобразуване на ADC, е само 50µAmp. Този ефект на натоварване на делител на напрежение, базиран на съпротивление, е важен, тъй като токът, извлечен от Vout на делителя на напрежението, увеличава процента на грешка, увеличава се, засега не е нужно да се тревожим за ефекта на натоварване
Сега, когато силата се приложи към СИЛОНА НА СИЛА, напрежението в края на разделителя променя този щифт като свързан към ADC канал на UNO, ще получим различна цифрова стойност от ADC на UNO, когато се промени силата върху сензора.
Тази цифрова стойност на ADC е съобразена с коефициента на запълване на ШИМ сигнала, така че имаме контрола на позицията SERVO спрямо силата, приложена върху сензора.
Компоненти
Хардуер: UNO, захранване (5v), кондензатор 1000uF, кондензатор 100nF (3 броя), резистор 100KΩ, SERVO MOTOR (SG 90), резистор 220Ω, сензор за сила FSR400.
Софтуер: Atmel studio 6.2 или aurdino всяка вечер.
Електрическа схема и работно обяснение
Схемата на веригата за управление на серво мотора чрез датчик за сила е показана на фигурата по-долу.
Напрежението на сензора не е напълно линейно; ще бъде шумно. За да филтрират шума, кондензатори се поставят върху всеки резистор в разделителната верига, както е показано на фигурата.
Тук ще вземем напрежението, осигурено от разделителя (напрежение, което представлява теглото линейно) и ще го подадем в един от ADC каналите на Arduino Uno. След преобразуване ще вземем тази цифрова стойност (представляваща тегло) и ще я свържем със стойността на ШИМ и ще предоставим този ШИМ сигнал на мотора SERVO.
Така че с теглото имаме PWM стойност, която променя своето съотношение на мито в зависимост от цифровата стойност. Колкото по-висока е цифровата стойност, толкова по-голямо е коефициентът на мито на ШИМ. Така че при PWM сигнал с по-висок коефициент на запълване сервосиловият вал трябва да достига крайно вдясно или крайно вляво според фигурата, представена във въведението.
Ако теглото е по-ниско, ще имаме по-ниско съотношение на ШИМ и според фигурата във въведението серво трябва да достигне крайно вдясно.
С това имаме SERVO контрол на позицията чрез WEIGHT или FORCE.
За да се случи това, трябва да установим няколко инструкции в програмата и ще говорим подробно за тях по-долу.
ARDUINO има шест ADC канала, както е показано на фигурата. В тях всеки един или всички от тях може да се използва като входове за аналогово напрежение. UNO ADC е с 10-битова разделителна способност (така че целочислените стойности от (0- (2 ^ 10) 1023)). Това означава, че ще преобразува входните напрежения между 0 и 5 волта в целочислени стойности между 0 и 1023. Така че за всеки (5/1024 = 4.9mV) за единица.
Тук ще използваме A0 на UNO. Трябва да знаем няколко неща.
|
На първо място, Arduino Uno ADC каналите имат стандартна референтна стойност 5V. Това означава, че можем да дадем максимално входно напрежение от 5V за ADC преобразуване на всеки входен канал. Тъй като някои сензори осигуряват напрежение от 0-2,5V, с 5V референция получаваме по-малка точност, така че имаме инструкция, която ни позволява да променим тази референтна стойност. Така че за промяна на референтната стойност имаме (“analogReference ();”) Засега я оставяме като.
По подразбиране получаваме максималната разделителна способност на ADC на борда, която е 10 бита, тази разделителна способност може да бъде променена с помощта на инструкция („analogReadResolution (битове);“). Тази промяна на резолюцията може да бъде полезна за някои случаи. Засега го оставяме така.
Сега, ако горните условия са зададени по подразбиране, можем да прочетем стойност от ADC на канал '0', като директно извикаме функцията „analogRead (pin);“, тук „pin“ представлява щифт, където сме свързали аналогов сигнал, в този случай ще бъде „A0“. Стойността от ADC може да бъде взета в цяло число като „int SENSORVALUE = analogRead (A0); ”, Чрез тази инструкция стойността след ADC се съхранява в цялото число„ SENSORVALUE ”.
PWM на UNO може да се постигне на всеки от щифтовете, символизирани като „~“ на платката на печатната платка. В UNO има шест ШИМ канала. Ще използваме PIN3 за нашата цел.
analogWrite (3, VALUE); |
От горното условие можем директно да получим ШИМ сигнала на съответния щифт. Първият параметър в скоби е за избор на пинов номер на ШИМ сигнал. Вторият параметър е за писане на коефициент на мито.
Стойността на PWM на Arduino Uno може да бъде променена от 0 на 255. С „0“ като най-ниска до „255“ като най-висока. С 255 като коефициент на мито ще получим 5V при PIN3. Ако коефициентът на мито е даден като 125, ще получим 2.5V при PIN3.
Сега нека поговорим за управлението на серво мотора, Arduino Uno има функция, която ни позволява да контролираме позицията на серво, просто като дадем стойността на градуса. Да кажем, че ако искаме серво да бъде на 30, можем директно да представим стойността в програмата. Заглавният файл SERVO се грижи вътрешно за всички изчисления на коефициента на мито. Можете да научите повече за управлението на серво мотора с arduino тук.
Сега sg90 може да се движи от 0-180 градуса, имаме ADC резултат 0-1024.
Така ADC е приблизително шест пъти СЕРВОПОЛОЖЕНИЕТО. Така че като разделим резултата на ADC на 6, ще получим приблизителната позиция на SERVO ръка. Следователно имаме ШИМ сигнал, чието съотношение се променя линейно с ТЕГЛО или СИЛА. Това се дава на серво мотора, ние можем да управляваме серво мотора чрез сензор за сила.