Titreşim Sensörü Arduino: SW-420 ile Darbe Algılama ve Alarm
Titreşim sensörü Arduino: SW-420 nasıl çalışır, hassasiyet ayarı, darbe sayma ve süre ölçme, hırsız alarmı, deprem fikri ve MPU6050, ESP32 Telegram uyarısı.
Titreşim sensörü Arduino projelerinde en çok kullanılan parça, ucuz ve basit SW-420 modülüdür. Bir yüzeyin sarsıldığını, bir kapıya vurulduğunu, bir çekmecenin açıldığını ya da bir makinenin çalışmaya başladığını tek bir dijital pinle haber verir. Modülün üzerinde yaylı bir titreşim anahtarı, LM393 karşılaştırıcı entegresi ve hassasiyeti ayarlayan küçük bir potansiyometre bulunur. Kullanımı kolaydır ama ilk denemede çoğu kişi aynı iki sorunla karşılaşır: sensörün bazı titreşimleri kaçırması ve bazen de hiçbir sebep yokken alarm vermesi.
Bu rehberde SW-420'nin içindeki yaylı kontağın nasıl çalıştığını, çıkış sinyalinin neden kısa darbeler hâlinde geldiğini ve hassasiyetin doğru nasıl ayarlanacağını öğreneceksin. Ardından darbeleri kesmeyle sayacak, bir sarsıntının ne kadar sürdüğünü ve ne kadar şiddetli olduğunu ölçecek, yanlış alarmları azaltan bir hırsız alarmı kuracağız. Deprem uyarıcısı fikrinin neden sanıldığı kadar basit olmadığını ve MPU6050 ivmeölçerin bu işte ne kattığını da konuşacağız. Son olarak ESP32 ile titreşim algılandığında telefona Telegram mesajı gönderecek ve Raspberry Pi Pico için MicroPython kodu yazacağız.

