📐 سنسور شیب (تیلت) (Tilt Sensor (SW-520D))
| اسم انگلیسی | Tilt Sensor (SW-520D) |
|---|---|
| در ووکوی (Wokwi) | نسخهی آمادهای سراغ نداریم |
| دسته | 🌡️ سنسورها |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
سنسور شیب یا تیلت سوییچ (Tilt Sensor) یک کلید کوچک استوانهای است که داخلش یک یا دو گوی فلزی آزادانه میغلتند؛ رایجترینش SW-520D است. وقتی سنسور صاف ایستاده، گوی روی دو اتصال کف مینشیند و مدار را میبندد؛ وقتی از حدی بیشتر کج شود، گوی کنار میرود و مدار باز میشود. این سنسور زاویه را اندازه نمیگیرد و فقط یک جواب بله یا نه میدهد: «کج شده یا نه». با آن هشدار افتادن جعبه، چراغی که با برگرداندن روشن میشود یا قلک دزدگیردار میسازی.
سنسور شیب در ووکوی (Wokwi)
تا جایی که میدانیم ووکوی نسخهی آمادهی این قطعه را ندارد. چون سنسور شیب از نظر الکتریکی فقط یک کلید دوپایه است، در ووکوی میتوانی یک wokwi-slide-switch جایش بگذاری: پایهی وسط (2) را به پین ورودی و یکی از پایههای کناری (1) را به GND وصل کن. جابهجا کردن دستهی کلید همان «کج کردن» است.
{
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0, "attrs": {} },
{ "type": "wokwi-slide-switch", "id": "sw1", "top": -90, "left": 160, "attrs": {} }
],
"connections": [
[ "sw1:2", "uno:2", "green", [] ],
[ "sw1:1", "uno:GND.1", "black", [] ]
]
}
خود سنسور شیب در تینکرکد فارسی در هر دو مود رایگان شبیهسازی میشود؛ مدار چراغ شیبسنج (Tilt-activated Light) را ببین.
سیمکشی با آردوینو
سنسور قطبیت ندارد و هر پایه را میشود به هر طرف وصل کرد. مقاومت جدا هم لازم نیست، چون مقاومت پولآپ داخلی آردوینو را با INPUT_PULLUP روشن میکنیم.
| پایهی قطعه | وصل به |
|---|---|
| پایهی اول سنسور | پین 2 |
| پایهی دوم سنسور | GND |
| LED نشانگر | LED داخلی برد روی پین 13 |
با این سیمکشی، سنسور صاف یعنی LOW و سنسور کج یعنی HIGH. اگر مقاومت پولآپ برایت تازه است، توضیح کوتاهش را بخوان.
کد نمونه
مشکل اصلی سنسور شیب این است که گوی با هر تکان کوچک چند بار میپرد. این برنامه فقط وقتی وضعیت تازه را قبول میکند که ۳۰۰ میلیثانیه ثابت مانده باشد؛ پس لرزش میز نادیده گرفته میشود ولی کج شدن واقعی بعد از کسری از ثانیه گزارش میشود.
// Tilt switch on pin 2: report only states that stay stable for 300 ms.
const int TILT_PIN = 2;
const unsigned long SETTLE_MS = 300;
bool tilted = false;
bool lastRaw = HIGH;
unsigned long changedAt = 0;
void setup() {
Serial.begin(9600);
pinMode(TILT_PIN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
bool raw = digitalRead(TILT_PIN); // LOW = ball closes the contacts
if (raw != lastRaw) { // the ball moved: restart the timer
lastRaw = raw;
changedAt = millis();
}
if (millis() - changedAt >= SETTLE_MS) {
bool nowTilted = (raw == HIGH); // contacts open = tilted
if (nowTilted != tilted) {
tilted = nowTilted;
digitalWrite(LED_BUILTIN, tilted ? HIGH : LOW);
Serial.println(tilted ? "Tilted!" : "Upright");
}
}
}
عدد SETTLE_MS را بسته به کاربرد عوض کن: برای رباتی که مدام میلرزد بیشترش کن، برای بازی سریع کمترش. این همان ایدهی رفع پرش (Debounce) است، فقط با زمانی طولانیتر.
اشتباههای رایج
- فراموش کردن INPUT_PULLUP: وقتی کلید باز است، پین در هوا میماند و عددهای تصادفی میدهد؛ چراغ بیدلیل چشمک میزند.
- انتظار اندازهگیری زاویه: این سنسور فقط دو حالت دارد. برای زاویهی دقیق، شتابسنجی مثل MPU6050 لازم است.
- جهت نصب اشتباه: سنسور فقط در یک جهت حساس است. اگر آن را خوابیده نصب کنی، از اول «کج» است و کج کردن در جهت دیگر هیچ اتفاقی نمیسازد.
- اشتباه گرفتن با سنسور لرزش: سنسور شیب وضعیت پایدار را میگوید؛ برای ضربه و تکان لحظهای سنسور لرزش SW-420 مناسبتر است.
آموزشهای مرتبط
- مدارهای پیکو، از جمله هشدار کج شدن (Tilt Switch Alarm)
- رید سوییچ: کلیدی که با آهنربا بسته میشود
- کلید کشویی در ووکوی
- کد آردوینو کار نمیکند؟ ۱۵ علت رایج
سؤالهای رایج
سنسور شیب زاویه را اندازه میگیرد؟
نه. فقط دو حالت دارد: صاف یا کج. برای اندازهگیری زاویه به شتابسنج یا ژیروسکوپ مثل MPU6050 نیاز داری.
چرا سنسور تیلت چند بار پشت سر هم تحریک میشود؟
گوی داخلش با هر تکان کوچک میپرد و چند بار قطع و وصل میکند. در کد فقط وضعیتی را قبول کن که چند صد میلیثانیه ثابت مانده باشد.
سنسور شیب در ووکوی هست؟
تا جایی که میدانیم نه، ولی چون فقط یک کلید دوپایه است، یک کلید کشویی wokwi-slide-switch جایش را میگیرد. خود سنسور شیب در تینکرکد فارسی رایگان شبیهسازی میشود.