Home Entertainment Auto Power-down (HEAP Controller) (5 / 7 stap)

Stap 5: Arduino code

Voor de IR-communicatie gebruikte ik de IRemote bibliotheek-bibliotheek voor de Arduino. Voor het downloaden van github (http://github.com/shirriff/Arduino-IRremote), klik op de link "Downloads" in de rechterbovenhoek en klik op "Downloaden als zip" krijgen een zip-bestand.  Unzip het en hernoem de folder shirriff-Arduino-IRremote-nnn naar IRremote

Voor de RTC DS1302 gebruikte ik de volgende library voor Arduino: https://github.com/msparks/arduino-ds1302

Voor de productie van de beeper geluid gebruik ik de standaard SPI.h Arduino library. Zie http://arduino.cc/en/Reference/SPI voor details

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

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

/ * Stel de juiste digitale I/O pin aansluitingen voor de RTC-module * /
uint8_t CE_PIN = 4;
uint8_t IO_PIN = 10;
uint8_t SCLK_PIN = 8;

#define RTC5vPin 5 / / deze pin wordt gebruikt om + 5v aan de RTC
#define RTCgndPin 6 / / deze pin wordt gebruikt voor GND geven de RTC

#define PIEZO_PIN 11

/ * Buffers kan maken * /
char buf [50];
char dag [10];

IRsend irsend;

/ * Maakt een object RTC DS1302 * /
DS1302 rtc (CE_PIN, IO_PIN, SCLK_PIN);

SAMSUNG TV Power on/off codes (veranderen zodat deze overeenkomt met uw externe codes)
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};

LG Surround Sound (veranderen zodat deze overeenkomt met uw externe codes)
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;         de tijd die we geven de sensor kalibreren (10-60 sec volgens het gegevensblad)
lang unsigned int lowIn;          het tijdstip wanneer de sensor een lage impuls uitgangen
lang unsigned int pauze = 3000;   het aantal milliseconden die de sensor worden lage moet voordat we aannemen alle beweging dat is gestopt
Booleaanse override = false;

Boole lockLow = waar;
Booleaanse takeLowTime;

int pirPin = 3;                   De digitale pin aangesloten op uitgang van de PIR-sensor
int ledPin = 13;                  Ingebouwde LED is aangesloten op een externe rode LED

int maxSecs = 300;                Max tijd voor geen beweging heeft plaatsgevonden voordat we de TV uitschakelen
Dit aanpassen aan uw eigen behoeften wijzigen (standaard 5 minuten)

int overrideStartHour = 19;       Welke uur om te beginnen met het override-venster
int overrideEndHour = 23;       Welke uur tegen het override-venster

int currentSecs = 0;              Globale teller

GROEN en YELLO LED pinnen
int greenLedPin = 12;
int yellowLedPin = 2;

int yellowState = 0;

VOID Setup {}
Serial.begin(9600);

pinMode (RTC5vPin, uitvoer);      Pin ingesteld voor hoge output
digitalWrite (RTC5vPin, hoge);   Schakel pin op (5v) aan de macht RTC
pinMode (RTCgndPin, uitvoer);     sets Pin voor uitvoer
digitalWrite (RTCgndPin, laag);   Schakel pin op lage (GND) aan de macht RTC

pinMode (11, OUTPUT);            Pin 11 sets voor uitvoer
digitalWrite (11, laag);          Schakel pin 11 op lage (GND) aan de macht RTC

pinMode (pirPin, INPUT);         initialiseren van de PIR pin voor de detectie van de staat als input
pinMode (ledPin, OUTPUT);        initialiseren van de ingebouwde LED-pin als input
digitalWrite (pirPin, laag);       beginnen met geen beweging

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

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

/*
Initialiseren van een nieuwe chip door schrijven bescherming uitschakelen en clearing het
Klok stoppen vlag. Deze methoden hoeft niet altijd te worden genoemd. Bekijk de DS1302
gegevensblad voor meer informatie.
Un-comment de onderstaande code om in te stellen van een nieuwe RTC-chip. Zodra u wilt in werking
Opmerking de sectie van code weer.
*/

RTC.write_protect(false);
RTC.halt(false);
Tijd t (2013, 7, 7, 14, 45, 0, 0); Maakt een nieuw object van de tijd om de datum en tijd instellen
RTC.time(t); Stel de tijd en datum op de chip
RTC.write_protect(true);


de PIR sensor enige tijd te geven om te kalibreren
Serial.Print ("kalibreren sensor");
for (int i = 0; ik < calibrationTime; i ++) {}
Serial.Print(".");
delay(1000);
}
Serial.println ("done");
Serial.println ("SENSOR actief");
delay(50);

de globale teller instellen
currentSecs = maxSecs;

StartupBeep();
}

VOID StartupBeep() {}
Tone(PIEZO_PIN,4978,2000);
delay(100);
noTone(PIEZO_PIN);
}

////////////////////////////
LOOP
void loop {}
/ * Krijg de huidige tijd en datum van de chip * /
Tijd t = rtc.time();

/ * Naam van de dag van de week * /
memset (dag 0, sizeof(day));  / * dag buffer leeg * /

