ข้ามไปที่เนื้อหาหลัก

14วัดระดับเสียง / เสียงใน dB ด้วยไมโครโฟนและ Arduino

วัดระดับเสียง / เสียงใน dB ด้วยไมโครโฟนและ Arduino

ARDUINO
วัดระดับเสียง / เสียงใน dB ด้วยไมโครโฟนและ Arduinoวัดระดับเสียง / เสียงใน dB ด้วยไมโครโฟนและ Arduino
มลพิษทางเสียงเริ่มมีความสำคัญเนื่องจากความหนาแน่นของประชากรสูง หูของมนุษย์ทั่วไปได้ยินระดับเสียงจาก 0dB ถึง 140dB ซึ่งระดับเสียงจาก 120dB ถึง 140dB ถือว่าเป็นสัญญาณรบกวน ระดับความดังหรือระดับเสียงโดยทั่วไปวัดได้ที่เดซิเบล (dB) เรามีเครื่องมือบางอย่างที่สามารถวัดสัญญาณเสียงเป็น dB แต่เหล่านี้มีราคาแพงเล็กน้อยและเศร้าเราไม่มีโมดูลเซนเซอร์กล่องเพื่อวัดระดับเสียงในเดซิเบล และไม่ควรซื้อไมโครโฟนราคาแพงสำหรับโครงการ Arduinoขนาดเล็กซึ่งควรวัดระดับเสียงในห้องเรียนหรือห้องนั่งเล่นขนาดเล็ก
ดังนั้นในโครงการนี้เราจะใช้ไมโครโฟน Electret Condenserปกติกับ Arduinoและลองวัดระดับมลพิษทางเสียงหรือเสียงใน dB ให้ใกล้เคียงกับค่าจริงมากที่สุด เราจะใช้วงจรขยายสัญญาณปกติเพื่อขยายสัญญาณเสียงและป้อนให้ Arduino ซึ่งเราจะใช้วิธีการถดถอยเพื่อคำนวณสัญญาณเสียงเป็น dB เพื่อตรวจสอบว่าค่าที่ได้ถูกต้องหรือไม่นั้นเราสามารถใช้แอพพลิเคชัน "Sound Meter" androidถ้าคุณมีเครื่องวัดที่ดีกว่าคุณสามารถใช้สำหรับสอบเทียบได้ โปรดสังเกตว่าโครงการนี้ไม่ได้มีจุดมุ่งหมายเพื่อวัด dB ได้อย่างถูกต้องและจะให้ค่าใกล้เคียงกับค่าที่แท้จริง

วัสดุที่จำเป็น:

  1. Arduino UNO
  2. ไมโครโฟน
  3. LM386
  4. POT ตัวแปร 10K
  5. ตัวต้านทานและตัวเก็บประจุ

แผนภูมิวงจรรวม:

 การวัดเสียงใน dB ด้วยไมโครโฟนและแผนภาพวงจร Arduino
วงจรสำหรับArduino Sound Level Meterนี้ง่ายมากที่เราได้ใช้วงจรเครื่องขยายสัญญาณเสียง LM386 เพื่อขยายสัญญาณจากไมโครโฟนคอนเดนเซอร์และนำไปต่อกับพอร์ต Analog ของ Arduino เราได้ใช้ LM386 IC นี้ในการสร้างเครื่องขยายเสียงเครื่องเสียงต่ำวงจรและวงจรมากหรือน้อยยังคงเหมือนเดิม
การเพิ่มขึ้นของ op-amp นี้สามารถตั้งค่าได้ตั้งแต่ 20 ถึง 200 โดยใช้ตัวต้านทานหรือตัวเก็บประจุในพินที่ 1 และ 8 หากไม่มีค่าใช้จ่ายใด ๆ จะได้รับค่าเริ่มต้นเป็นค่าเริ่มต้น 20 สำหรับโครงการของเราเราได้รับประโยชน์สูงสุดจากวงจรนี้ดังนั้นเราจึงใช้ตัวเก็บประจุที่มีค่า 10uF ระหว่างพิน 1 และ 8 โปรดสังเกตว่าขานี้เป็นขั้วที่มีความละเอียดอ่อนและขาพินของตัวเก็บประจุควรเชื่อมต่อกับขา 8 เครื่องขยายเสียงสมบูรณ์ วงจรขับเคลื่อนด้วยขา 5V จาก Arduino  
Capacitor C2 ใช้เพื่อกรองเสียง DC จากไมโครโฟน โดยทั่วไปเมื่อเสียงไมโครโฟนส่งเสียงคลื่นเสียงจะถูกแปลงเป็นสัญญาณ AC สัญญาณ AC นี้อาจมีเสียง DC บางตัวควบคู่ไปด้วยซึ่งจะถูกกรองโดยตัวเก็บประจุนี้ ในทำนองเดียวกันแม้หลังจากการขยายตัวตัวเก็บประจุ C3 จะถูกใช้เพื่อกรองเสียง DC ใด ๆ ที่อาจถูกเพิ่มเข้าไปในระหว่างการขยายสัญญาณ
การวัดเสียงด้วยเดซิเบลโดยใช้ไมโครโฟนและ Arduino

 

