Статьи

Обнаружение микрофона в Arduino / Galileo (IoT) с использованием VC ++

После  настройки Intel Galileo в нашем последнем посте давайте приступим к работе с первым датчиком — микрофоном. Мне пришлось освежить некоторые основы, которые я изучил во время обучения в бакалавриате — да, я учился на бакалавриата по специальности «Автоматизация», и я играл с разными микропроцессорами, контроллерами и датчиками. Таким образом, этот пост будет посвящен обнаружению голоса с помощью детектора микрофона и пульсирующего светодиода, когда голос пересекает несколько децибел.

Основы во-первых, проводка

Вам нужна плата Galileo и Arduino-совместимый экран, который поможет вам правильно подключить датчики. Так что со щитом ваша доска будет выглядеть

Теперь вам нужно 2 разных датчика Grove для этого. В идеале вы можете использовать датчики любой марки с любым устройством IoT. Все, что вам нужно помнить, это то, что все датчики будут иметь минимум 2 контакта

  • Напряжение — часто сокращенно V или VCC
  • Основание — часто сокращается как GND
  • Булавки данных — часто сокращается до D x  (где x — число)
  • Не соединенные контакты — часто сокращенно NC

Следует помнить, что вы всегда должны соединять V / VCC с другим V / VCC и GND с другим GND на любой плате. Если вы подключите иначе, ваша цепь не будет завершена (и ток не будет течь).

Когда вы используете «аналоговый» датчик, который предоставит вам некоторые данные, у вас будет значок с надписью OUT. Этот вывод OUT будет иметь сигнал напряжения, который будет представлять сигнал, захваченный вашим датчиком. Это может не иметь смысла на первый взгляд. Итак, давайте пойдем немного глубже. Существует 2 типа датчиков — аналоговые, которые обеспечивают сигналы обратно в форме напряжения, и цифровые, которые обеспечивают сигналы в битовой / байтовой форме. В весах используется датчик, который может быть аналоговым или цифровым.

Любой сигнал, измеренный в аналоговом формате, потребует некоторой калибровки, то есть механизма преобразования в цифровой или другой способ.

Датчик микрофона и комплект светодиодов

Датчик микрофона имеет 4 контакта — VCC, GND, NC и OUT. Вы получите напряжение в качестве сигнала датчика на выводе OUT

Комплект светодиодных датчиков также имеет 4 контакта — VCC, GND, NC, SIG. Вы можете установить 5 В на вывод SIG, чтобы загорелся светодиод, и можно установить 0 В на вывод SIG, чтобы он погас.

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

Настройка датчика и комплекта

Я настроил датчик микрофона на A0 (как INPUT) и набор светодиодных датчиков на D3 (как OUTPUT) экрана. Вы можете использовать любые другие порты на ваш выбор. Далее следует открыть VS 2013 и создать новый проект типа Visual C ++> Windows для IoT.

И в main.cpp, вы можете вставить следующий код

#include "stdafx.h"
#include "arduino.h"

#define MICROPHONE A0
#define LED D3
#define THRESHOLD_VALUE 450

void pins_init()
{
	pinMode(LED, OUTPUT);
	pinMode(MICROPHONE, INPUT);
}
void turnOnLED()
{
	digitalWrite(LED, HIGH);
}
void turnOffLED()
{
	digitalWrite(LED, LOW);
}

int _tmain(int argc, _TCHAR* argv[])
{
	return RunArduinoSketch();
}

void setup()
{
	Serial.begin(9600);
	pins_init();
}

void loop()
{
	int sensorValue = analogRead(MICROPHONE);
	Serial.print("sensorValue");
	Serial.println(sensorValue);

	if (sensorValue > THRESHOLD_VALUE)
	{
		Log("OK, got something worth listening\n");
		turnOnLED();
		delay(2000);
	}

	turnOffLED();
}

Понимание кода

#define THRESHOLD_VALUE 450

Вышеуказанное утверждение является цифровым значением для звукового порога. Микрофон фиксирует аналоговый сигнал (0-5 В), который подается на ваш Galileo в виде цифрового сигнала (0-1024). Это означает 0v = 0 в цифровом виде и 5v = 1024 в цифровом. Чтобы устранить звуки окружающей среды, я предпочитаю, чтобы пороговое значение составляло не менее 33%, т.е. 2v. Таким образом, цифровое значение 450 конвертируется в 2,19 В (= 450 * 5/1024). Я обнаружил, что звуки окружающей среды способствуют значению 291 (т.е. 1.42v)

Следующими важными битами являются определения портов,

pinMode (светодиод, ВЫХОД);
pinMode (МИКРОФОН, ВХОД);

Здесь мы указали, что мы возьмем входные данные из A0 и выведем данные в D3. Теперь давайте разберемся с ядром нашей программы — функцией цикла

Мы читаем аналоговое значение датчика микрофона, используя приведенный ниже код, который преобразует аналоговое значение в цифровое число

int sensorValue = analogRead (МИКРОФОН);

Когда это значение выходит за пределы определенного порога, вы хотите отправить 5 В на светодиод (отправив бит HIGH), используя код

digitalWrite (LED, HIGH);

При воспроизведении громкой музыки вы увидите, что светодиодный индикатор загорится на 2 секунды (задержка = 2000 мс) и погаснет.

Когда вы запускаете / выполняете этот проект из Visual Studio с помощью Remote Debugger, VS развернет этот код на вашем устройстве Galileo. Вам будет предложено ввести имя пользователя и пароль Galileo.

Вы можете сказать что-то вслух или воспроизвести видео на YouTube, чтобы проверить эту функциональность.

Этот код также доступен на GitHub по адресу: https://github.com/punitganshani/ganshani/tree/master/Samples/IntelGalileo/GroveMic.