Parçalar · 9 dk okuma

Hall Sensörü Arduino: A3144 ve 49E ile Mıknatıs ve Devir Ölçme

Hall sensörü Arduino: A3144 dijital ve KY-024 / 49E analog sensör, pull-up, kutup ve alan ölçümü, RPM sayma, kapı sensörü, ESP32 dahili Hall ve reed farkı.

Hall sensörü, bir mıknatısın varlığını, kutbunu ve gücünü hiçbir hareketli parça kullanmadan algılayan küçük bir yarı iletken yongadır. Arduino projelerinde bir motorun devrini saymak, bisiklet hızını ölçmek, bir kapının açık mı kapalı mı olduğunu anlamak ya da bir joystick'in konumunu okumak için kullanılır. Telefonundaki kapaklı kılıfın ekranı kapatması, bilgisayar soğutucu fanının devir sinyali ve otomobillerdeki tekerlek hız sensörleri hep Hall etkisiyle çalışır. Hobi kitlerinde en sık iki türüyle karşılaşırsın: aç–kapa sinyali veren dijital A3144 ve alan şiddetini gerilim olarak veren analog 49E (KY-024 modülü).

Bu rehberde Hall etkisinin fiziğini sade bir dille anlatacak, dijital ve analog sensörlerin farkını, bağlantılarını ve neden pull-up direnci gerektiğini göstereceğiz. Ardından A3144 ile mıknatıs algılayacak, 49E ile hangi kutbun yaklaştığını ve alanın kaç gauss olduğunu ölçecek, kesme (interrupt) kullanarak bir motorun devrini (RPM) sayacağız. ESP32'nin dahili Hall sensörünün ne işe yaradığını ve neden yeni sürümlerde kaldırıldığını, Raspberry Pi Pico ile MicroPython kodunu ve Hall sensörü reed röle ile karşılaştırmayı da bulacaksın.

Hall sensörünü tetiklemek için kullanılan küçük mıknatıs
Küçük bir neodimyum mıknatıs, Hall sensörünü birkaç santimetreden tetikler. Mıknatısın düz yüzü sensörün yazılı yüzüne bakmalıdır.

Hall etkisi nedir, Hall sensörü nasıl çalışır?

1879'da Edwin Hall, içinden akım geçen ince bir iletkene dik bir manyetik alan uygulandığında, iletkenin iki kenarı arasında küçük bir gerilim oluştuğunu keşfetti. Sebebi, hareket eden yüklerin manyetik alan içinde yana doğru itilmesidir (Lorentz kuvveti): elektronlar levhanın bir kenarında birikir, diğer kenarı eksik kalır ve aradaki fark Hall gerilimi olarak ölçülür. Bu gerilim alan şiddetiyle doğru orantılıdır, alanın yönü değişince işareti de değişir. Yarı iletkenlerde etki metallerden çok daha belirgindir, ama yine de mikrovolt–milivolt seviyesindedir. Bu yüzden Hall sensörü yongalarının içinde Hall levhasının yanında bir regülatör, bir yükselteç ve dijital modellerde bir Schmitt tetikleyici ile çıkış transistörü bulunur.

Manyetik alan şiddeti gauss (G) ya da militesla (mT) ile ölçülür; 1 mT = 10 G'dir. Dünyanın manyetik alanı yaklaşık 0,25–0,65 G kadardır, bu yüzden Hall sensörlerini etkilemez. Küçük bir neodimyum mıknatısın yüzeyinde birkaç bin gauss vardır ve bu değer mesafeyle çok hızlı düşer: mesafe iki katına çıkınca alan kabaca sekizde birine iner. Bu yüzden algılama mesafesi, sensörün eşiğine ve mıknatısın boyuna bağlı olarak genellikle birkaç milimetre ile birkaç santimetre arasındadır.

Hall sensörü çeşitleri: A3144, KY-024 / 49E ve diğerleri

Hall sensörleri çıkışlarına göre üç ana gruba ayrılır. Tek kutuplu anahtar (unipolar switch) tiplerde, örneğin A3144'te, çıkış yalnızca bir kutup (A3144'te güney kutbu) yeterince yaklaşınca LOW olur, mıknatıs uzaklaşınca yeniden HIGH'a döner. Kilitlemeli (latch) tiplerde, örneğin US1881'de, güney kutbu çıkışı bir duruma, kuzey kutbu diğer duruma geçirir ve mıknatıs gitse bile son durum korunur; bu tip, çevresine sırayla N–S mıknatıs dizilmiş motorlar için idealdir. Doğrusal (linear) tiplerde, örneğin 49E'de, çıkış bir anahtar değil, alan şiddetiyle orantılı bir analog gerilimdir: mıknatıs yokken besleme geriliminin yarısını verir, bir kutup yaklaşınca yükselir, diğer kutupta düşer.

