LED Dawn / Sunrise väckarklocka, nattlampa & säkerhet ljus - Arduino kompatibel (6 / 22 steg)

Steg 6: Module1 - Arduino/RTC - Provningsmetod



Att se om vi kommunicerar med våra "328 och" 1307, kan vi använda den bifogade uppförandekoden. Detta anger tid av seriell in till fönstret serial som följde med Arduino IDE.

Tänk på att all kod för detta projekt var skriven i Arduino 0022. Jag har inte provat 1.0 ännu.

Jag har inte kunnat ladda upp någon kod som .pde filer. Jag vet inte varför.

Jag har åter döpte dem som .txt som du kan öppna i WordPad och klistra in i IDE eller du kan döpa dem .pde när du har hämtat dem.

UPPLADDNING:

Denna lilla Ardu "har inte en fancy auto-reset krets. Vi måste följaktligen tryck på reset switch korrekt för tillfället. Jag har sett ett antal sätt som föreslås för timing detta, men den här fungerar bra för mig:

1) - Anslut Tx och Rx stift från din USB-konverter till rubrikerna på stift 2 och 3 av gå i flisor (D0 och D1).
2) - driva din styrelse (från USB-om möjligt - om inte se till att jorden anslutningarna är kopplade men den + 5V är inte!).
3) - se till att du väljer "Duemilanove/Tiny med" 328"som din mål styrelse.
4) - Klicka på knappen upload i IDE.
5) - medan din kod kompileras, titta på statusraden längst ned i fönstret IDE.
6) - så snart det lilla fönstret längst ner i IDE talar om storleken på din kompilerade skiss, tryck på reset.
7) - Tx/Rx lamporna på din USB-omvandlare bör flash ett tag.

Om av någon anledning det inte fungerar första gången, kommer det att timeout efter ca 30 SEK och du kan försöka igen. Det är mycket ovanligt för att det ska ta mer än två försök.

Den bifogade uppförandekoden kommer inledningsvis ange tiden och sedan Visa tiden i följetong skärmfönstret i IDE. I rutinen "setup" kan du skicka det ett "R" tecken för re-sätta av tiden, så du kan åter-ställa klockan varje gång du återställa din "328.

Det kommer sedan be dig om successivt mindre betydande aspekter av datum och tid och slutligen Visa de nya inställningarna för dig att bekräfta. Det är inte mycket sofistikerad, så kom ihåg:

På varje numerisk inmatning det kräver två decimaler, så dag 2 (tisdag) "02" i ingå seriell bildskärmen.

När bekräftelse etc begärs, gäller detta särskilda, så om du vill ställa in klockan, bara en "Y" kommer att göra som det slutliga svaret.

När tiden är uppsättning eller du "Q" ur inställningen rutin att kommer det Visa tiden från RTC till den seriella bildskärmen varje sekund.

Självklart, när RTC är inställd dess batteri kommer att hålla den igång även när du driver ner din ardu "så du kan nu köra din egen skiss och bara piska några funktioner från denna skiss att få den tiden när du behöver den. För färdiga klockan kommer vi sätta tiden direkt från Ardu "men vi behöver några ingångar och en display för det! Dags att gå vidare till en annan modul...

****************
Ugi's Dawn-ljus Alarm Clock skiss.
RTC Test skiss

MIT licens

Ugi Dec 2012
Skriven för Arduino 022 körs på ATmega328.
kräver tråd bibliotek

Arduino Pin-anslutningar:
A4 - 1307 (I2C data)
A5 - 1307 (I2C klocka)

De allmänna klockinställningar:

#include < Wire.h > - / / usees analog stift A4 (SDA - pin 27) & A5 (SCL-pin 28) för 2-tråds data.

CONST byte DS1307_Address = 0x68;
byte sekunder = 45, oldseconds = 0, minuter = 52, timmar = 23 datum = 8, månad = 12, dag = 4, år = 11, skydda = 0; Standardvärdet är bara att börja någonstans.
byte NEWseconds = 45, NEWminutes = 52, NEWhours = 23, hänsyn = 8, NEWmonth = 12, Jans = 4, nyår = 11; Dessa är för inställningen.

