This shows you the differences between two versions of the page.
pm:prj2025:iotelea:elena.maholea [2025/05/26 21:07] elena.maholea |
pm:prj2025:iotelea:elena.maholea [2025/05/28 03:11] (current) elena.maholea |
||
---|---|---|---|
Line 20: | Line 20: | ||
- | {{ :pm:prj2025:iotelea:diagrama_alexiam.png?400 | Diagrama Smart Vacuum Cleaner }} | + | {{ :pm:prj2025:iotelea:diagrama_alexiamah.png?400 | Diagrama Smart Vacuum Cleaner }} |
Line 37: | Line 37: | ||
| Ventilator | 5V DC Fan | 1 | | | Ventilator | 5V DC Fan | 1 | | ||
| Motor pentru mișcare | Motor DC 3V-6V cu ax de 6mm | 2 | | | Motor pentru mișcare | Motor DC 3V-6V cu ax de 6mm | 2 | | ||
- | | Baterii | Baterie Li-Ion 18650 3.7V | 2 | | + | | Baterie | Baterie 9V | 1 | |
- | | Suport pentru baterii | - | 1 | | + | | Suport pentru baterie | - | 1 | |
| Fire jumper | - | - | | | Fire jumper | - | - | | ||
- | | Senzor de vibrații | SW-420 | 1 | | + | | Senzor de vibrații | Senzor de vibratii ceramic | 1 | |
- | | LED | LED 5mm alb (pentru semnalizare) | 1 | | + | | LED | LED 5mm albastru (pentru semnalizare) | 1 | |
- | {{ :pm:prj2025:iotelea:alexiam_pm2.png?800 | Diagrama Smart Vacuum Cleaner }} | + | {{ :pm:prj2025:iotelea:schematicfinal2.png?800 | Schematic Smart Vacuum Cleaner }} |
Line 81: | Line 81: | ||
| IN2 | D3 | | | IN2 | D3 | | ||
| IN3 | D4 | | | IN3 | D4 | | ||
- | | IN4 | D5 | | + | | IN4 | D7 | |
- | | ENA | Jumper ON (activ permanent) | | + | | ENA | D5 | |
- | | ENB | Jumper ON (activ permanent) | | + | | ENB | D6 | |
| +12V | P+ (de la BMS) | | | +12V | P+ (de la BMS) | | ||
| GND | P− comun cu Arduino și MOSFET | | | GND | P− comun cu Arduino și MOSFET | | ||
Line 123: | Line 123: | ||
{{ :pm:prj2025:iotelea:pm2.jpeg?600 | Milestone 2 Hardware Smart Vacuum Cleaner }} | {{ :pm:prj2025:iotelea:pm2.jpeg?600 | Milestone 2 Hardware Smart Vacuum Cleaner }} | ||
+ | |||
+ | ==== • Implementare hardware - Finală ==== | ||
+ | |||
+ | {{ :pm:prj2025:iotelea:maholea_finalhw.jpeg?600 | Final Hardware Smart Vacuum Cleaner }} | ||
+ | |||
Line 131: | Line 136: | ||
=== 1. Inițializare === | === 1. Inițializare === | ||
- | * Se configurează toți pinii: motoare, senzor ultrasonic, ventilator, LED, senzor de vibrații și comutatorul. | + | * Se configurează toți pinii: direcție și viteză pentru motoare (IN1–IN4 și ENA/ENB), senzor ultrasonic (Trig/Echo), ventilator (MOSFET), LED de semnalizare, senzor de vibrații și comutatorul (switch). |
* Se afișează un mesaj în consola serială că robotul așteaptă pornirea. | * Se afișează un mesaj în consola serială că robotul așteaptă pornirea. | ||
Line 137: | Line 142: | ||
=== 2. Activare robot === | === 2. Activare robot === | ||
- | * Când comutatorul este apăsat (LOW cu INPUT_PULLUP), se activează logica principală: | + | Când comutatorul este apăsat (valoare LOW deoarece este configurat cu INPUT_PULLUP), robotul intră în modul activ: |
* Pornește ventilatorul (pin D10) | * Pornește ventilatorul (pin D10) | ||
Line 147: | Line 152: | ||
=== 3. Navigare === | === 3. Navigare === | ||
- | * Se trimite un impuls cu Trig (D12) și se citește ecoul cu Echo (D13) | + | Se trimite un impuls cu Trig (D12) și se citește ecoul cu Echo (D13). Dacă distanța detectată este mai mare de 20 cm: |
- | * Dacă nu sunt obstacole (distanța > 25cm): robotul merge înainte (IN1–IN4: D2–D5) | + | * Robotul merge înainte. |
- | * Dacă este obstacol: robotul se rotește pentru a ocoli | + | * Se controlează ambele motoare în sens înainte. |
+ | |||
+ | * Se setează o viteză mică (analogWrite pe enA și enB, ex: 100). | ||
+ | |||
+ | Dacă este detectat un obstacol: | ||
+ | |||
+ | * Robotul se rotește pe loc (un motor înainte, unul înapoi). | ||
+ | |||
+ | * Viteza de rotație este setată mai mare (analogWrite ~150). | ||
+ | |||
+ | * După rotație, revine în bucla principală. | ||
=== 4. Dezactivare robot === | === 4. Dezactivare robot === | ||
- | * Când comutatorul este dezactivat (HIGH): | + | Când comutatorul este dezactivat (HIGH): |
* Se opresc motoarele, LED-ul și ventilatorul | * Se opresc motoarele, LED-ul și ventilatorul | ||
Line 169: | Line 184: | ||
==== • Librării și funcții utilizate ==== | ==== • Librării și funcții utilizate ==== | ||
- | * pinMode(), digitalWrite(), analogRead(), analogWrite() – pentru controlul părților hardware | + | * pinMode(), digitalWrite(), analogRead(), analogWrite() – pentru configurarea și controlul părților hardware: motoare, LED, senzor de vibrații, ventilator. |
- | * pulseIn() – pentru măsurarea impulsurilor de la senzorul ultrasonic | + | * pulseIn() – pentru măsurarea duratei impulsurilor de la senzorul ultrasonic HC-SR04, folosită în calculul distanței față de obstacole. |
- | * millis() – pentru temporizarea aprinderii LED-ului | + | * millis() – pentru temporizarea aprinderii LED-ului fără blocarea execuției (spre deosebire de delay()). |
+ | |||
+ | * Serial.begin(), Serial.print(), Serial.println() – pentru inițializarea și trimiterea de mesaje în consola serială, utile pentru debugging și afișarea distanței și vibrațiilor detectate. | ||
+ | |||
+ | * delayMicroseconds() – pentru generarea impulsurilor precise necesare funcționării corecte a senzorului ultrasonic. | ||
+ | |||
+ | * delay() – folosit în timpul întoarcerii robotului pentru a permite o rotație controlată (ex: delay(1100) în cazul obstacolelor). | ||
- | * Serial.begin(), Serial.println() – pentru mesaje de debugging în consolă | ||
==== • Mediu de dezvoltare ==== | ==== • Mediu de dezvoltare ==== | ||
Line 184: | Line 204: | ||
==== • Librării și surse third-party ==== | ==== • Librării și surse third-party ==== | ||
- | * [[https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library|LiquidCrystal_I2C v1.1.2 by Frank de Brabander]] – bibliotecă pentru controlul LCD-ului 16x2 prin interfață I2C | + | * `millis()`, `delay()` – funcții standard Arduino pentru temporizare fără blocaj |
- | * tone() – funcție Arduino standard pentru generarea semnalului PWM pentru buzzer pasiv | + | * `pulseIn()` – pentru măsurarea timpului de ecou de la senzorul ultrasonic HC-SR04 |
- | * millis(), delay(), attachInterrupt() – funcții standard Arduino pentru controlul timpului și întreruperilor | + | * `Serial.begin()`, `Serial.println()` – pentru mesaje de stare și debugging în consolă |
- | + | * `pinMode()`, `digitalWrite()`, `analogRead()` – pentru configurarea și controlul părților hardware | |
- | + | ||
- | <note tip> | + | |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 203: | Line 215: | ||
Pe lângă realizarea unui robot funcțional, proiectul a consolidat cunoștințele despre integrarea componentelor electronice și controlul lor logic. A reprezentat un exemplu practic de aplicare a noțiunilor teoretice studiate la curs. | Pe lângă realizarea unui robot funcțional, proiectul a consolidat cunoștințele despre integrarea componentelor electronice și controlul lor logic. A reprezentat un exemplu practic de aplicare a noțiunilor teoretice studiate la curs. | ||
- | [[https://drive.google.com/drive/u/2/my-drive | Smart Vacuum Cleaner DEMO]] | + | [[https://drive.google.com/file/d/1Wte0fMdgGPsbugWVTxkHbJ1yJlkrOVbb/view?usp=sharing | Smart Vacuum Cleaner DEMO]] |
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | Proiectul **Smart Vacuum Cleaner** a reprezentat o experiență practică valoroasă în integrarea componentelor electronice și programarea lor cu ajutorul platformei Arduino. Am reușit să construiesc un **robot funcțional** care poate **detecta obstacole**, **se deplasează autonom** și **semnalează aspirarea obiectelor** printr-un LED de avertizare. |
- | <note warning> | + | Implementarea controlului vitezei motoarelor prin pinii **PWM** a îmbunătățit controlul mișcării, iar integrarea **senzorului de vibrații** a adăugat un plus de funcționalitate practică. Am înțeles mai bine importanța gestionării resurselor hardware și a debug-ului serial în **proiecte embedded**. |
- | 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 ChangeLog, un 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 Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | Proiectul poate fi extins în viitor prin adăugarea unui **sistem de mapare a spațiului**, **control prin aplicație mobilă** sau chiar utilizarea unor senzori suplimentari pentru o **navigație mai inteligentă**. |
- | </note> | + | |
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | ^ Data ^ Activitate desfășurată ^ |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | | 08.05.2025 | Alegerea temei proiectului – „Smart Vacuum Cleaner” și definirea funcționalităților de bază. | |
- | </note> | + | | 10.05.2025 | Comandarea componentelor electronice: Arduino UNO, senzor ultrasonic, motoare, driver L298N, senzor vibrații, ventilator, MOSFET, LED-uri și fire jumper. | |
+ | | 13.05.2025 | Schițarea diagramei hardware și testarea separată a senzorului ultrasonic și a senzorului de vibrații. | | ||
+ | | 15.05.2025 | Montarea pe breadboard a componentelor principale și testarea individuală a motoarelor DC cu driverul L298N. | | ||
+ | | 17.05.2025 | Configurarea MOSFET-ului pentru controlul ventilatorului și testarea ventilatorului la 12V. | | ||
+ | | 20.05.2025 | Implementarea funcției de evitare obstacole și a logicii pentru aprinderea LED-ului în caz de vibrații. | | ||
+ | | 22.05.2025 | Integrarea tuturor modulelor într-un singur sketch și optimizarea vitezei motoarelor cu PWM. | | ||
+ | | 25.05.2025 | Realizarea primei versiuni de montaj final – fixarea componentelor pe suport, cablare permanentă (lipire). | | ||
+ | | 26.05.2025 | Testare finală în condiții reale – verificarea comportamentului robotului pe suprafață plană și în jurul obstacolelor. | | ||
+ | |||
+ | ===== Arhivă ===== | ||
+ | Pentru descărcare: {{:pm:prj2025:iotelea:alexia-maholea_333cd_smart-vacuum2.zip|}} | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
Line 248: | Line 268: | ||
* [[https://components101.com/transistor/irf520-mosfet|IRF520 MOSFET Datasheet]] – pentru controlul ventilatorului de 12V. | * [[https://components101.com/transistor/irf520-mosfet|IRF520 MOSFET Datasheet]] – pentru controlul ventilatorului de 12V. | ||
- | * [[https://components101.com/sensors/sw-420-vibration-sensor-module|SW-420 Vibration Sensor Datasheet]] – documentație pentru senzorul piezoelectric de vibrații. | + | * [[https://components101.com/sensors/piezoelectric-sensor|Piezoelectric Vibration Sensor Datasheet]] – documentație pentru senzorul piezoelectric de vibrații. |
* [[https://components101.com/resistor|Resistor – Components101]] – informații despre utilizarea rezistorilor (ex: cu LED). | * [[https://components101.com/resistor|Resistor – Components101]] – informații despre utilizarea rezistorilor (ex: cu LED). | ||