ÖzellikA3144 (dijital)49E / SS49E (analog)US1881 (kilitlemeli)
Besleme4,5–24 V2,7–6,5 V3,5–24 V
ÇıkışAçık kolektör, mıknatısta LOWAnalog, sıfır alanda VCC/2Açık drain, S'de LOW, N'de HIGH
Tepki verdiği kutupYalnız güney (S)İkisi de, işaretiyle birlikteS açar, N kapatır
Eşik / hassasiyetAçılma eşiği yaklaşık 70–350 G5 V'ta tipik 1,4 mV/GTipik ±95 G
Pull-up gerekir mi?Evet (10 kΩ ya da INPUT_PULLUP)HayırEvet
Modül adıKY-003KY-024 (LM393 ile DO da var), KY-035Modül olarak nadir
Bacaklar (yazılı yüz sana bakarken)VCC, GND, OUTVCC, GND, OUTVDD, GND, OUT

Hall sensörü Arduino bağlantısı ve pull-up direnci

A3144'ün çıkışı bir açık kolektör transistördür: mıknatıs varken çıkışı GND'ye bağlar, mıknatıs yokken ise çıkışı hiçbir yere bağlamaz, yani boşta bırakır. Boştaki bir pin gürültüden rastgele HIGH ve LOW okur. Bu yüzden çıkışın bir dirençle besleme tarafına çekilmesi gerekir; buna pull-up denir. Arduino'da en kolay yol pinMode(pin, INPUT_PULLUP) ile kartın içindeki 20–50 kΩ'luk direnci açmaktır. Kablo uzunsa, ortam gürültülüyse ya da hızlı dönen bir mili sayıyorsan çıkış ile besleme arasına harici 10 kΩ koymak daha temiz kenarlar verir. Açık kolektörün güzel bir yan etkisi vardır: sensörü 5 V ile besleyip çıkışı 3,3 V'a çekersen, ESP32 ve Pico gibi 3,3 V kartlar da güvenle kullanabilir.

BağlantıArduino UnoESP32Raspberry Pi Pico
A3144 VCC5VVIN (5 V)VBUS (5 V)
A3144 OUTD2 + INPUT_PULLUP (ya da 10 kΩ → 5V)GPIO 27 + INPUT_PULLUP (ya da 10 kΩ → 3V3)GP15 + PULL_UP (ya da 10 kΩ → 3V3)
49E VCC5V3V33V3
49E OUTA0GPIO 34GP26 (ADC0)
GND (ikisi için)GNDGNDGND
A3144'ün resmi besleme aralığı 4,5–24 V'tur; onu 3,3 V ile beslemek çoğu zaman çalışıyor gibi görünse de güvenilir değildir. ESP32 ve Pico'da sensörü 5 V'tan besle, çıkışın pull-up'ını ise 3,3 V'a bağla. KY-003 gibi hazır modüllere dikkat et: üzerlerinde çıkışı VCC'ye çeken bir direnç ve LED bulunur. Modülü 5 V ile beslersen çıkışı da 5 V'a yaklaşır ve 3,3 V kartın pinine zarar verebilir; bu durumda çıkışa bir gerilim bölücü koy ya da yalın sensör kullan.

A3144 ile mıknatıs algılama

  1. A3144'ün yazılı yüzü sana bakarken bacakları soldan sağa VCC, GND ve OUT'tur. VCC'yi 5V'a, GND'yi GND'ye, OUT'u D2'ye bağla.
  2. Aşağıdaki kodu yükle ve Seri Monitör'ü 9600 baud hızında aç.
  3. Mıknatısın bir yüzünü sensörün yazılı yüzüne yaklaştır. Kartın dahili LED'i yanmazsa mıknatısı ters çevir; A3144 yalnızca güney kutbuna tepki verir.
  4. LED'in yandığı ve söndüğü mesafeleri not et; ikisi arasındaki fark sensörün dahili histerezisidir.