void setup() {
Serial.BEGIN(9600); Serial.println ("DS1307 RTC baserade klocka - Ugi 2012");
Delay(2000); Ge RTC lite tid att lösa.
Wire.BEGIN(); Behovet av RTC
RTCsetFromSerial(); Chans att ställa in tiden från serial varje återställa. Möjliggör en timeout.
}

void loop() {
RTCread();
RTCprintTime(); skickar tid till följetong.
Delay(1000);
} / / End huvudloop

Att läsa tid från RTC i tid variabler.
void RTCread() {
byte data [11] = {0,0,0,0,0,0,0,0,0,0,0}.
Wire.beginTransmission(DS1307_Address);
Wire.send(0); Ställ in register till början
Wire.endTransmission();
Wire.requestFrom (DS1307_Address, (byte) 10); begära 7 byte från RTC i buffert.

för (byte _loop = 0; _loop < 10; _loop ++) {
data[_loop]=(Wire.Receive());
}

sekunder = (((B01110000 & data [0]) >> 4) * 10) + (data [0] & B00001111);
minuter = (((B01110000 & data [1]) >> 4) * 10) + (data [1] & B00001111);
timmar = (((data [2] & B00110000) >> 4) * 10) + (data [2] & B00001111);
dag = (data [3] & B00000111);
datum = (((data [4] & B00110000) >> 4) * 10) + (data [4] & B00001111);
månad = (((data [5] & B00010000) >> 4) * 10) + (data [5] & B00001111);
år = (((data [6] & B11110000) >> 4) * 10) + (data [6] & B00001111);
}

Skriv klockslaget till RTC
void RTCwrite() {/ / skriver alla nuvarande data till RTC - om du bara vill skriva en parameter då bara läsa klockan först!

byte data [7].
data [0] = (sekunder % 10) + ((seconds/10) << 4);
data [1] = (minuter % 10) + ((minutes/10) << 4);
data [2] = (timmar % 10) + ((hours/10) << 4);
data [3] = dag;
data [4] = (datum % 10) + ((date/10) << 4);
data [5] = (månad % 10) + ((month/10) << 4);
uppgifter [6] = (år % 10) + ((year/10) << 4);

Wire.beginTransmission(DS1307_Address);

Wire.send(0); Ställ in register till början
för (byte _loop = 0; _loop < 7; _loop ++) {
Wire.send(data[_loop]);
}
Wire.endTransmission();
oldseconds = sekunder.
} / / End RTC skriva funktion

Skriv ut aktuell tid till följetong...
void RTCprintTime() {
RTCread();

Serial.Print ("tid ="); Serial.Print (timmar, DEC); Serial.Print(":"); Serial.Print (minuter, DEC); Serial.Print(":"); Serial.println (sekunder, DEC);
Serial.Print ("datum ="); Serial.Print (datum, DEC); Serial.Print("/"); Serial.Print (månad, DEC). Serial.Print("/20"); Serial.Print (år, DEC).

}

byte RTCgetSerial (byte _val, sträng _Str) {

Serial.println("");
Serial.println ("***"+ _Str +"***");
Serial.Print ("aktuella värdet ="); Serial.Print (_val, DEC); Serial.println ("" + _Str);
Serial.println ("Ange nytt värde (två siffror t.ex. '01'):");

Serial.flush();

byte NEW_val = -1;
medan (Serial.available() < 2) {
Delay(50);}

NEW_val = ((Serial.read()-48)*10);
NEW_val = NEW_val + (Serial.read()-48);

Serial.flush();
Serial.Print ("nytt värde ="); Serial.Print (NEW_val, DEC); Serial.println ("" + _Str); Serial.println("");

om (NEW_val > = 0) {return NEW_val;}
annat {return _val;}

}