/ * De tijd en datum opmaken en invoegen in de tijdelijke buffer * /
snprintf (buf, sizeof(buf), "%s % 04d-% 02d-% 02d % 02d: % 02d: % 02d",
dag,
t.yr, t.mon, t.date,
t.HR, t.min, t.sec);

/ * De opgemaakte tekenreeks naar seriële afdrukken zodat we de tijd zien kunnen * /
Serial.Print(BUF);
Serial.Print ("-");
Serial.Print ("(hr:");
Serial.Print(t.HR);
Serial.Print(")");
Als (t.hr > = overrideStartHour & & t.hr < = overrideEndHour) {}
negeren = true;
Serial.println("disabled");
} else {}
Serial.println("enabled");
negeren = false;
}

Als (overschrijven)
{
digitalWrite (greenLedPin, hoge);
}
anders
{
digitalWrite (greenLedPin, laag);
}

Als (! overschrijven) {}
currentSecs = (currentSecs - 1);
Serial.println(currentSecs);


Als (currentSecs < = 30) {}
Als (yellowState == 1) {}
digitalWrite (yellowLedPin, hoge);
yellowState = 0;
noTone(PIEZO_PIN);
}
anders
{
digitalWrite (yellowLedPin, laag);
yellowState = 1;
Als (currentSecs > = 25) {}
Serial.println("beeping!");
Tone(PIEZO_PIN,4978,1000);
}
}
}

Als (currentSecs < = 0) {}
Max tijd voor geen beweging bereikt, schakelt u de TV!
Serial.println ("Swithcing uit TV!");
toggleSamsungTV();
}
}
detectmotion();

delay(1000);
}

ongeldig check_time() {}
/ * Krijg de huidige tijd en datum van de chip * /
Tijd t = rtc.time();

/ * Naam van de dag van de week * /
memset (dag 0, sizeof(day));  / * dag buffer leeg * /

/ * De tijd en datum opmaken en invoegen in de tijdelijke buffer * /
snprintf (buf, sizeof(buf), "%s % 04d-% 02d-% 02d % 02d: % 02d: % 02d",
dag,
t.yr, t.mon, t.date,
t.HR, t.min, t.sec);

/ * De opgemaakte tekenreeks naar seriële afdrukken zodat we de tijd zien kunnen * /
Serial.Print(BUF);
Serial.Print ("-");
Als (t.hr > overrideStartHour & & t.hr < overrideEndHour) {}
negeren = true;
Serial.println("disabled");
} else {}
Serial.println("enabled");
negeren = false;
}
}

ongeldig detectmotion() {}
if(digitalRead(pirPin) == HIGH) {}
digitalWrite (ledPin, hoge);   de led visualiseert de sensoren uitvoer pin staat
currentSecs = maxSecs;
digitalWrite (yellowLedPin, laag);
yellowState = 0;
if(lockLow) {}
zorgt ervoor dat we wachten op een overgang naar lage voordat verdere uitvoer plaatsvindt:
lockLow = false;
Serial.println("---");
Serial.Print ("bewegingsdetectie op");
Serial.Print(Millis()/1000);
Serial.println ("sec");
delay(50);
}
takeLowTime = true;
}

if(digitalRead(pirPin) == LOW) {}
digitalWrite (ledPin, laag);  de led visualiseert de sensoren uitvoer pin staat
if(takeLowTime) {}
lowIn = millis();          opslaan van het tijdstip van de overgang van hoog naar laag
takeLowTime = false;       Zorg ervoor dat dit gebeurt alleen bij het begin van een lage fase
}
de sensor wordt laag voor meer dan het bepaalde pauze,
Wij gaan ervan uit dat geen meer beweging gaat gebeuren
Als (! lockLow & & millis() - lowIn > onderbreken) {}
maakt zeker dit blok code wordt alleen uitgevoerd na opnieuw
een nieuwe reeks van beweging is gedetecteerd
lockLow = true;
Serial.Print ("motion eindigde op");      uitgang
Serial.Print((Millis() - onderbreken) / 1000);
Serial.println ("sec");
delay(50);
}
}
}

ongeldig toggleSamsungTV() {}
Schakel de TV uit met de IR-blaster
Herhaal de transmissie 3 keer om zeker te zijn!
for (int i = 0; ik < 3; i ++) {}
irsend.sendRaw(S_pwr,68,38);
Serial.println ("verzonden SAMSUNG POWER ON/OFF");
irsend.sendRaw(LG_pwr,68,38);
Serial.println ("verzonden LG POWER ON/OFF");
delay(40);
}
de globale teller instellen
currentSecs = maxSecs;
}

Gerelateerde Artikelen

Auto-Power-Off 3D-Printer

Auto-Power-Off 3D-Printer

