Mașină controlată prin mișcările mâinii

Nume: Popa Sorin-Alexandru

Grupă: 333CC

Introducere

  • Proiectul constă într-o mașină controlată de la distanță, prin intermediul unei interfețe wireless și a senzorilor de mișcare. Utilizând un modul transceiver NRF și un giroscop MPU6050, mașina poate fi direcționată și controlată în funcție de gesturile mâinii utilizatorului.
  • Proiectul a fost inspirat din mașinuțele cu telecomandă / controlate de la distanță.

Descriere generală

  • Proiectul presupune implementarea a două părți: emițătorul, atașat de mână, alcătuit în principal dintr-un giroscop și un modul wireless prin care trimite date, și receptorul, atașat de mașină, care interpretează datele primite și ajustează viteza și direcția mașinii folosind un modul de driver de motor.

Hardware Design

Listă de piese

  • Arduino Nano (x2)
  • Modul wireless NRF24L01 (x2)
  • Adaptor modul wireless (x2)
  • Giroscop MPU6050
  • Kit mașină
  • Modul driver de motor L298N
  • Breadboard / PCB (x2),
  • Baterii, cabluri

Schema electrică receptor

Schema electrică emiţător

Comunicarea giroscopului cu Arduino Nano se face prin intermediul comunicării I2C, prin urmare am conectat SCL si SDA pe pinii specifici:

  • SDA - A4
  • SCL - A5

Comunicarea intre modulele wireless se face cu ajutorul SPI-ului, am conectat pinii MOSI, MISO si SCK la pinii specifici de pe Arduino:

  • MOSI - D11
  • MISO - D12
  • SCK - D13

Software Design

Librării folosite:

Iniţializare structuri si variabile necesare pentru MPU6050:

 // MPU control/status vars
 MPU6050 mpu;
 bool dmpReady = false;  // set true if DMP init was successful
 uint8_t devStatus;      // return status after each device operation (0 = success, !0 = error)
 uint16_t packetSize;    // expected DMP packet size (default is 42 bytes)
 uint8_t fifoBuffer[64]; // FIFO storage buffer
 Quaternion q;           // [w, x, y, z]         quaternion container
 VectorFloat gravity;    // [x, y, z]            gravity vector
 float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector

Setare adresă de comunicaţie si pinii CE si CSN pentru modulul wireless:

const uint64_t pipeOut = 0xF9E8F0F0E1LL;
RF24 radio(8, 9);

Pachetul trimis intre modulele wireless:

 struct PacketData
 {
  byte xAxisValue;
  byte yAxisValue;
  } data;

Extrag x-ul si y-ul folosind funcţii specifici MPU-ului, apoi le trimit catre receptor:

 radio.write(&data, sizeof(PacketData));

Receptorul preia datele trimise:

 radio.read(&receiverData, sizeof(PacketData)); 

Funcţia rotateMotor controlează direcţia motoarelor de pe partea stangă si dreaptă, iar apoi setează folosind PWM viteza acestora.

Rezultate Obţinute

Imagini

Inainte de lipire (emiţător):

După lipire (emiţător):

Final:

Concluzii

În cadrul proiectului, am învățat să lipesc componente și să creez și să folosesc scheme electrice. De asemenea, am realizat importanța unor baterii potrivite pentru a putea alimenta circuitele. Bateriile de 9V, 600 mAh aveau o capacitate prea mică pentru a putea folosi in mod normal motoarele DC, le-am schimbat cu baterii de 5000 mAh, 7.4V (2 de 3.7V in serie).

Download

Jurnal

  • 29.04 - cumpărare piese
  • 4.05 - asamblare mașină
  • 11.05 - realizare scheme electrice
  • 14.05 - montare circuite pe breadboard
  • 17.05 - lipire partea de emiţător
  • 20.05 - adăugare buton de ON/OFF la partea de emiţător
  • 26.05 - finalizare proiect

Bibliografie/Resurse

pm/prj2024/tdicu/sorin.popa0509.txt · Last modified: 2024/05/26 21:08 by sorin.popa0509
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