Šajā apmācībā mēs izstrādāsim ķēdi, izmantojot FLEX sensoru, Arduino Uno un Servo motoru. Šis projekts ir servo vadības sistēma, kurā servo vārpstas stāvokli nosaka FLEX sensora locīšana vai saliekšana vai novirze.
Vispirms ļaujiet mazliet runāt par servomotoriem. Servomotori tiek izmantoti tur, kur nepieciešama precīza vārpstas kustība vai novietojums. Tie nav paredzēti ātrgaitas lietojumiem. Tie tiek piedāvāti mazam ātrumam, vidējam griezes momentam un precīzai pozīcijas pielietošanai. Šos motorus izmanto robotu roku mašīnās, lidojuma vadības un vadības sistēmās. Servomotori tiek izmantoti iegultās sistēmās, piemēram, tirdzniecības automātos utt.
Servomotori ir pieejami dažādās formās un izmēros. Servomotorā galvenokārt būs vadi, viens ir paredzēts pozitīvam spriegumam, otrs - zemējumam, bet pēdējais - pozīcijas iestatīšanai. RED vads ir savienots ar strāvu, melnais vads ir savienots ar zemi un dzeltens vads ir savienots ar signālu.
Servomotors ir līdzstrāvas motora, stāvokļa kontroles sistēmas, zobratu kombinācija. Līdzstrāvas motora vārpstas stāvokli regulē servo vadības elektronika, pamatojoties uz PWM signāla SIGNAL tapas darba attiecību.
Vienkārši runājot, vadības elektronika regulē vārpstas stāvokli, kontrolējot līdzstrāvas motoru. Šie dati par vārpstas stāvokli tiek nosūtīti caur SIGNAL tapu. Pozīcijas dati vadības ierīcei jānosūta PWM signāla veidā caur servomotora signāla tapu.
PWM (pulsa platuma modulēta) signāla frekvence var atšķirties atkarībā no servomotora veida. Svarīgi šeit ir PWM signāla DUTY RATIO. Pamatojoties uz šo DUTY RATION, vadības elektronika noregulē vārpstu. Lai vārpstu pārvietotu uz 9o pulksteni, IESLĒGŠANAS RĀCIJAI jābūt 1/18. 1 mili sekundes ieslēgšanas laika un 17 mili sekundes izslēgšanas laika 18 ms signālā.
Lai vārpstu varētu pārvietot uz 12o pulksteni, signāla IESLĒGŠANAS laikam jābūt 1,5 ms un Izslēgšanas laikam 16,5 ms. Šo attiecību dekodē vadības sistēma servo, un tā pielāgo pozīciju, pamatojoties uz to.
Šis PWM šeit tiek ģenerēts, izmantojot ARDUINO UNO. Tātad tagad mēs to zinām, mēs varam kontrolēt servomotora vārpstu, mainot Arduino Uno ģenerētā PWM signāla darba attiecību. UNO ir īpaša funkcija, kas ļauj mums nodrošināt SERVO atrašanās vietu, netraucējot PWM signālu. Tomēr ir svarīgi zināt PWM darba devu - servo stāvokļa attiecību. Mēs par to vairāk runāsim aprakstā.
Tagad parunāsim par FLEX SENSOR. Lai savienotu FLEX sensoru ar ARDUINO UNO, darba veikšanai mēs izmantosim 8 bitu ADC (analogā uz digitālo pārveidošanu) funkciju. FLEX sensors ir devējs, kas maina savu pretestību, mainot formu. FLEX sensora garums ir 2,2 collas vai pirksts. Tas parādīts attēlā.
Flex sensors ir devējs, kas maina savu pretestību, kad lineārā virsma ir saliekta. Tādējādi nosaukums flex sensors. Vienkārši runājot, sensora spailes pretestība palielinās, kad tā ir saliekta. Tas parādīts zemāk redzamajā attēlā.
Šīs pretestības izmaiņas nevar dot neko labu, ja vien mēs tās nevaram nolasīt. Kontrolieris, kas atrodas pie rokas, var nolasīt tikai sprieguma izredzes un ne mazāk, šim nolūkam mēs izmantosim sprieguma dalītāja ķēdi, ar to mēs varam iegūt pretestības izmaiņas, mainoties spriegumam.
Sprieguma dalītājs ir pretestības ķēde un parādīts attēlā. Šajā pretestības tīklā mums ir viena pastāvīga pretestība un cita mainīga pretestība. Kā parādīts attēlā, R1 šeit ir nemainīga pretestība, un R2 ir FLEX sensors, kas darbojas kā pretestība.
Zaru viduspunkts tiek mērīts. Ar R2 izmaiņām mums ir izmaiņas pie Vout. Tātad ar to mums ir spriegums, kas mainās atkarībā no svara.
Šeit ir svarīgi atzīmēt, ka kontrollera ievadītā ADC pārveidošanas ievade ir tik maza kā 50µAmp. Šis uz pretestību balstītā sprieguma dalītāja slodzes efekts ir svarīgs, jo strāva, kas iegūta no sprieguma dalītāja Vout, palielina kļūdas procentu, tagad mums nav jāuztraucas par slodzes efektu.
LOKAS SENSORS, kad saliekts, mainās tā pretestība. Ar šo devēju, kas savienots ar sprieguma dalītāja ķēdi, ar pārveidotāju FLEX mums būs mainīgs spriegums. Šis mainīgais spriegums tiek novirzīts uz vienu no ADC kanāliem, mums būs digitāla vērtība, kas attiecas uz FLEX.
Mēs pielāgosim šo digitālo vērtību servo pozīcijai, ar to mums būs servo vadība ar elastību.
Komponenti
Aparatūra: Arduino Uno , barošanas avots (5v), 1000 uF kondensators, 100nF kondensators (3 gab.), 100KΩ rezistors, SERVO MOTOR (SG 90), 220Ω rezistors, FLEX sensors.
Programmatūra: Atmel studio 6.2 vai Aurdino katru vakaru.
Shēmas shēma un paskaidrojums
Circuit diagramma servomotora kontrolei FLEX sensors ir parādīts zemāk attēlā.
Sensora spriegums nav pilnīgi lineārs; tas būs trokšņains. Lai filtrētu troksni, kondensatori tiek novietoti pāri katram sadalītāja ķēdes rezistoram, kā parādīts attēlā.
Šeit mēs ņemsim dalītāja nodrošināto spriegumu (spriegums, kas lineāri atspoguļo svaru) un ievadīsim to vienā no Arduino UNO ADC kanāliem. Mēs tam izmantosim A0. Pēc ADC inicializācijas mums būs digitālā vērtība, kas apzīmē saliekto sensoru. Mēs ņemsim šo vērtību un saskaņosim to ar servo pozīciju.
Lai tas notiktu, mums programmā jāievieš daži norādījumi, un mēs par tiem sīkāk runāsim tālāk.
ARDUINO ir seši ADC kanāli, kā parādīts attēlā. Tajos vienu vai visus no tiem var izmantot kā analogā sprieguma ieejas. UNO ADC ir 10 bitu izšķirtspēja (tātad veselu skaitļu vērtības no (0- (2 ^ 10) 1023)). Tas nozīmē, ka tā ieejas spriegumu no 0 līdz 5 voltiem kartēs veselu skaitļu vērtībās no 0 līdz 1023. Tātad katram (5/1024 = 4,9 mV) uz vienu vienību.
Šeit mēs izmantosim UNO A0.
Mums jāzina dažas lietas.
|
Pirmkārt, UNO ADC kanāliem noklusējuma atsauces vērtība ir 5 V. Tas nozīmē, ka mēs varam dot maksimālo ieejas spriegumu 5 V ADC pārveidošanai jebkurā ieejas kanālā. Tā kā daži sensori nodrošina spriegumu no 0-2,5 V, ar 5 V atsauci mēs iegūstam mazāku precizitāti, tāpēc mums ir instrukcija, kas ļauj mums mainīt šo atsauces vērtību. Tātad, lai mainītu mums esošo atsauces vērtību (“analogReference ();”) Pagaidām mēs to atstājam kā.
Pēc noklusējuma mēs iegūstam maksimālo plates ADC izšķirtspēju, kas ir 10 biti, šo izšķirtspēju var mainīt, izmantojot instrukciju (“analogReadResolution (bits);”). Šīs izšķirtspējas izmaiņas dažos gadījumos var būt noderīgas. Pagaidām mēs to atstājam kā.
Ja iepriekš minētie nosacījumi ir iestatīti uz noklusējumu, mēs varam nolasīt kanāla '0' ADC vērtību, tieši izsaucot funkciju "analogRead (pin);", šeit "pin" apzīmē tapu, kur mēs savienojām analogo signālu, šajā gadījumā tas būtu “A0”.
Vērtību no ADC var uzskatīt par veselu skaitli kā “int SENSORVALUE = analogRead (A0); ”, Pēc šīs instrukcijas vērtība pēc ADC tiek saglabāta veselā skaitlī“ SENSORVALUE ”.
Tagad parunāsim par SERVO, UNO ir funkcija, kas ļauj mums kontrolēt servo pozīciju, vienkārši norādot pakāpes vērtību. Sakiet, ja mēs vēlamies, lai servo būtu 30, mēs varam tieši attēlot vērtību programmā. SERVO galvenes fails rūpējas par visiem darba attiecību aprēķiniem iekšēji.
# iekļaut
Servo servo; servo.attach (3); servo.raksts (grādi); |
Pirmais paziņojums apzīmē galvenes failu SERVO MOTOR kontrolei.
Otrais apgalvojums ir servo nosaukšana; mēs to atstājam kā pašu servo.
Trešais paziņojums norāda, kur ir pievienota servo signāla tapa; tam jābūt PWM tapai. Šeit mēs izmantojam PIN3.
Ceturtais paziņojums dod komandas servomotora pozicionēšanai un ir grādos. Ja tam dod 30, servomotors pagriežas par 30 grādiem.
Tagad sg90 var pārvietoties no 0-180 grādiem, mums ir ADC rezultāts 0-1024
Tātad ADC aptuveni sešas reizes pārsniedz SERVO POSITION. Tātad, dalot ADC rezultātu ar 6, mēs iegūsim aptuveno SERVO rokas pozīciju.
Tādējādi servo motoram tiks ievadīta servo pozīcijas vērtība, kas ir proporcionāla lokanai vai saliektai. Kad šis elastīgais sensors ir uzstādīts uz cimda, mēs varam kontrolēt servo stāvokli, pārvietojoties ar roku.