ध्वनि स्तर मीटर के रूप में आरपीआई?


10

मेरी बेटी के विज्ञान मेले प्रोजेक्ट (कंप्यूटर विज्ञान और गणित श्रेणी) के लिए, वह आरपीआई का उपयोग करने के लिए चारों ओर जाना और मापना चाहेगी कि क्या विभिन्न तेज आवाजें दर्द की दहलीज से ऊपर हैं और हमारे कानों को नुकसान पहुंचा रही हैं। वह एक 6 वीं ग्रेडर है, लेकिन उसे आरपी और पायथन में प्रोग्रामिंग के साथ अनुभव है। फिलिप हील्स निकोल्स ने एफबी आरपीआई पेज पर कुछ सवालों के जवाब दिए हैं, लेकिन सुझाव दिया है कि हम यहां अधिक मदद के लिए आते हैं। वह एक ध्वनि दबाव मीटर (मेरे पास इनमें से एक है) के साथ पाई को कैलिब्रेट करना चाहता है ताकि यह पता चले कि कितने मिलिवोल्ट्स का उत्पादन किया जाता है

यहाँ हम अभी तक क्या सोच रहे हैं। हमने adafruit से एक adc (mcp3008) खरीदा और इसके आने का इंतजार कर रहे हैं। अगर हम डिजिटल आउटपुट को adc से GPIO पिन 11 और GPIO पिन 12 से एक लाल एलईडी से जोड़ते हैं, तो क्या यह सरल प्रोग्राम काम करेगा?

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.IN)
GPIO.setup(12,GPIO.OUT)
GPIO.output(12,GPIO.LOW)    #make sure LED is off
SPL=0 #zero the variable

While SPL<??:            #Where ?? is the value in millivolts produced by a sound at 130 db
    SPL=GPIO.input(11)   #get value from adc connected to microphone
GPIO.output(12,GPIO.HIGH)   #turn LED on if the sound level is higher than ??

यदि यह काम करेगा, तो GPIO पिन से जुड़े बटन के प्रेस के साथ प्रोग्राम को रीसेट करने के लिए अंत में क्या कोड रखा जा सकता है? वह चाहती है कि यह पोर्टेबल हो, इसलिए वह प्रोग्राम को फिर से चलाने के लिए कमांड टाइप नहीं कर पाएगी।


किसी कारण से, कोड कट गया। मुझे फिर से प्रयास करने दें: RPIO.GPIO को GPIO GPIO.setmode (GPIO.BOARD) GPIO.setup (11, GPIO.IN) GPIO.setup (12, GPIO.OUT) GPIO.UTput (12, GPIO.LOW) # के रूप में आयात करें सुनिश्चित करें कि एलईडी SPL = 0 # है और परिवर्तनशील है जबकि SPL <??: # कहां है? 130 db SPL = GPIO.input (11) #get पर एक ध्वनि से उत्पन्न मिलीवोल्ट का मान adc से माइक्रोफोन GPIO.output (12, GPIO.HIGH) #turn से जुड़ा होता है यदि ध्वनि स्तर से अधिक है? ?
user5769

1
आप अपनी पोस्ट को संपादित कर सकते हैं, यदि आप कोड के सामने 4 स्थान रखते हैं, तो यह इसे एक विशेष "कोड" बॉक्स में डालता है, और स्वरूपण करता रहता है। इसे पढ़ने में बहुत आसान बनाता है। वास्तव में सवाल से संबंधित नहीं है, लेकिन यह एक 6 वीं ग्रेडर के लिए प्रभावशाली है !!!! काश मैं उस युवा को शुरू करता।
इंपल्स

1
ब्याज से बाहर, क्या / मॉडल ध्वनि दबाव मीटर है?
पुनर्वसु

मीटर से उत्पादन पूर्व प्रवर्धित है? अन्यथा, MCP3008 को पढ़ने के लिए माइक्रोफ़ोन आउटपुट बहुत छोटा होगा।
scruss

ध्यान दें कि आप केवल ADC का उपयोग ध्वनि दबाव को सार्थक रूप से मापने के लिए नहीं कर सकते हैं। आपको या तो दोलन तरंग को मापना चाहिए और फिर इसे सॉफ्टवेयर में आयाम (संभवतः वास्तविक मीटर के रूप में आवृत्ति-निर्भर भार को लागू करना) को मापना चाहिए या इससे पहले कि एडीसी तक पहुंचने से पहले संकेत को ठीक कर दें। एल्गोरिथ्म का अंदाजा लगाने के लिए आप साउंडकार्ड के साथ पीसी का उपयोग करके कुछ प्रयोग चलाना चाहते हैं।
क्रिस स्ट्रैटन

जवाबों:


3

RPI GPIO के 11 को पिन करने के लिए ADC के डिजिटल आउट पिन को जोड़ने से SPI बस का उपयोग करने से काम नहीं चलेगा। इस बस को सटीक होने के लिए कुछ और तारों की आवश्यकता है, 4।

ADC को ठीक से कार्य करने के लिए एक SPI इनपुट, क्लॉक और चिप सेलेक्ट पिन की आवश्यकता होगी। सौभाग्य से कई स्रोतों से इस पर अच्छी जानकारी उपलब्ध है।

सबसे पहले अगर आप SPI के कामकाज के बारे में कुछ और जानना चाहते हैं, तो मेरा सुझाव है कि SPI को बेहतर तरीके से जानने के लिए विकिपीडिया पर इस पेज को पढ़ें ।