ใช้วิธีการถดถอยเพื่อคำนวณ dB จาก ADC ค่า:

เมื่อเราพร้อมกับวงจรของเราแล้วเราสามารถเชื่อมต่อ Arduino เข้ากับคอมพิวเตอร์และอัปโหลดโปรแกรม"Analog Read Serial"จาก Arduino เพื่อตรวจสอบว่าเราได้รับค่า ADC จากไมโครโฟนที่ถูกต้องหรือไม่ ตอนนี้เราต้องแปลงค่า ADC นี้เป็น dB
ไม่เหมือนกับค่าอื่น ๆ เช่นวัดอุณหภูมิหรือความชื้นการวัดค่า dB ไม่ใช่เรื่องง่าย เพราะค่าของเดซิเบลจะไม่เชิงเส้นที่มีค่าของ ADC มีวิธีการบางอย่างที่คุณสามารถเข้าถึงได้ แต่ทุกขั้นตอนที่เป็นไปได้ที่ฉันพยายามไม่ได้รับผลดี คุณสามารถอ่านฟอรัม Arduino นี้ได้ที่นี่หากคุณต้องการลอง
สำหรับแอ็พพลิเคชันของฉันฉันไม่จำเป็นต้องมีความแม่นยำมากในขณะที่วัดค่า dB และด้วยเหตุนี้จึงตัดสินใจที่จะใช้วิธีปรับเทียบค่า ADC กับค่า dB ได้ง่ายขึ้น สำหรับวิธีนี้เราจะต้องใช้เครื่องวัด SPL (เครื่องวัดค่า SPL เป็นเครื่องมือที่สามารถอ่านค่า dB และแสดงผลได้) แต่อย่างเศร้าฉันไม่มีใครแน่ใจว่าส่วนใหญ่ของเราจะไม่เป็นเช่นนั้น ดังนั้นเราจึงสามารถใช้แอปพลิเคชัน Android ที่เรียกว่า "มิเตอร์เสียง"ซึ่งสามารถดาวน์โหลดได้จากร้านค้าเพลย์ฟรี มีหลายประเภทเช่นการประยุกต์ใช้และคุณสามารถดาวน์โหลดสิ่งที่คุณเลือก แอปพลิเคชันเหล่านี้ใช้ไมโครโฟนฝังอยู่ในโทรศัพท์เพื่อตรวจจับระดับเสียงและแสดงบนโทรศัพท์มือถือของเรา พวกเขาไม่ถูกต้องมาก แต่แน่นอนจะทำงานให้กับงานของเรา ลองเริ่มต้นด้วยการติดตั้งแอพพลิเคชันแอนดรอยด์เมื่อเปิดดูแล้วจะมีลักษณะเช่นนี้
แอปพลิเคชัน Android Meter
ดังที่ได้กล่าวไปแล้วความสัมพันธ์ระหว่างค่า dB และ Analog จะไม่เป็นเส้นตรงดังนั้นเราจึงจำเป็นต้องเปรียบเทียบค่าสองค่าเหล่านี้ในแต่ละช่วงเวลา เพียงจดบันทึกค่าของ ADC ที่แสดงบนหน้าจอสำหรับค่าความต่างที่แสดงบนโทรศัพท์มือถือของคุณ ฉันอ่านประมาณ 10 ครั้งและดูเหมือนว่าด้านล่างนี้คุณอาจแตกต่างกันเล็กน้อย
เปรียบเทียบค่า ADC Arduino กับค่าเดซิเบล
เปิดหน้า excel และพิมพ์ค่าเหล่านี้ตอนนี้เราจะใช้ Excel เพื่อหาค่าการถดถอยสำหรับตัวเลขด้านบน ก่อนหน้านี้เราจะวางแผนกราฟและตรวจสอบว่าทั้งสองเกี่ยวข้องกับอะไรฉันมองไปที่ด้านล่างนี้
กราฟระหว่าง Arduino ADC กับค่า Db ที่เกิดขึ้นจริง
เนื่องจากเราสามารถเห็นค่าของ dB ไม่เกี่ยวเนื่องกับ ADC ซึ่งหมายความว่าคุณไม่สามารถมีตัวคูณทั่วไปสำหรับค่า ADC ทั้งหมดเพื่อให้ได้ค่า dB ที่เทียบเท่า ในกรณีเช่นนี้เราสามารถใช้วิธีการ"การถดถอยเชิงเส้น"ได้ โดยทั่วไปมันจะแปลงเส้นสีน้ำเงินที่ผิดปกตินี้ไปเป็นเส้นตรงที่ใกล้เคียงที่สุด (เส้นสีดำ) และให้สมการของเส้นตรงนั้น สมการนี้สามารถใช้เพื่อหาค่าเทียบเท่าของ dB สำหรับทุกค่าของ ADC ที่ Arduino มาตรการ
ใน Excel เรามีปลั๊กอินสำหรับการวิเคราะห์ข้อมูลซึ่งจะคำนวณการถดถอยสำหรับชุดค่าและเผยแพร่ข้อมูลโดยอัตโนมัติ ฉันจะไม่ครอบคลุมวิธีการทำกับ excel เนื่องจากอยู่นอกขอบเขตของโครงการนี้นอกจากนี้คุณยังสามารถเรียนรู้เกี่ยวกับ Google ได้โดยง่าย เมื่อคุณคำนวณการถดถอยสำหรับค่า Excel จะให้ค่าบางอย่างตามที่แสดงด้านล่าง เราสนใจเฉพาะตัวเลขที่เน้นด้านล่างเท่านั้น
การคำนวณการถดถอยสำหรับการวัดเสียงในหน่วย dB กับไมโครโฟนและอาร์บูดิโน
เมื่อได้ตัวเลขเหล่านี้แล้วคุณจะสามารถสร้างสมการด้านล่างได้เช่น
ADC = (11.003 * dB) - 83.2073
จากที่คุณสามารถหาค่า dB ให้เป็นได้
dB = (ADC + 83.2073) / 11.003
คุณอาจต้องขับสมการของคุณเองเนื่องจากการสอบเทียบอาจแตกต่างออกไป อย่างไรก็ตามเก็บค่านี้ไว้ให้ปลอดภัยเพราะเราจำเป็นต้องใช้โปรแกรมนี้ในขณะเขียนโปรแกรม Arduino

