Переключатель по хлопку на Arduino Uno

В этом проекте мы рассмотрим переключатель на основе платы Arduino Uno, который будет включать и выключать какое-либо устройство по хлопку. Для обнаружения звука хлопка мы будем использовать микрофон. Рассмотренную схему можно будет использовать, к примеру, для включения и выключения освещения в комнате по хлопку – в этом случае в схему необходимо будет добавить цепь с реле, которая будет управлять включением/выключением лампочки по командам от Arduino.

Переключатель по хлопку на Arduino Uno: внешний вид конструкции

Принципы работы устройства

При хлопке на выходе микрофона будет наблюдаться пиковый сигнал, который по величине значительно больше обычного. Этот сигнал мы будем подавать на усилитель через фильтр верхних частот (ФВЧ). Затем этот усиленный сигнал будет подаваться на АЦП (аналого-цифровой преобразователь) платы Arduino Uno, который будет преобразовывать этот сигнал в цифровое значение. При хлопке на входе АЦП будет наблюдаться пик напряжения. При обнаружении этого пика мы будем переключать (включать/выключать) светодиод в нашей схеме.

Микрофон представляет собой чувствительный к звуку преобразователь, который преобразовывает энергию звука в электрическую энергию, то есть в изменяющееся напряжение. Микрофоны находят широкое применение в современном мире, к примеру, они используются в мобильных телефонах и лэптопах. Внешний вид микрофона показан на следующем рисунке.

Внешний вид микрофона

Определение полярности микрофона

Микрофон имеет два вывода: положительный и отрицательный. Полярность микрофона может быть определена с помощью мультиметра. Используйте положительную пробу мультиметра (переводите мультиметр в режим проверки диодов) и соедините его выводы с выводами микрофона. Если на экране мультиметра вы получили данные, это значит что положительный вывод микрофона подсоединен к отрицательному выводу мультиметра. Также полярность микрофона можно определить при внимательном рассмотрении его внешнего вида: отрицательный вывод имеет две или три линии из припоя, соединенные с металлическим корпусом микрофона. Эту соединяемость (связность) отрицательного вывода микрофона с его металлическим корпусом можно проверить с помощью тестера на обрыв – это еще один способ определить отрицательный вывод микрофона.

Необходимые компоненты

Плата Arduino Uno, источник питания с напряжением 5 В, конденсаторный микрофон,

Внешний вид платы Arduino Uno с отмеченными входами АЦП

NPN транзистор 2N3904,

Внешний вид NPN транзистора 2N3904

конденсаторы 100 нФ (2 шт.), конденсатор 100 мкФ,

Используемые в схеме конденсаторы

резисторы 1 кОм, 1 МОм, 14 кОм (2 шт.), светодиод,

Используемые в схеме резисторы

макетная плата и соединительные провода.

Работа схемы и исходный код программы

Схема устройства представлена на следующем рисунке.

Схема переключателя по хлопку на Arduino Uno

Мы разделим работу схемы на 4 составляющие: фильтрация, усиление, АЦП и программирование переключения светодиода.

Любой обнаруженный звук микрофон будет конвертировать в значение напряжения, прямо пропорциональное силе звука. То есть для сильных (громких) звуков мы будем иметь большое значение напряжения, а для слабых звуков – маленькое. Это значение напряжения мы сначала будем подавать на фильтр верхних частот (для его фильтрации). Затем это отфильтрованное напряжение будет подаваться на базу транзистора для его последующего усиления. Усиленное значение напряжения будет сниматься с коллектора транзистора, с выхода которого оно будет подаваться на канал АЦП ADC0 платы Arduino Uno, где будет выполняться его аналого-цифровое преобразование. И, наконец, плата Arduino будет запрограммирована на переключение (включение/выключение) светодиода, подключенного к PIN 7 PORTD.

1. Фильтрация.

Для начала кратко рассмотрим принципы работы R-C фильтра верхних частот, который в нашей схеме используется для фильтрации (подавления) шумов. Простейший R-C фильтр состоит из одного резистора и одного конденсатора – для нашей схемы нет смысла использовать более сложные фильтры. Фильтр верхних частот позволяет сигналу высокой частоты проходить со своего входа на выход. Другими словами, входной сигнал проходит на выход только если его частота выше частоты настройки фильтра. Для данной схемы мы не занимались точным подбором (расчетом) номиналов его компонентов – мы же не аудио усилитель проектируем.

