Gesto ultrasónico basado en TV con control remoto (3 / 4 paso)

Paso 3: El bosquejo

El código siguiente debe cargarse en el Arduino.

/ * Pasar a Control remoto

Este esbozo un telémetro ultrasónico utiliza para determinar los gestos del usuario y salidas de una señal de IR a un televisor de sony basada en el mandato dado.
-Golpe alta (> 10 in) = canal
-Golpe bajo = canal
-Sostener alta (> 10 in) = subir volumen
-Mantenga = bajar volumen
-Sensor (< 3 in) de la cubierta = vuelta con. / desc.

Creado por Dan Nicholson.

Este ejemplo de código es de dominio público.

Este código utiliza la librería IRremote (https://github.com/shirriff/Arduino-IRremote)

*/
#include < IRremote.h >

Define las funciones de control
#define CONTROL_CH 1 / / cambio de canal
#define CONTROL_VOL 2 / / volumen
#define CONTROL_POW 3 / energía

#define CONTROL_UP 1
#define CONTROL_DOWN -1

#define DIST_MAX 20 / / distancia máxima en pulgadas, todo lo anterior es ignorado.
#define DIST_DOWN 10 / / umbral para arriba/abajo comandos. Si es mayor, el comando es "arriba". Si baja, "down".
#define DIST_POW 3 / / umbral de comando de potencia, inferiores a = potencia de encendido/apagado

PIN DE IR
const int Irpín = 3; Esto se define en la biblioteca, esta var es sólo un recordatorio. CAMBIAR ESTO NO VA A CAMBIAR PIN EN LA BIBLIOTECA
2 pin Sensor Ping
const int pingPin = 8;
const echoPin int = 7;
Pasadores LED de confirmación
const int led = 13; LED interior para arriba/abajo de depuración
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
LED cronómetro
contador de tiempo largo sin firmar;
Objeto de transmisor IR
Irsend de IRsend;
Bandera de confirmación de poder (necesita dos golpes fuertes para enviar la señal)
Boolean powerConfirmed = false;

void setup() {}
inicializar la comunicación serial y ajustar pernos
Serial.Begin(9600);
pinMode (led, salida);
pinMode (ledR, salida);
pinMode (ledG, salida);
pinMode (ledB, salida);
pinMode (pingPin, salida);
pinMode (echoPin, entrada);
temporizador = millis();
}

void loop()
{

Serial.println(Millis());
larga duración, pulgadas;
int valor;

Busque una lectura
duración = doPing();

Temporizador para confirmar acciones (actualmente, sólo energía)
Si (contador de tiempo & & contador < (millis() - 5000) & & (millis() > 5000))
{
Serial.println ("reset timer");
temporizador = false;
}

digitalWrite (led, baja);
Colores (0, 0, 0); de

convertir el tiempo en una distancia
pulgadas = microsecondsToInches(duration);

Si pulgadas menos de máxima, actuar
Si (pulgadas < DIST_MAX)
{
Salida de depuración
Serial.Print(inches);
Serial.println("in");

Si muy cerca, es una señal de "poder"
Si (pulgadas < DIST_POW)
{
Serial.println(TIMER);
activar o desactivar
Si (contador)
{
doIR (CONTROL_POW, 0);
temporizador = false;
Delay(2000); no quiere esto enviando más de una vez. retardo de 2 segundos
}
otra cosa
{
Serial.println ("poder establecido");
temporizador = millis();
setColor(255,50,50);
Delay(500);
}
}
Else / / es volumen o canal
{
Distancia determina la dirección de control
valor = handleDist(inches);
esperar medio segundo
Delay(300);
¿Compruebe una vez más, mano desaparecida?
Si (microsecondsToInches(doPing()) > DIST_MAX)
{
doIR (CONTROL_CH, valor); golpe fuerte
}
otra cosa
{
volumen
int d = 500; primera demora es más larga para el cambio de volumen
repetir hasta que se quite la mano
mientras que (pulgadas < DIST_MAX)
{
valor = handleDist(inches); ¿es hacia arriba o hacia abajo?
doIR (CONTROL_VOL, valor); disparar la señal de infrarrojos
Delay(d); esperar
pulgadas = microsecondsToInches(doPing()); Compruebe otra vez la mano
d = 100; retrasos son más cortos para múltiples rápido ajuste del volumen
}
Delay(500); Esto detiene el cambio accidental de la canal después de ajuste de volumen
}
}
}
Delay(50); Corto lo suficiente para detectar todos los golpes.
}
/*
* Si la distancia es de umbral, marcar como 'up' y encienda el LED correspondiente.
*/
int handleDist (int pulgadas)
{
Si (pulgadas > DIST_DOWN)
{
digitalWrite (led, alto);
volver CONTROL_UP;
}
otra cosa
{
digitalWrite (led, baja);
volver CONTROL_DOWN;
}
}

