U ovom uputstvu ćemo razviti sklop koji koristi FLEX senzor, Arduino Uno i servo motor. Ovaj projekt je servo upravljački sustav gdje se položaj osovine servo pogona određuje savijanjem ili savijanjem ili odstupanjem FLEX senzora.
Prvo razgovarajmo malo o servo motorima. Servo motori se koriste tamo gdje postoji potreba za preciznim kretanjem ili položajem osovine. Nisu predloženi za velike brzine. Oni su predloženi za malu brzinu, srednji zakretni moment i točnu primjenu položaja. Ovi se motori koriste u robotskim strojevima za upravljanje rukama, kontrolama leta i sustavima upravljanja. Servo motori se koriste u ugrađenim sustavima poput automata itd.
Servo motori su dostupni u različitim oblicima i veličinama. Servo motor će uglavnom imati žice, jedna je za pozitivni napon, druga je za masu, a zadnja za podešavanje položaja. CRVENA žica spojena je na napajanje, crna žica spojena na masu, a ŽUTA žica spojena na signal.
Servo motor je kombinacija istosmjernog motora, sustava za kontrolu položaja, stupnjeva prijenosa. Položaj osovine istosmjernog motora podešava se upravljačkom elektronikom u servo kolu, na temelju omjera radne snage PWM signala SIGNAL pin.
Jednostavno rečeno, upravljačka elektronika podešava položaj vratila upravljajući istosmjernim motorom. Ovi podaci o položaju osovine šalju se kroz SIGNAL iglu. Podaci o položaju upravljaču trebaju se slati u obliku PWM signala kroz signalnu iglu servo motora.
Učestalost PWM (Pulse Width Modulated) signala može se razlikovati ovisno o vrsti servo motora. Ovdje je najvažniji ODNOS DUŽNOSTI PWM signala. Na temelju ovog DUŽNOG ODNOSA upravljačka elektronika podešava osovinu. Da bi se osovina pomaknula na sat od 9 °, ODNOS UKLJUČIVANJA mora biti 1 / 18.ie. 1 milli sekunda "vremena uključivanja" i 17 mili sekundi sekunde "vremena isključenja" u signalu od 18 ms.

Da bi se osovina pomaknula na sat od 12 °, vrijeme uključivanja signala mora biti 1,5 ms, a vrijeme isključivanja 16,5 ms. Taj omjer dekodira upravljački sustav u servo sustavu i na temelju njega podešava položaj.
Ovaj PWM ovdje generiran je pomoću ARDUINO UNO. Dakle, za sada to znamo, možemo upravljati osovinom servo motora mijenjajući omjer radne snage PWM signala koji generira Arduino Uno. UNO ima posebnu funkciju koja nam omogućuje da pružimo položaj SERVO-a bez ometanja PWM-signala. Međutim, važno je znati omjer radne snage PWM i odnos položaja servo. O tome ćemo više u opisu.
Sada razgovarajmo o FLEX SENZORU. Za povezivanje FLEX senzora s ARDUINO UNO, koristit ćemo 8-bitnu značajku ADC (analogna u digitalnu konverziju) za obavljanje posla. FLEX senzor je pretvarač koji mijenja svoj otpor kad se promijeni njegov oblik. FLEX senzor dugačak je 2,2 inča ili duljine prsta. To je prikazano na slici.

Flex senzor je pretvarač koji mijenja svoj otpor kada je linearna površina savijena. Otuda i naziv flex senzor. Jednostavno rečeno, otpor na priključku senzora povećava se kada je savijen. To je prikazano na donjoj slici.

Ova promjena otpora ne može učiniti ništa ako ih ne pročitamo. Priručni regulator može očitati šanse samo u naponu i ništa manje, zato ćemo koristiti krug djelitelja napona, s tim da promjenu otpora možemo izvesti s promjenom napona.
Razdjelnik napona je otporni krug i prikazan je na slici. U ovoj otpornoj mreži imamo jedan stalni otpor i drugi promjenjivi otpor. Kao što je prikazano na slici, R1 je ovdje konstantni otpor, a R2 je FLEX senzor koji djeluje kao otpor.
Srednja točka grane uzima se za mjerenje. S promjenom R2, imamo promjenu na Voutu. Tako imamo napon koji se mijenja s težinom.

