RPi như một máy đo mức âm thanh?


10

Đối với dự án hội chợ khoa học của con gái tôi (hạng mục Khoa học và Toán học), cô ấy muốn sử dụng RPi để đi khắp nơi và đo xem các âm thanh lớn khác nhau có vượt quá ngưỡng đau và làm hỏng tai chúng ta không. Cô ấy là học sinh lớp 6, nhưng cô ấy có kinh nghiệm với RPi và lập trình bằng Python. Phillip gót Nichols đã trả lời một số câu hỏi trên trang FB RPi, nhưng đề nghị chúng tôi đến đây để được giúp đỡ thêm. Cô ấy muốn hiệu chỉnh Pi bằng máy đo áp suất âm thanh (tôi có một trong số này) để tìm ra có bao nhiêu millivolt được sản xuất

Đây là những gì chúng ta đang nghĩ cho đến nay. Chúng tôi đã mua một adc (mcp3008) từ adafbean và đang chờ nó đến. Nếu chúng ta kết nối đầu ra kỹ thuật số từ adc với chân GPIO 11 và chân GPIO 12 với đèn LED màu đỏ, chương trình đơn giản này có hoạt động không?

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 ??

Nếu điều này hoạt động, đoạn mã nào có thể được đặt ở cuối để thiết lập lại chương trình bằng cách nhấn nút được kết nối với chân GPIO? Cô ấy muốn cái này có thể mang theo được, vì vậy cô ấy sẽ không thể gõ các lệnh để chạy lại chương trình.


Vì một số lý do, mã đã bị cắt. Hãy để tôi thử lại: nhập RPi.GPIO dưới dạng GPIO GPIO.setmode (GPIO.BOARD) GPIO.setup (11, GPIO.IN) GPIO.setup (12, GPIO.OUT) GPIO.output (12, GPIO.LOW) # đảm bảo đèn LED tắt SPL = 0 #zero biến Trong khi SPL <??: #Where ?? giá trị tính bằng millivolts được tạo ra bởi âm thanh ở mức 130 db SPL = GPIO.input (11) #get giá trị từ adc được kết nối với micrô GPIO.output (12, GPIO.HIGH) #turn LED nếu mức âm thanh cao hơn? ?
dùng5769

1
Bạn có thể chỉnh sửa bài đăng của mình, nếu bạn đặt 4 khoảng trắng trước mã, nó sẽ đặt nó vào hộp "mã" đặc biệt và giữ định dạng. Làm cho nó dễ đọc hơn rất nhiều. Không thực sự liên quan đến câu hỏi, nhưng đó là ấn tượng đối với một học sinh lớp 6 !!!! Tôi ước tôi bắt đầu trẻ.
Impulss

1
Không quan tâm, những gì làm / mô hình là đồng hồ đo áp suất âm thanh?
recantha

Là đầu ra từ đồng hồ được khuếch đại trước? Nếu không, đầu ra micrô sẽ quá nhỏ để MCP3008 có thể đọc được.
kiểm tra

Lưu ý rằng bạn không thể sử dụng ADC để đo áp suất âm một cách có ý nghĩa. Bạn phải đo dạng sóng dao động và sau đó đo biên độ của nó trong phần mềm (có thể áp dụng trọng số phụ thuộc tần số khi các đồng hồ đo thực có xu hướng) hoặc nếu không thì điều chỉnh tín hiệu trước khi truyền tới ADC. Trước tiên, bạn có thể muốn chạy một số thử nghiệm bằng PC với soundcard để có ý tưởng về thuật toán.
Chris Stratton

Câu trả lời:


3

Sử dụng bus SPI bằng cách chỉ kết nối chân ra kỹ thuật số của ADC với chân 11 của RPi GPIO sẽ không hoạt động. Xe buýt này cần thêm một vài dây, chính xác là 4.

ADC cũng sẽ cần một đầu vào SPI, chân Đồng hồ và Chip Chọn được kết nối để hoạt động đúng. May mắn thay, có thông tin tốt về điều này có sẵn từ nhiều nguồn.

Đầu tiên nếu bạn muốn biết thêm một chút về hoạt động của SPI, tôi khuyên bạn nên đọc trang này trên Wikipedia để hiểu rõ hơn về SPI.

