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. Are de asemenea si un servomotor care serveste la miscarea capului.

Descriere generală

La atingerea senzorului, robotelul devine fericit, iar atunci cand detecteaza (cu ajutorul HC-SR04) pe cineva la o distanta mai mica de 10 cm, incepe sa isi scuture capul, entuziasmat (cu ajutorul servomotorului). Atunci cand este ignorat, robotelul este trist.

Hardware Design

Listă de piese:

  1. HC-SR04
  2. ESP32
  3. LCD ST7735
  4. Senzor de atingere
  5. Servo motor
  6. Buck
  7. Baterie 9V

Software Design

Mediu de Dezvoltare

  1. Visual Studio Code (PlatformIO)
  2. 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

Aceste fragmente de cod evidențiază principalele funcționalități ale robotelului.

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(40, 64, 7, ST7735_WHITE);

    tft.fillCircle(88, 64, 20, ST7735_BLACK); 
    tft.fillCircle(98, 60, 5, ST7735_WHITE);  
    tft.fillCircle(88, 64, 7, ST7735_WHITE);  
    
    tft.fillRect(20, 75, 40, 10, lightPink);
    tft.fillRect(68, 75, 40, 10, lightPink);
}

Funcția principală a programului (loop) monitorizează senzorul de atingere și senzorul de distanță, schimbând expresiile faciale și ajustând servo motorul în funcție de stările detectate.

Rezultate Obţinute

Rezultat final:

YouTube Demo: Desk Buddy

Concluzii

Proiectul a fost unul foarte interesant, mi-a placut foarte mult sa ma joc cu culorile si reactiile robotelului. Sunt incantata sa am o dovada fizica a muncii mele si voi continua sa mai lucrez la el si pe viitor, in special pe partea estetica (cablaj, carcasa, etc).

Download

Bibliografie/Resurse

pm/prj2024/tdicu/alexandra.burnichi.txt · Last modified: 2024/05/27 03:35 by alexandra.burnichi
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