Arduino โปรแกรมวัดระดับเสียงใน dB:

โปรแกรมที่สมบูรณ์แบบในการวัดค่า dB จะแสดงไว้ด้านล่างนี้
ในสองบรรทัดข้างต้นเราอ่านค่า ADC ของขา A0 และแปลงเป็น dB โดยใช้สมการที่เราเพิ่งได้รับ ค่า dB นี้อาจไม่ถูกต้องกับค่า dB จริง แต่ยังคงใกล้เคียงกับค่าที่แสดงในแอ็พพลิเคชันมือถืออยู่มาก
adc = analogRead (MIC); // อ่านค่า ADC จาก amplifer
dB = (adc + 83.2073) / 11.003; // แปลงค่า ADC เป็น dB โดยใช้ค่าการถดถอย
เพื่อตรวจสอบว่าโปรแกรมทำงานได้ถูกต้องหรือไม่เราได้เพิ่ม LED ลงในขา 3 ซึ่งทำมาให้อยู่สูงเป็นเวลา 1 วินาทีเมื่อ Arduino ใช้เสียงดังเกิน 60 dB
ถ้า (dB> 60)
{
  digitalWrite (3, HIGH); / / เปิดไฟ LED (HIGH คือระดับแรงดันไฟฟ้า)
  ล่าช้า (1000) / รอสักครู่
  digitalWrite (3, ต่ำ);
}

การทำงานของ Arduino Sound Level Meter:

เมื่อคุณพร้อมที่จะใช้รหัสและฮาร์ดแวร์แล้วเพียงแค่อัปโหลดโค้ดและเปิดจอภาพอนุกรมเพื่อดูค่า dB ที่วัดโดย Arduino ของคุณ ฉันถูกทดสอบรหัสนี้ในห้องของฉันที่มีไม่มากเสียงยกเว้นการจราจรด้านนอกและฉันได้ด้านล่างค่าในจอภาพอนุกรมของฉันและโปรแกรมหุ่นยนต์ยังแสดงบางสิ่งบางอย่างใกล้เคียงกับนี้
Arduino เป็นมิเตอร์วัดเสียง
การทำงานที่สมบูรณ์ของโครงการสามารถพบได้ที่วิดีโอที่ระบุในตอนท้ายของหน้านี้ คุณสามารถใช้เพื่อคาดการณ์โครงการเพื่อตรวจจับเสียงในห้องและตรวจสอบว่ามีกิจกรรมใดหรือมีเสียงรบกวนเกิดขึ้นในแต่ละห้องเรียนหรืออะไรบางอย่างเช่นนี้ ฉันเพิ่งทำ LED ไปสูงเป็นเวลา 2 วินาทีถ้ามีเสียงที่บันทึกไว้ข้างต้น 60dB
การทำงานเป็นที่น่าพอใจแปลก ๆ แต่สามารถใช้งานได้สำหรับโครงการและต้นแบบพื้นฐานอื่น ๆ มีการขุดพบน้อยมากฉันพบว่าปัญหาเกิดขึ้นจริงกับฮาร์ดแวร์ซึ่งยังคงให้ความรู้สึกแก่ฉันอยู่ในขณะนี้ ดังนั้นฉันจึงลองใช้วงจรอื่น ๆ ที่ใช้ในบอร์ดไมโครโฟนที่มีประกายไฟที่มีตัวกรองความถี่ต่ำและสูงผ่าน ฉันได้อธิบายวงจรด้านล่างเพื่อให้คุณลอง

