Differences

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

Link to this comparison view

pm:prj2025:iotelea:bogdan.fratiman [2025/05/19 19:18]
bogdan.fratiman [Introducere]
pm:prj2025:iotelea:bogdan.fratiman [2025/05/26 12:08] (current)
bogdan.fratiman
Line 4: Line 4:
 Grupa: **333CD** Grupa: **333CD**
 </​note>​ </​note>​
-===== Introducere ===== 8-)+===== Introducere =====
  
 **Mini Barrier** este un sistem automat de control al accesului, care detectează vehiculele care se apropie și acționeaza o barieră cu ajutorul unui servomotor. Utilizând un senzor ultrasonic, sistemul estimează distanța până la vehicul și decide automat dacă trebuie ridicată bariera. Pentru a permite și intervenția umană există și un buton care acționează manual bariera. Pe lângă acestea, un ecran LCD afișează distanța până la vehicul și contorizează numărul total de vehicule care au trecut prin sistem. **Mini Barrier** este un sistem automat de control al accesului, care detectează vehiculele care se apropie și acționeaza o barieră cu ajutorul unui servomotor. Utilizând un senzor ultrasonic, sistemul estimează distanța până la vehicul și decide automat dacă trebuie ridicată bariera. Pentru a permite și intervenția umană există și un buton care acționează manual bariera. Pe lângă acestea, un ecran LCD afișează distanța până la vehicul și contorizează numărul total de vehicule care au trecut prin sistem.
Line 40: Line 40:
   - Cabluri jumper   - Cabluri jumper
 </​note>​ </​note>​
 +
 +{{:​pm:​prj2025:​iotelea:​barrier_down.jpg?​300|}} ​ {{:​pm:​prj2025:​iotelea:​barrier_up.jpg?​300|}}
  
 === Schema electrică === === Schema electrică ===
 {{:​pm:​prj2025:​iotelea:​bogdan-schema-electrica.png?​700|}} {{:​pm:​prj2025:​iotelea:​bogdan-schema-electrica.png?​700|}}
-<note tip> +
-Aici puneţi tot ce ţine de hardware design: +
-  * listă de piese +
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) +
-  * diagrame de semnal  +
-  * rezultatele simulării +
-</​note>​+
  
  
Line 56: Line 52:
  
 <note tip> <note tip>
-Descrierea codului aplicaţiei (firmware):​ +**Mediu ​de dezvoltare:** Arduino IDE 8-O 
-  ​mediu de dezvoltare ​(if any) (e.g. AVR Studio, CodeVisionAVR) + 
-  librării şi surse 3rd-party ​(e.g. Procyon AVRlib) +**Librării şi surse 3rd-party:** ''​LiquidCrystal_I2C.h''​ - pentru interfața I2C a LCD-ului 
-  algoritmi ​şi structuri ​pe care plănuiţsă le implementaţ+ 
-  (etapa 3) surse şi funcţii implementate+**Algoritmi ​şi structuri:** Structura sistemului este asemănătoare unui state machine cu 4 stări: ''​IDLE'',​ ''​CAR_IN'',​ ''​CAR_OUT''​ ș''​FULL'',​ determinate de distanța măsurată șstarea butonului, tratat ca întrerupere externă. Controlul servomotorului se face prin generarea unui semnal PWM folosind Timer1, configurat in mod fast PWM cu TOP = ICR1. 
 + 
 +**Surse ​şi funcţii implementate:**  
 +   * ''​setup()''​ - Inițializează toate perifericele și configurează Timer1 în mod Fast PWM (WGM13:0 = 14) cu TOP = ICR1 = 40000, pentru a genera un semnal PWM de 50 Hz pe pinul OC1A (pin 9), cu un prescaler de 8, potrivit pentru servomotorul SG90: 
 +    <code java> 
 +TCCR1A = (1 << WGM11); 
 +TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11); 
 + 
 +ICR1 = 40000; 
 +TCCR1A |= (1 << COM1A1); 
 +</​code>​ 
 +   * ''​setServoAngle(int angle)''​ - Primește un unghi între 0° și 180°, îl convertește într-un impuls PWM între 750 și 2300 µs, apoi setează valoarea în OCR1A: 
 +<code java> 
 +int pulseWidth = map(angle, 0, 180, 750, 2300); 
 +OCR1A = pulseWidth * 2; 
 +</​code>​ 
 +   * ''​handleButtonPress()''​ - Activează rutina de întrerupere pentru buton setând flag-ul ''​buttonPressed''​. 
 +<code java> 
 +attachInterrupt(digitalPinToInterrupt(buttonPin),​ handleButtonPress,​ RISING); 
 +    </​code>​ 
 +   * ''​loop()''​ - Bucla principală a programului. Se ocupă de: 
 +      * măsurarea distanței cu senzorul HC-SR04 
 +<code java> 
 +      digitalWrite(trigPin,​ LOW); 
 +      delayMicroseconds(2);​ 
 +      digitalWrite(trigPin,​ HIGH); 
 +      delayMicroseconds(10);​ 
 +      digitalWrite(trigPin,​ LOW); 
 + 
 +      long duration = pulseIn(echoPin,​ HIGH); 
 +      float distance = duration * 0.034 / 2; 
 +</​code>​ 
 +      * actualizarea ecranului LCD 
 +      * verificarea stării butonului 
 +      * acționarea barierei prin apeluri la ''​setServoAngle(...)''​
 </​note>​ </​note>​
  
