The shakeless 60

Explore NKTECH Industries' innovative research in electronics, focusing on advanced seismic detection and disaster preparedness solutions.

The Shakeless 60: LoRa-Based Earthquake Early Warning System for Urban and Remote Communities

Authors: Abigail Mekonnen, Beshayer Mohammedtaj

Affiliation: Department of Electromechanical Engineering, Addis Ababa Science and Technology University, Addis Ababa, Ethiopia

Date: June 2025

Download Full Report (PDF)

Abstract

This paper describes the development of an affordable, LoRa-based earthquake early warning system designed to provide alerts before the arrival of destructive S-waves. The system employs piezoelectric sensors and MEMS accelerometers connected to an Arduino Nano to detect ground vibrations with high sensitivity. Data is processed and transmitted via a LoRa RA-02 module to a gateway node, which triggers SMS alerts through a GSM module upon detecting significant seismic activity. Tested with simulated vibrations in Ethiopia’s Afar region, the system offers a low-cost, scalable solution for disaster preparedness in seismically active areas like the African Rift Valley.

System Overview

Seismic detection circuit

Figure 1: Prototype circuit for the LoRa-based seismic detection system.

1. Identification and Definition of the Problem

The East African Rift Valley, particularly Ethiopia’s Afar and Oromia regions, experiences frequent seismic activity, with over 300 earthquakes in 2024–2025, including significant events at 5.9 Mw and 5.7 Mw. The lack of a low-cost, decentralized early warning system limits preparedness, as destructive S-waves arrive with little warning. This project develops a LoRa-based system to deliver mobile alerts up to one minute before S-wave arrival, enhancing safety in resource-scarce regions.

2. Scope of the Project

The project designs and tests a low-cost LoRa-based earthquake early warning system (EEWS) for urban and rural areas, focusing on Ethiopia’s Afar and Oromia regions. It utilizes piezoelectric sensors and accelerometers with an Arduino Nano to detect vibrations, transmitting data via LoRa to a receiver node. If seismic activity exceeds a threshold, SMS alerts are sent via a GSM module. The system includes hardware and software implementation, threshold calibration, and testing with simulated vibrations, offering scalability for regional coverage.

3. Literature Review

Recent advancements in EEWS demonstrate the efficacy of LoRa for long-distance, low-power seismic monitoring. Systems like QuakeSense show LoRa’s ability to transmit seismic signals over 30 km with minimal latency. MEMS-based sensors, such as piezoelectric materials and accelerometers, provide efficient detection when paired with amplification and filtering. ADC ADS1115 chips enhance signal resolution for low-frequency vibrations, supporting the development of a scalable, low-cost EEWS for community-level disaster preparedness.

4. Procedure (Methodology)

4.1 System Architecture

The system comprises two components:

  • Sensor Node (Sender): Detects ground vibrations using a piezoelectric sensor and ADXL345 accelerometer, amplified by an op-amp and transmitted via a LoRa RA-02 module at 433 MHz.
  • Gateway Node (Receiver): Receives LoRa data, processes it with an Arduino Nano, and triggers SMS alerts via a SIM800L GSM module if vibrations exceed a threshold.

4.2 Hardware Setup

The sensor node uses an Arduino Uno, piezoelectric sensor, ADXL345 accelerometer, LM358 op-amp, and LoRa RA-02 module. The gateway node includes an Arduino Nano, LoRa RA-02, and SIM800L GSM module, with resistors and capacitors for stability.

4.3 Communication Protocol

LoRa enables low-power, one-way communication from sensor to gateway without internet, suitable for remote areas like Afar.

4.4 Software Implementation

The sender code reads sensor data, processes it, and transmits via LoRa. The receiver code decodes packets and triggers SMS alerts if thresholds are met.

Code Implementation

Sensor Node (Sender)

#include 
#include 
#include 
#include 
#include 

#define LORA_FREQUENCY 433E6
#define SS_PIN 10
#define RST_PIN 9
#define DIO0_PIN 2
#define SERIAL_BAUD_RATE 9600
#define movementThreshold 0.3

Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
sensors_event_t prevEvent;

void setup() {
  Serial.begin(SERIAL_BAUD_RATE);
  while (!Serial);
  Serial.println("-- LoRa & ADXL345 Sender Initializing --");

  Serial.println("Initializing ADXL345...");
  if (!accel.begin()) {
    Serial.println("ADXL345 not found. Check connections!");
    while (1);
  }
  Serial.println("ADXL345 Ready.");
  accel.setRange(ADXL345_RANGE_16_G);
  accel.getEvent(&prevEvent);

  Serial.println("Initializing LoRa...");
  LoRa.setPins(SS_PIN, RST_PIN, DIO0_PIN);
  if (!LoRa.begin(LORA_FREQUENCY)) {
    Serial.println("LoRa init failed. Check wiring/power.");
    while (1);
  }
  LoRa.setSpreadingFactor(10);
  LoRa.setSignalBandwidth(125E3);
  LoRa.setCodingRate(5);
  LoRa.setPreambleLength(8);
  LoRa.setSyncWord(0x12);
  Serial.println("LoRa Ready. Waiting for motion...");
}

