Differences

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

Link to this comparison view

pm:prj2024:tdicu:maria.movileanu [2024/05/05 23:44]
maria.movileanu
pm:prj2024:tdicu:maria.movileanu [2024/05/27 08:58] (current)
maria.movileanu [Software Design]
Line 3: Line 3:
 ===== Introducere ===== ===== Introducere =====
  
-Proiectul reprezintă un dispozitiv care poate **măsura** cu acuratețe **înălțimea** persoanei care stă sub acesta. Mi s-a părut interesantă folosirea **senzorilor** într-un mod care ține de mai mult decât doar mișcare, iar astfel obținem o unealtă folositoare pentru **colectarea de date**, fie într-un scop mai larg (măsurarea mediei de înălțime a unui sample group) fie unul mai simplu (observarea creșterii unui copil și asigurarea că aceasta are loc în parametri normali). Aceste date vor putea, după, să fie accesate și organizate printr-o **aplicație** . +Proiectul reprezintă un dispozitiv care poate **măsura** cu acuratețe **înălțimea** persoanei care stă sub acesta. 
-<note tip>At the time of writing, dezbat dacă pot implementa diverse metode de centralizare al datelor, de ex. unde se încadrează înălțimea măsurată în media de vârstă.</​note>​+\\ 
 +Mi s-a părut interesantă folosirea **senzorilor** într-un mod care ține de mai mult decât doar mișcare, iar astfel obținem o unealtă folositoare pentru **colectarea de date**, fie într-un scop mai larg (măsurarea mediei de înălțime a unui sample group) fie unul mai simplu (observarea creșterii unui copil și asigurarea că aceasta are loc în parametri normali). Aceste date vor putea, după, să fie accesate și organizate printr-o **aplicație** .
  
 ===== Descriere generală ===== ===== Descriere generală =====
Line 16: Line 17:
 Inițial, **senzorul laser** va înregistra înălțimea la care se află față de sol. Printr-un calcul de forma h<​sub>​sol</​sub>​ - h<​sub>​obiect</​sub>​ vom obține înălțimea dorită (h reprezintă distanța de la senzor la sol, respectiv obiect). La plasarea unui obiect/​individ sub senzor, **led-ul** și **buzzer-ul** se vor activa, indicând detecția acestuia, iar **display-ul** va afișa înălțimea. Prin apăsarea unui **buton**, se vor trimite datele obținute prin **Bluetooth** pe aplicație, unde vor putea fi accesate în mod convenabil. **Microcontroller-ul** este center piece-ul ce leagă toate acestea. Inițial, **senzorul laser** va înregistra înălțimea la care se află față de sol. Printr-un calcul de forma h<​sub>​sol</​sub>​ - h<​sub>​obiect</​sub>​ vom obține înălțimea dorită (h reprezintă distanța de la senzor la sol, respectiv obiect). La plasarea unui obiect/​individ sub senzor, **led-ul** și **buzzer-ul** se vor activa, indicând detecția acestuia, iar **display-ul** va afișa înălțimea. Prin apăsarea unui **buton**, se vor trimite datele obținute prin **Bluetooth** pe aplicație, unde vor putea fi accesate în mod convenabil. **Microcontroller-ul** este center piece-ul ce leagă toate acestea.
  
