Parçalar · 12 dk okuma

Reed Röle Arduino Kullanımı: Kapı Sensörü, Alarm ve Hız Ölçme

Reed röle nedir, Arduino'ya nasıl bağlanır? NO/NC tipleri, mıknatıs mesafesi, pull-up ve debounce, kapı alarmı, bisiklet hız göstergesi, ESP32 ve Pico kodu.

Reed röle (reed switch, manyetik anahtar), cam bir tüpün içindeki iki ince metal dilin bir mıknatıs yaklaşınca birbirine değmesiyle devreyi kapatan, kendisi hiç elektrik harcamayan basit bir sensördür. Arduino'da tıpkı bir buton gibi okunur: mıknatıs yakındayken kontak kapanır, uzaklaşınca açılır. Kapı ve pencere alarmlarından bisiklet kilometre saatlerine, şamandıralı su seviye anahtarlarından rüzgâr ölçerlere kadar pek çok cihazın içinde bu küçük cam tüp vardır.

Bu rehberde reed rölenin içinde ne olduğunu, NO ve NC tiplerini, mıknatısın hangi mesafe ve yönde en iyi çalıştığını ve Arduino'ya pull-up direnciyle nasıl bağlanacağını adım adım öğreneceksin. Ardından kontak sıçramasını (debounce) yazılımla çözecek, bir kapı açık alarmı ve bisiklet hız göstergesi yapacak, ESP32 ile telefonuna "kapı açıldı" bildirimi gönderecek ve aynı devreyi Raspberry Pi Pico'da MicroPython ile çalıştıracaksın. Son bölümlerde reed röleyi Hall sensörle karşılaştırıp en sık yapılan hataları topladık.

Reed röle sensör modülü ve cam tüplü reed anahtar
Reed röle modülü: soldaki cam tüpün içinde iki metal dil vardır; kart üzerindeki LM393 karşılaştırıcı ve potansiyometre sinyali DO pininden temiz bir dijital çıkış olarak verir.

Reed röle nedir, nasıl çalışır?

Reed rölenin kalbi, içi azot gibi tepkimeye girmeyen bir gazla doldurulmuş ya da havası alınmış küçük bir cam tüptür. Tüpün iki ucundan giren nikel-demir alaşımlı iki esnek dil (İngilizcedeki "reed" kelimesi bu dillerden gelir) ortada çok küçük bir boşlukla üst üste biner. Dillerin uçları rodyum ya da rutenyum gibi sert metallerle kaplanır; bu kaplama kontak direncini düşük tutar ve aşınmayı azaltır. Yakına bir mıknatıs gelince iki dil mıknatıslanır, üst üste binen uçlarda zıt kutuplar oluşur ve diller birbirini çekerek temas eder. Mıknatıs uzaklaşınca dillerin yay etkisi kontakları yeniden ayırır. Cam tüp kontakları toz, nem ve oksitlenmeden koruduğu için reed anahtarlar düşük akımda yüz milyonlarca kez çalışabilir.

Türkiye'de bu parçaya genellikle "reed röle" denir, ancak teknik olarak tek başına cam tüp bir reed anahtardır (reed switch). Gerçek reed röle, aynı cam tüpün etrafına bir bobin sarılmış hâlidir; orada mıknatıs yerine bobinden geçen akım kontakları kapatır. Bu yazıda mıknatısla tetiklenen anahtarı ve onu taşıyan sensör modüllerini anlatıyoruz. Reed anahtarın en büyük avantajı hiç enerji harcamamasıdır: içinden yalnızca senin devrenin akımı geçer, bu yüzden pille aylarca çalışan cihazlar için idealdir.

Reed röle teknik özellikleri

ÖzellikTipik değer (küçük cam reed)
Kontak tipiForm A (NO, normalde açık) en yaygını
Cam gövdeYaklaşık 2 mm çap, 10–15 mm boy
Anahtarlama gücüEn fazla 10 W
Anahtarlama gerilimi100–200 V DC'ye kadar
Anahtarlama akımıYaklaşık 0,5 A
Kontak direnci0,1 Ω'un altında
Çalışma süresi1 ms'nin altında (sıçrama dahil)
Hassasiyet10–40 AT (amper-tur)
ÖmürDüşük akımda 100 milyon ile 1 milyar anahtarlama
Kendi tüketimiYok (pasif eleman)

Hassasiyet AT (amper-tur) ile verilir: reedi kapatmak için standart bir test bobininde gereken akım ile sarım sayısının çarpımıdır. Değer küçüldükçe reed daha zayıf bir mıknatısla, yani daha uzaktan çalışır. Bir de histerezis vardır: kontakları kapatmak için gereken alan (çekme), onları kapalı tutmaya yetenden (bırakma) daha güçlüdür. Örneğin mıknatısın 15 mm'de kapattığı bir reed ancak 20 mm civarında yeniden açılabilir. Bu fark küçük titreşimlerde kontakların açılıp kapanmasını azaltır; ama tasarımında mıknatısın bırakma mesafesinin de ötesine gittiğinden emin olmalısın.

NO, NC ve çift yollu reed tipleri (Form A, B, C)

Reed anahtarlar kontak düzenine göre üçe ayrılır. Etiketlerdeki NO (normalde açık) ve NC (normalde kapalı) ifadeleri her zaman mıknatıs yokken kontağın durumunu anlatır.

