-
Notifications
You must be signed in to change notification settings - Fork 0
/
arduino_3.ino
138 lines (117 loc) · 3.29 KB
/
arduino_3.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MPU6050.h>
#define TEMPERATURE_PIN A0
#define GAS_PIN A1
#define HUMIDITY_PIN 2
//#define DHT_PIN 2
//#define DHT_TYPE DHT11
#define BUZZER_PIN 8
#define TEMP_LED_PIN 9
#define DATA_LED_PIN 10
#define GAS_LED_PIN 11
LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the LCD address to 0x27 for a 16 chars and 2 line display
MPU6050 mpu;
//DHT dht(DHT_PIN, DHT_TYPE);
int16_t ax, ay, az;
int16_t gx, gy, gz;
void setup() {
Serial.begin(9600);
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on the backlight
lcd.begin(16, 2); // Specify the number of columns and rows
pinMode(BUZZER_PIN, OUTPUT);
pinMode(TEMP_LED_PIN, OUTPUT);
pinMode(DATA_LED_PIN, OUTPUT);
pinMode(GAS_LED_PIN, OUTPUT);
digitalWrite(TEMP_LED_PIN, LOW);
digitalWrite(DATA_LED_PIN, LOW);
digitalWrite(GAS_LED_PIN, LOW);
Wire.begin();
mpu.initialize();
if (mpu.testConnection()) {
Serial.println("MPU6050 Connection successful");
} else {
Serial.println("MPU Connection failed");
}
}
void loop() {
float temperature = getTemperature();
float humidity = getHumidity();
float gas = getGas();
bool fallDetected = checkForFall();
// Format the data string in the required format
String data = "field1=" + String(temperature) + "&field2=" + String(humidity) + "&field3=" + String(gas) + "&field4=" + String(fallDetected ? "1" : "0");
// Send sensor data over serial to NodeMCU
Serial.println(data);
// Indicate data transmission
digitalWrite(DATA_LED_PIN, HIGH);
delay(100);
digitalWrite(DATA_LED_PIN, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print("%");
if (gas > 3) {
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(GAS_LED_PIN, HIGH);
lcd.setCursor(0, 1);
lcd.print("Warning: Gas!");
} else {
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(GAS_LED_PIN, LOW);
}
delay(1000);
// Temperature check
if (temperature > 35) {
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(TEMP_LED_PIN, HIGH);
lcd.setCursor(0, 1);
lcd.print("Warning: Temperature!");
} else {
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(TEMP_LED_PIN, LOW);
}
delay(2000);
// Fall Detection
if (fallDetected) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Warning: Fall!");
digitalWrite(BUZZER_PIN, HIGH);
}
delay(1000);
}
float getTemperature() {
int sensorValue = analogRead(TEMPERATURE_PIN);
float voltage = sensorValue * (5.0 / 1023.0);
float temperatureC = (voltage - 0.5) * 100;
if(temperatureC < 0){
return temperatureC * -1;
}
return temperatureC ;
}
float getHumidity() {
int sensorValue = analogRead(HUMIDITY_PIN);
float voltage = sensorValue * (5.0 / 1023.0);
float humidity = voltage * 100 / 5; // Assuming humidity sensor outputs 0-5V
return humidity;
}
float getGas() {
int sensorValue = analogRead(GAS_PIN);
float voltage = sensorValue * (5.0 / 1023.0);
return voltage;
}
bool checkForFall() {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
int threshold = 25000; // change according to your use case
if (abs(ax) > threshold || abs(ay) > threshold || abs(az) > threshold) {
return true;
}
return false;
}