แอมพลิฟายเออร์ที่มีตัวกรองวงจร:

ที่นี่เราได้ใช้ Low pass และ High Pass Filter กับ Amplifier เพื่อลดสัญญาณรบกวนในวงจรวัดระดับเสียงเพื่อเพิ่มความถูกต้อง
การวัดเสียงใน dB ด้วยไมโครโฟนและแผนภาพวงจร Arduino ด้วยตัวกรองความถี่สูงและต่ำ
ในวงจรข้างต้นนี้เราได้ใช้เครื่องขยายสัญญาณ LM358 ที่ได้รับความนิยมเพื่อขยายสัญญาณจากไมโครโฟน พร้อมกับเครื่องขยายเสียงเราได้นอกจากนี้ยังใช้สองตัวกรองที่สูงผ่านการกรองจะเกิดขึ้นโดย R5, C2 และ low-pass filter จะถูกใช้โดย C1 และ R2 ตัวกรองเหล่านี้ได้รับการออกแบบมาเพื่อให้มีความถี่เฉพาะตั้งแต่ 8Hz ถึง 10KHz เนื่องจากตัวกรองความถี่ต่ำจะกรองอะไรที่ต่ำกว่า 8Hz และตัวกรอง High Pass จะกรองอะไรที่มากกว่า 15KHz ช่วงความถี่นี้ถูกเลือกเนื่องจากไมโครโฟนคอนเดนเซอร์ของฉันทำงานได้เฉพาะตั้งแต่ 10Hz ถึง 15KHZ ดังที่แสดงในแผ่นข้อมูลด้านล่าง
รายละเอียดไมโครโฟนจากแผ่นข้อมูล
หากความต้องการของความถี่เปลี่ยนไปคุณสามารถใช้สูตรด้านล่างเพื่อคำนวณค่า Resistor และ Capacitor สำหรับความถี่ที่ต้องการได้
ความถี่ (F) = 1 / (2πRC)
นอกจากนี้โปรดทราบว่าค่าของตัวต้านทานที่ใช้ที่นี่จะมีผลต่อการรับสัญญาณของเครื่องขยายเสียง การคำนวณค่าตัวต้านทานและตัวเก็บประจุที่ใช้ในวงจรนี้จะแสดงด้านล่าง คุณสามารถดาวน์โหลดexcel sheet ได้จากที่นี่เพื่อปรับค่าความถี่และคำนวณค่าการถดถอย
การคำนวณค่าตัวเก็บประจุและตัวเก็บประจุสำหรับการวัดเสียงในหน่วย dB ด้วยไมโครโฟนและอาร์บูดิโน
วงจรเดิมทำงานได้ดีพอสมควรสำหรับความคาดหวังของฉันดังนั้นฉันจึงไม่เคยลองแบบนี้มาก่อน หากคุณเกิดขึ้นเพื่อลองวงจรนี้จะแจ้งให้เราทราบว่ามันทำงานได้ดีขึ้นกว่าก่อนหน้านี้ผ่านความเห็น
รหัส
const int MIC = 0; //the microphone amplifier output is connected to pin A0
int adc;
int dB, PdB; //the variable that will hold the value read from the microphone each time
void setup() {
Serial.begin(9600); //sets the baud rate at 9600 so we can check the values the microphone is obtaining on the Serial Monitor
  pinMode(3, OUTPUT);
}
void loop(){
  PdB = dB; //Store the previous of dB here
  
adc= analogRead(MIC); //Read the ADC value from amplifer 
//Serial.println (adc);//Print ADC for initial calculation 
dB = (adc+83.2073) / 11.003; //Convert ADC value to dB using Regression values
if (PdB!=dB)
Serial.println (dB);
if (dB>60)
{
  digitalWrite(3, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(2000);                       // wait for a second
  digitalWrite(3, LOW); 
}
//delay(100);
}

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

Flowchart

12เครื่องวัดความเร็วอะนาล็อกใช้ Arduino และเซ็นเซอร์ IR

10อัลตราโซนิกเซนเซอร์ตรวจจับระยะไกลใน ARDUINO พร้อม TINKERCAD