V tomto tutoriálu budeme vyvíjet obvod využívající snímač síly, Arduino Uno a servomotor. Bude to systém řízení serva, kde je poloha hřídele serva určována hmotností přítomnou na snímači síly. Než půjdeme dále, promluvme si o servu a dalších součástech.
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 také používají v některých tiskárnách a faxech.
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.
Jak je znázorněno na následujícím obrázku, pro posun hřídele na 9o hodin musí být ZAPNUTÍ POMĚR 1 / 18.ie. 1milli sekunda „ON time“ a 17milli sekunda „OFF time“ v 18ms signálu.
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.
Nyní tedy víme, že můžeme ovládat hřídel SERVO MOTOR změnou pracovního poměru signálu PWM generovaného UNO.
Nyní hovoříme o senzoru síly nebo senzoru hmotnosti.
Pro propojení snímače FORCE s ARDUINO UNO použijeme v Arduno uno funkci 8 bit ADC (Analog to Digital Conversion).
Senzor FORCE je převodník, který mění svůj odpor při působení tlaku na povrch. Senzor FORCE je k dispozici v různých velikostech a tvarech.
Budeme používat jednu z levnějších verzí, protože zde nepotřebujeme příliš velkou přesnost. FSR400 je jedním z nejlevnějších snímačů síly na trhu. Obrázek FSR400 je uveden na následujícím obrázku.
Nyní je důležité si uvědomit, že FSR 400 je po celé délce citlivý, síla nebo hmotnost by se měla soustředit na bludiště uprostřed oka senzoru, jak je znázorněno na obrázku.
Pokud by síla působila v nesprávnou dobu, mohlo by dojít k trvalému poškození zařízení.
Další důležitá věc, kterou musíte vědět, že snímač může řídit proudy vysokého rozsahu. Při instalaci mějte na paměti hnací proudy. Také senzor má limit síly, který je 10Newtonů. Můžeme tedy použít pouze 1 kg hmotnosti. Pokud jsou použity hmotnosti vyšší než 1 kg, může senzor vykazovat určité odchylky. Pokud se zvýší o více než 3 kg. senzor by se mohl trvale poškodit.
Jak již bylo řečeno dříve, tento snímač se používá ke snímání změn tlaku. Když je tedy váha aplikována na snímač FORCE, odpor se drasticky změní. Odpor FS400 vůči hmotnosti je uveden v následujícím grafu:
Jak je znázorněno na obrázku výše, odpor mezi dvěma kontakty senzoru klesá s hmotností nebo se zvyšuje vodivost mezi dvěma kontakty senzoru.
Odpor čistého vodiče je dán vztahem:
Kde, p- Odpor vodiče
l = délka vodiče
A = Plocha vodiče.
Nyní zvažte vodič s odporem „R“, pokud na horní část vodiče působí určitý tlak, plocha na vodiči se zmenšuje a v důsledku tlaku se zvyšuje délka vodiče. Podle vzorce by se tedy měl odpor vodiče zvýšit, protože odpor R je nepřímo úměrný ploše a také přímo úměrný délce l.
Takže s tímto pro vodič pod tlakem nebo hmotností se odpor vodiče zvyšuje. Ale tato změna je ve srovnání s celkovým odporem malá. Pro podstatnou změnu je mnoho vodičů naskládáno dohromady.
To se děje uvnitř senzorů síly zobrazených na obrázku výše. Při bližším pohledu je vidět mnoho čar uvnitř snímače. Každá z těchto linií představuje vodič. Citlivost snímače je v číslech vodičů.
Ale v tomto případě bude odpor s tlakem klesat, protože zde použitý materiál není čistý vodič. FSR jsou zde robustní zařízení s polymerovým tlustým filmem (PTF). Nejedná se tedy o zařízení z čistého vodivého materiálu. Jsou vyrobeny z materiálu, který vykazuje pokles odporu se zvýšením síly působící na povrch snímače.
Tento materiál ukazuje vlastnosti, jak je znázorněno v grafu FSR.
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č FORCE, 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í.
Nyní, když je síla aplikována na FORCE SENSOR, napětí na konci rozdělovače změní tento kolík připojený k ADC kanálu UNO, dostaneme jinou digitální hodnotu od ADC UNO, kdykoli se změní síla na senzor.
Tato digitální hodnota ADC je porovnána s pracovním poměrem signálu PWM, takže máme řízení polohy SERVO ve vztahu k síle působící na snímač.
Součásti
Hardware: UNO, napájecí zdroj (5v), kondenzátor 1000uF, kondenzátor 100nF (3 kusy), odpor 100KΩ, SERVO MOTOR (SG 90), odpor 220Ω, snímač síly FSR400.
Software: Atmel studio 6.2 nebo aurdino každou noc.
Schéma zapojení a pracovní vysvětlení
Schéma zapojení pro servo řízení motoru pomocí snímače síly je znázorněn na níže obrázku.
Napětí napříč senzorem není zcela lineární; bude to hlučný. K odfiltrování hluku 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. Po převodu vezmeme tuto digitální hodnotu (představující hmotnost) a spojíme ji s hodnotou PWM a poskytneme tento signál PWM motoru SERVO.
Takže s hmotností máme hodnotu PWM, která mění svůj poměr výkonu v závislosti na digitální hodnotě. Čím vyšší je digitální hodnota, tím vyšší je poměr výkonu PWM. S vyšším signálem PWM s poměrem zátěže by tedy měl hřídel serva dosáhnout zcela vpravo nebo úplně vlevo podle obrázku uvedeného v úvodu.
Pokud je hmotnost nižší, budeme mít nižší poměr výkonu PWM a podle obrázku v úvodu by servo mělo dosáhnout úplně vpravo.
S tímto máme SERVO polohovou kontrolu pomocí WEIGHT nebo FORCE.
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 má ADC kanály Arduino Uno 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 “.
PWM UNO lze dosáhnout na kterémkoli z pinů symbolizovaných jako „~“ na desce plošných spojů. V UNO je šest kanálů PWM. K našemu účelu použijeme PIN3.
analogWrite (3, VALUE); |
Z výše uvedené podmínky můžeme přímo získat signál PWM na odpovídajícím kolíku. První parametr v závorkách slouží k výběru počtu pinů signálu PWM. Druhý parametr je pro poměr zápisu.
Hodnotu PWM Arduino Uno lze změnit od 0 do 255. S „0“ jako nejnižší na „255“ jako nejvyšší. S poměrem cla 255 dostaneme 5V na PIN3. Pokud je poměr cla uveden jako 125, dostaneme 2,5V na PIN3.
Nyní pojďme mluvit o ovládání servomotoru, Arduino 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ě. Zde se můžete dozvědět více o ovládání servomotoru pomocí Arduina.
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. Proto máme signál PWM, jehož poměr výkonu se lineárně mění s VÁHOU nebo SILOU. To je dáno servomotoru, můžeme ovládat servomotor pomocí snímače síly.