Paso 2: Electrónica Resumen
Conseguir el micrófono bajo Control:
Mucho tiempo en este proyecto estuvo tratando de tomar el micrófono bajo control. Tuvimos un montón de cuestiones que el ruido en los datos a un nivel que era realizable. La escala analógica en un puerto de Arduino es 0-1023. Usando la chispa electret romper con el tablero de la diversión y los valores analógicos de monitoreo ser leer, se observó que los valores oscilan entre 350-650 incluso en los entornos más reliquias tranquilos. Para obtener datos utilizables para desencadenar el comportamiento de LED, se utilizó un método llamado convolución. Convolución es en esencia una forma de suavizar los datos mediante la aplicación de una curva de campana a una cola de valores. En este caso, convolución se aplicó a una cola de 7 valores, el número de valores en la cola puede variar dependiendo de la cantidad de suavizado se desea. Cada uno de los siete valores se multiplica por un coeficiente y la suma de los coeficientes de siete debe ser igual a uno. El valor alisado de interés es la suma de los siete valores analógicos se lee en multiplicadas por sus coeficientes. A continuación se da un ejemplo de esta circunvolución. Para explicación más precisa sobre convolución, consulte la página de wikipedia.
Ejemplo de convolución C código de Arduino:
---------------------------------------------------------------------------------------------------
Ejemplo de convolución
Por Jed Diller
02 de abril de 2012
Se aplica la convolución para valores analógicos se lee en un sensor en el puerto A0
Si el valor está por encima de un umbral, es hacer algo. En este caso
un valor se escribe en el pin 9 en un Adruino Uno
constantes:
const int sensorPin = A0;
const int ledPin = 9;
DEPURACIÓN booleano = true; para imprimir declaraciones ejecutar monitor serial y establecido en true
umbral de int = 550; Estos valores se determinó a través del uso de ensayo y error la serie impresión de depuración a
determinar un valor razonable
flotador de a0 = 0,3; coeficiente para el valor actual
flotador de a1 = 0.2; coeficientes para plus y minus 1 de calc
flotador de a2 = 0.1; coeficientes de para más y menos 2 de calc
flotador de a3 = 0. 05; coeficientes para plus y minus 3 de calc
definir las variables:
int sensorValue; valor del sensor para la lectura
int sV_adjusted; valor ajustado
int sV_m3; valor del sensor 3 anterior a calc
int sV_m2; valor del sensor 2 previo a calc
int sV_m1; valor del sensor 1 previo a calc
int sV_0; valor del sensor se calcula, centro de curva
int sV_p1; valor del sensor 1 después a calc
int sV_p2; valor sensor 2 después de calc
int sV_p3; valor del sensor 3 después a calc (Qué es actaully ser leído)
void setup()
{
Serial.Begin(9600);
pinMode (13, salida);
digitalWrite (13, HIGH);
analogWrite (ledPin, 0); Inicio LED en apagado para evitar el pequeño flash entre
cada iteración del bucle conductual
Delay(2000);
digitalWrite (13, bajo);
primeros 6 valores (sV_m3 por sV_p2)
sV_m3 = analogRead(sensorPin);
sV_m2 = analogRead(sensorPin);
sV_m1 = analogRead(sensorPin);
sV_0 = analogRead(sensorPin);
sV_p1 = analogRead(sensorPin);
sV_p2 = analogRead(sensorPin);
}
void loop()
{
obtener nuevo valor
sV_p3 = analogRead(sensorPin);
calcular el valor ajustado
sV_adjusted = (int) (a3 * (float) sV_m3 + a2 * (float) sV_m2 + a1 * (float) sV_m1 + a0 * sV_0 (flotador) + a1 * (float) sV_p1 + a2 * (float) sV_p2 + a3*(float)sV_p3);
valores de cambio alrededor para la siguiente iteración
sV_m3 = sV_m2;
sV_m2 = sV_m1;
sV_m1 = sV_0;
sV_0 = sV_p1;
sV_p1 = sV_p2;
sV_p2 = sV_p3;
valor ajustado hacia fuera contra el umbral de la prueba
Si (sV_adjusted > umbral)
{
analogWrite (ledPin, 255);
} else {}
analogWrite (ledPin, 0);
}
Si (depurar)
{
Serial.Print ("ajustar valor:");
Serial.println(sV_adjusted);
}
}
---------------------------------------------------------------------------------------------------
Mediante convolución el raw ruido analógico de más o menos 150 se redujo a alrededor de 10. Un umbral luego fue escogido para ser cerca de 15 por encima de los valores medios de la enrevesada. Un umbral más alto se traduce en una entrada más grande que violan el umbral. Ajuste el coeficiente de la curva y la curva de bell "aplanador" y uso de valores más en la cola más harán los datos estable pero también hará que el evento de interés más difícil de detectar. Haciendo la curva de la campana más grande en el centro por la ponderación de los valores del centro de la cola más pesadamente tendrá el efecto contrario y los datos serán más ruidosos pero más fácilmente se detectan eventos de interés.
Más problemas de ruido y la razón de dos Arduino:
Había otro problema que enfrentamos con el micrófono que hicimos. Si hay cualquier otro hardware en el tablero, decir un servo que fue trasladada dependiendo del valor del sensor enrevesada, el ruido otra vez haría los datos inutilizables. Por esta razón, la ONU fue utilizada para supervisar el micrófono y hacer la convolución de los datos. Si los valores eran entonces por encima del umbral fue escrito un valor a un puerto que estaba monitoreando la Mega. Si el Mega detecta que el valor estaba monitoreando es sobre algún otro umbral, en consecuencia cambiaría el comportamiento de los LED. La detección del micrófono no se podía hacer en el Mega por el ruido de todos lo LED de ser escrito.
Cableado:
El cableado del micrófono es bastante fácil con sus encabezados etiquetados de VCC, GND y AUD. Observe que el encabezado superior de la imagen de abajo es unUD como en audio, no AVD como en voltaje analógico. AUD es la salida del micrófono que se lee en un puerto analógico en el Arduino.
Cableado el LED también era fácil, si no un poco lentos. Para cada LED, soldar un cable (de un color determinado, elegimos rojo o azul) a la más de las dos patillas del LED (que es el voltaje en) y otro alambre de la soldadura (de distinto color, elegimos el negro) al perno más corto, el conector de tierra del LED. Para los pares de ojos, de la soldadura de los extremos cortos y largos de dos LED para el cable del mismo respectivamente. Utilizamos hilo único para facilitar la interfaz con los puertos de la placa de Arduino. Asegúrese de que los cables sean lo suficientemente largos para llegar a la Arduino desde donde usted puede colocar el LED en su pantalla. Para calcular esto, merece la pena sacar qué crees que la pantalla se verá como, como se ve en el paso 4.