Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:sseverin:ana_maria.mirza [2024/05/26 07:33]
ana_maria.mirza [Implementare]
pm:prj2024:sseverin:ana_maria.mirza [2024/05/27 15:52] (current)
ana_maria.mirza [Implementare]
Line 51: Line 51:
 ==== Implementare ==== ==== Implementare ====
  
-Prima etapă constă în inițializarea pinilor ​folosițde fiecare componentă: ​butoane, ​buzzer, senzor de proximitate,​ modulul gps și modulul ​gsm, plus crearea unor variabile ​pentru ​fluxul programului.+Configurare inițială constă în inițializarea pinilor ​pentru senzorul ultrasonic, buzzer și butoane, ​precum ​și pinii pentru gps si gsm Arduino ​pentru ​a semnaliza starea de funcționare. Pentru cele două butoane au fost setate întreruperi pentru a putea porni și opri programul și pentru a activa/​dezactiva modul de alarmă.
  
-<code cpp>+În bucla principală a programului,​ dacă butonul de start a fost apăsat, LED-ul integrat se aprinde și funcția principală project() este apelată pentru a gestiona măsurătorile și alertele.Dacă programul nu este pornit, LED-ul integrat rămâne stins și se așteaptă apăsarea unui buton pentru a începe. Astfel, device-ul este în stand-by până când butonul de start este apăsat.
  
-const int trigPin = 8+<​code>​ 
-const int echoPin ​9;+void loop() 
 +
 +  if (start_program) { 
 +    digitalWrite(LED_BUILTIN,​ HIGH)
 +    ​project();​ 
 +  } else { 
 +    Serial.println("​Press to start"​);​ 
 +    if (button_pressed ​== false) { 
 +      noTone(buzzer); 
 +    }
  
-const int buzzer = 10;+    // set led off 
 +    digitalWrite(LED_BUILTIN,​ LOW); 
 +    delay(300);​ 
 +  } 
 +
 +</​code>​
  
-const int button ​2; +=== Funcția project() ===
-const int button_start ​3;+
  
-// gps  +În funcția prject() este implementată funcționalitatea device-ului.
-const int Rx_pin = 6; +
-const int Tx_pin = 7; +
-SoftwareSerial SerialGPS(Rx_pin, Tx_pin)+
-TinyGPSPlus gps;+
  
-volatile double longitude = 0+<​code>​ 
-volatile double latitude = 0;+void project() { 
 +  digitalWrite(trigPin,​ LOW); 
 +  delayMicroseconds(10);​ 
 +  digitalWrite(trigPin,​ HIGH); 
 +  delayMicroseconds(10)
 +  ​digitalWrite(trigPin,​ LOW);
  
-// gsm +  duration ​pulseIn(echoPin,​ HIGH)
-const int Rx_pin_gsm ​4+  long r 3.4 * duration / 2    ​ 
-const int Tx_pin_gsm ​5+  float distance = r / 100.00;
-SoftwareSerial sgsm(Rx_pin_gsm,​ Tx_pin_gsm);+
  
-// variables +  ​// Prints the distance on the Serial Monitor 
-const int time_delay ​= 10; +  ​Serial.print("​Distance:​ "); 
-long durationr+  Serial.println(distance);​ 
-float distance+  delay(300);​ 
-volatile bool start_program ​false+  
-volatile bool button_pressed ​false;+  if (distance < 10 && distance > 0) { 
 +    noTone(buzzer);​ 
 + 
 +    Serial.println("​0 < distance < 5"); 
 +  } else if (distance >= 10) { 
 +    Serial.println("​distance >= 10")
 + 
 +    if (button_pressed == true) 
 +      tone(buzzer10)
 +    else  
 +      noTone(buzzer)
 + 
 +    // send message 
 +    send_sms("​Don'​t forget me!"​);​ 
 +  } else { 
 +    noTone(buzzer);​ 
 +  } 
 + 
 +  // listen for messages 
 +  sgsm.listen();​ 
 +  if (sgsm.available() > 0) { 
 +    String c sgsm.readString()
 +    ​c.trim();​ 
 + 
 +    // send sms with location on request 
 +    if (c.indexOf("​GET-GPS"​) >0) { 
 +      send_location(); 
 +    } 
 +    delay(100);​ 
 +  } 
 +}
 </​code>​ </​code>​
  
