V tomto tutoriálu budeme vyvíjet obvod pomocí senzoru FLEX, Arduino Uno a servomotoru. Jedná se o systém servořízení, kde je poloha hřídele serva určována ohybem nebo ohnutím nebo odchylkou senzoru FLEX.
Pojďme si nejprve trochu promluvit o servomotorech. Servomotory se používají tam, kde je potřeba přesného pohybu nebo polohy hřídele. Nejsou navrženy pro vysokorychlostní aplikace. Jsou navrženy pro nízké otáčky, střední točivý moment a přesnou polohu. Tyto motory se používají v robotických ramenech, řízeních letu a řídicích systémech. Servomotory se používají ve vestavěných systémech, jako jsou prodejní automaty atd.
Servomotory jsou k dispozici v různých tvarech a velikostech. Servomotor bude mít hlavně vodiče, jeden je pro kladné napětí, druhý pro zem a poslední pro nastavení polohy. ČERVENÝ vodič je připojen k napájení, černý vodič je připojen k zemi a ŽLUTÝ vodič k signálu.
Servomotor je kombinací stejnosměrného motoru, systému řízení polohy, převodů. Poloha hřídele stejnosměrného motoru je nastavena řídicí elektronikou v servu na základě pracovního poměru signálu PWM k signálu SIGNAL.
Řídicí elektronika jednoduše nastaví polohu hřídele ovládáním stejnosměrného motoru. Tato data týkající se polohy hřídele se odesílají přes kolík SIGNAL. Údaje o poloze do řízení by měly být zasílány ve formě signálu PWM přes pin Signal servomotoru.
Frekvence signálu PWM (Pulse Width Modulated) se může lišit podle typu servomotoru. Důležitá je zde ZÁVAŽNOST PWM signálu. Na základě tohoto POTŘEBNÍHO POMĚRU nastaví řídicí elektronika hřídel. Aby se hřídel posunul na 9o hodin, musí být ZAPNUTÍ POMĚR 1 / 18.ie. 1 milisekunda „doby zapnutí“ a 17 milisekund „doby vypnutí“ v signálu 18 ms.
Aby se hřídel posunul na 12o hodin, musí být doba zapnutí signálu 1,5 ms a doba vypnutí by měla být 16,5 ms. Tento poměr je dekódován řídicím systémem v servu a podle něj upravuje polohu.
Tento PWM zde je generován pomocí ARDUINO UNO. Zatím tedy víme, že můžeme řídit hřídel servomotoru změnou pracovního poměru signálu PWM generovaného Arduino Uno. UNO má speciální funkci, která nám umožňuje poskytovat polohu SERVO bez narušení signálu PWM. Je však důležité znát vztah PWM pracovní poměr - poloha serva. Více si o tom povíme v popisu.
Nyní si promluvme o FLEX SENSORU. Abychom mohli propojit snímač FLEX s ARDUINO UNO, použijeme k provedení práce 8bitovou funkci ADC (analogově-digitální převod). Senzor FLEX je převodník, který mění svůj odpor při změně tvaru. Snímač FLEX je dlouhý 2,2 palce nebo má délku prstu. Je to znázorněno na obrázku.
Flex senzor je snímač, který mění svůj odpor, když je lineární povrch ohnutý. Odtud název flex senzor. Jednoduše řečeno, odpor svorky senzoru se zvyšuje, když je ohnutý. To je znázorněno na následujícím obrázku.
Tato změna odporu nemůže udělat nic dobrého, pokud si je nebudeme moci přečíst. Řadič po ruce může číst pouze šance na napětí a nic méně, k tomu použijeme obvod děliče napětí, s nímž můžeme odvodit změnu odporu jako změnu napětí.
Dělič napětí je odporový obvod a je znázorněn na obrázku. V této odporové síti máme jeden konstantní odpor a další proměnný odpor. Jak je znázorněno na obrázku, R1 je zde konstantní odpor a R2 je snímač FLEX, který funguje jako odpor.
Střed větve se převede na měření. Se změnou R2 máme změnu ve Voutu. Takže s tímto máme napětí, které se mění s hmotností.
Nyní je důležité si uvědomit, že vstup přijímaný řadičem pro převod ADC je tak nízký jako 50µAmp. Tento zatěžovací efekt odporového děliče napětí je důležitý, protože proud odebíraný z Vout děliče napětí zvyšuje procentuální zvýšení chyb, zatím si nemusíme dělat starosti s efektem načítání.
FLEX SENSOR při ohnutí se mění jeho odpor. S tímto převodníkem připojeným k obvodu děliče napětí budeme mít měnící se napětí s FLEX na převodníku. Toto proměnné napětí je FED pro jeden z kanálů ADC, budeme mít digitální hodnotu týkající se FLEX.
Tuto digitální hodnotu spojíme s pozicí serva, díky čemuž budeme mít ovládání serva flexem.
Součásti
Hardware: Arduino Uno , napájecí zdroj (5v), kondenzátor 1000 uF, kondenzátor 100nF (3 kusy), rezistor 100KΩ, SERVO MOTOR (SG 90), rezistor 220Ω, snímač FLEX.
Software: Atmel studio 6.2 nebo Aurdino každou noc.
Schéma zapojení a vysvětlení
Schéma zapojení pro servo řízení motoru pomocí snímače FLEX je znázorněn na níže obrázku.
Napětí napříč senzorem není zcela lineární; bude to hlučný. K odfiltrování šumu jsou kondenzátory umístěny napříč každým odporem v rozdělovacím obvodu, jak je znázorněno na obrázku.
Zde vezmeme napětí poskytované děličem (napětí, které lineárně představuje váhu) a přivedeme jej do jednoho z ADC kanálů Arduino UNO. K tomu použijeme A0. Po inicializaci ADC budeme mít digitální hodnotu představující ohnutý senzor. Vezmeme tuto hodnotu a porovnáme ji s pozicí serva.
Aby se to stalo, musíme v programu vytvořit několik instrukcí a podrobně si o nich povíme níže.
ARDUINO má šest ADC kanálů, jak ukazuje obrázek. V nich lze jeden nebo všechny použít jako vstupy pro analogové napětí. UNO ADC má 10 bitové rozlišení (tedy celočíselné hodnoty od (0- (2 ^ 10) 1023)). To znamená, že bude mapovat vstupní napětí mezi 0 a 5 volty na celočíselné hodnoty mezi 0 a 1023. Takže pro každou (5/1024 = 4,9 mV) na jednotku.
Zde použijeme A0 UNO.
Potřebujeme vědět pár věcí.
|
Nejprve mají kanály UNO ADC výchozí referenční hodnotu 5V. To znamená, že můžeme poskytnout maximální vstupní napětí 5V pro převod ADC na jakémkoli vstupním kanálu. Jelikož některé senzory poskytují napětí od 0 do 2,5 V, s referencí 5 V získáme menší přesnost, takže máme instrukci, která nám umožňuje změnit tuto referenční hodnotu. Takže pro změnu referenční hodnoty máme („analogReference ();“) Prozatím to necháme jako.
Ve výchozím nastavení dostaneme maximální rozlišení ADC desky, které je 10 bitů, toto rozlišení lze změnit pomocí instrukce („analogReadResolution (bits);“). Tato změna rozlišení se může v některých případech hodit. Prozatím to necháme tak.
Nyní, pokud jsou výše uvedené podmínky nastaveny na výchozí hodnoty, můžeme načíst hodnotu z ADC kanálu „0“ přímým voláním funkce „analogRead (pin);“, zde „pin“ představuje pin, kde jsme připojili analogový signál, v tomto případě to bude „A0“.
Hodnotu z ADC lze vzít do celého čísla jako „int SENSORVALUE = analogRead (A0); ”, Touto instrukcí se hodnota po ADC uloží do celého čísla„ SENSORVALUE “.
Nyní pojďme mluvit o SERVO, UNO má funkci, která nám umožňuje ovládat polohu serva pouhým zadáním hodnoty stupně. Řekněme, že pokud chceme, aby servo bylo na 30, můžeme přímo představovat hodnotu v programu. Soubor záhlaví SERVO se interně stará o všechny výpočty poměru daně.
#zahrnout
Servo servo; servo.attach (3); servo.write (stupně); |
První příkaz představuje hlavičkový soubor pro ovládání SERVO MOTORU.
Druhým výrokem je pojmenování serva; necháme to jako servo samo.
Třetí prohlášení uvádí, kde je připojen signální kolík serva; to musí být pin PWM. Zde používáme PIN3.
Čtvrtý příkaz dává příkazy pro polohování servomotoru a je ve stupních. Pokud je zadáno 30, servomotor se otáčí o 30 stupňů.
Nyní se sg90 může pohybovat od 0 do 180 stupňů, máme výsledek ADC 0-1024
ADC je tedy přibližně šestkrát SERVO POSITION. Vydělením výsledku ADC číslem 6 tedy získáme přibližnou pozici ruky SERVO.
Díky tomu budeme mít servomotor přivedenou hodnotu polohy serva, která je v poměru k ohnutí nebo ohnutí. Když je tento flex senzor namontovaný na rukavici, můžeme ovládat polohu serva pohybem ruky.