This shows you the differences between two versions of the page.
pm:prj2025:abirlica:macedoniu.pacuraru [2025/05/29 20:00] macedoniu.pacuraru [Hardware Design] |
pm:prj2025:abirlica:macedoniu.pacuraru [2025/05/29 22:20] (current) macedoniu.pacuraru [Bibliography/Resources] |
||
---|---|---|---|
Line 33: | Line 33: | ||
{{:pm:prj2025:abirlica:schematicdefoc.png?500|}} | {{:pm:prj2025:abirlica:schematicdefoc.png?500|}} | ||
+ | |||
+ | Schematic made in Fusion 360. The ESP8266 was made manually because there seems to be no schematic for it on the internet. | ||
===Connections Between Components=== | ===Connections Between Components=== | ||
Line 44: | Line 46: | ||
- **Button (Reset Alarm)** | - **Button (Reset Alarm)** | ||
- | * One pin → pin D1 (GPIO5) of the ESP8266 | + | * First pin → pin D1 (GPIO5) of the ESP8266 |
- | * Other pin → GND | + | * Second pin → 3.3V |
- | * Software configuration: internal pull-up resistor is enabled with pinMode(D1, INPUT_PULLUP); | + | * Third pin → GND |
- | * Purpose: Temporarily stops the alarm and resets the alert state. | + | * Software configuration: internal pull-up resistor is enabled with pinMode(D1, INPUT_PULLUP); |
- **Passive Buzzer** | - **Passive Buzzer** | ||
* Signal pin → pin D0 (GPIO16) | * Signal pin → pin D0 (GPIO16) | ||
- | * GND → GND | + | * GND → GND |
- | * Purpose: Emits a warning sound when the temperature exceeds the threshold. Controlled with tone() and noTone(). | + | |
- **SIM800L GSM Module** | - **SIM800L GSM Module** | ||
Line 59: | Line 60: | ||
* TX (SIM800L output) → pin D7 (ESP8266 RX) | * TX (SIM800L output) → pin D7 (ESP8266 RX) | ||
* RX (SIM800L input) → pin D8 (ESP8266 TX) | * RX (SIM800L input) → pin D8 (ESP8266 TX) | ||
- | * Note: A voltage divider is recommended on ESP8266 TX → SIM800L RX, as the ESP outputs 3.3V and the SIM800L is sensitive. | ||
* VCC → separate 3.7V power source (Li-ion battery) or stabilized step-down converter | * VCC → separate 3.7V power source (Li-ion battery) or stabilized step-down converter | ||
- | * GND → Common GND with ESP8266 | + | * GND → Common GND with ESP8266 |
- | * Purpose: Sends a warning SMS only once for each alarm trigger. | + | <note> |
+ | |||
+ | * Note: A voltage divider is recommended on ESP8266 TX → SIM800L RX, as the ESP outputs 3.3V and the SIM800L is sensitive. | ||
+ | </note> | ||
- **ESP8266 (NodeMCU)** | - **ESP8266 (NodeMCU)** | ||
- | * USB → PC (for power and serial communication) | + | * USB → PC (for power and serial communication) |
- | * Purpose: Acts as the system's control unit. It receives data from the sensor, decides whether to activate the alarm, and communicates via GSM. | + | |
===== Software Design ===== | ===== Software Design ===== | ||
- | The firmware is developed in the Arduino IDE targeting the ESP8266 platform. It follows these steps: | + | The firmware is developed in the Arduino IDE targeting the ESP8266 platform. |
+ | |||
+ | ===Purpose of the Code=== | ||
+ | |||
+ | - **DHT11 Temperature Sensor** | ||
+ | * Reads the ambient temperature through digital pin D2 (GPIO4). | ||
+ | * If the temperature exceeds 26.1°C, an alarm state is triggered. | ||
+ | * The reading is done using the `Adafruit_Sensor`, `DHT`, and `DHT_U` libraries. | ||
+ | * Temperature is read periodically (every ~0.5 seconds) and logged to the serial monitor. | ||
+ | |||
+ | - **Alarm System (Passive Buzzer and Button)** | ||
+ | * The buzzer is connected to pin D0 (GPIO16) and activated using the `tone()` function when an alarm is triggered. | ||
+ | * A push button connected to D1 (GPIO5) is configured with an internal pull-up resistor (`INPUT_PULLUP`). | ||
+ | * When the button is pressed, the alarm is silenced, and the system enters a cooldown period of 1 minute to prevent retriggering. | ||
+ | * `alarmActive` and `smsSent` boolean flags are used to manage system state. | ||
+ | |||
+ | - **SIM800L GSM Module** | ||
+ | * Communicates with the ESP8266 via `SoftwareSerial` on pins D7 (RX) and D8 (TX). | ||
+ | * During setup, AT commands are used to initialize the module and verify signal/SIM status. | ||
+ | * Sends an SMS alert **once** per alarm event using the `sendSMS()` function. | ||
+ | * The SMS content is: *"ALERTA: Temperatura depaseste 26.1C!"* | ||
+ | |||
+ | ===Flow Overview=== | ||
+ | |||
+ | * Upon startup: | ||
+ | - Serial communication is initialized. | ||
+ | - The DHT11 and SIM800L modules are set up. | ||
+ | - AT commands check SIM status, signal quality, and configure SMS mode. | ||
+ | * In the main loop: | ||
+ | - The system reads temperature from the DHT11 sensor. | ||
+ | - If temperature > 26.1°C and no alarm is active: | ||
+ | - The buzzer is activated. | ||
+ | - An SMS is sent (only once per event). | ||
+ | - If the user presses the button: | ||
+ | - The alarm stops. | ||
+ | - A 60-second cooldown prevents immediate retriggering. | ||
+ | * Messages and debug information are printed to the serial monitor for monitoring and troubleshooting. | ||
+ | |||
+ | **Libraries Used** | ||
+ | |||
+ | - `Adafruit_Sensor.h`, `DHT.h`, `DHT_U.h`: For interfacing with the DHT11 temperature sensor. | ||
+ | - `SoftwareSerial.h`: Enables serial communication between the ESP8266 and the SIM800L GSM module. | ||
- | 1. Initialize the DHT11 sensor, buzzer pin, and UART communication with the SIM800L. | ||
- | 2. Enter a loop where temperature is read every two seconds. | ||
- | 3. If the temperature reading exceeds 50 °C, activate the buzzer and transmit an SMS alert via the GSM module using standard AT commands. | ||
- | 4. Otherwise, keep the buzzer silent and continue monitoring. | ||
===== Results ===== | ===== Results ===== | ||
+ | {{:pm:prj2025:abirlica:pozaresults.jpeg?500|}} | ||
===== Conclusions ===== | ===== Conclusions ===== | ||
+ | Working on this project was both challenging and fun. At first, I wasn’t sure if everything would work together, especially the SIM800L module, which needed a lot of trial and error to set up properly. I also had to be careful with wiring and power, since I didn’t want to damage any components. | ||
+ | |||
+ | I learned a lot about how to use interrupts, how UART communication works, and how to read data from the DHT11 sensor. I also got some practice debugging both hardware and software issues, which sometimes took a while but felt great once they were solved. | ||
+ | |||
+ | In the end, I managed to build a system that detects high temperatures, triggers an alarm, and sends an SMS alert. It even has a button to silence the alarm, which works using interrupts. | ||
+ | |||
+ | Even though it’s a simple version, I think it’s a good starting point, and I’m happy with how it turned out. With more time, I’d like to improve the design and maybe add more features. Overall, it was a great learning experience. | ||
===== Bibliography/Resources ===== | ===== Bibliography/Resources ===== | ||
+ | [[https://newbiely.com/tutorials/esp8266/esp8266-dht11|ESP8266 with DHT11 – Newbiely guide]] | ||
+ | – A detailed tutorial on how to connect and read temperature from a DHT11 sensor using the ESP8266. | ||
+ | |||
+ | [[https://lastminuteengineers.com/sim800l-gsm-module-arduino-tutorial/|SIM800L GSM Module with Arduino – Last Minute Engineers]] | ||
+ | – A complete guide for using the SIM800L module to send SMS messages via AT commands. | ||
+ | |||
+ | [[https://arduino-esp8266.readthedocs.io/en/latest/reference.html|ESP8266 Interrupts – Official Documentation]] | ||
+ | – Official Arduino documentation on using interrupts. | ||
+ | [[https://www.theengineeringprojects.com/2020/09/lm2596-buck-converter-datasheet-pinout-features-applications.html|LM2596 datasheet and guide]] | ||
+ | – Technical overview of the LM2596 buck converter module |