Inicio entretenimiento Auto apagado (controlador de pila) (5 / 7 paso)

Paso 5: Código de Arduino

Para las comunicaciones de IR utilicé la biblioteca IRemote para Arduino. Para descargar desde github (http://github.com/shirriff/Arduino-IRremote), haga clic en el enlace "Descargas" en la parte superior derecha, haga clic en "Descargar como zip" y obtener un archivo zip.  Descomprimir y renombrar el directorio shirriff-Arduino-IRremote-nnn a IRremote

Para el DS1302 RTC utilicé la siguiente biblioteca para Arduino: https://github.com/msparks/arduino-ds1302

Para producir el sonido salida de sonido que utilice la biblioteca estándar de SPI.h Arduino. Para más detalles ver http://arduino.cc/en/Reference/SPI

#include < stdio.h >
#include < string.h >
#include < DS1302.h >

#include < SPI.h >
#include < IRremote.h >

/ * Establecer las conexiones apropiadas digitales del pin de I/O para el módulo RTC * /
CE_PIN de uint8_t = 4;
uint8_t IO_PIN = 10;
SCLK_PIN de uint8_t = 8;

#define RTC5vPin 5 / / se utilizará para proporcionar este pin + 5v a la RTC
#define RTCgndPin 6 / este pin se utiliza para proporcionar tierra a la RTC

#define PIEZO_PIN 11

/ * Crear búferes * /
char buf [50];
día del Char [10];

Irsend de IRsend;

/ * Crear un objeto DS1302 RTC * /
DS1302 rtc (CE_PIN, IO_PIN, SCLK_PIN);

Códigos SAMSUNG TV Power ON/OFF (cambiar esto para que coincida con los códigos de control remotos)
unsigned int S_pwr[68]={ 4400,4550,500,1750,500,1750,500,1750,450,650,500,600,500,600,500,650,500,600,500,1750,450,1750,500,1750,500,600,500,600,500,650,500,600,500,600,500,650,500,1750,450,650,500,600,500,600,500,650,500,600,500,600,500,1750,500,600,500,1750,500,1750,500,1750,450,1750,500,1750,500,1750,450};

Sonido envolvente de LG (cambiar esto para que coincida con los códigos de control remotos)
unsigned int LG_pwr[68]={ 4350,4550,500,600,500,600,500,1750,450,1750,500,600,500,1750,450,600,500,650,450,650,500,600,500,1750,450,1750,450,650,500,1700,500,600,500,650,450,650,450,1800,450,1750,450,1750,450,1750,500,600,500,600,500,600,500,1750,500,600,500,600,500,600,500,650,450,1750,500,1750,450,1750,450};

int calibrationTime = 30;         el tiempo nos da el sensor a calibrar (10 a 60 segundos según la hoja de datos)
tiempo unsigned int lowIn;          el momento cuando el sensor produce un impulso de baja
pausa larga unsigned int = 3000;   la cantidad de milisegundos que el sensor tiene que ser baja antes de que asuma todo el movimiento se ha detenido
anulación boolean = false;

Boolean lockLow = true;
takeLowTime Boolean;

pirPin int = 3;                   El pin digital conectado a la salida del sensor PIR
int ledPin = 13;                  LED a bordo está conectado a un LED rojo externo

int maxSecs = 300;                Tiempo máximo para ningún movimiento antes de que apague el televisor
Cambiar esto para satisfacer sus propias necesidades (por defecto 5 minutos)

int overrideStartHour = 19;       Que hora en la ventana de anulación
int overrideEndHour = 23;       Que hora para poner fin a la ventana de anulación

int currentSecs = 0;              Contador global

Patillas verde y LED YELLO
int greenLedPin = 12;
int yellowLedPin = 2;

int yellowState = 0;

void setup() {}
Serial.Begin(9600);

pinMode (RTC5vPin, salida);      conjuntos de perno para alto rendimiento
digitalWrite (RTC5vPin, alto);   Gire el pasador en (5v) al poder RTC
pinMode (RTCgndPin, salida);     establece el Pin de salida
digitalWrite (RTCgndPin, bajo);   Gire el pasador en bajo (GND) al poder RTC

pinMode (11, salida);            establece el Pin 11 de salida
digitalWrite (11, bajo);          Gire el pasador 11 bajo (GND) al poder RTC

pinMode (pirPin, entrada);         Inicializa el pin de detección PIR estado como entrada
pinMode (ledPin, salida);        Inicializa el pin LED a bordo como entrada
digitalWrite (pirPin, LOW);       empezar con ningún movimiento

pinMode(greenLedPin,OUTPUT);
digitalWrite (greenLedPin, bajo);

pinMode(yellowLedPin,OUTPUT);
digitalWrite (yellowLedPin, bajo);
yellowState = 0;

/*
Inicializar un nuevo chip por apagar la protección contra escritura y claro el
reloj detener la bandera. Estos métodos no necesitan siempre ser llamados. Ver el DS1302
hoja de datos para obtener más información.
Un Comentario en el código siguiente para crear un nuevo chip RTC. Una vez ejecutado necesita
Comentario de la sección de código nuevo.
*/

RTC.write_protect(false);
RTC.HALT(false);
Tiempo t (2013, 7, 7, 14, 45, 0, 0); Crear un nuevo objeto de tiempo para establecer la fecha y hora
RTC.Time(t); Ajustar la hora y fecha en el chip
RTC.write_protect(true);


dar el sensor de PIR algún tiempo a calibrar
Serial.Print ("calibración sensor");
para (int i = 0; i < calibrationTime; i ++) {}
Serial.Print(".");
Delay(1000);
}
Serial.println ("hecho");
Serial.println ("SENSOR activo");
Delay(50);

