Paso 4: Preparar el programa de ARDUINO para la estación de IR
Este programa de Arduino funciona para la mayoría de los controles remoto pero necesita decirle sobre su Protocolo de control remoto de la información que se reunieron en el paso anterior cuando se descifra los botones de control remoto mediante la utilidad IRrecvDump.
Es posible hacer la selección remota dinámica en tiempo de ejecución por lo que no tienes que cambiar y subir código pero para esta guía será mantenerlo simple.
Al principio del programa de Arduino, abajo hay un número de líneas a partir de
NÚMERO de etiqueta de #define. Cambiar el valor del número para controlar el funcionamiento de la estación de IR. Aquí hay una explicación de las constantes de la etiqueta correspondientes.
BOTÓN remoto código y poco
#define REMOTE_CODE la remota de código como devueltos por la utilidad de decodificador IRrecvDump el prefijo "0 x"
#define REMOTE_BIT su tamaño de datos remota de código que devuelve la utilidad del decodificador IRrecvDump.
UMBRAL DE NIVEL DE VOLUMEN
#define THRESHOLD_VALUE
Si usted no planea usar el potenciómetro para determinar el valor de umbral que se utilizará para accionar la transmisión IR, cambie el valor THRESHOLD_VALUE para que coincida con sus requisitos. Este es el número que decide en qué momento el Arduino comenzará a transmitir el código IR, en nuestro caso los códigos de volumen abajo IR
INTENSIDAD DE CAMBIO DE VOLUMEN
#define REPEAT_TX (de 1 a tantos como quieras. Comenzar con 3 entonces fine tune)
Cambiar cuantas veces quieras el código remoto de IR transmitido al TV o dispositivo de control remoto. Si quieres más drástica caída en el volumen del televisor aumentar este número. Si quieres un cambio más gradual en el volumen, reducir este número.
/============================================================================
Puede copiar y pegar este código en Arduino y subirlo
/*
Proyecto: Estación de Control remoto de SensoDuino IR 0.1
Programador: Hazim Bitar (techbitar.com)
FECHA: 25 DE NOVIEMBRE DE 2013
ARCHIVO: sensoduino_ir_station.ino (basado en sensoduino.ino)
Licencia: Public domain
*/
#include < IRremote.h >
#define THRESHOLD_VALUE 0 / / Set nivel crítico para detectar. Ignorar si el potenciómetro es usado
#define REPEAT_TX 3 / / cuantas veces para transmitir el código de control remoto IR
#define REMOTE_CODE 0x1CE3E817 / / remoto código para transmitir el de volumen abajo para mi TV. Reemplazar con el código de infrarrojos del dispositivo
#define REMOTE_BIT 32
#define 13 LED / LED utiliza a parpadear cuando volumen demasiado alto
Irsend de IRsend; crear una instancia de objeto de IR
#define START_CMD_CHAR ' >'
#define END_CMD_CHAR '\n'
#define DIV_CMD_CHAR ','
#define DEBUG 1 / ajustar a 0 si no desea Salida serial de datos
Cadena in;
flotador value0, valor1, valor2; VARs que contiene valores de los sensores.
void setup() {}
Esta es la lista de ayuda Sensor número de sensores
Serial.Begin(9600); 9600 es la velocidad por defecto de HC-05 y la mayoría de los módulos serial Bluetooth
Serial.println("\nSensoDuino 0.13 by TechBitar.com (2013).\n");
Serial.println ("Android Sensor tipo No:");
Serial.println ("1-acelerómetro (m/s ^ 2 - X, Y, Z)");
Serial.println ("2-MAGNETIC_FIELD (uT - X, Y, Z)");
Serial.println ("3-orientación (yaw, pitch, roll)");
Serial.println ("4-giroscopio (rad/s - X, Y, Z)");
Serial.println ("5-luz (SI lux)");
Serial.println ("6-presión (hPa milibar)");
Serial.println ("dispositivo 7 TEMPERATURE (C)");
Serial.println ("8-proximidad (centímetros o 1, 0)");
Serial.println ("9-gravedad (m/s ^ 2 - X, Y, Z)");
Serial.println ("10-LINEAR_ACCELERATION (m/s ^ 2 - X, Y, Z)");
Serial.println ("11-ROTATION_VECTOR (X, Y, Z)");
Serial.println ("12-RELATIVE_HUMIDITY (%)");
Serial.println ("13-AMBIENT_TEMPERATURE (C)");
Serial.println ("14-MAGNETIC_FIELD_UNCALIBRATED (uT - X, Y, Z)");
Serial.println ("15-GAME_ROTATION_VECTOR (X, Y, Z)");
Serial.println ("16-GYROSCOPE_UNCALIBRATED (rad/s - X, Y, Z)");
Serial.println ("17-SIGNIFICANT_MOTION (1.0)");
Serial.println ("95 - tiempo (H, M, S)");
Serial.println ("96 - fecha (Y, M, D)");
Serial.println ("97 - AUDIO (volumen)");
Serial.println ("98 - GPS1 (lat., largo, alt.)");
Serial.println ("99 - GPS2 (rodamiento, velocidad, fecha/hora)");
Serial.println ("\n\nNOTE: valores de 99.99\n\n");
Serial.Flush();
pinMode (LED, salida);
}
void loop()
{
Serial.Flush();
inCommand int = 0;
sensorType int = 0;
logCount largo sin signo = 0L;
char getChar = ' '; leer serie
esperar a que los datos de entrada
Si (Serial.available() < 1) regresar; Si vacío serie, volver a loop().
analizar la bandera de inicio comando entrante
getChar = Serial.read();
Si (getChar! = START_CMD_CHAR) volver; Si no hay comando inicia bandera, volver al loop().
analizar la entrada pin # y valor
sensorType = Serial.parseInt(); leer sensor typr
logCount = Serial.parseInt(); lecturas del sensor conectado total de leer
value0 = Serial.parseFloat(); 1 º valor del sensor
valor1 = Serial.parseFloat(); 2 sensor de valor si existe
valor2 = Serial.parseFloat(); 3 sensor de valor si existe
Mostrar valores de sensores para la depuración y sensor.
Si {} (DEBUG)
Serial.Print ("tipo de Sensor:");
Serial.println(sensorType);
Serial.Print ("Sensor registro #:");
Serial.println(logCount);
Serial.Print ("Val [0]:");
Serial.println(value0);
Serial.Print ("Val [1]:");
Serial.println(value1);
Serial.Print ("Val [2]:");
Serial.println(value2);
Serial.println("---");
Delay(10);
}
Cambiar el número de sensor para que coincida con el Señor para leer. Ver lista de ayuda de Sensor anterior.
Si (sensorType! = 97) volver; Si no estoy leyendo valores de los sensores de Audio, vuelva y siga leyendo.
Leer el valor del potenciómetro (0-1023) o asignar VolValue
a THRESHOLD_VALUE constante si no desea utilizar el potenciómetro.
int volValue = analogRead(A5);
Ya que mi sensor de audio en mi Arduino devuelve valores de 0 a 32K lo asignará a analógico min/max
Float volLimit = volValue * (32000 / 1023.0); 32K es sobre max devuelto por el sensor de SensoDuino Audio
int soundLevel = value0; Leer el sensor de los sonidos de SensoDuino (Bluetooth)
if(soundLevel > volLimit) / / comparar a umbral de nivel de ruido establecido por el potenciómetro.
{
digitalWrite(LED,HIGH); mientras transmite IR encender LED
Delay(200);
para (int txCount = 0; txCount < REPEAT_TX; txCount ++) {/ / transmitir el código de control remoto IR
irsend.sendNEC (REMOTE_CODE, REMOTE_BIT); Ver lista comentada y volver a colocar para que coincida con su sistema de infrarrojos
Delay(200);
Quite el comentario de la función que coincide con el protocolo de control remoto como se indica por IRrecvDump
irsend.sendNEC (REMOTE_CODE, REMOTE_BIT);
irsend.sendSony (REMOTE_CODE, REMOTE_BIT);
irsend.sendRC5 (REMOTE_CODE, REMOTE_BIT);
irsend.sendRC6 (REMOTE_CODE, REMOTE_BIT);
}
}
digitalWrite(LED,LOW); Cuando se hace la transmisión IR, apague el LED
}