-<note tip>​Ideal,​ realizez cererea datelor tot prin aplicație, deoarece poziționarea butonului ar putea fi inconvenientă.</​note>​+<note tip>​Ideal,​ realizez cererea datelor tot prin aplicație, deoarece poziționarea butonului ar putea fi inconvenientă. În acel caz, butonul ar putea fi folosit pentru resetarea înălțimii față de sol în caz că dispozitivul este mutat.</​note>​
  
 ===== Hardware Design ===== ===== Hardware Design =====
   * [[https://​store.arduino.cc/​products/​arduino-uno-rev3|Arduino UNO]]   * [[https://​store.arduino.cc/​products/​arduino-uno-rev3|Arduino UNO]]
   * [[https://​www.st.com/​en/​imaging-and-photonics-solutions/​vl53l0x.html|senzor ToF VL53L0X]]   * [[https://​www.st.com/​en/​imaging-and-photonics-solutions/​vl53l0x.html|senzor ToF VL53L0X]]
-  * [[https://​projecthub.arduino.cc/​arduino_uno_guy/​i2c-liquid-crystal-displays-5eb615|display ​I2C]]+  * [[https://​projecthub.arduino.cc/​arduino_uno_guy/​i2c-liquid-crystal-displays-5eb615|display ​led]]
   * [[https://​ardushop.ro/​ro/​home/​132-modul-bluetooth-hc-06-cu-3-pini.html|modul Bluetooth HC-05]]   * [[https://​ardushop.ro/​ro/​home/​132-modul-bluetooth-hc-06-cu-3-pini.html|modul Bluetooth HC-05]]
-  * led și buzzer+ 
 +{{:​pm:​prj2024:​tdicu:​screenshot_2024-05-23_231247.png?​nolink&​600|}} 
 +{{:​pm:​prj2024:​tdicu:​screenshot_2024-05-23_232306.png?​nolink&​450|}} 
 +{{:​pm:​prj2024:​tdicu:​whatsapp_image_2024-05-20_at_23.24.57.jpeg?​nolink&​450|}} 
 + 
 +Pinii legați sunt astfel: 
 + 
 +^ Piesă ^ Legături ​                                           ^ 
 +|LCD    | GND -> GND \\ VCC -> 5V \\ SDA -> A4 \\ SCL -> A5   ​
 +|HC-05 ​ | GND -> GND \\ VCC -> 3.3V \\ TXD -> D2 \\ RXD -> D3 | 
 +|Senzor | GND -> GND \\ VIN -> 5V \\ SCL -> SCL\\ SDA -> SDA  | 
 + 
 +===== Software Design ===== 
 + 
 +Deoarece am folosit un microcontroller Arduino am lucrat în Arduino IDE și am descărcat bibilioteci pentru display-ul LCD și pentru senzor. 
 +\\ 
 +Implementarea este simplă: se realizează o măsurătoare inițială, pentru a determina înălțimea la care ne aflăm, iar apoi calculăm constant înălțimea obiectului de sub senzor, dacă se află ceva. Prin aplicație, când dorim să obținem înălțimea,​ la apăsarea unui buton va apărea un pop-up  
 +cu rezultatul obținut pe aplicație. Aceste date după aceea vor putea fi vizualizate într-o listă de date. 
 +<file ino proiect.ino>​ 
 +  #include "​Adafruit_VL53L0X.h"​ 
 +  #include <​Wire.h>​ 
 +  #include <​LiquidCrystal_I2C.h>​ 
 +  #include <​SoftwareSerial.h>​ 
 +  Adafruit_VL53L0X lox = Adafruit_VL53L0X();​ 
 +  LiquidCrystal_I2C lcd(0x27, 16, 2); 
 +  VL53L0X_RangingMeasurementData_t sup_measure;​ 
 +  SoftwareSerial mySerial(2, 3); // RX, TX 
 +  void setup() { 
 +  Serial.begin(9600);​ 
 +  while (!Serial) { 
 +    delay(1); // wait for serial port to connect. Needed for native USB 
 +  } 
 +  // bluetooth init 
 +  pinMode(12, OUTPUT); 
 +  digitalWrite(12,​HIGH);​ 
 +  mySerial.begin(9600);​ 
 +  //lcd init 
 +  lcd.begin(16,​ 2); 
 +  lcd.backlight();​ 
 +  // senzor init 
 +  pinMode(13, OUTPUT); 
 +  digitalWrite(13,​HIGH);​ 
 +  if (!lox.begin()) { 
 +    Serial.println(F("​Failed to boot VL53L0X"​));​ 
 +    while (1); 
 +  } 
 +  // masuratoare initiala a suprafetei 
 +  lox.rangingTest(&​sup_measure,​ false); 
 +  if (sup_measure.RangeStatus != 4) { 
 +    Serial.print("​Distance (mm): "); 
 +    Serial.println(sup_measure.RangeMilliMeter);​ 
 +  } else { 
 +    Serial.println("​ out of range "); 
 +  } 
 +  lcd.setCursor(0,​ 0); 
 +  lcd.print("​dist sup: "); 
 +  lcd.setCursor(11,​ 0); 
 +  lcd.print(sup_measure.RangeMilliMeter / 10); 
 +  delay(5000);​ 
 +  } 
 +  void loop() { 
 +  VL53L0X_RangingMeasurementData_t measure; 
 +  lox.rangingTest(&​measure,​ false); 
 +  lcd.clear();​ 
 +  lcd.setCursor(0,​ 0); 
 +  lcd.print("​height:​ "); 
 +  lcd.setCursor(8,​ 0); 
 +  int heightDiff = (sup_measure.RangeMilliMeter - measure.RangeMilliMeter) / 10; 
 +  if (heightDiff > 0) 
 +    lcd.print(heightDiff);​ 
 +  else 
 +    lcd.print("​nimic sub"​);​ 
 +  if (mySerial.available()) { 
 +    char c = mySerial.read();​ 
 +    Serial.println(c);​ 
 +    if (c == '​1'​){ 
 +      Serial.println("​trimit inaltime"​);​ 
 +      mySerial.println(heightDiff);​ 
 +    } 
 +    Serial.write(c);​ // send from Bluetooth to Serial 
 +    //​Serial.print("​Bluetooth received: "); 
 +  } 
 +  if (Serial.available()) { 
 +    char s = Serial.read();​ 
 +    mySerial.print(s);​ // send from Serial to Bluetooth 
 +    //​Serial.print("​Serial received: "); 
 +  } 
 +  delay(1000);​ 
 +  } 
 +</​file>​ 
 +\\ 
 +Aplicația a fost realizată cu MIT App Inventor. Mai jos sunt interfața, respectiv schema bloc folosită pentru funcționalități. 
 +\\ 
 +{{:​pm:​prj2024:​tdicu:​screenshot_2024-05-27_073449.png?​nolink&​300|}} 
 +\\ 
 +{{:​pm:​prj2024:​tdicu:​screenshot_2024-05-27_073936.png?​nolink&​800|}} 
 + 
 +===== Rezultate Obţinute ===== 
 +Aparatul realizează măsurători față de obiectele aflate sub, însă senzorul fiind destul de mic e fie nevoie de o poziționare foarte bună a obiectelor mai subțiri fie nu par să fie bine percepute. 
 +\\ 
 +{{:​pm:​prj2024:​tdicu:​masuratoare1.jpeg?​nolink&​300|}} 
 +{{:​pm:​prj2024:​tdicu:​masuratoare2.jpeg?​nolink&​300|}} 
 +{{:​pm:​prj2024:​tdicu:​masuratoare3.jpeg?​nolink&​300|}} 
 + 
 + 
 +<note tip> 
 +Din nefericire, senzorul de distanță de **ALLEGEDLY** 2m era doar de 1m. Prin urmare putem măsura copii sub 4 ani sau obiecte random din casă. 
 +Nu am un copil la îndemână,​ deci am improvizat. 
 +</​note>​ 
 + 
 +===== Concluzii ===== 
 +Overall, a fost o experiență nice cu un rezultat tangibil, pe care intenționez să-l expandez în viitor. Dacă obțin un senzor care chiar își respectă descrierea, intenționez să fac o combinație și cu un cântar pentru un full-on BMI calculator.  
 +\\ 
 +M-am distrat și cu crearea aplicației și încercarea de unelte noi, out of my comfort zone. 
 + 
 +===== Download ===== 
 +{{:​pm:​prj2024:​tdicu:​heightmeasurement.zip|}} 
 +<note warning>​ 
 +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**. 
 +</​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 ===== 
 +Am folosit mai multe resurse în proces dar acestea au fost cele mai folositoare:​ 
 +\\ 
 +[[https://​www.visuino.eu/​arduino-height-measuring-using-vl53l0x-laser-sensor/​| Resursă proiect]] 
 +[[https://​howtomechatronics.com/​tutorials/​arduino/​how-to-build-custom-android-app-for-your-arduino-project-using-mit-app-inventor/​| Resursă aplicație]] 
 +\\ \\  
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ 
pm/prj2024/tdicu/maria.movileanu.1714941887.txt.gz · Last modified: 2024/05/05 23:44 by maria.movileanu
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