Differences

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

Link to this comparison view

pm:prj2021:avaduva:personcounter [2021/06/01 13:38]
alexandru.trufelea
pm:prj2021:avaduva:personcounter [2021/06/01 18:42] (current)
alexandru.trufelea [Download]
Line 2: Line 2:
  
  
-Autor: Trufelea Alexandru-Mihai+Autor: Trufelea Alexandru-Mihai ​333CA
  
 ===== Introducere ===== ===== Introducere =====
Line 8: Line 8:
  
 Scopul acestui proiect este de a crea o metodă prin care se poate determina numărul de persoane care intră și ies dintr-o încăpere. Scopul acestui proiect este de a crea o metodă prin care se poate determina numărul de persoane care intră și ies dintr-o încăpere.
-Pentru implementare voi folosi doi senzori de miscare ce vor monitoriza numarul de persoane ce intra si ies dintr-o incapere. De asemenea, voi folosi ​si un servomotor pentru a simula o usa ce se deschide automat.+Pentru implementare voi folosi doi senzori de miscare ce vor monitoriza numarul de persoane ce intra si ies dintr-o incapere. De asemenea, voi folosi un servomotor pentru a simula o usa ce se deschide automat.
  
 ==== Descriere generala ==== ==== Descriere generala ====
Line 15: Line 15:
 {{:​pm:​prj2021:​avaduva:​schema_bloc-person_counter.jpg?​200|}} {{:​pm:​prj2021:​avaduva:​schema_bloc-person_counter.jpg?​200|}}
  
 +Proiectul se va comporta precum o usa automata. In plus voi retine numarul persoanelor care trec pe usa.
 +
 +Acesta functioneaza pe baza a doi PIR HC-SR501 care monitorizeaza miscarea din mediul ambiental, un servo motor ce reprezinta usa si un display lcd pe care se afiseaza numarul de persoane ce trec pe usa.
  
  
Line 32: Line 35:
   Fire Colorate Mamă-Tată   Fire Colorate Mamă-Tată
  
