This is an old revision of the document!
Desk Buddy
Introducere
Proiectul este reprezentat de un mic robotel de birou, creat special pentru a ii oferi utilizatorului interactiuni placute si a ajuta cu singuratatea. Acesta este dotat cu un senzor de atingere si unul de distanta, reactionand la factori externi prin expresii faciale care pot fi vazute pe ecranul sau LCD rotund. Are de asemenea si un servo care serveste la miscarea capului. Atunci cand este atins, robotelul devine fericit, iar atunci cand detecteaza pe cineva la o distanta mai mica de 10 cm, incepe sa isi scuture capul, entuziasmat. Atunci cand este ignorat, robotelul este trist.
Descriere generală
La atingere, ecranul va afisa o expresie faciala fericita. Atunci cand nu mai este atins, robotelul devine trist, iar atunci cand senzorul detecteaza miscare, robotelul devine entuziasmat, anticipand afectiune.
Hardware Design
Listă de piese:
HC-SR04
ESP32
LCD ST7735
Servo motor
Buck
Baterie 9V
Software Design
Mediu de Dezvoltare
Arduino IDE
Librării: TFT_eSPI, ESP32Servo, Wire, SPI, Adafruit
Funcționalități
Afișarea expresiilor faciale (fericit, trist, entuziasmat) pe ecranul TFT
Detectarea atingerii și a distanței
Mișcarea servo motorului în funcție de starea detectată
Exemple
1. measureHCSR04Distance
Această funcție măsoară distanța folosind senzorul ultrasonic HC-SR04 și returnează valoarea măsurată în centimetri.
int measureHCSR04Distance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
if (distance < 2 || distance > 30) {
return maxDistance;
}
return distance;
}
2. adjustServo
Această funcție mișcă servo motorul între 0 și 90 de grade de două ori pentru a simula o reacție fizică.
void adjustServo() {
for (int i = 0; i < 2; i++) {
myservo.write(0);
delay(500);
myservo.write(90);
delay(500);
Serial.println("Servo moved to 90 degrees");
}
}
3. draw…Face()
Aceasta functie foloseste libraria Adafruit pentru a desena pe ecran diferite expresii faciale:
void drawHappyFace() {
tft.init();
tft.fillScreen(lightPink);
tft.fillCircle(64, 85, 20, ST7735_BLACK);
tft.fillRect(44, 65, 45, 20, lightPink);
tft.fillCircle(40, 64, 20, ST7735_BLACK);
tft.fillCircle(50, 60, 5, ST7735_WHITE);
tft.fillCircle(88, 64, 20, ST7735_BLACK);
tft.fillCircle(98, 60, 5, ST7735_WHITE);
}
Funcția principală a programului, care monitorizează senzorul de atingere și senzorul de distanță, schimbând expresiile faciale și ajustând servo motorul în funcție de stările detectate.
Aceste fragmente de cod evidențiază principalele funcționalități ale proiectului Desk Buddy, oferind un exemplu clar de implementare pentru interacțiunile robotului.
Rezultate Obţinute
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