แขนกล Robotic arm จาก ฟิวเจอร์บอร์ด
ใช้ R ปรับค่าได้ ควบคุม servo 2 ตัว
ใช้ สวิตซ์ 2 ตัวควบคุม servo 1 ตัว
ภาพการต่อวงจร
สวิตซ์ในคลิปผมพูดต่อแบบ Active high แต่ในcode
และวงจร
จะเป็นแบบ Active low
Code Arduino
#include "Servo.h"
int ServoPina = 2; // กำหนดต่อ Servo a ไว้ที่ขา D2
int ServoPinb = 4; // กำหนดต่อ Servo b ไว้ที่ขา D4
int ServoPinc = 6; // กำหนดต่อ Servo c ไว้ที่ขา D6
Servo MicroServoa; // สร้าง servo object เพื่อควบคุม servo มอเตอร์ a
Servo MicroServob; // สร้าง servo object เพื่อควบคุม servo มอเตอร์ b
Servo MicroServoc; // สร้าง servo object เพื่อควบคุม servo มอเตอร์ c
int potpina = 0; // ใช้ analog pin 0 เพื่อต่อกับ potentiometer
a
int potpinb = 1; // ใช้ analog pin 1 เพื่อต่อกับ potentiometer
b
int vala; // กำหนดตัวแปร vala เพื่ออ่านค่า analog pin
int valb; // กำหนดตัวแปร valb เพื่ออ่านค่า analog pin
int valc; // กำหนดตัวแปร valc เพื่ออ่านค่า analog pin
void setup() {
MicroServoa.attach(ServoPina); //ประกาศ servo a ใช้สัญญาณจาก
ServoPina
(pin 2)
MicroServob.attach(ServoPinb);
//ประกาศ servo b ใช้สัญญาณจาก
ServoPina
(pin 4)
MicroServoc.attach(ServoPinc); //ประกาศ servo a ใช้สัญญาณจาก
ServoPina
(pin 6)
pinMode(8,INPUT_PULLUP); //ประกาศให้ pin 8 เป็น digital inuput แบบ pull up
pinMode(9,INPUT_PULLUP); //ประกาศให้ pin 9 เป็น digital inuput แบบ pull up
}
void loop() {
vala =
analogRead(potpina); // อ่านค่าตัวต้านทานปรับค่าได้ potentiometer (โดยมีค่าระหว่าง 0 และ 1023)
vala = map(vala, 0,
1023, 0, 180); // แปลงค่าที่ได้ให้ใช้กับ servo motor (โดยมีค่าระหว่าง
0 และ 180)
MicroServoa.write(vala);
// เซท servo motor ให้เป็นตำแหน่งตามค่าที่ได้
delay(15); // หน่วงเวลาเพื่อให้ servo หมุนไปที่ตำแหน่งนั้น
valb =
analogRead(potpinb); // อ่านค่าตัวต้านทานปรับค่าได้ potentiometer (โดยมีค่าระหว่าง 0 และ 1023)
valb = map(valb, 0,
1023, 0, 180); // แปลงค่าที่ได้ให้ใช้กับ servo motor (โดยมีค่าระหว่าง
0 และ 180)
MicroServob.write(valb);
// เซท servo motor ให้เป็นตำแหน่งตามค่าที่ได้
delay(15); // หน่วงเวลาเพื่อให้ servo หมุนไปที่ตำแหน่งนั้น
int buttonStatea;
buttonStatea = digitalRead(8); // ให้
buttonStatea
อ่านค่า ดิจิตอลจาก pin 8
if (buttonStatea ==
LOW) // ถ้าสถานะ pin 8 เป็น low
valc = valc+1; // ให้ valc เพิ่มค่า 1
MicroServoc.write(valc);
// เซท servo motor ให้เป็นตำแหน่งตามค่าที่ได้
delay(15); // หน่วงเวลาเพื่อให้ servo หมุนไปที่ตำแหน่งนั้น
int buttonStateb;
buttonStateb = digitalRead(9); // ให้
buttonStatea
อ่านค่า ดิจิตอลจาก pin 9
if (buttonStateb ==
LOW) // ถ้าสถานะ pin 9 เป็น low
valc = valc-1; // ให้
valc
ลดค่าลง 1
MicroServoc.write(valc);
// เซท servo motor ให้เป็นตำแหน่งตามค่าที่ได้
delay(15); // หน่วงเวลาเพื่อให้ servo หมุนไปที่ตำแหน่งนั้น
}
Remark: ทดลองวงจรควบคุม servo 1 ตัว โดยใช้ R ปรับค่าได้
Code Arduino
#include "Servo.h"
int ServoPin = 2; // กำหนดต่อ
Servo
ไว้ที่ขา D2
Servo MicroServo;
int potpin = 0;
// ต่อ R ปรับค่าได้ที่ขา อนาล็อก ขา 0
int val; // variable
to read the value from the analog pin
void setup() {
MicroServo.attach(ServoPin);
}
void loop() {
val =
analogRead(potpin); // reads
the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to
use it with the servo (value between 0 and 180)
MicroServo.write(val);
// sets the servo position
according to the scaled value
delay(15);
// waits for the servo to get there
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น