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:39]
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 33: Line 36:
  
 ==== 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 ==== ==== 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 ==== ==== Concluzii ====
  
 +A fost o experienta placuta si un mod bun de a-mi insusi cunostinte noi.
 ==== Download ==== ==== Download ====
  
 +Arhiva proiect: {{:​pm:​prj2021:​avaduva:​proiect_pm.zip|}}
 +
 +Documentatia in format pdf: {{:​pm:​prj2021:​avaduva:​person_counter.pdf|}}
 ==== Jurnal ==== ==== Jurnal ====
  
 +**Etapa 1** - alegerea temei si realizarea unei simulari pe platforma tinkercad ( https://​www.tinkercad.com/​things/​ldqgiTpitnz )
  
 +**Etapa 2** - asamblarea componenteleor
 +
 +**Etapa 3** - implementare cod + schema electrica + finalizare documentatie
 ==== Bibliografie/​Resurse ==== ==== Bibliografie/​Resurse ====
 +[[https://​www.youtube.com/​c/​Dronebotworkshop1]]
 +
 +
 +[[https://​create.arduino.cc/​projecthub/​electropeak/​pir-motion-sensor-how-to-use-pirs-w-arduino-raspberry-pi-18d7fa]]
 +
  
 +[[https://​www.optimusdigital.ro/​en/​]]
pm/prj2021/avaduva/personcounter.1622543959.txt.gz · Last modified: 2021/06/01 13:39 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