C++ (Arduino IDE)
1const byte HALL_PIN = 2;              // A3144 OUT
2const byte LED_PIN = 13;              // dahili LED / onboard LED
3
4bool lastMagnet = false;
5
6void setup() {
7  pinMode(HALL_PIN, INPUT_PULLUP);    // açık kolektör çıkış için pull-up / pull-up for the open-collector output
8  pinMode(LED_PIN, OUTPUT);
9  Serial.begin(9600);
10}
11
12void loop() {
13  bool magnet = digitalRead(HALL_PIN) == LOW;   // mıknatıs varken LOW / LOW when a magnet is present
14  digitalWrite(LED_PIN, magnet ? HIGH : LOW);
15
16  if (magnet != lastMagnet) {                   // yalnız durum değişince yaz / print only on change
17    Serial.println(magnet ? F("Miknatis var / magnet detected") : F("Miknatis yok / no magnet"));
18    lastMagnet = magnet;
19  }
20}

Reed röle ya da butonun aksine A3144'te debounce gerekmez. Sensörün içindeki Schmitt tetikleyici, açılma eşiğinin (BOP) kapanma eşiğinden (BRP) en az 20 G kadar yüksek olmasını sağlar; mıknatıs sınırda titrese bile çıkış bir o yana bir bu yana sıçramaz. Hareketli bir kontak olmadığı için çıkış kenarları da temizdir ve saniyede binlerce kez tetiklenebilir. Mantığın ters olduğunu unutma: INPUT_PULLUP kullandığında mıknatıs varken LOW, yokken HIGH okursun; bu, buton bağlantısındaki pull-up mantığının aynısıdır.

KY-024 / 49E ile kutup ve alan şiddeti ölçmek

49E doğrusal bir sensördür: 5 V ile beslendiğinde mıknatıs yokken çıkışı yaklaşık 2,5 V'tur ve her gauss için tipik olarak 1,4 mV değişir. Güney kutbu yazılı yüze yaklaştığında gerilim yükselir, kuzey kutbunda düşer. Bu sayede yalnızca mıknatısın varlığını değil, hangi kutbun yaklaştığını ve alanın ne kadar güçlü olduğunu da ölçebilirsin: B (G) = (Vçıkış − Vsıfır) / 0,0014. KY-024 modülünde AO pini doğrudan 49E'nin çıkışıdır; DO pini ise LM393 karşılaştırıcının, potansiyometreyle ayarladığın eşiği geçince değişen dijital çıkışıdır. Aşağıdaki kod açılışta sıfır noktasını ölçer, sonra alanı gauss ve militesla olarak yazar ve kutbu söyler.

C++ (Arduino IDE)
1const byte HALL_PIN = A0;               // 49E OUT ya da KY-024 AO / 49E OUT or KY-024 AO
2const float VCC = 5.0;
3const float SENSITIVITY = 0.0014;       // 1,4 mV/G (5 V'ta tipik) / 1.4 mV/G (typical at 5 V)
4const float DEAD_BAND = 20.0;           // bu değerin altını yok say (G) / ignore below this (G)
5
6float zeroVolt = 2.5;
7
8float readVolt() {
9  long sum = 0;
10  for (byte i = 0; i < 32; i++) sum += analogRead(HALL_PIN);   // 32 ölçüm ortalaması / average of 32 readings
11  return sum / 32.0 * VCC / 1023.0;
12}
13
14void setup() {
15  Serial.begin(9600);
16  delay(200);
17  zeroVolt = readVolt();                // mıknatıs yokken sıfır noktası / zero point with no magnet nearby
18  Serial.print(F("Sifir / zero: "));
19  Serial.print(zeroVolt, 3);
20  Serial.println(F(" V"));
21}
22
23void loop() {
24  float gauss = (readVolt() - zeroVolt) / SENSITIVITY;
25  Serial.print(gauss, 0);
26  Serial.print(F(" G  ("));
27  Serial.print(gauss / 10.0, 1);        // 10 G = 1 mT
28  Serial.print(F(" mT)  "));
29  if (gauss > DEAD_BAND)       Serial.println(F("Guney kutbu / south pole"));
30  else if (gauss < -DEAD_BAND) Serial.println(F("Kuzey kutbu / north pole"));
31  else                         Serial.println(F("Alan yok / no field"));
32  delay(250);
33}