-== Software Design ==+==== Software Design ​==== 
 +  #​include<​LiquidCrystal.h>​ 
 +  #include <​Servo.h>​ 
 + 
 +  int pos = -180; 
 +  int pinPirINTRARE = 2; 
 +  int pinPirIESIRE = 12; 
 +  int pirStatIN = 0; 
 +  int pirStatOUT = 0; 
 +  int num_ppl = 0; 
 +  int motionIN = 0; 
 +  int motionOUT = 0; 
 + 
 +  Servo servo_3; 
 +  LiquidCrystal lcd(8,​9,​4,​5,​6,​7);​ 
 + 
 +  void print_ppl(int ppl) 
 +  { 
 +    if (ppl > 0) { 
 +      lcd.clear();​ 
 +      lcd.setCursor(0,​0);​ 
 +      lcd.print(num_ppl);​ 
 +      lcd.setCursor(2,​0);​ 
 +      lcd.print("​ Oameni"​);​ 
 +    } 
 +   
 +    if (ppl == 0) { 
 +      lcd.clear();​ 
 +      lcd.println("​Gol"​);​ 
 +    } 
 +  } 
 + 
 +  void setup() 
 +  { 
 +      lcd.begin(16,​ 2); 
 +      servo_3.attach(3,​ 500, 2500); 
 +      pinMode(11, OUTPUT); 
 +      pinMode(pinPirINTRARE,​ INPUT); ​     
 +      pinMode(pinPirIESIRE,​ INPUT); ​  
 +      digitalWrite(11,​ HIGH); 
 +      delay(60000); ​  
 +      digitalWrite(11,​ LOW); 
 +      print_ppl(num_ppl);​ 
 +  } 
 +   
 +  void loop() 
 +  { 
 +    pirStatIN ​ = digitalRead(pinPirINTRARE);​  
 +    pirStatOUT = digitalRead(pinPirIESIRE);​  
 +   
 +    delay(500);​ 
 +     
 +    if (pirStatOUT == HIGH && pirStatIN == LOW) { 
 +       if (num_ppl > 0) { 
 +           ​num_ppl--;​ 
 +   
 +           for (pos = 0; pos <= 180; pos += 1) { 
 +                servo_3.write(pos);​ 
 +                delay(25);​ 
 +           } 
 +           ​print_ppl(num_ppl);​  
 +           ​motionOUT = 1; 
 +       } else if (num_ppl == 0) { 
 +            print_ppl(num_ppl);​ 
 +       ​} ​  
 +    } 
 +   
 +    if (motionOUT == 1) { 
 +        digitalWrite(11,​ HIGH); 
 +        delay(6000);​ 
 +        digitalWrite(11,​ LOW);   
 +    } 
 +     
 +    if (pirStatIN == HIGH && pirStatOUT == LOW) { 
 +       ​num_ppl++;​ 
 +       
 +       for (pos = 0; pos <= 180; pos += 1) { 
 +             ​servo_3.write(pos);​ 
 +             ​delay(25);​ 
 +      } 
 +      print_ppl(num_ppl);​ 
 +      motionIN = 1; 
 +    }  
 +   
 +    if (motionIN == 1) { 
 +        digitalWrite(11,​ HIGH); 
 +        delay(6000);​ 
 +        digitalWrite(11,​ LOW);   
 +      } 
 +   
 +    Serial.println(num_ppl);​ 
 +    delay(500);​ 
 +   
 +  } 
 +   
 +== Functii folosite == 
 +**print_ppl(int ppl)** - Aceasta functie afiseaza numarul persoanelor din incapere. ​        Am implementat aceasta functie cu scopul de a face mai usoara afisarea si de a reduce numarul liniilor de cod din loop(). 
 + 
 +**setup()** - In aceasta functie setez pinii de input(pinul 2 pentru senzorul ce se afla "​afara"​ si pinul 12 pentru senzorul din "​interior"​) si output(pinul 11 folosit de un led). De asemenea, ​ pornesc display-ul si atasez comanda servo motorului pinului 3. Led-ul este folosit pentru a vedea cand sunt senzorii activi. 
 + 
 +**loop()** - In loop() am implementat logica functionarii programului. Daca senzorii detecteaza miscare se trimite un semnal catre "​usa"​ care se deschide, urmand ca dupa un delay scurt sa se inchida, in final, numarul persoanelor din incapere este afisat pe display. 
 +==== Rezultate Obtinute ==== 
 +== Poze dispozitiv == 
 +   
 + ​{{:​pm:​prj2021:​avaduva:​ansamblu.jpg?​200|}} 
 + 
 +Placuta arduino este legata la pc printr-un cablu usb (poate fi folosita si o baterie de 9V ca sursa electrica). 
 +Servo motorul este alimentata cu o baterie de 9V. 
 +Cei doi senzori si display-ul LCD sunt conectati la port-ul de 5V ai placutei. 
 + 
 +{{:​pm:​prj2021:​avaduva:​stare_in_per_count.jpeg?​200|}} 
 + 
 +Aceasta este starea initiala a proiectului. LED-ul este aprins pentru 6 secunde, timp in care, placuta este in standby. Acest timp este folosit pentru a face calibrarea senzorilor cu infrarosu. 
 +Dupa 6 secunde senzorii sunt pregatiti de utilizare. 
 + 
 +{{:​pm:​prj2021:​avaduva:​gol.jpg?​200|}} 
 + 
 +Dupa cele 6 secunde de standby display-ul afiseaza mesajul "​Gol"​ (deoarece nu a trecut niciun stimul in raza de acoperire a senzorilor). 
 + 
 +{{:​pm:​prj2021:​avaduva:​oameni.jpg?​200|}} 
 + 
 +In momentul in care o persoana intra in raza de actiune a senzorului acesta trimite un semnal catre servo motor, incrementeaza variabila folosita pentru contorizarea persoanelor (num_ppl) si afiseaza numarul curent al persoanelor. 
 + 
 + 
 +Mod de functionare:​ [[https://​www.youtube.com/​watch?​v=WPYJmkdEpPE]] 
 +==== Concluzii ==== 
 + 
 +A fost o experienta placuta si un mod bun de a-mi insusi cunostinte noi. 
 +==== Download ==== 
 + 
 +Arhiva proiect: {{:​pm:​prj2021:​avaduva:​proiect_pm.zip|}} 
 + 
 +Documentatia in format pdf: {{:​pm:​prj2021:​avaduva:​person_counter.pdf|}} 
 +==== Jurnal ====
  
-== Rezultate Obtinute ==+**Etapa 1** - alegerea temei si realizarea unei simulari pe platforma tinkercad ( https://​www.tinkercad.com/​things/​ldqgiTpitnz )
  
-== Concluzii ==+**Etapa 2** - asamblarea componenteleor
  
-== Download ​==+**Etapa 3** - implementare cod + schema electrica + finalizare documentatie 
 +==== Bibliografie/​Resurse ==== 
 +[[https://​www.youtube.com/​c/​Dronebotworkshop1]]
  
-== Jurnal == 
  
 +[[https://​create.arduino.cc/​projecthub/​electropeak/​pir-motion-sensor-how-to-use-pirs-w-arduino-raspberry-pi-18d7fa]]
  
-== Bibliografie/​Resurse == 
  
 +[[https://​www.optimusdigital.ro/​en/​]]
pm/prj2021/avaduva/personcounter.1622543924.txt.gz · Last modified: 2021/06/01 13:38 by alexandru.trufelea
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