การสร้างหุ่นยนต์ที่สามารถควบคุมด้วยเสียงปรบมือไม่ใช่เรื่องที่ยากต่อคนที่มีความรู้เกี่ยวกับการเขียนโปรแกรม Arduino และการใช้งานเซนเซอร์เสียง เราสามารถเริ่มต้นโดยการเตรียมพร้อมเซนเซอร์เสียง (sound sensor) และตัว Arduino พร้อมทั้งหุ่นยนต์ที่เราต้องการควบคุม
- การต่อเซนเซอร์เสียง: เซนเซอร์เสียงจะมองเห็นรูปแบบเสียงและเปลี่ยนแปลงให้เป็นสัญญาณไฟฟ้าที่เราสามารถอ่านได้ผ่าน Arduino
- โปรแกรม Arduino: เราจะต้องเขียนโปรแกรมให้ Arduino รับสัญญาณจากเซนเซอร์เสียง และตรวจจับรูปแบบของเสียงปรบมือ เมื่อรูปแบบของเสียงตรงกับเงื่อนไขที่กำหนดไว้ เช่น การตรวจจับความดังของเสียงหรือความถี่ เราก็สามารถให้ Arduino ดำเนินการตามคำสั่งที่เรากำหนดได้
- การควบคุมหุ่นยนต์: เมื่อ Arduino ตรวจจับรูปแบบของเสียงปรบมือตรงกับเงื่อนไขที่กำหนดไว้ เราสามารถให้ Arduino ส่งสัญญาณไปยังมอเตอร์หรือหุ่นยนต์ให้มันดำเนินการตามคำสั่งที่เรากำหนดได้ เช่น เลี้ยวซ้ายหรือขวา หรือเคลื่อนที่ไปข้างหน้าหรือข้างหลัง ขึ้นอยู่กับการโปรแกรมที่เราตั้งค่า
ประโยชน์และการนำไปใช้
การควบคุมหุ่นยนต์ด้วยเสียงปรบมือสามารถมีประโยชน์ในหลากหลายสถานการณ์ เช่น
การศึกษา: นักเรียนและนักศึกษาสามารถเรียนรู้เกี่ยวกับการทำงานของเซนเซอร์เสียงและการโปรแกรม Arduino ผ่านโครงการสร้างหุ่นยนต์ที่น่าสนใจนี้
การสร้างโมเดล: นักพัฒนาและผู้สนใจด้านเทคโนโลยีสามารถนำเสนอหุ่นยนต์ Arduino ควบคุมด้วยเสียงปรบมือเป็นโมเดลใหม่ในการแสดงงานหรืองานนิทรรศการ
การประยุกต์ใช้ในอุตสาหกรรม: การควบคุมเครื่องจักรหรืออุปกรณ์ต่าง ๆ ในอุตสาหกรรมด้วยเสียงปรบมืออาจช่วยลดความเสี่ยงในการประสานงานและเพิ่มความสะดวกสบายมากยิ่งขึ้น
หลักการทำงาน
- การรับสัญญาณเสียง: เซนเซอร์เสียงที่ติดตั้งบนหุ่นยนต์ Arduino จะรับสัญญาณเสียงจากสิ่งแวดล้อม โดยจะตรวจจับรูปแบบและลักษณะของเสียงที่มีอยู่ในบริเวณใกล้เคียง
- การประมวลผลสัญญาณเสียง: หลังจากที่เซนเซอร์เสียงได้รับสัญญาณ เสียงจะถูกส่งไปยัง Arduino เพื่อประมวลผล ซึ่งอาจเป็นการตรวจจับความดังของเสียงหรือรูปแบบของเสียง เพื่อแยกแยะว่าเสียงนั้นเป็นเสียงปรบมือหรือไม่
- การตรวจจับรูปแบบเสียงปรบมือ: เมื่อ Arduino ตรวจจับเสียงปรบมือ โปรแกรมจะทำการวิเคราะห์รูปแบบของเสียงเพื่อระบุคำสั่งที่ต้องการ ซึ่งอาจเป็นการเคลื่อนที่หรือการกระทำอื่น ๆ ตามที่ได้รับการกำหนดไว้
- การควบคุมการทำงานของหุ่นยนต์: เมื่อรูปแบบของเสียงถูกตรวจจับและระบุแล้ว Arduino จะสั่งให้หุ่นยนต์ดำเนินการตามคำสั่งที่กำหนดไว้ ซึ่งอาจเป็นการเคลื่อนที่ไปข้างหน้าหรือกลับหลัง หรือการทำงานอื่น ๆ ตามที่ผู้ใช้กำหนด
- การปรับปรุงและวิเคราะห์ผลการทำงาน: หลังจากที่หุ่นยนต์ดำเนินการตามคำสั่ง เราสามารถทำการปรับปรุงและประเมินผลการทำงานของหุ่นยนต์เพื่อปรับปรุงประสิทธิภาพในการทำงานในอนาคต
ด้วยหลักการดังกล่าว หุ่นยนต์ Arduino ที่ควบคุมด้วยเสียงปรบมือสามารถทำงานได้อย่างมีประสิทธิภาพและแม่นยำในการตรวจจับและประมวลผลเสียงปรบมือในการควบคุมการทำงานของมันได้แม่นยำ และมีประโยชน์ในการประยุกต์ใช้ในหลากหลายสถานการณ์ที่ต้องการการควบคุมที่มีความสะดวกและแม่นยำในเสียงปรบมือ
อุปกรณ์ที่ใช้
2. RB-0002 Sensor Shield V 5.0
3. RB-0003 Motor Driver Module L298N
4. RB-0015 Jumper (F2M) 20cm Female to Male
5. RB-0017 Jumper (F2F) 20cm Female to Female
6. RB-0019 รางถ่าน 18650 – 2 ก้อน
7. RB-0021 ถ่านชาร์จ 18650 NCR18650B 3.7v 3400mAh 2 ก้อน
8. RB-0023 2WD Smart Robot Car Chassis Kits
9. RB-0025 เสารองแผ่นพีซีบีโลหะแบบเหลี่ยม 8 mm
10. RB-0100 Sound Detection Sensor Module LM393
การสร้าง หุ่นยนต์ Arduino ควบคุมด้วยเสียงปรบมือ
1.ประกอบหุ่นยนต์และเชื่อมต่อวงจร
ใช้สว่านเจาะรู เพื่อยึดเสารองแผ่นพีซีบี สำหรับ Arduino UNO เข้ากับ โครงหุ่นยนต์
ยึด Arduino UNO เข้ากับเสารองแผ่นพีซีบี
เสียบ Sensor Shield เข้ากับ บอร์ด Arduino R3
ยึดเสารองแผ่นพีซีบี สำหรับ Motor Driver เข้ากับ โครงหุ่นยนต์
ยึด Motor Driver เข้ากับเสารองแผ่นพีซีบี
ใช้กาวร้อน ยึดรางถ่าน เข้ากับ โครงหุ่นยนต์
การต่อวงจร
- สายสีแดงของรางถ่าน 7.4 โวลต์ เชื่อมต่อเข้ากับสวิตช์ปิดเปิด
- สายสีดำของรางถ่าน 7.4 โวลต์ เชื่อมต่อกับ Jumper (F2M) ผู้-เมีย สีดำ (ตัดขั้วด้านผู้ออก) แล้วจึงเชื่อมต่อเข้ากับ กราวด์ (GND) ของ Sensor Shield
- ใช้สาย Jumper (F2M) ผู้-เมีย สีแดง (ตัดขั้วด้านเมียออก) เชื่อมต่อจากสวิตช์ปิดเปิดอีกด้าน ไปยัง Power Supply ของ Motor Driver
- ใช้สาย Jumper (F2M) ผู้-เมีย สีดำ เชื่อมต่อระหว่าง กราวด์ (GND) ของ Motor Driver กับ GND หรือ G ของ Sensor Shield
- ใช้สาย Jumper (F2M) ผู้-เมีย สีน้ำตาล เชื่อมต่อจากการจ่ายไฟ 5 โวลต์ ของ Motor Driver ไปยัง 5 โวลต์ หรือ V ของ Sensor Shield
จากนั้น ใช้สาย Jumper (F2F) เมีย-เมีย สีอะไรก็ได้ เชื่อมต่อวงจร ระหว่าง Sensor Shield กับ Motor Driver ตามรูป
มี Jumper อยู่ที่ขา ENA และ ENB ของ บอร์ด Motor Driver ให้ถอดออก
ใส่ถ่าน เข้าไปที่รางถ่าน เมื่อ เปิดสวิตช์ ต้องมีไฟเข้า โดยสังเกตไฟ LED สีแดง ที่ Sensor Shield และ ไฟ LED สีแดงที่ Motor Driver จะมีไฟติด
เชื่อมต่อสายสีแดง – ดำ เข้ากับมอเตอร์ ทั้ง 2 ตัว โดยให้สายสีแดงอยู่ด้านบน และ สายสีดำอยู่ด้านล่าง
ยึดมอเตอร์ ทั้ง 2 ตัว เข้ากับ โครงหุ่นยนต์
ยึด ล้อหน้า เข้ากับ โครงหุ่นยนต์
ใส่ ล้อ เข้าไปที่มอเตอร์
เชื่อมต่อ สายมอเตอร์ทั้ง 2 ด้าน เข้ากับ Motor Driver (ตรวจสอบสีของสายไฟให้ถูกต้องตามรูป)
2.ติดตั้ง Arduino IDE
สิ่งแรกคือการติดตั้ง Arduino IDE เพื่อให้คุณสามารถค้นหา Arduino IDE ใน Google
จากนั้นคุณมีสองทางเลือก
หนึ่งคือการติดตั้งเวอร์ชัน1 หรือเพื่อติดตั้งเวอร์ชัน 2
เราจะติดตั้งเวอร์ชัน 2 เพราะมีคุณสมบัติเพิ่มเติมบางอย่าง แต่ไม่ว่าคุณจะเลือกอะไรมันจะทำงานเช่นกัน ดังนั้นคุณสามารถเลือกอย่างใดอย่างหนึ่ง
ดาวน์โหลด Arduino IDE จากที่นี่
https://www.arduino.cc/en/software
3. ทดสอบ การเคลื่อนที่ของหุ่นยนต์
การทดสอบนี้ เป็นการตรวจสอบการต่อสายต่างๆ เช่น การเชื่อมต่อสายของมอเตอร์ ทั้ง 2 ตัว รวมทั้งสายอื่นๆ ของหุ่นยนต์ที่เราสร้าง ว่าถูกต้องหรือไม่ ถ้าถูกต้องหุ่นยนต์จะดำเนินการดังนี้
คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา
และนี่คือโค้ดที่ใช้ทดสอบ
int MA1 = 6; // Motor A1
int MA2 = 7; // Motor A2
int PWM_A = 3; // Speed Motor A
int MB1 = 8; // Motor B1
int MB2 = 9; // Motor B2
int PWM_B = 5; // Speed Motor B
int SPEED = 150; // Speed PWM 0 - 255
void setup() {
//Setup Channel A
pinMode(MA1, OUTPUT); //Motor A1
pinMode(MA2, OUTPUT); //Motor A2
pinMode(PWM_A, OUTPUT); //Speed PWM Motor A
//Setup Channel B
pinMode(MB1, OUTPUT); //Motor B1
pinMode(MB2, OUTPUT); //Motor B2
pinMode(PWM_B, OUTPUT); //Speed PWM Motor B
}
void loop() {
Stop(2000);
Forward(600);
Stop(200);
Backward(600);
Stop(200);
turnLeft(400);
Stop(200);
turnRight(400);
}
void Backward(int time)
{
digitalWrite(MA1, LOW);
digitalWrite(MA2, HIGH);
analogWrite(PWM_A, SPEED);
digitalWrite(MB1, HIGH);
digitalWrite(MB2, LOW);
analogWrite(PWM_B, SPEED);
delay(time);
}
void Forward (int time)
{
digitalWrite(MA1, HIGH);
digitalWrite(MA2, LOW);
analogWrite(PWM_A, SPEED);
digitalWrite(MB1, LOW);
digitalWrite(MB2, HIGH);
analogWrite(PWM_B, SPEED);
delay(time);
}
void turnLeft(int time)
{
digitalWrite(MA1, HIGH);
digitalWrite(MA2, LOW);
analogWrite(PWM_A, SPEED);
digitalWrite(MB1, LOW);
digitalWrite(MB2, LOW);
analogWrite(PWM_B, 0);
delay(time);
}
void turnRight(int time)
{
digitalWrite(MA1, LOW);
digitalWrite(MA2, LOW);
analogWrite(PWM_A, 0);
digitalWrite(MB1, LOW);
digitalWrite(MB2, HIGH);
analogWrite(PWM_B, SPEED);
delay(time);
}
void Stop(int time)
{
digitalWrite(MA1, LOW);
digitalWrite(MA2, LOW);
analogWrite(PWM_A, 0);
digitalWrite(MB1, LOW);
digitalWrite(MB2, LOW);
analogWrite(PWM_B, 0);
delay(time);
}
ลิงค์โค้ด : https://lungmaker.com/code/test-motor-arduino.ino
เชื่อมต่อสาย USB ระหว่าง คอมพิวเตอร์ กับ Arduino UNO
ตรวจสอบ Port ของบอร์ด Arduino โดย คลิกที่ Device Manager
ที่ Ports (COM & LPT) จะพบ Port ของบอร์ด Arduino ในตัวอย่างเป็น Arduino Uno (COM19)
ไปที่ Tools -> Board -> Arduino AVR Boards -> Arduino Uno
เลือก Port โดยไปที่ Tools -> Port -> COM19
(โดย COM19 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)
คลิกที่ Upload
รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว
วิดีโอผลลัพธ์การทำงาน การเคลื่อนที่ของหุ่นยนต์ Arduino
ถ้ายังทำงานไม่ถูกต้อง คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา ให้กลับไปแก้ไขการต่อวงจร การต่อสายต่างๆ เช่น การต่อสายมอเตอร์ จนกว่าจะทำงานถูกต้อง ถึงจะสามารถไปทำงานในขั้นตอนต่อไป
4.เชื่อมต่อ เซ็นเซอร์เสียง และ ทดสอบ
เสียบสาย USB เพื่อทำการอัพโหลดโค้ด
และนี่คือโค้ดที่ใช้ทดสอบ
int sound_sensor = 11;
int clap = 0;
long detection_range_start = 0;
long detection_range = 0;
void setup() {
Serial.begin(9600);
pinMode(sound_sensor, INPUT);
}
void loop() {
int status_sensor = digitalRead(sound_sensor);
if (status_sensor == 0) {
if (clap == 0) {
detection_range_start = detection_range = millis();
clap++;
} else if (clap > 0 && millis() - detection_range >= 40) {
detection_range = millis();
clap++;
}
}
if (millis() - detection_range_start >= 1000) {
if (clap == 1) {
Serial.println("clap = 1");
}
else if (clap == 2) {
Serial.println("clap = 2");
}
else if (clap == 3) {
Serial.println("clap = 3");
}
else if (clap == 4) {
Serial.println("clap = 4");
}
clap = 0;
}
}
ลิงค์โค้ด : https://lungmaker.com/code/code-test-sound-sensor.ino
รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว
ไปที่ Tools -> Serial Monitor แล้วเลือก Both NL & CR และ เลือก 9600 baud
ทดสอบให้ได้ผลลัพธ์ดังนี้
เสียงปรบมือ 1 ครั้ง ให้ Serial Monitor แสดง clap = 1
เสียงปรบมือ 2 ครั้ง ให้ Serial Monitor แสดง clap = 2
เสียงปรบมือ 3 ครั้ง ให้ Serial Monitor แสดง clap = 3
เสียงปรบมือ 4 ครั้ง ให้ Serial Monitor แสดง clap = 4
ถ้ายังไม่ได้ให้ ปรับค่าการรับสัญญาณเสียง โดยให้หมุนตัว R ปรับค่าได้ แบบ trimpot สีฟ้า (สังเกตที่เซนเซอร์เสียง จะมีไฟกระพริบ ตามจังหวะที่เราปรบมือ)
5. Upload Code หุ่นยนต์ Arduino ควบคุมด้วยเสียงปรบมือ
โดยโค้ดที่เขียนมีเป้าหมายดังนี้ คือ…
- เสียงปรบมือ 1 ครั้ง ให้ หุ่นยนต์เดินหน้า
- เสียงปรบมือ 2 ครั้ง ให้ หุ่นยนต์เลี้ยวขวา
- เสียงปรบมือ 3 ครั้ง ให้ หุ่นยนต์เลี้ยวซ้าย
- เสียงปรบมือ 4 ครั้ง ให้ หุ่นยนต์ถอยหลัง
int MA1 = 6; // Motor A1
int MA2 = 7; // Motor A2
int PWM_A = 3; // Speed Motor A
int MB1 = 8; // Motor B1
int MB2 = 9; // Motor B2
int PWM_B = 5; // Speed Motor B
int SPEED = 150; // Speed PWM 0 - 255
int sound_sensor = 11;
int clap = 0;
long detection_range_start = 0;
long detection_range = 0;
void setup() {
Serial.begin(9600);
pinMode(sound_sensor, INPUT);
//Setup Channel A
pinMode(MA1, OUTPUT); //Motor A1
pinMode(MA2, OUTPUT); //Motor A2
pinMode(PWM_A, OUTPUT); //Speed PWM Motor A
//Setup Channel B
pinMode(MB1, OUTPUT); //Motor B1
pinMode(MB2, OUTPUT); //Motor B2
pinMode(PWM_B, OUTPUT); //Speed PWM Motor B
}
void loop() {
int status_sensor = digitalRead(sound_sensor);
if (status_sensor == 0) {
if (clap == 0) {
detection_range_start = detection_range = millis();
clap++;
} else if (clap > 0 && millis() - detection_range >= 40) {
detection_range = millis();
clap++;
}
}
if (millis() - detection_range_start >= 1000) {
if (clap == 1) {
Serial.println("clap = 1");
Forward(1000);
Stop(10);
}
else if (clap == 2) {
Serial.println("clap = 2");
turnRight(400);
Stop(10);
}
else if (clap == 3) {
Serial.println("clap = 3");
turnLeft(400);
Stop(1);
}
else if (clap == 4) {
Serial.println("clap = 4");
Backward(1000);
Stop(10);
}
clap = 0;
}
}
void Backward(int time) {
digitalWrite(MA1, LOW);
digitalWrite(MA2, HIGH);
analogWrite(PWM_A, SPEED);
digitalWrite(MB1, HIGH);
digitalWrite(MB2, LOW);
analogWrite(PWM_B, SPEED);
delay(time);
}
void Forward(int time) {
digitalWrite(MA1, HIGH);
digitalWrite(MA2, LOW);
analogWrite(PWM_A, SPEED);
digitalWrite(MB1, LOW);
digitalWrite(MB2, HIGH);
analogWrite(PWM_B, SPEED);
delay(time);
}
void turnLeft(int time) {
digitalWrite(MA1, HIGH);
digitalWrite(MA2, LOW);
analogWrite(PWM_A, SPEED);
digitalWrite(MB1, LOW);
digitalWrite(MB2, LOW);
analogWrite(PWM_B, 0);
delay(time);
}
void turnRight(int time) {
digitalWrite(MA1, LOW);
digitalWrite(MA2, LOW);
analogWrite(PWM_A, 0);
digitalWrite(MB1, LOW);
digitalWrite(MB2, HIGH);
analogWrite(PWM_B, SPEED);
delay(time);
}
void Stop(int time) {
digitalWrite(MA1, LOW);
digitalWrite(MA2, LOW);
analogWrite(PWM_A, 0);
digitalWrite(MB1, LOW);
digitalWrite(MB2, LOW);
analogWrite(PWM_B, 0);
delay(time);
}
ลิงค์โค้ด : https://lungmaker.com/code/robot-clap.ino
วิดีโอผลลัพธ์การทำงาน หุ่นยนต์ Arduino ควบคุมด้วยเสียงปรบมือ
สรุป
การใช้หุ่นยนต์ Arduino ที่ควบคุมด้วยเสียงปรบมือมีข้อดีหลายประการดังนี้:
- ความสะดวกและเรียบง่าย: การควบคุมด้วยเสียงปรบมือเป็นวิธีที่สะดวกและเรียบง่ายในการสื่อสารกับหุ่นยนต์ ผู้ใช้สามารถควบคุมหุ่นยนต์ได้โดยไม่ต้องใช้อุปกรณ์เสริมหรือโทรศัพท์มือถือ
- การตอบสนองอย่างรวดเร็ว: หุ่นยนต์ที่ควบคุมด้วยเสียงปรบมือมักมีการตอบสนองที่รวดเร็วต่อคำสั่ง เนื่องจากเสียงปรบมือสามารถถูกตรวจจับและประมวลผลได้อย่างรวดเร็ว
- ลดความซับซ้อนในการใช้งาน: การใช้เสียงเป็นวิธีการควบคุมที่มีความเป็นธรรมชาติและเข้าใจง่าย ทำให้ลดความซับซ้อนในการใช้งานและลดเวลาในการฝึกฝนการใช้งานให้กับผู้ใช้
- ไม่ต้องใช้มือ: การควบคุมด้วยเสียงปรบมือไม่ต้องการการใช้มือในการควบคุม ซึ่งเป็นประโยชน์ในสถานการณ์ที่มือถือไม่สะดวกหรือถูกใช้งานไปแล้ว
- ประหยัดทรัพยากร: เนื่องจากใช้เซนเซอร์เสียงภายในหุ่นยนต์ Arduino การควบคุมด้วยเสียงปรบมือไม่ต้องการอุปกรณ์เสริมเพิ่มเติม ทำให้ประหยัดทรัพยากรและลดความซับซ้อนในการติดตั้งและใช้งาน
- ปรับแต่งได้: การใช้งานร่วมกับ Arduino ทำให้ผู้ใช้สามารถปรับแต่งและขยายความสามารถของหุ่นยนต์ได้ตามต้องการ เช่น เพิ่มฟังก์ชันการทำงานเพิ่มเติมหรือการตอบสนองต่อเสียงที่หลากหลายมากยิ่งขึ้น
การควบคุมหุ่นยนต์ Arduino ด้วยเสียงปรบมือเป็นเทคโนโลยีที่ทันสมัยและมีความสามารถที่น่าทึ่ง ไม่เพียงแต่เสริมความสะดวกในการใช้งานแต่ยังเปิดโอกาสให้เกิดนวัตกรรมใหม่ๆ ในการใช้งานหุ่นยนต์ในสถานการณ์ที่หลากหลายมากยิ่งขึ้น