Uno'nun 10 bitlik ADC'si 5 V'u 1024 adıma böler, yani bir adım yaklaşık 4,9 mV'tur; bu da 49E ile yaklaşık 3,5 G'lik bir çözünürlük demektir. Kutup etiketleri üreticiden üreticiye değişebildiği için ilk denemede bir pusula ile kontrol et: pusulanın kuzeyi gösteren ucu mıknatısın güney kutbuna yönelir. Sensör yaklaşık ±1000 G'te doyuma ulaşır; çok güçlü bir mıknatısı neredeyse dokundurursan değer artık yükselmez. Sıfır noktası sıcaklıkla birkaç milivolt kayabileceği için hassas ölçümlerde ölçümden hemen önce sıfırlamayı tekrarla.

Hall sensörü ile devir ve hız ölçme (RPM)

Bir motorun, fanın ya da tekerleğin devrini ölçmek için mile ya da janta küçük bir mıknatıs yapıştırır, A3144'ü mıknatısın her turda önünden geçeceği yere sabitlersin. Her geçişte çıkış bir kez LOW olur. Darbeleri loop() içinde digitalRead() ile yakalamaya çalışmak hızlı dönüşlerde darbe kaçırır; doğru yöntem bir kesme kullanmaktır. Aşağıdaki kod iki darbe arasındaki süreyi mikrosaniye hassasiyetinde ölçer ve devri RPM = 60.000.000 / (süre_µs × mıknatıs_sayısı) formülüyle hesaplar. 2 saniye boyunca darbe gelmezse mil durmuş kabul edilir. Kesmelerin nasıl çalıştığını Arduino interrupt yazısında ayrıntılı anlattık.

C++ (Arduino IDE)
1const byte HALL_PIN = 2;                  // A3144 OUT, Uno'da kesme pini (INT0) / interrupt pin on the Uno (INT0)
2const byte MAGNETS = 1;                   // mildeki mıknatıs sayısı / magnets on the shaft
3const unsigned long MIN_GAP_US = 2000;    // 2 ms'den sık darbeler gürültüdür / pulses closer than 2 ms are noise
4const unsigned long STOP_US = 2000000;    // 2 sn darbe yoksa durdu / no pulse for 2 s means stopped
5
6volatile unsigned long lastPulse = 0;
7volatile unsigned long period = 0;        // iki darbe arası süre (µs) / time between pulses (µs)
8
9void onPulse() {
10  unsigned long now = micros();
11  unsigned long gap = now - lastPulse;
12  if (gap > MIN_GAP_US) {
13    period = gap;
14    lastPulse = now;
15  }
16}
17
18void setup() {
19  pinMode(HALL_PIN, INPUT_PULLUP);
20  attachInterrupt(digitalPinToInterrupt(HALL_PIN), onPulse, FALLING);   // mıknatıs gelince LOW'a iner / falls LOW when the magnet arrives
21  Serial.begin(9600);
22}
23
24void loop() {
25  noInterrupts();                         // iki değişkeni birlikte oku / read both variables together
26  unsigned long p = period;
27  unsigned long last = lastPulse;
28  interrupts();
29
30  float rpm = 0;
31  if (p > 0 && micros() - last < STOP_US) {
32    rpm = 60000000.0 / ((float)p * MAGNETS);
33  }
34  Serial.print(F("RPM: "));
35  Serial.println(rpm, 0);
36  delay(500);
37}

Kod 2 ms'lik bir kilit süresi kullanır; bu, tek mıknatısla en fazla 30.000 RPM ölçebileceğin anlamına gelir ve çoğu hobi motoru için fazlasıyla yeterlidir. Mile iki ya da dört mıknatıs koyarsan düşük hızlarda daha sık güncellenen bir ölçüm alırsın, yalnızca MAGNETS değerini değiştirmen yeterli. Mıknatısları dengeli yerleştir; tek taraflı ağırlık hızlı dönen bir milde titreşim yapar. Bilgisayar fanlarının sarı kablosu da aslında içerideki bir Hall sensöründen gelen açık kolektör çıkıştır ve tur başına iki darbe verir; aynı kodu MAGNETS = 2 ile kullanarak bir fanın devrini okuyabilirsin. Bisiklet hız göstergesi için gereken çevre ve km/sa hesabını reed röle yazısında bulabilirsin; formül Hall sensörüyle de aynıdır.

Hall sensörü ile kapı ve kapak sensörü