TipMıknatıs yokkenMıknatıs yakınkenBacakNerede kullanılır?
Form A (NO)AçıkKapalı2Kapı sensörleri, hız sayaçları, modüllerin çoğu
Form B (NC)KapalıAçık2Mıknatıs uzaklaşınca devreyi kapatması gereken uygulamalar
Form C (çift yollu)COM–NC kapalıCOM–NO kapalı3Hem açık hem kapalı çıkış gereken devreler
Alarm sistemlerinde kullanılan kapı kontakları (örneğin yaygın MC-38 tipi) çoğu zaman "NC" diye satılır. Buradaki NC, kapı kapalıyken, yani mıknatıs yanındayken devrenin kapalı olduğunu anlatır; içlerinde aslında Form A (NO) bir reed vardır. Bu yüzden aldığın sensörü önce multimetrenin süreklilik (bip) kademesiyle mıknatıslı ve mıknatıssız dene; yalnızca etikete göre kod yazarsan mantığı ters kurabilirsin.

Mıknatısla tetikleme: mesafe, yön ve hassasiyet

Reed röleyi tetiklemek için en iyi seçenek küçük bir neodimyum mıknatıstır. 10×3 mm'lik bir neodimyum disk, yaygın bir reedi genellikle 10–20 mm'den çalıştırır; aynı boydaki siyah ferrit mıknatısla bu mesafe kabaca yarıya iner. Hazır kapı sensörlerinde çalışma mesafesi tipik olarak 15–25 mm'dir. Mesafe yalnız mıknatısın gücüne değil, yönüne de bağlıdır: mıknatısın kuzey-güney ekseni cam tüpe paralel tutulup tüpün ortasına yaklaştırıldığında tek ve temiz bir kapanma elde edilir. Mıknatıs tüpe dik durursa tam ortada hiç tetiklemeyebilir, uçlara yakın iki noktada tetikler. Paralel bir mıknatıs tüp boyunca kaydırıldığında da ana bölgenin iki yanında küçük ek kapanma bölgeleri oluşur. Mıknatıs reedin önünden geçerken kontak bu yüzden iki-üç kez kapanıp açılabilir; bu, sayma projelerinde tek turu iki ya da üç tur gibi saymanın en yaygın nedenidir.

Neodimyum mıknatıs çeşitleri: disk, küp, blok ve havşa delikli
Reed röleyi tetiklemek için neodimyum mıknatıslar idealdir; havşa delikli olanlar kapıya ya da kasaya vidayla kolayca sabitlenir.
  • Kutup fark etmez: Reed kuzey ve güney kutbuna aynı tepkiyi verir; mıknatısı ters çevirmek sonucu değiştirmez.
  • Mıknatısı tüpün ortasına hizala: Kapı sensörlerinde mıknatıs ile reed gövdesi yan yana ve paralel durmalı, aradaki boşluk mümkün olduğunca küçük olmalı.
  • Çelik kapılarda mesafe kısalır: Demir, mıknatısın alanını kendi üzerine toplar. Sensörü ve mıknatısı 5–10 mm'lik plastik bir altlıkla yükselt ya da daha güçlü bir mıknatıs kullan.
  • Önce mesafeyi ölç: Seri Monitör açıkken mıknatısı yavaşça yaklaştırıp uzaklaştır. Kapı kapalıyken mıknatıs kapanma mesafesinin rahatça içinde, kapı aralanınca bırakma mesafesinin dışında kalmalı.
  • Güçlü alanlardan uzak tut: Hoparlör, motor ve başka mıknatıslar reedi istemeden kapatabilir; reedi bu parçaların hemen yanına yerleştirme.

Reed röle Arduino bağlantısı: pull-up direnci neden şart?

Reed röle bir buton gibi davrandığı için tek başına bir gerilim üretmez; yalnızca iki ucunu birbirine bağlar ya da ayırır. Kontak açıkken pin hiçbir yere bağlı kalmaz (havada kalır) ve gürültü yüzünden rastgele HIGH ve LOW değerler okursun. Çözüm bir pull-up direncidir: pin bir dirençle 5 V'a (ya da 3,3 V'a) çekilir, reed ise pin ile GND arasına bağlanır. Mıknatıs yokken pin HIGH okur; mıknatıs gelip kontak kapanınca pin doğrudan GND'ye bağlanır ve LOW okur. Arduino Uno'nun içinde 20–50 kΩ'luk bir dahili pull-up direnci vardır; pinMode(pin, INPUT_PULLUP) yazman yeterlidir, dışarıdan direnç gerekmez. Bu mantığın ayrıntıları için Arduino'ya buton bağlama yazısına bakabilirsin.

BağlantıArduino UnoESP32Raspberry Pi Pico
Reed bacak 1 (yalın reed)D2GPIO 27GP15 (fiziksel pin 20)
Reed bacak 2 (yalın reed)GNDGNDGND
Pull-upDahili (INPUT_PULLUP)Dahili (INPUT_PULLUP)Dahili (Pin.PULL_UP)
Modül VCC5V3V33V3(OUT) (fiziksel pin 36)
Modül GNDGNDGNDGND
Modül DOD2GPIO 27GP15
Durum LED'iD13 (karttaki LED)GPIO 2 (karttaki LED)Dahili LED
Aktif buzzer (+)D8KullanılmıyorGP14
Reed röleyi asla doğrudan 5V ile GND arasına ya da OUTPUT olarak ayarlanmış bir pine bağlama: mıknatıs yaklaştığı anda kısa devre oluşur, ince kontaklar kaynayıp kapalı kalabilir ve kartın regülatörü zarar görebilir. ESP32'de GPIO 34–39 yalnız giriştir ve dahili pull-up dirençleri yoktur; reedi bu pinlere bağlayacaksan 10 kΩ'luk harici bir pull-up direnci ekle.

Adım adım ilk devre: mıknatısı algılamak

  1. Reed rölenin bir bacağını Arduino'nun D2 pinine, diğerini GND'ye bağla. Yalın reedin kutbu yoktur, bacakların yönü önemli değildir.
  2. Modül kullanıyorsan VCC'yi 5V'a, GND'yi GND'ye, DO çıkışını D2'ye bağla.
  3. Aşağıdaki kodu yükle ve Seri Monitör'ü 9600 baud hızında aç.
  4. Mıknatısı cam tüpe paralel tutarak yavaşça yaklaştır; karttaki LED yanmalı ve ekranda "Miknatis var" yazmalı.
  5. Mıknatısı uzaklaştırırken LED'in hangi mesafede söndüğünü cetvelle ölç; bu senin bırakma mesafendir.
C++ (Arduino IDE)
1const byte REED_PIN = 2;             // reed: D2 ile GND arasında / reed between D2 and GND
2const byte LED_PIN = 13;             // karttaki LED / onboard LED
3
4void setup() {
5  Serial.begin(9600);
6  pinMode(REED_PIN, INPUT_PULLUP);   // dahili pull-up: mıknatıs yokken HIGH / internal pull-up: HIGH without a magnet
7  pinMode(LED_PIN, OUTPUT);
8}
9
10void loop() {
11  if (digitalRead(REED_PIN) == LOW) {       // kontak kapalı: mıknatıs yakında / contacts closed: magnet nearby
12    digitalWrite(LED_PIN, HIGH);
13    Serial.println(F("Miknatis var / magnet detected"));
14  } else {                                  // kontak açık: mıknatıs uzakta / contacts open: magnet away
15    digitalWrite(LED_PIN, LOW);
16    Serial.println(F("Miknatis yok / no magnet"));
17  }
18  delay(200);
19}

Kodda dikkat etmen gereken tek şey ters mantıktır: INPUT_PULLUP kullandığın için mıknatıs varken LOW, yokken HIGH okursun. LM393'lü 3 pinli modüllerde de çıkış genellikle mıknatıs yaklaşınca LOW olur ve kart üzerindeki DO LED'i yanar; yine de bu modelden modele değişebildiği için ilk iş kendi modülünü Seri Monitör'den doğrula. Modüldeki potansiyometre karşılaştırıcının eşiğini ayarlar; reed zaten açık-kapalı çalıştığı için algılama mesafesine etkisi azdır, orta konumda bırakman genelde yeterlidir. KY-021 gibi mini modüllerde karşılaştırıcı yoktur, kartta yalnızca reed ve 10 kΩ'luk bir direnç bulunur.

Debounce: kontak sıçraması ve titreşim

Mekanik her kontak gibi reed de kapanırken birkaç kez sekebilir. Reedde bu sıçrama (bounce) çok kısadır, genellikle 1 ms'nin altında kalır; ama asıl sorun bu değildir. Mıknatıs çekme mesafesinin sınırında yavaşça hareket ederse ya da kapı rüzgârla titrerse kontak bir saniye içinde defalarca açılıp kapanabilir. Kapı açıldı bildirimi gönderen bir sistem bu yüzden tek açılışta beş mesaj atabilir. Çözüm, değişimi hemen kabul etmek yerine durumun belirli bir süre değişmeden kalmasını beklemektir. Kapı sensöründe 50–100 ms yeterlidir; hız sayacında ise iki darbe arasında fiziksel olarak mümkün olan en kısa süreyi kilit süresi olarak kullanmak iyi sonuç verir.

Donanımsal bir çözüm istersen pin ile GND arasına 100 nF'lık bir kondansatör koyabilirsin. 10 kΩ'luk pull-up ile birlikte τ = R × C = 10 kΩ × 100 nF = 1 ms'lik bir zaman sabiti oluşur ve çok kısa sıçramalar yumuşar. Farklı direnç ve kondansatör çiftlerini RC zaman sabiti hesaplayıcı ile deneyebilirsin. Dahili pull-up kullanıyorsan direnç 20–50 kΩ olduğu için süre 2–5 ms'ye uzar. Metrelerce kablosu olan kapı sensörlerinde 4,7–10 kΩ'luk harici bir pull-up ve bu kondansatör, gürültüye karşı da koruma sağlar.

Kapı ve pencere açık sensörü ile alarm projesi

En yaygın reed projesi kapı sensörüdür. Mıknatısı kapının hareketli kanadına, reedi kasaya yerleştir; kapı kapalıyken ikisi yan yana durur, kontak kapalıdır ve pin LOW okur. Kapı açılınca mıknatıs uzaklaşır ve pin HIGH olur. Bu düzenin güzel bir yan etkisi vardır: biri sensörün kablosunu keserse pin yine HIGH olur ve sistem bunu "kapı açıldı" olarak algılar. Alarm sistemlerinin kapalı devre mantığını kullanmasının sebebi budur. Aşağıdaki kod kapının her açılışını sayar, açık kalma süresini ölçer ve kapı 30 saniyeden uzun açık kalırsa buzzerı kesik kesik öttürür; buzdolabı ya da derin dondurucu kapısı için birebirdir.