el contador global
currentSecs = maxSecs;

StartupBeep();
}

void StartupBeep() {}
Tone(PIEZO_PIN,4978,2000);
Delay(100);
noTone(PIEZO_PIN);
}

////////////////////////////
LAZO
void loop() {}
/ * Obtener la hora actual y la fecha desde el chip * /
Tiempo t = rtc.time();

/ * Nombre del día de la semana * /
memset (día, 0, sizeof(day));  / * borrar el búfer de día * /

/ * Inserte en el búfer temporal y el formato de la hora y fecha * /
snprintf (buf, sizeof(buf), "%s % d 04-02d-% 02d % 02d: % 02d: % 02d",
día,
t.yr, t.mon, t.date,
t.hr, t.min, t.sec);

/ * Imprime la cadena con formato a la serie para que podamos ver el tiempo * /
Serial.Print(BUF);
Serial.Print ("-");
Serial.Print ("(hr:");
Serial.Print(t.hr);
Serial.Print(")");
Si (t.hr > = overrideStartHour & & t.hr < = overrideEndHour) {}
anular = true;
Serial.println("Disabled");
} else {}
Serial.println("Enabled");
anular = false;
}

Si (reemplazar)
{
digitalWrite (greenLedPin, HIGH);
}
otra cosa
{
digitalWrite (greenLedPin, bajo);
}

Si (! anular) {}
currentSecs = (currentSecs - 1);
Serial.println(currentSecs);


Si (currentSecs < = 30) {}
Si (yellowState == 1) {}
digitalWrite (yellowLedPin, HIGH);
yellowState = 0;
noTone(PIEZO_PIN);
}
otra cosa
{
digitalWrite (yellowLedPin, bajo);
yellowState = 1;
Si (currentSecs > = 25) {}
Serial.println("Beeping!");
Tone(PIEZO_PIN,4978,1000);
}
}
}

Si (currentSecs < = 0) {}
máximo tiempo para ningún movimiento, apague la TV!
Serial.println ("Swithcing televisor!");
toggleSamsungTV();
}
}
detectmotion();

Delay(1000);
}

void check_time() {}
/ * Obtener la hora actual y la fecha desde el chip * /
Tiempo t = rtc.time();

