This shows you the differences between two versions of the page.
pm:prj2024:sseverin:robert.nastase0609 [2024/05/27 12:43] robert.nastase0609 [Hardware Design] |
pm:prj2024:sseverin:robert.nastase0609 [2024/05/27 16:28] (current) robert.nastase0609 [Bibliografie/Resurse] |
||
---|---|---|---|
Line 65: | Line 65: | ||
==Schema Electrică a Circuitului din Exteriorul Casei:== | ==Schema Electrică a Circuitului din Exteriorul Casei:== | ||
- | {{ :pm:prj2024:sseverin:schematic_circuit_exterior.png?650 |}} | + | {{ :pm:prj2024:sseverin:smart_home_system_schematic_exterior.png?650 |}} |
==Diagrama Circuitului din Interiorul Casei:== | ==Diagrama Circuitului din Interiorul Casei:== | ||
Line 73: | Line 73: | ||
==Schema Electrică a Circuitului din Interiorul Casei:== | ==Schema Electrică a Circuitului din Interiorul Casei:== | ||
- | {{ :pm:prj2024:sseverin:schematic_circuit_Interior.png?650 |}} | + | {{ :pm:prj2024:sseverin:smart_home_system_schematic_interior.png?650 |}} |
==Stadiul Actual al părții Hardware:== | ==Stadiul Actual al părții Hardware:== | ||
Line 107: | Line 107: | ||
* **Laboratorul 6: Inter-Integrated Circuit (I2C)** -> Utilizat pentru comunicația cu LCD-ul I2C în circuitul interior. | * **Laboratorul 6: Inter-Integrated Circuit (I2C)** -> Utilizat pentru comunicația cu LCD-ul I2C în circuitul interior. | ||
- | **Snippet Code:** | + | ==Descrierea logicii și a metodelor implementate în Circuitul Interior== |
+ | * **setup()** -> folosită pentru inițializarea următoarelor componente: | ||
+ | * Serial Monitor la 9600 Baud Rate pentru debug. | ||
+ | * Senzorul PIR setat ca input și LED-ul, buzzerul setate ca output. | ||
+ | * Butonul setat ca input cu pull-up intern. | ||
+ | * Servomotoare atașate și setate la poziția inițială. | ||
+ | * LCD-ul inițializat și setat să afișeze un mesaj inițial. | ||
+ | * Calibrarea senzorilor timp de 30 secunde. | ||
+ | * **loop()** | ||
+ | * Verifică starea butonului pentru a comuta între activarea/dezactivarea sistemului de securitate. | ||
+ | * Monitorizarea senzorului MQ-2 pentru detectarea gazelor și controlul servomotoarelor. | ||
+ | * Actualizarea afișajului LCD la fiecare 3 secunde pentru a afișa temperatura, umiditatea, valoarea senzorului MQ-2 și starea sistemului de securitate. | ||
+ | * Monitorizarea senzorului PIR și controlul LED-ului și buzzer-ului. | ||
- | <code> | + | ==Descrierea logicii și a metodelor implementate în Circuitul Exterior== |
- | #include <LiquidCrystal_I2C.h> | + | * **setup()** -> folosită pentru inițializarea următoarelor componente: |
- | #include <dht11.h> | + | * Serial Monitor la 9600 Baud Rate pentru debug. |
- | #include <Wire.h> | + | * Senzorul ultrasonic (TRIG_PIN ca OUTPUT și ECHO_PIN ca INPUT). |
- | #include <Servo.h> | + | * Buzzer-ul, LED-ul setate ca OUTPUT și inițializate la LOW. |
- | #include <Adafruit_ST7789.h> | + | * Servomotorul atașat la pinul specific și setat la poziția inițială. |
- | #include <SPI.h> | + | * LCD-ul ST7789 inițializat și setat să afișeze mesajele inițiale. |
- | #define DHT11_PIN 7 | + | * **loop()** |
- | #define MQ2_PIN A0 | + | * Verifică intrările Bluetooth și actualizează starea LED-ului și poziția servomotorului, respectiv a barierei, în funcție de comenzi. |
- | #define LED_PIN 13 | + | * Măsoară distanța folosind senzorul ultrasonic și afișează pe LCD. |
- | #define PIR_SENSOR 2 | + | * Actualizează starea de securitate pe baza distanței măsurate. |
- | #define TFT_CS 10 | + | |
- | #define TFT_RST 9 // Can also be set to -1 and connected to Arduino's reset | + | |
- | #define TFT_DC 8 | + | |
- | // Temperature & Humidity Sensor - DHT11 | + | ==Descrierea logicii din aplicația de control a Circuitului Exterior== |
- | dht11 DHT11_PIN; | + | |
- | // Servomotors | + | {{ :pm:prj2024:sseverin:aplicatie_smart_home_system.png?650 |}} |
- | Servo myservo1; | + | |
- | Servo myservo2; | + | |
- | // Gas Sensor - MQ2 | + | ===== Rezultate Obţinute ===== |
- | int mq2Pin = MQ2_PIN; | + | |
- | // int pos = 0; | + | ==Testul Final al Implementarii Proiectului== |
- | // LCD Display | + | Testul final a constat în verificarea funcționalității tuturor sistemelor integrate atât în circuitul din interiorul casei, cât și în circuitul din exteriorul casei. |
- | LiquidCrystal_I2C lcd(0x27, 16, 2); | + | |
- | // Buzzer | + | {{ :pm:prj2024:sseverin:smart_home_system_test_final.jpeg?650 |}} |
- | const int buzzer = 8; | + | |
- | // PIR Module | + | ==Rezultatul final (1) - Interior == |
- | int led = LED_PIN | + | |
- | int sensor = PIR_SENSOR; | + | |
- | int state = LOW; | + | |
- | int val = 0; | + | |
- | // Ultrasonic Sensor | + | {{ :pm:prj2024:sseverin:smart_home_system_fara_acoperis.jpeg?650 |}} |
- | const int trigPin = 5; | + | |
- | const int echoPin = 6; | + | |
- | long duration; | + | |
- | int distance; | + | |
- | // 240x320 LCD Display | + | ==Rezultatul final (2) - Exterior == |
- | Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); | + | |
- | void setup() { | + | {{ :pm:prj2024:sseverin:smart_home_system_cu_acoperis.jpeg?650 |}} |
- | Serial.begin(9600); | + | |
- | pinMode(mq2Pin, INPUT); | + | ===== Concluzii ===== |
- | pinMode(led, OUTPUT); | + | "Smart Home System" reprezintă o metodă de integrare a diferitelor tehnologii pentru a îmbunătăți securitatea și confortul unei locuințe. Utilizând o varietate de senzori și componente electronice, sistemul monitorizează și reacționează la diverse condiții din jurul casei, precum și la cerințele celui care îl folosește. |
- | pinMode(sensor, INPUT); | + | |
- | pinMode(buzzer, OUTPUT); | + | Implementarea oferă un sistem de securitate cuprinzător atât prin intermediul senzorilor care pot detecta mișcări nedorite în cadrul proprietății, cât și prin intermediul senzorului care activează sistemul automat de aerisire a casei. Integrarea ecranelor LCD permite afișarea în timp real a informațiilor relevante, facilitând utilizatorului monitorizarea constantă a stării sistemului. Controlul servomotoarelor și al altor dispozitive prin intermediul semnalelor PWM și al comunicației Bluetooth adaugă un nivel suplimentar de funcționalitate și flexibilitate. De asemenea, sistemul demonstrează eficiența comunicării seriale pentru debug și control. |
- | lcd.init(); | + | În concluzie, acest proiect ilustrează cum tehnologia poate fi folosită pentru a crea soluții interconectate pentru securitatea și gestionarea unei locuințe, oferind o bază solidă pentru extinderea și îmbunătățirea viitoarelor sisteme de automatizare casnică. |
- | lcd.backlight(); | + | ===== Download & GitHub Repository ===== |
- | lcd.setCursor(0, 0); | + | |
- | lcd.print("Hello!"); | + | |
- | lcd.setCursor(0, 1); | + | |
- | lcd.print("Welcome Home!"); | + | |
- | myservo1.attach(9); | + | <note> |
- | myservo2.attach(10); | + | Proiectul care constă în aplicație pentru dispozitive Android, cod sursă și alte resurse grafice sunt disponibile pe [[https://github.com/robert-nst/Smart-Home-System|GitHub]]. |
- | + | ||
- | pinMode(trigPin, OUTPUT); | + | |
- | pinMode(echoPin, INPUT); | + | |
- | + | ||
- | tft.init(240, 320); | + | |
- | tft.fillScreen(ST77XX_BLACK); | + | |
- | + | ||
- | tft.setCursor(0, 10); | + | |
- | tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK); | + | |
- | tft.setTextSize(2); | + | |
- | tft.println("Hello, ST7789!"); | + | |
- | + | ||
- | tft.drawRect(10, 50, 220, 40, ST77XX_RED); | + | |
- | + | ||
- | tft.fillCircle(120, 160, 30, ST77XX_BLUE); | + | |
- | + | ||
- | tft.drawLine(0, 250, 240, 320, ST77XX_GREEN); | + | |
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | Serial.println(); | + | |
- | + | ||
- | // Temperature & Humidity Sensor - DHT11 | + | |
- | int chk = DHT11.read(DHT11PIN); | + | |
- | + | ||
- | Serial.print("Humidity (%): "); | + | |
- | Serial.println((float)DHT11.humidity, 2); | + | |
- | + | ||
- | Serial.print("Temperature (C): "); | + | |
- | Serial.println((float)DHT11.temperature, 2); | + | |
- | + | ||
- | // PIR Module | + | |
- | int sensorValue = analogRead(mq2Pin); // Read the analog value from MQ-2 sensor | + | |
- | float voltage = sensorValue * (5.0 / 1023.0); // Convert the analog reading to voltage | + | |
- | Serial.print("Sensor Value: "); | + | |
- | Serial.print(sensorValue); | + | |
- | Serial.print(", Voltage: "); | + | |
- | Serial.println(voltage); | + | |
- | + | ||
- | delay(2000); | + | |
- | + | ||
- | val = digitalRead(sensor); | + | |
- | if (val == HIGH) { | + | |
- | digitalWrite(led, HIGH); | + | |
- | delay(100); | + | |
- | + | ||
- | if (state == LOW) { | + | |
- | Serial.println("Motion detected!"); | + | |
- | state = HIGH; | + | |
- | } | + | |
- | } | + | |
- | else { | + | |
- | digitalWrite(led, LOW); | + | |
- | delay(200); | + | |
- | + | ||
- | if (state == HIGH){ | + | |
- | Serial.println("Motion stopped!"); | + | |
- | state = LOW; | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | // Buzzer | + | |
- | tone(buzzer, 1000); | + | |
- | delay(1000); | + | |
- | noTone(buzzer); | + | |
- | delay(1000); | + | |
- | + | ||
- | // Servomotors | + | |
- | for (pos = 0; pos <= 90; pos += 1) { | + | |
- | myservo1.write(pos); | + | |
- | myservo2.write(pos); | + | |
- | delay(15); | + | |
- | } | + | |
- | + | ||
- | for (pos = 90; pos >= 0; pos -= 1) { | + | |
- | myservo1.write(pos); | + | |
- | myservo2.write(pos); | + | |
- | delay(15); | + | |
- | } | + | |
- | + | ||
- | // Ultrasonic Sensor | + | |
- | digitalWrite(trigPin, LOW); | + | |
- | delayMicroseconds(2); | + | |
- | digitalWrite(trigPin, HIGH); | + | |
- | delayMicroseconds(1000); | + | |
- | digitalWrite(trigPin, LOW); | + | |
- | duration = pulseIn(echoPin, HIGH); | + | |
- | distance = duration * 0.034 / 2; | + | |
- | Serial.print("Distance: "); | + | |
- | Serial.println(distance); | + | |
- | } | + | |
- | </code> | + | |
- | + | ||
- | + | ||
- | ===== Rezultate Obţinute ===== | + | |
- | + | ||
- | <note tip> | + | |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
</note> | </note> | ||
- | ===== Concluzii ===== | + | <note>De asemenea, puteți descărca direct întreg conținutul proiectului accesând: {{:pm:prj2024:sseverin:smart-home-system.zip|}}</note> |
- | ===== Download ===== | ||
- | <note warning> | + | ===== Bibliografie/Resurse ===== |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | ==Resurse Software== |
- | </note> | + | * https://docs.arduino.cc/learn/microcontrollers/analog-input/ |
+ | * https://docs.arduino.cc/learn/microcontrollers/analog-output/ | ||
+ | * https://www.arduino.cc/reference/en/libraries/liquidcrystal-i2c/ | ||
+ | * https://www.arduino.cc/reference/en/libraries/dht11/ | ||
+ | * https://www.arduino.cc/reference/en/language/functions/communication/spi/ | ||
+ | * https://www.arduino.cc/reference/en/libraries/adafruit-st7735-and-st7789-library/ | ||
+ | * https://www.arduino.cc/reference/en/libraries/adafruit-gfx-library/ | ||
+ | * https://ocw.cs.pub.ro/courses/pm/lab/lab0-2023 | ||
+ | * https://ocw.cs.pub.ro/courses/pm/lab/lab1-2023 | ||
+ | * https://ocw.cs.pub.ro/courses/pm/lab/lab2-2023 | ||
+ | * https://ocw.cs.pub.ro/courses/pm/lab/lab3-2023-2024 | ||
+ | * https://ocw.cs.pub.ro/courses/pm/lab/lab4-2023-2024 | ||
+ | * https://ocw.cs.pub.ro/courses/pm/lab/lab5-2023-2024 | ||
+ | * https://ocw.cs.pub.ro/courses/pm/lab/lab6-2023-2024 | ||
+ | * https://ai2.appinventor.mit.edu/ | ||
- | ===== Jurnal ===== | + | ==Resurse Hardware== |
- | + | * https://docs.arduino.cc/learn/electronics/servo-motors/ | |
- | <note tip> | + | * https://docs.arduino.cc/learn/electronics/lcd-displays/ |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * https://support.arduino.cc/hc/en-us/articles/4403050020114-Troubleshooting-PIR-Sensor-and-sensitivity-adjustment |
- | </note> | + | * https://newbiely.com/tutorials/arduino-nano/arduino-nano-gas-sensor |
- | + | * https://docs.arduino.cc/learn/communication/bluetooth/ | |
- | ===== Bibliografie/Resurse ===== | + | * https://docs.arduino.cc/learn/electronics/servo-motors/ |
- | + | * https://www.waveshare.com/wiki/2.4inch_LCD_Module | |
- | <note> | + | * https://maxbotix.com/blogs/blog/how-ultrasonic-sensors-work |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | |
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||