दूसरा , Adafruit का एक बहुत अच्छा ट्यूटोरियल है जो वास्तव में इस विषय पर चर्चा करता है, इसमें Python कोड शामिल है और ADC को स्वयं कनेक्ट करने और इसके साथ संचार करने की प्रक्रियाओं के माध्यम से आपका मार्गदर्शन करता है। एक (मामूली) नुकसान यह है कि इस ट्यूटोरियल में प्रयुक्त कोड SPI पोर्ट का उपयोग नहीं करता है, यह सॉफ्टवेयर SPI बस (जिसे बिट-बैंगिंग कहा जाता है) का अनुकरण करता है, इसका मतलब है कि आप GPIO पोर्ट पर पिन का उपयोग करने के लिए अधिक स्वतंत्र हैं तुम्हें चाहिए।

मुझे लगता है कि आपके अपेक्षाकृत सरल प्रोजेक्ट के लिए (हालांकि मुझे खुशी है कि आजकल 6 वें ग्रेडर इस प्रकार के कार्य करते हैं!, उनके लिए इस प्रकार के प्रोजेक्ट बनाकर उन पर बहुत सी नई जानकारी डाली जाती है), बिट-बैंगिंग समाधान बस काम करेगा ठीक। बिट बैंगिंग का उपयोग करने का एक फायदा यह है कि सीखने के उद्देश्यों के लिए यह बेहतर है क्योंकि आप सभी एसपीआई सिग्नल स्वयं बनाते हैं, प्रोसेसर स्वचालित रूप से कुछ भी नहीं करता है, इसलिए आप सामान्य रूप से एसपीआई और धारावाहिक संचार के बेहतर ज्ञान के साथ समाप्त हो जाएंगे!

हो सकता है कि Adafruit के उदाहरणों के साथ शुरू करना और SPI के लिए RPi पर हार्डवेयर कार्यान्वयन का उपयोग करने के लिए बाद में बिंदु पर ले जाना एक अच्छा विचार है, उस स्थिति में आपको डेटाशीट की आवश्यकता होगी (Adafruit सॉफ्टवेयर कार्यान्वयन का उपयोग करते समय भी काम) , अध्याय 5 और 6 संचार का वर्णन करते हैं और एडीसी का उपयोग करने के लिए क्या कॉन्फ़िगर किया जाना चाहिए।


मैं पूरी तरह से बिट-बैंगिंग कार्यान्वयन से बचता हूं, और सीधे हार्डवेयर संस्करण के लिए जाता हूं। यहाँ अच्छा, सरल उदाहरण: जेरेमीज़ ब्लॉग: रास्पबेरी पाई हार्डवेयर एसपीआई एनालॉग इनपुट MCP3008 का उपयोग करते हुए
scruss

धन्यवाद। हमने adafruit के ट्यूटोरियल को देखा है और adi को RPi से जोड़ने के लिए इसका उपयोग करने की योजना बना रहे हैं। हमने अपने विवरण से केवल वह चरण छोड़ दिया। हालाँकि, इस बिंदु पर उसके लिए (और मुझे) बिटफॉलिंग का विचार बहुत ही जटिल है। वह कभी भी न्यायाधीशों को यह समझाने में सक्षम नहीं होगी। हम हार्डवेयर संस्करण की जाँच करेंगे और देखेंगे कि कैसा दिखता है। परंतु । । । तथ्य यह है कि माइक्रोफोन उत्पादन बहुत छोटा है (@scruss) सुनिश्चित करने के लिए एक मुद्दा होगा। आपके सभी उत्तर के लिए धन्यवाद, वे एक बड़ी मदद करेंगे!
user5769

Adafruit का Electret माइक्रोफोन एम्पलीफायर है जो ADC को पढ़ सकने वाली चीज़ के लिए Electret के आउटपुट को बढ़ाता है। इसमें एक माइक कैप्सूल शामिल है।
21

0

MCP3008 और Adafruit_MCP3008 और Adafruit.SPI पायथन पुस्तकालयों के साथ हार्डवेयर SPI के लिए:

मैंने Adafruit.SPI लाइब्रेरी के स्पाईडेव ऑब्जेक्ट के फ़ंक्शन set_clock_frequency ('हज़ में मान') में ट्विक करने की कोशिश की है। तो कुछ ऐसा है,

import Adafruit_SPI as SPI  
ChangeClk=SPI.SpiDev(spi=0, port=0, max_speed = default)
ChangeClk.set_clock_frequency(90000)

मैं 5 KHz नमूना दर चाहता था (5 V MCP3008 को दिया गया था), लेकिन रास्पबेरी पाई मॉडल 2 B, DSO पर देखे जाने पर 25 KHz का एक सीरियल CLOCK दे रहा था। 5 KHz के एनालॉग इनपुट सिग्नल नमूनाकरण दर के लिए, Pi से सीरियल CLK 90 KHz (18 गुना नमूना दर, जैसा कि MCP 3008 डेटशीट में दिया गया है) होना चाहिए। हालाँकि, यह भी मदद नहीं कर सकता है और चीजें अपरिवर्तित रहती हैं जबकि अजगर स्क्रिप्ट चलती है।

आश्चर्यजनक रूप से, समान कोड जब RPY पर SPYDER IDE पर चला जाता है, तो 1 सेकंड में 1006 मूल्यों को मुद्रित करता है, जो कि इनबिल्ट पायथन -2 शेल के विपरीत 1 KHz से ऊपर की सेटिंग्स के साथ एक बेहतर नमूना दर दर्शाता है।


क्या आप इसे सुधार कर सकते हैं? वर्तमान प्रारूप में आपका उत्तर पढ़ना मुश्किल है। यदि आपको किसी भी बिंदु की आवश्यकता है तो सहायता केंद्र को एक नज़र दें।
डार्थ वादेर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.