Ovdje je važno napomenuti da je ulazni signal regulatora za ADC konverziju nizak od 50µAmp. Ovaj učinak opterećenja djelitelja napona zasnovan na otporu važan je jer struja povučena iz Vout napona-djelitelja povećava postotak pogreške i povećava se za sada ne moramo brinuti o učinku opterećenja.
FLEX SENZOR kada se savije promijeni njegov otpor. S ovim pretvaračem spojenim na krug djelitelja napona, imat ćemo promjenjivi napon s FLEX-om na pretvaraču. Ovaj promjenjivi napon je FED na jedan od ADC kanala, imat ćemo digitalnu vrijednost koja se odnosi na FLEX.
Uskladit ćemo ovu digitalnu vrijednost sa položajem serva, s tim ćemo imati servo kontrolu fleksom.
Komponente
Hardver: Arduino Uno , napajanje (5v), kondenzator 1000 uF, kondenzator 100nF (3 komada), otpornik 100KΩ, SERVO MOTOR (SG 90), otpor 220Ω, FLEX senzor.
Softver: Atmel studio 6.2 ili Aurdino svake noći.
Kružni dijagram i objašnjenje
Shema sklopa za upravljanje servo motorom pomoću FLEX senzora prikazana je na donjoj slici.

Napon na senzoru nije potpuno linearan; bit će bučna. Da bi filtrirali buku, kondenzatori se postavljaju preko svakog otpora u djeliteljskom krugu, kao što je prikazano na slici.
Ovdje ćemo uzeti napon koji pruža razdjelnik (napon koji linearno predstavlja težinu) i napojiti ga u jedan od ADC kanala Arduino UNO. Za to ćemo upotrijebiti A0. Nakon inicijalizacije ADC-a imat ćemo digitalnu vrijednost koja predstavlja savijeni senzor. Uzet ćemo ovu vrijednost i uskladiti je sa servo položajem.
Da bi se to dogodilo moramo uspostaviti nekoliko uputa u programu i o njima ćemo detaljno govoriti u nastavku.
ARDUINO ima šest ADC kanala, kao što je prikazano na slici. U njima se bilo koji ili jedan od njih mogu koristiti kao ulazi za analogni napon. UNO ADC ima 10-bitnu razlučivost (dakle, cjelobrojne vrijednosti iz (0- (2 ^ 10) 1023)). To znači da će preslikati ulazne napone između 0 i 5 volti u cjelobrojne vrijednosti između 0 i 1023. Dakle, za svaki (5/1024 = 4,9 mV) po jedinici.
Ovdje ćemo koristiti A0 UNO-a.
Moramo znati nekoliko stvari.
|
Prije svega UNO ADC kanali imaju zadanu referentnu vrijednost od 5V. To znači da možemo dati maksimalni ulazni napon od 5V za ADC pretvorbu na bilo kojem ulaznom kanalu. Budući da neki senzori pružaju napone od 0-2,5V, s referencom od 5V dobivamo manju točnost, pa imamo uputu koja nam omogućuje promjenu ove referentne vrijednosti. Dakle, za promjenu referentne vrijednosti imamo (“analogReference ();”) Za sada je ostavljamo kao.
Prema zadanim postavkama dobivamo maksimalnu razlučivost ADC ploče, koja iznosi 10 bita, ova se razlučivost može mijenjati pomoću uputa („analogReadResolution (bitovi);“). Ova promjena rezolucije može dobro doći u nekim slučajevima. Za sada to ostavljamo kao.
Ako su gornji uvjeti postavljeni na zadane, možemo očitati vrijednost iz ADC-a kanala '0' izravnim pozivom funkcije "analogRead (pin);", ovdje "pin" predstavlja pin na koji smo spojili analogni signal, u ovom slučaju to je bio bi "A0".
Vrijednost iz ADC-a može se pretvoriti u cijeli broj kao „int SENSORVALUE = analogRead (A0); ", Ovom se uputom vrijednost nakon ADC-a pohranjuje u cijeli broj" SENSORVALUE ".
Sada razgovarajmo o SERVO-u, UNO ima značajku koja nam omogućuje upravljanje položajem servo-a samo davanjem vrijednosti stupnja. Recimo ako želimo da servo bude na 30, možemo izravno predstavljati vrijednost u programu. Datoteka zaglavlja SERVO interno se brine o svim izračunima omjera.
|
#include
Servo servo; servo.attach (3); servo.write (stupnjevi); |
Prva izjava predstavlja datoteku zaglavlja za upravljanje SERVO MOTOROM.
Druga izjava je imenovanje serva; ostavljamo kao sam servo.
Treća izjava navodi gdje je spojen servo signalni klin; ovo mora biti PWM pin. Ovdje koristimo PIN3.
Četvrta izjava daje naredbe za pozicioniranje servo motora i izražena je u stupnjevima. Ako mu se da 30, servo motor se okreće za 30 stupnjeva.
Sada se sg90 može pomicati od 0-180 stupnjeva, imamo ADC rezultat 0-1024
Dakle, ADC je približno šest puta veći od SERVO POLOŽAJA. Dakle, dijeljenjem rezultata ADC-a sa 6 dobit ćemo približni položaj SERVO ruke.
Uz to ćemo dobiti vrijednost položaja servo motora na servo motor, koja je proporcionalna savijanju ili savijanju. Kada je ovaj fleks senzor postavljen na rukavicu, možemo upravljati položajem servoa kretanjem ruke.
