This is an old revision of the document!


Willy - the Buddy Chaser

Introducere

„Willy – the Buddy Chaser” este o masinuta autonoma proiectata sa urmareasca un om in timp real, folosind senzori de detectie (cu infrarosu), un senzor ultrasonic si un microcontroler. Scopul principal al proiectului este dezvoltarea unui sistem hardware capabil sa identifice si sa urmareasca un obiect in miscare, integrand concepte esentiale din domeniul proiectarii cu microprocesoare.

Ideea a pornit din dorinta de a combina elemente de robotica cu o componenta interactiva și prietenoasa. Pe langa aspectele tehnice, proiectul are si un scop distractiv – utilizatorul se poate juca efectiv cu masinuta, fiind urmarit de aceasta intr-un mod similar cu un „animal de companie robotic”. Aceasta latura face ca proiectul sa fie mai atractiv si accesibil inclusiv pentru publicul larg.

Acest proiect poate reprezenta o baza pentru aplicatii educationale, jucarii inteligente sau chiar sisteme autonome de asistenta in viitor.

Descriere generală

Schema bloc

Hardware Design

Lista piese

Denumire piesa Link achizitionare
Arduino UNO R3 Optimus digital
Motor Driver L298N Optimus digital
Senzor Infrarosu de Obstacole Optimus digital
Senzor Ultrasonic de Distanta HC-SR04+ Optimus digital
Motor cu reductor si roata Optimus digital
Mini Breadboard Albastru Optimus digital
LCD 1602 Optimus digital
Buzzer Optimus digital
Suport 6 baterii AA Optimus digital
Comutator KCD10-101 Optimus digital
Set Fire tata-tata Optimus digital
Set fire mama-tata Optimus digital

Schema Electrica

Schema Board

Software Design

Descrierea generala a aplicatiei (Firmware)

Aceasta aplicatie controleaza un robot mobil autonom („Willy”), dotat cu:

  • Senzori ultrasonici pentru detectia obstacolelor.
  • Senzori infrarosu (IR) pentru urmarirea unui obiect (de exemplu, o mana).
  • Motoare DC pentru miscare si manevrare.
  • Buzzer pentru semnalizare sonora.
  • Ecran LCD I2C 16×2 pentru afisarea starii robotului.

Robotul functioneaza in mod follow-me: detecteaza si urmareste un obiect apropiat. Se opreste sau se retrage cand identifica un obstacol.

Mediu de dezvoltare

  • Platforma hardware: Arduino UNO (ATmega328P)
  • Mediu de dezvoltare: Arduino IDE 2.x
  • Limbaj de programare: C++ (Arduino Sketch)
  • Placa suport: Arduino UNO R3

Librarii si surse 3rd-party utilizate

Biblioteca Descriere Link
`NewPing` Permite masurarea precisa a distantei cu senzorul ultrasonic HC-SR04. NewPing Library
`Wire` Protocol I2C pentru comunicatia cu ecranul LCD. Inclusa in Arduino IDE
`LiquidCrystal_I2C` Suport pentru afisaj LCD 16×2 cu interfata I2C. LiquidCrystal_I2C

Algoritmi si structuri implementate

Algoritmi principali

  • Controlul miscarii robotului:
    • Functia `rotateMotor()` permite controlul diferential al motoarelor, in functie de detectiile senzorilor IR sau ultrasonic.
    • Viteza ajustabila: `MAX_SPEED` + `ADJUST_SPEED` (forward) sau diferentiere la viraje (`+/-`).
  • Detectia obstacolului cu senzor ultrasonic:
    • Cu biblioteca `NewPing`, masuram distanta in centimetri.
    • Daca distanta < 2 cm, se activeaza un semnal sonor (`buzzer`) si robotul se opreste, se retrage (da putin cu spatele), apoi se opreste complet.
  • Urmarirea obiectului cu senzori IR:
    • Daca ambii senzori IR detecteaza obiect (LOW), robotul merge inainte (`Chasing`).
    • Daca doar un senzor detecteaza (LOW), robotul vireaza in directia respectiva (`Turning Left` / `Turning Right`).
    • Daca nu detecteaza, se opreste (`Waiting…`).
  • Afisarea starii pe LCD:
    • Starea robotului (`Chasing`, `Turning`, `Obstacle`, `Waiting`) este afisata impreuna cu caractere customizate (emoji, sageti).
    • Bara de progres (`distance bar`) arata distanta fata de obstacol (linie pe randul 2 al LCD).

Structuri de date

  • Variabile globale pentru:
    • Viteze motoare (`currentRightSpeed`, `currentLeftSpeed`).
    • Stare obstacol (`check_close`).
    • Ultimul caracter afisat pe ecran (`lastStatus` - optional pentru optimizare).
  • Caractere custom (`byte SmileyFaceChar[]`, `byte StopChar[]`, `byte leftArrowChar[]`, `byte rightArrowChar[]`).

Etapa 3: Surse si functii implementate

Fisiere sursa

  • `main.ino` – Codul principal (Arduino Sketch).

Functii implementate

Functie Rol
`setup()` Initializeaza pinii, LCD-ul, motoarele, senzorii.
`loop()` Logica principala a programului: detectie obstacole, urmarire IR, update LCD, buzzer.
`rotateMotor()` Controleaza directia si viteza motoarelor in functie de parametrii.
`displaySpeed()` (nefolosit) Afiseaza viteza pe LCD (optional, comentat).
`lcd.createChar()` Definirea caracterelor custom pentru LCD (smiley, stop, sageti).

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/apredescu/cristian.deda.1748401143.txt.gz · Last modified: 2025/05/28 05:59 by cristian.deda
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