C++ (Arduino IDE)
1const byte REED_PIN = 2;                  // reed: D2 ile GND arası / reed between D2 and GND
2const byte BUZZER_PIN = 8;                // aktif buzzer artı ucu / active buzzer positive leg
3const byte LED_PIN = 13;                  // karttaki LED / onboard LED
4const unsigned long STABLE_MS = 50;       // debounce: 50 ms değişmeden kalmalı / debounce: must hold for 50 ms
5const unsigned long OPEN_LIMIT = 30000;   // 30 sn'den uzun açık kalırsa alarm / alarm if open longer than 30 s
6
7bool doorOpen = false;                    // onaylanmış durum / confirmed state
8bool lastReading = false;                 // son ham okuma / last raw reading
9unsigned long lastChange = 0;             // ham okumanın son değiştiği an / when the raw reading last changed
10unsigned long openedAt = 0;               // kapının açıldığı an / when the door was opened
11unsigned int openCount = 0;               // toplam açılış / total openings
12
13void setup() {
14  Serial.begin(9600);
15  pinMode(REED_PIN, INPUT_PULLUP);
16  pinMode(BUZZER_PIN, OUTPUT);
17  pinMode(LED_PIN, OUTPUT);
18  doorOpen = (digitalRead(REED_PIN) == HIGH);   // açılıştaki durumu al / take the state at boot
19  lastReading = doorOpen;
20}
21
22void loop() {
23  unsigned long now = millis();
24  bool reading = (digitalRead(REED_PIN) == HIGH);   // HIGH: mıknatıs uzak, kapı açık / HIGH: magnet away, door open
25
26  if (reading != lastReading) {           // ham değer değişti, sayacı yeniden başlat / raw value changed, restart the timer
27    lastReading = reading;
28    lastChange = now;
29  }
30
31  if (reading != doorOpen && now - lastChange >= STABLE_MS) {   // 50 ms kararlı: gerçek değişim / stable for 50 ms: real change
32    doorOpen = reading;
33    if (doorOpen) {
34      openedAt = now;
35      openCount++;
36      Serial.print(F("Kapi acildi / door opened, sayac / count: "));
37      Serial.println(openCount);
38    } else {
39      Serial.print(F("Kapi kapandi / door closed, sure / duration (s): "));
40      Serial.println((now - openedAt) / 1000);
41    }
42  }
43
44  digitalWrite(LED_PIN, doorOpen ? HIGH : LOW);     // LED kapı açıkken yanar / LED is on while the door is open
45
46  // Uzun süre açık kalırsa çeyrek saniyede bir öt / beep every quarter second if left open too long
47  bool alarm = doorOpen && (now - openedAt > OPEN_LIMIT);
48  digitalWrite(BUZZER_PIN, (alarm && (now / 250) % 2) ? HIGH : LOW);
49}

Kod delay() kullanmadığı için döngü sürekli pini kontrol eder ve hiçbir açılışı kaçırmaz; bu tekniği millis ve delay farkı yazısında ayrıntılı anlattık. Ham okuma her değiştiğinde lastChange zamanı yenilenir ve değer 50 ms boyunca aynı kalmadıkça doorOpen durumu değişmez. Buzzer kısmı millis() değerini 250'ye bölerek çeyrek saniyede bir açıp kapatır. Sistemi gerçek bir alarma çevirmek için şifreli bir keypad ile kurulup kapatılabilir hâle getirebilir, odanın içine bir PIR hareket sensörü ekleyebilirsin. Daha kapsamlı bir yapı için Arduino alarm sistemi yazısına göz at.

Bisiklet hız göstergesi: reed röle ile devir sayma

Bisiklet kilometre saatlerinin çoğu bir reed röle ile jant teline takılan küçük bir mıknatıstan oluşur. Tekerlek her döndüğünde mıknatıs çataldaki reedin önünden bir kez geçer ve bir darbe üretir. İki darbe arasındaki süreyi ölçersen hızı, darbeleri sayarsan mesafeyi bulursun: hız (km/sa) = çevre (mm) / süre (ms) × 3,6. Burada mm/ms doğrudan m/s'ye eşittir, 3,6 ile çarpmak sonucu km/sa birimine çevirir. Örneğin 2105 mm çevreli 700x25C bir tekerlekte iki darbe arası 253 ms ise hız 2105 / 253 × 3,6 ≈ 30 km/sa olur. Tekerlek çevresini en doğru şekilde, sibop yere değerken tekerleği bir tam tur yuvarlayıp yerdeki iki iz arasını ölçerek bulursun.

Lastik ölçüsüYaklaşık çevre30 km/sa hızda tur süresi
20x1.75 (BMX, çocuk bisikleti)1515 mm182 ms
26x2.1 (dağ bisikleti)2068 mm248 ms
29x2.1 (dağ bisikleti)2288 mm275 ms
700x25C (yol bisikleti)2105 mm253 ms
700x28C (şehir, gravel)2136 mm256 ms
C++ (Arduino IDE)
1const byte REED_PIN = 2;                  // kesme pini D2 (INT0) / interrupt pin D2 (INT0)
2const float WHEEL_MM = 2105.0;            // 700x25C tekerlek çevresi (mm) / 700x25C wheel circumference (mm)
3const unsigned long LOCKOUT_MS = 80;      // daha sık darbe imkânsız (~95 km/sa) / faster pulses are impossible (~95 km/h)
4const unsigned long TIMEOUT_MS = 3000;    // 3 sn darbe yoksa hız 0 / no pulse for 3 s means speed 0
5
6volatile unsigned long lastPulseMs = 0;   // son geçerli darbe zamanı / time of the last valid pulse
7volatile unsigned long periodMs = 0;      // son iki darbe arası süre / time between the last two pulses
8volatile unsigned long revCount = 0;      // toplam tur / total revolutions
9
10void onMagnet() {                         // ISR: kısa ve hızlı / ISR: short and fast
11  unsigned long now = millis();
12  unsigned long dt = now - lastPulseMs;
13  if (dt < LOCKOUT_MS) return;            // sıçrama ya da çift darbe: yok say / bounce or double pulse: ignore
14  periodMs = (dt < TIMEOUT_MS) ? dt : 0;  // uzun duraklamadan sonraki ilk darbe hız vermez / first pulse after a stop gives no speed
15  lastPulseMs = now;
16  revCount++;
17}
18
19void setup() {
20  Serial.begin(9600);
21  pinMode(REED_PIN, INPUT_PULLUP);
22  attachInterrupt(digitalPinToInterrupt(REED_PIN), onMagnet, FALLING);   // mıknatıs gelince HIGH->LOW / HIGH->LOW when the magnet arrives
23}
24
25void loop() {
26  static unsigned long lastPrint = 0;
27  if (millis() - lastPrint < 500) return; // saniyede 2 kez yaz / print twice per second
28  lastPrint = millis();
29
30  noInterrupts();                         // çok baytlı değerleri güvenle kopyala / copy multi-byte values safely
31  unsigned long period = periodMs;
32  unsigned long last = lastPulseMs;
33  unsigned long revs = revCount;
34  interrupts();
35
36  float speedKmh = 0;
37  if (period > 0 && millis() - last < TIMEOUT_MS) {
38    speedKmh = WHEEL_MM / period * 3.6;   // mm/ms = m/s; 3,6 ile çarp = km/sa / multiply by 3.6 = km/h
39  }
40  float distanceKm = revs * WHEEL_MM / 1000000.0;   // tur x çevre / revolutions x circumference
41
42  Serial.print(F("Hiz / speed: "));
43  Serial.print(speedKmh, 1);
44  Serial.print(F(" km/h   Mesafe / distance: "));
45  Serial.print(distanceKm, 3);
46  Serial.println(F(" km"));
47}