SW-420 titreşim sensörü nedir, nasıl çalışır?
Modülün asıl algılayıcısı, küçük silindir biçimli metal bir kılıfın içindeki normalde kapalı (NC) bir titreşim anahtarıdır. Kılıfın içinde bir yay ve iletken bir parça bulunur; sensör hareketsizken bunlar birbirine değer ve kontak kapalıdır. Sensör sarsıldığında yay salınır ve kontak, her biri milisaniyenin altında süren çok kısa aralıklarla açılıp kapanır. Anahtarın kendisi yönsüzdür, yani hangi yönden gelirse gelsin titreşime tepki verir. Modüldeki LM393 bu titreşim anahtarının oluşturduğu gerilimi potansiyometrenin belirlediği bir eşikle karşılaştırır ve temiz bir dijital çıkış (DO) üretir. Çoğu modülde sensör durgunken DO LOW, titreşim sırasında HIGH olur ve karttaki sinyal LED'i titreşimle birlikte söner ya da yanıp söner; bazı kopya kartlarda mantık tersine olabildiği için ilk iş kendi modülünü Seri Monitör'le test et.
| Özellik | Değer |
|---|---|
| Algılayıcı | SW-420, normalde kapalı yaylı titreşim anahtarı |
| Besleme | 3,3–5 V |
| Çıkış | Dijital (DO), LM393 karşılaştırıcı üzerinden |
| Hassasiyet ayarı | Kart üzerindeki potansiyometre |
| Yön | Yönsüz, her yönden gelen titreşime tepki verir |
| Çıkış sinyali | Titreşim boyunca kısa darbe dizileri |
| Pinler | VCC, GND, DO |
| Kart ölçüsü | Yaklaşık 32 × 14 mm, bir adet M3 montaj deliği |
SW-420 Arduino bağlantısı
| Modül pini | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| VCC | 5V | 3V3 | 3V3(OUT) |
| GND | GND | GND | GND |
| DO | D2 (kesme pini INT0) | GPIO 27 | GP15 |
Hassasiyet ayarı: potansiyometre nasıl ayarlanır?
Potansiyometre karşılaştırıcının eşiğini belirler. Eşik çok hassas ayarlanırsa sensör masaya konan bir bardağı, yandan geçen bir kamyonu ya da kendi buzzerının titreşimini bile algılar; çok kaba ayarlanırsa ancak sert bir darbede tepki verir. Doğru ayar için modülü kullanacağın yüzeye vidala ve kartın sinyal LED'ini izle. Potansiyometreyi LED'in hareketsizken sabit kaldığı, ama yüzeye parmağınla hafifçe vurduğunda tepki verdiği noktaya getir; sonra hassasiyeti çok az azaltarak bir güvenlik payı bırak. Bu ayar yüzeyin malzemesine göre değişir: aynı ayar ahşap bir masada çok hassas, beton bir duvarda ise sağır olabilir.
İlk test: titreşimi algılamak ve kısa darbeleri yakalamak
Yeni başlayanların ilk kodu genellikle loop() içinde digitalRead() ile pini okuyup HIGH görünce LED yakmaktır. Bu, sert bir darbede çalışır ama hafif titreşimlerde çoğu zaman hiçbir şey olmaz; çünkü SW-420'nin çıkışı yalnızca birkaç yüz mikrosaniye HIGH kalabilir ve loop() o anda Serial.print() ya da delay() ile meşgulse darbe kaçar. Çözüm, darbeyi bir kesmeyle yakalamak ve bir sonraki darbeye kadar zamanı not etmektir. Aşağıdaki kod her darbede zamanı kaydeder ve son darbeden sonra 1 saniye boyunca LED'i yakık tutar; böylece göz, kısacık bir titreşimi bile görebilir.
1const byte VIB_PIN = 2; // SW-420 DO (INT0)
2const byte LED_PIN = 13; // dahili LED / onboard LED
3const unsigned long HOLD_MS = 1000; // son darbeden sonra LED süresi / LED time after the last pulse
4
5volatile unsigned long lastPulseMs = 0;
6volatile bool pulseSeen = false;
7
8void onVibration() { // her darbede çalışır / runs on every pulse
9 lastPulseMs = millis();
10 pulseSeen = true;
11}
12
13void setup() {
14 pinMode(VIB_PIN, INPUT);
15 pinMode(LED_PIN, OUTPUT);
16 attachInterrupt(digitalPinToInterrupt(VIB_PIN), onVibration, RISING); // LOW → HIGH geçişi / LOW to HIGH edge
17 Serial.begin(9600);
18}
19
20void loop() {
21 noInterrupts();
22 unsigned long last = lastPulseMs;
23 bool seen = pulseSeen;
24 pulseSeen = false;
25 interrupts();
26
27 if (seen) Serial.println(F("Titresim / vibration"));
28 digitalWrite(LED_PIN, (last > 0 && millis() - last < HOLD_MS) ? HIGH : LOW);
29}Kesme, pinin LOW'dan HIGH'a geçtiği her kenarda çalışır; Uno'da yalnızca D2 ve D3 bu tür harici kesme verir. Modülün mantığı tersse RISING yerine FALLING yaz; darbe dizileri hem yükselen hem düşen kenarlardan oluştuğu için sayım değişmez. Kesme fonksiyonu olabildiğince kısa tutulmuştur ve içinde Serial kullanılmaz; ekrana yazma işi loop()'ta yapılır. loop() içinde değişkenleri okurken kesmeleri kısa süreliğine kapatmak, çok baytlı bir değişkenin okunduğu anda değişip bozuk okunmasını engeller.
Darbe sayma ve süre ölçme: sarsıntı ne kadar sürdü, ne kadar güçlüydü?
SW-420 ivmeyi ölçmez, ama tuttuğu darbe sayısı sarsıntının şiddeti hakkında iyi bir fikir verir: hafif bir vuruş birkaç darbe, kapının çarpılması onlarca, bir matkabın titreşimi ise saniyede yüzlerce darbe üretir. Aşağıdaki kod darbeleri kesmeyle sayar ve bunları olaylar hâlinde gruplar: ilk darbeyle bir olay başlar, 500 ms boyunca yeni darbe gelmezse olay biter. Her olayın sonunda süreyi, toplam darbe sayısını ve saniyedeki darbe yoğunluğunu yazdırır. Böylece kendi ortamındaki olayların "parmak izini" çıkarabilir ve alarm eşiğini tahmine değil ölçüme dayandırabilirsin.
1const byte VIB_PIN = 2; // SW-420 DO (INT0)
2const unsigned long QUIET_MS = 500; // bu kadar sessizlik olayı bitirir / this much silence ends an event
3
4volatile unsigned long pulseCount = 0;
5volatile unsigned long lastPulseMs = 0;
6
7bool inEvent = false;
8unsigned long eventStart = 0;
9unsigned long eventStartCount = 0;
10
11void onVibration() {
12 pulseCount++;
13 lastPulseMs = millis();
14}
15
16void setup() {
17 pinMode(VIB_PIN, INPUT);
18 attachInterrupt(digitalPinToInterrupt(VIB_PIN), onVibration, RISING);
19 Serial.begin(9600);
20 Serial.println(F("Sure(ms) Darbe/pulses Darbe/sn (pulses/s)"));
21}
22
23void loop() {
24 noInterrupts();
25 unsigned long count = pulseCount;
26 unsigned long last = lastPulseMs;
27 interrupts();
28
29 if (!inEvent && count != eventStartCount) { // yeni olay başladı / a new event started
30 inEvent = true;
31 eventStart = last;
32 }
33 if (inEvent && millis() - last > QUIET_MS) { // olay bitti / the event is over
34 unsigned long duration = last - eventStart;
35 unsigned long pulses = count - eventStartCount;
36 float density = duration > 0 ? pulses * 1000.0 / duration : pulses;
37 Serial.print(duration);
38 Serial.print(F(" "));
39 Serial.print(pulses);
40 Serial.print(F(" "));
41 Serial.println(density, 0);
42 eventStartCount = count;
43 inEvent = false;
44 }
45}Kodu çalıştırıp masaya farklı şekillerde vur, bir çekmeceyi aç, kapıyı kapat ve çıkan sayıları not et. Kısa tek bir vuruşta süre çoğu zaman sıfıra yakın ve darbe sayısı tek hanelidir; uzun süren bir titreşim ise hem süreyi hem darbe sayısını büyütür. Bu iki değeri birlikte kullanmak tek başına "titreşim var" bilgisinden çok daha güçlüdür: örneğin bir kasaya yerleştirdiğin sensörde "en az 300 ms süren ve en az 20 darbe içeren olay" kuralı, kasanın yanından geçen birinin adımlarını eleyip kasayı zorlayan birini yakalayabilir.
SW-420 ile hırsız alarmı ve yanlış alarmı azaltma
Bir pencere camına, bisiklete, bir çekmeceye ya da kasaya yerleştirilen SW-420, basit bir hırsız alarmının kalbi olabilir. İyi bir alarmın kötü bir alarmdan farkı ise algılamadan çok yanlış alarmları nasıl elediğidir. Aşağıdaki kod bunu üç katmanda yapar: alarm kurulduktan sonra 10 saniyelik bir çıkış süresi tanır, tek bir vuruşla değil 1 saniye içinde en az 5 darbe görünce tetiklenir ve siren çaldığı 15 saniye boyunca yeni darbeleri dikkate almaz. Alarm D4'teki butonla kurulur ve kapatılır, aktif buzzer D8'de, durum LED'i D13'tedir. Daha kapsamlı bir sistem için Arduino alarm sistemi yazısına bakabilirsin.
1const byte VIB_PIN = 2; // SW-420 DO (INT0)
2const byte BUTTON_PIN = 4; // kur / kapat butonu, D4 ile GND arası / arm-disarm button
3const byte BUZZER_PIN = 8; // aktif buzzer / active buzzer
4const byte LED_PIN = 13; // durum LED'i / status LED
5const unsigned int MIN_PULSES = 5; // pencerede gereken darbe / pulses needed in the window
6const unsigned long WINDOW_MS = 1000; // sayım penceresi / counting window
7const unsigned long EXIT_DELAY_MS = 10000; // kurduktan sonra çıkış süresi / exit delay after arming
8const unsigned long ALARM_MS = 15000; // siren süresi / siren duration
9
10enum AlarmState { DISARMED, ARMING, ARMED, ALARM };
11AlarmState state = DISARMED;
12
13volatile unsigned int pulses = 0;
14unsigned long stateTime = 0;
15unsigned long windowStart = 0;
16unsigned long lastPress = 0;
17bool lastButton = HIGH;
18
19void onVibration() {
20 pulses++;
21}
22
23void setState(AlarmState s) {
24 state = s;
25 stateTime = millis();
26 digitalWrite(BUZZER_PIN, LOW);
27 noInterrupts();
28 pulses = 0; // eski darbeleri sil / discard old pulses
29 interrupts();
30 windowStart = millis();
31}
32
33void setup() {
34 pinMode(VIB_PIN, INPUT);
35 pinMode(BUTTON_PIN, INPUT_PULLUP);
36 pinMode(BUZZER_PIN, OUTPUT);
37 pinMode(LED_PIN, OUTPUT);
38 attachInterrupt(digitalPinToInterrupt(VIB_PIN), onVibration, RISING);
39 Serial.begin(9600);
40}
41
42void loop() {
43 bool button = digitalRead(BUTTON_PIN);
44 if (button == LOW && lastButton == HIGH && millis() - lastPress > 200) {
45 lastPress = millis();
46 setState(state == DISARMED ? ARMING : DISARMED);
47 Serial.println(state == ARMING ? F("Kuruluyor / arming") : F("Kapatildi / disarmed"));
48 }
49 lastButton = button;
50
51 if (millis() - windowStart >= WINDOW_MS) { // her saniye darbe sayısına bak / check the pulse count every second
52 noInterrupts();
53 unsigned int n = pulses;
54 pulses = 0;
55 interrupts();
56 windowStart = millis();
57 if (state == ARMED && n >= MIN_PULSES) {
58 setState(ALARM);
59 Serial.print(F("ALARM! darbe / pulses: "));
60 Serial.println(n);
61 }
62 }
63
64 switch (state) {
65 case DISARMED:
66 digitalWrite(LED_PIN, LOW);
67 break;
68 case ARMING: // hızlı yanıp sönme: çıkış süresi / fast blink: exit delay
69 digitalWrite(LED_PIN, (millis() / 250) % 2);
70 if (millis() - stateTime >= EXIT_DELAY_MS) setState(ARMED);
71 break;
72 case ARMED:
73 digitalWrite(LED_PIN, HIGH);
74 break;
75 case ALARM: // kesik kesik siren / intermittent siren
76 digitalWrite(BUZZER_PIN, (millis() / 300) % 2);
77 if (millis() - stateTime >= ALARM_MS) setState(ARMED);
78 break;
79 }
80}Yanlış alarmları azaltmak için kod dışında da yapabileceğin çok şey var:
- Sağlam montaj: Modülü M3 vidayla ya da sert bir yapıştırıcıyla yüzeye sabitle; sallanan bir kart kendi kendine titreşir.
- Buzzerı uzaklaştır: Siren sensörle aynı karta ya da kutuya monteliyse kendi titreşimiyle alarmı yeniden tetikleyebilir.
- Hassasiyeti yerinde ayarla: Potansiyometreyi masada değil, sensörün son duracağı yüzeyde ayarla.
- Kabloları kısa ve sabit tut: Uzun, havada sallanan kablolar gürültü toplar; gerekirse DO ile GND arasına 100 nF koy.
- İki sensör kullan: Önemli bir yerde iki sensörün kısa süre içinde birlikte tetiklenmesini şart koşmak yanlış alarmı büyük ölçüde azaltır.
- Başka bir sensörle doğrula: Titreşimi bir PIR hareket sensörü ya da bir kapı sensörüyle birleştirmek güvenilirliği artırır.
SW-420 ile deprem uyarıcısı yapılır mı? Sınırlar ve MPU6050
Deprem uyarıcısı, titreşim sensörüyle yapılan en popüler proje fikirlerinden biridir ve öğretici bir projedir; ancak sınırlarını bilmek önemlidir. SW-420 yalnızca "bir şey sallandı" der: sarsıntının ivmesini, yönünü ya da frekansını ölçemez. Bu yüzden kapının çarpılmasıyla, yandan geçen bir kamyonla, bir çamaşır makinesinin sıkmasıyla ya da gerçek bir depremle karşılaştığında hepsine aynı tepkiyi verir. Daha önemlisi, tek bir sensör sarsıntıyı ancak sarsıntı bulunduğu yere ulaştığında algılar. Resmi deprem erken uyarı sistemleri, merkez üssüne yakın çok sayıda istasyonun ölçümlerini birleştirip uyarıyı sarsıntıdan önce uzak bölgelere ulaştırır; evdeki bir Arduino bunun yerini tutmaz ve hayati bir güvenlik aracı olarak kullanılmamalıdır.
Bir deprem projesini daha anlamlı hâle getirmek istiyorsan MPU6050 ivmeölçer ve jiroskop modülüne geç. MPU6050 üç eksende ivmeyi 16 bit çözünürlükle ve ±2 g'den ±16 g'ye kadar seçilebilen aralıklarla ölçer. Böylece sarsıntının tepe ivmesini (PGA) hesaplayabilir, ivmenin kaç saniye sürdüğüne ve frekansına bakarak kapı çarpmasını uzun süren bir yer sarsıntısından ayırabilir, verileri kaydederek sonradan inceleyebilirsin. İki sensörü birlikte kullanmak da mantıklıdır: SW-420 çok az enerjiyle bekler ve ilk titreşimde mikrodenetleyiciyi uyandırır, ayrıntılı ölçümü MPU6050 yapar.

| Özellik | SW-420 | MPU6050 |
|---|---|---|
| Ne ölçer? | Yalnız titreşim var / yok | 3 eksende ivme ve dönüş hızı |
| Çıkış | Dijital darbe (DO) | I2C, 16 bit sayısal veri |
| Hassasiyet | Potansiyometreyle, kaba | Yazılımla, ±2 g'den ±16 g'ye |
| Yön bilgisi | Yok | Var (X, Y, Z) |
| Deprem projesi | Yalnız "sallandı" uyarısı | Tepe ivmesi, süre ve frekans analizi |
| Kod | Birkaç satır, kütüphane gerekmez | Kütüphane ve filtreleme gerekir |
| Fiyat | Çok ucuz | Ucuz |
ESP32 ile titreşim algılanınca Telegram bildirimi
ESP32 ile titreşim sensörü, evden uzaktayken kasanın, bisikletin ya da bir makinenin başına bir şey geldiğinde telefonuna haber verebilir. 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. Aşağıdaki kod darbeleri kesmeyle sayar, 1 saniyede en az 5 darbe görünce mesaj gönderir ve telefonunun dakikada onlarca bildirimle dolmaması için iki mesaj arasında en az 60 saniye bekler. ESP32'nin iki çekirdeği olduğu için sayaç bir portMUX kilidiyle korunur.
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 (2,4 GHz) / your Wi-Fi name (2.4 GHz)
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" // kendi Telegram ID'n / your own Telegram ID
10
11const int VIB_PIN = 27; // SW-420 DO (modül 3V3 ile) / module powered from 3V3
12const unsigned long MIN_PULSES = 5; // 1 sn'de gereken darbe / pulses needed in 1 s
13const unsigned long WINDOW_MS = 1000;
14const unsigned long COOLDOWN_MS = 60000; // iki mesaj arası en az 60 sn / at least 60 s between messages
15
16volatile unsigned long pulseCount = 0;
17portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;
18unsigned long windowStart = 0;
19unsigned long lastAlert = 0;
20bool alertSent = false;
21
22WiFiClientSecure client;
23UniversalTelegramBot bot(BOT_TOKEN, client);
24
25void IRAM_ATTR onVibration() { // kesme fonksiyonu RAM'de / interrupt handler in RAM
26 portENTER_CRITICAL_ISR(&mux);
27 pulseCount++;
28 portEXIT_CRITICAL_ISR(&mux);
29}
30
31void setup() {
32 Serial.begin(115200);
33 pinMode(VIB_PIN, INPUT);
34 attachInterrupt(digitalPinToInterrupt(VIB_PIN), onVibration, RISING);
35
36 WiFi.mode(WIFI_STA);
37 WiFi.begin(WIFI_SSID, WIFI_PASS);
38 while (WiFi.status() != WL_CONNECTED) {
39 delay(500);
40 Serial.print(".");
41 }
42 Serial.println();
43 client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // api.telegram.org kök sertifikası / root certificate
44 bot.sendMessage(CHAT_ID, "Titreşim alarmı hazır / vibration alarm ready", "");
45 windowStart = millis();
46}
47
48void loop() {
49 if (millis() - windowStart < WINDOW_MS) return;
50 windowStart = millis();
51
52 portENTER_CRITICAL(&mux); // sayacı güvenle oku ve sıfırla / read and reset safely
53 unsigned long n = pulseCount;
54 pulseCount = 0;
55 portEXIT_CRITICAL(&mux);
56
57 if (n >= MIN_PULSES && (!alertSent || millis() - lastAlert >= COOLDOWN_MS)) {
58 lastAlert = millis();
59 alertSent = true;
60 String msg = "Titreşim algılandı / vibration detected: " + String(n) + " darbe / pulses";
61 Serial.println(msg);
62 if (!bot.sendMessage(CHAT_ID, msg, "")) {
63 Serial.println("Mesaj gonderilemedi / message failed");
64 }
65 }
66}Telegram'a mesaj göndermek 1–2 saniye sürebilir; bu sırada döngü bekler ama kesme çalışmaya devam ettiği için gelen darbeler sayaçta birikir ve kaybolmaz. Sensörü pille çalıştırmak istersen ESP32'yi derin uykuya alıp SW-420'nin DO pinini esp_sleep_enable_ext0_wakeup() ile uyandırma kaynağı yapabilirsin; ESP32 yalnızca titreşimde uyanır, mesajı gönderir ve yeniden uyur. Bu durumda uyandırma pini olarak RTC GPIO'lardan birini seçmelisin; GPIO 27 bu gruptadır.
Raspberry Pi Pico ile SW-420 (MicroPython)
Pico'da modülü 3V3(OUT) pininden besle ve DO'yu GP15'e bağla. Aşağıdaki kod Arduino'daki olay mantığının aynısını kurar: darbeleri bir kesmeyle sayar, ilk darbede kartın dahili LED'ini yakar ve 500 ms sessizlikten sonra olayın süresini ve darbe sayısını yazar. Pin("LED") adı hem Pico'da hem Pico W'da dahili LED'i seçer.
1from machine import Pin, disable_irq, enable_irq
2import time
3
4vib = Pin(15, Pin.IN) # SW-420 DO (modül 3V3 ile) / module powered from 3V3
5led = Pin("LED", Pin.OUT) # dahili LED / onboard LED
6QUIET_MS = 500 # olayı bitiren sessizlik / silence that ends an event
7
8pulses = 0
9def on_vibration(pin):
10 global pulses
11 pulses += 1
12
13vib.irq(trigger=Pin.IRQ_RISING, handler=on_vibration)
14
15event_start = None
16event_pulses = 0
17last_pulse = 0
18while True:
19 state = disable_irq() # sayacı güvenle oku / read the counter safely
20 n = pulses
21 pulses = 0
22 enable_irq(state)
23
24 now = time.ticks_ms()
25 if n:
26 if event_start is None: # yeni olay / new event
27 event_start = now
28 event_pulses = 0
29 led.on()
30 event_pulses += n
31 last_pulse = now
32 elif event_start is not None and time.ticks_diff(now, last_pulse) > QUIET_MS:
33 duration = time.ticks_diff(last_pulse, event_start)
34 print("Titresim / vibration: %d ms, %d darbe / pulses" % (duration, event_pulses))
35 event_start = None
36 led.off()
37 time.sleep_ms(20)Titreşim sensörü ile proje fikirleri
- Bisiklet ve motosiklet alarmı: Park hâlindeki araç sarsılınca öten, ESP32 ile telefona haber veren küçük bir kutu.
- Çamaşır makinesi bitti uyarısı: Titreşim 5 dakika boyunca kesilince "yıkama bitti" mesajı gönderen bir sensör.
- Kapı vuruş algılayıcı: Belirli bir ritimle vurulduğunda kilidi açan gizli bir vuruş şifresi; darbe olaylarının arasındaki süreleri karşılaştırarak yapılır.
- Makine çalışma sayacı: Bir kompresörün, pompanın ya da 3B yazıcının günde kaç saat çalıştığını kaydeden bir sayaç.
- Elektronik kasa: Kasa zorlandığında alarm veren, şifreli kilitle birlikte çalışan bir koruma; keypad ile şifreli kilit yazısıyla birleştirebilirsin.
- Oyun ve etkileşimli masa: Masaya vurulduğunda ışık ve ses çıkaran bir davul ya da reaksiyon oyunu.
Sık yapılan hatalar ve çözümleri
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Hafif titreşimler algılanmıyor | Darbeler loop() içinde digitalRead() ile okunuyor ve kaçıyor | attachInterrupt() ile kesme kullan |
| Sensör sürekli tetikleniyor | Hassasiyet çok yüksek ya da kart sallanıyor | Potansiyometreyi yerinde ayarla, kartı vidayla sabitle |
| Alarm kendi kendine yeniden çalıyor | Buzzerın titreşimi sensöre ulaşıyor | Buzzerı sensörden uzağa ve ayrı bir yüzeye monte et |
| Mantık ters çalışıyor | Kopya modülde DO çıkışı ters | Seri Monitör'le test et, gerekirse FALLING kullan |
| ESP32 pini zarar gördü ya da kararsız | Modül 5 V ile beslendi, DO 5 V verdi | Modülü 3,3 V ile besle |
| Telefona onlarca mesaj geliyor | Bildirimler arasında bekleme süresi yok | Kodda en az 60 saniyelik bir bekleme süresi kullan |
SW-420, bir yüzeyin sarsıldığını bilmek için en ucuz ve en kolay yoldur; gücü, darbeleri kesmeyle yakalayıp sayınca ve sonuçları süre ve yoğunlukla birlikte yorumlayınca ortaya çıkar. Hassasiyeti yerinde ayarla, yanlış alarmları yazılımla ele, sarsıntının şiddeti ya da yönü gerektiğinde MPU6050'ye geç. BlueGrays uygulamasında Buzzer Kullanımı, Hareket Sensörü ile Hareket Algılayıcı ve Telegram bildirimli ESP32 Hareket Alarm Sistemi projelerini, Akıllı Elektronik Kasa projesiyle birlikte adım adım devre şemaları ve kodlarıyla bulabilirsin.
Sıkça sorulan sorular
Titreşim sensörü nasıl çalışır?
SW-420 gibi titreşim sensörlerinin içinde, metal bir kılıfta bir yay ve iletken bir parça bulunur. Sensör hareketsizken kontak kapalıdır; sarsıldığında yay salınır ve kontak çok kısa aralıklarla açılıp kapanır. Modüldeki LM393 karşılaştırıcı bu değişimi potansiyometreyle ayarlanan eşiğe göre temiz bir dijital sinyale çevirir.
SW-420 hassasiyeti nasıl ayarlanır?
Modüldeki potansiyometre karşılaştırıcının eşiğini değiştirir. Sensörü kullanacağın yüzeye sabitle, potansiyometreyi sinyal LED'inin hareketsizken sabit kaldığı ama hafif bir vuruşa tepki verdiği noktaya getir ve sonra hassasiyeti biraz azaltarak güvenlik payı bırak. Ayar yüzey malzemesine göre değiştiği için masada değil yerinde yapılmalıdır.
SW-420 neden bazı titreşimleri kaçırıyor?
SW-420'nin çıkışı titreşim sırasında yalnızca çok kısa darbeler üretir. Kod pini loop() içinde digitalRead() ile okuyorsa ve o anda delay() ya da Serial.print() ile meşgulse darbe kaçar. Çözüm, attachInterrupt() ile bir kesme kullanmak ve darbeleri kesme fonksiyonunda saymaktır.
Titreşim sensörü ile deprem dedektörü yapılır mı?
Eğitim amaçlı basit bir sarsıntı uyarıcısı yapılabilir, ama SW-420 yalnızca titreşimin varlığını algılar; şiddetini ve yönünü ölçemez ve kapı çarpması gibi olayları depremden ayıramaz. Tek bir sensör sarsıntıyı ancak bulunduğu yere ulaştığında fark eder. Daha anlamlı ölçüm için MPU6050 gibi bir ivmeölçer kullan ve bu tür projeleri resmi erken uyarı sistemlerinin yerine koyma.
SW-420 ESP32 ile kullanılır mı?
Evet. Modülü ESP32'nin 3V3 pininden besle ve DO çıkışını GPIO 27 gibi bir dijital pine bağla. Modülü 5 V ile beslersen DO çıkışı da 5 V olur ve ESP32'nin pinine zarar verebilir. ESP32'de kesme fonksiyonunu IRAM_ATTR ile tanımla ve paylaşılan sayacı bir portMUX kilidiyle koru.
SW-420 ile SW-18010P arasındaki fark nedir?
İkisi de yaylı titreşim anahtarıdır ama kontak düzenleri farklıdır. SW-420 normalde kapalıdır, yani hareketsizken kontak kapalıdır ve titreşimde açılır. SW-18010P gibi normalde açık tipler ise hareketsizken açıktır ve titreşimde kısa süre kapanır. Modül olarak kullanırken çıkış seviyesini Seri Monitör'le kontrol etmek yeterlidir.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
Buzzer Kullanımı
Kapı zili ya da alarm sesi nasıl çıkar, hiç merak ettin mi? Arduino küçük bir buzzer'ı kısa aralıklarla öttürür: bip, sus, bip, sus. Sesin elektrikle nasıl üretildiğini görür, ileride melodi çalan pro

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

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

Hareket Sensörü İle Kapı Zili ve Işık
Kapına biri yaklaştığında, daha zile basmadan haberin olur. Hareket sensörü birini fark edince LED yanar ve buzzer inceden kalına üç notalık bir zil sesi çalar; melodi bitince ışık söner ve sensör yen

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

Akıllı Elektronik Kasa
Değerli eşyalarını saklayabileceğin, şifreyle açılan küçük bir kasa. Tuş takımından dört haneli şifreni girersin; doğruysa servo motor kilidi açar, yeşil ışık yanar ve ekran kasanın durumunu yazar, he

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
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 200'den fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

