Sa tutorial na ito ay bubuo kami ng isang circuit gamit ang FLEX sensor, Arduino Uno at isang Servo motor. Ang proyektong ito ay isang sistema ng kontrol ng servo kung saan ang posisyon ng servo shaft ay natutukoy ng pagbaluktot o baluktot o paglihis ng sensor ng FLEX.
Hinahayaan munang pag-usapan nang kaunti ang tungkol sa mga motor ng servo. 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 ang mga servo motor sa mga naka-embed na system tulad ng mga vending machine atbp.
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. Para sa shaft na ilipat sa 9o na orasan ang TURN ON RATION ay dapat na 1 / 18.ie. 1 milli segundo ng 'ON time' at 17 milli segundo ng 'OFF time' sa isang 18 ms 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 ito, makokontrol natin ang servo motor shaft sa pamamagitan ng pag-iiba sa duty ratio ng PWM signal na nabuo ng Arduino Uno. Ang UNO ay may isang espesyal na pagpapaandar na nagbibigay-daan sa amin upang magbigay ng posisyon ng SERVO nang hindi ginugulo ang signal ng PWM. Gayunpaman mahalagang malaman ang rasyon ng tungkulin sa PWM - kaugnay ng posisyon ng servo. Pag-uusapan pa namin ang tungkol dito sa paglalarawan.
Ngayon pag-usapan natin ang tungkol sa FLEX SENSOR. Upang mai-interface ang isang sensor ng FLEX sa ARDUINO UNO, gagamit kami ng tampok na 8 bit ADC (Analog sa Digital Conversion) upang gawin ang trabaho. Ang isang FLEX sensor ay isang transducer na nagbabago ng paglaban nito kapag nabago ang hugis nito. Ang isang sensor ng FLEX ay may 2.2 pulgada ang haba o haba ng daliri. Ipinapakita ito sa pigura.
Ang Flex sensor ay isang transducer na nagbabago ng paglaban nito kapag ang linear ibabaw ay baluktot. Samakatuwid ang pangalang flex sensor. Ang pagsasalita lamang ng pagtaas ng paglaban ng terminal ng sensor ay nabaluktot. Ipinapakita ito sa figure sa ibaba.
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 FLEX 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.
FLEX SENSOR kapag baluktot ang mga pagbabago sa paglaban nito. Sa pamamagitan ng transducer na ito na konektado sa isang voltage divider circuit, magkakaroon kami ng pagbabago ng boltahe na may FLEX sa transducer. Ang variable na boltahe na ito ay FED sa isa sa mga channel ng ADC, magkakaroon kami ng isang digital na halaga na nauugnay sa FLEX.
Itutugma namin ang digital na halagang ito sa posisyon ng servo, kasama nito magkakaroon kami ng kontrol sa servo sa pamamagitan ng pagbaluktot.
Mga Bahagi
Hardware: Arduino Uno , Power supply (5v), 1000 uF capacitor, 100nF capacitor (3 piraso), 100KΩ resistor, SERVO MOTOR (SG 90), 220Ω resistor, FLEX sensor.
Software: Atmel studio 6.2 o Aurdino gabi-gabi.
Circuit Diagram at Paliwanag
Ang diagram ng circuit para sa servo motor control ng FLEX 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, ang mga 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. Gagamitin namin ang A0 para dito. Matapos ang pagsisimula ng ADC, magkakaroon kami ng digital na halaga na kumakatawan sa baluktot na sensor. Kukunin namin ang halagang ito at itutugma ito sa posisyon ng servo.
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 UNO ADC channel ay may default na sanggunian na halaga ng 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 ".
Ngayon pag-usapan natin ang tungkol sa SERVO, ang UNO ay may isang tampok na nagbibigay-daan sa amin upang makontrol ang posisyon ng servo sa pamamagitan lamang ng pagbibigay ng halaga ng degree. 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.
# isama
Servo servo; servo.attach (3); servo.write (degree); |
Ang unang pahayag ay kumakatawan sa header file para sa pagkontrol sa SERVO MOTOR.
Pangalawang pahayag ay pinangalanan ang servo; iniiwan namin ito bilang mismong servo.
Pangatlong pahayag na nagsasaad kung saan nakakonekta ang servo signal pin; dapat itong isang PWM na pin. Narito ginagamit namin ang PIN3.
Ang pang-apat na pahayag ay nagbibigay ng mga utos para sa pagpoposisyon ng servo motor at nasa degree. Kung bibigyan ito ng 30, umiikot ang servo motor ng 30 degree.
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.
Sa pamamagitan nito magkakaroon kami ng halaga ng posisyon ng servo na pinakain sa servo motor, na proporsyon sa pagbaluktot o baluktot. Kapag ang flex sensor na ito ay naka-mount sa guwantes, makokontrol natin ang posisyon ng servo sa pamamagitan ng paggalaw ng kamay.