Explore NKTECH Industries' innovative research in electronics, focusing on advanced seismic detection and disaster preparedness solutions.
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)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.
Figure 1: Prototype circuit for the LoRa-based seismic detection system.
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.
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.
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.
The system comprises two components:
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.
LoRa enables low-power, one-way communication from sensor to gateway without internet, suitable for remote areas like Afar.
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.
#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);
}
#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);
}
}
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.
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.