Схема R-C фильтра верхних частот представлена на следующем рисунке.

Схема RC-фильтра верхних частот

После прохождения этого фильтра сигнал подается на базу транзистора для его усиления.

2. Усиление.

Напряжение с выхода микрофона достаточно мало и не может быть сразу подано на АЦП платы Arduino, поэтому для его усиления мы использовали простейший усилитель на одном транзисторе. Усиленный сигнал затем подается на вход АЦП платы Arduino.

3. Аналого-цифровое преобразование

Плата Arduino имеет шесть каналов АЦП. Мы можем использовать любой из них. Разрешение АЦП Arduino составляет 10 бит – то есть мы сможем работать с диапазоном целых чисел (0-(2^10) 1023)). Это означает что данный АЦП преобразует входное напряжение от 0 до 5 Вольт в целое число от 0 до 1023. То есть имеем точность АЦП 5/1024= 4.9 мВ. То есть один шаг приращения целого числа на выходе АЦП равен изменению в 4.9 мВ на его входе.

В нашей схеме для АЦП мы будем использовать канал A0. Для осуществления функций АЦП мы должны в программе сделать следующие вещи:

1. analogRead(pin);
2. analogReference();
3. analogReadResolution(bits);

Все каналы АЦП платы Arduino Uno имеют опорное напряжение 5В – то есть это максимальное значение входного напряжения, которое способны обрабатывать данные каналы. Поскольку, к примеру, некоторые датчики обеспечивают на своем выходе диапазон напряжений 0-2.5В, то использование опорного напряжения 5В в данном случае приведет к уменьшению точности измерений. Поэтому в подобных случаях для изменения опорного напряжения целесообразно использовать функцию “analogReference();”. Мы в рассматриваемом случае оставим значение опорного напряжения без изменений.

По умолчанию разрешающая способность каналов АЦП платы Arduino Uno составляет 10 бит. Однако в некоторых случаях (например, для увеличения скорости преобразования) можно уменьшить эту разрешающую способность с помощью команды “analogReadResolution(bits);”. Мы в нашем примере не будем изменять разрешающую способность каналов АЦП.

Если все необходимые настройки канала АЦП сделаны (или оставлены по умолчанию), то для чтения значения с выхода АЦП можно воспользоваться функцией “analogRead(pin);”, где pin обозначает контакт платы Arduino, который мы будем использовать для аналого-цифрового преобразования, в нашем случае это будет контакт “A0”. Для того чтобы сразу сохранить значение с выхода АЦП в переменной целого типа можно использовать команду вида ”int SENSORVALUE = analogRead(A0);”, в результате этой команды значение с выхода АЦП будет сохранено в переменной “SENSORVALUE”.

4. Исходный код программы для переключения светодиода при каждом хлопке

При нормальных условиях микрофон обеспечивает на своем выходе нормальный уровень сигнала и поэтому на выходе АЦП мы также имеем нормальное цифровое значение. Но при хлопке на выходе микрофона формируется пик значения напряжения, соответственно, на выходе АЦП мы также будем наблюдать этот пик, поэтому мы можем запрограммировать плату Arduino чтобы она включала и выключала светодиод при каждом хлопке. То есть при первом хлопке плата Arduino включит светодиод и он будет гореть до следующего хлопка. При следующем хлопке плата Arduino выключит светодиод и т.д. Далее представлен полный текст программы.

const int analogInPin = A0; // вход АЦП, который мы будем использовать
int sensorValue = 0;
void setup()
{
DDRD = 0xFF; // контакты порта D конфигурируем на вывод данных
}
void loop()
{
sensorValue = analogRead(analogInPin); // считываем значение с выхода АЦП на канале A0
if(sensorValue>60)
{
PORTD ^=(1<<7); // если на выходе АЦП наблюдается пик напряжения (sensorValue больше 60), то переключаем светодиод на контакте pin7
delay(250);
}
}

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
21 просмотров


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *