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
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.
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"); } }
Güzel bir projeymiş. Farklı uygulamalarda da kullanılabilir. Örneğin, bir yere kaç kişi gelip gidiyor? Çıkışın günlük kullanımını hesaplama gibi. Paylaşım için teşekkürler..
Çok beğendim çok güzel