วิธีควบคุมเซอร์โวมอเตอร์โดยใช้จอยสติ๊ก

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





ในโพสต์นี้เราจะเรียนรู้วิธีควบคุมเซอร์โวมอเตอร์โดยใช้จอยสติ๊กและ Arduino เราจะเห็นภาพรวมเกี่ยวกับจอยสติ๊กพินโครงสร้างและการทำงาน เราจะดึงข้อมูลที่เป็นประโยชน์จาก joy stick ซึ่งจะเป็นฐานในการควบคุมเซอร์โวมอเตอร์

บทนำ

คำขวัญของบทความนี้ไม่ได้เป็นเพียงเพื่อ ควบคุมเซอร์โวมอเตอร์ แต่หากต้องการเรียนรู้วิธีใช้ไฟล์ จอยสติ๊กสำหรับควบคุม อุปกรณ์ต่อพ่วงอื่น ๆ อีกมากมาย



ตอนนี้เรามาดูจอยสติ๊กกัน

จอยสติ๊กเป็นอุปกรณ์อินพุตที่ประกอบด้วยคันโยกซึ่งสามารถเคลื่อนที่ได้หลายทิศทางในแกน X และ Y การเคลื่อนไหวของคันโยกใช้สำหรับควบคุมมอเตอร์หรืออุปกรณ์อิเล็กทรอนิกส์อุปกรณ์ต่อพ่วงใด ๆ



จอยสติ๊กใช้ตั้งแต่ของเล่น RC ไปจนถึงเครื่องบิน Boing และทำหน้าที่คล้ายกัน นอกจากนี้การเล่นเกมและจอยสติ๊กขนาดเล็กยังมีปุ่มกดในแกน Z ซึ่งสามารถตั้งโปรแกรมให้ทำงานที่มีประโยชน์มากมาย

ภาพประกอบของจอยสติ๊ก:

ภาพประกอบของจอยสติ๊ก:

จอยสติ๊กเป็นอุปกรณ์อิเล็กทรอนิกส์โดยทั่วไปเราจำเป็นต้องใช้พลังงาน การเคลื่อนที่ของคันโยกทำให้เกิดแรงดันไฟฟ้าที่ขาเอาต์พุต ระดับแรงดันไฟฟ้าจะถูกประมวลผลโดยไมโครคอนโทรลเลอร์เพื่อควบคุมอุปกรณ์เอาต์พุตเช่นมอเตอร์

จอยสติ๊กในภาพประกอบนั้นคล้ายกันซึ่งสามารถพบได้ในคอนโทรลเลอร์ของ PlayStation และ Xbox คุณไม่จำเป็นต้องทำลายตัวควบคุมเหล่านี้เพื่อกอบกู้ โมดูลเหล่านี้หาซื้อได้ง่ายตามร้านค้าอิเล็กทรอนิกส์ในพื้นที่และไซต์อีคอมเมิร์ซ

ตอนนี้เรามาดูการสร้างจอยสติ๊กนี้กัน

มีสอง 10 กิโลโอห์ม โพเทนชิออมิเตอร์ วางอยู่ในแกน X และ Y พร้อมสปริงเพื่อให้สปริงกลับสู่ตำแหน่งเดิมเมื่อผู้ใช้ปล่อยแรงจากคันโยก มีปุ่มกดไปที่ ON บนแกน Z

มี 5 พิน, 5 โวลต์ Vcc, GND, ตัวแปร X, ตัวแปร Y และ SW (สวิตช์แกน Z) เมื่อเราใช้แรงดันไฟฟ้าและปล่อยจอยสติ๊กไว้ที่ตำแหน่งคันโยกเดิม หมุด X และ Y จะให้แรงดันไฟฟ้าครึ่งหนึ่งของแรงดันไฟฟ้าที่ใช้

เมื่อเราขยับคันโยกแรงดันไฟฟ้าจะแตกต่างกันไปในพินเอาต์พุต X และ Y ตอนนี้เรามาเชื่อมต่อจอยสติ๊กกับ Arduino กัน

แผนภาพ:

Arduino Servo Motor Control โดยใช้จอยสติ๊ก

รายละเอียดการเชื่อมต่อพินมีให้ข้างวงจร เชื่อมต่อการตั้งค่าฮาร์ดแวร์ที่เสร็จสมบูรณ์และอัปโหลดรหัส

โปรแกรม:

//---------------Program Developed by R.Girish--------------//
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
void setup()
{
Serial.begin(9600)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
Serial.print('X axis = ')
Serial.println(x)
Serial.print('Y axis = ')
Serial.println(y)
Serial.print('Z axis = ')
if(z == HIGH)
{
Serial.println('Button not Pressed')
}
else
{
Serial.println('Button Pressed')
}
Serial.println('----------------------------')
delay(500)
}
//---------------Program Developed by R.Girish--------------//

เปิดจอภาพอนุกรมคุณจะเห็นระดับแรงดันไฟฟ้าที่หมุดแกน X และ Y และสถานะของแกน Z เช่นปุ่มกดดังภาพประกอบด้านล่าง