booleska RTCconfirm() {
Serial.println("");
Serial.println("currently:");
RTCprintTime();

Serial.flush();

Serial.println("");
Serial.println ("ändra till? (Y/N): ");
Serial.Print ("tid ="); Serial.Print (NEWhours, DEC); Serial.Print(":"); Serial.Print (NEWminutes, DEC); Serial.Print(":"); Serial.println (NEWseconds, DEC);
Serial.Print ("datum ="); Serial.Print (hänsyn, DEC); Serial.Print("/"); Serial.Print (NEWmonth, DEC); Serial.Print("/20"); Serial.Print (NEWyear, DEC);
char _conf = -1;
medan (Serial.available() < 1) {
Delay(50);}

_CONF = Serial.read();

Serial.flush();

Serial.Print ("bekräfta siffra ="); Serial.println(_CONF);
IF(_CONF=='Y') {return true;}
annat {return false;}
}

booleska RTCsetFromSerial() {

Få ny tidsinställning från serieporten
Serial.flush(); undvika slumpmässiga data i bufferten.

Se om vi vill uppdatera
char _input = 'X';
medan (_input! = 'R' & & _input! = "Q") {
medan (Serial.available() < 1) {

RTCprintTime(); Vi ska hålla visar aktuell tid och se om det behöver uppdateras.
Serial.println ("Enter"R"av seriell in att åter-ställa") eller Q för att avsluta inställning rutinmässigt.
Serial.println("");
Delay(1000);
}
_input = Serial.read();
Serial.flush();
}

om (_input! = ' R'){Serial.println(""); Serial.println ("*** sluta ***"); Serial.println(""); returnera false;}
Serial.println("");
Serial.println ("*** nollställa RTC ***");
Serial.println("");

RTCprintTime();
NEWyear = RTCgetSerial (år, "år");
RTCprintTime();
Jans = RTCgetSerial (dag, "dag i veckan");
RTCprintTime();
NEWmonth = RTCgetSerial (månad, "månader");
RTCprintTime();
Hänsyn = RTCgetSerial (datum, "dagarna i månaden");
RTCprintTime();
NEWhours = RTCgetSerial (timmar, "Timmar");
RTCprintTime();
NEWminutes = RTCgetSerial (minuter, "Minuter");
RTCprintTime();
NEWseconds = RTCgetSerial (sekunder, "Sekunder");

om (RTCconfirm()) {
sekunder = NEWseconds;
minuter = NEWminutes;
timmar = NEWhours;
datum = hänsyn;
månad = NEWmonth;
dag = Jans;
år = nyår;
RTCwrite();

Serial.println ("");
Serial.println ("*** RTC uppdaterad ***");
return true;
}

annat {
Serial.println ("*** uppdatering inställd ***");
}

returnera false;
}

Se Steg
Relaterade Ämnen

Hur till bygga en LED mood lampa / löda säkerhet ljus

Hej,Hur många gånger har du bränt ner ditt hus eftersom du glömde att stänga av det lödkolv eller limpistol? Jag har väl aldrig bränt ner mitt hus (och förhoppningsvis du har inte heller) men på detta instructable jag kommer att lära dig hur man bygg...

LED säkerhet ljus

okej delarna precis anlänt. Poängen med detta projekt är att ta ett gammalt säkerhet ljus system och göra det en eco friendly LED säkerhet ljus. Det gamla systemet används en halogenlampa med en bly-syra batteri. De nya systemet använder LED-lamporna...

Multi färgade 8 LED tillbaka cykel säkerhet ljus (mini m & m bostäder)

här är min första instructable för en LED säkerhet ljus. Jag bestämde mig att göra det efter vill göra några lampor för min cykel och efter att ha sett några guider på LED ledningar. Första jag skulle göra en 4 LED-ljus men slutade göra det 8 för bät...

Bike hjul induktion säkerhet ljus

Funktion:Det är en hjul talade monterbar säkerhet ljus för din cykel som inte behöver batterier. Någonsin. Den har även smart på/av funktion. Ljuset tänds när du börja flytta och blir cirka 5 sekunder efter att du slutat flytta.Funktioner:Inga batter...

Longboard säkerhet ljus

från början detta bygga började som en idé att hacka ett barns vetenskap leksak vindmätaren in en hastighetsmätare för min longboard, tyvärr jag på något sätt bröt den krets som drivs lamporna och jag saknade tillräckliga kunskaper i elektronik till...

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...

