Differences

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

Link to this comparison view

pm:prj2025:iotelea:bogdan.fratiman [2025/05/25 20:46]
bogdan.fratiman [Hardware Design]
pm:prj2025:iotelea:bogdan.fratiman [2025/05/26 12:08] (current)
bogdan.fratiman
Line 41: Line 41:
 </​note>​ </​note>​
  
-{{:​pm:​prj2025:​iotelea:​barrier_down.jpg?​300|}}+{{:​pm:​prj2025:​iotelea:​barrier_down.jpg?​300|}} ​ {{:​pm:​prj2025:​iotelea:​barrier_up.jpg?300|}}
  
 === Schema electrică === === Schema electrică ===
Line 59: Line 59:
  
 **Surse şi funcţii implementate:​** ​ **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. +   * ''​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
-   * ''​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> 
 +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''​.    * ''​handleButtonPress()''​ - Activează rutina de întrerupere pentru buton setând flag-ul ''​buttonPressed''​.
-   * ''​loop()''​ - Bucla principală.+<code java> 
 +attachInterrupt(digitalPinToInterrupt(buttonPin),​ handleButtonPress,​ RISING); 
 +    </​code>​ 
 +   * ''​loop()''​ - Bucla principală ​a programuluiSe 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 68: 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 93: Line 123:
 </​note>​ </​note>​
  
-<​note ​tip>+<​note ​important>
 Resurse utilizate: Resurse utilizate:
  
pm/prj2025/iotelea/bogdan.fratiman.1748195197.txt.gz · Last modified: 2025/05/25 20:46 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