Šioje pamokoje sukursime grandinę naudodami „Force“ jutiklį, „Arduino Uno“ ir servovariklį. Tai bus servo valdymo sistema, kai servo veleno padėtis nustatoma pagal jėgos jutiklyje esantį svorį. Prieš eidami toliau, pakalbėkime apie servo ir kitus komponentus.
„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. Servo varikliai taip pat naudojami kai kuriuose spausdintuvuose ir fakso aparatuose.
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ą.
Kaip parodyta žemiau esančiame paveikslėlyje, norint, kad velenas būtų perkeltas į 9o laikrodį, ĮJUNGIMO RATAS turi būti 1/18 e. 1 sekundės „įjungimo laiko“ sekundės ir 17 milijonų sekundės „išjungimo laiko“ sekundės 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 MOTOR veleną keisdami UNO generuojamo PWM signalo darbo santykį.
Dabar pakalbėkime apie jėgos jutiklį arba svorio jutiklį.
Norėdami susieti „FORCE“ jutiklį su „ARDUINO UNO“, „Arduno uno“ naudosime 8 bitų ADC („Analog to Digital Conversion“) funkciją.
„FORCE“ jutiklis yra keitiklis, kuris keičia savo atsparumą, kai spaudžiamas paviršius. FORCE jutiklis yra įvairių dydžių ir formų.
Mes ketiname naudoti vieną iš pigesnių versijų, nes mums nereikia daug tikslumo. FSR400 yra vienas pigiausių jėgos jutiklių rinkoje. FSR400 paveikslėlis parodytas žemiau esančiame paveikslėlyje.
Dabar svarbu pažymėti, kad FSR 400 yra jautrus išilgai, jėga ar svoris turėtų būti sutelktas ant jutiklio akies vidurio labirinto, kaip parodyta paveikslėlyje.
Jei jėga veikia netinkamu metu, prietaisas gali visam laikui sugadinti.
Kitas svarbus dalykas, kurį reikia žinoti, jutiklis gali valdyti didelio diapazono sroves. Taigi diegdami nepamirškite apie važiavimo sroves. Taip pat jutiklio jėgos riba yra 10 Niutonų. Taigi galime pritaikyti tik 1 kg svorio. Jei naudojamas didesnis nei 1 kg svoris, jutiklis gali parodyti tam tikrus nuokrypius. Jei jis padidėjo daugiau nei 3 kg. jutiklis gali visam laikui sugadinti.
Kaip sakyta anksčiau, šis jutiklis naudojamas slėgio pokyčiams suvokti. Taigi, kai svoris uždedamas ant „FORCE“ jutiklio, atsparumas labai pasikeičia. FS400 atsparumas svoriui parodytas žemiau esančiame grafike:
Kaip parodyta aukščiau esančiame paveikslėlyje, pasipriešinimas tarp dviejų jutiklio kontaktų mažėja, kai padidėja laidumas tarp dviejų jutiklio kontaktų.
Gryno laidininko varža suteikiama:
Kur, p- Laidininko atsparumas
l = laidininko ilgis
A = laidininko plotas.
Dabar apsvarstykite laidininką, kurio pasipriešinimas yra „R“, jei ant viršininko padaromas tam tikras slėgis, dėl slėgio sumažėja laidininko plotas ir padidėja laidininko ilgis. Taigi pagal formulę laidininko varža turėtų padidėti, nes varža R yra atvirkščiai proporcinga plotui ir taip pat tiesiogiai proporcinga ilgiui l.
Taigi naudojant laidininką esant slėgiui ar svoriui, laidininko varža padidėja. Tačiau šis pokytis yra nedidelis, palyginti su bendru pasipriešinimu. Dėl didelio pokyčio daugelis laidininkų yra sukrauti kartu.
Taip atsitinka aukščiau pateiktame paveiksle parodytų jėgos jutiklių viduje. Atidžiai apžiūrėjus, jutiklio viduje galima pamatyti daugybę linijų. Kiekviena iš šių linijų reiškia laidininką. Jutiklio jautrumas yra laidininkų skaičius.
Bet šiuo atveju atsparumas slėgiui mažės, nes čia naudojama medžiaga nėra grynas laidininkas. FSR čia yra tvirtos polimerinės storos plėvelės (PTF) įtaisai. Taigi tai nėra grynos laidinės medžiagos įtaisai. Jie yra pagaminti iš medžiagos, kurios atsparumas sumažėja didėjant jėgai, veikiamai jutiklio paviršiui.
Ši medžiaga rodo charakteristikas, kaip parodyta FSR grafike.
Š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 yra pastovi varža, o R2 yra JĖGOS 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.
Dabar, kai jėga veikia JĖGOS JUTIKLĮ, įtampa daliklio gale keičia šį kaištį, prijungtą prie UNO ADC kanalo, gausime kitokią skaitmeninę vertę nei UNO ADC, kai tik pasikeis jėga jutikliui.
Ši ADC skaitmeninė vertė yra suderinta su PWM signalo darbo santykiu, todėl mes turime SERVO padėties valdymą jutikliui veikiančios jėgos atžvilgiu.
Komponentai
Aparatūra: UNO, maitinimo šaltinis (5v), 1000uF kondensatorius, 100nF kondensatorius (3 vnt.), 100KΩ rezistorius, SERVO MOTOR (SG 90), 220Ω rezistorius, jėgos jutiklis FSR400.
Programinė įranga: „ Atmel studio 6.2“ arba „aurdino“ kas vakarą.
Grandinės schema ir darbo paaiškinimas
Grandinės schema servo variklių valdymo jėga davikliu yra parodyta žemiau paveiksle.
Jutiklio įtampa nėra visiškai tiesinė; tai bus triukšmingas. Norėdami ištrinti triukšmą, kondensatoriai yra išdėstyti per kiekvieną rezistorių 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ų. Po perskaičiavimo imsime tą skaitmeninę vertę (atspindinčią svorį) ir susiesime ją su PWM verte ir pateiksime šį PWM signalą SERVO varikliui.
Taigi, atsižvelgiant į svorį, mes turime PWM vertę, kuri keičia savo darbo santykį, priklausomai nuo skaitmeninės vertės. Didesnė skaitmeninė vertė, tuo didesnis PWM darbo santykis. Taigi esant didesniam PWM signalui, servo velenas turėtų siekti dešinę arba kairę, kaip nurodyta įžangoje.
Jei svoris yra mažesnis, mes turėsime mažesnį PWM muito koeficientą, o pagal įžangos paveikslą servo serveris turėtų pasiekti kraštutinę dešinę.
Tokiu būdu mes turime SERVO padėties valdymą pagal SVORĮ arba JĖGĄ.
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ų.
|
Visų pirma, „Arduino 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 “.
UNO PWM gali būti pasiektas bet kuriame iš kaiščių, kuriuos PCB plokštėje simbolizuoja „~“. UNO yra šeši PWM kanalai. Savo tikslams naudosime PIN3.
analogWrite (3, VALUE); |
Iš aukščiau nurodytos sąlygos mes galime tiesiogiai gauti PWM signalą prie atitinkamo kaiščio. Pirmasis skliausteliuose pateiktas parametras yra PWM signalo kaiščio skaičiaus pasirinkimas. Antrasis parametras skirtas rašymo darbo santykiui.
„Arduino Uno“ PWM reikšmę galima pakeisti nuo 0 iki 255. Kai „0“ yra mažiausia į „255“, didžiausia. Turėdami 255 darbo santykį, gausime 5 V PIN3. Jei muito koeficientas nurodomas kaip 125, PIN3 gausime 2,5 V.
Dabar pakalbėkime apie servovariklio valdymą, „Arduino 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. Čia galite sužinoti daugiau apie servovariklio valdymą su „arduino“.
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į. Taigi mes turime PWM signalą, kurio darbo santykis kinta tiesiškai su SVORIS arba JĖGA. Tai suteikiama servovarikliui, servovariklį galime valdyti jėgos jutikliu.