void loop() {
  sensors_event_t event;
  accel.getEvent(&event);

  float dx = abs(event.acceleration.x - prevEvent.acceleration.x);
  float dy = abs(event.acceleration.y - prevEvent.acceleration.y);
  float dz = abs(event.acceleration.z - prevEvent.acceleration.z);
  prevEvent = event;

  if (dx > movementThreshold || dy > movementThreshold || dz > movementThreshold) {
    String message = "X:" + String(event.acceleration.x, 2) + " Y:" + String(event.acceleration.y, 2) + " Z:" + String(event.acceleration.z, 2);
    Serial.println("Sending: " + message);
    LoRa.beginPacket();
    LoRa.print(message);
    LoRa.endPacket();
  }
  delay(100);
}

Gateway Node (Receiver)

#include 
#include 
#include 

#define SS_PIN 10
#define RST_PIN 9
#define DIO0_PIN 2
#define LORA_FREQUENCY 433E6
#define SERIAL_BAUD_RATE 9600

SoftwareSerial gsmSerial(7, 8); // RX, TX for SIM800L

void setup() {
  Serial.begin(SERIAL_BAUD_RATE);
  while (!Serial);
  Serial.println("-- LoRa & GSM Receiver Initializing --");

  gsmSerial.begin(9600);
  delay(1000);
  gsmSerial.println("AT");
  delay(1000);
  gsmSerial.println("AT+CMGF=1"); // SMS text mode
  delay(1000);
  gsmSerial.println("AT+CLIP=1"); // Caller ID
  delay(1000);
  Serial.println("GSM ready.");

  LoRa.setPins(SS_PIN, RST_PIN, DIO0_PIN);
  if (!LoRa.begin(LORA_FREQUENCY)) {
    Serial.println("LoRa init failed. Check wiring/power.");
    while (1);
  }
  LoRa.setSpreadingFactor(10);
  LoRa.setSignalBandwidth(125E3);
  LoRa.setCodingRate(5);
  LoRa.setPreambleLength(8);
  LoRa.setSyncWord(0x12);
  Serial.println("LoRa Receiver + GSM is Ready.");
}

void loop() {
  int packetSize = LoRa.parsePacket();
  if (packetSize > 0) {
    String incoming = "";
    while (LoRa.available()) {
      incoming += (char)LoRa.read();
    }
    incoming.trim();
    Serial.print("Received LoRa message: ");
    Serial.println(incoming);

    gsmSerial.println("AT+CMGS=\"+251912345678\""); // Replace with actual phone number
    delay(100);
    gsmSerial.print("Seismic Activity Detected: ");
    gsmSerial.println(incoming);
    gsmSerial.write(0x1A); // Send Ctrl+Z to send SMS
    delay(1000);
  }
}

6. Transmission Details

The system detects seismic activity using piezoelectric sensors and accelerometers, processes data on a local server, and sends SMS alerts if S-waves are detected. Sensors generate voltage signals from ground vibrations, which are amplified, filtered, and transmitted via LoRa to a gateway. The gateway forwards data to a server, which applies a 0.1–10 Hz band-pass filter to isolate seismic frequencies. If S-waves are detected, the server calculates the remaining time before their arrival and sends SMS alerts to residents via a GSM module.

7. Future Improvements

  • Multi-Sensor Integration: Incorporate geophones or advanced MEMS sensors to enhance detection accuracy and reduce false alarms.
  • Real-Time Networked System: Deploy multiple sensor nodes for triangulation and faster seismic confirmation.
  • Machine Learning Filtering: Use machine learning to distinguish earthquakes from environmental noise.
  • Mobile Application: Develop an app for real-time seismic maps, emergency contacts, and safety protocols.
  • Power Autonomy: Integrate solar-powered systems for off-grid operation.
  • Field Deployment: Collaborate with geoscience authorities for real-world testing in Afar and the Rift Valley.

8. Summary

The Shakeless 60 is a proof-of-concept for a low-cost, LoRa-based earthquake early warning system. It integrates piezoelectric sensors, accelerometers, LoRa communication, and GSM alerting to detect seismic activity and issue warnings before S-wave arrival. Operable without internet, the system is ideal for remote regions like the East African Rift Valley, contributing to disaster preparedness and public safety.

9. References