Sleep Cycle väckarklocka med rörelsesensor (4 / 5 steg)

Steg 4: Program klockan

Hur man programmerar varje komponent:

Realtidsklocka
Efter löpande den ursprungliga SetTime, är det mycket lätt att använda DS1307. Var noga med att inkludera Time.h och DS1307RTC.h filer och inkludera uttrycket "tmElements_t tm;". För att läsa tid från klockan, skapa en if uttalande säger "if(RTC.read(tm))" att kontrollera om RTC tiden kan läsas. Inom att om uttalande kan du få någon potion av tiden genom att skriva någon av följande:
TM. Timme
TM. Minut
TM. Dagen
TM. Månad
TM. År

Summern
Funktionen för Arduino tone() för att spela toner av olika frekvens och varaktighet på min piezo summern. Stift 9 fungerar som en utgång till summern. Funktionen tonar bör skrivas enligt följande:
tonen (pin, frekvens, varaktighet);
Jag tyckte att det bästa sättet att spela och hela låten var att skapa 3-matriser som vars enskilda artiklar användes i en for-loop. En array var för frekvenser för varje not, en var för varaktigheten av varje not och sist var för pauserna mellan tonerna. Jag hittade all denna information för Super Mario temat låten från inlägget av återskapa på detta forum:
http://Arduino.cc/forum/index.php/topic, 8409.0.html
Han eller hon använder en separat tonen i sin kod, så jag kopierade bara de frekvenser, varaktigheter och pauser i min egen matriser. Jag också till 100 millisekunder varje paus och varaktighet eftersom melodin var lite snabb.

LCD-Display
Hämta Adafruit RGB LCD sköld biblioteket finns på följande länk:
https://github.com/adafruit/Adafruit-RGB-LCD-Shield-Library
Inkludera Adafruit_MCP23017.h och Adafruit_RGBLCDShield.h i din kod, för att manipulera den LCD skölden.

Hur slutprodukten ska arbeta:

Första visningen på LCD bör läsa "Tryck Select". Att trycka på knappen Välj byter klockan från normal klocka läge ställa Alarm läge eller tillbaka till klockläget. En gång i ställa in Alarm läge, gör att trycka på rätt knapp att du kan larmet på eller av (kontrollerad av den vänstra knappen), ställa in timmen av alarmet (kontrolleras av UP-knappen), eller ändra minimalt av larmet (kontrolleras av knappen DOWN). Inga problem om det inte ganska rimligt ändå. Varje steg har instruktioner om vilken knapp att trycka på längs vägen.

När larmet går, kan du stänga av genom att trycka på knappen extra (bifogas framför min klocka).

Den fullständiga koden:

Min loop är ganska komplicerat, men klockan fungerar! Om du har förslag på hur man kan förenkla koden, låt mig veta. Jag fann det svåraste programmet knapptryckningar som separata åtgärder och för att få klockan att skriva ut datum och tid så att det skulle ständigt uppdatera.
Förhoppningsvis kommer du att kunna förstå det om du vill göra tweaks för din egen till klockan!

#include < DS1307RTC.h >
#include < Time.h >
#include < Wire.h >
#include < Adafruit_MCP23017.h >
#include < Adafruit_RGBLCDShield.h >

Koden för en sleep cycle väckarklocka
Använder PIR rörelsesensor, LCD sköld, knappen, piezo Summer, realtidsklocka

Dessa #defines gör det enkelt att ställa in bakgrundsljus färg
#define röd 0x1
#define gul 0x3
#define grön 0x2
#define kricka 0x6
#define blå 0x4
#define VIOLET 0x5
#define vit 0x7

Frekvenser av toner spelas larm melodi
int melodi [] = {660,660,510,660,770,380,510,380,320,440,480,450,
430,380,660,760,860,700,760,660,520,580,480,510,380,320,440,480,
450,430,380,660,760,860,700,760,660,520,580,480,500,760,720,680,
620,650,380,430,500,430,500,570,500,760,720}.

varaktighet av toner spelas larm melodi
int längd [] = {200,200,200,200,200,200,200,200,200,200,180,200,
200,200,180,150,200,180,150,180,180,180,180,200,200,200,200,180,
200,200,200,180,150,200,180,150,180,180,180,180,200,200,200,200,
250,250,200,200,200,200,200,200,200,200,200}.

fördröjning mellan toner
int fördröjningstid [] = {175,250,250,150,250,375,387,325,300,350,250,265,
175,250,200,200,175,250,175,275,250,175,175,275,375,300,350,250,265,
175,250,200,200,275,250,175,275,250,175,175,350,250,150,175,175,250,
250,175,175,250,175,150,210,250,150}.

