V tej vadnici bomo razvili vezje z uporabo senzorja sile, Arduino Uno in servo motorja. To bo sistem servo nadzora, pri katerem se položaj servo gredi določa glede na težo, prisotno na senzorju sile. Pred nadaljevanjem se pogovorimo o servo in drugih komponentah.
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 tudi v nekaterih tiskalnikih in telefaksih.
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.
Kot je prikazano na spodnji sliki, mora biti gred, ki jo želite premakniti na uro 9 °, PRIMER VKLOPA 1 / 18.ie. 1 milli sekunda 'ON time' in 17milli second 'OFF time' v 18ms signalu.
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.
Za zdaj to vemo, da lahko nadzorujemo gred SERVO MOTOR s spreminjanjem razmerja obratovanja PWM signala, ki ga generira UNO.
Zdaj pa pogovorimo o senzorju sile ali senzorju teže.
Za povezavo senzorja FORCE z ARDUINO UNO bomo v arduno uno uporabili 8-bitno funkcijo ADC (analogna v digitalno pretvorbo).
Senzor FORCE je pretvornik, ki spremeni svoj upor ob pritisku na površino. Senzor FORCE je na voljo v različnih velikostih in oblikah.
Uporabili bomo eno cenejših različic, ker tu ne potrebujemo veliko natančnosti. FSR400 je eden najcenejših senzorjev sile na trgu. Slika FSR400 je prikazana na spodnji sliki.
Zdaj je pomembno opozoriti, da je FSR 400 po dolžini občutljiv, silo ali težo je treba osredotočiti na labirint na sredini očesa senzorja, kot je prikazano na sliki.
Če sila deluje ob napačnem času, lahko naprava trajno poškoduje.
Druga pomembna stvar, ki jo je treba vedeti, je, da lahko senzor poganja tokove velikega obsega. Zato pri namestitvi ne pozabite na pogonske tokove. Tudi senzor ima omejitev sile, ki je 10Newtonov. Tako lahko uporabimo le 1 kg teže. Če uporabimo utež večjo od 1 kg, lahko senzor pokaže neka odstopanja. Če se poveča za več kot 3 kg. senzor se lahko trajno poškoduje.
Kot smo že povedali, se ta senzor uporablja za zaznavanje sprememb tlaka. Torej, ko se teža nanese na senzor FORCE, se upor močno spremeni. Odpornost FS400 proti teži je prikazana na spodnjem grafu:
Kot je prikazano na zgornji sliki, se upor med obema kontaktoma senzorja zmanjša s težo ali pa se poveča prevodnost med dvema kontaktoma senzorja.
Upor čistega vodnika dobimo z:
Kje, p- Upornost vodnika
l = dolžina vodnika
A = površina vodnika.
Zdaj razmislite o vodniku z uporom "R". Če na njegov vodnik pritisnete nekaj, se površina na vodniku zmanjša in dolžina vodnika zaradi tlaka naraste. Torej po formuli naj se upor prevodnika poveča, saj je upor R obratno sorazmeren s površino in tudi neposredno sorazmeren z dolžino l
Torej se s tem za prevodnik pod pritiskom ali težo upor prevodnika poveča. Toda ta sprememba je majhna v primerjavi s splošnim uporom. Za precejšnjo spremembo je veliko vodnikov zloženih skupaj.
To se dogaja znotraj senzorjev sile, prikazanih na zgornji sliki. Ob natančnem pogledu lahko v senzorju opazimo veliko vrstic. Vsaka od teh vrstic predstavlja vodnika. Občutljivost senzorja je v številu vodnikov.
Toda v tem primeru se bo upor s pritiskom zmanjšal, ker tukaj uporabljeni material ni čisti vodnik. Tu so FSR robustne naprave iz polimernega debelega filma (PTF). To torej niso naprave iz čistega prevodnika. Ti so sestavljeni iz materiala, ki kaže zmanjšanje upora s povečanjem sile, ki deluje na površino senzorja.
Ta material prikazuje značilnosti, kot so prikazane na grafu FSR.
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 FORCE 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.
Zdaj, ko sila deluje na SENZOR SILE, napetost na koncu delilnika spremeni ta zatič, ko je povezan z ADC kanalom UNO, dobili bomo drugačno digitalno vrednost od ADC UNO, kadar koli se bo sila na senzorju spremenila.
Ta digitalna vrednost ADC se ujema z delovnim razmerjem signala PWM, zato imamo nadzor položaja SERVO glede na silo, ki deluje na senzor.
Komponente
Strojna oprema: UNO, napajalnik (5v), kondenzator 1000uF, kondenzator 100nF (3 kosi), upor 100KΩ, SERVO MOTOR (SG 90), upor 220Ω, senzor sile FSR400.
Programska oprema: Atmel studio 6.2 ali aurdino zvečer.
Shema vezja in delovna razlaga
Shema vezja za upravljanje servo motorja s senzorjem sile 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 napotili v enega od ADC kanalov Arduino Uno. Po pretvorbi bomo vzeli to digitalno vrednost (ki predstavlja težo) in jo povezali z vrednostjo PWM ter ta signal PWM oddali motorju SERVO.
Torej imamo pri teži vrednost PWM, ki spreminja razmerje dajatev glede na digitalno vrednost. Višja kot je digitalna vrednost, višje je razmerje dajatev PWM. Torej, pri signalu PWM z višjim razmerjem obratovanja mora servo gred doseči skrajno desno ali skrajno levo, kot je prikazano v uvodu.
Če je teža manjša, bomo imeli nižje razmerje PWM in glede na uvodno sliko naj servo doseže skrajno desno.
S tem imamo SERVO nadzor položaja s TEŽO ali SILO.
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 kanali Arduino Uno ADC 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 ".
PWM UNO je mogoče doseči na katerem koli zatiču, ki je na plošči PCB simboliziran kot »~«. V UNO je šest kanalov PWM. Za svoj namen bomo uporabili PIN3.
analogWrite (3, VALUE); |
Iz zgornjega pogoja lahko signal PWM neposredno dobimo na ustreznem zatiču. Prvi parameter v oklepajih je za izbiro številke pina PWM signala. Drugi parameter je za zapisovanje razmerja dajatev.
Vrednost PWM za Arduino Uno je mogoče spremeniti z 0 na 255. Z “0” kot najnižjo na “255” kot najvišjo. Z 255 kot razmerjem dajatev bomo pri PIN3 dobili 5V. Če je razmerje dajatev podano kot 125, bomo pri PIN3 dobili 2,5 V.
Zdaj pa se pogovorimo o upravljanju servo motorja, Arduino Uno ima funkcijo, ki nam omogoča nadzor položaja servo motorja tako, da samo damo vrednost stopinje. 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. Več o upravljanju servo motorja z arduinom lahko izveste tukaj.
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. Zato imamo signal PWM, katerega razmerje obratovanja se linearno spreminja z TEŽO ali SILO. Ker je podan servo motorju, lahko servo motor nadzorujemo s senzorjem sile.