/*
* Disparar código correcto IR
*/
doIR vacío (control de int, int val)
{
Switch(control)
{
caso CONTROL_POW:
energía
Serial.println ("power on/off 0xa90");
para (int i = 0; i < 3; i ++)
{
Colores (255, 0, 0);
irsend.sendSony (0xa90, 12); Código de poder de TV SONY
Delay(40);
}
rotura;
caso CONTROL_CH:
Colores (0, 255, 0);
salida de 'canal arriba / abajo' según val
Si (val == CONTROL_UP)
{
digitalWrite (led, alto);
para (int i = 0; i < 3; i ++)
{
irsend.sendSony(0x90, 12);
Delay(40);
}
Serial.println ("canal por 0xD00A");
}
Else / / abajo
{
para (int i = 0; i < 3; i ++)
{
irsend.sendSony (0x890, 12);
Delay(40);
}
Serial.println ("canal abajo 0x3002");
}
rotura;
caso CONTROL_VOL:
Colores (0, 0, 255);
salida 'volumen arriba / abajo' según val
Si (val == CONTROL_UP)
{
digitalWrite (led, alto);
para (int i = 0; i < 3; i ++)
{
irsend.sendSony (0x490, 12);
Delay(40);
}
Serial.println ("volumen 0x490");
}
//down más
{
para (int i = 0; i < 3; i ++)
{
irsend.sendSony (0xC90, 12);
Delay(40);
}
Serial.println ("volumen abajo 0xC90");
}
rotura;
}
}
void colores (int rojo, int verde, int azul)
{
analogWrite (ledR, rojo);
analogWrite (ledG, verde);
analogWrite (ledB, azul);
}

doPing() largo
{
digitalWrite (pingPin, LOW);
delayMicroseconds(2);
digitalWrite (pingPin, HIGH);
delayMicroseconds(5);
digitalWrite (pingPin, LOW);
volver pulseIn (echoPin, HIGH);
}

microsecondsToInches(long microseconds) largo
{
Según ficha técnica de paralaje para el PING))), hay
73,746 microsegundos por pulgada (es decir, el sonido viaja a 1130 pies por
en segundo lugar).  Esto da la distancia recorrida por el ping, saliente
y, por lo que dividimos por 2 para obtener la distancia del obstáculo.
Ver: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
volver microsegundos / 74 / 2;
}

microsecondsToCentimeters(long microseconds) largo
{
La velocidad del sonido es 340 m/s o 29 microsegundos por centímetro.
El ping viaja hacia fuera y hacia atrás, para encontrar la distancia de la
objeto que tomamos la mitad de la distancia recorrida.
volver microsegundos / 29 / 2;
}

Artículos Relacionados

Cómo hacer un Arduino basados en luz con control remoto infrarrojo de la noche!

Cómo hacer un Arduino basados en luz con control remoto infrarrojo de la noche!

Aquí está un Instructable que le mostrará cómo construir una noche de la Arduino basado en luz conpequeño control remoto infrarrojo que permite recorrer 10 pre set colores y un desvanecimiento al azarrutina de color que lazos para siempre.Este instru
Control de servomotor con control remoto

Control de servomotor con control remoto

Si buscas comodidad y controlar remotamente sus dispositivos electrónicos, usted encontrará su necesidad en este instructable.En este instructivo vamos a aprender cómo controlar un servomotor con control remoto, esto le dará un concepto general acerc
Aviones de papel con control remoto TV

