วันจันทร์ที่ 1 สิงหาคม พ.ศ. 2559

DIY แขนกล จากฟิวเจอร์บอร์ด

แขนกล 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
}


ไม่มีความคิดเห็น:

แสดงความคิดเห็น