/ * Nombre del día de la semana * /
memset (día, 0, sizeof(day));  / * borrar el búfer de día * /

/ * Inserte en el búfer temporal y el formato de la hora y fecha * /
snprintf (buf, sizeof(buf), "%s % d 04-02d-% 02d % 02d: % 02d: % 02d",
día,
t.yr, t.mon, t.date,
t.hr, t.min, t.sec);

/ * Imprime la cadena con formato a la serie para que podamos ver el tiempo * /
Serial.Print(BUF);
Serial.Print ("-");
Si (t.hr > overrideStartHour & & t.hr < overrideEndHour) {}
anular = true;
Serial.println("Disabled");
} else {}
Serial.println("Enabled");
anular = false;
}
}

void detectmotion() {}
if(digitalRead(pirPin) == HIGH) {}
digitalWrite (ledPin, HIGH);   el led visualiza el estado de pin de salida de sensores
currentSecs = maxSecs;
digitalWrite (yellowLedPin, bajo);
yellowState = 0;
{if(lockLow)}
se cerciora de que esperamos una transición a la baja antes de cualquier salida de más:
lockLow = false;
Serial.println("---");
Serial.Print ("movimiento detectado en");
Serial.Print(Millis()/1000);
Serial.println ("sec");
Delay(50);
}
takeLowTime = true;
}

if(digitalRead(pirPin) == LOW) {}
digitalWrite (ledPin, LOW);  el led visualiza el estado de pin de salida de sensores
{if(takeLowTime)}
lowIn = millis();          ahorrar el tiempo de la transición de alto a bajo
takeLowTime = false;       Asegúrese de que esto sólo se hace en el inicio de una fase
}
Si el sensor está bajo más de la pausa dada,
asumimos que no hay movimiento más va a pasar
Si (! lockLow & & millis() - lowIn > pausa) {}
hace que este bloque de código es sólo se ejecuta después de
se ha detectado una nueva secuencia de movimiento
lockLow = true;
Serial.Print ("movimiento terminada en");      salida
Serial.Print((Millis() - pausa) / 1000);
Serial.println ("sec");
Delay(50);
}
}
}

void toggleSamsungTV() {}
Apague el TV con el emisor de infrarrojos
repetir la transmisión 3 veces para estar seguro!
para (int i = 0; i < 3; i ++) {}
irsend.sendRaw(S_pwr,68,38);
Serial.println ("enviada SAMSUNG POWER ON/OFF");
irsend.sendRaw(LG_pwr,68,38);
Serial.println ("enviado LG POWER ON/OFF");
Delay(40);
}
el contador global
currentSecs = maxSecs;
}

Artículos Relacionados

Inicio entretenimiento sistema controlado por microcontrolador

Inicio entretenimiento sistema controlado por microcontrolador

Este Instructable le llevará en mi camino para reemplazar mi antiguo reproductor de Bluray de Netflix/Vudu con una estación de entretenimiento basado en PC para mi proyector LCD. Quería ser capaz de acceder y controlar Netflix, Hulu, Youtube, crujido
Smart regleta maestro/esclavo para tu PC [mod] (auto apagado pero cero espera)

Smart regleta maestro/esclavo para tu PC [mod] (auto apagado pero cero espera)

apagado debe estar apagado. Y usabilidad debe ser buena.Para hacerla corta: no se encontró el producto adecuado, por lo que terminamos modding uno.Compramos unas tiras de energía "Energy Saver" de Zweibrueder. Los dispositivos sonmuy sólido y no
VBS - auto apagado de la escritura

VBS - auto apagado de la escritura

se trata de un guión fresco que redacté como 5 minutos así que aquí está... también por favor comenten ty =]...lo que hace este script es abre cmd, luego tiposshutdown -s-f-t 10' diez hace el ordenador pulsar la tecla enter! es genial porque parece q
Cómo utilizar controladores de PS3 en PC a través de Xinput en Windows 08/07/10