int switchPin = 5;
int pirPin = 6;
int buzzerPin = 9;

Välj alarm antingen set eller klocka läge
int hjälpmedelslägevälja;
heltal att välja vilken del av larmet att ställa
int alarmSelect;
Heltal för ställa in larmet på on eller off
int alarmSetOnInt;
Heltal för inställningen timme för alarm
int alarmHourSet;
Heltal för att ange minuter för alarm
int alarmMinSet;
Heltal som anger om knappen har tryckts
int buttonVal;
Heltal spårning upptäckt rörelse
int motionDetected;

Om larmet är på
booleska alarmOn = false;
Huruvida alam är för närvarande kommer
booleska alarmGoingOff = false;
Booleskt värde som är sant när tiden har gått
booleska alarmCanGoOff = false;

tmElements_t tm;
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();

void setup() {

Wire.BEGIN();
Serial.BEGIN(9600);
LCD.BEGIN(16,2);

ställa in bakgrundsljus och första meddelande
lcd.setBacklight(VIOLET);
lcd.setCursor(1,1);
LCD.Print ("Tryck på Markera");

pinMode (pirPin, ingång);
hjälpmedelslägevälja = 0;
alarmSelect = 0;
alarmSetOnInt = 0;
alarmHourSet = -1;
alarmMinSet = -1;
motionDetected = 0;
alarmGoingOff = false;

uint8_t jag = 0;

}

void loop() {
uint8_t knappar = lcd.readButtons();

buttonVal = digitalRead(switchPin);
IF(buttonVal == High) {
LCD.Clear();
alarmOn = false;
alarmCanGoOff = false;
alarmGoingOff = false;
}

Om larmet inte går, skriv normala datum och tid
IF(!alarmGoingOff) {
printDateTime();
}

Om larmet går och det är inte alarmtiden, fortsätta larmet
om (alarmGoingOff & tm. Minut! = alarmMinSet) {
LCD.Clear();
alarmOn =! alarmOn;
alarmGoingOff =! alarmGoingOff;
}

IF(buttons) {
Om select-knappen trycks, välja ett läge
IF(buttons & BUTTON_SELECT) {
IF(modeSelect>1) {
hjälpmedelslägevälja = 0;
}
LCD.Clear();
hjälpmedelslägevälja = hjälpmedelslägevälja + 1.
alarmSelect = 0;
Delay(1000);
IF(modeSelect == 1) {
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("Set Alarm");
lcd.setCursor(1,1);
LCD.Print ("Tryck på rätt");
Delay(1000);
}

}
Om läge markerat är larm, aktivera inställningen av larm
IF(modeSelect == 1) {
IF(buttons & BUTTON_RIGHT) {
IF(alarmSelect>2) {
alarmSelect = 0;
}
alarmSelect = alarmSelect + 1.
Delay(1000);
Visa om larmet är på eller av
IF(alarmSelect == 1) {
LCD.Clear();
IF(!alarmOn) {
lcd.setCursor(1,0);
LCD.Print ("Alarm off");
lcd.setCursor(1,1);
LCD.Print ("Tryck vänster");
Delay(1000);
} annat if(alarmOn) {
lcd.setCursor(1,0);
LCD.Print ("larm på");
print2digits(alarmHourSet,10,0);
lcd.setCursor(12,0);
LCD.Print(":");
print2digits(alarmMinSet,13,0);
}
} annat if(alarmSelect == 2) {
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("Set timme");
lcd.setCursor(1,1);
LCD.Print ("Tryck upp");
} annat if(alarmSelect == 3) {
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("Ange minuter");
lcd.setCursor(1,1);
LCD.Print ("Tryck ner");
}
}
}

Ange om larmet är på eller av
IF(alarmSelect == 1) {
IF(buttons & BUTTON_LEFT) {
alarmOn =! alarmOn;
LCD.Clear();
Delay(1000);
IF(alarmOn) {
LCD.Print ("larm på");
} annat if(!alarmOn) {
LCD.Print ("Alarm Off");
}
}
}

Ange timmar
IF(alarmSelect == 2) {
IF(buttons & BUTTON_UP) {
LCD.Clear();
alarmHourSet = alarmHourSet + 1.
IF(alarmHourSet>24) {
alarmHourSet = 0;
}
Delay(500);
}
print2digits(alarmHourSet,14,0);
}

Minuter
IF(alarmSelect == 3) {
IF(buttons & BUTTON_DOWN) {
LCD.Clear();
alarmMinSet = alarmMinSet + 1.
IF(alarmMinSet>59) {
alarmMinSet = 0;
}
Delay(100);
}
print2digits(alarmMinSet,14,0);
}

}

Larmet kan gå av när alarmtiden är lika med aktuell tid
om (alarmOn & alarmMinSet == tm. Minut & alarmHourSet == tm. Timme & hjälpmedelslägevälja! = 1) {
alarmCanGoOff = sant;
Serial.println ("larm kan gå");
}

Om larmet kan gå av, och klockan är i klockläge, larmet kommer
slocknar efter 3 på varandra följande upptäckter av motion
om (alarmCanGoOff & hjälpmedelslägevälja! = 1) {
Serial.println(alarmCanGoOff);
int pirVal = digitalRead(pirPin);
IF(pirVal == High) {
motionDetected ++;
Serial.println ("rörelse upptäckts").
Delay(1000);
}
IF(pirVal == low) {
motionDetected = 0;
}
IF(alarmCanGoOff) {
om (motionDetected > 2 || tm. Timme == alarmHourSet + 1) {
Alarm();
motionDetected = 0;
}
}

}

}