Darbe attachInterrupt ile yakalandığı için loop() ne kadar meşgul olursa olsun tur kaçmaz; Arduino Uno'da yalnız D2 ve D3 pinleri bu tür kesme verir. LOCKOUT_MS değeri çok önemlidir: 80 ms, 2105 mm'lik tekerlekte yaklaşık 95 km/sa'lik bir üst hıza karşılık gelir (2105 / 80 × 3,6). Bundan kısa aralıklarla gelen darbeler fiziksel olarak imkânsızdır; sıçrama, mıknatısın yan kapanma bölgeleri ya da kontağın açılırken sekmesi olarak yok sayılır. 3 saniye boyunca darbe gelmezse hız sıfır kabul edilir. Aynı yapıyla bir motorun ya da çarkın devrini de bulabilirsin: RPM = 60000 / süre (ms). Kesmelerin ayrıntıları için Arduino interrupt rehberine bak; hızı gidondaki bir ekranda göstermek için kodu bir OLED ekran ile birleştirebilirsin.

Reed röle mi Hall sensör mü?

Mıknatısı algılamanın ikinci yolu Hall sensördür. Hall sensör manyetik alanı yarı iletken bir yonga içinde elektrik sinyaline çevirir; hareketli parçası yoktur ama çalışmak için beslemeye ihtiyaç duyar. Kısa kural şudur: pille uzun süre çalışacak, seyrek tetiklenen bir kapı ya da pencere sensörü için reed; saniyede onlarca kez dönen bir motor, fan ya da su akış sensörü gibi hızlı ve sürekli sayımlar için Hall daha doğru seçimdir.

