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 การทำงาน