Darasi 97-2: Sarrafa Motar Servo ta Amfani da Rotary Encoder
Wannan aikin yana nuna yadda ake gina ingantaccen mai sarrafa motar servo ta amfani da rotary encoder. Ba kamar potentiometer ba, rotary encoder yana juyawa ci gaba, yana ba ka damar yin gyare-gyare masu kyau ko sauye-sauye masu sauri na juyi da yawa ba tare da bugun tsayawa na jiki ba. Wannan ya sa ya zama zaɓi mai kyau don aikace-aikace waɗanda ke buƙatar ɗorewa mai girma da sarrafawa daidai, kamar hannaye na mutum-mutumi, gimbals na kyamara, hanyoyin pan-tilt, ko kowane aikin DIY inda kake buƙatar saita wuri da ƙulli na jiki.
Ga wasu misalai masu amfani na abin da za ka iya ginawa da wannan saitin:
- Ƙirƙirar kwamitin sarrafawa na hannu don hannun mutum-mutumi don saita kusurwoyin haɗin gwiwa.
- Gina ingantaccen kan pan-and-tilt don kyamara ko firikwensin.
- Haɓaka mai sarrafa bawul ko damper mai motsi don sarrafa gida.
- Yin shigarwa na fasaha mai mu'amala inda juya ƙulli ke motsa wani abu na jiki.
Abubuwan Kayan Aiki
Don bin wannan jagorar, za ka buƙaci sassa masu zuwa. Rotary encoder na iya zama ɓangaren da ba shi da komai ko module tare da PCB wanda ya haɗa da resistors masu ɗagawa da suka dace. Zane-zanen wayoyi a cikin bidiyon sun rufe nau'ikan biyu.
- Arduino Uno (ko allo makamancin haka)
- Rotary Encoder (tare da ko ba tare da PCB ba)
- Motar Servo (daidaitaccen ko gear na ƙarfe)
- 3x Resistors (1kΩ zuwa 100kΩ, kawai idan ana amfani da encoder mara komai)
- I2C LCD Display (16x2)
- Jumper Wires da Breadboard (na zaɓi)
Jagorar Wayoyi
Wannan aikin ya haɗa da haɗa manyan abubuwa uku zuwa Arduino: rotary encoder, motar servo, da LCD display na zaɓi. Bidiyon yana ba da cikakkun zane-zane don nau'ikan PCB da na ƙasƙanci na encoder. Haɗin gindi an bayyana su a ƙasa.
Rotary Encoder: Encoder yana da fil ɗin sigina biyu (sau da yawa ana kiran su A da B) da fil ɗin maɓallin turawa. Don nau'in PCB, haɗa fil ɗin sigina biyu zuwa fil ɗin Arduino 2 da 3, da fil ɗin maɓallin zuwa fil 4. Fil ɗin wutar lantarki da ƙasa suna zuwa 3.3V da GND, bi da bi. Don encoder mara komai, dole ne ka ƙara resistors masu ɗagawa zuwa fil ɗin sigina.
Motar Servo: Servo yana da wayoyi uku. Haɗa wayar sigina (sau da yawa rawaya ko orange) zuwa fil ɗin da ke iya PWM akan Arduino, wanda shine fil 9 a cikin lambar. Haɗa wayar wutar lantarki (yawanci ja) zuwa fil ɗin 5V da wayar ƙasa (launin ruwan kasa ko baƙi) zuwa GND. Don servo mai ƙarfi, bidiyon yana ba da shawarar amfani da wutar lantarki ta waje 5V don guje wa ɗaukar nauyi fiye da kima akan mai sarrafa wutar lantarki na Arduino, tabbatar da cewa ƙasa suna haɗuwa.
I2C LCD Display: LCD yana amfani da ka'idar I2C, wanda ke buƙatar haɗin bayanai biyu kawai. Haɗa fil ɗin SDA zuwa A4 na Arduino da SCL zuwa A5. Ba da wutar lantarki ga nuni da 5V da GND. Bidiyon kuma yana nuna wata hanyar daban ta ba da wutar lantarki daga kai na ICSP.
Bayanin Lambar
Lambar an tsara ta don sauƙin daidaitawa. Saitunan farko an ayyana su a saman sketch, yana ba ka damar daidaita fil ɗin da halayen ba tare da shiga cikin dabaru ba. Ga manyan masu canji waɗanda za ka iya son canzawa (a cikin bidiyo a 17:52).
const int SW_PIN = 4;
const int PIN_A =2;
const int PIN_B =3;
const int homePosition = 90; //matsayi na farko
const int stepValue = 5;
const int servoPin = 9;//dole ne ya zama fil ɗin da aka yiwa alama da ~
- PIN_A da PIN_B: Waɗannan suna ayyana fil ɗin Arduino da aka haɗa zuwa fitarwar encoder. Idan servonka yana motsawa a kishiyar alkiblar ƙullinka, za ka iya musanya waɗannan ƙimar biyu kawai (a cikin bidiyo a 17:32).
- SW_PIN: Wannan shine fil ɗin maɓallin turawa na ciki na encoder. Danna shi zai aika servo zuwa
homePositionda aka ayyana (a cikin bidiyo a 19:06). - homePosition: Wannan shine kusurwa (a cikin digiri) wanda servo zai motsa zuwa lokacin da aka danna maɓallin, kuma shine kuma matsayin farko na servo lokacin kunnawa.
- stepValue: Wannan yana sarrafa yadda ƙullin yake da hankali. Ƙimar 5 tana nufin kusurwar servo tana canzawa da digiri 5 ga kowane ɗan motsi da kake ji lokacin juyar da encoder. Ƙara wannan don motsi mai sauri ko rage shi don sarrafawa mai kyau (a cikin bidiyo a 20:39).
- servoPin: Wannan shine fil ɗin sarrafawa na servo. Yana da mahimmanci a yi amfani da fil ɗin da ke goyan bayan PWM (pulse-width modulation), wanda aka nuna da alamar
~kusa da lambar fil akan Arduino. Fil 9 zaɓi ne mai aminci (a cikin bidiyo a 21:03).
Babban madauki yana ci gaba da karanta matsayin encoder. Lokacin da aka gano canji, yana kwatanta sabon matsayi da tsohon don tantance alkiblar juyawa. Idan ka juya shi zuwa agogo, servoAngle yana ƙaruwa da stepValue, kuma idan ba zuwa agogo ba, yana raguwa. Lambar ta haɗa da dubawa don tabbatar da cewa kusurwa ta kasance a cikin ingantaccen kewayon digiri 0 zuwa 180 don daidaitaccen servo.
Maɓallin turawa na encoder ana karanta shi azaman shigarwa na dijital. Lokacin da aka danna shi, yana jawo fil ɗin ƙasa, yana haifar da lambar don sake saita servoAngle zuwa homePosition da ka ayyana (a cikin bidiyo a 27:13). Idan kana amfani da nau'in LCD na lambar, aikin al'ada yana sarrafa sharewa da sabunta nunin kusurwa akan allo don hana fatalwar rubutu (a cikin bidiyo a 27:56).
Nunin Aikin Kai Tsaye
A cikin nunin bidiyon, an nuna saitin yana aiki da daidaitaccen servo da kuma na ƙarfe-gear servo. Yayin da ake juya ƙullin, hannun servo yana bin alkiblar juyawa, yana tsayawa a iyakokin digiri 0 da 180. Amsar nan take kuma daidai ce. Bidiyon kuma yana nuna aikin maɓallin, inda danna ƙullin nan take ya dawo da servo zuwa wurinsa na asali, wanda zai iya zama fasali mai amfani sosai don mayar da injiniya zuwa wurinsa (a bidiyo a 30:01).
Tuƙin servo daga encoder an rufe shi a Darasi 97-1: Gano Juyawar Rotary Encoder da Tura Maɓallin.
Ayyukan da suka shafi wannan bidiyo
- Darasi 97-1: Gano Juyawar Rotary Encoder da Tura Maɓallin
- Darasi 97-3: Sarrafa Motar Servo Ta Amfani da Rotary Encoder da Nuna Angle akan LCD
Babuka
- [00:01] Gabatarwa ga Sarrafa Servo da Rotary Encoder
- [00:51] Haɗa Waya na Encoder na Sigar PCB
- [06:55] Haɗa Waya na Encoder marar Karewa da Resistors
- [09:56] Haɗa Waya na Motar Servo da LCD
- [13:28] Shigar da Laburaren Da Ake Bukata
- [14:54] Gwada Lambar Encoder ta Asali
- [17:52] Gyara Lambar don Servo da Maɓalli
- [20:20] Bayanin Lambar don Sarrafa Servo
- [27:56] Bayanin Aikin Nuna LCD
- [30:01] Nunin Ƙarshe da Kammalawa
/*
* Lesson 97-2: Controlling Servo Motor using Rotary Encoder
Download and resource page https://robojax.com/RJT453
*
* Watch full details video: https://youtu.be/6xVLbNlmK-g
This video is part of the Arduino Step by Step Course, which starts here: https://youtu.be/-6qSrDUA5a8
If you found this tutorial helpful, please support me so I can continue creating
content like this. Make a donation using PayPal or a credit card: https://bit.ly/donate-robojax
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
* Updated by Ahmad Shamshiri on Jan 23, 2022
* Encoder Library - Basic Example
* http://www.pjrc.com/teensy/td_libs_Encoder.html
*
* This example code is in the public domain.
*/
const int SW_PIN = 4;
const int PIN_A =2;
const int PIN_B =3;
#include <Encoder.h>
// Change these two numbers to the pins connected to your encoder.
// Best Performance: both pins have interrupt capability
// Good Performance: only the first pin has interrupt capability
// Low Performance: neither pin has interrupt capability
Encoder myEnc(PIN_A, PIN_B);
// avoid using pins with LEDs attached
const int homePosition = 90; //initial position
const int stepValue = 5;
const int servoPin = 9;//must be a pin that that is labeled with ~
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int servoAngle =homePosition;
void setup() {
Serial.begin(9600);
pinMode(SW_PIN, INPUT);
Serial.println("Basic Encoder Test:");
myservo.attach(servoPin); // attaches the servo on pin
myservo.write(servoAngle);//move servo to initial position
}
long oldPosition = -999;
void loop() {
long newPosition = myEnc.read();
if (newPosition != oldPosition) {
if(newPosition > oldPosition)
{
int newStep = abs(newPosition - oldPosition);
Serial.print("Angle ");
Serial.println(servoAngle);
servoAngle -= stepValue;
if(servoAngle <0)
servoAngle =0;
myservo.write(servoAngle);
}
if(newPosition < oldPosition )
{
int newStep = abs(newPosition - oldPosition);
Serial.print("Angle ");
Serial.println(servoAngle);
servoAngle += stepValue;
if(servoAngle >180)
servoAngle =180;
myservo.write(servoAngle);
}
oldPosition = newPosition;//remember the new position
}
if( digitalRead(SW_PIN) == LOW)
{
Serial.print("Home: ");
Serial.println(homePosition);
servoAngle =homePosition;
myservo.write(servoAngle);
}
//Watch full details video: https://youtu.be/6xVLbNlmK-g
//delay(200);
}
Abin da zaka iya bukata
-
Amazon
-
Amazon
-
Amazon
-
eBay
-
eBay
-
AliExpressPurchase an LCD1602 from AliExpresss.click.aliexpress.com
Albarkatun da kuma shafukan da za a duba
-
WajePurchase an LCD1602 from AliExpresss.click.aliexpress.com
-
Waje
-
Waje
-
WajePurchase ZK-5DA from Amazon UKamzn.to
Fayiloli📁
Babu fayiloli da ake da su.