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:33]
bogdan.fratiman [Software Design]
pm:prj2025:iotelea:bogdan.fratiman [2025/05/26 12:08] (current)
bogdan.fratiman
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ă ===
Line 52: Line 54:
 **Mediu de dezvoltare:​** Arduino IDE 8-O **Mediu de dezvoltare:​** Arduino IDE 8-O
  
-**Librării şi surse 3rd-party:​** LiquidCrystal_I2C.h - pentru interfața I2C a LCD-ului+**Librării şi surse 3rd-party:​** ​''​LiquidCrystal_I2C.h'' ​- pentru interfața I2C a LCD-ului
  
-**Algoritmi şi structuri:​** Structura sistemului este asemănătoare unui state machine cu 4 stări: IDLE, CAR_IN, CAR_OUT și FULL, determinate de distanța măsurată și 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.+**Algoritmi şi structuri:​** Structura sistemului este asemănătoare unui state machine cu 4 stări: ​''​IDLE''​''​CAR_IN''​''​CAR_OUT'' ​și ''​FULL''​, determinate de distanța măsurată și 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:​** ​ **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 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.1748194398.txt.gz · Last modified: 2025/05/25 20:33 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