Öğretici

Trafic

mesut
MESUT ÇAYIR
@mesut
777 görüntülenme
1 yorum

🙂

Arduino (C++)
1#include <SPI.h>
2#include <MFRC522.h>
3#include <Servo.h>
4#include <Wire.h> 
5#include <LiquidCrystal_I2C.h>
6#include <Keypad.h>
7
8// --- PIN TANIMLAMALARI ---
9#define SS_PIN 10
10#define RST_PIN 9
11#define LED_KIRMIZI 2
12#define LED_YESIL 4
13#define BUZZER 5
14#define SERVO_PIN 6
15#define TRIG_PIN 7
16#define ECHO_PIN 8      
17#define BUTON_PIN A5    
18
19// --- HIZ ÖLÇÜM DEĞİŞKENLERİ ---
20unsigned long baslangicZamani, bitisZamani;
21float gecenSure, hiz_km_sa;
22bool olcumBasladi = false;
23const float olcum_mesafesi_metre = 0.15; 
24
25// --- KEYPAD AYARLARI ---
26const byte SATIR = 4; 
27const byte SUTUN = 3; 
28char tuslar[SATIR][SUTUN] = {
29  {'1','2','3'},
30  {'4','5','6'},
31  {'7','8','9'},
32  {'*','0','#'}
33};
34byte satirPinleri[SATIR] = {A0, A1, A2, A3}; 
35byte sutunPinleri[SUTUN] = {0, 1, 3, A4};    
36
37Keypad keypad = Keypad(makeKeymap(tuslar), satirPinleri, sutunPinleri, SATIR, SUTUN);
38MFRC522 rfid(SS_PIN, RST_PIN);
39Servo kapiServosu;
40LiquidCrystal_I2C lcd(0x27, 16, 2); 
41
42// --- VERİLER ---
43String dogruSifre = "12345";
44String girilenSifre = "";
45String beyaz_kart_id = "13 BE 62 20";
46String mavi_kart_id = "04 F7 70 A3";
47
48void setup() {
49  SPI.begin();
50  rfid.PCD_Init();
51  kapiServosu.attach(SERVO_PIN);
52  kapiServosu.write(0); 
53  lcd.init();
54  lcd.backlight();
55  
56  pinMode(TRIG_PIN, OUTPUT);
57  pinMode(ECHO_PIN, INPUT);
58  pinMode(LED_KIRMIZI, OUTPUT);
59  pinMode(LED_YESIL, OUTPUT);
60  pinMode(BUZZER, OUTPUT);
61  pinMode(BUTON_PIN, INPUT_PULLUP);
62  
63  beklemeEkrani();
64}
65
66long mesafeOku() {
67  digitalWrite(TRIG_PIN, LOW);
68  delayMicroseconds(2);
69  digitalWrite(TRIG_PIN, HIGH);
70  delayMicroseconds(10);
71  digitalWrite(TRIG_PIN, LOW);
72  long sure = pulseIn(ECHO_PIN, HIGH, 30000);
73  return (sure / 2) / 29.1;
74}
75
76void loop() {
77  // 1. BUTON KONTROLÜ
78  if (digitalRead(BUTON_PIN) == LOW) {
79    lcd.clear();
80    lcd.print("Buton ile Acildi");
81    yavasAcil(); 
82  }
83
84  // 2. HIZ ÖLÇÜMÜ
85  long mesafe = mesafeOku();
86  if (mesafe > 0 && mesafe < 20 && !olcumBasladi) {
87    baslangicZamani = millis();
88    olcumBasladi = true;
89  } 
90  else if ((mesafe > 20 || mesafe == 0) && olcumBasladi) {
91    bitisZamani = millis();
92    gecenSure = (bitisZamani - baslangicZamani) / 1000.0;
93    if (gecenSure > 0.05) {
94      hiz_km_sa = (olcum_mesafesi_metre / gecenSure) * 3.6;
95      lcd.clear();
96      lcd.print("Hiz: "); lcd.print(hiz_km_sa); lcd.print(" km/h");
97      
98      if (hiz_km_sa > 20) {
99        lcd.setCursor(0, 1);
100        lcd.print("HIZLI! ACILIYOR");
101        hizliAcilKirmizi(); 
102      } else {
103        tone(BUZZER, 1000, 200);
104        delay(3000);
105        beklemeEkrani();
106      }
107    }
108    olcumBasladi = false;
109  }
110
111  // 3. KEYPAD KONTROLÜ
112  char tus = keypad.getKey();
113  if (tus) {
114    girilenSifre += tus;
115    lcd.setCursor(7, 1);
116    lcd.print(girilenSifre);
117    if (girilenSifre.length() == 5) {
118      if (girilenSifre == dogruSifre) {
119        lcd.clear(); lcd.print("Sifre Dogru");
120        yavasAcil(); 
121      } else {
122        lcd.clear(); lcd.print("Yanlis Sifre");
123        hataGeriBildirimi();
124      }
125      girilenSifre = ""; 
126    }
127  }
128
129  // 4. RFID KONTROLÜ
130  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
131    String okunanID = "";
132    for (byte i = 0; i < rfid.uid.size; i++) {
133      okunanID += (rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
134      okunanID += String(rfid.uid.uidByte[i], HEX);
135    }
136    okunanID.trim(); okunanID.toUpperCase();
137
138    if (okunanID == beyaz_kart_id) {
139      lcd.clear(); lcd.print("Kart Onaylandi");
140      yavasAcil(); 
141    } 
142    else if (okunanID == mavi_kart_id) {
143      lcd.clear(); lcd.print("Yanlis Kart");
144      hataGeriBildirimi();
145    }
146    else {
147      lcd.clear(); lcd.print("Gecersiz Kart");
148      hataGeriBildirimi();
149    }
150    rfid.PICC_HaltA();
151  }
152}
153
154// --- YARDIMCI FONKSİYONLAR ---
155
156// HIZLI AÇILMA (Kırmızı Işık Yanar)
157void hizliAcilKirmizi() {
158  digitalWrite(LED_KIRMIZI, HIGH);
159  tone(BUZZER, 1000, 200);
160  kapiServosu.write(90); // Anında 90 dereceye açılır
161  delay(3000); 
162  kapiServosu.write(0);
163  digitalWrite(LED_KIRMIZI, LOW);
164  beklemeEkrani();
165}
166
167// YAVAŞ AÇILMA (Yeşil Işık Yanar)
168void yavasAcil() {
169  digitalWrite(LED_YESIL, HIGH);
170  tone(BUZZER, 1000, 200);
171  
172  // 0'dan 90'a yavaşça döner
173  for(int aci = 0; aci <= 90; aci++) {
174    kapiServosu.write(aci);
175    delay(15); // Her derece arası 15ms bekler
176  }
177  
178  delay(3000); 
179  kapiServosu.write(0);          
180  digitalWrite(LED_YESIL, LOW);
181  beklemeEkrani();
182}
183
184void hataGeriBildirimi() {
185  digitalWrite(LED_KIRMIZI, HIGH);
186  tone(BUZZER, 300, 700);
187  delay(2000);
188  digitalWrite(LED_KIRMIZI, LOW);
189  beklemeEkrani();
190}
191
192void beklemeEkrani() {
193  lcd.clear();
194  lcd.print("Hız ve Guvenlik");
195  lcd.setCursor(0, 1);
196  lcd.print("Sifre: ");
197}

1 yorum

Yorum yapmak için giriş yap

yemreeke
Yunus Emre EKE@yemreeke

İsterseniz proje olarak da paylaşabilirsiniz. Ekip inceledikten sonra projelerde gözükür. Sorularınız varsa sorabilirsiniz

Trafic | BlueGrays