Line 66: Line 96:
  
 <note tip> <note tip>
-Care au fost rezultatele obţinute în urma realizării proiectului vostru.+Link Youtube: 
 + 
 +https://​youtube.com/​shorts/​j4JR8kcPbFc?​feature=share 
 </​note>​ </​note>​
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download ===== +Proiectul **Mini Barrier** integrează mai multe componente hardware într-un sistem funcțional, de la controlul unui servomotor fără a folosi librăria Servo.h, prin configurarea directă a Timer-ului 1 în mod Fast PWM, până la tratarea butonului prin întrerupere externă și afișarea informațiilor ​pe un ecran LCD folosind ​protocolul I2C. 
- +Implementarea a demonstrat o aplicare practică a noțiunilor ​de bază din programarea microcontrolerelorprecum și modul în care acestea pot fi combinate într-o aplicație reală și interactivă.
-<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 ChangeLogun 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 Alin331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +
-</​note>​+
  
 ===== Jurnal ===== ===== Jurnal =====
  
 <note tip> <note tip>
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.+**M1 – Documentație** - Am început redactarea paginii de OCW prin completarea următoarelor secțiuni: descriere, introducere,​ schema bloc șlista/​descrierea componentelor hardware. 
 + 
 +**M2 – Hardware** - Am adăgat schema electrică pe pagina de wiki și am realizat montajul parțial al proiectului atât hardware cât și software: LED-uri, buton, LCD. 
 + 
 +**M3 - Software** - Am completat montajul și după ce m-am asigurat că toate componentele funcționează și logica state machine-ului este corectă am aplicat cunoștințele din laboratoare:​ Timer1 cu Fast PWM pentru servo, întreruperi pentru buton, I2C pentru LCD.
 </​note>​ </​note>​
  
Line 89: Line 121:
 <​note>​ <​note>​
 Repo Github: https://​github.com/​bogdiw/​mini-barrier Repo Github: https://​github.com/​bogdiw/​mini-barrier
 +</​note>​
 +
 +<note important>​
 +Resurse utilizate:
 +
 +https://​forum.arduino.cc/​t/​controlling-a-single-servo-using-pwm-and-timer-1/​491621
 +
 +https://​www.youtube.com/​watch?​v=aQy3DGSIGm4
 </​note>​ </​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>​
  
pm/prj2025/iotelea/bogdan.fratiman.1747671495.txt.gz · Last modified: 2025/05/19 19:18 by bogdan.fratiman
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