Lab 3 การควบคุม Servo Motor

Lab 3.1 Servo 1 ช่อง กับ Nano Shield

ต่อเซอร์โวมอเตอร์เข้าบอร์ด Arduino ใน Zack robot shield ตามขาสัญญาณในตารางนี้

ภาพประกอบตำแหน่งการต่อ

ตัวอย่างการเขียน Code ควบคุม Servo Motor ดังกรอบข้างล่าง

Arduino IDE Code

#include <Servo.h> // ผนวกไลบรารี่

int s1 = 10; // เปิดใช้งาน s1 ที่พอร์ต 10

Servo sv1; // ประกาศการใช้งาน sv1

void setup() {

sv1.attach(s1); // เรียกใช้งานเตรียมตอบสนอง sv1

}

void loop(){

sv1.write(0); // sv1 ทำงานที่ 0 องศา

delay(1000); //หน่วงเวลา 1 วินาที

sv1.write(30); // sv1 ทำงานที่ 30 องศา

delay(1000); //หน่วงเวลา 1 วินาที

sv1.write(60); // sv1 ทำงานที่ 60 องศา

delay(1000); //หน่วงเวลา 1 วินาที

}

สำหรับบอร์ด Phurawong Robot Team

Arduino IDE Code

#include <Servo.h> // ผนวกไลบรารี่

int s1 = 8; // เปิดใช้งาน s1 ที่พอร์ต 8

Servo sv1; // ประกาศการใช้งาน sv1

void setup() {

sv1.attach(s1); // เรียกใช้งานเตรียมตอบสนอง sv1

}

void loop(){

sv1.write(0); // sv1 ทำงานที่ 0 องศา

delay(1000); //หน่วงเวลา 1 วินาที

sv1.write(30); // sv1 ทำงานที่ 30 องศา

delay(1000); //หน่วงเวลา 1 วินาที

sv1.write(60); // sv1 ทำงานที่ 60 องศา

delay(1000); //หน่วงเวลา 1 วินาที

}

Lab 3.2 Servo K-nob

- สำหรับการใช้งานเพื่อทำการตั้งค่าเซอร์โวชนิด 180 องศา ให้ใช้กับตัวต้านทานปรับค่าได้ (VR) สามารถเขียน Code ได้ตามตัวอย่างข้างล่างครับ

Code Arduino IDE

///// ผนวกไลบรารี่//////

#include <Servo.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 OLED(-1);


int s1 = 10; // เปิดใช้งาน s1 ที่พอร์ต 10

Servo sv1; // ประกาศการใช้งาน sv1


void setup() {

Serial.begin(9600); // เปิดการใช้งาน Serial monitor ที่ 9600

sv1.attach(s1); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv1

OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C); // กำหนดแอดเดรสของพอร์ตจอเป็น 0x3C (for the 128x64)

}


void loop() {

int vr = analogRead(A7); // กำหนดตัวแปรจำนวนเต็มอ่านค่าอนาล็อกที่พอร์ต 7

int nob = map(vr, 0, 1023, 0, 180); // ทำการ map อัตราส่วนจากสัญญาณ analog 0-1023 เป็น 0-180

OLED.clearDisplay(); // เคลียร์หน้าจอ oled

OLED.setTextColor(WHITE, BLACK); //สีอักษรเป็นสีขาว ,พื้นหลังดำ

OLED.setCursor(0, 0); // เซตตำแหน่ง 0,0

OLED.setTextSize(2); // เซตขนาดอักษรมีขนาดเป็น 2

OLED.print("SV1 = "); // พิมพ์คำว่า SV1 =

OLED.println(nob); // นำค่า nob มาแสดงใน oled

OLED.display(); // เปิดฟังก์ชันแสดงผล

sv1.write(nob); // สั่งเซอร์โวมอเตอร์ให้หมุนไปตามค่าองศาที่ทำการ nob ไว้

delay(50); // หน่วงเวลา 0.05 วินาที

}

สำหรับบอร์ด Phurawong Robot Team

Arduino IDE Code

///// ผนวกไลบรารี่//////

#include <Servo.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 OLED(-1);


int s1 = 8; // เปิดใช้งาน s1 ที่พอร์ต 8

Servo sv1; // ประกาศการใช้งาน sv1


void setup() {

Serial.begin(9600); // เปิดการใช้งาน Serial monitor ที่ 9600

sv1.attach(s1); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv1

OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C); // กำหนดแอดเดรสของพอร์ตจอเป็น 0x3C (for the 128x64)

}

void loop() {

int vr = analogRead(A7); // กำหนดตัวแปรจำนวนเต็มอ่านค่าอนาล็อกที่พอร์ต 7

int nob = map(vr, 0, 1023, 0, 180); // ทำการ map อัตราส่วนจากสัญญาณ analog 0-1023 เป็น 0-180

OLED.clearDisplay(); // เคลียร์หน้าจอ oled

OLED.setTextColor(WHITE, BLACK); //สีอักษรเป็นสีขาว ,พื้นหลังดำ

OLED.setCursor(0, 0); // เซตตำแหน่ง 0,0

OLED.setTextSize(2); // เซตขนาดอักษรมีขนาดเป็น 2

OLED.print("SV1 = "); // พิมพ์คำว่า SV1 =

OLED.println(nob); // นำค่า nob มาแสดงใน oled

OLED.display(); // เปิดฟังก์ชันแสดงผล

sv1.write(nob); // สั่งเซอร์โวมอเตอร์ให้หมุนไปตามค่าองศาที่ทำการ nob ไว้

delay(50); // หน่วงเวลา 0.05 วินาที

}

ตัวอย่าง VDO การทำงาน