Robotic Flower

Introducere

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.

Descriere generală

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:

  • Detectare prezență: Când un om se apropie → floarea „înflorește” (se deschide)
  • Absență: Când nu este detectată mișcare → floarea se închide (stare de repaus)
  • Mod special: Apăsarea butonului activează un mod de „dans”, în care petalele se mișcă într-un mod diferit



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

Hardware Design

Lista componentelor:

  • Arduino Nano (ATmega 328p) Controlează întregul sistem și coordonează toate componentele, citind datele de la senzorul ultrasonic și buton, apoi trimițând comenzi către servomotoare prin driverul de servo.
  • 16 Channel Driver Permite controlul precis al mai multor servomotoare (până la 16), folosind semnale PWM trimise de Arduino. În acest proiect, controlează cele 4 servomotoare care deschid și închid „petalele” florii.
  • Ultrasonic Sensor HC-SR04 Măsoară distanța față de un obiect (persoană) și detectează prezența acestuia în apropierea florii. Când o persoană se apropie, declanșează deschiderea petalelor.
  • 4 x Servos MG 996R Acționează mecanic petalele florii, permițându-le să se deschidă și să se închidă. Pot efectua și mișcări de tip „dans” atunci când este activat modul corespunzător.
  • Buton - Dance Mode - La apăsare, activează modul „Dance Mode”, în care petalele se mișcă într-un model repetitiv sau aleatoriu, imitând o mișcare de dans.
  • Breadboard Permite conectarea temporară și rapidă a componentelor între ele. Utilă pentru prototipare.
  • Fire T-T, M-M, M-T Fire de legătură folosite pentru conectarea diverselor componente la Arduino și breadboard.

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)

Software Design

Mediul de dezvoltare

Platforma folosită: Arduino IDE Limbaj: C++ (stil Arduino)

Biblioteci/Surse third-party Folosite
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.
Algoritmi și structuri implementate:

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.

Controlul servomotoarelor
  • Se utilizează un driver Adafruit PCA9685 pentru a controla până la 16 servomotoare prin I2C
  • Mișcările sunt fine și sincronizate, datorită reglării frecvenței la 50Hz și folosirii unor limite definite (150–600)
Stadiul actual al implementării
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
Filtrarea datelor de la sensor

Senzorul ultrasonic HC-SR04 este predispus la valori fluctuante cauzate de:

  • Zgomot electric
  • Suprafețe reflectorizante inegale
  • Obstacole în mișcare sau apropiate

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);
}
Legătura cu laboratoarele

Proiectul concepte studiate în laboratoarele următoare:

  • Laboratorul 0 - GPIO: legătura cu senzorul ultrasonic, driver PCA9685, configurarea pinilor ca intrare cu rezistențe de pull-up.
  • Laboratorul 2 - Întreruperi: folosirea INT0 pentru acțiuni imediate în cod (pornire mod dans).
  • Laboratorul 3 - Timer1/PWM: generarea semnalelor pentru servomotoarele MG996R.
  • Laboratorul 6 - I2C/RTC: comunicarea cu senzorul de distanță.

Rezultate Obţinute

Proiectul se află în stadiul de prototip funcțional, cu toate componentele hardware montate și testate pe breadboard.

  • Petalele se deschid și se închid automat în funcție de distanța detectată de senzorul ultrasonic HC-SR04
  • Modulul de dans al petalelor este activat prin apăsarea unui buton și funcționează pe baza unor mișcări aleatorii generate pentru servomotoare
  • Filtrarea valorilor senzorului (medie mobilă) asigură o detecție stabilă, reducând fluctuațiile nejustificate

Proiectul final:

Starile florii Closed si Open:

Concluzii

  • Detecția prezenței este fiabilă, cu filtrare medie aplicată pentru a reduce zgomotul de la senzor
  • Mișcarea petalelor este lină și sincronizată, datorită utilizării driverului PCA9685 și a controlului prin PWM
  • Modul de dans activat de buton adaugă un plus de interactivitate
  • Codul este modular și ușor de extins pentru integrarea altor senzori (culoare, temperatură, sunet)
  • Toate funcționalitățile hardware și software planificate au fost implementate și validate în testări repetate

Repo

Jurnal

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

Bibliografie/Resurse

Resurse Hardware Lista Componente

pm/prj2025/ajipa/mihaela.cotos.txt · Last modified: 2025/05/30 09:51 by mihaela.cotos
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