Hem underhållning Auto Power-down (HEAP Controller) (5 / 7 steg)

Steg 5: Arduino kod

För IR-kommunikation använde jag IRemote bibliotek bibliotek för Arduino. För att ladda ner från github (http://github.com/shirriff/Arduino-IRremote), klickar du på länken "Downloads" i det övre högra hörnet, klicka på "Ladda ner som zip" och få en zip-fil. Packa upp den och byta namn på katalogen shirriff-Arduino-IRremote-nnn till IRremote

För DS1302 RTC jag använde följande bibliotek för Arduino: https://github.com/msparks/arduino-ds1302

För att producera Signalgivare utgång ljud jag använder standard SPI.h Arduino bibliotek. För mer information se http://arduino.cc/en/Reference/SPI

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

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

/ * Ange lämplig digital I/O stift anslutningarna för RTC-modulen * /
uint8_t CE_PIN = 4;
uint8_t IO_PIN = 10;
uint8_t SCLK_PIN = 8;

#define RTC5vPin 5 / / detta stift kommer att användas för att tillhandahålla + 5v till RTC
#define RTCgndPin 6 / / detta stift kommer att användas för att förse RTC GND

#define PIEZO_PIN 11

/ * Skapa buffertar * /
char buf [50];
char dag [10].

IRsend irsend;

/ * Skapa RTC DS1302 objekt * /
DS1302 rtc (CE_PIN, IO_PIN, SCLK_PIN);

SAMSUNG TV ström på/av koder (ändra detta för att matcha din fjärrkontroll koder)
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 surroundljud (ändra detta för att matcha din fjärrkontroll koder)
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. den tid som vi ger sensorn för att kalibrera (10-60 SEK enligt databladet)
länge osignerade int lowIn; tiden när sensorn utgångar en låga impuls
länge osignerade int paus = 3000; mängden millisekunder sensorn har vara låg innan vi antar all rörelse har slutat
booleska override = false;

booleska lockLow = sant;
booleska takeLowTime;

int pirPin = 3; Den digital pin ansluten till PIR-sensorns utgång
int ledPin = 13. Inbyggda LED är kopplad till en extern röd LED

int maxSecs = 300; Maxtid för ingen rörelse innan vi stänga TV: N
Ändra detta till era egna behov (standard 5 minuter)

int overrideStartHour = 19. Vilken timme att starta fönstret omställning
int overrideEndHour = 23. Vilken timme till slut fönstret omställning

int currentSecs = 0; Globala räknare

GREEN och YELLO LED stift
int greenLedPin = 12;
int yellowLedPin = 2;

int yellowState = 0;

void setup() {
Serial.BEGIN(9600);

pinMode (RTC5vPin, OUTPUT); anger Pin för hög effekt
digitalWrite (RTC5vPin, hög); Aktivera pin på (5v) till makten RTC
pinMode (RTCgndPin, OUTPUT); anger Pin för utdata
digitalWrite (RTCgndPin, låg); Aktivera pin på låg (GND) till makten RTC

pinMode (11, OUTPUT); anger Pin 11 för utdata
digitalWrite (11, låg). Aktivera stift 11 på låg (GND) till makten RTC

pinMode (pirPin, ingång); initiera PIR staten upptäckt pin som indata
pinMode (ledPin, produktionen); initiera ombord LED stift som indata
digitalWrite (pirPin, låg); börja med ingen rörelse

pinMode(greenLedPin,OUTPUT);
digitalWrite (greenLedPin, låg);

pinMode(yellowLedPin,OUTPUT);
digitalWrite (yellowLedPin, låg);
yellowState = 0;

/*
Initiera ett nytt chip av vändningen bort skrivskyddet och röjning i
klockan stoppa flagga. Dessa metoder behöver inte alltid kallas. Se DS1302
datablad för detaljer.
O-kommentera koden nedan att inrätta en ny RTC chip. När kör du behöver
kommentera del av koden igen.
*/

RTC.write_protect(false);
RTC.halt(false);
Tiden t (2013, 7, 7, 14, 45, 0, 0); Skapa ett nytt tid objekt om du vill ange datum och tid
RTC.Time(t); Ställa in tid och datum på chip
RTC.write_protect(true);

ge att PIR-sensorn lite tid att kalibrera
Serial.Print ("kalibrera sensorn");
för (int jag = 0; jag < calibrationTime; i ++) {
Serial.Print(".");
Delay(1000);
}
Serial.println ("gjort");
Serial.println ("sensorn aktiv");
Delay(50);

återställa den globala räknaren
currentSecs = maxSecs;

StartupBeep();
}

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

////////////////////////////
LOOP
void loop() {
/ * Få aktuell tid och datum från chip * /
Tiden t = rtc.time();

/ * Namnge dagen i veckan * /
MEMSET (dag 0, sizeof(day)); / * klart dagen buffert * /

/ * Formatera datum och tid och sätt in i tillfälliga bufferten * /
snprintf (buf, sizeof(buf), "%s % 04d-02d-% 02d % 02d: % 02d: % 02d",
dag,
t.yr, t.mon, t.date,
t.hr, t.min, t.sec);

/ * Skriva ut formaterade strängen till serial så vi kan se tiden * /
Serial.Print(BUF);
Serial.Print ("-");
Serial.Print ("(hr:");
Serial.Print(t.hr);
Serial.Print(")");
om (t.hr > = overrideStartHour & & t.hr < = overrideEndHour) {
åsidosätta = sant;
Serial.println("Disabled");
} annat {
Serial.println("Enabled");
åsidosätta = false;
}

om (åsidosätter)
{
digitalWrite (greenLedPin, hög);
}
annat
{
digitalWrite (greenLedPin, låg);
}

om (! åsidosätta) {
currentSecs = (currentSecs - 1);
Serial.println(currentSecs);

om (currentSecs < = 30) {
om (yellowState == 1) {
digitalWrite (yellowLedPin, hög);
yellowState = 0;
noTone(PIEZO_PIN);
}
annat
{
digitalWrite (yellowLedPin, låg);
yellowState = 1;
om (currentSecs > = 25) {
Serial.println("beeping!");
Tone(PIEZO_PIN,4978,1000);
}
}
}

om (currentSecs < = 0) {
Max tid för ingen rörelse nått, stänga av TV!
Serial.println ("Swithcing av TV!");
toggleSamsungTV();
}
}
detectmotion();

Delay(1000);
}

void check_time() {
/ * Få aktuell tid och datum från chip * /
Tiden t = rtc.time();

/ * Namnge dagen i veckan * /
MEMSET (dag 0, sizeof(day)); / * klart dagen buffert * /

/ * Formatera datum och tid och sätt in i tillfälliga bufferten * /
snprintf (buf, sizeof(buf), "%s % 04d-02d-% 02d % 02d: % 02d: % 02d",
dag,
t.yr, t.mon, t.date,
t.hr, t.min, t.sec);

/ * Skriva ut formaterade strängen till serial så vi kan se tiden * /
Serial.Print(BUF);
Serial.Print ("-");
om (t.hr > overrideStartHour & & t.hr < overrideEndHour) {
åsidosätta = sant;
Serial.println("Disabled");
} annat {
Serial.println("Enabled");
åsidosätta = false;
}
}

void detectmotion() {
IF(digitalRead(pirPin) == hög) {
digitalWrite (ledPin, hög); den ledde visualiserar sensorer utdata pin staten
currentSecs = maxSecs;
digitalWrite (yellowLedPin, låg);
yellowState = 0;
IF(lockLow) {
ser till att vi väntar på en övergång till låg innan någon ytterligare utgång görs:
lockLow = false;
Serial.println("---");
Serial.Print ("rörelse upptäckts på");
Serial.Print(Millis()/1000);
Serial.println ("sec");
Delay(50);
}
takeLowTime = sant;
}

IF(digitalRead(pirPin) == låg) {
digitalWrite (ledPin, låg); den ledde visualiserar sensorer utdata pin staten
IF(takeLowTime) {
lowIn = millis(); Spara tiden för övergången från hög till låg
takeLowTime = false; se till att detta görs endast i början av en låg fas
}
om sensorn är låg för mer än den givna pausen,
Vi antar att ingen mer motion som kommer att hända
om (! lockLow & & millis() - lowIn > pausa) {
gör säkert detta kodblock endast körs igen efter
ett nytt förslag sekvens har upptäckts
lockLow = sant;
Serial.Print ("motion slutade på"); utgång
Serial.Print((Millis() - paus) / 1000);
Serial.println ("sec");
Delay(50);
}
}
}

void toggleSamsungTV() {
Stäng av TV: N med IR-blastern
Upprepa överföringen 3 gånger för att vara säker!
för (int jag = 0; jag < 3; i ++) {
irsend.sendRaw(S_pwr,68,38);
Serial.println ("skickats SAMSUNG POWER ON/OFF");
irsend.sendRaw(LG_pwr,68,38);
Serial.println ("skickats LG POWER ON/OFF");
Delay(40);
}
återställa den globala räknaren
currentSecs = maxSecs;
}

Se Steg
Relaterade Ämnen

Billig underhållning - strumpa-Muppet

alla har vissa holey strumpor. Inte den religiösa typ men som du har slitits ner svordomar på ekonomin samtidigt tjat över trottoaren letar efter någon som kunde bespara er en dime.Med priser kommer astronomiska på teatern och en hink med popcorn och...

Mikrokontroller kontrollerade hem underhållningssystem

Detta Instructable tar dig med på min resa att ersätta min gamla Netflix/Vudu Bluray spelare med en PC-baserad underhållning station för min LCD-projektor. Jag ville kunna komma åt och styra Netflix, Hulu, Youtube, spraka, NBC, ABC och Weather Channe...

Eco-Friendly underhållning bit

Jag ville ha en underhållning som skulle hålla alla komponenter som vi hade och ge utrymme för filmer, spel, osv... Den hade också vara lätt att flytta att rengöra bakom och plug/koppla ur komponenterna eller ändra dem ut. Jag älskar pallar och jag s...

Universal tablet innehavaren design för i bilen, baksätet underhållning

det finns en hel del utforskning runt användning av tabletter i bilar dessa dagar. Mina behov var i området i baksätet underhållning. Hur kan jag konfigurera min tablett i bilen för att underhålla fyra barn under en lång roadtrip? Jag tittade på näte...

Vinna på Premium Poker underhållning Online

Om du är ny på online pokervärlden sedan titta på denna video och lära sig hur man vinner på premium poker underhållning online. Och du kan också besöka PokerSites.net.nz där du hittar allt du behöver för att få igång spela online som ett proffs....

Hem energihushållning och Automation med Z-Wave

Energibesparing är ett stort ämne, det finns många sätt att spara energi, från stänga av dina lampor när du lämnar ett rum hela vägen till att sätta i gummilister att säkerställa din inte låta ut varm eller kall luft från ditt hem. Dessa är absolut h...

Underhållning hylla

Jag nyligen lite kulan och köpt en fancy ny TV. För senaste tre åren har jag använt en hylla hittade jag i en container att hålla alla mina AV redskap. Den nya TV är elegant och motiverat en uppgradering från gammalt container hylla, således anlednin...

Underhållning för barnen bröllop för under en tia

Hej alla! Detta anges i DIY bröllop utmaningen, så om du gillar det, rösta för det!Bröllop är ett underbart tillfälle, men ibland för de minsta gästerna de kan dra på lite. De långa tal, alla de vuxna talar om vuxit upp saker, och så många extra regl...

Dresser till underhållning står konvertering

College barn kommer att slänga något ut! Hittade den här killen upp och ner en dag när att hjälpa en vän fixa hans cykel. Byrå med nr ritar (inte ens i sikte). Ser perfekt för ett TV-ställ. Fick Tom sprit flaskor och lämnar ut och lastade in min last...

Pool solfångare eller synvilla för underhållning

kommersiella solar pool värmeelement är dyra, speciellt om du behöver multples. Här är hur du kan snickra ihop en samlare/solfångare för din pool och skapa intressanta 3D-optiska illusioner för att underhålla (eller skrämma) dina grannar och vänner.D...

Infällda underhållning vägg

jag byggt en andra vägg på andra sidan av den. I gäst sovrum. Jag placerade den rätten mot befintlig vägg, efter riva det ner till dubbar. Det gav mig en djupare fördjupning. Det är bara 90% klart, jag måste dölja sladdar till tv och bygga min dörrar...

Staten Farm våren hem underhåll

Alla som någonsin har överlevt en hårt väder storm eller naturligakatastrof vet att skadorna på hem och egendom kan vara överväldigande, känslomässigt och ekonomiskt. Även om det är omöjligt att veta exakt när en katastrof kommer att slå, vill State...

Auto Power Off: spara batterier

Denna lilla krets kan din microcontroller avskurna makt.Tryck på knappen Aktivera kretsen.Om du vill stänga av enheten "till microcontroller" signalen med hög beroende på vilket villkor du gillar. För batteri program kanske du vill ha en spännin...

Möbler "Kirurgi" för en ny underhållning centrerar

detta instructable foto visar att även när din 26-tums CRT-baserade TV blir föråldrade ditt nöjescentrum inte har att följa i dess fotspår.Det verkade ett brott att behöva kasta bort ett perfekt bra entertainment center när du uppgraderar till en ny...

Gör din egen Mario underhållning stå!

jag hade vissa Mario dekaler för mina väggar och ville göra en cool tv stå att gå med på det för mitt vardagsrum.Material som behövs:Lagring kuberPrimer och spray färg (brunt och guld)Akrylfärg (svart och orange)Affisch styrelse för stencilerSpray gl...

Kartong Bar topp Arcade spelkonsol - litium regn återvunnet underhållning maskin rättfärdighetens

vad göra med en gammal analog TV och VHS video bandspelare? Kan inte tåla för att bli av med dem precis som de gamla kassett och 8-track spelare du har fick ligga runt? Tja, runda upp lite retro elektroniska skräp och rädda den från deponin. Go GREEN...

ISpa - underhållning för Jacuzzi nördar

[kolla min ny & förbättrat version av SPApad!]Så jag har precis lagt en jacuzzi för 5 personer, och lusthus i mitt nya hus, och jag vill ha musik, filmer, och naturligtvis tillgång till Internet (och hemautomation, ingenting får en geek girl varmare,...

Underhållning till kök/Diner

steg ett. Spendera sätt till många timmar på Craigslist söker precis rätt enSteg 1: Tår ner och primer Var ute efter ett roligt projekt för mig och små. Sett några på här och beslutade att gå för det. Tillbringade en tid söker och hittade en jag vill...

Minecraft underhållning Room

Någonsin bara sitta och tänka: "Man, jag önskar jag kunde bara slappna av och titta på tv i Minecraft." Vi ska du bör. Detta instructable inkluderar: en soffa, en TV och en surround ljudsystem. Njut!Steg 1: Välj klokt Bygga en stor vägg och sätt...