Siz evde yokken kapınız kaçkere açıldığını ve kapandığını odaya giren çıkan olup olmadığını öğrenmenizi sağlayabilecek bir proje. Bu projede bir adet reset butonu kullanılmış eğer isterseniz sensör kullanarakta yapabilirsiniz. Sadece kişileri rüzgarla kapanıp açılmasını da öğrenmiş olursunuz.

Malzemeler

– Arduino UNO
– DS1307 zamanlayıcı
– SD hafıza kartı yuvası
– 1 led
– 1 adet reset butonu
– 220 ohm direnç ve 10 k ohm direnç ve birazda kablo

devre bağlantısıSD kart bağlantılarıına b a** MOSI  – pin D11 

 kg** MISO  – pin D12
** SCK   – pin D13
** CS    – pin D4
+ GND, 5v, 3.3v

zamanlayıcı pinleri:
** SDA  – A4
** SCL  – A5
an ** GND – GND
** VCC  – 5V

Buton ve led:
** Led 220 ohm ardından toprağa GND
** Led +  D3
** Butonu 5v ile d2 arasına bağlayın
**D2 ile gnd yani toprak arasına 10kyı bağlayın.

 

 

Farklı bir kütüphane kullanmanız gerekecek

https://github.com/adafruit/RTClib

kütüphanenizi buradan ekleyin.

 

fonkisyonlar
* time() – RTC den yani zamanlayıcıdan zamanı alır
* SDwrite(int state) -durumu sd karta yazar 1 yada 0
* call(int buttonState) – buton durumunu ledin durumunu çağırır.

 

devre bağlantısı

 

Herkese eğlenceli projeler

Kodumuz:

*/
#include <Wire.h>     // lib for RTC
#include "RTClib.h"   // lib for RTC
#include <SPI.h>      // lib for SD
#include <SD.h>       // lib for SD

// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;
const int chipSelect = 4;
File data;

// set up for RTC
RTC_DS1307 RTC;

// set up for led + button
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  3;      // the number of the LED pin
int buttonState = 0;         // variable for reading the pushbutton status
int pbuttonState;

byte ok;  //stop the loop if SD card was not initialized
byte first=1;

void setup() {
  Serial.begin(57600);
  // led + button
  pinMode(ledPin, OUTPUT); 
  pinMode(buttonPin, INPUT); 

  // SD
   Serial.print("Initializing SD card...");
   pinMode(10, OUTPUT); // it's needed for SD library to work even if the CS is not connected to pin 10
            // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    ok=0;

  }else{
  Serial.println("card initialized.");
  ok=1;  
 }
  // RTC
  Wire.begin();
  RTC.begin();
  // RTC.adjust(DateTime(__DATE__, __TIME__));  // set to pc time   

}

void loop() {
 if(ok==1)
{ 
  if(first==1)
  {

  buttonState = digitalRead(buttonPin);
  pbuttonState= buttonState;
  call(buttonState);
  first = 0;
  }
  else
  { 
    buttonState = digitalRead(buttonPin);
    if(pbuttonState != buttonState)
    {call(buttonState);
    pbuttonState=buttonState;
    }
  }
  delay(100);
}
}

String time()
{
 String dataString = "";  
 DateTime now = RTC.now();
 dataString += String(now.year(), DEC);
 dataString += String('/');
 dataString += String(now.month(), DEC);
 dataString += String('/');
 dataString += String(now.day(), DEC);
 dataString += String(' ');
 dataString += String(now.hour(), DEC);
 dataString += String(':');
 dataString += String(now.minute(), DEC);
 dataString += String(':');
 dataString += String(now.second(), DEC);

return dataString;       
}

void call(int buttonState)
{
    if (buttonState == LOW) {     
    // door is open    
    digitalWrite(ledPin, HIGH); 
    SDwrite(buttonState);

} 
  else {
    // door is closed
    digitalWrite(ledPin, LOW); 
    SDwrite(buttonState);
}
}

void SDwrite(int state)
{
String message = "";
if (state==LOW)  
{message = "OPEN";}
else
{message = "CLOSED";}
    data = SD.open("log.txt", FILE_WRITE);
    if (data) {
    if(state == LOW)
    {Serial.print("Door is open");}
    else
    {Serial.print("Door is closed");}
    data.print(time());
    data.print("   ");
    data.println(message);
	// close the file:
    data.close();
    Serial.println("  :done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening log.txt");
  }  

}

2 YORUMLAR