Metod för larm. Ändras och spelar melodin
void alarm() {
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("WAKE UPPPP!");
alarmGoingOff = sant;
för (int jag = 0; jag < 54; i ++) {
buttonVal = digitalRead(switchPin);
IF(buttonVal!=High) {
Delay(delayTime[i]);
tonen (buzzerPin, melody[i],duration[i]);
}
}

}

Skriv datum och tid
void printDateTime() {
IF(RTC.Read(TM) & hjälpmedelslägevälja == 2) {
print2digits(TM. Timme, 1, 0);
lcd.setCursor(3,0);
LCD.Print(":");
print2digits(TM. Minut, 4, 0);
lcd.setCursor(6,0);
LCD.Print(":");
print2digits(TM. Andra, 7, 0);
print2digits(TM. Månad, 1, 1);
lcd.setCursor(3,1);
LCD.Print("/");
print2digits(TM. Dag 4, 1);
Serial.println (tm. Dagen).
}
}

Skriva ut siffror i ett läge med två siffror (för korrekt klockformat)
void print2digits (int number, int kolumn, int rad) {
om (nummer > = 0 & & nummer < 10) {
lcd.setCursor(column,row);
LCD.Print('0');
lcd.setCursor(column+1,row);
LCD.Print(Number);
}
annars om (nummer > = 10) {
lcd.setCursor(column,row);
LCD.Print(Number);
}
}

Se Steg
Relaterade Ämnen

Väckarklocka med IR- och Bluetooth-högtalare

INTRODUKTIONHej, mitt namn är Ben Hur Gonçalves, jag är en mekatroniska ingenjör utexaminerades Universidade de São Paulo, Brasilien i 2010. Arbetar numera jag med verkligheten, men jag gör dessa projekt med arduino på helgerna, bara på kul. Detta va...

Väckarklocka med Tetris att bevisa att du är vaken

detta är en Arduino powered väckarklocka som efter att ha alarmet två gånger inte kommer avbryta tills användaren har rensat 4 rader i det spela Tetris. Du aktivera fysiskt klockan i sidled, så skärmen är vertikal, spela Tetris. Det är aldrig roligt...

CONTROL SERVO MOTOR med RÖRELSESENSOR

HI !!!!!!!!! I detta instructables undervisar jag du om att kontrollera servomotor med rörelsesensor. Detta används i nerf gun. Låt oss komma igång utan att slösa tid. Fortsätta att följa mig för HTML och CSS, Arduino projekt. Om du hade några tvivel...

Väckarklocka med Atmega-328 och RTC

Hej alla! Detta är min första instructable! Efter att ha läst hundratals instructables, bestämde jag mig att göra en själv.Klockan är en av de viktigaste hus hålla sakerna. Det finns olika typer av klockor som bra gamla pendel klockor, analoga klocko...

LED Sunrise väckarklocka med anpassningsbara låten larm

min MotivationDenna vinter min flickvän hade en massa problem med att vakna på morgonen och verkade lida av SAD (Seasonal Affective Disorder). Jag ens märker hur mycket svårare det är att vakna på vintern eftersom solen inte har kommit ännu. Symtom p...

DS3231 OLED väckarklocka med 2-knappars menyinställning och temperatur display

UPPDATERING: V1.1 klocka paket laddade upp för kompatibilitet med senaste IDEs.Video på:: http://youtu.be/ikNw1iLE9vgAlarm demovideo: http://youtu.be/jlZBCuQeswADetta är en OLED väckarklocka jag byggt med en Arduino Micro, en liten OLED 128 x 64 visa...