Aviones de papel con control remoto TV

Me encanta todo lo que vuela. En mi infancia hice un montón de aviones de papel, pero tienen un gran problema. Después de algunos minutos caen. Así que ahora he diseñado un pequeño dispositivo que permite controlar la velocidad y la altura de su avió
Ataúd con control remoto de Halloween

Ataúd con control remoto de Halloween

Da miedo cómo sería tener un ataúd con un chico muerto en ella abre y resucitara de entre los muertos. ¡ Wow!Bueno es un gran proyecto pero merece la pena! Se trata de un autónomo (tiene 1 cable de extensión a lo bien) ataúd que se abre y un cadáver
Control de tus electrodomésticos con control remoto de TV!!

Control de tus electrodomésticos con control remoto de TV!!

Ver el proyecto salida vídeo aquí.He encontrado que algunas personas son muy perezosos para levantarse ir a la Junta y pulse el interruptor para encender la luz o ventilador o cualquier otro aparato pero Hey!, ahora hay una solución más fácil. Ahora
Brazo robótico con control remoto

Brazo robótico con control remoto

Esta es una guía para hacer un control remoto robótica brazo (6DOF) o simplemente para controlar algunos servos en algo.Puede usar un TV normal de IR remoto para controlar los servos en un brazo robótico mecánico. hay 17 botones del mando a distancia
Dispensador de alimento de peces con control remoto

Dispensador de alimento de peces con control remoto

Este instructable fue creado en cumplimiento de la exigencia de proyecto de la Makecourse de la Universidad de South Florida (www.makecourse.com)Esta fue mi introducción en utilizando el microcontrolador arduino y escribir código. Admito que hay much
IRK! Teclado USB de teclas con control remoto infrarrojo

IRK! Teclado USB de teclas con control remoto infrarrojo

IRK! es un teclado USB, sin llaves, que se puede utilizar simplemente usando su control remoto infrarrojo de aprendizaje .Creé que me permite controlar mi MythTV de cine en casa PC con mi control remoto infrarrojo de aprendizaje en lugar de tener que
Brazo robótico inteligente con control remoto

Brazo robótico inteligente con control remoto

El objetivo de este proyecto era construir un brazo robótico simple que puede ser controlado remotamente. Este brazo robótico se unirá a mi robot móvil. Además, este diseño ha sido equipado con una pantalla OLED que ofrece información sobre el contro
Papel avión-TV mando a distancia con control remoto

Papel avión-TV mando a distancia con control remoto

Crear un avión de papel controlada remota controlado por televisor medio remoto. Super divertido y barato para hacer!Paso 1: Para el paso 1, usted debe obtener todos los materiales: una pequeña li-poli batería (3,7 voltios), un trozo de PCB, motor el
Lámpara estrella de la muerte IKEA con control remoto

Lámpara estrella de la muerte IKEA con control remoto

Siendo Ingeniero yo no pude resistir añadir control remoto a esta lámpara extensible manualmente que vi en IKEA, sin importar el costo. En este proyecto he reemplazado la cadena tire con varilla roscada M3 y motor de la C.C., agrega un microcontrolad
RGB Led con control remoto TV

RGB Led con control remoto TV

INTRODUCCIÓNProyecto de control remoto por infrarrojos es uno de los proyectos populares para los amantes del arduino. Estamos aquí hablando de la tv remotas. Hay varios botón del remoto de la tv que no se utilizan. También si podemos hacer esta tv r
Cortina con control remoto

Cortina con control remoto

Apertura y cierre de la cortina de hacen que una persona cansada. Como si están sentados lejos de cortina y queremos abrir/cerrar la cortina, entonces será aburrido trabajar para levantarse ir allí y abrir y cerrar la cortina. Cortina tan automática
Electrodoméstico con 8051 con control remoto TV

Electrodoméstico con 8051 con control remoto TV

Este proyecto se utiliza para cambiar los electrodomésticos mediante control remoto de la TV. Utiliza philips RC5 remoto de protocolo base. El microcontrolador utilizado es de Atmel at89c2051 es decir de tipo 8051. He usado triac en vez de relés para