Tutorial
Trafic
MESUT ÇAYIR
@mesut
144 views
1 comments
🙂

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 comments
Yorum yapmak için giriş yap
İsterseniz proje olarak da paylaşabilirsiniz. Ekip inceledikten sonra projelerde gözükür. Sorularınız varsa sorabilirsiniz