سیستم هشدار زلزله DIY چیست؟ (مبتدی)
در این پروژه با سنسور ADXL345 (شتابسنج سه محوره دیجیتال از Analog Devices، زیر ۵ دلار) لرزشهای زمین را اندازه میگیریم. ADXL345 دارای قابلیت Free Fall Detection و Activity Interrupt است — وقتی شتاب از آستانه تنظیم شده بیشتر شود، یک Interrupt ایجاد میکند.
این هشدار با LoRa SX1278 433MHz (برد ۵km) به یک گیرنده مرکزی ارسال میشود. سیستم میتواند چند نود داشته باشد — هر ساختمان یک نود — و در یک شبکه هشدار اولیه زلزله (Early Warning) استفاده شود. این مفهوم مستقیماً در تلهمتری UGV/UAV هم قابل استفاده است.
محصولی که میسازید
یک نود هشدار زلزله LoRa با ADXL345 و باتری ۶ ماهه.
- هزینه: ADXL345+Arduino+SX1278 = ۱۵ دلار
- برد هشدار: تا ۵km
- باتری: ۶ ماه در Deep Sleep
کد ADXL345 با Interrupt و LoRa
#include <Wire.h>
#include <Adafruit_ADXL345_U.h>
#include <LoRa.h>
#include <avr/sleep.h>
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
volatile bool quakeDetected = false;
// INT1 → Arduino Pin 2 (External Interrupt 0)
void onInterrupt() { quakeDetected = true; }
void setup() {
accel.begin();
// تنظیم آستانه Activity Detection:
accel.writeRegister(ADXL345_REG_THRESH_ACT, 20); // 20 × 62.5mg = 1.25g
accel.writeRegister(ADXL345_REG_THRESH_INACT, 5);
accel.writeRegister(ADXL345_REG_TIME_INACT, 3); // 3 ثانیه
// Activity/Inactivity فعال روی X,Y,Z:
accel.writeRegister(ADXL345_REG_ACT_INACT_CTL, 0x77);
// Map Activity Interrupt به INT1:
accel.writeRegister(ADXL345_REG_INT_MAP, 0x00); // همه به INT1
accel.writeRegister(ADXL345_REG_INT_ENABLE, 0x10); // Activity bit
// اتصال INT1:
attachInterrupt(digitalPinToInterrupt(2), onInterrupt, RISING);
LoRa.begin(433.175E6);
LoRa.setSpreadingFactor(10);
LoRa.setTxPower(17);
// شناسه این ساختمان (با jumper یا EEPROM تنظیم کنید):
uint8_t buildingID = 1;
// شبرو Deep Sleep تا Interrupt:
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
}
void loop() {
if(quakeDetected) {
quakeDetected = false;
// اندازهگیری دقیق شتاب:
sensors_event_t event;
accel.getEvent(&event);
float magnitude = sqrt(event.acceleration.x*event.acceleration.x +
event.acceleration.y*event.acceleration.y +
event.acceleration.z*event.acceleration.z);
// ارسال هشدار LoRa:
LoRa.beginPacket();
LoRa.print("EQ,ID:1,MAG:");
LoRa.print(magnitude, 2);
LoRa.print(",T:");
LoRa.print(millis()/1000);
LoRa.endPacket();
delay(100);
}
// برگشت به Sleep:
sleep_enable(); sleep_mode(); sleep_disable();
}
چکلیست نصب سنسور روی ساختمان
| بررسی | روش |
|---|---|
| ADXL345 محکم به دیوار/ستون بسته؟ | با پیچ (نه چسب) |
| آستانه با تکان دادن دستی تنظیم؟ | threshold بدون فعال شدن |
| LoRa هشدار در ۱km دریافت میشود؟ | ☐ |
| باتری چند ماه دوام میآورد؟ | مصرف Sleep زیر ۵μA |