10W led säkerhet ljus hacka

och jag antar att jag ska börja med att säga att detta är min första möjlighet, så mild (, lol. Jag tycktes alltid har ett problem med min halogenlampor säkerhet bränna ut. Jag ville ha en enkel, billig, permanent lösning. LED är tycktes vara vägen a...

LED-nattlampa och Laser ljus Show med 4017 och 555.

Titeln kan vara lite missvisande. Det "Laser ljusshow" är inte verklig. Det finns ingen lasrar i detta projekt så lugn er själva.Jag hade ingenting att göra en dag så, jag bestämde mig att titta igenom min Ramsey tidskrift för en cool projekt so...

Arduino LED Strip spjälsäng/säng natten ljus

Detta projekt skapades eftersom jag ville ha något jag kunde göra en helg som skulle vara enkelt att förstå och mixtra med, men också se cool när du är klar. En Arduino + LED Strip var den perfekta combon, som du kan få din introduktion till Arduino...

Glas Martini nattlampa med Auto ljus känsla

en enkel hacka en ljus sensing LED night light att skapa en suave nattlampaIngredienser:GlasflaskaMartiniglasserveringsbrickakrossat glas (ta en promenad på den vilda sidan och hitta en plats där folk bryter in i bilar ofta)3-6 lysdioder (om du vill...

Fake TV säkerhet ljus

Snabbt & lätt Fake-TV Light modul byggd för under $5. med förbättrade funktioner. Med hjälp av den här enheten kan du gå för en semester eller på semester lämna ditt hem med en bodde i utseende och därmed en extra lager av säkerhet. "Jag upp och...

3D LED Charlieplex Cube från Chrismas träd ljus

jul är en bra tid att få ett stort antal lysdioder väldigt billigt. Detta instructable använder 80 lysdioder från en LED christmas tree light sträng att göra den ärevördiga 3D LED cube. I detta fall en 5 x 4 x 4 kub.Endast andra komponenter är en 780...

5 minuters säkerhet ljus

jag har alltid velat en enkel lampa som jag kan bära runt min hals samtidigt arbetar eller går på natten. Ficklampor kan vara alltför tungt eller otymplig och jag kunde aldrig få tag i dessa huvudet monterade ljus att fungera särskilt länge. Så med g...

LED snöflinga dekoration från billiga effekt ljus

En sak som jag absolut älskar ökar den bang-for-the-buck av billiga armaturer. Kalla det "e-upcycling". Trolling eBay, Alibaba, Amazon, etc kan du ofta få anständigt billiga ljuseffekter i en hemsk paket som bara behöver en reflektor, bezel, bak...

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...

DIY LED ram med batteri drivna sträng fairy ljus

Jag gjorde ram med sträng LED fairy ljus. Dessa ljus omger ramen och avge ljus som verkligen visa upp dina bilder, bilder eller andra lätta konst objekt.Ramen är A4 storlek. Instruktionerna visas i detalj i videon. Kolla in....

Star Wars nattlampa med linoleumsnitt och Arduino

Denna gång jag ville göra en annan bild ram projekt och igen med en enkel arduino kontrollerad LED-ljus. Eftersom jag hade saker för linocutting liggande, trodde jag det skulle vara trevligt att belysa ett handtryckt mönster.VideolinkSaker jag använd...

Byta LED på en Niterider MiNewt Mini USB-cykel ljus

detta beskriver demonteringen av MiNewt Mini USB-cykel ljuset, uppgradering av den befintliga LED-en SSC P7 LED och återmontering.Delar:1. termiska fett (ungefär £1 för en liten tub från ebay - du behöver inte mycket)2. SSC P4 sändare (om £3 från eba...

TinyDice LED dör (Arduino kompatibel)

jag använde en ATtiny25 för att kontrollera några lysdioder, det genererar ett antal slumpmässigt och visar den som en dö.Först visas lampkombinationen, då slumptal och slutligen går det för att sova, konsumera mindre än 0.1uA, tills någon trycker på...