IoT Praktisk Session - PREVENT Projektet
IoT-praktisk session
Start
Index
Mål
Branddetektering
Översvämningsdetektering
Jordbävningsdetektering
Mål
- Huvudsyftet med denna praktiska session är att erbjuda en ”hands-on” upplevelse av IoT och hur denna teknik kan användas för att lösa problem relaterade till naturkatastrofer.
- Sessionen omfattar tre praktiska experiment:
- Integration och testning av MQ2-sensor för branddetektering
- Integration och testning av vattensensor för översvämningsdetektering
- Integration och testning av MPU6050-sensor för jordbävningsdetektering
Ha det kul!!!
01
Integration och testning av MQ2-sensor för branddetektering
Mål
Målet med detta experiment är att integrera MQ2-gassensorn med en Arduino Uno-mikrokontroller och visa sensordata i realtid på en LCD-skärm. MQ2-sensorn kommer att detektera rök, propan och andra gaser som kan indikera förekomst av brand, och dessa data kommer att användas för att bedöma den potentiella brandrisken.
Bakgrundsinformation
- MQ2 Sensor: MQ2-sensorn kan detektera olika gaser, inklusive rök, metan, propan och koloxid. Den mäter koncentrationen av gaser i luften och matar ut en analog spänning som motsvarar gaskoncentrationen.
- Tillämpningar:
- Detektering av gasläckor – Används i hem, kök och industriella miljöer för att detektera läckor av LPG, metan och propan. Rökdetektering – Kan integreras i brandlarmsystem för att detektera rök och brandfarliga gaser.
- Övervakning av luftkvaliteten inomhus – Hjälper till att mäta luftföroreningsnivåer genom att detektera farliga gaser som CO.
- Alkoholmätare – Används för att detektera alkoholhalter i utandningsprov.
- Smart hemautomatisering – Kan utlösa ventilationssystem eller larm vid höga gaskoncentrationer.
- Industriell säkerhet – Används i fabriker och kemiska anläggningar för att detektera gasläckor och förhindra explosioner.
- Fordonsapplikationer – Används i fordon för att detektera bränsleläckor eller avgasnivåer.
- IoT och smarta städer – Integreras med IoT-enheter för att övervaka miljöföroreningsnivåer i stadsområden.
- Arduino Uno: Arduino Uno är ett populärt mikrokontrollerkort som kommer att användas för att ansluta till MQ2-sensorn och en LCD-skärm. Det kommer att bearbeta sensordata och styra LCD-skärmen för att visa information i realtid.
- LCD-skärm: LCD-skärmen används för att visa realtidsavläsningar från MQ2-sensorn, som indikerar om det finns en potentiell brandrisk baserat på förekomsten av gaser.
Säkerhetsåtgärder
- Eftersom detta experiment innefattar detektering av gaser (som kan vara brandfarliga) bör du inkludera en kort anmärkning om att säkerställa god ventilation när sensorn testas med gaser eller rök. Påminn studenterna om att alltid arbeta i en säker miljö.
Nödvändig utrustning
- Hårdvara:
- Arduino Uno-kort
- MQ2-gassensor
- 16x2 LCD-skärm (I2C eller parallellanslutning)
- Jumperkablar
- Breadboard (valfritt)
- Strömförsörjning för Arduino
- Programvara:
- Arduino IDE (för programmering av mikrokontrollern)
- Bibliotekets beroenden:
Installation av Arduino IDE
- Installera bibliotekets beroenden enligt projektet enligt nedan:
- Ladda ner Arduino IDE för din plattform:
- Windows
- MacOS - Apple Silicon/Intel
- Linux
- Följ installationsinstruktionerna och öppna programmet
- Anslut Arduino UNO-kortet till någon av USB-portarna på datorn
- Välj kortet från listan enligt nedan:
- Klistra in koden för varje projekt som finns i GitHub-arkivet
- Ladda upp skissen till Arduino UNO genom att välja knappen
Kretsdiagram
- Anslutningar för MQ2-sensor:
- VCC på MQ2 till 5V på Arduino
- GND på MQ2 till GND på Arduino
- Analog utgång (A0) på MQ2 till en analog stift på Arduino (t.ex. A0)
- Anslutningar för LCD-skärm:
- VCC på LCD till 5V på Arduino
- GND på LCD till GND på Arduino
- SDA till A4 (på Arduino Uno) för I2C-kommunikation
- SCL till A5 (på Arduino Uno) för I2C-kommunikation
- Anslut MQ2-sensorn till Arduino Uno enligt kopplingsschemat.
- Anslut LCD-skärmen till Arduino Uno via I2C eller parallellanslutning enligt specifikationerna.
Programmering av Arduino
- Öppna Arduino IDE och skriv koden för att initiera MQ2-sensorn och LCD-skärmen.
- Inkludera nödvändiga bibliotek såsom LiquidCrystal_I2C (för LCD) och andra sensorrelaterade bibliotek om det behövs.
- Skriv programmet för att läsa data från MQ2-sensorn och visa värdena på LCD-skärmen.
- Implementera logik för att bedöma om sensoravläsningen indikerar förekomst av gasnivåer relaterade till en potentiell brand.
void loop() {
sum = readMQ2();
for(int i = 0; i < repetitions; i++)
{
sum += readMQ2();
}
avg = sum / repetitions;
lcd.clear();
lcd.print("Value: ");
lcd.print(String(avg));
lcd.setCursor(0, 1);
Serial.print("Value: ");
if (avg > 100)
{
lcd.print("Smoke/Gas Found!");
Serial.println("Smoke/Gas Found!");
}
else
{
lcd.print("No Smoke/Gas");
Serial.println("No Smoke/Gas found");
}
delay(300);
}
// Function to retrieve the Analog MQ2 Reading
int readMQ2() {
unsigned int sensorValue = analogRead(MQ2_AO);
// Map the resolution of the sensor from 10bit to 8bit for quicker detection
unsigned int outputValue = map(sensorValue, 0, 1023, 0, 255);
return outputValue;
}
Exempelkod
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define LCD_ADD 0x27 // I2C Address of LCD Display
#define LCD_COLS 16 // Number of columns of LCD Display
#define LCD_ROWS 2 // Number of rows of LCD Display
// Pin Definition
#define MQ2_AO A0
// Variable Declaration
int sum = 0;
int avg = 0;
int repetitions = 100;
LiquidCrystal_I2C lcd(LCD_ADD, LCD_COLS, LCD_ROWS);
void setup() {
Serial.begin(115200);
// Initialize LCD and turn on Backlight LED
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Smoke/Gas");
lcd.setCursor(0, 1);
lcd.print("Detector.");
Serial.println("Smoke/Gas Detector.");
delay(1000);
}
Testning och kalibrering
- Ladda upp koden till Arduino och öppna seriell monitor (på Mac och/eller Windows) för att verifiera sensorns avläsningar.
- Testa sensorn genom att utsätta den för olika nivåer av rök eller gaser (på ett säkert sätt) och observera LCD-skärmen.
- Justera tröskelvärdet i koden för att definiera den gaskoncentrationsnivå vid vilken en potentiell brand detekteras
Observationer
- Registrera sensorns avläsningar vid olika gaskoncentrationer.
- Observera LCD-skärmen för att kontrollera om systemet korrekt identifierar förekomsten av gaser som är relaterade till brand.
Resultat och analys
- Förväntade resultat: LCD-skärmen ska visa gasnivåvärdena i realtid. När gaskoncentrationen överskrider ett visst tröskelvärde ska meddelandet ”Potential Fire!” (Brandrisk!) visas på LCD-skärmen.
- Analys: Jämför sensordata med förväntade tröskelvärden för rök- eller branddetektering. Diskutera hur MQ2-sensorn kan användas i verkliga branddetekteringssystem.
Diskussion
- Diskutera effektiviteten hos MQ2-sensorn när det gäller att detektera förekomsten av rök eller andra gaser som är relaterade till brand.
- Utvärdera den övergripande prestandan hos integrationen mellan Arduino, MQ2-sensorn och LCD-skärmen.
Frågor för kritiskt tänkande
- Hur kan du modifiera kretsen för att detektera andra gaser?
- Vilka andra sensorer skulle du kunna använda för att förbättra branddetekteringens noggrannhet?
- Vilka faktorer kan orsaka falska positiva eller negativa resultat i branddetekteringssystemet?
- Hur skulle du förbättra tillförlitligheten hos branddetekteringssystemet i en verklig tillämpning?
- Föreslå hur systemet skulle kunna förbättras ytterligare.
02
Integration och testning av vattensensor för översvämnings-detektering
Mål
Målet med detta experiment är att integrera Grove-nederbörds-/vattensensorn med en Arduino Uno-mikrokontroller och visa sensordata i realtid på en LCD-skärm. Sensorn kommer att detektera förekomsten av nederbörd samt vattennivån, och dessa data kommer att användas för att bedöma den potentiella översvämningsrisken.
Bakgrundsinformation
- Nederbörd/vatten-sensor: Grove - Water Sensor är en enkel men effektiv sensor som används för att detektera förekomst av vatten, fuktnivåer och till och med nederbörd. Den tillhör Seeed Studios Grove-ekosystem, vilket gör det enkelt att ansluta till mikrokontroller som Arduino och Raspberry Pi utan behov av lödning eller komplex kabeldragning. Grove - nederbörd/vatten-sensorn kan producera spänningsvärden för vattennivån. För att detektera översvämningar ändras motståndet hos de exponerade kopparelementen, vilket ger analoga spänningsvärden som kan användas för att detektera vattennivån. Varje spår har ett svagt motstånd på 1 MΩ. När sensorn är nedsänkt i vatten minskar spänningsavläsningen från signalstiftet.
- Tillämpningar:
- Regn- och nederbördsdetektering – Används i väderstationer för att detektera nederbörd och utlösa varningar.
- Läckagedetektering – Installeras nära rör, apparater eller källare för att detektera vattenläckor och förhindra skador.
- Markfuktighetsövervakning – Hjälper till inom smart jordbruk genom att detektera markens torrhet och automatisera bevattningen.
- Vattennivådetektering – Används i tankar eller reservoarer för att övervaka vattennivåer.
- Hemautomation och IoT – Kan integreras med smarta hemsystem för att varna användare om vattenläckor eller översvämningar.
- Industriella tillämpningar – Hjälper till att övervaka fuktighet eller detektera förekomst av vatten i kritiska miljöer.
- Arduino Uno: Arduino Uno är ett populärt mikrokontrollerkort som kommer att användas för att ansluta sensorn och en LCD-skärm. Det kommer att bearbeta sensordata och styra LCD-skärmen för att visa information i realtid.
- LCD-skärm: LCD-skärmen kommer att användas för att visa realtidsavläsningar från sensorn, som indikerar om det finns en potentiell översvämningsrisk baserat på förekomsten av höga vattennivåer.
Säkerhetsåtgärder
- Eftersom detta experiment innebär att man mäter nederbörd och vatten, bör du inkludera en kort anmärkning om att man måste vara försiktig när man testar sensorn för att undvika spill. Påminn studenterna om att alltid arbeta i en säker miljö.
Nödvändig utrustning
- Hårdvara:
- Arduino Uno-kort
- Vattensensor
- 16x2 LCD-skärm (I2C eller parallellanslutning)
- Jumperkablar
- Breadboard (valfritt)
- Strömförsörjning för Arduino
- Programvara:
- Arduino IDE (för programmering av mikrokontrollern)
- Bibliotekets beroenden:
Installation av Arduino IDE
- Installera bibliotekets beroenden enligt projektet enligt nedan:
- Ladda ner Arduino IDE för din plattform:
- Windows
- MacOS - Apple Silicon/Intel
- Linux
- Följ installationsinstruktionerna och öppna programmet
- Anslut Arduino UNO-kortet till någon av USB-portarna på datorn
- Välj kortet från listan enligt nedan:
- Klistra in koden för varje projekt som finns i GitHub-arkivet
- Ladda upp skissen till Arduino UNO genom att välja knappen
Kretsdiagram
- Anslutningar för vattensensor:
- Sensorns VCC till 5V på Arduino
- Sensorns GND till GND på Arduino
- Sensorns analoga utgång (A0) till en analog stift på Arduino (t.ex. A0)
- Anslutningar för LCD-skärm:
- VCC på LCD till 5V på Arduino
- GND på LCD till GND på Arduino
- SDA till A4 (på Arduino Uno) för I2C-kommunikation
- SCL till A5 (på Arduino Uno) för I2C-kommunikation
- Anslut sensorn till Arduino Uno enligt kopplingsschemat.
- Anslut LCD-skärmen till Arduino Uno via I2C eller parallellanslutning enligt specifikationerna.
Programmering av Arduino
- Öppna Arduino IDE och skriv koden för att initialisera sensorn och LCD-skärmen.
- Inkludera nödvändiga bibliotek såsom LiquidCrystal_I2C (för LCD) och andra sensorrelaterade bibliotek om tillämpligt.
- Skriv programmet för att läsa data från sensorn och visa värdena på LCD-skärmen.
- Implementera logik för att bedöma om sensoravläsningen indikerar förekomsten av vattennivåer relaterade till en potentiell översvämning.
void loop() { // read the input pin val = analogRead(WATER_SENSOR); // Serial.println(val); if (val < 150) intensity = "High"; else if (val >= 150 && val <= 160) intensity = "Moderate"; else if (val > 160 && val <= 250) intensity = "Low"; else intensity = "None"; lcd.clear();
lcd.print("Water Level:");
lcd.setCursor(0,1);
lcd.print(intensity);
Serial.print("Water Level: ");
Serial.println(intensity);
Serial.print("Value: ");
Serial.println(val);
delay(500);
}
Exempelkod
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define WATER_SENSOR A0
#define LCD_ADD 0x27 // I2C Address of LCD Display
#define LCD_COLS 16 // Number of columns of LCD Display
#define LCD_ROWS 2 // Number of rows of LCD Display
LiquidCrystal_I2C lcd(LCD_ADD, LCD_COLS, LCD_ROWS);
int val = 0;
String intensity;
void setup() {
Serial.begin(115200);
// Initialize LCD and turn on Backlight LED
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Flood Detector.");
lcd.setCursor(0, 1);
Serial.println("Flood Detector.");
}
Testning och kalibrering
- Ladda upp koden till Arduino och öppna seriell monitor (på Mac och/eller Windows) för att verifiera sensorns avläsningar.
- Testa sensorn genom att utsätta den för olika vattennivåer och observera LCD-skärmen.
- Justera tröskelvärdet i koden för att definiera den vattennivå vid vilken en potentiell översvämning detekteras.
Observationer
- Registrera sensorns avläsningar vid olika vattennivå.
- Observera LCD-skärmen för att kontrollera om systemet korrekt identifierar vattennivån i samband med översvämning.
Resultat och analys
- Förväntad resultat: LCD-skärmen ska visa vattennivån i realtid. När vattennivån överskrider en viss gräns ska meddelandet ”Hög vattennivå” visas på LCD-skärmen.
- Analys: Jämför sensordata med förväntade tröskelvärden för översvämningsdetektering. Diskutera hur vattensensorn kan användas i verkliga översvämningsdetekteringssystem.
Diskussion
- Diskutera vattensensorns effektivitet när det gäller att upptäcka förekomsten av vatten, fuktnivåer och till och med nederbörd i samband med potentiella översvämningar.
- Utvärdera den övergripande prestandan hos integrationen mellan Arduino, vattensensor och LCD-skärm.
Frågor för kritiskt tänkande
- Vilka andra sensorer skulle du kunna använda för att förbättra noggrannheten i detekteringen av översvämningar?
- Vilka faktorer kan orsaka falska positiva eller negativa resultat i systemet för detektering av översvämningar?
- Hur skulle du förbättra tillförlitligheten i systemet för detektering av översvämningar i en verklig tillämpning?
- Föreslå hur systemet skulle kunna förbättras ytterligare.
03
Integration och testning av MPU6050-sensor för jordbävningsdetektering
Mål
Målet med detta experiment är att integrera sensorn MPU6050 med en Arduino Uno-mikrokontroller och visa sensordata i realtid på en LCD-skärm. MPU6050 Inertial Measurement Unit kan producera värden för acceleration och gyroskop. För att detektera jordbävningar konverteras Z-axelns acceleration, förutsatt att MPU6050 är fastsatt med rätt sida upp på en plan yta, från [m/s2] till [g] genom att dividera accelerationsvärdet med jordens gravitation (~9,81 m/s2). Detta g-värde kategoriseras sedan enligt den modifierade Mercalli-skalan, och dessa data används för att bedöma den potentiella jordbävningsrisken.
Bakgrundsinformation
- MPU6050 Sensor: MPU6050 är en 6-axlig rörelsesensor som kombinerar ett 3-axligt gyroskop (mäter vinkelhastighet) och en 3-axlig accelerometer (mäter acceleration). Den används ofta för rörelsespårning, orienteringsavkänning och gestigenkänning. Den har också en inbyggd digital rörelseprocessor (DMP) som kan bearbeta sensordata innan den skickas till en mikrokontroller, vilket minskar beräkningsbelastningen.
- Tillämpningar:
- Rörelsespårning och geststyrning – Används i spelkontroller, robotik och system för rörelsespårning av människor.
- Stabilisering av drönare och UAV – Hjälper till att hålla drönare stabila genom att spåra deras orientering.
- Robotik och självbalanserande system – Väsentligt för robotapplikationer som självbalanserande robotar och robotarmar.
- Bärbara enheter och fitness-trackers – Används för stegräkning, aktivitetsigenkänning och fitnessövervakning.
- Virtual Reality (VR) och Augmented Reality (AR) – Hjälper till med huvudspårning för uppslukande upplevelser.
- Smartphones och surfplattor – Används för automatisk skärmrotation, skakningsdetektering och spelkontroller.
- Bilapplikationer – Hjälper till med fordonsstabilitetskontroll, kollisionsdetektering och rörelsedetektering.
- Övervakning av industriell utrustning – Används i förebyggande underhåll och vibrationsanalys.
- Arduino Uno: Arduino Uno är ett populärt mikrokontrollerkort som kommer att användas för att ansluta till mpu6050-sensorn och en LCD-skärm. Det kommer att bearbeta sensordata och styra LCD-skärmen för att visa information i realtid.
- LCD-skärm: LCD-skärmen kommer att användas för att visa realtidsavläsningar från mpu6050-sensorn, som indikerar om det finns en potentiell risk för jordbävning baserat på förekomsten av vibrationer och g-krafter.
Säkerhetsåtgärder
- Eftersom detta experiment innefattar detektering av vibrationer och g-krafter, ska du inkludera en kort anmärkning om att säkerställa korrekt hantering vid testning av sensorn. Påminn eleverna om att alltid arbeta i en säker miljö.
Nödvändig utrustning
- Hårdvara:
- Arduino Uno-kort
- MPU6050-sensor
- 16x2 LCD-skärm (I2C eller parallellanslutning)
- Jumperkablar
- Breadboard (valfritt)
- Strömförsörjning för Arduino
- Programvara:
- Arduino IDE (för programmering av mikrokontrollern)
- Bibliotekets beroenden:
- Adafruit MPU6050
- Adafruit Sensor
- LiquidCrystal_I2C
- Wire
Installation av Arduino IDE
- Installera bibliotekets beroenden enligt projektet enligt nedan:
- Ladda ner Arduino IDE för din plattform:
- Windows
- MacOS - Apple Silicon/Intel
- Linux
- Följ installationsinstruktionerna och öppna programmet
- Anslut Arduino UNO-kortet till någon av USB-portarna på datorn
- Välj kortet från listan enligt nedan:
- Klistra in koden för varje projekt som finns i GitHub-arkivet
- Ladda upp skissen till Arduino UNO genom att välja knappen
Kretsdiagram
- Anslutningar för mpu6050-sensor:
- VCC of mpu6050 to 3.3V on the Arduino
- GND of mpu6050 to GND on Arduino
- SCL of mpu6050 to SCL on Arduino
- SDA of mpu6050 to SDA on Arduino
- Anslutningar för LCD-skärm:
- VCC på LCD till 5V på Arduino
- GND på LCD till GND på Arduino
- SDA till A4 (på Arduino Uno) för I2C-kommunikation
- SCL till A5 (på Arduino Uno) för I2C-kommunikation
- Anslut mpu6050-sensorn till Arduino Uno enligt kopplingsschemat.
- Anslut LCD-skärmen till Arduino Uno via I2C eller parallellanslutning enligt specifikationerna.
Programmering av Arduino
- Öppna Arduino IDE och skriv koden för att initialisera mpu6050-sensorn och LCD-skärmen.
- Inkludera nödvändiga bibliotek såsom LiquidCrystal_I2C (för LCD) och andra sensorrelaterade bibliotek om tillämpligt.
- Skriv programmet för att läsa data från mpu6050-sensorn och visa värdena på LCD-skärmen.
- Implementera logik för att bedöma om sensoravläsningen indikerar förekomsten av vibrationsnivåer relaterade till en potentiell jordbävning.
Exempelkod
void loop() {
sumAccel = 0.0;
// Average Accelerometer Z axis for 300 readings and convert them from m/s^2 to g
// to reduce sensor error
for(int i = 0; i < 300; i++)
{
mpu.getAccelerometerSensor()->getEvent(&event);
sumAccel = abs(event.acceleration.z / 9.81);
}
avgAccel = sumAccel / 300;
// Calculate the difference of the previous and current reading to determine shifts in g value
diff = abs(avgAccel - prevAccel);
// Identify the category of the earthqake by comparing the difference of the readings
if (diff >= 0.0276 && diff <= 0.115)
intensity = "Category V";
else if (diff > 0.115 && diff <= 0.215)
intensity = "Category VI";
else if (diff > 0.215 && diff <= 0.401)
intensity = "Category VII";
else if (diff > 0.401 && diff <= 0.747)
intensity = "Category VIII";
else if (diff > 0.747 && diff <= 1.39)
intensity = "Category IX";
else if (diff > 1.39)
intensity = "Category X";
else
intensity = "None";
lcd.clear();
lcd.print(diff);
lcd.print(" g");
lcd.setCursor(0, 1);
lcd.print(intensity);
// Assign the current reading to the previous to repeat the comparison
prevAccel = avgAccel;
delay(50);
}
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define LCD_ADD 0x27 // I2C Address of LCD Display
#define LCD_COLS 16 // Number of columns of LCD Display
#define LCD_ROWS 2 // Number of rows of LCD Display
// Peripheral Definition
Adafruit_MPU6050 mpu;
LiquidCrystal_I2C lcd(LCD_ADD, LCD_COLS, LCD_ROWS);
// Variables Declaration
float sumAccel = 0.0;
float avgAccel;
float prevAccel = 0.0;
float diff = 0.0;
String intensity;
void setup(void) {
Serial.begin(115200);
// Initialize LCD and turn on Backlight LED
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Quake Detector.");
lcd.setCursor(0, 1);
// Check MPU6050 Connectivity
while (!mpu.begin()) {
Serial.println("MPU6050 not connected!");
delay(1000);
}
lcd.print("MPU6050 ready.");
delay(1000);
}
sensors_event_t event;
Testning och kalibrering
- Ladda upp koden till Arduino och öppna seriell monitor (på Mac och/eller Windows) för att verifiera sensorns avläsningar.
- Testa sensorn genom att utsätta den för olika vibrationsnivåer och observera LCD-skärmen.
Observationer
- Registrera sensorns avläsningar vid olika vibrationsnivåer.
- Observera LCD-skärmen för att kontrollera om systemet korrekt identifierar förekomsten av vibrationer relaterade till jordbävningar.
Resultat och analys
- Förväntade resultat: LCD-skärmen ska visa vibrationsnivåerna i realtid. När vibrations g-kraften överskrider ett visst tröskelvärde ska meddelandet ”Kategori V” visas på LCD-skärmen.
- Analys: Jämför sensordata med förväntade tröskelvärden för jordbävningsdetektering. Diskutera hur mpu6050-sensorn kan användas i verkliga system för jordbävningsdetektering.
Diskussion
- Diskutera effektiviteten hos mpu6050-sensorn när det gäller att detektera vibrationer och g-krafter i samband med jordbävningar.
- Utvärdera den totala prestandan hos integrationen mellan Arduino, mpu6050-sensorn och LCD-skärmen.
Frågor för kritiskt tänkande
- Hur kan du modifiera kretsen för att detektera ytterligare data såsom azimut?
- Vilka andra sensorer skulle du kunna använda för att förbättra noggrannheten i jordbävningsdetektering?
- Vilka faktorer kan orsaka falska positiva eller negativa resultat i systemet för jordbävningsdetektering?
- Hur skulle du förbättra tillförlitligheten hos systemet för jordbävningsdetektering i en verklig tillämpning?
- Föreslå hur systemet skulle kunna förbättras ytterligare.
SWE - PREVENT IoT Practical Session (UCLan)
citizensinpower
Created on August 28, 2025
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Essential Course
View
Practical Course
View
Basic Interactive Course
View
Course 3D Style
View
Minimal Course
View
Neodigital CPD Course
View
Laws and Regulations Course
Explore all templates
Transcript
IoT Praktisk Session - PREVENT Projektet
IoT-praktisk session
Start
Index
Mål
Branddetektering
Översvämningsdetektering
Jordbävningsdetektering
Mål
Ha det kul!!!
01
Integration och testning av MQ2-sensor för branddetektering
Mål
Målet med detta experiment är att integrera MQ2-gassensorn med en Arduino Uno-mikrokontroller och visa sensordata i realtid på en LCD-skärm. MQ2-sensorn kommer att detektera rök, propan och andra gaser som kan indikera förekomst av brand, och dessa data kommer att användas för att bedöma den potentiella brandrisken.
Bakgrundsinformation
Säkerhetsåtgärder
Nödvändig utrustning
Installation av Arduino IDE
Kretsdiagram
Programmering av Arduino
void loop() { sum = readMQ2(); for(int i = 0; i < repetitions; i++) { sum += readMQ2(); } avg = sum / repetitions; lcd.clear(); lcd.print("Value: "); lcd.print(String(avg)); lcd.setCursor(0, 1); Serial.print("Value: "); if (avg > 100) { lcd.print("Smoke/Gas Found!"); Serial.println("Smoke/Gas Found!"); } else { lcd.print("No Smoke/Gas"); Serial.println("No Smoke/Gas found"); } delay(300); } // Function to retrieve the Analog MQ2 Reading int readMQ2() { unsigned int sensorValue = analogRead(MQ2_AO); // Map the resolution of the sensor from 10bit to 8bit for quicker detection unsigned int outputValue = map(sensorValue, 0, 1023, 0, 255); return outputValue; }
Exempelkod
#include <LiquidCrystal_I2C.h> #include <Wire.h> #define LCD_ADD 0x27 // I2C Address of LCD Display #define LCD_COLS 16 // Number of columns of LCD Display #define LCD_ROWS 2 // Number of rows of LCD Display // Pin Definition #define MQ2_AO A0 // Variable Declaration int sum = 0; int avg = 0; int repetitions = 100; LiquidCrystal_I2C lcd(LCD_ADD, LCD_COLS, LCD_ROWS); void setup() { Serial.begin(115200); // Initialize LCD and turn on Backlight LED lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Smoke/Gas"); lcd.setCursor(0, 1); lcd.print("Detector."); Serial.println("Smoke/Gas Detector."); delay(1000); }
Testning och kalibrering
Observationer
Resultat och analys
Diskussion
Frågor för kritiskt tänkande
02
Integration och testning av vattensensor för översvämnings-detektering
Mål
Målet med detta experiment är att integrera Grove-nederbörds-/vattensensorn med en Arduino Uno-mikrokontroller och visa sensordata i realtid på en LCD-skärm. Sensorn kommer att detektera förekomsten av nederbörd samt vattennivån, och dessa data kommer att användas för att bedöma den potentiella översvämningsrisken.
Bakgrundsinformation
Säkerhetsåtgärder
Nödvändig utrustning
Installation av Arduino IDE
Kretsdiagram
Programmering av Arduino
void loop() { // read the input pin val = analogRead(WATER_SENSOR); // Serial.println(val); if (val < 150) intensity = "High"; else if (val >= 150 && val <= 160) intensity = "Moderate"; else if (val > 160 && val <= 250) intensity = "Low"; else intensity = "None"; lcd.clear(); lcd.print("Water Level:"); lcd.setCursor(0,1); lcd.print(intensity); Serial.print("Water Level: "); Serial.println(intensity); Serial.print("Value: "); Serial.println(val); delay(500); }
Exempelkod
#include <LiquidCrystal_I2C.h> #include <Wire.h> #define WATER_SENSOR A0 #define LCD_ADD 0x27 // I2C Address of LCD Display #define LCD_COLS 16 // Number of columns of LCD Display #define LCD_ROWS 2 // Number of rows of LCD Display LiquidCrystal_I2C lcd(LCD_ADD, LCD_COLS, LCD_ROWS); int val = 0; String intensity; void setup() { Serial.begin(115200); // Initialize LCD and turn on Backlight LED lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Flood Detector."); lcd.setCursor(0, 1); Serial.println("Flood Detector."); }
Testning och kalibrering
Observationer
Resultat och analys
Diskussion
Frågor för kritiskt tänkande
03
Integration och testning av MPU6050-sensor för jordbävningsdetektering
Mål
Målet med detta experiment är att integrera sensorn MPU6050 med en Arduino Uno-mikrokontroller och visa sensordata i realtid på en LCD-skärm. MPU6050 Inertial Measurement Unit kan producera värden för acceleration och gyroskop. För att detektera jordbävningar konverteras Z-axelns acceleration, förutsatt att MPU6050 är fastsatt med rätt sida upp på en plan yta, från [m/s2] till [g] genom att dividera accelerationsvärdet med jordens gravitation (~9,81 m/s2). Detta g-värde kategoriseras sedan enligt den modifierade Mercalli-skalan, och dessa data används för att bedöma den potentiella jordbävningsrisken.
Bakgrundsinformation
Säkerhetsåtgärder
Nödvändig utrustning
Installation av Arduino IDE
Kretsdiagram
Programmering av Arduino
Exempelkod
void loop() { sumAccel = 0.0; // Average Accelerometer Z axis for 300 readings and convert them from m/s^2 to g // to reduce sensor error for(int i = 0; i < 300; i++) { mpu.getAccelerometerSensor()->getEvent(&event); sumAccel = abs(event.acceleration.z / 9.81); } avgAccel = sumAccel / 300; // Calculate the difference of the previous and current reading to determine shifts in g value diff = abs(avgAccel - prevAccel); // Identify the category of the earthqake by comparing the difference of the readings if (diff >= 0.0276 && diff <= 0.115) intensity = "Category V"; else if (diff > 0.115 && diff <= 0.215) intensity = "Category VI"; else if (diff > 0.215 && diff <= 0.401) intensity = "Category VII"; else if (diff > 0.401 && diff <= 0.747) intensity = "Category VIII"; else if (diff > 0.747 && diff <= 1.39) intensity = "Category IX"; else if (diff > 1.39) intensity = "Category X"; else intensity = "None"; lcd.clear(); lcd.print(diff); lcd.print(" g"); lcd.setCursor(0, 1); lcd.print(intensity); // Assign the current reading to the previous to repeat the comparison prevAccel = avgAccel; delay(50); }
#include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> #include <LiquidCrystal_I2C.h> #include <Wire.h> #define LCD_ADD 0x27 // I2C Address of LCD Display #define LCD_COLS 16 // Number of columns of LCD Display #define LCD_ROWS 2 // Number of rows of LCD Display // Peripheral Definition Adafruit_MPU6050 mpu; LiquidCrystal_I2C lcd(LCD_ADD, LCD_COLS, LCD_ROWS); // Variables Declaration float sumAccel = 0.0; float avgAccel; float prevAccel = 0.0; float diff = 0.0; String intensity; void setup(void) { Serial.begin(115200); // Initialize LCD and turn on Backlight LED lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Quake Detector."); lcd.setCursor(0, 1); // Check MPU6050 Connectivity while (!mpu.begin()) { Serial.println("MPU6050 not connected!"); delay(1000); } lcd.print("MPU6050 ready."); delay(1000); } sensors_event_t event;
Testning och kalibrering
Observationer
Resultat och analys
Diskussion
Frågor för kritiskt tänkande