Thứ hai, có một hướng dẫn rất hay về Adafruits thảo luận chính xác về chủ đề này, nó bao gồm mã Python và hướng dẫn bạn qua các quá trình kết nối chính ADC và giao tiếp với nó. Một nhược điểm (nhỏ) là mã được sử dụng trong hướng dẫn này không sử dụng cổng SPI, phần mềm mô phỏng bus SPI (được gọi là bit-banging), điều này có nghĩa là bạn có thể tự do sử dụng các chân trên cổng GPIO hơn bạn muốn.

Tôi cho rằng với dự án tương đối đơn giản của bạn (mặc dù hiện tại tôi rất vui vì học sinh lớp 6 thực hiện các nhiệm vụ này! Đối với họ rất nhiều thông tin mới được ném vào họ bằng cách thực hiện các loại dự án này), giải pháp đập bit sẽ hoạt động tốt khỏe. Một lợi thế của việc sử dụng bit banging là vì mục đích học tập, nó phù hợp hơn vì bạn tự tạo tất cả các tín hiệu SPI, bộ xử lý không có gì tự động, vì vậy bạn sẽ có kiến ​​thức chuyên sâu hơn về SPI và truyền thông nối tiếp nói chung!

Có lẽ đó là một ý tưởng hay khi bắt đầu với các ví dụ từ Adaf nhung và sau đó chuyển sang sử dụng triển khai phần cứng trên RPi cho SPI, trong trường hợp đó bạn sẽ cần bảng dữ liệu (cũng tiện dụng trong khi sử dụng triển khai phần mềm Adaf nhung ) , Chương 5 và 6 mô tả giao tiếp và những gì cần được cấu hình để sử dụng ADC.


Tôi sẽ tránh việc triển khai bit-bang hoàn toàn và đi thẳng vào phiên bản phần cứng. Ví dụ hay, đơn giản tại đây: Blog của Jeremy: Đầu vào tương tự SPI phần cứng Raspberry Pi sử dụng MCP3008 .
kiểm tra

Cảm ơn. Chúng tôi đã xem hướng dẫn của adafbean và dự định sử dụng nó để kết nối adc với RPi. Chúng tôi chỉ để lại bước ra khỏi mô tả của chúng tôi. Tuy nhiên, mã adafnut và ý tưởng về tiếng đập bit quá phức tạp đối với cô ấy (và tôi) vào thời điểm này. Cô sẽ không bao giờ có thể giải thích điều đó với các thẩm phán. Chúng tôi sẽ kiểm tra phiên bản phần cứng và xem nó trông như thế nào. Nhưng . . . thực tế là đầu ra micro quá nhỏ (@scruss) sẽ là một vấn đề chắc chắn. Cảm ơn tất cả các câu trả lời của bạn, họ sẽ giúp rất nhiều!
dùng5769

Bộ khuếch đại micro Electret từ Adaf nhung giúp tăng sản lượng của electret thành thứ mà ADC có thể đọc được. Nó bao gồm một viên nang mic.
kiểm tra

0

Đối với SPI phần cứng với các thư viện MCP3008 và Adaf nhung_MCP3008 và Adaf nhung.SPI:

Tôi đã cố gắng chỉnh thành hàm set_clock_frequency ('value in Hz') của đối tượng SpiDev của thư viện Adafbean.SPI. Vì vậy, một cái gì đó như,

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

Tôi muốn tốc độ lấy mẫu 5 KHz (5 V đã được trao cho MCP3008) nhưng Raspberry Pi model 2 B đã cho CLOCK nối tiếp 25 KHz khi quan sát trên DSO. Đối với tốc độ lấy mẫu tín hiệu đầu vào tương tự là 5 KHz, CLK nối tiếp từ Pi phải là 90 KHz (tốc độ lấy mẫu gấp 18 lần, như được đưa ra trong biểu dữ liệu MCP 3008). Tuy nhiên, ngay cả điều này cũng không giúp được gì và mọi thứ vẫn không thay đổi trong khi tập lệnh python chạy.

Cũng đáng ngạc nhiên, cùng một mã khi được chạy trên SPYDER IDE trên RPi đã in 1006 giá trị trong 1 giây cho thấy tốc độ lấy mẫu được cải thiện với các cài đặt được giữ nguyên như trên với 1 KHz không giống như vỏ Python-2 được tích hợp sẵn.


Bạn có thể đi định dạng lại cái này không? Câu trả lời của bạn ở định dạng hiện tại rất khó đọc. Nếu bạn cần bất kỳ con trỏ nào, hãy xem Trung tâm trợ giúp.
Darth Vader
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.