V tomto výučbe budeme vyvíjať obvod pomocou snímača FLEX, Arduino Uno a servomotora. Tento projekt je systém riadenia servomotora, kde je poloha hriadeľa serva určená ohybom alebo ohnutím alebo odchýlkou snímača FLEX.
Najprv si povieme niečo o servomotoroch. Servomotory sa používajú tam, kde je potrebný presný pohyb alebo poloha hriadeľa. Nie sú navrhované pre vysokorýchlostné aplikácie. Sú navrhnuté pre nízku rýchlosť, stredný krútiaci moment a presnú aplikáciu polohy. Tieto motory sa používajú v strojoch s robotickými ramenami, riadení letov a riadiacich systémoch. Servomotory sa používajú v zabudovaných systémoch, ako sú predajné automaty atď.
Servomotory sú k dispozícii v rôznych tvaroch a veľkostiach. Servomotor bude mať hlavne vodiče, jeden je na kladné napätie, druhý na zem a posledný na nastavenie polohy. ČERVENÝ vodič je pripojený k napájaniu, čierny vodič je pripojený k zemi a ŽLTÝ vodič je pripojený k signálu.
Servomotor je kombináciou jednosmerného motora, systému riadenia polohy a prevodov. Poloha hriadeľa jednosmerného motora je nastavovaná riadiacou elektronikou v serve na základe prevádzkového pomeru signálu PWM k vývodu SIGNAL.
Jednoducho povedané, riadiaca elektronika nastaví polohu hriadeľa riadením jednosmerného motora. Tieto údaje týkajúce sa polohy hriadeľa sa posielajú cez kolík SIGNAL. Polohové údaje do riadenia by sa mali odosielať vo forme signálu PWM cez kolík Signal servomotora.
Frekvencia signálu PWM (Pulse Width Modulated) sa môže líšiť v závislosti od typu servomotora. Dôležitá je tu POVINNOSŤ PWM signálu. Na základe tohto POTREBNÉHO POMERU riadiaca elektronika nastaví hriadeľ. Aby sa hriadeľ mohol posunúť na 9o hodín, musí byť ZAPNÚCA DÁVKA 1/18. 1 milisekunda „času ZAPNUTIA“ a 17 milisekúnd „OFF času“ v 18 ms signále.
Aby sa hriadeľ mohol posunúť na 12 hodín, musí byť čas zapnutia signálu 1,5 ms a čas vypnutia 16,5 ms. Tento pomer je dekódovaný riadiacim systémom v seru a na základe neho upravuje polohu.
Tento PWM je tu generovaný pomocou ARDUINO UNO. Zatiaľ teda vieme, že môžeme ovládať hriadeľ servomotora zmenou pracovného pomeru signálu PWM generovaného Arduino Uno. UNO má špeciálnu funkciu, ktorá nám umožňuje poskytovať polohu SERVO bez rušenia signálu PWM. Je však dôležité poznať vzťah pracovná pomer PWM - poloha serva. Viac si o tom povieme v popise.
Teraz si povieme niečo o FLEX SENSOR. Na prepojenie snímača FLEX s ARDUINO UNO urobíme prácu pomocou 8-bitovej funkcie ADC (Analog to Digital Conversion). Senzor FLEX je prevodník, ktorý mení svoj odpor pri zmene tvaru. Snímač FLEX je dlhý 2,2 palca alebo má dĺžku prsta. Je to znázornené na obrázku.
Flex senzor je prevodník, ktorý mení svoj odpor, keď je lineárna plocha ohnutá. Odtiaľ pochádza aj názov ohybného senzora. Jednoducho povedané, odpor svorky snímača sa zvyšuje, keď je ohnutý. Toto je zobrazené na nasledujúcom obrázku.
Táto zmena odporu nemôže urobiť nič dobré, pokiaľ si ich nedokážeme prečítať. Ovládač, ktorý je po ruke, dokáže čítať iba šance na napätie a nič menej, preto použijeme obvod rozdeľovača napätia, pomocou ktorého môžeme odvodiť zmenu odporu ako zmenu napätia.
Delič napätia je odporový obvod a je znázornený na obrázku. V tejto odporovej sieti máme jeden konštantný odpor a druhý premenný odpor. Ako je znázornené na obrázku, R1 je tu konštantný odpor a R2 je snímač FLEX, ktorý funguje ako odpor.
Stred vetvy sa prevedie na meranie. So zmenou R2 máme zmenu vo Vout. Takže s týmto máme napätie, ktoré sa mení s hmotnosťou.
Teraz je dôležité poznamenať, že vstup, ktorý prijme radič na prevod ADC, je len 50µAmp. Tento zaťažovací efekt odporového deliča napätia je dôležitý, pretože prúd odoberaný z Vout deliča napätia zvyšuje zvyšovanie percentuálneho podielu chyby, zatiaľ sa nemusíme starať o zaťažovací efekt.
FLEX SENSOR pri ohnutí sa mení jeho odpor. S týmto meničom pripojeným k obvodu deliča napätia budeme mať meniace sa napätie s FLEX na meniči. Toto premenlivé napätie je FED na jeden z ADC kanálov, budeme mať digitálnu hodnotu súvisiacu s FLEX.
Priradíme túto digitálnu hodnotu k polohe serva, s tým budeme mať ovládanie serva flexom.
Komponenty
Hardvér: Arduino Uno , napájanie (5v), kondenzátor 1000 uF, kondenzátor 100nF (3 kusy), odpor 100KΩ, SERVO MOTOR (SG 90), odpor 220Ω, snímač FLEX.
Softvér: Atmel studio 6.2 alebo Aurdino každú noc.
Schéma zapojenia a vysvetlenie
Schéma zapojenia pre servo riadenie motora pomocou snímača FLEX je znázornený na nižšie obrázku.
Napätie na snímači nie je úplne lineárne; bude to hlučný. Na odfiltrovanie šumu sú kondenzátory umiestnené cez každý odpor v deliacom obvode, ako je to znázornené na obrázku.
Tu vezmeme napätie poskytované deličom (napätie, ktoré predstavuje váhu lineárne) a privedieme ho do jedného z ADC kanálov Arduino UNO. Použijeme na to A0. Po inicializácii ADC budeme mať digitálnu hodnotu predstavujúcu ohnutý senzor. Vezmeme túto hodnotu a porovnáme ju s pozíciou serva.
Aby sa to stalo, musíme v programe ustanoviť niekoľko pokynov a podrobne si o nich povieme nižšie.
ARDUINO má šesť ADC kanálov, ako je znázornené na obrázku. V nich môže byť jeden alebo všetky použité ako vstupy pre analógové napätie. UNO ADC má 10 bitové rozlíšenie (teda celočíselné hodnoty od (0- (2 ^ 10) 1023)). To znamená, že bude mapovať vstupné napätie medzi 0 a 5 voltami na celočíselné hodnoty medzi 0 a 1023. Takže pre každú (5/1024 = 4,9 mV) na jednotku.
Tu použijeme A0 z UNO.
Potrebujeme vedieť niekoľko vecí.
|
Najskôr majú kanály UNO ADC predvolenú referenčnú hodnotu 5 V. To znamená, že môžeme poskytnúť maximálne vstupné napätie 5 V pre prevod ADC na ktoromkoľvek vstupnom kanáli. Pretože niektoré snímače poskytujú napätie od 0 do 2,5 V, pri referenčnej hodnote 5 V dostaneme menšiu presnosť, takže máme inštrukciu, ktorá nám umožňuje zmeniť túto referenčnú hodnotu. Takže pre zmenu referenčnej hodnoty, ktorú máme („analogReference ();“), teraz ju necháme ako.
Ako predvolené nastavenie dostaneme maximálne rozlíšenie ADC na doske, ktoré je 10 bitov, toto rozlíšenie je možné zmeniť pomocou inštrukcie („analogReadResolution (bits);“). Táto zmena rozlíšenia sa môže v niektorých prípadoch hodiť. Zatiaľ to necháme tak.
Teraz, ak sú vyššie uvedené podmienky nastavené na predvolené, môžeme načítať hodnotu z ADC kanálu „0“ priamym volaním funkcie „analogRead (pin);“, tu „pin“ predstavuje pin, kam sme pripojili analógový signál, v tomto prípade to bude „A0“.
Hodnotu z ADC možno vziať do celého čísla ako „int SENSORVALUE = analogRead (A0); ”, Touto inštrukciou sa hodnota po ADC uloží do celého čísla“ SENSORVALUE ”.
Teraz si povieme niečo o SERVO, UNO má funkciu, ktorá nám umožňuje ovládať polohu serva iba zadaním hodnoty stupňa. Povedzme, že keď chceme, aby servo bolo na 30, môžeme priamo reprezentovať hodnotu v programe. Hlavný súbor SERVO sa interne stará o všetky výpočty koeficientu cla.
#include
Servo servo; servo.attach (3); servo.písať (stupne); |
Prvý príkaz predstavuje hlavičkový súbor pre riadenie SERVO MOTORU.
Druhým údajom je pomenovanie servo; necháme to ako servo.
Tretie tvrdenie uvádza, kde je pripojený signálny pin serva; toto musí byť pin PWM. Tu používame PIN3.
Štvrté vyhlásenie dáva príkazy na polohovanie servomotora a je v stupňoch. Ak je zadaná hodnota 30, servomotor sa otáča o 30 stupňov.
Teraz sa sg90 môže pohybovať od 0 do 180 stupňov, máme výsledok ADC 0-1024
ADC je teda približne šesťkrát SERVO POSITION. Takže vydelením výsledku ADC číslom 6 dostaneme približnú pozíciu ruky SERVO.
Vďaka tomu budeme mať hodnotu polohy serva privádzanú do servomotora, ktorá je v pomere k ohybu alebo ohnutiu. Keď je tento ohybový senzor namontovaný na rukavici, môžeme ovládať polohu serva pohybom ruky.