Sa tutorial na ito ay bubuo kami ng isang circuit gamit ang Force sensor, Arduino Uno at isang servo motor. Ito ay magiging isang sistema ng pagkontrol ng servo kung saan ang posisyon ng servo shaft ay natutukoy ng timbang na naroroon sa sensor ng puwersa. Bago magpunta sa karagdagang pag-usapan natin ang tungkol sa servo at iba pang mga bahagi.
Ginagamit ang mga Servo Motors kung saan kinakailangan ng tumpak na paggalaw o posisyon ng baras. Hindi ito iminungkahi para sa mga application ng mataas na bilis. Ang mga ito ay iminungkahi para sa mababang bilis, katamtamang metalikang kuwintas at tamang aplikasyon ng posisyon. Ang mga motor na ito ay ginagamit sa mga robotic arm machine, flight control at control system. Ginagamit din ang mga servo motor sa ilan sa mga printer at fax machine.
Magagamit ang mga servo motor sa iba't ibang mga hugis at sukat. Ang isang motor na servo ay magkakaroon ng higit na may mga wire, ang isa ay para sa positibong boltahe isa pa ay para sa lupa at ang huli ay para sa setting ng posisyon. Ang RED wire ay konektado sa lakas, ang Black wire ay konektado sa ground at ang YELLOW wire ay konektado sa signal.
Ang isang servo motor ay isang kumbinasyon ng DC motor, posisyon control system, gears. Ang posisyon ng baras ng motor na DC ay nababagay ng control electronics sa servo, batay sa duty ratio ng PWM signal na SIGNAL pin. Sa pagsasalita lamang ng control electronics ayusin ang posisyon ng baras sa pamamagitan ng pagkontrol sa DC motor. Ang data na ito tungkol sa posisyon ng baras ay ipinadala sa pamamagitan ng SIGNAL pin. Ang data ng posisyon sa kontrol ay dapat ipadala sa anyo ng PWM signal sa pamamagitan ng Signal pin ng servo motor.
Ang dalas ng PWM (Pulse Width Modulated) signal ay maaaring magkakaiba batay sa uri ng servo motor. Ang mahalagang bagay dito ay ang DUTY RATIO ng PWM signal. Batay sa TUNGKOL SA DUTY na ito, ang electronics ng control ayusin ang baras.
Tulad ng ipinakita sa figure sa ibaba, para sa shaft na ilipat sa 9o na orasan ang TURN ON RATION ay dapat na 1 / 18.ie. 1milli segundo ng 'ON time' at 17milli segundo ng 'OFF time' sa isang 18ms signal.
Para sa shaft na ilipat sa 12o na orasan ang ON time ng signal ay dapat na 1.5ms at ang OFF na oras ay dapat na 16.5ms.
Ang ratio na ito ay na-decode ng control system sa servo at inaayos nito ang posisyon batay dito.
Ang PWM na ito dito ay nabuo sa pamamagitan ng paggamit ng ARDUINO UNO.
Kaya't sa ngayon alam namin iyon, makokontrol namin ang shaft ng SERVO MOTOR sa pamamagitan ng pag-iiba sa duty ratio ng PWM signal na nabuo ng UNO.
Ngayon pag-usapan natin ang tungkol sa force sensor o weight sensor.
Upang mai-interface ang isang FORCE sensor na may ARDUINO UNO, gagamitin namin ang 8 bit ADC (Analog sa Digital Conversion) na tampok sa arduno uno.
Ang isang FORCE sensor ay isang transducer na nagbabago ng paglaban nito kapag inilapat ang presyon sa ibabaw. Magagamit ang sensor ng FORCE sa iba't ibang laki at hugis.
Gagamitin namin ang isa sa mga mas murang bersyon dahil hindi namin kailangan ng kawastuhan dito. Ang FSR400 ay isa sa pinakamurang lakas ng sensor sa merkado. Ang larawan ng FSR400 ay ipinapakita sa ibaba ng pigura.
Ngayon mahalagang tandaan na ang FSR 400 ay sensitibo sa haba, ang puwersa o bigat ay dapat na nakatuon sa maze sa gitna ng mata ng sensor, tulad ng ipinakita sa pigura.
Kung ang puwersa ay inilapat sa mga maling oras maaaring permanenteng makapinsala ang aparato.
Ang isa pang mahalagang bagay na dapat malaman na, ang sensor ay maaaring humimok ng mga alon ng mataas na saklaw. Kaya't tandaan ang mga alon sa pagmamaneho habang nag-i-install. Gayundin ang sensor ay may isang limitasyon sa puwersa na 10Newtons. Kaya 1Kg lang ng bigat ang mailalapat namin. Kung ang mga timbang ay mas mataas kaysa sa 1Kg na inilapat ang sensor ay maaaring magpakita ng ilang mga paglihis. Kung nadagdagan ito ng higit sa 3Kg. ang sensor ay maaaring permanenteng makapinsala.
Tulad ng sinabi kanina, ang sensor na ito ay ginagamit upang maunawaan ang mga pagbabago sa presyon. Kaya't kapag ang bigat ay inilapat sa tuktok ng FORCE sensor, ang paglaban ay nabago nang husto. Ang paglaban ng FS400 sa bigat ay ipinapakita sa ibaba ng graph:
Tulad ng ipinakita sa itaas na pigura, ang paglaban sa pagitan ng dalawang contact ng sensor ay nababawasan ng bigat o pagtaas ng conductance sa pagitan ng dalawang contact ng sensor.
Ang paglaban ng isang purong conductor ay ibinibigay ng:
Kung saan, p- Paglaban ng konduktor
l = Ang haba ng conductor
A = Lugar ng conductor.
Ngayon isaalang-alang ang isang konduktor na may paglaban na "R", kung ang ilang presyon ay inilapat sa tuktok ng conductor, ang lugar sa conductor ay bumababa at ang haba ng conductor ay tumataas bilang isang resulta ng presyon. Kaya't sa pamamagitan ng pormula ang paglaban ng conductor ay dapat na tumaas, dahil ang resistensya R ay baligtad na proporsyonal sa lugar at direktang proporsyonal din sa haba l.
Kaya kasama nito para sa isang konduktor sa ilalim ng presyon o bigat ang pagtaas ng paglaban ng conductor. Ngunit ang pagbabagong ito ay maliit kumpara sa pangkalahatang paglaban. Para sa isang malaking pagbabago ng maraming mga conductor ay nakasalansan nang magkasama.
Ito ang nangyayari sa loob ng Force Sensors na ipinakita sa itaas na pigura. Sa pagtingin nang maigi, makikita ang maraming mga linya sa loob ng sensor. Ang bawat isa sa mga linyang ito ay kumakatawan sa isang conductor. Ang pagkasensitibo ng sensor ay nasa mga bilang ng conductor.
Ngunit sa kasong ito, ang pagtutol ay mababawasan ng presyon dahil ang materyal na ginamit dito ay hindi isang purong conductor. Ang FSR dito ay mga matatag na aparatong makapal na polymer film (PTF). Kaya't ito ay hindi purong mga aparato ng materyal na conductor. Ang mga ito ay binubuo ng isang materyal, na nagpapakita ng pagbawas ng paglaban na may pagtaas ng puwersa na inilapat sa ibabaw ng sensor.
Ipinapakita ng materyal na ito ang mga katangian tulad ng ipinakita sa grap ng FSR.
Ang pagbabago sa pagtutol na ito ay hindi makakabuti kung hindi natin ito mababasa. Mababasa lamang ng taga-kontrol ang mga pagkakataon sa boltahe at walang mas kaunti, para dito gagamit kami ng voltage divider circuit, na makukuha natin ang pagbabago ng paglaban bilang pagbabago ng boltahe.
Ang boltahe divider ay isang resistive circuit at ipinakita sa pigura. Sa resistive network na ito mayroon kaming isang pare-pareho na paglaban at iba pang variable na paglaban. Tulad ng ipinakita sa pigura, ang R1 dito ay isang pare-pareho ang paglaban at ang R2 ay FORCE sensor na kumikilos bilang isang paglaban.
Ang midpoint ng sangay ay kinuha sa pagsukat. Sa pagbabago ng R2, mayroon kaming pagbabago sa Vout. Kaya sa ito mayroon kaming isang boltahe na nagbabago sa timbang.
Ngayon ang mahalagang bagay na dapat tandaan dito ay, ang input na kinunan ng controller para sa conversion ng ADC ay kasing baba ng 50µAmp. Ang epekto ng paglo-load ng dividerang batay sa resistensya ay mahalaga dahil ang kasalukuyang iginuhit mula sa Vout ng boltahe na divider ay nagdaragdag ng pagtaas ng porsyento ng error, sa ngayon hindi namin kailangang mag-alala tungkol sa pag-load ng epekto.
Ngayon kapag ang puwersa ay inilapat sa FORCE SENSOR, ang boltahe sa divider end ay binabago ang pin na ito bilang konektado sa ADC channel ng UNO, makakakuha kami ng ibang digital na halaga mula sa ADC ng UNO, tuwing puwersa sa mga pagbabago ng sensor.
Ang halaga ng digital na ADC na ito ay naitugma sa ratio ng tungkulin ng PWM signal, kaya mayroon kaming kontrol sa posisyon ng SERVO na may kaugnayan sa puwersa na inilapat sa sensor.
Mga Bahagi
Hardware: UNO, power supply (5v), 1000uF capacitor, 100nF capacitor (3 piraso), 100KΩ resistor, SERVO MOTOR (SG 90), 220Ω resistor, FSR400 force sensor.
Software: Atmel studio 6.2 o aurdino gabi-gabi.
Circuit Diagram at Paggawa ng Paliwanag
Ang diagram ng circuit para sa kontrol ng servo motor sa pamamagitan ng force sensor ay ipinapakita sa ibaba ng pigura.
Ang boltahe sa kabuuan ng sensor ay hindi ganap na guhit; magiging maingay ito. Upang ma-filter ang ingay ng isang capacitor ay inilalagay sa bawat risistor sa divider circuit tulad ng ipinakita sa pigura.
Dito kukuha kami ng boltahe na ibinigay ng divider (boltahe na kumakatawan sa timbang nang linear) at pakainin ito sa isa sa mga ADC channel ng Arduino Uno. Pagkatapos ng conversion ay kukuha kami ng digital na halagang iyon (kumakatawan sa timbang) at maiugnay ito sa halagang PWM at ibigay ang signal na PWM na ito sa SERVO motor.
Kaya't sa bigat mayroon kaming halaga na PWM na nagbabago sa ratio ng tungkulin depende sa digital na halaga. Mas mataas ang halagang digital na mas mataas ang ratio ng tungkulin ng PWM. Kaya't may mas mataas na signal ng ratio ng PWM na ratio, ang servo shaft ay dapat na maabot ang dulong kanan o dulong kaliwa ayon sa figure na ibinigay sa pagpapakilala.
Kung ang timbang ay mas mababa, magkakaroon kami ng mas mababang ratio ng tungkulin PWM at ayon sa figure sa pagpapakilala ng servo dapat umabot sa dulong kanan.
Sa pamamagitan nito mayroon kaming kontrol sa posisyon ng SERVO ayon sa Timbang o Puwersa.
Para sa nangyari ito kailangan nating magtatag ng kaunting mga tagubilin sa programa at pag-uusapan natin ang mga ito nang detalyado sa ibaba.
Ang ARDUINO ay may anim na mga channel ng ADC, tulad ng ipinakita sa pigura. Sa mga alinman sa isa o lahat sa kanila ay maaaring magamit bilang mga input para sa analog boltahe. Ang UNO ADC ay may resolusyon na 10 bit (kaya ang mga halaga ng integer mula sa (0- (2 ^ 10) 1023)). Nangangahulugan ito na mapapa-input ang mga voltages ng pag-input sa pagitan ng 0 at 5 volts sa mga halaga ng integer sa pagitan ng 0 at 1023. Kaya't para sa bawat (5/1024 = 4.9mV) bawat yunit.
Dito ay gagamitin namin ang A0 ng UNO. Kailangan nating malaman ang ilang bagay.
|
Una sa lahat ang mga Arduino Uno ADC channel ay may isang default na halaga ng sanggunian na 5V. Nangangahulugan ito na maaari kaming magbigay ng isang maximum na boltahe ng pag-input ng 5V para sa pag-convert ng ADC sa anumang input channel. Dahil ang ilang mga sensor ay nagbibigay ng mga voltages mula sa 0-2.5V, na may isang sanggunian na 5V nakakakuha kami ng mas kaunting kawastuhan, kaya mayroon kaming isang tagubilin na nagbibigay-daan sa amin na baguhin ang halagang ito ng sanggunian. Kaya para sa pagbabago ng sangguniang halaga na mayroon kami ("analogReferensi ();") Sa ngayon ay iniiwan namin ito bilang.
Bilang default nakukuha namin ang maximum na resolusyon ng board ng ADC na 10bits, ang resolusyon na ito ay maaaring mabago sa pamamagitan ng paggamit ng tagubilin ("analogReadResolution (bits);"). Ang pagbabago ng resolusyon na ito ay maaaring maging madaling gamiting para sa ilang mga kaso. Sa ngayon iniiwan namin ito bilang.
Ngayon kung ang mga kundisyon sa itaas ay nakatakda sa default, mababasa natin ang halaga mula sa ADC ng channel '0' sa pamamagitan ng direktang pagtawag sa pagpapaandar na "analogRead (pin);", narito ang "pin" ay kumakatawan sa pin kung saan namin ikinonekta ang analog signal, sa kasong ito ay magiging "A0". Ang halaga mula sa ADC ay maaaring makuha sa isang integer bilang "int SENSORVALUE = analogRead (A0); ", Sa pamamagitan ng tagubiling ito ang halaga pagkatapos maimbak ang ADC sa integer na" SENSORVALUE ".
Ang PWM ng UNO ay maaaring makamit sa anumang mga pin na sinasagisag bilang "~" sa board ng PCB. Mayroong anim na mga channel ng PWM sa UNO. Gagamitin namin ang PIN3 para sa aming hangarin.
analogWrite (3, VALUE); |
Mula sa kundisyon sa itaas maaari naming direktang makuha ang signal ng PWM sa kaukulang pin. Ang unang parameter sa mga braket ay para sa pagpili ng pin na numero ng PWM signal. Pangalawang parameter ay para sa pagsulat ng ratio ng tungkulin.
Ang halaga ng PWM ng Arduino Uno ay maaaring mabago mula 0 hanggang 255. Na may pinakamababang "0" hanggang "255" bilang pinakamataas. Sa 255 bilang duty ratio makakakuha kami ng 5V sa PIN3. Kung ang duty ratio ay ibinigay bilang 125 makakakuha kami ng 2.5V sa PIN3.
Ngayon pag-usapan natin ang tungkol sa kontrol ng servo motor, ang Arduino Uno ay may isang tampok na nagbibigay-daan sa amin upang makontrol ang posisyon ng servo sa pamamagitan lamang ng pagbibigay ng degree na halaga. Sabihin kung nais namin ang servo na nasa 30, maaari naming direktang kinatawan ang halaga sa programa. Pinangangalagaan ng file ng header ng SERVO ang lahat ng mga pagkalkula ng ratio ng tungkulin sa loob. Maaari kang matuto nang higit pa tungkol sa kontrol ng servo motor sa arduino dito.
Ngayon ang sg90 ay maaaring ilipat mula sa 0-180 degree, mayroon kaming resulta ng ADC na 0-1024.
Kaya ang ADC ay humigit-kumulang na anim na beses sa SERVO POSITION. Kaya sa pamamagitan ng paghati sa resulta ng ADC ng 6 makukuha namin ang tinatayang posisyon ng kamay ng SERVO. Samakatuwid mayroon kaming isang signal ng PWM na ang ratio ng tungkulin ay nagbabago nang linear sa Timbang o PWersa. Ibinibigay ito sa servo motor, makokontrol natin ang servo motor sa pamamagitan ng force sensor.