Šioje pamokoje mes sukursime grandinę naudodami FLEX jutiklį, „Arduino Uno“ ir „Servo“ variklį. Šis projektas yra servo valdymo sistema, kai servo veleno padėtis nustatoma pagal FLEX jutiklio lankstumą, sulenkimą arba nuokrypį.
Pirmiausia šiek tiek pakalbėkime apie servovariklius. „Servo“ varikliai naudojami ten, kur reikia tikslaus veleno judėjimo ar padėties. Jie nėra siūlomi didelės spartos programoms. Jie siūlomi mažam greičiui, vidutiniam sukimo momentui ir tiksliai pritaikyti padėtį. Šie varikliai naudojami robotinėse rankose, skrydžio valdymo ir valdymo sistemose. Servovarikliai naudojami įmontuotose sistemose, pavyzdžiui, automatuose ir kt.
Servo varikliai yra įvairių formų ir dydžių. Servo variklyje daugiausia bus laidai, vienas skirtas teigiamai įtampai, kitas - žemei, o paskutinis - padėčiai nustatyti. RED laidas yra prijungtas prie maitinimo šaltinio, juodas laidas yra prijungtas prie žemės, o geltonas laidas - prie signalo.
Servovariklis yra nuolatinės srovės variklio, padėties valdymo sistemos, pavarų derinys. Nuolatinės srovės variklio ašies padėtį reguliuoja servo valdymo elektronika, atsižvelgiant į PWM signalo, SIGNAL kaiščio, darbo santykį.
Tiesiog kalbant apie valdymo elektroniką, reguliuokite veleno padėtį valdydami nuolatinės srovės variklį. Šie duomenys apie veleno padėtį siunčiami per SIGNAL kaištį. Padėties duomenys valdikliui turėtų būti siunčiami PWM signalo forma per servo variklio signalo kaištį.
PWM (moduliuojamas impulso pločio) signalo dažnis gali skirtis priklausomai nuo servo variklio tipo. Svarbus dalykas yra PWM signalo PAREIGOS RATIO. Remiantis šiuo PAREIGOS RATU, valdymo elektronika sureguliuoja veleną. Kad velenas būtų perkeltas į 9o laikrodį, ĮJUNGIMO RATAS turi būti 1 / 18.ie. 1 mili sekundė įjungimo laiko ir 17 mili sekundžių išjungimo laiko 18 ms signalu.
Kad velenas būtų perkeltas į 12o laikrodį, signalo įjungimo laikas turi būti 1,5 ms, o išjungimo laikas - 16,5 ms. Šį santykį dekoduoja valdymo sistema servo serveryje ir pagal jį jis koreguoja padėtį.
Šis PWM čia sukurtas naudojant ARDUINO UNO. Taigi dabar mes tai žinome, mes galime valdyti servo variklio veleną keisdami „Arduino Uno“ generuojamo PWM signalo darbo santykį. UNO turi specialią funkciją, kuri leidžia mums pateikti SERVO padėtį, netrikdant PWM signalo. Tačiau svarbu žinoti PWM darbo santykį - servo padėties santykį. Apie tai plačiau pakalbėsime aprašyme.
Dabar pakalbėkime apie FLEX SENSOR. Norėdami susieti „FLEX“ jutiklį su „ARDUINO UNO“, darbui atlikti naudosime 8 bitų ADC („Analog to Digital Conversion“) funkciją. FLEX jutiklis yra keitiklis, kuris keičia savo atsparumą, kai keičiama jo forma. FLEX jutiklis yra 2,2 colio ilgio arba piršto ilgio. Tai parodyta paveiksle.
„Flex“ jutiklis yra keitiklis, kuris keičia savo varžą, kai sulenkiamas tiesinis paviršius. Taigi pavadinimas „flex sensor“. Tiesiog kalbant, jutiklio gnybto varža padidėja, kai jis sulenktas. Tai parodyta žemiau esančiame paveikslėlyje.
Šis pasipriešinimo pokytis negali būti naudingas, nebent mes galime jų perskaityti. Turimas valdiklis gali nuskaityti tik įtampos tikimybę ir ne mažiau, tam mes naudosime įtampos skirstytuvo grandinę, todėl mes galime išvesti pasipriešinimo pokyčius, kai keičiasi įtampa.
Įtampos daliklis yra varžinė grandinė ir parodyta paveiksle. Šiame varžiniame tinkle mes turime vieną pastovią varžą ir kitą kintamą varžą. Kaip parodyta paveikslėlyje, R1 čia yra pastovi varža, o R2 yra FLEX jutiklis, kuris veikia kaip pasipriešinimas.
Šakos vidurio taškas imamas matuoti. Pasikeitus R2, turime pokyčių „Vout“. Taigi mes turime įtampą, kuri kinta priklausomai nuo svorio.
Dabar svarbu atkreipti dėmesį į tai, kad valdiklio įvestas ADC konversijos rodiklis yra vos 50µAmp. Šis atsparumo pagrindu įtampos daliklio apkrovos poveikis yra svarbus, nes srovė, gaunama iš įtampos daliklio Vout, padidina paklaidos procentą, kol kas mes neturime jaudintis dėl apkrovos efekto.
Lanksčios jutiklis, kai sulenktas, pasikeičia jo atsparumas. Kai šis keitiklis prijungtas prie įtampos daliklio grandinės, mes turėsime kintančią įtampą su FLEX ant keitiklio. Ši kintama įtampa nukreipiama į vieną iš ADC kanalų, turėsime skaitmeninę vertę, susijusią su FLEX.
Mes pritaikysime šią skaitmeninę vertę pagal servo padėtį, todėl turėsime servo valdymą lanksčiai.
Komponentai
Aparatūra: „ Arduino Uno“ , maitinimo šaltinis (5v), 1000 uF kondensatorius, 100nF kondensatorius (3 vnt.), 100KΩ rezistorius, SERVO MOTOR (SG 90), 220Ω rezistorius, FLEX jutiklis.
Programinė įranga: „ Atmel studio 6.2“ arba „Aurdino“ kas vakarą.
Grandinės schema ir paaiškinimas
Grandinės schema servo variklių valdymo mišrius davikliu yra parodyta žemiau paveiksle.
Jutiklio įtampa nėra visiškai tiesinė; tai bus triukšmingas. Norėdami ištrinti triukšmą, kondensatoriai dedami ant kiekvieno rezistoriaus skirstytuvo grandinėje, kaip parodyta paveiksle.
Čia mes paimsime daliklio teikiamą įtampą (įtampa, kuri tiesiai atspindi svorį) ir paduosime ją į vieną iš „Arduino UNO“ ADC kanalų. Tam naudosime A0. Po ADC inicijavimo mes turėsime skaitmeninę vertę, atspindinčią sulenktą jutiklį. Mes atsižvelgsime į šią vertę ir suderinsime ją su servo padėtimi.
Kad tai įvyktų, turime nustatyti keletą instrukcijų programoje ir apie jas išsamiai kalbėsime toliau.
ARDUINO turi šešis ADC kanalus, kaip parodyta paveiksle. Tuose bet kuris arba visi iš jų gali būti naudojami kaip analoginės įtampos įėjimai. UNO ADC skiriamoji geba yra 10 bitų (taigi sveikųjų skaičių reikšmės nuo (0- (2 ^ 10) 1023)). Tai reiškia, kad jis įves 0–5 voltų įvesties įtampas į sveikas skaičius nuo 0 iki 1023. Taigi kiekvienam (5/1024 = 4,9 mV) vienetui.
Čia mes naudosime UN0 A0.
Turime žinoti keletą dalykų.
|
Pirmiausia UNO ADC kanalų numatytoji atskaitos vertė yra 5 V. Tai reiškia, kad ADC konversijai bet kuriame įėjimo kanale galime suteikti maksimalią įėjimo įtampą 5 V. Kadangi kai kurie jutikliai teikia 0–2,5 V įtampą, naudojant 5 V atskaitos tašką gauname mažesnį tikslumą, todėl turime instrukciją, leidžiančią pakeisti šią atskaitos vertę. Taigi norėdami pakeisti pamatinę vertę („analogReference ();“) Kol kas ją paliekame kaip.
Pagal numatytuosius nustatymus gauname didžiausią plokštės ADC skiriamąją gebą, kuri yra 10 bitų, šią skiriamąją gebą galima pakeisti naudojant instrukcijas („analogReadResolution (bits);“). Kai kuriais atvejais šis rezoliucijos pakeitimas gali būti naudingas. Kol kas tai paliekame kaip.
Dabar, jei pirmiau nurodytos sąlygos yra nustatytos pagal numatytuosius nustatymus, mes galime nuskaityti „0“ kanalo ADC reikšmę tiesiogiai iškviesdami funkciją „analogRead (pin);“, čia „pin“ reiškia kaištį, kuriame prijungėme analoginį signalą, šiuo atveju būtų „A0“.
Vertę iš ADC galima paimti į sveiką skaičių kaip „int SENSORVALUE = analogRead (A0); “, Pagal šią instrukciją vertė po ADC įrašoma į skaičių„ SENSORVALUE “.
Dabar pakalbėkime apie SERVO, UNO turi funkciją, leidžiančią mums valdyti servo padėtį, tiesiog nurodant laipsnio vertę. Tarkime, jei norime, kad servo serveris būtų 30, galime tiesiogiai nurodyti vertę programoje. „SERVO“ antraštės byla rūpinasi visais darbo santykio skaičiavimais.
# įtraukti
Servo servo; servo.attach (3); servo.write (laipsniai); |
Pirmasis sakinys reiškia antraštės failą, skirtą valdyti SERVO MOTOR.
Antrasis teiginys yra servo pavadinimas; mes paliekame jį kaip patį servo.
Trečiame sakinyje nurodoma, kur prijungtas servo signalo kaištis; tai turi būti PWM kaištis. Čia mes naudojame PIN3.
Ketvirtasis teiginys pateikia komandas servovariklio padėčiai nustatyti ir yra laipsniais. Jei jam suteikiama 30, servovariklis sukasi 30 laipsnių kampu.
Dabar sg90 gali judėti nuo 0-180 laipsnių, mes turime ADC rezultatą 0-1024
Taigi ADC maždaug šešis kartus viršija SERVO POZICIJĄ. Taigi, padaliję ADC rezultatą iš 6, gausime apytikslę SERVO rankos padėtį.
Tokiu būdu mes turėsime servo variklio paduodamą servo padėties vertę, kuri yra proporcinga lankstumui ar sulenkimui. Kai šis lankstus jutiklis montuojamas ant pirštinės, mes galime valdyti servo padėtį judėdami ranka.