Proiectul constă în realizarea unei flori robotice interactive, care se deschide automat atunci când detectează prezența unei persoane în apropiere, și se închide în absența acesteia. Scopul său este de a simula comportamentul natural al unei plante sensibile la mediu, oferind o experiență vizuală interesantă și educativă.
Floarea reacționează la apropierea unui om, deschizându-se ca și cum ar „înflori”, iar în lipsa mișcării se retrage într-o stare de repaus.
Ideea a pornit de la dorința de a crea un proiect care să îmbine estetică, interactivitate și funcționalitate.
Floarea se deschide și se închide automat în funcție de prezența unei persoane, iar printr-un buton suplimentar poate fi activat un mod special de „dans” al petalelor:
Componenta | Rol |
---|---|
Arduino Nano (ATmega328p) | Controlează întregul sistem și coordonează toate componentele |
16 Channel Driver | Controlează simultan cele 4 servomotoare |
Ultrasonic Sensor HC-SR04 | Detectează prezența persoanei din apropiere |
4 x Servos MG 996R | Mișcă „petalele” florii pentru a o deschide și închide |
Buton Dance Mode | Permite mișcarea petalelor într-un mod de „dans” |
Breadboard | Platformă pentru conexiuni rapide între componente |
Lista componentelor:
Pini Arduino | Componenta | Rol |
---|---|---|
D12 | Buton | Declanșează modulul de „dans” al petalelor |
D10 | HC-SR04 (Echo) | Recepție semnal ultrasonic (distanță) |
D9 | HC-SR04 (Trig) | Declanșare semnal ultrasonic |
A4 (SDA) | PCA9685 (SDA) | Comunicare I2C cu driverul de servomotoare |
A5 (SCL) | PCA9685 (SCL) | Comunicare I2C – ceas semnal PCA9685 |
D3 | RX (DFPLayer) | TX software către DFPlayer RX |
GND | GND buton + senzor | Masă comună pentru toate componentele |
VIN / 5V | PCA9685, HC-SR04 etc. | Alimentare generală module (5V) |
Platforma folosită: Arduino IDE Limbaj: C++ (stil Arduino)
Nume | Motivația |
---|---|
Wire.h | folosită pentru comunicația I2C. |
Adafruit_PWMServoDriver.h | bibliotecă third-party de la Adafruit pentru controlul servo-motoarelor prin interfața I2C folosind driverul PCA9685. |
interrupt.h | Permite utilizarea și configurarea întreruperilor hardware, inclusiv definirea ISR-urilor. |
Măsurare distanță cu senzor ultrasonic:
Se utilizează impulsuri ultrasonice pentru a calcula distanța până la un obstacol.
Controlul petalelor cu servomotoare:
Petalele se “deschid” sau “închid” în funcție de distanța măsurată.
Pozițiile servomotoarelor sunt controlate prin driverul PCA9685.
Secvență de dans (randomizare):
Când se apasă butonul, începe o secvență aleatorie de mișcări ale servomotoarelor timp de 10 secunde.
Filtrarea valorilor senzorului ultrasonic:
Se folosește un filtru de medie mobilă (moving average) pentru a reduce zgomotul din datele brute returnate de HC-SR04.
Funcție | Rol |
---|---|
setup() | Inițializarea componentelor hardware |
loop() | Bucla principală, apelează funcțiile de control |
checkDistance() | Măsoară și filtrează distanța ultrasonică |
checkButton() | Detectează apăsarea butonului |
performDance() | Controlează mișcarea aleatoare a servomotoarelor |
open() | Deschide petalele treptat |
close() | Închide petalele treptat |
Senzorul ultrasonic HC-SR04 este predispus la valori fluctuante cauzate de:
Soluția: Filtrare de medie mobilă, pentru a evita deschiderea/închiderea accidentală a petalelor cauzată de citiri eronate ale senzorului.
#define FILTER_SIZE 5 float distanceBuffer[FILTER_SIZE]; int bufferIndex = 0; bool bufferFilled = false; void checkDistance() { digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); duration_us = pulseIn(ECHO_PIN, HIGH); float raw_distance = 0.017 * duration_us; // Adaugă valoarea în buffer distanceBuffer[bufferIndex] = raw_distance; bufferIndex = (bufferIndex + 1) % FILTER_SIZE; if (bufferIndex == 0) bufferFilled = true; // Calculează media valorilor din buffer float sum = 0; int count = bufferFilled ? FILTER_SIZE : bufferIndex; for (int i = 0; i < count; i++) { sum += distanceBuffer[i]; } distance_cm = sum / count; Serial.print("Filtered Distance: "); Serial.println(distance_cm); }
Proiectul concepte studiate în laboratoarele următoare:
Proiectul se află în stadiul de prototip funcțional, cu toate componentele hardware montate și testate pe breadboard.
Task | Status |
---|---|
Setare mediu de lucru | Complet |
Adaugare mod dans | Complet |
Adaugare buton | Complet |
Creare prototip | Complet |
Adaugare difuzor | In progress |
Aspect fizic | In progress |
Resurse Hardware Lista Componente