V tej vadnici bomo razvili vezje z uporabo senzorja FLEX, Arduino Uno in servo motorja. Ta projekt je sistem servo nadzora, pri katerem je položaj servo gredi določen s upogibanjem ali upogibanjem ali odstopanjem senzorja FLEX.
Najprej se pogovorimo o servo motorjih. Servo motorji se uporabljajo tam, kjer je potrebno natančno premikanje ali položaj gredi. Te niso predlagane za visoke hitrosti. Predlagane so za nizko hitrost, srednji navor in natančno uporabo položaja. Ti motorji se uporabljajo v robotskih strojih za roke, krmiljenju leta in nadzornih sistemih. Servo motorji se uporabljajo v vgrajenih sistemih, kot so prodajni avtomati itd.
Servo motorji so na voljo v različnih oblikah in velikostih. Servo motor bo imel večinoma žice, ena je za pozitivno napetost, druga za ozemljitev in zadnja za nastavitev položaja. RDEČA žica je priključena na napajanje, črna žica je priključena na maso, RUMENA žica pa na signal.
Servo motor je kombinacija enosmernega motorja, sistema za nadzor položaja, zobnikov. Položaj gredi enosmernega motorja prilagodi krmilna elektronika v servo, na podlagi razmerja obratovanja PWM signala zatiča SIGNAL.
Preprosto rečeno krmilna elektronika prilagodi položaj gredi z upravljanjem enosmernega motorja. Ti podatki o položaju gredi se pošljejo skozi zatič SIGNAL. Podatke o položaju krmilniku je treba poslati v obliki PWM signala skozi signalni zatič servo motorja.
Frekvenca PWM (Pulse Width Modulated) signala se lahko razlikuje glede na vrsto servo motorja. Tu je najpomembnejše razmerje dolžnosti signala PWM. Na podlagi tega DOLŽNEGA ODNOSA krmilna elektronika prilagodi gred. Če želite gred premakniti na uro 9 °, mora biti razmerje vklopa 1/18. 1 milli sekundo časa 'VKLOP' in 17 mili sekund časa IZKLOPA v signalu 18 ms.
Da se gred premakne na uro 12 °, mora biti čas vklopa signala 1,5 ms, čas izklopa pa 16,5 ms. To razmerje dekodira krmilni sistem v servo in na podlagi tega prilagodi položaj.
Ta PWM tukaj je ustvarjen z uporabo ARDUINO UNO. Torej za zdaj to vemo, da lahko nadzorujemo gred servo motorja s spreminjanjem delovnega razmerja signala PWM, ki ga ustvarja Arduino Uno. UNO ima posebno funkcijo, ki nam omogoča, da določimo položaj SERVO, ne da bi motili signal PWM. Vendar je pomembno vedeti razmerje dajatev PWM - položaj servo. O tem bomo več govorili v opisu.
Zdaj pa se pogovorimo o FLEX SENZORJU. Če želimo senzor FLEX povezati z ARDUINO UNO, bomo za to uporabili 8-bitno funkcijo ADC (analogna v digitalno pretvorbo). Senzor FLEX je pretvornik, ki spremeni svojo odpornost, ko se spremeni njegova oblika. Senzor FLEX je dolg 2,2 palca ali dolg prst. Prikazano je na sliki.
Flex senzor je pretvornik, ki spremeni svoj upor, ko je linearna površina upognjena. Od tod tudi ime flex flex. Preprosto rečeno upor priključka senzorja se poveča, ko je upognjen. To je prikazano na spodnji sliki.
Ta sprememba upora ne more prinesti nič dobrega, če jih ne preberemo. Priročni krmilnik lahko bere možnosti le v napetosti in nič manj, za to bomo uporabili vezje delilnika napetosti, s čimer lahko ugotovimo spremembo upora kot spremembo napetosti.
Napetostni delilnik je uporovno vezje in je prikazan na sliki. V tem uporovnem omrežju imamo en konstanten upor in drugo spremenljivo upornost. Kot je prikazano na sliki, je R1 tukaj konstanten upor, R2 pa je FLEX senzor, ki deluje kot upor.
Srednja točka veje se meri. S spremembo R2 imamo spremembo pri Voutu. Tako imamo s tem napetost, ki se spreminja s težo.
Zdaj je pomembno omeniti, da je vhod, ki ga krmilnik za pretvorbo ADC sprejme le 50 μAmp. Ta obremenitveni učinek napetostnega delilnika na osnovi upora je pomemben, saj tok, ki ga potegne Vout napetostnega delilnika, poveča odstotek napak, zato zaenkrat ni treba skrbeti za obremenitveni učinek.
FLEX SENZOR, ko se upogib spremeni njegov upor. S tem pretvornikom, priključenim na vezje delilnika napetosti, bomo imeli spremenljivo napetost s FLEX na pretvorniku. Ta spremenljiva napetost je FED na enega od ADC kanalov, imeli bomo digitalno vrednost, ki se nanaša na FLEX.
To digitalno vrednost bomo uskladili s položajem servo, s tem bomo imeli servo nadzor s pomočjo flex.
Komponente
Strojna oprema: Arduino Uno , napajalnik (5v), kondenzator 1000 uF, kondenzator 100nF (3 kosi), upor 100KΩ, SERVO MOTOR (SG 90), upor 220Ω, senzor FLEX.
Programska oprema: Atmel studio 6.2 ali Aurdino zvečer.
Shema vezja in razlaga
Shema vezja za upravljanje servo motorja s senzorjem FLEX je prikazana na spodnji sliki.
Napetost na senzorju ni popolnoma linearna; bo hrupno. Za filtriranje hrupa so kondenzatorji nameščeni čez vsak upor v delilnem vezju, kot je prikazano na sliki.
Tu bomo vzeli napetost, ki jo zagotavlja delilnik (napetost, ki linearno predstavlja težo), in jo podali v enega od ADC kanalov Arduino UNO. Za to bomo uporabili A0. Po inicializaciji ADC bomo imeli digitalno vrednost, ki predstavlja upognjen senzor. Vzeli bomo to vrednost in jo uskladili s položajem servo.
Da bi se to zgodilo, moramo v programu pripraviti nekaj navodil, o katerih bomo podrobneje govorili spodaj.
ARDUINO ima šest ADC kanalov, kot je prikazano na sliki. V teh se lahko kateri koli ali vsi uporabljajo kot vhodi za analogno napetost. UNO ADC ima 10-bitno ločljivost (torej celoštevilčne vrednosti iz (0- (2 ^ 10) 1023)). To pomeni, da bo preslikal vhodne napetosti med 0 in 5 voltov v celoštevilčne vrednosti med 0 in 1023. Torej za vsako (5/1024 = 4,9 mV) na enoto.
Tu bomo uporabili A0 UNO.
Vedeti moramo nekaj stvari.
|
Najprej imajo UNO ADC kanali privzeto referenčno vrednost 5V. To pomeni, da lahko damo maksimalno vhodno napetost 5V za pretvorbo ADC na katerem koli vhodnem kanalu. Ker nekateri senzorji zagotavljajo napetosti od 0-2,5V, dobimo z referenco 5V manjšo natančnost, zato imamo navodilo, ki nam omogoča spreminjanje te referenčne vrednosti. Torej za spremembo referenčne vrednosti imamo (“analogReference ();”) Za zdaj jo pustimo kot.
Privzeto dobimo največjo ločljivost ADC plošče, ki znaša 10 bitov, to ločljivost pa lahko spremenimo z uporabo navodil (“analogReadResolution (bitov);”). Ta sprememba ločljivosti je v nekaterih primerih lahko koristna. Za zdaj pustimo tako.
Če so zgornji pogoji nastavljeni na privzete, lahko iz ADC-ja kanala '0' beremo vrednost tako, da neposredno pokličemo funkcijo "analogRead (pin);", tukaj "pin" predstavlja pin, kamor smo povezali analogni signal, v tem primeru je to bi bila "A0".
Vrednost iz ADC lahko vnesemo v celo število kot “int SENSORVALUE = analogRead (A0); ", S tem navodilom se vrednost po ADC shrani v celo število" SENSORVALUE ".
Zdaj pa se pogovorimo o SERVO, UNO ima funkcijo, ki nam omogoča nadzor nad položajem servo servo, tako da samo damo vrednost stopnje. Recimo, če želimo, da je servo na 30, lahko neposredno predstavimo vrednost v programu. Datoteka glave SERVO interno skrbi za vse izračune razmerja dajatev.
#include
Servo servo; servo.attach (3); servo.write (stopinje); |
Prva izjava predstavlja datoteko glave za nadzor SERVO MOTORJA.
Druga izjava je poimenovanje servo; pustimo ga kot sam servo.
Tretji stavek navaja, kje je priključen servo signalni zatič; to mora biti pin PWM. Tu uporabljamo PIN3.
Četrta izjava daje ukaze za pozicioniranje servo motorja in je v stopinjah. Če ima 30, se servo motor vrti za 30 stopinj.
Zdaj se lahko sg90 premakne od 0-180 stopinj, imamo rezultat ADC 0-1024
Torej je ADC približno šestkrat večji od položaja SERVO. Če bomo rezultat ADC delili s 6, bomo dobili približni položaj SERVO roke.
S tem bomo na servo motor podali vrednost položaja servo motorja, ki je sorazmerna upogibanju ali upogibanju. Ko je ta fleksibilni senzor nameščen na rokavico, lahko s premikanjem roke nadzorujemo položaj servo.