โปรเจค Arduino พูดโต้ตอบได้ โดยการเล่นไฟล์เสียงจาก SD Card บทความนี้จะสอนใช้งาน Arduino เล่นไฟล์เสียงจาก SD Card ออกลำโพง เราสามารถอัดเสียงพูดหรือบันทึกเสียงเพลงลง SD Card แล้ว สั่งงานให้ Arduino เล่นไฟล์เสียงตามเงื่อนไขต่างๆได้
อุปกรณ์ที่ใช้ในโปรเจค
2. เซ็นเซอร์สี TCS34725 RGB Color Sensor
3. Breadboard 8.5CM x 5.5CM 400 holes
4. Jumper (M2M) 30cm Male to Male
5. Micro SD Card Class 10 16GB + Card Adapter
6. Micro SD Card Mini TF Card Reader Module
8. Loud Speakers 8 Ohm 5 Watt
9. รางถ่าน AA 8 ก้อน 12 โวลต์
.
ขั้นตอนการทำโปรเจค
1. ทดสอบการทำงาน เซ็นเซอร์สี TCS34725
1.1 เชื่อมต่อสาย ระหว่าง Arduino UNO กับ เซ็นเซอร์สี TCS34725
1.3 อัพโหลดโค้ด
เชื่อมต่อสาย USB ระหว่าง คอมพิวเตอร์ กับ บอร์ด Arduino แล้ว เปิดโปรแกรม Arduino IDE เขียนโค้ดดังนี้
ไปที่ Tools > Board เลือกเป็น Arduino/Genuino UNO
ไปที่ Tools > Port: แล้วเลือกพอร์ตที่ปรากฏ (กรณีใช้เครื่องคอมพิวเตอร์ที่มี COM Port มากกว่าหนึ่ง ให้เลือกตัวอื่นที่ไม่ใช่ COM1)
ในตัวอย่างเลือกเป็น "COM6"
(ถ้ายังว่าง หรือ เป็น COM1 ให้ตรวจสอบการติดตั้งไดร์เวอร์ การต่อสาย USB ของ Arduino UNO)
กดปุ่ม เพื่ออัพโหลด
หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง
1.4 ทดสอบการทํางาน
เปิดหน้าต่าง Serial Monitor โดยไปที่ Tools > Serial Monitor
มุมขวาล่าง ของ Serial Monitor เลือกเป็น 9600 baud คือ ตั้งค่าความเร็วในการรับ-ส่งข้อมูล คือ 9600 ตามที่เราเขียนโค้ดไว้
ในกรณีที่ไม่ปกติ เช่น เช่นต่อสายไม่ถูก , เซ็นเซอร์สี TCS34725 ไม่ทำงาน จะแสดงข้อความ No TCS34725 found ... check your connections
https://www.sdcard.org/downloads/formatter_4/eula_windows/
จากนั้นให้คลิกปุ่ม Accept โปรแกรม SD Formatter โปรแกรมจึงจะดาวน์โหลดสู่ คอมพิวเตอร์ของเรา แล้วติดตั้งเหมือนกับโปรแกรมทั่วไป
ให้เสียบ Micro SD Card เข้าไปใน Card Adapter
Card Adapter ที่มี Micro SD Card อยู่ด้านใน
แล้วจึงเสียบ Card Adapter ที่บรรจุ Micro SD Card ใส่ในช่องซ็อกเก็ตของคอมพิวเตอร์ PC (ดันจนกระทั่งมีเสียงคลิก)
แล้วทำการ Format , Micro SD Card โดยใช้โปรแกรม SD Card Formatter
ถ้าเสียบ Card Adapter ที่บรรจุ Micro SD Card ได้ถูกต้อง ที่ Select card จะมี ไดรฟ์ ให้เลือก ในตัวอย่างจะเป็น ไดรฟ์ F:/ เลือก Quick format แล้ว คลิก Format
3. ทดสอบการเล่นไฟล์เสียงจาก SD Card ออกลำโพง
3.1 เชื่อมต่อสาย ระหว่าง Arduino UNO กับ Card Reader Module
3.4 อัพโหลดโค้ด
เขียนโค้ด และ อัพโหลดโค้ด ดังนี้
3.4 ทดสอบการทํางาน
เปิดหน้าต่าง Serial Monitor โดยไปที่ Tools > Serial Monitor
พิมพ์คำสั่ง 1 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Blue.wav
พิมพ์คำสั่ง 2 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Green.wav
พิมพ์คำสั่ง 3 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Orange.wav
พิมพ์คำสั่ง 4 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Red.wav
พิมพ์คำสั่ง 5 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Yellow.wav
3. Breadboard 8.5CM x 5.5CM 400 holes
4. Jumper (M2M) 30cm Male to Male
5. Micro SD Card Class 10 16GB + Card Adapter
6. Micro SD Card Mini TF Card Reader Module
8. Loud Speakers 8 Ohm 5 Watt
9. รางถ่าน AA 8 ก้อน 12 โวลต์
.
ขั้นตอนการทำโปรเจค
1. ทดสอบการทำงาน เซ็นเซอร์สี TCS34725
1.1 เชื่อมต่อสาย ระหว่าง Arduino UNO กับ เซ็นเซอร์สี TCS34725
1.2 ติดตั้ง ไลบรารี สำหรับ เซ็นเซอร์สี TCS34725
ดาวน์โหลด ไลบรารี
ไปที่ Clone or download -> Download ZIP
เปิดโปรแกรม Arduino IDE ไปที่ Skecth -> Include Library -> Add .ZIP Library...
ไปที่ ไลบรารี Adafruit_TCS34725-master.zip ที่เรา ดาวน์โหลด มา -> Open
ตรวจสอบที่ Skecth -> Include Library จะพบ ไลบรารี Adafruit TCS34725 เพิ่มเข้ามาใน Arduino IDE ของเรา
1.3 อัพโหลดโค้ด
เชื่อมต่อสาย USB ระหว่าง คอมพิวเตอร์ กับ บอร์ด Arduino แล้ว เปิดโปรแกรม Arduino IDE เขียนโค้ดดังนี้
#include "Wire.h"
#include "Adafruit_TCS34725.h"
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X);
void setup() {
Serial.begin(9600);
Serial.println("RobotSiam.com - Color Sensor");
if (tcs.begin()) {
Serial.println("Found sensor");
} else {
Serial.println("No TCS34725 found ... check your connections");
while (1);
}
delay(1000);
}
void loop() {
uint16_t clearcol, red, green, blue;
float average, r, g, b;
delay(100);
tcs.getRawData(&red, &green, &blue, &clearcol);
average = (red + green + blue) / 3;
r = red / average;
g = green / average;
b = blue / average;
Serial.print("\tClear:"); Serial.print(clearcol);
Serial.print("\tRed:"); Serial.print(r);
Serial.print("\tGreen:"); Serial.print(g);
Serial.print("\tBlue:"); Serial.print(b);
if ((r > 1.4) && (g < 0.9) && (b < 0.9)) {
Serial.print("\tRed");
}
else if ((r < 0.95) && (g > 1.4) && (b < 0.9)) {
Serial.print("\tGreen");
}
else if ((r < 0.8) && (g < 1.2) && (b > 1.2)) {
Serial.print("\tBlue");
}
else if ((r > 1.15) && (g > 1.15) && (b < 0.7)) {
Serial.print("\tYellow");
}
else if ((r > 1.4) && (g < 1.0) && (b < 0.7)) {
Serial.print("\tOrange");
}
else {
Serial.print("\tNot Recognized");
}
Serial.println("");
delay(500);
}
ไปที่ Tools > Board เลือกเป็น Arduino/Genuino UNO
ในตัวอย่างเลือกเป็น "COM6"
(ถ้ายังว่าง หรือ เป็น COM1 ให้ตรวจสอบการติดตั้งไดร์เวอร์ การต่อสาย USB ของ Arduino UNO)
กดปุ่ม เพื่ออัพโหลด
หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง
1.4 ทดสอบการทํางาน
เปิดหน้าต่าง Serial Monitor โดยไปที่ Tools > Serial Monitor
ในกรณีที่ไม่ปกติ เช่น เช่นต่อสายไม่ถูก , เซ็นเซอร์สี TCS34725 ไม่ทำงาน จะแสดงข้อความ No TCS34725 found ... check your connections
ในกรณีที่ปกติ - นําวัตถุที่มีสีต่างๆมาทดสอบ ที่หน้าเซ็นเซอร์สี TCS34725 จะแสดงสีของวัตถุนั้นๆ
ถึงขั้นตอนนี้แสดงว่า เซ็นเซอร์สี TCS34725 ของเรานั้นพร้อมทำงานแล้ว
credit : https://www.makerblog.at/2015/01/farben-erkennen-mit-dem-rgb-sensor-tcs34725-und-dem-arduino/
2. ก๊อบปี้ไฟล์เสียง ลงใน Micro SD Card
ติดตั้งโปรแกรม SD Card Formatter 5.0 ใช้สำหรับ Format Disk สามารถดาวน์โหลดได้จากลิงก์
https://www.sdcard.org/downloads/formatter_4/eula_windows/
จากนั้นให้คลิกปุ่ม Accept โปรแกรม SD Formatter โปรแกรมจึงจะดาวน์โหลดสู่ คอมพิวเตอร์ของเรา แล้วติดตั้งเหมือนกับโปรแกรมทั่วไป
Micro SD Card , Class 10 ความจุ 16GB + Card Adapter
ให้เสียบ Micro SD Card เข้าไปใน Card Adapter
แล้วทำการ Format , Micro SD Card โดยใช้โปรแกรม SD Card Formatter
ถ้าเสียบ Card Adapter ที่บรรจุ Micro SD Card ได้ถูกต้อง ที่ Select card จะมี ไดรฟ์ ให้เลือก ในตัวอย่างจะเป็น ไดรฟ์ F:/ เลือก Quick format แล้ว คลิก Format
ดาวน์โหลดไฟล์เสียงตามลิงค์ด้านล่าง
คลายซิป แล้วก็อบปี้ ไปที่ SD Card
ตรวจสอบ ที่ SD Card จะพบไฟล์เสียง ที่ก็อบปี้ มา
นำ SD Card ใส่ในช่องซ็อกเก็ตของ Card Reader Module
3.1 เชื่อมต่อสาย ระหว่าง Arduino UNO กับ Card Reader Module
Arduino UNO
|
SD Card Module
|
5V
|
VCC
|
GND
|
GND
|
Pin 12
|
MISO (Master In Slave out)
|
Pin 11
|
MOSI (Master Out Slave In)
|
Pin 13
|
SCK (Synchronous Clock)
|
Pin 4
|
CS (Chip Select)
|
3.2 เชื่อมต่อสาย ระหว่าง Arduino UNO กับ Audio Amplifier Module
3.3 ติดตั้ง ไลบรารี TMRpcm
ดาวน์โหลด ไลบรารี
ไปที่ Clone or download -> Download ZIP
เปิดโปรแกรม Arduino IDE ไปที่ Skecth -> Include Library -> Add .ZIP Library...
ไปที่ ไลบรารี TMRpcm-master.zip ที่เรา ดาวน์โหลด มา -> Open
ตรวจสอบที่ Skecth -> Include Library จะพบ ไลบรารี TMRpcm เพิ่มเข้ามาใน Arduino IDE ของเรา
3.4 อัพโหลดโค้ด
เขียนโค้ด และ อัพโหลดโค้ด ดังนี้
#include <SD.h> #define SD_ChipSelectPin 4 #include <TMRpcm.h> #include <SPI.h> char x = '0'; TMRpcm music; void setup() { music.speakerPin = 9; Serial.begin(9600); if (!SD.begin(SD_ChipSelectPin)) { Serial.println("SD fail"); return; } } void loop() { if (Serial.available()) { x = Serial.read(); Serial.println(x); if (x == '1') { music.play("Blue.wav"); } if (x == '2') { music.play("Green.wav"); } if (x == '3') { music.play("Orange.wav"); } if (x == '4') { music.play("Red.wav"); } if (x == '5') { music.play("Yellow.wav"); } } }
3.4 ทดสอบการทํางาน
เปิดหน้าต่าง Serial Monitor โดยไปที่ Tools > Serial Monitor
พิมพ์คำสั่ง 1 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Blue.wav
พิมพ์คำสั่ง 2 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Green.wav
พิมพ์คำสั่ง 3 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Orange.wav
พิมพ์คำสั่ง 4 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Red.wav
พิมพ์คำสั่ง 5 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Yellow.wav
credit : https://circuitdigest.com/microcontroller-projects/arduino-audio-music-player
4. อัพโหลดโค้ดโปรเจค
#include "Wire.h"
#include "Adafruit_TCS34725.h"
#include <SD.h>
#define SD_ChipSelectPin 4
#include <TMRpcm.h>
#include <SPI.h>
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X);
TMRpcm music;
void setup() {
music.speakerPin = 9;
Serial.begin(9600);
Serial.println("RobotSiam.com - Color Sensor");
if (tcs.begin()) {
Serial.println("Found sensor");
} else {
Serial.println("No TCS34725 found ... check your connections");
while (1);
}
delay(1000);
if (!SD.begin(SD_ChipSelectPin)) {
Serial.println("SD fail");
return;
}
}
void loop() {
uint16_t clearcol, red, green, blue;
float average, r, g, b;
delay(100);
tcs.getRawData(&red, &green, &blue, &clearcol);
average = (red + green + blue) / 3;
r = red / average;
g = green / average;
b = blue / average;
Serial.print("\tClear:"); Serial.print(clearcol);
Serial.print("\tRed:"); Serial.print(r);
Serial.print("\tGreen:"); Serial.print(g);
Serial.print("\tBlue:"); Serial.print(b);
if ((r > 1.4) && (g < 0.9) && (b < 0.9)) {
Serial.print("\tRed");
music.play("Red.wav");
}
else if ((r < 0.95) && (g > 1.4) && (b < 0.9)) {
Serial.print("\tGreen");
music.play("Green.wav");
}
else if ((r < 0.8) && (g < 1.2) && (b > 1.2)) {
Serial.print("\tBlue");
music.play("Blue.wav");
}
else if ((r > 1.15) && (g > 1.15) && (b < 0.7)) {
Serial.print("\tYellow");
music.play("Yellow.wav");
}
else if ((r > 1.4) && (g < 1.0) && (b < 0.7)) {
Serial.print("\tOrange");
music.play("Orange.wav");
}
else {
Serial.print("\tNot Recognized");
}
Serial.println("");
delay(500);
}