Kapı sensörü için mıknatısı kapının hareketli kanadına, A3144'ü kasaya, kapı kapalıyken mıknatısın güney kutbu sensörün yazılı yüzüne bakacak şekilde yerleştir. Kapı kapalıyken çıkış LOW, açılınca HIGH olur; kablo kopsa bile pull-up pini HIGH'a çeker ve sistem bunu "kapı açık" olarak görür, yani arıza güvenli tarafta kalır. Hall sensörünün burada iki avantajı vardır: hareketli kontağı olmadığı için titreşimli kapılarda ve saniyede birçok kez açılıp kapanan kapaklarda yıpranmaz, ve sızdırmaz bir kutunun içinden bile mıknatısı algılar. Dezavantajı ise sürekli enerji harcamasıdır: A3144 yaklaşık 4–5 mA çeker, bu da 2000 mAh'lik bir pili yalnız sensör için yaklaşık 18 günde bitirir. Pille aylarca çalışacak bir kapı sensörü için bu yüzden enerji harcamayan bir reed röle daha uygundur.

ESP32'nin dahili Hall sensörü

Orijinal ESP32 yongasının içinde küçük bir Hall sensörü vardır ve Arduino ESP32 çekirdeğinin 2.x sürümlerinde hallRead() fonksiyonuyla okunabilir. Ancak bu sensör çok gürültülüdür ve yalnızca güçlü bir mıknatıs modülün metal kapağına neredeyse değdiğinde belirgin bir değişim gösterir; ölçüm sırasında GPIO 36 ve GPIO 39 pinlerini de kullanır, bu yüzden bu pinlere başka bir şey bağlıysan sonuçlar bozulur. ESP32-S2, S3 ve C3 gibi yeni yongalarda bu sensör hiç yoktur ve Espressif, ESP-IDF 5 ile birlikte desteği kaldırdığı için Arduino ESP32 3.x çekirdeğinde hallRead() artık bulunmaz. Aşağıdaki kod iki sürümde de derlenir: 2.x'te ortalama değeri yazar, 3.x'te bunun yerine bir uyarı gösterir. Ciddi bir proje için ESP32'ye harici bir A3144 ya da 49E bağlamak her zaman daha iyidir; kartın genel özelliklerini ESP32 nedir yazısında bulabilirsin.

C++ (Arduino IDE)
1// ESP32 dahili Hall sensörü (yalnız orijinal ESP32) / built-in Hall sensor (original ESP32 only)
2void setup() {
3  Serial.begin(115200);
4}
5
6void loop() {
7#if ESP_ARDUINO_VERSION_MAJOR < 3
8  long sum = 0;
9  for (int i = 0; i < 100; i++) {
10    sum += hallRead();              // GPIO 36 ve 39'u kullanır / uses GPIO 36 and 39
11  }
12  Serial.println(sum / 100);        // gürültülü, ortalama al / noisy, so average it
13#else
14  Serial.println("hallRead() 3.x cekirdekte yok / not available in core 3.x");
15#endif
16  delay(200);
17}

Raspberry Pi Pico ile devir ölçme (MicroPython)

Pico'da A3144'ü VBUS'tan 5 V ile besle, çıkışını GP15'e bağla ve pinin dahili pull-up direncini aç; bu direnç 3,3 V'a bağlı olduğu için pine hiçbir zaman 5 V gelmez. Aşağıdaki kod darbeleri bir kesmeyle sayar ve her saniye sayacı okuyup sıfırlar. Sayacı okurken kesmeleri kısa süreliğine kapatmak, okuma ile sıfırlama arasına bir darbenin girip kaybolmasını önler. Bu yöntemin çözünürlüğü tek mıknatısla 60 RPM'dir; daha hassas bir sonuç için Arduino örneğindeki gibi iki darbe arasındaki süreyi time.ticks_us() ile ölçebilirsin.

