Для научного ярмарочного проекта моей дочери (категория «Компьютерные науки и математика») она хотела бы использовать RPi, чтобы обойти и измерить, находятся ли различные громкие звуки выше порога боли и повреждают ли наши уши. Она шестиклассница, но у нее есть опыт работы с RPi и программированием на Python. Филип Хилс Николс ответил на несколько вопросов на странице FB RPi, но предложил прийти сюда за дополнительной помощью. Она хочет откалибровать Пи с помощью измерителя звукового давления (у меня есть один из них), чтобы выяснить, сколько производится милливольт
Вот что мы думаем до сих пор. Мы купили adc (mcp3008) у adafruit и ожидаем его прибытия. Если мы подключим цифровой выход от АЦП к контакту 11 GPIO и к контакту 12 GPIO с красным светодиодом, сработает ли эта простая программа?
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? Она хочет, чтобы это было переносимо, поэтому она не сможет набирать команды для повторного запуска программы.
Ответы:
Использование шины SPI, просто подключив вывод цифрового выхода АЦП к выводу 11 RPI GPIO, не будет работать. Этому автобусу нужно еще пару проводов, 4, если быть точным.
Для правильной работы АЦП также потребуется вход SPI, контакты синхронизации и выбора микросхемы. К счастью, есть хорошая информация об этом из нескольких источников.
Во-первых, если вы хотите узнать немного больше о работе SPI, я предлагаю прочитать эту страницу в Википедии, чтобы немного лучше узнать SPI.
Во-вторых, есть очень хорошее руководство по Adafruits, которое точно обсуждает эту тему, оно включает в себя код Python и поможет вам в процессе подключения самого ADC и связи с ним. Один (незначительный) недостаток заключается в том, что код, используемый в этом учебном пособии, не использует сам порт SPI, он программно эмулирует шину SPI (так называемую битовую привязку), это означает, что вы более свободно можете использовать контакты на порту GPIO, которые ты хочешь.
Я полагаю, что для вашего относительно простого проекта (хотя я, к счастью, удивлен, что в настоящее время ученики 6-го класса выполняют такие задачи !, для них много новой информации, брошенной им при создании проектов такого типа), решение «бит-бит» будет работать просто хорошо. Преимущество использования разбивки битов состоит в том, что для целей обучения он подходит лучше, поскольку вы сами создаете все сигналы SPI, процессор ничего не делает автоматически, так что в итоге вы получите гораздо более глубокое понимание SPI и последовательной связи в целом!
Может быть, это хорошая идея, чтобы начать с примеров из Adafruit и перейти позже к использованию аппаратной реализации на RPi для SPI, в этом случае вам понадобится таблица данных (также удобная при использовании программной реализации Adafruit) , Главы 5 и 6 описывают связь и то, что необходимо настроить для использования АЦП.
источник
Для аппаратного SPI с библиотеками MCP3008 и Adafruit_MCP3008 и Adafruit.SPI:
Я попытался настроить функцию set_clock_frequency ('значение в Гц') объекта SpiDev библиотеки Adafruit.SPI. Так что-то вроде
Я хотел частоту дискретизации 5 кГц (5 В подавалось на MCP3008), но Raspberry Pi модель 2 B давала последовательный CLOCK 25 кГц при наблюдении на DSO. Для частоты дискретизации аналогового входного сигнала 5 кГц Serial CLK от Pi должен составлять 90 кГц (18-кратная частота дискретизации, как указано в спецификации MCP 3008). Однако даже это не могло помочь, и все остается неизменным, пока выполняется скрипт на python.
Также удивительно, что тот же код при запуске в SPYDER IDE на RPi печатал 1006 значений в 1 секунду, что указывает на улучшенную частоту дискретизации с сохранением настроек, таких же как выше, до 1 кГц в отличие от встроенной оболочки Python-2.
источник