Welkom op mijn eerste Instructable,vandaag ik je laten zien hoe te auto-power-off uw 3D-printer. Er zijn verschillende manieren om dit te doen, zoals een ATX etc. pc power supply heeft een pin daarvoor, een afstandsbediening socket gereguleerde (maar
Auto Subwoofer geconverteerd voor In-Home gebruik met iPod/Home Entertainment PC

Auto Subwoofer geconverteerd voor In-Home gebruik met iPod/Home Entertainment PC

ik ontwierp en bouwde een aangepaste subwoofer doos om sommige extra auto audio-onderdelen had ik tot rond.Ik ben van plan om een volledige Instructable tutorial post.Voor nu zijn hier enkele foto's van het proces en de eindresultaten.
Alles-in-één solar Home Entertainment

Alles-in-één solar Home Entertainment

het begon allemaal ongeveer een jaar geleden op het werk toen mijn baas ging uit te gooien een prima kunststof batterij box uit zijn auto. Ik nam het huis en het zat in de garage voor een tijdje totdat op een dag mijn twee dochters begon vechten om e
Microcontroller gecontroleerd Home Entertainment System

Microcontroller gecontroleerd Home Entertainment System

Dit Instructable vindt u op mijn reis ter vervanging van mijn oude Netflix/Vudu Bluray-speler met een PC-gebaseerde entertainment station voor mijn LCD-projector. Ik wilde om toegang tot en controle van Netflix, Hulu, Youtube, Crackle, NBC, ABC en he
USB Auto Power Bar

USB Auto Power Bar

toen mijn USB autolader stierf voor de 3e keer in een jaar (gelukkig vorige waren alle vervangen onder garantie, Jimmy bij de telefooncel is awesome!) Ik wist dat het na vervanging tijd nu en ik wilde iets meer.Met de overvloed van apparaten USB-aang
Auto tie down ankers, de gemakkelijke manier om het binden van om het even wat aan het dak van uw auto snel en veilig

Auto tie down ankers, de gemakkelijke manier om het binden van om het even wat aan het dak van uw auto snel en veilig

terug naar toen ik eerst reed, mijn ' 76 Buick had solide stalen bumpers die ook heel goed als gedegen rammen werkte. je kon riem of iets af te binden aan hen en zelfs bout een aanhangwagen kink in de kabel rechtstreeks aan hen zonder enige bezorgdhe
Het toevoegen van een tweede auto Power Jack

Het toevoegen van een tweede auto Power Jack

u weet wanneer u al die rotzooi in uw auto, en elk een aansluiting van de macht van zijn eigen? Goed, zelfs als u dat niet doet, doen ik. Hoewel splitters beschikbaar zijn, hebben ze een beperkte stroom (wat de aansluiting kan verstrekken). Dus als u
Auto gereguleerde met PS3 controller

Auto gereguleerde met PS3 controller

dit zal u tonen hoe te nemen een afstand gecontroleerde auto, met het gebruik van de arduino, controle met een PS3-controller.Dingen die je moet:dradensoldeerboutArduinoUSB-shield voor de arduino (dit kan worden gemakkelijk gevonden op plaatsen zoals
Home Made Solar Power System

Home Made Solar Power System

ik echt wilde uitproberen van zonne-energie. Ik besloot om dit te maken. Ive zet de hele zaak in mijn kasten in mijn kamer.Stap 1: onderdelen Parts:2 x 5 watt mono-kristallijne zonnepanelen1 x 12/24 volt, 10amp zonne-heffing controllerElke meter draa
De zender van de FM van Belkin van accu-energie omzetten in auto Power

De zender van de FM van Belkin van accu-energie omzetten in auto Power

ik heb een van de originele Belkin Tunecast FM transmitter voor mijn iPod. Nadat ik het een paar AA batterijen gevoed besloten heb ik dat ik moest een betere manier. Dus, hier is hoe ik een auto sigarettenaansteker mobiele telefoon oplader omgezet in
Auto Power Off: Bespaar batterijen

Auto Power Off: Bespaar batterijen

Dit kleine circuit kunt uw microcontroller af te snijden de macht.Het circuit inschakelen door druk op de knop.Om de drive uit te schakelen het signaal "aan microcontroller", die te hoog met welke voorwaarde u graag. Voor accu toepassingen die u
Mijn Home Made Computer Power Supply Tester

Mijn Home Made Computer Power Supply Tester

ik heb het oorspronkelijke idee van deze site en dankzij al diegenen die hun inzichten te delen... Dit is mijn versie voor een eenvoudige macht levering tester gemaakt van onderdelen van een oude computer gesloopt.
Belkin Tunecast II FM zender Mod

Belkin Tunecast II FM zender Mod

Belkin is een populaire fabrikant van goedkope en vrolijke computeraccessoires, met eentje gemaakt van de USB-hub sexy! Een van hun meest populaire product balk de iPod populariteit rit, is de Tunecast II FM-zender.Het is eerder dit jaar (2007) dat F
Kalibreren van de batterij-indicator van uw Garmin Edge 500

Kalibreren van de batterij-indicator van uw Garmin Edge 500

Als u eigenaar bent van een Garmin Edge 500 misschien u opgevallen dat na verloop van tijd die de batterij-indicator altijd 100 geeft %, ongeacht hoe lang een rit het kan hebben gebruikt om vast te leggen. In de foto ziet u dat de batterij-indicator