Cómo utilizar controladores de PS3 en PC a través de Xinput en Windows 08/07/10

Aquí está un sencillo tutorial para conseguir hasta cuatro controladores de PS3 trabaja a través de Xinput en tu Windows 8/7/Vista PC. La ventaja de esto es que cualquier juego de Xbox 360 controladores trabajan nativamente con controladores de PS3 a
Xbox controlador LED intercambio

Xbox controlador LED intercambio

este instructable es para cualquier persona con un Xbox 360 y alguna experiencia de soldadura que se ha cansado del mismo viejo verde. Esta instrucción no es totalmente completa es para una escuela de clase de la escritura y es todavía en las etapas
Auto-Power-Off impresora 3D

Auto-Power-Off impresora 3D

Bienvenidos a mi primer Instructable,hoy te muestro cómo a auto-apagado la impresora 3D. Hay varias formas de hacer esto, utilizando una fuente de alimentación pc ATX etc. que tiene un pasador para, un mando a distancia toma (pero tienes que cerrar d
Linterna auto-Off

Linterna auto-Off

la linterna auto-apagado es una batería de linterna que por agitación se enciende y permanece encendida en el brillo completo durante siete minutos y luego automáticamente se apaga.  La luz puede restablecerse agitando la linterna en cualquier moment
Apagado automático luz nocturna

Apagado automático luz nocturna

¿Sus hijos como sleepling con una linterna para la protección contra los monstruos? ¿Olvidan gire a off antes de dormirse? Si usted contestó sí a ambas preguntas, necesita su propia "Auto-Off luz nocturna" de ahorro de bateríaPaso 1: Cómo funcio
Desactivación de Auto-Off en una salud de Sunbeam en el cojín de calefacción del hogar

Desactivación de Auto-Off en una salud de Sunbeam en el cojín de calefacción del hogar

Declaración del empirismoHe utilizado esta almohada hace ya varios años (escribí estas instrucciones en diciembre de 2007, ahora es de febrero de 2011).  He tenido exactamente cero problemas con ella - que funciona perfectamente y el erizo es gordo y
Linux: empezando en un servidor de automatización del hogar.

Linux: empezando en un servidor de automatización del hogar.

Linux: empezando en un servidor de automatización del hogar.Esto es sólo un quickie prueba de concepto sobre el uso de un servidor web para Domótica remotamente. a todos nos va a hacer es encender algunos leds, pero el plan de acción estará allí para
250 to 5000 watts PWM DC/AC 220V Power Inverter

250 to 5000 watts PWM DC/AC 220V Power Inverter

Este es un diseño de servicio pesado de un inversor modulador de anchura de pulso DC/AC con el chip SG3524.Lo he estado usando como una copia de seguridad para alimentar mi casa cuando las interrupciones se producen desde aprox. sin parar de 6 años.S
COMPACTA y robusta agricultura automatizado remoto

COMPACTA y robusta agricultura automatizado remoto

Heya chicos... Esta de aquí es interesante así como uno de los proyectos cruciales que hemos hecho hasta ahora. Utiliza una amplia gama y más cool de los dispositivos. Hemos sacrificado un muchas noches de sueño, bunked horas de clases y trabajado pa
HackerBoxes 0001: Árbol de Navidad LED 3D coche inteligente robótica, NodeMCU,

HackerBoxes 0001: Árbol de Navidad LED 3D coche inteligente robótica, NodeMCU,

Este instructable comparte los fundamentos de trabajar con HackerBoxes #0001. HackerBoxes es el servicio de caja de suscripción mensual para aficionados de electrónica, fabricantes y los hackers. Si desea recibir un cuadro como este derecho a su buzó
Mejora de DMM mini

Mejora de DMM mini

los compradores en las tiendas de electrónica de Australia/Nueva Zelanda Jaycar pueden ha detectado recientemente que su nuevo lindo naranja QM-1502 mini DMM (multímetro digital) y se pregunta si tales tiro a un precio "juguetes" pueden ser grav