ค่าแกน X, Y, Z เหล่านี้ใช้เพื่อตีความตำแหน่งของคันโยก อย่างที่คุณเห็นค่าอยู่ระหว่าง 0 ถึง 1023

นั่นเป็นเพราะ Arduino ได้สร้างตัวแปลง ADC ซึ่งแปลงแรงดันไฟฟ้า 0V - 5V เป็น 0 ถึง 1023 ค่า

คุณสามารถเห็นได้จากมอนิเตอร์แบบอนุกรมว่าเมื่อก้านโยกปล่อยไว้โดยไม่ถูกแตะคันโยกจะอยู่ที่ตำแหน่งกึ่งกลางของทั้งแกน X และ Y และแสดงค่าครึ่งหนึ่งของ 1023

นอกจากนี้คุณยังสามารถเห็นว่ามันไม่ใช่ครึ่งหนึ่งของปี 1023 นั่นเป็นเพราะการผลิตจอยสติ๊กเหล่านี้ไม่เคยสมบูรณ์แบบ

ถึงตอนนี้คุณจะมีความรู้ทางเทคนิคเกี่ยวกับจอยสติ๊กแล้ว

ตอนนี้เรามาดูวิธีควบคุมเซอร์โวมอเตอร์สองตัวโดยใช้จอยสติ๊กเดียว

แผนภูมิวงจรรวม:

เซอร์โวมอเตอร์สองตัวถูกควบคุมโดยจอยสติ๊กหนึ่งอันเมื่อคุณเลื่อนจอยสติ๊กไปตามแกน X เซอร์โวที่เชื่อมต่อที่พิน # 7 จะเคลื่อนที่ตามเข็มนาฬิกาและนาฬิกาต่อต้านอย่างชาญฉลาดขึ้นอยู่กับตำแหน่งคันโยก

คุณยังสามารถจับเซอร์โวแอคชูเอเตอร์ไว้ที่ตำแหน่งหนึ่งได้หากคุณถือระดับจอยสติ๊กไว้ที่ตำแหน่งใดตำแหน่งหนึ่ง

คล้ายกับเซอร์โวมอเตอร์ที่เชื่อมต่อที่ขา # 6 คุณสามารถเลื่อนคันโยกไปตามแกน Y ได้

เมื่อคุณกดคันโยกตามแนวแกน Z มอเตอร์ทั้งสองจะกวาด 180 องศา

คุณสามารถเชื่อมต่อ arduino กับ แบตเตอรี่ 9v หรือคอมพิวเตอร์ หากคุณเชื่อมต่อ Arduino กับคอมพิวเตอร์คุณสามารถเปิดจอภาพอนุกรมและดูมุมของตัวกระตุ้นเซอร์โวและระดับแรงดันไฟฟ้า

โปรแกรมควบคุมเซอร์โวมอเตอร์:

//---------------Program Developed by R.Girish--------------//
#include
Servo servo_X
Servo servo_Y
int X_angleValue = 0
int Y_angleValue = 0
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
int pos = 0
int check1 = 0
int check2 = 0
int threshold = 10
void setup()
{
Serial.begin(9600)
servo_X.attach(7)
servo_Y.attach(6)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
if(z == LOW)
{
Serial.print('Z axis status = ')
Serial.println('Button Pressed')
Serial.println('Sweeping servo actuators')
for (pos = 0 pos <= 180 pos += 1)
{
servo_X.write(pos)
delay(10)
}
for (pos = 180 pos >= 0 pos -= 1)
{
servo_X.write(pos)
delay(15)
}
for (pos = 0 pos <= 180 pos += 1)
{
servo_Y.write(pos)
delay(10)
}
for (pos = 180 pos >= 0 pos -= 1)
{
servo_Y.write(pos)
delay(15)
}
Serial.println('Done!!!')
}
if(x > check1 + threshold || x {
X_angleValue = map(x, 0, 1023, 0, 180)
servo_X.write(X_angleValue)
check1 = x
Serial.print('X axis voltage level = ')
Serial.println(x)
Serial.print('X axis servo motor angle = ')
Serial.print(X_angleValue)
Serial.println(' degree')
Serial.println('------------------------------------------')
}
if(y > check2 + threshold || y {
Y_angleValue = map(y, 0, 1023, 0, 180)
servo_Y.write(Y_angleValue)
check2 = y
Serial.print('Y axis voltage level = ')
Serial.println(y)
Serial.print('Y axis servo motor angle = ')
Serial.print(Y_angleValue)
Serial.println(' degree')
Serial.println('------------------------------------------')
}
}
//---------------Program Developed by R.Girish--------------//

หากคุณมีคำถามเฉพาะเกี่ยวกับโครงการนี้อย่าลังเลที่จะแสดงความคิดเห็นในส่วนความคิดเห็นคุณอาจได้รับคำตอบอย่างรวดเร็ว




คู่ของ: วงจรมิเตอร์วัดความจุดิจิตอลโดยใช้ Arduino ถัดไป: การใช้ Digital Potentiometer MCP41xx กับ Arduino