ÖzellikReed röleHall sensör (A3144, US1881, 49E)
Çalışma şekliMekanik kontak, mıknatısla kapanırYarı iletken, alanı elektrik sinyaline çevirir
BeslemeGerekmez, kendisi enerji harcamazGerekir (birkaç mA)
Anahtarlama hızıSaniyede yüzlerce kezOn binlerce Hz'e kadar
Kontak sıçramasıVar (1 ms'nin altında)Yok
ÖmürMekanik aşınma, 100 milyon – 1 milyar anahtarlamaHareketli parça yok, aşınmaz
Kutup ayrımıYok, iki kutba da tepki verirModele göre tek kutuplu, iki kutuplu ya da kilitlemeli
Analog ölçümYok, yalnız açık ya da kapalıLineer modeller (49E) alan şiddetini ölçer
Yük anahtarlamaKüçük AC/DC yükleri doğrudan anahtarlayabilirYalnız sinyal çıkışı verir
DayanıklılıkCam tüp darbe ve bükülmeye hassasPlastik kılıf, sarsıntıya dayanıklı

ESP32 ile kapı açıldı bildirimi (Telegram)

ESP32'nin Wi-Fi'si sayesinde kapı sensörü, kapı açıldığı anda telefonuna mesaj gönderebilir. Bunun için Telegram'da BotFather ile bir bot oluşturup token ve kendi chat ID'ni almalı, Arduino IDE'de UniversalTelegramBot ve ArduinoJson kütüphanelerini kurmalısın; bu adımları ESP32 Telegram bot yazısında ayrıntılı anlattık. Reedin bir bacağını GPIO 27'ye, diğerini GND'ye bağla. Kod kapı açılınca ve kapanınca mesaj atar, kapı 5 dakikadan uzun açık kalırsa hatırlatır ve Wi-Fi o an kopuksa mesajı 10 saniye sonra yeniden dener.

C++ (Arduino IDE)
1#include <WiFi.h>
2#include <WiFiClientSecure.h>
3#include <UniversalTelegramBot.h>
4#include <ArduinoJson.h>
5
6const char* WIFI_SSID = "AgAdi";          // Wi-Fi adın (yalnız 2,4 GHz) / your Wi-Fi name (2.4 GHz only)
7const char* WIFI_PASS = "Sifre123";       // Wi-Fi şifren / your Wi-Fi password
8#define BOT_TOKEN "1234567890:AAExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"   // BotFather'ın verdiği token / token from BotFather
9#define CHAT_ID   "123456789"             // bildirimin gideceği ID / the ID that receives alerts
10
11const int REED_PIN = 27;                  // reed: GPIO 27 ile GND arası / reed between GPIO 27 and GND
12const int LED_PIN  = 2;                   // çoğu DevKit'te dahili LED / onboard LED on most DevKits
13const unsigned long STABLE_MS = 100;      // değişim 100 ms sürmeli / a change must last 100 ms
14const unsigned long REMIND_MS = 300000;   // 5 dk açık kalırsa hatırlat / remind after 5 min open
15const unsigned long RETRY_MS  = 10000;    // gönderilemeyen mesajı 10 sn sonra dene / retry a failed message after 10 s
16
17WiFiClientSecure client;                  // şifreli (HTTPS) bağlantı / encrypted (HTTPS) connection
18UniversalTelegramBot bot(BOT_TOKEN, client);
19
20bool doorOpen = false;                    // onaylanmış kapı durumu / confirmed door state
21bool lastRaw = false;                     // son ham okuma / last raw reading
22unsigned long lastChange = 0;
23unsigned long openedAt = 0;
24bool reminded = false;
25String pending = "";                      // gönderilmeyi bekleyen mesaj / message waiting to be sent
26unsigned long lastTry = 0;
27
28void notify(const String& text) {
29  Serial.println(text);
30  if (WiFi.status() == WL_CONNECTED && bot.sendMessage(CHAT_ID, text)) {
31    pending = "";                         // gönderildi / sent
32  } else {
33    pending = text;                       // Wi-Fi yoksa sonra dene / no Wi-Fi: try again later
34    lastTry = millis();
35  }
36}
37
38void setup() {
39  Serial.begin(115200);
40  pinMode(REED_PIN, INPUT_PULLUP);        // dahili pull-up; GPIO 34-39'da yoktur / internal pull-up; GPIO 34-39 have none
41  pinMode(LED_PIN, OUTPUT);
42
43  WiFi.mode(WIFI_STA);
44  WiFi.begin(WIFI_SSID, WIFI_PASS);
45  Serial.print("Wi-Fi'ye baglaniyor / connecting to Wi-Fi");
46  while (WiFi.status() != WL_CONNECTED) {
47    delay(500);
48    Serial.print(".");
49  }
50  Serial.println();
51  Serial.println(WiFi.localIP());
52  client.setCACert(TELEGRAM_CERTIFICATE_ROOT);   // api.telegram.org kök sertifikası / root certificate of api.telegram.org
53
54  doorOpen = (digitalRead(REED_PIN) == HIGH);    // HIGH = mıknatıs uzak = kapı açık / HIGH = magnet away = door open
55  lastRaw = doorOpen;
56  openedAt = millis();
57  digitalWrite(LED_PIN, doorOpen ? HIGH : LOW);
58  notify(String("Kapı sensörü hazır, kapı ") + (doorOpen ? "AÇIK" : "KAPALI") + " / door sensor ready");
59}
60
61void loop() {
62  unsigned long now = millis();
63  bool raw = (digitalRead(REED_PIN) == HIGH);
64
65  if (raw != lastRaw) {                   // ham değer değişti / raw value changed
66    lastRaw = raw;
67    lastChange = now;
68  }
69
70  if (raw != doorOpen && now - lastChange >= STABLE_MS) {   // kararlı değişim / stable change
71    doorOpen = raw;
72    digitalWrite(LED_PIN, doorOpen ? HIGH : LOW);
73    if (doorOpen) {
74      openedAt = now;
75      reminded = false;
76      notify("Kapı AÇILDI! / door OPENED!");
77    } else {
78      unsigned long sec = (now - openedAt) / 1000;
79      notify("Kapı kapandı / door closed (" + String(sec) + " sn)");
80    }
81  }
82
83  if (doorOpen && !reminded && now - openedAt > REMIND_MS) {   // açık unutuldu / left open
84    reminded = true;
85    notify("Kapı 5 dakikadır açık! / door open for 5 minutes!");
86  }
87
88  if (pending.length() > 0 && now - lastTry > RETRY_MS) {      // bekleyen mesajı yeniden dene / retry the pending message
89    String msg = pending;
90    notify(msg);
91  }
92}

Telegram'a mesaj göndermek 1–2 saniye sürebilir ve bu sırada döngü bekler; ancak durum makinesi gönderim bitince pini yeniden okuduğu için kapının son durumu kaybolmaz. Sensörü pille çalıştırmak istersen ESP32'yi derin uykuya al ve esp_sleep_enable_ext0_wakeup(GPIO_NUM_27, 1) ile kapı açılıp pin HIGH olduğunda uyanmasını sağla. Uyumadan önce uyanma seviyesini pinin o anki durumunun tersine ayarlarsan kart hem açılışta hem kapanışta uyanır. Bu durumda pull-up direncinden geçen akımı da hesaba kat: kapı kapalıyken reed kapalıdır ve 10 kΩ'luk dirençten sürekli 3,3 V / 10 kΩ = 330 µA akar; 100 kΩ seçersen akım 33 µA olur. Derin uykuda dahili pull-up yerine harici bir direnç kullanmak en güvenlisidir. Pil ömrünü pil ömrü hesaplayıcı ile tahmin edebilirsin.

Raspberry Pi Pico ve MicroPython ile reed röle

Raspberry Pi Pico'da reed röleyi okumak MicroPython ile birkaç satırdır. Reedi GP15 ile GND arasına bağla, aktif buzzerın artı ucunu GP14'e, eksi ucunu GND'ye tak. Pico 3,3 V ile çalıştığı için modül kullanıyorsan VCC'yi mutlaka 3V3(OUT) pininden besle; modülü 5 V ile beslersen DO çıkışı 5 V'a çıkar ve Pico'nun girişine zarar verir. Pico'nun dahili pull-up direnci 50–80 kΩ civarındadır ve kısa kablolarda yeterlidir.

MicroPython
1from machine import Pin
2import time
3
4reed = Pin(15, Pin.IN, Pin.PULL_UP)   # reed: GP15 ile GND arası / reed between GP15 and GND
5buzzer = Pin(14, Pin.OUT)             # aktif buzzer artı ucu / active buzzer positive leg
6led = Pin("LED", Pin.OUT)             # dahili LED (Pico ve Pico W) / onboard LED (Pico and Pico W)
7
8STABLE_MS = 50                        # debounce süresi / debounce time
9door_open = reed.value() == 1         # 1 = mıknatıs uzak = kapı açık / 1 = magnet away = door open
10last_raw = door_open
11last_change = time.ticks_ms()
12open_count = 0
13led.value(door_open)
14
15while True:
16    raw = reed.value() == 1
17    now = time.ticks_ms()
18    if raw != last_raw:                       # ham değer değişti / raw value changed
19        last_raw = raw
20        last_change = now
21    if raw != door_open and time.ticks_diff(now, last_change) >= STABLE_MS:
22        door_open = raw                       # 50 ms kararlı: gerçek değişim / stable for 50 ms: real change
23        led.value(door_open)
24        if door_open:
25            open_count += 1
26            print("Kapi acildi / door opened:", open_count)
27            buzzer.on()
28            time.sleep_ms(100)                # kısa bip / short beep
29            buzzer.off()
30        else:
31            print("Kapi kapandi / door closed")
32    time.sleep_ms(5)

Kod Arduino'daki debounce mantığının aynısını time.ticks_ms() ve time.ticks_diff() ile kurar; ticks_diff, sayaç taştığında bile doğru farkı verir. Hız sayacı gibi kaçırılmaması gereken darbeler için reed.irq(trigger=Pin.IRQ_FALLING, handler=...) ile kesme kullanabilirsin. Pico W kullanıyorsan aynı olayı Wi-Fi üzerinden telefona göndermek için Telegram bot yazısındaki Pico W örneğini bu koda ekleyebilirsin. Pico'yu ilk kez kullanıyorsan Raspberry Pi Pico nedir rehberiyle başla.

Reed röle ile proje fikirleri

  • Kablosuz kapı ve pencere sensörü: ESP32 ile evdeki her açılışı telefona bildir ya da MQTT ile Home Assistant'a gönder.
  • Buzdolabı kapı uyarıcısı: Kapı 30 saniyeden uzun açık kalınca kesik kesik bip sesiyle uyarsın.
  • Bisiklet kilometre saati: Anlık hızı, toplam mesafeyi ve ortalama hızı bir ekranda göster.
  • Rüzgâr ve yağmur ölçer: Hava istasyonlarındaki kepçeli anemometre her turda, devrilen kovalı yağmur ölçer de her devrilmede bir reed darbesi üretir.
  • Şamandıralı su seviye anahtarı: Şamandıranın içindeki mıknatıs, gövdedeki reedi açıp kapatarak deponun dolduğunu bildirir; ayrıntılar su seviye sensörü yazısında.
  • Gizli çekmece kilidi: Yalnızca doğru noktaya tutulan bir mıknatısla açılan bir solenoid kilit yap.
  • Posta kutusu bildirimi: Kapağa yerleştirilen reed, mektup geldiğinde ESP32'yi derin uykudan uyandırsın.

Sık yapılan hatalar ve çözümleri

  • Pin rastgele değer okuyor: Pull-up yok. pinMode'u INPUT_PULLUP yap ya da 10 kΩ'luk harici bir pull-up direnci ekle.
  • Mantık ters çalışıyor: Pull-up ile mıknatıs varken LOW okunur; kodda HIGH beklemiş olabilirsin ya da elindeki sensör NC tipidir. Multimetreyle kontrol et.
  • Bir açılışta birden çok sayım: Debounce yok ya da mıknatıs yan kapanma bölgelerinden geçiyor. Kararlılık süresi ekle ve mıknatısı tüpe paralel hizala.
  • Reed hiç kapanmıyor: Mıknatıs zayıf, mesafe fazla, mıknatıs tüpün ortasına dik duruyor ya da çelik kapı alanı yutuyor. Daha güçlü bir neodimyum mıknatıs ve plastik altlık kullan.
  • Reed sürekli kapalı kalıyor: Kontaklar aşırı akım ya da kondansatör yükü yüzünden kaynamış olabilir. Reedle doğrudan motor, lamba ya da röle bobini sürme; yükleri bir röle modülü ya da transistör ile anahtarla.
  • Cam tüp çatladı: Bacaklar gövdeye çok yakın yerden bükülmüş. Bacağı pensle tutup gövdeden en az 2–3 mm uzakta bük ve lehimi kısa sürede bitir.
  • Uzun kablolarda yanlış alarm: Dahili pull-up zayıf kalır. 4,7–10 kΩ'luk harici pull-up, pine 100 nF kondansatör ve bükülü çift kablo kullan.
Reed röleyi devreye takmadan önce multimetrenin süreklilik (bip) kademesiyle test et: problar iki bacakta, mıknatıs yaklaşınca bip sesi gelmeli, uzaklaşınca kesilmeli. Bu on saniyelik test hem reedin sağlam olduğunu hem de NO mu NC mi olduğunu kesin olarak gösterir; mıknatısın tetikleme mesafesini cetvelle ölçmenin de en kolay yoludur.

Reed röle, hiç enerji harcamadan mıknatısı algılayan, ucuz ve son derece güvenilir bir sensördür; doğru mıknatıs yönü, bir pull-up direnci ve birkaç satırlık debounce ile yıllarca sorunsuz çalışır. BlueGrays uygulamasında Reed Röle Değer Okuma ve Reed Röle Kapı Sensörü projelerinin yanı sıra ESP32 hareket alarmı ve Telegram bildirimli alarm sistemi gibi projeleri adım adım devre şemaları ve kodlarıyla bulabilirsin.

Sıkça sorulan sorular

Reed röle nasıl çalışır?

Reed röle, cam bir tüpün içindeki iki nikel-demir dilden oluşur. Yakına bir mıknatıs gelince diller mıknatıslanıp birbirini çeker ve kontak kapanır; mıknatıs uzaklaşınca yay etkisiyle ayrılırlar. Kendisi hiç enerji harcamaz ve Arduino'da bir buton gibi okunur.

Reed röle NO mu NC mi?

En yaygın reed anahtarlar NO (normalde açık, Form A) tipidir: mıknatıs yokken açık, mıknatıs gelince kapalıdır. NC (Form B) ve üç bacaklı çift yollu (Form C) modeller de vardır. Alarm kapı kontaklarındaki "NC" etiketi ise kapı kapalı ve mıknatıs yanındayken devrenin kapalı olduğunu anlatır, bu yüzden multimetreyle test etmek en güvenlisidir.

Reed röle kaç cm mesafeden algılar?

Mesafe mıknatısın gücüne ve reedin hassasiyetine bağlıdır. Küçük bir neodimyum mıknatıs yaygın reedleri genellikle 1–2 cm'den, hazır kapı sensörlerini 15–25 mm'den tetikler; ferrit mıknatıslarla mesafe kabaca yarıya iner. Mıknatısı tüpe paralel tutmak ve çelik yüzeylerden uzaklaştırmak mesafeyi artırır.

Reed röleye direnç gerekir mi?

Arduino girişinde bir pull-up ya da pull-down direnci gerekir; aksi hâlde kontak açıkken pin havada kalır ve rastgele değer okur. Arduino, ESP32 ve Pico'nun dahili pull-up dirençleri INPUT_PULLUP ya da Pin.PULL_UP ile açılabildiği için çoğu zaman harici direnç gerekmez. Uzun kablolarda 4,7–10 kΩ'luk harici direnç daha kararlı sonuç verir.

Reed röle ile Hall sensör arasındaki fark nedir?

Reed mekanik bir kontaktır; besleme istemez ve küçük yükleri doğrudan anahtarlayabilir ama sıçrama yapar ve cam tüpü kırılgandır. Hall sensör yarı iletkendir; beslemeye ihtiyaç duyar, sıçrama yapmaz ve çok daha hızlıdır. Pille çalışan kapı sensörü için reed, hızlı devir sayımı için Hall tercih edilir.

Reed röle ile 220 V lamba yakılır mı?

Küçük cam reedler genellikle en fazla 10 W anahtarlama gücüne dayanır; bu yüzden 220 V'luk bir lambayı ya da motoru doğrudan anahtarlamak kontakları kaynatır ve tehlikelidir. Reedi yalnızca sinyal olarak Arduino'ya bağla, şebeke yükünü bir röle modülüyle kontrol et ve 220 V ile çalışırken güvenlik kurallarına mutlaka uy.

Tüm projeleri gör
Reed Röle Değer Okuma
#37Başlangıç

Reed Röle Değer Okuma

Kapı ve pencere alarmlarındaki mıknatıslı anahtarı hiç merak ettin mi? Reed röle modülüne bir mıknatıs yaklaşınca içindeki minik anahtar kapanır; Arduino bunu saniyede bir okuyup bilgisayar ekranına 0

4.4(21)
27
Reed Röle Kapı Sensörü
#38Başlangıç
Premium

Reed Röle Kapı Sensörü

Kapın açık mı kapalı mı, bir ışığa bakarak anla. Kapıya küçük bir mıknatıs, kasaya da mıknatısı hisseden bir anahtar takarsın; kapı kapalıyken ikisi yan yana durur ve yeşil LED yanar, kapı açılıp mıkn

4.7(34)
44
Buton İle Led Yakma (Push)
#9Başlangıç

Buton İle Led Yakma (Push)

Kapı zili gibi: bastığın sürece ışık yanar, bırakınca söner. Arduino butonu sürekli dinler; butona basılıyken LED'i yakar, elini çektiğin an söndürür. Kartın dışarıdan gelen bir dokunuşu nasıl hissett

4.8(113)
229
ESP32 Buton ile LED Kontrol (Push)
#104Başlangıç

ESP32 Buton ile LED Kontrol (Push)

Butona basılı tutulduğunda LED yanar, bırakıldığında söner. ESP32'nin dijital input pin'i ve dahili pull-up direncinin nasıl kullanıldığını gösterir. INPUT_PULLUP modu sayesinde harici direnç gerekmez.

4.6(36)
55
ESP32 Hareket Alarm Sistemi (PIR + Buzzer + LED + Telegram)
#145İleri
Premium

ESP32 Hareket Alarm Sistemi (PIR + Buzzer + LED + Telegram)

PIR sensörü hareket algıladığında buzzer ve LED'i aktif eden, aynı anda Telegram üzerinden sahibine anlık bildirim gönderen akıllı bir güvenlik alarm sistemidir. Tekrarlayan alarmların sıklığını sınırlamak için 30 saniyelik cooldown (bekleme süresi) mekanizması vardır; bu mekanizma PIR sensörünün yanlış algılamalarını doğrulamaz veya ortadan kaldırmaz. Ev güvenliği, garaj izleme, depo veya çalışma odası gibi alanlarda kullanılabilir. Telegram entegrasyonu sayesinde nerede olursanız olun anında h

0.0(0)
9
Raspberry Pi Pico Buton Debounce Karşılaştırma: IRQ vs Software Polling
#159Orta
Premium

Raspberry Pi Pico Buton Debounce Karşılaştırma: IRQ vs Software Polling

Butona bir kere bastığında kod 3-4 kere saydırdıysa nedeni contact bounce — buton metal kontakları temas anında mikrosaniyelerde defalarca aç-kapa yapar! Bu projede aynı butonu 2 farklı yöntemle sayıp Serial'da yan yana karşılaştırıyoruz: RAW polling (bounce'u yakalar, hatalı sayar) vs IRQ + software debounce (doğru sayar). Öğrenme: contact bounce fiziği (metal titreşim), software debounce (ticks_diff() > 50ms), Pin.irq() interrupt kaydı, IRQ_FALLING trigger tipi,

0.0(0)
12
Lazerli Güvenlik Sistemi
#23İleri
Premium

Lazerli Güvenlik Sistemi

Filmlerdeki lazerli soygun sahneleri gibi: lazer ışını bir ışık sensörüne vurur, biri araya girip ışını kestiği an kırmızı LED yanar ve buzzer ötmeye başlar. Alarm kendiliğinden susmaz; butona basarak

4.8(60)
77