ธันวาคม 06, 2019, 09:09:07 pm *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ส่งอีเมล์ยืนยันการใช้งาน?

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: ต้องการความช่วยเหลือการรับค่าจาก piezo ด้วย arduino  (อ่าน 4614 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
neozalord
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 2


| |
« เมื่อ: เมษายน 18, 2014, 03:29:40 pm »

ผมต้องการทำกลองชุดโดยที่ใช้ piezo เป็น drum trigger รับค่าความแรงจากที่เราตีลงมา ปัญหาคือ เมื่อเคาะ piezo 1 ครั้ง ได้ค่าที่ arduino อ่านออกมามีหลายค่า ซึ่งพอลองหาข้อมูลในเนตพบว่า piezo ผลิตแรงดันออกมาเป็นคลื่นแบบ sin wave จึงทำให้ค่าที่ได้มีหลายค่าและไม่นิ่ง

พอจะมีวิธีใดบ้างที่ทำให้เราได้ค่าสูงสุดในการเคาะแต่ละครั้งเพียง 1 ค่าบ้างครับ
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #1 เมื่อ: เมษายน 27, 2014, 07:19:14 am »

ค่าสูงสุด ต่ำสุด หรือค่าใดๆ จัดการได้ด้วยโปรแกรมครับ
บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
neozalord
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 2


| |
« ตอบ #2 เมื่อ: พฤษภาคม 01, 2014, 08:13:31 am »

พอจะยกตัวอย่างโปรแกรมได้ไหมครับ ผมพึ่งจับตัว arduino และไม่มีพื้นฐานด้านโปรแกรมเท่าไหร่ ค้นคว้าเวปต่างประเทศเขาแนะนำให้ใช้วงจร low pass filter ร่วมด้วย เมื่อผมลองดูแล้วยังใช้งานได้ไม่ดีเท่าที่ควร

นี่ตัวอย่างโคดที่ผมใช้ครับ
Code: (c)
int pin[6]={A0,A1,A2,A3,A4,A5}; //ตั้งค่าขาอินพุต
unsigned int val=0; //รับความแรงการตี

int threshold[6]={400,400,300,400,400,300}; //ถ้าค่าน้อยความไวเยอะ

int note[6]={36,38,49,71,69,77}; //โนตคีย์บอร์ด
int cutoff[6]={10,10,10,10,10,10}; //ค่าขั้นต่ำทำให้เกิดเสียง ต่ำมากช่วงจะกว้าง แต่เกิดเสียงซ้ำง่าย(ค่าข้อมูลดิบ)

unsigned long set_time[6]={0,0,0,0,0,0};

int maxplaytime[6] = {100,100,100,100,100,100};
int pinplaytime[6] = {0,0,0,0,0,0};
int active[6]={0,0,0,0,0,0};

void setup()
{
  Serial.begin(115200);
}



void loop()
{
   Playpin(0);
   Playpin(1);
   Playpin(2);
   Playpin(3);
   Playpin(4);
   Playpin(5);
}

void Playpin(int input)
{
    delay(set_time[input]);
    val=analogRead(pin[input]);
   
    if (val>=cutoff[input])
    {
      if(active[input]==0)
      {
        while(analogRead(pin[input])>=val)
        {
          val=analogRead(pin[input]);
        }
        val=val*127/threshold[input];
        if(val>127) val=127;
        if(val<0) val=0;         
        noteOut(144,note[input],val);
        active[input]=1;
      }
      else
      {
        pinplaytime[input]=pinplaytime[input]+1;
      }     
    }else if(active[input]==1)
    {
      pinplaytime[input]=pinplaytime[input]+1;
      if(pinplaytime[input] > maxplaytime[input])
      {
        active[input]=0;
        noteOut(128,note[input],127);
        pinplaytime[input]=0;
      }
    }             
}

void noteOut(int cmd,int pitch,int velocity)
{
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
 
}
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #3 เมื่อ: พฤษภาคม 02, 2014, 06:31:02 pm »

อ้างถึง
พอจะยกตัวอย่างโปรแกรมได้ไหมครับ ผมพึ่งจับตัว arduino และไม่มีพื้นฐานด้านโปรแกรมเท่าไหร่ ค้นคว้าเวปต่างประเทศเขาแนะนำให้ใช้วงจร low pass filter ร่วมด้วย เมื่อผมลองดูแล้วยังใช้งานได้ไม่ดีเท่าที่ควร
ไม่มีตัวอย่างให้ครับ ที่ผมบอกไปก่อนหน้า มันคือเรื่องของการเขียนโปรแกรมเบื้องต้น มีให้ศึกษามากมาย
พื้นฐานและประสบการณ์ ต้องแลกมาด้วยความพยายามครับ
การใช้วงจรเข้ามาช่วย เป็นทางออกที่ดี หากไม่ถนัดเรื่องการเขียนโปรแกรม
ในทางกลับกัน ถ้าไม่ถนัดเขียนโปรแกรม วงจรดีแค่ไหนก็อาจจะช่วยอะไรได้ไม่มาก หากระบบนั้นยังคงทำงานด้วยโปรแกรมเป็นหลัก

ที่ว่ายังใช้งานไม่ดีเท่าไร่หมายความว่าอะไร? อะไรคือ "ดี" ที่คุณคาดหวัง และคิดโปรแกรมส่วนไหนเ็นสาเหตุ? ลองฝึกถาม ฝึกตอบตัวเองแบบนี้ ถ้าไม่ได้ ให้แยกถามเป็นข้อๆ อธิบายปัญหาให้ชัดเจน
บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
sodanum
Global Moderator
Jr. Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 59


| |
« ตอบ #4 เมื่อ: พฤษภาคม 09, 2014, 12:28:39 pm »

แบบที่ 1  :  ตี piezo  เสียงกลองดังเท่ากัน

แบบที่ 2  : เสียงกลองออก หนักเบา ตามความแรงในการตี piezo












บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: