ماژول سنسور برخورد 2
Crash Sensor Module V2
رابط کاربردی با خروجی NO/NC و فیلتر نویز
🎯 ماژول سنسور برخورد V2: تشخیص ساده و قابل اعتماد با قابلیتهای حرفهای
ماژول سنسور برخورد V2 یک راهحل بهینهشده و کاربردی برای تشخیص تماس فیزیکی و محدودیتهای حرکتی است. با طراحی مینیمال و کارآمد، این ماژول تمام امکانات ضروری برای یک سنسور برخورد قابل اعتماد را در قالبی جمعوجور ارائه میدهد.
✨ ویژگیهای متمایز V2
🎛️ طراحی ساده و موثر:
نمایشگر LED دو حالته: وضعیت NO و NC به صورت بصری
خازن فیلتر نویز: حذف نوسانات و بایاسهای الکتریکی
خروجی دوگانه: هر دو حالت Normally Open و Normally Closed
🔧 عملکرد قابل اطمینان:
پاسخ آنی: عکسالعمل فوری به تماس فیزیکی
ایزولاسیون نوری: جداسازی مدار نمایشگر از سیگنال
مقاومت در برابر نویز: فیلترینگ فعال برای محیطهای صنعتی
📊 مشخصات فنی دقیق
ویژگیهای الکتریکی:
ولتاژ کاری: 5V DC (محدوده 3.3V-12V)
جریان مصرف: < 15mA (با LED روشن)
ولتاژ خروجی NO: 0V (باز) → Vcc (بسته)
ولتاژ خروجی NC: Vcc (باز) → 0V (بسته)
خازن فیلتر: 100nF سرامیکی X7R
ویژگیهای مکانیکی:
نوع سوئیچ: میکروسوییچ استاندارد SPST
نیروی فعالسازی: 0.7N ± 0.2N
سفر سوئیچ: 0.5mm ± 0.1mm
طول عمر: 500,000 چرخه حداقل
نمایشگر LED:
NO LED: سبز (فعال در حالت بسته)
NC LED: قرمز (فعال در حالت باز)
نوع: SMD 0805
جریان: 5mA با مقاومت محدودکننده
🛠️ طراحی مدار بهینهشده
ساختار داخلی:
پیکربندی مدار V2:
+5V
│
[10KΩ] ← مقاومت پایه
│
میکروسوییچ ← نقطهاشتراک
┌─────┴─────┐
│ │
NO خروجی NC خروجی
│ │
[100nF] [100nF] ← خازنهای فیلتر
│ │
LED سبز LED قرمز
│ │
GND GNDمزایای طراحی V2:
فیلتر نویز: کاهش خطاهای کاذب
نمایشگر بصری: تشخیص سریع وضعیت
جدا بودن خروجیها: امکان استفاده همزمان
🔌 پیکربندی پایهها
پینهای ماژول:
ماژول از چپ به راست: پین 1: VCC (+5V) پین 2: GND (زمین) پین 3: NO (Normally Open) پین 4: NC (Normally Closed)
جدول وضعیت LED:
| وضعیت سوئیچ | LED سبز (NO) | LED قرمز (NC) | توضیح |
|---|---|---|---|
| باز | خاموش | روشن | حالت عادی، تماسی وجود ندارد |
| بسته | روشن | خاموش | برخورد یا فشار تشخیص داده شد |
💻 اتصال و برنامهنویسی
اتصال پایه به آردوینو:
// تعریف پایههای ماژول V2 #define SENSOR_VCC_PIN // به 5V متصل شود #define SENSOR_GND_PIN // به GND متصل شود #define SENSOR_NO_PIN 2 // خروجی Normally Open #define SENSOR_NC_PIN 3 // خروجی Normally Closed void setupSensorV2() { Serial.begin(9600); // تنظیم پایههای ورودی pinMode(SENSOR_NO_PIN, INPUT); pinMode(SENSOR_NC_PIN, INPUT); Serial.println("ماژول سنسور برخورد V2 راهاندازی شد"); Serial.println("================================"); } void loop() { // خواندن هر دو خروجی bool noState = digitalRead(SENSOR_NO_PIN); bool ncState = digitalRead(SENSOR_NC_PIN); // نمایش وضعیت Serial.print("NO: "); Serial.print(noState ? "بسته" : "باز"); Serial.print(" | NC: "); Serial.print(ncState ? "بسته" : "باز"); // تشخیص وضعیت if (!noState && ncState) { Serial.println(" - وضعیت: عادی (باز)"); } else if (noState && !ncState) { Serial.println(" - وضعیت: فعال (بسته)"); } else { Serial.println(" - خطا: وضعیت نامعتبر"); } delay(200); }
کلاس مدیریت پیشرفته:
class CrashSensorV2 { private: int noPin; int ncPin; bool lastState; unsigned long debounceTime; public: CrashSensorV2(int no, int nc) { noPin = no; ncPin = nc; lastState = false; debounceTime = 0; pinMode(noPin, INPUT); pinMode(ncPin, INPUT); } // خواندن وضعیت با debounce bool readDebounced() { bool noRead = digitalRead(noPin); bool ncRead = digitalRead(ncPin); // وضعیت معتبر: NO و NC باید مخالف هم باشند if (noRead == !ncRead) { unsigned long currentTime = millis(); if (currentTime - debounceTime > 50) { // 50ms debounce bool currentState = noRead; // NO=1 یعنی بسته if (currentState != lastState) { lastState = currentState; debounceTime = currentTime; if (currentState) { Serial.println("🟢 برخورد تشخیص داده شد (سوئیچ بسته)"); } else { Serial.println("🔴 سوئیچ باز شد"); } } return currentState; } } else { Serial.println("⚠️ خطا: وضعیت نامعتبر NO/NC"); } return lastState; } // بررسی سلامت سنسور bool sensorHealthy() { bool noState = digitalRead(noPin); bool ncState = digitalRead(ncPin); // در حالت سالم، NO و NC باید همیشه مخالف هم باشند return (noState != ncState); } // گرفتن وضعیت هر دو خروجی void getBothStates(bool &no, bool &nc) { no = digitalRead(noPin); nc = digitalRead(ncPin); } }; // استفاده از کلاس CrashSensorV2 sensor(2, 3); void setup() { Serial.begin(9600); if (sensor.sensorHealthy()) { Serial.println("سنسور V2 سالم است"); } } void loop() { bool isTriggered = sensor.readDebounced(); if (isTriggered) { // اقدامات لازم هنگام برخورد emergencyProcedure(); } delay(10); }
🔧 نصب و راهاندازی
مرحله ۱: اتصال الکتریکی
اتصال به بردبورد: 1. VCC → ریل 5V 2. GND → ریل زمین 3. NO → به پایه دیجیتال میکروکنترلر 4. NC → به پایه دیگر (اختیاری)
مرحله ۲: تست اولیه
void quickTest() { Serial.println("=== تست سریع سنسور V2 ==="); bool noState, ncState; sensor.getBothStates(noState, ncState); Serial.print("وضعیت NO: "); Serial.println(noState ? "HIGH (بسته)" : "LOW (باز)"); Serial.print("وضعیت NC: "); Serial.println(ncState ? "HIGH (بسته)" : "LOW (باز)"); // تست صحت عملکرد if (noState == !ncState) { Serial.println("✅ سنسور به درستی کار میکند"); } else { Serial.println("❌ خطا در سنسور"); } // تست LED Serial.println("پیش از فشار دادن: LED قرمز روشن"); Serial.println("پس از فشار دادن: LED سبز روشن"); }
مرحله ۳: کالیبراسیون
void calibrateSensor() { Serial.println("کالیبراسیون سنسور برخورد V2"); Serial.println("1. سنسور را در حالت آزاد رها کنید"); delay(3000); bool noState, ncState; sensor.getBothStates(noState, ncState); if (!noState && ncState) { Serial.println("✅ حالت عادی کالیبره شد"); } else { Serial.println("⚠️ حالت عادی تشخیص داده نشد"); } Serial.println("2. سوئیچ را فشار دهید و نگه دارید"); delay(5000); sensor.getBothStates(noState, ncState); if (noState && !ncState) { Serial.println("✅ حالت فعال کالیبره شد"); } else { Serial.println("⚠️ حالت فعال تشخیص داده نشد"); } Serial.println("کالیبراسیون کامل شد"); }
⚙️ کاربردهای عملی
۱. سیستمهای ایمنی ساده:
void safetyMonitor() { static bool lastSafeState = true; bool isSafe = !sensor.readDebounced(); // false = خطر if (isSafe != lastSafeState) { lastSafeState = isSafe; if (isSafe) { Serial.println("✅ منطقه امن"); enableMachine(); } else { Serial.println("🚨 خطر: منطقه محافظت شده!"); disableMachine(); soundAlarm(); } } }
۲. شمارنده رویدادها:
class EventCounter { private: int count; bool lastState; public: EventCounter() : count(0), lastState(false) {} void update(bool currentState) { if (currentState && !lastState) { // لبه بالارونده count++; Serial.print("رویداد شماره: "); Serial.println(count); } lastState = currentState; } int getCount() { return count; } void reset() { count = 0; } }; EventCounter counter; void loop() { bool triggered = sensor.readDebounced(); counter.update(triggered); if (counter.getCount() >= 100) { Serial.println("⚠️ به حد مجاز رویداد رسید"); counter.reset(); } delay(1); }
۳. سیستم ضدگیرکردن:
void antiJamSystem() { static unsigned long triggerStart = 0; bool isTriggered = sensor.readDebounced(); if (isTriggered) { if (triggerStart == 0) { triggerStart = millis(); } else { unsigned long duration = millis() - triggerStart; if (duration > 5000) { // 5 ثانیه گیرکردن Serial.println("🚨 گیرکردن تشخیص داده شد!"); emergencyReverse(); triggerStart = 0; } } } else { triggerStart = 0; } }
🛡️ مزایای خازن فیلتر
حذف نویزهای رایج:
نویز تماس: جرقه هنگام اتصال/قطع
نویز محیطی: القای الکترومغناطیسی
نویز منبع تغذیه: ریپل آداپتور
بهبود پایداری:
// مقایسه با و بدون فیلتر void compareWithWithoutFilter() { // بدون فیلتر (ماژول معمولی) int unstableCount = 0; for (int i = 0; i < 1000; i++) { if (digitalRead(SENSOR_PIN) != digitalRead(SENSOR_PIN)) { unstableCount++; } delayMicroseconds(10); } // با فیلتر (ماژول V2) int stableCount = 0; for (int i = 0; i < 1000; i++) { if (digitalRead(SENSOR_NO_PIN) == digitalRead(SENSOR_NO_PIN)) { stableCount++; } delayMicroseconds(10); } Serial.print("تعداد نوسان بدون فیلتر: "); Serial.println(unstableCount); Serial.print("تعداد نوسان با فیلتر: "); Serial.println(1000 - stableCount); }
🔍 نمایشگر LED هوشمند
کدهای وضعیت:
void interpretLEDPattern() { bool ledGreen = digitalRead(LED_GREEN_PIN); bool ledRed = digitalRead(LED_RED_PIN); Serial.print("نمایشگر LED: "); if (!ledGreen && ledRed) { Serial.println("🟢 آماده (سوئیچ باز)"); } else if (ledGreen && !ledRed) { Serial.println("🔴 فعال (سوئیچ بسته)"); } else if (ledGreen && ledRed) { Serial.println("🟡 خطا: هر دو LED روشن"); } else { Serial.println("⚫ خاموش: برق قطع یا خرابی"); } }
کنترل روشنایی LED:
void controlLEDBrightness(int brightness) { // محدود کردن روشنایی برای افزایش عمر LED brightness = constrain(brightness, 0, 80); // حداکثر 80% // در صورت نیاز میتوان PWM اعمال کرد analogWrite(LED_GREEN_PIN, brightness * 255 / 100); analogWrite(LED_RED_PIN, brightness * 255 / 100); }
⚡ نکات نصب مکانیکی
موقعیتدهی بهینه:
زاویه تماس: اهرم عمود بر سطح تماس باشد
فاصله پیشتماس: 1-2mm قبل از نقطه تماس اصلی
نیروی فعالسازی: تنظیم برای حداقل نیروی مورد نیاز
محل نصب: دور از ارتعاشات و ضربههای مستقیم
پیچهای نصب:
سایز: M3 یا #4-40
گشتاور: 0.3-0.5 Nm
فاصله: مطابق سوراخهای PCB
واشر: استفاده از واشر فنری برای جذب لرزش
🚀 پروژههای نمونه
پروژه ۱: دزدگیر ساده:
class SimpleBurglarAlarm { private: CrashSensorV2* sensor; bool armed; bool triggered; public: SimpleBurglarAlarm(CrashSensorV2* s) : sensor(s), armed(false), triggered(false) {} void arm() { armed = true; triggered = false; Serial.println("دزدگیر فعال شد"); } void disarm() { armed = false; Serial.println("دزدگیر غیرفعال شد"); } void check() { if (armed) { if (sensor->readDebounced()) { if (!triggered) { triggered = true; triggerAlarm(); } } } } void triggerAlarm() { Serial.println("🚨 🚨 🚨 هشدار نفوذ! 🚨 🚨 🚨"); // فعال کردن آژیر // روشن کردن چراغ // ارسال پیام } };
پروژه ۲: کنترل درب اتوماتیک:
void automaticDoorControl() { static enum { OPEN, CLOSING, CLOSED, OPENING } state = CLOSED; static CrashSensorV2 safetySensor(2, 3); // سنسور ایمنی switch (state) { case CLOSING: if (safetySensor.readDebounced()) { Serial.println("مانع تشخیص داده شد! درب باز میشود"); state = OPENING; reverseMotor(); } else if (doorFullyClosed()) { state = CLOSED; stopMotor(); } break; // سایر حالات... } }
🔧 نگهداری و عیبیابی
برنامه نگهداری پیشگیرانه:
void preventiveMaintenance() { Serial.println("=== نگهداری دورهای سنسور V2 ==="); // تست الکتریکی testElectrical(); // تست مکانیکی testMechanical(); // تمیزکاری cleaningProcedure(); // ثبت گزارش logMaintenance(); Serial.println("نگهداری تکمیل شد"); } void testElectrical() { Serial.println("تست الکتریکی:"); // تست اتصال کوتاه if (checkShortCircuit()) { Serial.println("❌ اتصال کوتاه وجود دارد"); } else { Serial.println("✅ بدون اتصال کوتاه"); } // تست مقاومت عایق if (checkInsulation()) { Serial.println("✅ عایقبندی سالم"); } else { Serial.println("❌ مشکل در عایقبندی"); } }
علائم خرابی و راهحل:
| مشکل | علت احتمالی | راهحل |
|---|---|---|
| هر دو LED روشن | اتصال کوتاه داخلی | تعویض ماژول |
| هیچ LED روشن نمیشود | قطعی برق | چک کردن اتصالات |
| LEDها نامناسب تغییر میکنند | نویز محیطی | افزودن شیلد |
| وضعیت NO/NC همزمان | خرابی سوئیچ | تعویض میکروسوییچ |
📦 مشخصات بستهبندی
محتویات استاندارد:
1 عدد ماژول سنسور برخورد V2
1 عدد میکروسوییچ با کیفیت
4 عدد پایه هدر نر (قابل لحیم)
2 عدد خازن 100nF اضافی
برگه راهنمای فشرده
ویژگیهای بستهبندی:
ضد الکتریسیته ساکن: کیسه ESD
ضد رطوبت: سیلندر خشککن
ضد ضربه: فوم محافظ
برچسب: مشخصات کامل محصول
⚠️ ملاحظات ایمنی
حدود کاری:
حداکثر ولتاژ: 12V DC
حداکثر جریان: 100mA (هر خروجی)
حداکثر دما: 85°C محیط
حداقل دما: -25°C محیط
هشدارها:
از اتصال به ولتاژ AC خودداری کنید
در محیطهای انفجاری استفاده نکنید
از تماس با مواد خورنده جلوگیری کنید
دور از دسترس کودکان نگهداری شود
🌟 نتیجهگیری
ماژول سنسور برخورد V2 با طراحی ساده اما موثر، راهحلی ایدهآل برای کاربردهایی است که به قابلیت اطمینان بالا و نگهداری آسان نیاز دارند. وجود هر دو خروجی NO و NC به همراه نمایشگر بصری و فیلتر نویز، آن را به انتخابی منطقی برای پروژههای صنعتی و آموزشی تبدیل میکند.
سادگی در استفاده، قابلیت اطمینان در عملکرد









ترانزیستورها
خازنها
دیودها
رگولاتورها
مقاومتها
کریستال و اسیلاتور
مدارات مجتمع
ابزارها
تجهیزات
تجهیزات لحیمکاری
مولتیمتر و ابزار اندازهگیری
منبع تغذیه و باتری
تستر