Șablon de capitole - Proiect PREVENT
Sesiune practică IoT
Început
Index
Obiective
Detectare incendiu
Detectarea inundațiilor
Detectarea cutremurelor
Obiective
- Scopul principal al acestei sesiuni practice este de a oferi o experiență „practică” pe IoT și modul în care această tehnologie poate fi utilizată pentru a rezolva probleme legate de dezastrele naturale.
- Sesiunea include 3 experimente practice:
- Integrarea și testarea senzorului MQ2 pentru detectarea incendiilor
- Integrarea și testarea senzorului de apă pentru detectarea inundațiilor
- Integrarea și testarea senzorului MPU6050 pentru detectarea cutremurelor
A se distra!!!
01
Integrarea și testarea senzorului MQ2 pentru detectarea incendiilor
Obiectiv
Scopul acestui experiment este de a integra senzorul de gaz MQ2 cu un microcontroler Arduino Uno și de a afișa datele senzorului în timp real pe un ecran LCD. Senzorul MQ2 va detecta fumul, propanul și alte gaze care pot indica prezența incendiului, iar aceste date vor fi folosite pentru a evalua potențialul pericol de incendiu.
Informații de fundal
- Senzor MQ2: Senzorul MQ2 este capabil să detecteze diferite gaze, inclusiv fum, metan, propan și monoxid de carbon. Funcționează prin măsurarea concentrației de gaze în aer și emiterea unei tensiuni analogice care corespunde concentrației de gaz.
- Aplicatii:
- o Detectarea scurgerilor de gaz – Folosit în case, bucătării și setări industriale pentru a detecta scurgerile de GPL, metan și propan.
- Detectarea fumului – Poate fi integrat în sistemele de alarmă de incendiu pentru a detecta fumul și gazele inflamabile.
- o Monitorizarea calității aerului din interior – Ajută la măsurarea nivelurilor de poluare a aerului prin detectarea gazelor periculoase precum CO.
- Dispozitive etilotest – utilizate pentru a detecta nivelurile de alcool în testele de respirație.
- Smart Home Automation – Poate declanșa sisteme de ventilație sau alarme în cazul unor concentrații mari de gaz.
- Siguranța industrială – Desfășurat în fabrici și fabrici chimice pentru a detecta scurgerile de gaz și a preveni exploziile.
- Aplicații auto – Folosit în vehicule pentru a detecta scurgerile de combustibil sau nivelul gazelor de eșapament.
- IoT și orașe inteligente – Integrat cu dispozitive IoT pentru a monitoriza nivelurile de poluare a mediului în zonele urbane.
- Arduino Uno: Arduino Uno este o placă de microcontroler populară care va fi folosită pentru a interfața cu senzorul MQ2 și un afișaj LCD. Acesta va procesa datele senzorului și va controla LCD-ul pentru a afișa informații în timp real.
- Ecran LCD: Ecranul LCD va fi utilizat pentru a afișa citiri în timp real de la senzorul MQ2, indicând dacă există un risc potențial de incendiu pe baza prezenței gazelor.
Măsuri de siguranță
- Deoarece acest experiment implică detectarea gazelor (potențial inflamabile), includeți o scurtă notă privind asigurarea unei ventilații adecvate atunci când testați senzorul cu gaze sau fum. Amintiți-le elevilor să lucreze întotdeauna într-un mediu sigur.
Echipament necesar
- Hardware:
- Placa Arduino Uno
- Senzor de gaz MQ2
- Ecran LCD 16x2 (I2C sau conexiune paralelă)
- Fire jumper
- Breadboard (opțional)
- Sursa de alimentare pentru Arduino
- Software:
- Arduino IDE (pentru programarea microcontrolerului)
- Dependențe de bibliotecă
Instalați Arduino IDE
- Instalați dependențele bibliotecii conform proiectului, așa cum se arată mai jos:
- Descărcați Arduino IDE pentru platforma dvs.:
- Windows
- MacOS - Apple Silicon/Intel
- Linux
- Urmați instrucțiunile de instalare și deschideți aplicația
- Conectați placa Arduino UNO la oricare dintre porturile USB de pe computer
- Selectați placa din listă, așa cum se arată mai jos:
- Lipiți codul pentru fiecare proiect găsit în Depozitul GitHub
- G. Încărcați schița pe Arduino UNO selectând butonul
Schema circuitului
- Conexiuni pentru senzorul MQ2:
- VCC de la MQ2 la 5V pe Arduino
- GND de la MQ2 la GND pe Arduino
- Ieșirea analogică (A0) a lui MQ2 la un pin analog de pe Arduino (de exemplu, A0)
- Conexiuni pentru ecranul LCD:
- VCC de LCD la 5V pe Arduino
- GND de LCD la GND pe Arduino
- SDA la A4 (pe Arduino Uno) pentru comunicare I2C
- SCL la A5 (pe Arduino Uno) pentru comunicare I2C
- Conectați senzorul MQ2 la Arduino Uno așa cum se arată în schema de circuit.
- Conectați ecranul LCD la Arduino Uno prin I2C sau conexiune paralelă conform specificațiilor.
Programarea Arduino
- Deschideți Arduino IDE și scrieți codul pentru a inițializa senzorul MQ2 și LCD.
- Includeți bibliotecile necesare, cum ar fi LiquidCrystal_I2C (pentru LCD) și alte biblioteci legate de senzori, dacă este cazul.
- Scrieți programul pentru a citi datele de la senzorul MQ2 și afișați valorile pe LCD.
- Implementați logica pentru a evalua dacă citirea senzorului indică prezența nivelurilor de gaz legate de un potențial incendiu.
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;
}
Exemplu de cod
#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);
}
Testare și calibrare
- Încărcați codul în Arduino și deschideți monitorul serial (pe Mac și/sau Windows) pentru a verifica citirile senzorului.
- Testați senzorul expunându-l la diferite niveluri de fum sau gaze (în siguranță) și observați afișajul LCD.
- Reglați valoarea pragului din cod pentru a defini nivelul de concentrație a gazului la care este detectat un potențial incendiu.
Observatii
- Înregistrați citirile senzorului la diferite concentrații de gaz.
- Observați afișajul LCD pentru a verifica dacă sistemul identifică corect prezența gazelor legate de incendiu.
Rezultate și analize
- Rezultate așteptate: Ecranul LCD ar trebui să afișeze citirile nivelului de gaz în timp real. Când concentrația de gaz depășește un anumit prag, mesajul „Potențial incendiu!” ar trebui să apară pe LCD.
- Analiză: comparați datele senzorului cu pragurile așteptate pentru detectarea fumului sau a incendiilor. Discutați cum senzorul MQ2 poate fi utilizat în sistemele de detectare a incendiilor din lumea reală.
Discuţie
- Discutați eficacitatea senzorului MQ2 în detectarea prezenței fumului sau a altor gaze asociate cu focul.
- Evaluați performanța generală a integrării dintre Arduino, senzorul MQ2 și ecranul LCD.
Întrebări de gândire critică
- Cum puteți modifica circuitul pentru a detecta alte gaze?
- Ce alți senzori ați putea folosi pentru a îmbunătăți acuratețea detectării incendiilor?
- Ce factori ar putea cauza fals pozitive sau negative în sistemul de detectare a incendiilor?
- Cum ați îmbunătăți fiabilitatea sistemului de detectare a incendiilor într-o aplicație reală?
- Sugerați cum ar putea fi îmbunătățit sistemul.
02
Integrarea și testarea senzorului de apă pentru detectarea inundațiilor
Obiectiv
Scopul acestui experiment este de a integra Grove - senzor de precipitații / apă cu un microcontroler Arduino Uno și de a afișa datele senzorului în timp real pe un ecran LCD. Senzorul va detecta prezența precipitațiilor, precum și nivelul apei, iar aceste date vor fi utilizate pentru a evalua potențialul pericol de inundație.
Informații de fundal
- Senzor de precipitații / apă: Grove - Senzor de apă este un senzor simplu, dar eficient, folosit pentru a detecta prezența apei, nivelul de umiditate și chiar precipitațiile. Aparține ecosistemului Grove al Seeed Studio, ceea ce face ușoară conectarea la microcontrolere precum Arduino și Raspberry Pi fără a fi nevoie de lipire sau cablare complexă. Senzorul Grove - precipitații / apă poate produce valori de tensiune pentru nivelul apei. Pentru detectarea inundațiilor, rezistența elementelor de cupru expuse se modifică, producând astfel valori analogice ale tensiunii care pot fi utilizate pentru detectarea nivelului apei. Fiecare urmă are o rezistență slabă de 1MΩ. Când senzorul este scufundat în apă, citirea tensiunii de la pinul de semnal scade.
- Aplicatii:
- Detectare ploi și precipitații – Folosit în stațiile meteo pentru a detecta precipitațiile și a declanșa alerte.
- Detectarea scurgerilor - Instalat lângă țevi, aparate sau subsoluri pentru a detecta scurgerile de apă și pentru a preveni deteriorarea.
- Monitorizarea umidității solului – Ajută în agricultura inteligentă prin detectarea uscăciunii solului și automatizarea irigației.
- Detectarea nivelului apei – Utilizată în rezervoare sau rezervoare pentru a monitoriza nivelul apei.
- Home Automation și IoT – Pot fi integrate cu sistemele de casă inteligente pentru a alerta utilizatorii despre scurgeri de apă sau inundații.
- Aplicații industriale – Ajută la monitorizarea umidității sau la detectarea prezenței apei în medii critice.
- Arduino Uno: Arduino Uno este o placă de microcontroler populară care va fi folosită pentru a interfața cu senzorul și cu un afișaj LCD. Acesta va procesa datele senzorului și va controla LCD-ul pentru a afișa informații în timp real.
- Ecran LCD: Ecranul LCD va fi folosit pentru a afișa citiri în timp real de la senzor, indicând dacă există un risc potențial de inundații pe baza prezenței nivelurilor ridicate de apă.
Măsuri de siguranță
- Deoarece acest experiment implică detectarea precipitațiilor și a apei, includeți o scurtă notă privind asigurarea îngrijirii adecvate atunci când testați senzorul pentru a evita vărsarea. Amintiți-le elevilor să lucreze întotdeauna într-un mediu sigur.
Echipament necesar
- Hardware:
- Placa Arduino Uno
- Senzor de apă
- Ecran LCD 16x2 (I2C sau conexiune paralelă)
- Fire jumper
- Breadboard (opțional)
- Sursa de alimentare pentru Arduino
- Software:
- Arduino IDE (pentru programarea microcontrolerului)
- Dependențe de bibliotecă
Instalare Arduino IDE
- Instalați dependențele bibliotecii conform proiectului, așa cum se arată mai jos:
- Descărcați Arduino IDE pentru platforma dvs:
- Windows
- MacOS - Apple Silicon/Intel
- Linux
- Urmați instrucțiunile de instalare și deschideți aplicația
- Conectați placa Arduino UNO la oricare dintre porturile USB de pe computer
- Selectați placa din listă, așa cum se arată mai jos:
- Lipiți codul pentru fiecare proiect găsit în Depozitul GitHub
- G. Încărcați schița pe Arduino UNO selectând butonul
Schema circuitului
- Conexiuni pentru senzorul MQ2:
- VCC al senzorului la 5V pe Arduino
- GND de la senzor la GND pe Arduino
- Ieșirea analogică (A0) a senzorului către un pin analog de pe Arduino (de exemplu, A0)
- Conexiuni pentru ecranul LCD:
- VCC de LCD la 5V pe Arduino
- GND de la LCD la GND pe Arduino
- SDA la A4 (pe Arduino Uno) pentru comunicare I2C
- SCL la A5 (pe Arduino Uno) pentru comunicare I2C
- Conectați senzorul la Arduino Uno așa cum se arată în schema de circuit.
- Conectați ecranul LCD la Arduino Uno prin I2C sau conexiune paralelă conform specificațiilor.
Programarea Arduino
- Deschideți Arduino IDE și scrieți codul pentru a inițializa senzorul și LCD-ul.
- Includeți bibliotecile necesare, cum ar fi LiquidCrystal_I2C (pentru LCD) și alte biblioteci legate de senzori, dacă este cazul.
- Scrieți programul pentru a citi datele de la senzor și afișați valorile pe LCD.
- Implementați logica pentru a evalua dacă citirea senzorului indică prezența nivelurilor apei legate de o potențială inundație.
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);
}
Exemplu de cod
#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.");
}
Testare și calibrare
- Încărcați codul în Arduino și deschideți monitorul serial (pe Mac și/sau Windows) pentru a verifica citirile senzorului.
- Testați senzorul expunându-l la diferite niveluri de apă și observați afișajul LCD.
- Reglați valoarea pragului din cod pentru a defini nivelul apei la care este detectată o potențială inundație.
Observatii
- Înregistrați citirile senzorului la diferite concentrații de gaz.
- Observați afișajul LCD pentru a verifica dacă sistemul identifică corect nivelul de apă legat de inundație.
Rezultate și analize
- Rezultate așteptate: Ecranul LCD ar trebui să afișeze citirile nivelului apei în timp real. Când nivelul apei depășește un anumit prag, pe ecranul LCD ar trebui să apară mesajul „Nivel apă ridicat”.
- Analiză: comparați datele senzorului cu pragurile așteptate pentru detectarea inundațiilor. Discutați cum senzorul de apă poate fi utilizat în sistemele de detectare a inundațiilor din lumea reală.
Discussion
- Discutați eficacitatea senzorului de apă în detectarea prezenței apei, a nivelurilor de umiditate și chiar a precipitațiilor asociate cu potențialele inundații.
- Evaluați performanța globală a integrării dintre Arduino, senzorul de apă și ecranul LCD.
Întrebări de gândire critică
- Ce alți senzori ați putea folosi pentru a îmbunătăți acuratețea detectării inundațiilor?
- Ce factori ar putea provoca fals pozitive sau negative în sistemul de detectare a inundațiilor?
- Cum ați îmbunătăți fiabilitatea sistemului de detectare a inundațiilor într-o aplicație reală?
- Sugerați cum ar putea fi îmbunătățit sistemul.
03
Integrarea și testarea senzorului MPU6050 pentru detectarea cutremurelor
Obiectiv
Scopul acestui experiment este de a integra senzorul mpu6050 cu un microcontroler Arduino Uno și de a afișa datele senzorului în timp real pe un ecran LCD. Unitatea de măsurare inerțială MPU6050 poate produce valori pentru accelerație și giroscop. Pentru detectarea cutremurelor, accelerația axei Z, dat fiind că MPU6050 este fixat cu partea dreaptă în sus pe o suprafață plană, este convertită de la [m/s2] la [g] prin împărțirea valorii accelerației cu forța gravitațională a pământului (~9,81 m/s2). Această valoare g este apoi clasificată în funcție de scara Mercalli modificată, iar aceste date vor fi utilizate pentru a evalua potențialul pericol de cutremur.
Informații de fundal
- Senzor MPU6050: MPU6050 este un senzor de urmărire a mișcării cu 6 axe care combină giroscopul cu 3 axe (măsură viteza unghiulară) și accelerometrul cu 3 axe (măsură accelerația). Este utilizat pe scară largă în urmărirea mișcării, detectarea orientării și recunoașterea gesturilor. De asemenea, include un procesor digital de mișcare (DMP) încorporat, care poate procesa datele senzorului înainte de a le trimite la un microcontroler, reducând sarcina de calcul.
- Aplicatii:
- Urmărirea mișcării și controlul gesturilor – Folosit în controlerele de jocuri, robotică și sistemele de captare a mișcării umane.
- Stabilizare drone și UAV – Ajută la menținerea stabilă a dronelor prin urmărirea orientării acestora.
- Robotică și sisteme de auto-echilibrare – Esențial pentru aplicațiile robotizate, cum ar fi roboții cu auto-echilibrare și brațele robotizate.
- Dispozitive purtabile și trackere de fitness – Folosite pentru numărarea pașilor, recunoașterea activității și monitorizarea fitnessului.
- Realitate virtuală (VR) și realitate augmentată (AR) – Ajută la urmărirea capului pentru experiențe captivante.
- Telefoane inteligente și tablete – Folosite pentru rotirea automată a ecranului, detectarea tremurării și comenzile jocurilor.
- Aplicații auto – Ajută la controlul stabilității vehiculului, la detectarea accidentelor și la detectarea mișcării.
- Monitorizarea echipamentelor industriale – Folosit în întreținerea predictivă și analiza vibrațiilor.
- Arduino Uno: Arduino Uno este o placă de microcontroler populară care va fi utilizată pentru a interfața cu senzorul mpu6050 și un afișaj LCD. Acesta va procesa datele senzorului și va controla LCD-ul pentru a afișa informații în timp real.
- Ecran LCD: Ecranul LCD va fi folosit pentru a afișa citiri în timp real de la senzorul mpu6050, indicând dacă există un risc potențial de cutremur pe baza prezenței vibrațiilor și a forțelor g.
Măsuri de siguranță
- Deoarece acest experiment implică detectarea vibrațiilor și a forțelor G, includeți o scurtă notă privind asigurarea unei manipulări adecvate atunci când testați senzorul. Amintiți-le elevilor să lucreze întotdeauna într-un mediu sigur.
Echipament necesar
- Hardware:
- Placa Arduino Uno
- Senzor MPU6050
- Ecran LCD 16x2 (I2C sau conexiune paralelă)
- Fire jumper
- Breadboard (opțional)
- Sursa de alimentare pentru Arduino
- Software:
- Arduino IDE (pentru programarea microcontrolerului)
- Dependențe de bibliotecă
- Adafruit MPU6050
- Senzor Adafruit
- LiquidCrystal_I2C
- Sârmă
Instalați Arduino IDE
- Instalați dependențele bibliotecii conform proiectului, așa cum se arată mai jos:
- Descărcați Arduino IDE pentru platforma dvs:
- Windows
- MacOS - Apple Silicon/Intel
- Linux
- Urmați instrucțiunile de instalare și deschideți aplicația
- Conectați placa Arduino UNO la oricare dintre porturile USB de pe computer
- Selectați placa din listă, așa cum se arată mai jos:
- Lipiți codul pentru fiecare proiect găsit în Depozitul GitHub
- G. Încărcați schița pe Arduino UNO selectând butonul
Schema circuitului
- Conexiuni pentru senzorul MQ2:
- VCC de la mpu6050 la 3,3 V pe Arduino
- GND de la mpu6050 la GND pe Arduino
- SCL de la mpu6050 la SCL pe Arduino
- SDA de la mpu6050 la SDA pe Arduino
- Conexiuni pentru ecranul LCD:
- VCC de LCD la 5V pe Arduino
- GND de la LCD la GND pe Arduino
- SDA la A4 (pe Arduino Uno) pentru comunicare I2C
- SCL la A5 (pe Arduino Uno) pentru comunicare I2C
- Conectați senzorul mpu6050 la Arduino Uno așa cum se arată în schema de circuit.
- Conectați ecranul LCD la Arduino Uno prin I2C sau conexiune paralelă conform specificațiilor.
Programarea Arduino
- Deschideți Arduino IDE și scrieți codul pentru a inițializa senzorul și LCD-ul mpu6050.
- Includeți bibliotecile necesare, cum ar fi LiquidCrystal_I2C (pentru LCD) și alte biblioteci legate de senzori, dacă este cazul.
- Scrieți programul pentru a citi datele de la senzorul mpu6050 și afișați valorile pe LCD.
- Implementați logica pentru a evalua dacă citirea senzorului indică prezența nivelurilor de vibrație legate de un potențial cutremur.
Exemplu de cod:
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;
Testare și Calibrare
- Încărcați codul pe placa Arduino și deschideți monitorul serial (pe Mac și/sau Windows) pentru a verifica valorile citite de senzor.
- Testați senzorul expunându-l la diferite niveluri de vibrații și observați afișajul LCD.
Observații
- Înregistrați valorile citite de senzor la diferite concentrații de gaz.
- Observați afișajul LCD pentru a verifica dacă sistemul identifică corect prezența vibrațiilor asociate cu un cutremur.
Rezultate și Analiză
- Rezultate așteptate: Ecranul LCD ar trebui să afișeze în timp real valorile nivelului de vibrație. Atunci când forța G a vibrației depășește un anumit prag, pe ecran ar trebui să apară mesajul „Categoria V”.
- Analiză: Comparați datele furnizate de senzor cu pragurile așteptate pentru detecția cutremurelor. Discutați cum poate fi utilizat senzorul MPU6050 în sisteme reale de detecție a incendiilor.
Discuție
- Discutați eficiența senzorului MPU6050 în detectarea prezenței vibrațiilor și a forțelor G asociate cu un cutremur.
- Evaluați performanța generală a integrării dintre Arduino, senzorul MPU6050 și ecranul LCD.
Întrebări de Gândire Critică
- Cum ați putea modifica circuitul pentru a detecta date suplimentare, cum ar fi azimutul?
- Ce alți senzori ați putea folosi pentru a îmbunătăți acuratețea detecției cutremurelor?
- Ce factori ar putea cauza alarme false pozitive sau negative în sistemul de detecție a cutremurelor?
- Cum ați îmbunătăți fiabilitatea sistemului de detecție a cutremurelor într-o aplicație reală?
- Sugerați modalități prin care sistemul ar putea fi îmbunătățit în continuare.
PREVENT IoT Practical Session (UCLan)
citizensinpower
Created on April 25, 2025
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Customer Service Course
View
Dynamic Visual Course
View
Dynamic Learning Course
View
Akihabara Course
Explore all templates
Transcript
Șablon de capitole - Proiect PREVENT
Sesiune practică IoT
Început
Index
Obiective
Detectare incendiu
Detectarea inundațiilor
Detectarea cutremurelor
Obiective
A se distra!!!
01
Integrarea și testarea senzorului MQ2 pentru detectarea incendiilor
Obiectiv
Scopul acestui experiment este de a integra senzorul de gaz MQ2 cu un microcontroler Arduino Uno și de a afișa datele senzorului în timp real pe un ecran LCD. Senzorul MQ2 va detecta fumul, propanul și alte gaze care pot indica prezența incendiului, iar aceste date vor fi folosite pentru a evalua potențialul pericol de incendiu.
Informații de fundal
Măsuri de siguranță
Echipament necesar
Instalați Arduino IDE
Schema circuitului
Programarea 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; }
Exemplu de cod
#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); }
Testare și calibrare
Observatii
Rezultate și analize
Discuţie
Întrebări de gândire critică
02
Integrarea și testarea senzorului de apă pentru detectarea inundațiilor
Obiectiv
Scopul acestui experiment este de a integra Grove - senzor de precipitații / apă cu un microcontroler Arduino Uno și de a afișa datele senzorului în timp real pe un ecran LCD. Senzorul va detecta prezența precipitațiilor, precum și nivelul apei, iar aceste date vor fi utilizate pentru a evalua potențialul pericol de inundație.
Informații de fundal
Măsuri de siguranță
Echipament necesar
Instalare Arduino IDE
Schema circuitului
Programarea 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); }
Exemplu de cod
#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."); }
Testare și calibrare
Observatii
Rezultate și analize
Discussion
Întrebări de gândire critică
03
Integrarea și testarea senzorului MPU6050 pentru detectarea cutremurelor
Obiectiv
Scopul acestui experiment este de a integra senzorul mpu6050 cu un microcontroler Arduino Uno și de a afișa datele senzorului în timp real pe un ecran LCD. Unitatea de măsurare inerțială MPU6050 poate produce valori pentru accelerație și giroscop. Pentru detectarea cutremurelor, accelerația axei Z, dat fiind că MPU6050 este fixat cu partea dreaptă în sus pe o suprafață plană, este convertită de la [m/s2] la [g] prin împărțirea valorii accelerației cu forța gravitațională a pământului (~9,81 m/s2). Această valoare g este apoi clasificată în funcție de scara Mercalli modificată, iar aceste date vor fi utilizate pentru a evalua potențialul pericol de cutremur.
Informații de fundal
Măsuri de siguranță
Echipament necesar
Instalați Arduino IDE
Schema circuitului
Programarea Arduino
Exemplu de cod:
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;
Testare și Calibrare
Observații
Rezultate și Analiză
Discuție
Întrebări de Gândire Critică