MicroPython
1from machine import Pin, disable_irq, enable_irq
2import time
3
4hall = Pin(15, Pin.IN, Pin.PULL_UP)    # A3144 OUT (sensör VBUS'tan 5 V ile) / A3144 OUT (sensor on 5 V from VBUS)
5MAGNETS = 1                            # mildeki mıknatıs sayısı / magnets on the shaft
6count = 0
7last_us = 0
8
9def on_pulse(pin):
10    global count, last_us
11    now = time.ticks_us()
12    if time.ticks_diff(now, last_us) > 2000:    # 2 ms gürültü filtresi / 2 ms noise filter
13        count += 1
14        last_us = now
15
16hall.irq(trigger=Pin.IRQ_FALLING, handler=on_pulse)
17
18while True:
19    time.sleep(1)
20    state = disable_irq()              # sayacı güvenle oku / read the counter safely
21    pulses = count
22    count = 0
23    enable_irq(state)
24    print("RPM:", pulses * 60 // MAGNETS)

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

İkisi de mıknatısı algılar, ama yöntemleri tamamen farklıdır. Reed röle, cam bir tüpün içindeki iki metal dilin mıknatısla birbirine değmesiyle çalışan mekanik bir anahtardır ve hiç enerji harcamaz. Hall sensörü ise beslemeye ihtiyaç duyan, hareketli parçası olmayan elektronik bir yongadır. Kısa kural şöyledir: seyrek tetiklenen, pille aylarca çalışacak bir sensör için reed röle; hızlı dönen bir mil, titreşimli bir ortam, kutup bilgisi ya da alan şiddeti gereken her iş için Hall sensörü.

Cam gövdeli reed röle
Reed röle: cam tüp içinde iki metal dil. Enerji harcamaz ama mekanik olduğu için hızı ve ömrü sınırlıdır.
ÖzellikHall sensörü (A3144 / 49E)Reed röle
Çalışma şekliYarı iletken, hareketli parça yokMekanik kontak
BeslemeGerekir (yaklaşık 4–6 mA)Gerekmez
Kutup ve şiddetA3144 yalnız güney; 49E kutup ve şiddet verirKutup fark etmez, yalnız var / yok
HızOnlarca kHz'e kadar, temiz kenarYüzlerce Hz, kontak sıçraması var
Ömür ve dayanıklılıkAşınmaz, titreşime dayanıklıMilyonlarca anahtarlama, cam kırılabilir
En iyi kullanımRPM, hız, konum, kutup algılamaPilli kapı ve pencere sensörleri

Hall sensörü ile proje fikirleri

  • Bisiklet kilometre saati: Jant teline bir mıknatıs, çatala bir A3144 koy; hızı, mesafeyi ve ortalama hızı bir OLED ekranda göster.
  • Motor ve fan devir ölçer: Bir DC motorun ya da bilgisayar fanının devrini ölç, PWM ile hız ayarı yaparken gerçek devri izle.
  • Rüzgâr ölçer (anemometre): Fincanlı bir pervanenin miline mıknatıs tak, devirden rüzgâr hızını hesapla ve ESP32 ile kaydet.
  • Su akış sayacı: YF-S201 gibi akış sensörlerinin içinde de bir Hall sensörü vardır; darbeleri sayarak litreyi ölçebilirsin, ayrıntılar su akış sensörü yazısında.
  • Gizli kasa ya da çekmece kilidi: Kapağın içine gizlenmiş bir 49E, yalnızca doğru noktaya tutulan mıknatısla kilidi açsın.
  • Kapı ve kapak alarmı: A3144 ile kapak açılınca buzzer çalan ya da ESP32 ile telefona bildirim gönderen bir alarm.

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

BelirtiOlası nedenÇözüm
Pin rastgele HIGH ve LOW okuyorA3144 çıkışında pull-up yokINPUT_PULLUP kullan ya da çıkış ile VCC arasına 10 kΩ koy
Mıknatıs yaklaşınca hiçbir şey olmuyorYanlış kutup: A3144 yalnız güney kutbuna tepki verirMıknatısı ters çevir ve yazılı yüze dik tut
Sensör ESP32 ya da Pico'da kararsızA3144 3,3 V ile besleniyorSensörü 5 V ile besle, pull-up'ı 3,3 V'a bağla
Yüksek devirde RPM düşük ya da düzensizDarbeler loop() içinde okunuyor ve kaçıyorattachInterrupt() ile kesme kullan
49E mıknatıs yokken de değer gösteriyorSıfır noktası 2,5 V'tan farklı ya da kaymışAçılışta sıfır noktasını ölç ve ondan çıkar
ESP32 hallRead() derlenmiyorArduino ESP32 3.x çekirdeği kullanılıyorHarici Hall sensörü kullan ya da 2.x çekirdeğe geç
Hangi yüzün güney kutbu olduğunu bilmediğin bir mıknatısla uğraşıyorsan önce 49E kodunu çalıştır ve mıknatısın iki yüzünü sırayla sensöre yaklaştır: pozitif gauss veren yüz güney kutbudur. O yüzü bir kalemle işaretle; A3144 ile kurduğun her projede bu işaret sana zaman kazandırır. Mıknatısı yapıştırırken yalnızca kutbu değil, merkezini de sensörün yazılı yüzünün ortasına hizala; birkaç milimetrelik kayma tetikleme mesafesini yarıya indirebilir.

Hall sensörü, mıknatısı temassız, sessiz ve aşınmadan algılamanın en esnek yoludur: A3144 ile hızlı ve temiz bir aç–kapa sinyali, 49E ile kutup ve alan şiddeti, kesmelerle de güvenilir bir devir ölçümü elde edersin. Pull-up direncini, doğru kutbu ve 3,3 V kartlarda besleme ayrıntısını unutmazsan ilk denemede çalışır. BlueGrays uygulamasında Reed Röle Değer Okuma ve Reed Röle Kapı Sensörü projelerini, buton ve kesme örnekleriyle birlikte ESP32 hareket alarmı ve Pico debounce projelerini adım adım devre şemaları ve kodlarıyla bulabilirsin.

Sıkça sorulan sorular

Hall sensörü nasıl çalışır?

Hall sensörünün içinde akım geçen ince bir yarı iletken levha vardır. Levhaya dik bir manyetik alan geldiğinde yükler bir kenara itilir ve iki kenar arasında alanla orantılı küçük bir gerilim oluşur. Sensörün içindeki yükselteç bu gerilimi büyütür; dijital modellerde bir eşik devresi bunu aç–kapa çıkışına çevirir.

A3144 neden pull-up direnci ister?

A3144'ün çıkışı açık kolektördür: mıknatıs varken çıkışı GND'ye bağlar, yokken hiçbir yere bağlamaz. Boşta kalan pin gürültüden rastgele değerler okuduğu için çıkışın bir dirençle beslemeye çekilmesi gerekir. Arduino'da INPUT_PULLUP yeterlidir; uzun kablo ve yüksek devirde harici 10 kΩ daha iyidir.

A3144 hangi kutba tepki verir?

A3144 tek kutuplu bir anahtardır ve yalnızca güney kutbu yazılı yüzüne yeterince yaklaştığında çıkışı LOW yapar. Kuzey kutbunu yaklaştırırsan hiçbir şey olmaz. Mıknatısın kutbunu bilmiyorsan iki yüzünü de dene ya da 49E gibi doğrusal bir sensörle kontrol et.

KY-024 ile KY-003 arasındaki fark nedir?

KY-003, dijital A3144 sensörlü bir modüldür ve yalnızca mıknatıs var ya da yok bilgisini verir. KY-024 ise doğrusal 49E sensörü ve bir LM393 karşılaştırıcı taşır; AO pininden alan şiddetini analog olarak, DO pininden de potansiyometreyle ayarlanan eşiğe göre dijital sinyal verir.

Hall sensörü kaç cm mesafeden algılar?

Mesafe mıknatısın gücüne ve sensörün eşiğine bağlıdır. Küçük bir neodimyum mıknatıs A3144'ü genellikle 1–3 cm'den tetikler; zayıf bir ferrit mıknatısla bu mesafe birkaç milimetreye iner. Manyetik alan mesafeyle çok hızlı azaldığı için mesafeyi artırmanın en etkili yolu daha büyük ya da daha güçlü bir mıknatıs kullanmaktır.

ESP32'nin dahili Hall sensörü kullanılabilir mi?

Orijinal ESP32'de bir dahili Hall sensörü vardır ve Arduino ESP32 2.x çekirdeğinde hallRead() ile okunabilir. Ancak çok gürültülüdür, yalnızca çok yakın ve güçlü bir mıknatısı fark eder ve GPIO 36 ile 39'u kullanır. ESP32-S2, S3 ve C3'te bulunmaz, Arduino ESP32 3.x çekirdeğinde de hallRead() kaldırılmıştır; ciddi projelerde harici bir sensör kullan.

Tüm projeleri gör
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
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
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
Hareket Sensörü İle Hareket Algılayıcı
#24Başlangıç
Premium

Hareket Sensörü İle Hareket Algılayıcı

Biri odaya girdiğinde haber veren basit bir bekçi. Hareket sensörü insan vücudunun yaydığı ısıyı fark eder; Arduino hareket olduğu sürece LED'i yakar, hareket bitince söndürür. Kapı önünde kendiliğind

4.6(47)
67