วันพุธที่ 31 ธันวาคม พ.ศ. 2557

มาทำการ์ดอวยพรปีใหม่กันเถอะ

มาทำการ์ดอวยพรปีใหม่กันเถอะ

         ช่วงนี้เป็นช่วงส่งท้ายปีเก่าต้อนรับปีใหม่ ซึ่งหลายคนคงมองการ์ดอวยพรปีใหม่ให้คนสำคัญ วันนี้ก็เลยมีไอเดียทำการ์ดอวยพรปีใหม่มาฝากกันครับ คร่าวๆ ก็จะเป็นการ์ดอวยพรปีใหม่ที่มีเสียงเพลงอวยพรปีใหม่เมื่อผู้รับทำการหยิบการ์ดอวยพรขึ้นมา (อาจจะมีไฟกระพริบด้วยก็ได้นะครับ)
        โดยจะใช้เทคนิคของ Capacitive Touch ในการเล่นไฟล์เสียง โดยจะทำงานเมื่อมีการสัมผัสโดนการ์ดอวยพรที่ติดตั้ง Arduino ที่สามารถเล่นไฟล์เสียงได้ ซึ่ง Arduino Pro Mini จะเล่นไฟล์ .wav ที่บันทึกไว้ใน SD Card ซึ่งไฟล์ .wav นี้จะเก็บข้อมูลที่เป็น Digital โดยมีชื่อว่า Pulse-Coded Modulation (PCM) หลายคนคงเคยคุ้นหูหรืออาจจะเคยรู้จักกับไฟล์ประเภทนี้มาบ้างแล้ว และเจ้า Arduino สามารถแปลง ข้อมูลที่เป็น Digital กลับไปเป็นสัญญาณ Analog (Digital to Analog Converter) หรือเรียกสั้นๆว่า DAC และส่งกลับไปยังลำโพงกลายเป็นเสียงได้ โดยใน Arduino Pro Mini มีวงจรประเภทนี้อยู่แล้วด้วย โดยมีชื่อว่า Pulse Width Modulation (PWM) แต่ด้วยข้อจำกัดที่ว่า Arduino Pro Mini เป็น MCU 8 bit และมีสัญญาณนาฬิกาแค่ 16 MHz จึงทำให้เล่นไฟล์เสียงที่มีคุณภาพแค่ 8 bit Mono ที่ sample rate ไม่เกิน 22 KHz
เท่านั้น
        หลังจากที่ได้เข้าใจหลักการเรียบร้อยแล้วเรามาทำการประกอบวงจรกันเลยครับ โดยจะต้องมีอุปกรณ์ดังต่อไปนี้ครับ (แบบประหยัดใช้อุปกรณ์น้อยที่สุด)

                 1. Arduino Pro Mini ATMega328
                 2. การ์ดอวยพร
                 3. สายไฟเชื่อมต่อวงจร
                 4.คลิปหนีบกระดาษ
                 5. Resistor    1 ~ 10 Mega ohm   1    ตัว (ค่ายิ่งเยอะขอบเขตของช่วงข้อมูลยิ่งกว้าง)
                 6. แบตเตอรี่  AAA 1.5V 2 ก้อน ( 3.0 V Arduino สามารถทำงานได้ )
                 7. ลำโพงขนาดเล็ก
                 8. SD Card Module for Arduino
                 9. SD Card Class 4 ฟอร์แมตแบบ Fat32 และใส่ไฟล์เสียง .wav @sample rate 22 KHz 8 bit Mono (เป็นเพลงหรือข้อความเสียงก็ตามแต่แนวความคิดของแต่ละคนเลยครับ)
          (แต่ถ้าใคร อยากให้ถูกต้องตามหลักจริงๆ รายการอุปกรณ์จะเยอะกว่านี้มาก ดูตามในเว็บอ้างอิงเลยครับ และแหล่งจ่ายไฟอาจจะใช้เป็นถ่าน 9V แล้วใช้ Regulator แปลงให้เป็น 5V กับ 3.3V หรือจะใช้ Arduino UNO แทนก็ได้นะครับเพราะมีวงจรแปลงไฟให้ในตัวแล้ว)

          จากนั้นก็ต่อวงจรตามรูปด้านล่างได้เลยครับ (วิธี upload program ดูจากบทความที่ผ่านมานะครับ)



         หลังจากนั้นก็ใส่โค๊ดให้กับ Arduino Pro Mini ของเรากัน ด้วยโค๊ดด้านล่าง

#include <SD.h>
#include <TMRpcm.h>
#include <CapacitiveSensor.h>

TMRpcm tmrpcm;

CapacitiveSensor cs_7_4 = CapacitiveSensor(7, 4);

int errLED = 3;
int chipSelect = 10;
long capVal = 0;

void setup() {
  Serial.begin(9600);
  pinMode(chipSelect, OUTPUT);
  pinMode(errLED, OUTPUT);
  if (!SD.begin(chipSelect, SPI_QUARTER_SPEED)) {
    // if SD Card error Red Led is on
    digitalWrite(errLED, HIGH);
    return;
  }
  // set speaker pin to pin 9
  tmrpcm.speakerPin = 9;
}

void loop(void) {
  // connect pin 7 and pin 4 for capacitive sensor
  capVal = cs_7_4.capacitiveSensor(10);
  if(!tmrpcm.isPlaying() && capVal > 100) {
    tmrpcm.stopPlayback();
    // your wave file name
    tmrpcm.play("/newyear.wav"); 
  }
}

         เมื่อจ่ายไฟให้กับ Arduino Pro Mini เรียบร้อยแล้วก็พร้อมที่จะเล่นเพลงได้แล้วครับ
ดังวีดีโอด้านล่าง



         ปีใหม่นี้ ก็ขอให้ท่านผู้อ่านลองคิดไอเดียร์ทำการ์ดอวยพรกันดูนะครับ อาจจะเป็นวาระอื่นๆ เช่น
วาเลนไทน์ วันเกิด หรืออาจจะทำเป็นวงจรเสียงอื่นๆ ก็ตามแต่จะประยุกต์ใช้กันนะครับ แต่คุณภาพเสียงว่ากันว่าเสียงดีกว่าวิทยุ AM นะครับ และถ้าหากใครมีโปรเจคที่น่าสนใจก็สามารถแชร์ความรู้กันทาง gtalk หรือทางเมลล์ได้นะครับ olekhanchai@gmail.com หรือสนใจอุปกรณ์สามารถเข้าสั่งซื้อได้ในเว็บ http://www.hobbyembshop.biz หรือที่ https://www.facebook.com/hobbyembedded  
          ขอให้มีความสุขในวันปีใหม่นะครับ เวอร์ชันนี้ยังมีปัญหาเรื่องค่าที่อ่านได้จาก Capacitive Sensor ยังไม่เสถียร ค่าค่อนข้างแกว่งมาก สื่อนำต่างกันค่าจะต่างกัน ต้องลองใช้สาย USB to Serial ดูค่าการเปลี่ยนแปลงและลองปรับค่า capacitiveSensor(samples rate)  และค่าเช็ค capVal กันดูนะครับ ไว้คราวหน้าจะปรับปรุงโค๊ดให้ดีขึ้น หรือถ้าใครมีวิธีแก้ไขปัญหาดังกล่าวก็แชร์กันได้นะครับ เจอกันปีหน้า สุขสันต์วันปีใหม่ครับ...
      

อ้างอิง   
http://playground.arduino.cc//Main/CapacitiveSensor?from=Main.CapSense
http://apcmag.com/arduino-project-5-digital-audio-player.htm