-Variabile ''​duration'' ​și ''​distance''​ sunt folosite ​pentru a măsura distanța de catre senzoriar cele două variabile boolene sunt folosite ​pentru a opri/porni programul din butonUn buton va porni și va opri programuliar al doilea*buton_pressed* va activa/​dezactvia ​modul alarmă, ​unde buzzer-ul ​va scoate un sunet atunci când nu mai detectează nicio persoană în apropiere.+Senzorul ultrasonic HC-SR04 trimite un puls și măsoară timpul de revenire ​pentru ​a calcula distanța față de obiectul monitorizat,​ după care distanța măsurată este afișată pe monitorul serial. Dacă distanța ​este mai mică de 10 cmbuzzerul este oprit pentru a semnaliza că obiectul este aproapeDacă în schimb distanța este mai mare sau egală cu 10 cm și modul alarmă este activatbuzzerul este pornit pentru a alerta utilizatorul că se îndepărtează de obiect. De asemenease trimite o notificare sms că obiectul a fost uitat. Dacă modul alarmă ​nu este activat, buzzer-ul ​rămâne silențios și se trimite doar notificarea.  
 + 
 +Programul de asemenea verifică regulat dacă primește o cerere SMS cu textul "​GET-GPS",​ și trimite locația curentă prin SMS folosind coordonatele GPS obținuteLocație este transmisă sub forma unui url google maps folosind latitudinea și longitudinea de la gps. 
 + 
 +Programul de asemenea citește de la gps locația transmisă, doar la nevoie, pentru trimite locația gps exactă a obiectului, pentru a eficientiza consumul bateriei. 
 + 
 +<​code>​ 
 +void get_location() { 
 +  // Get location via gps // 
 +  if(SerialGPS.available() > 0) { 
 +    Serial.println("​GPS AVAILABLE"​);​ 
 + 
 +    if (gps.encode(SerialGPS.read())) { 
 +      latitude = gps.location.lat();​ 
 +      longitude = gps.location.lng();​ 
 + 
 +      Serial.print(F("​- latitude: ")); 
 +      Serial.println(latitude);​ 
 + 
 +      Serial.print(F("​- longitude: ")); 
 +      Serial.println(longitude);​ 
 +    } 
 +  } 
 +
 +</​code>​ 
 + 
 +<​code>​ 
 +void send_location() { 
 +      // update location information first 
 +      get_location();​ 
 + 
 +      //Send google maps location via text. 
 +      String googleMapsUrl = "​https://​www.google.com/​maps/?​q=";​ 
 +      googleMapsUrl += String(latitude,​ 6); 
 +      googleMapsUrl += ",";​ 
 +      googleMapsUrl += String(longitude,​ 6); 
 + 
 +      send_sms(googleMapsUrl);​ 
 +
 +</​code>​ 
 + 
 +<​code>​ 
 +void send_sms(String text) { 
 +  sgsm.print("​\r"​);​ 
 +      delay(1000);​ 
 +      sgsm.print("​AT+CMGF=1\r"​);​ 
 +      delay(1000);​ 
 +      /*Replace XXXXXXXXXX to 10 digit mobile number & 
 +        ZZ to 2 digit country code*/ 
 +      sgsm.print("​AT+CMGS=\"​+ZZXXXXXXXXXX\"​\r"​);​ 
 +      delay(1000);​ 
 +      //The text of the message to be sent. 
 +      sgsm.print(text);​ 
 +      delay(1000);​ 
 +      sgsm.write(0x1A);​ 
 +      delay(1000);​ 
 +
 +</​code>​
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +În urma testelor, ​rezultatele obținute sunt foarte bune pe partea de măsurare a distanței și alerta atunci când nu mai este detectat un obiect ​în apropiere. Modul alarmă funcționează conform așteptărilor,​ în schimb, gps-ul are probleme în preluarea locației de la sateliți în funcție de locul în care este și nu am putut obține decât informații cu privire la data și oră prin modulul gps.
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Deși pare ușor la prima vedere, totuși acest m-a învățat că electronica nu funcționează mereu așa cum mă aștept, conform specificațiilor,​ și erorile din diverse cauze își fac apariția la tot pasul. Am învățat să fac debug folosind print-uri pe serială și led-uri, și am mai învățat și că un cod funcțional și corect poate buși memoria unui microcontroler din motive nebănuite, fix când te aștepți mai puțin. ​
 ===== Download ===== ===== Download =====
  
-<note warning>​ +{{:pm:​prj2024:​sseverin:​forget_me_not.zip|}}
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, 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**. 
-</​note>​ 
  
-===== Jurnal ===== 
- 
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  * [[https://​lastminuteengineers.com/​sim800l-gsm-module-arduino-tutorial/​|GSM Module Arduino Tutorial]] 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * [[https://​randomnerdtutorials.com/​guide-to-neo-6m-gps-module-with-arduino/​|Guide to NEO6M GPS Module with Arduino]] 
-</note> +  ​[[https://​https://​projecthub.arduino.cc/​Isaac100/​getting-started-with-the-hc-sr04-ultrasonic-sensor-7cabe1|Getting started with HC-SR04 ultrasonic sensor]] 
- +  ​[[https://​https://​www.bing.com/​search?​q=how+to+connect+buzzer+to+arduino&​cvid=1c4c009867bf4e19a23c8417a664ee98&​gs_lcrp=EgZjaHJvbWUqBggAEAAYQDIGCAAQABhAMgYIARBFGDkyBggCEAAYQDIGCAMQABhAMgYIBBAAGEAyBggFEAAYQDIGCAYQABhAMgYIBxAAGEAyBggIEAAYQNIBCDM1MjhqMGo0qAIAsAIA&​FORM=ANAB01&​DAF0=1&​PC=EDGEDB/​|How to use a buzzer with Arduino]] 
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</a></html>+  ​[[https://​mechatrofice.com/​arduino/​send-gps-location-via-sms|Send GPS locatino via SMS]] 
 +  ​[[https://​lastminuteengineers.com/​sim800l-gsm-module-arduino-tutorial/​|SIM800L GPS module Arudino tutorial]] 
 +  ​[[https://​arduinogetstarted.com/​tutorials/​arduino-gps|Arduino GPS tutorial]] 
 +  * [[https://​howtomechatronics.com/​tutorials/​arduino/​ultrasonic-sensor-hc-sr04/​|Ultrasonic Sensor HC-SR04]] 
 +  * [[https://www.instructables.com/​External-Interrupt-in-arduino/​|External Interrupt in Arduino]]
  
pm/prj2024/sseverin/ana_maria.mirza.1716698026.txt.gz · Last modified: 2024/05/26 07:33 by ana_maria.mirza
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0