Väckarklocka med Evive

Vi vill göra en kombinerad analog och digital väckarklocka. Realtidsklocka är viktigt för klockan för att hålla tiden även om den är avstängd. Men vanligen tillgängliga mikro-controller styrelser som Arduino eller Raspberry Pi har inte en realtidsklo...

Spark.IO väckarklocka med humör ljus

Spark.io väckarklocka kan vara användbart om du måste vakna upp vid sådana en tid som ditt rum är fortfarande mörkt. När du ställa alarmet ska betalas, den humör lampa bleknar till den färgen du valt och när det är fullt upplyst, spelas en låt på en...

Väckarklocka med ledningar (eller Arduino)

Detta är en väckarklocka byggd på ledningar microcontroller och anpassade för Colombia (den tar in i konto semester och visar alla texter på spanska). Väckarklockan visar timme, datum, månfas, anpassade meddelanden av dagen, samt ikoner att ange akti...

Väckarklocka med evive (Arduino powered embedded plattform)

Vi vill göra en kombinerad analog och digital väckarklocka. Realtidsklocka är viktigt för klockan för att hålla tiden även om den är avstängd. Men vanligen tillgängliga mikro-controller styrelser som Arduino eller Raspberry Pi har inte en realtidsklo...

Montering av "Kloka klockan 2" (Arduino-baserad väckarklocka med massor av extra funktioner)

denna handledning visar hur du monterar kitet för Wise klockan 2, ett öppen källkodsprojekt (hårdvara och mjukvara).En komplett Klok klockan 2 kit kan köpas här.Sammanfattningsvis är detta vad Wise klockan 2 kan göra (i den aktuella öppna källa mjukv...

3D tryckt LED armband med rörelsesensor

Detta projekt startade när jag tryckt Diagrid armband av nervsystemet och fick idén att lägga till några lysdioder i den. Jag utformade modell using123D Design. En Adafruit prydnadssak (Attiny85) styra en Neopixel 144 LED/m remsa och läsa värdet från...

Arduino Real tid väckarklocka med temperatur och LED belysning. Fjärrstyrda

Arduino klocka, med batteribackup (realtidsklocka), tid, datum, Alarm, temperatur, LCD utgång, IR-fjärr ingång, viloläge, LED-belysning (10 X) röd och blå multi-mode.Steg 1: Steg 1: delar listaArduino klocka, med batteribackup (realtidsklocka), tid,...

Anpassade väckarklocka med anteckningar

Tycker om att göra egna larm Följ stegenSteg 1: Hur man gör väckarklockaför larm till verk du måste ha en mp3 heter larmTyp vad nedan i anteckningarutanför: huvudsakligafärg 0ftiteln väckarklockaCLSECHO Vänligen ange ditt namnStäll in /p namn =om '%...

Hur man gör en solar K'nex väckarklocka med inbyggd små elektronik laddare och lockbox.

Here it is. Den första knex solar väckarklockan. Detta har tagit mig över en månad att designa, bygga, bygga, perfekt och göra instruktioner. I själva verket jag sprang ut delar och fick ta flera saker sönder till slut det.Hur som helst fungerar dett...

Arduino väckarklocka med mänskliga upptäckt

Detta är en Arduino projekt baserat på en väckarklocka tha kan upptäcka om någon är på säng eller inte, detta är det möjligt genom en resistiv sensor placeras under de madrasser som kan upptäcka om någon är över madrasser eller inte genom skillnaden...

Digital väckarklocka med 7 Segment visar

detta projekt har några grundläggande funktioner som är klockdisplay, countdown timer, stoppur, temperatur uppvisning och tidsinställningar. Den registeransvarige används i detta projekt är en Arduino Uno gjorde själv på en PCB.7 segment displayen an...

Förvandla ett 1970-flipperspel till en atom synkroniserad väckarklocka med hjälp av en gps och en arduino

En av de vanliga problem som pinball samlare är om att sätta nästa. Tanken kom till mig en dag - Tänk om jag kunde re-syfte flipperspelet? Jag kan då ersätta en befintlig apparat med pin och mitt problem skulle kunna lösas. Med detta i åtanke konvert...

Automatiska Program förrätt med rörelsesensor

Hej du! Välkommen till min instructable!Jag beslöt att göra ett avstånd sensor baserad program / program starter för min pc, eftersom jag är för lat för att börja program jag själv!Du behöver följande delar:Hårdvara:-3mm plywood (60 x 60 cm gör jobbe...