Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

Komponen dan Perlengkapan

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Arduino UNO
×1
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Arduino Nano R3
×1
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Modul Bluetooth HC-05
×2
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
SparkFun Triple Axis Accelerometer and Gyro Breakout - MPU-6050
×1
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Motor DC, 12 V
×2
ban karet
×1
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Texas Instruments Dual H-Bridge motor drivers L293D
×1
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Baterai 9V (Umum)
×2

Alat dan Mesin yang Diperlukan

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Paku Solder (Umum)
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Kawat Solder, Bebas Timbal
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Tape, Foam
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Multitool, Obeng

Aplikasi dan Layanan Online

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Arduino IDE

Tentang Proyek Ini


Ini tentang cara membuat kendaraan kendali gestur sendiri. Pada dasarnya ini adalah aplikasi sederhana dari MPU-6050 3-axis Gyroscope, Accelerometer. Anda dapat melakukan banyak hal lagi. dengan memahami cara menggunakannya, cara menghubungkannya dengan Arduino dan cara mentransfer datanya melalui modul Bluetooth. dalam tulisan ini, saya akan fokus pada komunikasi Bluetooth ke Bluetooth, di antara dua modul Bluetooth HC-05.

Ikuti video untuk membuat badan robot dan koneksi untuk proyek ini.

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

diagram koneksi untuk unit robot dan pengirim diberikan di bawah ini, Anda dapat merujuknya.

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

Pesanan PCB langsung yang digunakan dalam proyek ini dari PCBway: https://www.pcbway.com/project/shareproject/How_to_Make_Arduino_Based_Edge_Avoiding_Robot.html

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

Sekarang mari kita bicara tentang konfigurasi modul Bluetooth. dasarnya, modul Bluetooth HC-05 dilengkapi dengan pengaturan pabrik sebagai modul slave. itu berarti kita dapat mengirim data ke modul hanya dengan mencoloknya. tidak perlu melakukan pengaturan lain untuk mengirim data dari perangkat seluler ke modul HC-05. cukup masukkan kata sandi defaultnya (1234/0000) untuk menghubungkannya. tapi bagaimana jika kita ingin mengirim data menggunakan modul ini ke modul lain yang sama atau ke perangkat seluler.

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

dalam proyek ini, kita melakukan hal yang sama mengirim data melalui modul Bluetooth. dikumpulkan oleh sensor giro mpu-6050 ke modul Bluetooth lainnya.

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

jadi untuk melakukan ini Pertama kita perlu mengonfigurasi kedua modul Bluetooth ini. sehingga mereka dapat secara otomatis terikat satu sama lain setelah menyala. Di sini modul pertama bertindak sebagai perangkat slave, yang akan menerima sinyal dari unit remote dan akan dipasang pada mobil. Dan konfigurasikan yang kedua sebagai perangkat master yang akan bertindak sebagai unit pengirim dan akan mengirim data ke perangkat slave,

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

Jadi pertama konfigurasikan modul bluetooth pertama sebagai perangkat slave. untuk melakukan ini hubungkan dengan Arduino sesuai dengan diagram penyiangan ini.

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

Dan unggah kode dengan nama configure.

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX | TX
void setup()
{
Serial.begin(9600);
Serial.println("Enter AT commands:");
BTSerial.begin(38400); // HC-05 default speed in AT command more
}
void loop()
{
// Keep reading from HC-05 and send to Arduino Serial Monitor
if (BTSerial.available())
Serial.write(BTSerial.read());
// Keep reading from Arduino Serial Monitor and send to HC-05
if (Serial.available())
BTSerial.write(Serial.read());
}

Putuskan modul. Tekan dan tahan tombol pada modul dan hubungkan kembali. Anda akan melihat LED pada modul berkedip lebih lambat. Sekali setiap 2 detik. Ini berarti HC-05 berada dalam mode perintah AT. Sekarang buka serial monitor ubah baud rate menjadi 9600 dan jenis output sebagai both NL & CR. Sekarang ketik AT di kotak kirim dan kirim. jika itu merespons dengan ok, berarti semuanya baik. Tapi jika tidak, dan merespons dengan beberapa kesalahan, Kirim AT lagi. Sampai itu merespons dengan ok atau cek koneksi dan kirim AT lagi …

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

setelah mendapatkan respons OK dari modul masukkan perintah berikut satu per satu,

AT+ORGL dan kirim. perintah ini akan mengatur modul ke pengaturan pabrik.

AT+RMAAD perintah ini akan melepaskan modul dari pasangan sebelumnya

AT+UART? periksa baud rate saat ini modul

AT+UART=38400, 0, 0 atur baud rate sebagai 38400

AT+ROLE? periksa peran apakah itu slave atau master. itu merespons dengan 0 atau 1. jika modul adalah slave itu merespons 0 dan jika itu perangkat master maka itu akan merespons dengan 1

atur peran sebagai perangkat slave. masukkan AT+ROLE=0

AT+ADDR? periksa alamat modul.

Catat alamat ini. yang diberikan oleh modul. setelah mendapatkan alamat ini, konfigurasi untuk modul slave selesai.

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

Sekarang giliran untuk mengonfigurasi modul Bluetooth kedua sebagai perangkat master. Hubungkan modul ini dengan papan Arduino dan masukkan ke mode AT. seperti yang kita lakukan dengan yang sebelumnya.

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

Masukkan perintah AT ini dengan urutan yang diberikan.

AT+ORGL

AT+RMAAD

AT+UART?

AT+UART=38400, 0, 0

AT+ROLE?

atur peran modul ini sebagai perangkat master. AT+ROLE=1

AT+CMODE=0 sehingga modul akan terhubung hanya satu perangkat. pengaturan default adalah 0

selanjutnya ikatkan modul ini dengan perangkat slave untuk melakukan ini masukkan,

AT+BIND="alamat modul slave" dan selesai

selanjutnya instal library untuk sensor MPU-6050 dan komunikasi I2C. Karena sensor giro MPU-6050 memiliki antarmuka I2C. unduh library dan Kode sumber dari sini: https://www.mediafire.com/file/l8mru5emulb8x93/gesture_control_robot.rar/file

jika Anda telah menginstal library ini sebelumnya, lewati langkah ini.

Sekarang hubungkan unit mobil ke PC menggunakan kabel USB. pilih port COM dan jenis papan yang benar. Dan unggah program dengan nama "Gesture_controled_Robot__car_unit_". Pastikan baterai dan modul Bluetooth tidak terhubung dengan mobil saat mengunggah program.

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
//program by Shubham Shinganapure on 3-10-2019
//
//for Gesture controled Robotic Car
int lm1=8; //left motor output 1
int lm2=9; //left motor output 2
int rm1=10; //right motor output 1
int rm2=11; //right motor output 2
char d=0;
void setup()
{
pinMode(lm1,OUTPUT);
pinMode(lm2,OUTPUT);
pinMode(rm1,OUTPUT);
pinMode(rm2,OUTPUT);
Serial.begin(38400);
sTOP();
}
void loop()
{
if(Serial.available()>0)
{
d=Serial.read();
if(d=='F')
{
ForWard();
}
if(d=='B')
{
BackWard();
}
if(d=='L')
{
Left();
}
if(d=='R')
{
Right();
}
if(d=='S')
{
sTOP();
}
}
}
void ForWard()
{
digitalWrite(lm1,HIGH);
digitalWrite(lm2,LOW);
digitalWrite(rm1,HIGH);
digitalWrite(rm2,LOW);
}
void BackWard()
{
digitalWrite(lm1,LOW);
digitalWrite(lm2,HIGH);
digitalWrite(rm1,LOW);
digitalWrite(rm2,HIGH);
}
void Left()
{
digitalWrite(lm1,LOW);
digitalWrite(lm2,HIGH);
digitalWrite(rm1,HIGH);
digitalWrite(rm2,LOW);
}
void Right()
{
digitalWrite(lm1,HIGH);
digitalWrite(lm2,LOW);
digitalWrite(rm1,LOW);
digitalWrite(rm2,HIGH);
}
void sTOP()
{
digitalWrite(lm1,LOW);
digitalWrite(lm2,LOW);
digitalWrite(rm1,LOW);
digitalWrite(rm2,LOW);
}

Lakukan hal yang sama dengan unit remote. buka program dengan nama remote. dan unggah ke unit remote.

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
//program modified on 3/10/19 by // by Shubham Shinganapure.
//
//for Gesture controled Robotic Car (remote )
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
//#include "MPU6050.h" // not necessary if using MotionApps include file
// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
// class default I2C address is 0x68
// specific I2C addresses may be passed as a parameter here
// AD0 low = 0x68 (default for SparkFun breakout and InvenSense evaluation board)
// AD0 high = 0x69
MPU6050 mpu;
#define OUTPUT_READABLE_YAWPITCHROLL
// MPU control/status vars
bool dmpReady = false; // set true if DMP init was successful
uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU
uint8_t devStatus; // return status after each device operation (0 = success, !0 = error)
uint16_t packetSize; // expected DMP packet size (default is 42 bytes)
uint16_t fifoCount; // count of all bytes currently in FIFO
uint8_t fifoBuffer[64]; // FIFO storage buffer
VectorFloat gravity;
Quaternion q;
float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector
uint8_t teapotPacket[14] = { '$', 0x02, 0,0, 0,0, 0,0, 0,0, 0x00, 0x00, '\r', '\n' };
volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high
void dmpDataReady() {
mpuInterrupt = true;
}
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX | TX
int bt=8;
int x =1;
void setup() {
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
Wire.begin();
TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz)
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
Fastwire::setup(400, true);
#endif
// initialize serial communication
// (115200 chosen because it is required for Teapot Demo output, but it's
// really up to you depending on your project)
Serial.begin(115200);
BTSerial.begin(38400);
// while (!Serial); // wait for Leonardo enumeration, others continue immediately
Serial.println(F("Initializing I2C devices..."));
mpu.initialize();
// verify connection
Serial.println(F("Testing device connections..."));
Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));
// wait for ready
// load and configure the DMP
Serial.println(F("Initializing DMP..."));
devStatus = mpu.dmpInitialize();
// supply your own gyro offsets here, scaled for min sensitivity
mpu.setXGyroOffset(220);
mpu.setYGyroOffset(76);
mpu.setZGyroOffset(-85);
mpu.setZAccelOffset(1788);
// make sure it worked (returns 0 if so)
if (devStatus == 0) {
// turn on the DMP, now that it's ready
Serial.println(F("Enabling DMP..."));
mpu.setDMPEnabled(true);
// enable Arduino interrupt detection
Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)..."));
attachInterrupt(0, dmpDataReady, RISING);
mpuIntStatus = mpu.getIntStatus();
// set our DMP Ready flag so the main loop() function knows it's okay to use it
Serial.println(F("DMP ready! Waiting for first interrupt..."));
dmpReady = true;
// get expected DMP packet size for later comparison
packetSize = mpu.dmpGetFIFOPacketSize();
} else {
// ERROR!
// 1 = initial memory load failed
// 2 = DMP configuration updates failed
// (if it's going to break, usually the code will be 1)
Serial.print(F("DMP Initialization failed (code "));
Serial.print(devStatus);
Serial.println(F(")"));
}
// configure LED for output
pinMode(bt,INPUT);
}
// ================================================================
// === MAIN PROGRAM LOOP ===
// ================================================================
void loop() {
if(digitalRead(bt)==HIGH)
{
x++;
delay(150);
}
if((x%2)==0){
// if programming failed, don't try to do anything
if (!dmpReady) return;
// wait for MPU interrupt or extra packet(s) available
while (!mpuInterrupt && fifoCount < packetSize) {
// other program behavior stuff here
// .
// .
// .
// if you are really paranoid you can frequently test in between other
// stuff to see if mpuInterrupt is true, and if so, "break;" from the
// while() loop to immediately process the MPU data
// .
// .
// .
}
// reset interrupt flag and get INT_STATUS byte
mpuInterrupt = false;
mpuIntStatus = mpu.getIntStatus();
// get current FIFO count
fifoCount = mpu.getFIFOCount();
// check for overflow (this should never happen unless our code is too inefficient)
if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
// reset so we can continue cleanly
mpu.resetFIFO();
Serial.println(F("FIFO overflow!"));
// otherwise, check for DMP data ready interrupt (this should happen frequently)
} else if (mpuIntStatus & 0x02) {
// wait for correct available data length, should be a VERY short wait
while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
// read a packet from FIFO
mpu.getFIFOBytes(fifoBuffer, packetSize);
// track FIFO count here in case there is > 1 packet available
// (this lets us immediately read more without waiting for an interrupt)
fifoCount -= packetSize;
#ifdef OUTPUT_READABLE_YAWPITCHROLL
// display Euler angles in degrees
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
Serial.print("ypr\t");
Serial.print(ypr[0] * 180/M_PI);
Serial.print("\t");
Serial.print(ypr[1] * 180/M_PI);
Serial.print("\t");
Serial.println(ypr[2] * 180/M_PI);
if((ypr[1] * 180/M_PI)<= -25)
{BTSerial.write('F');
}
else if((ypr[1] * 180/M_PI)>= 25)
{BTSerial.write('B');
}
else if((ypr[2] * 180/M_PI)<= -25)
{BTSerial.write('L');
}
else if((ypr[2] * 180/M_PI)>= 20)
{BTSerial.write('R');
}
else{
BTSerial.write('S');
}
#endif
}
}else{
BTSerial.write('S');
}
}

Masukkan modul Bluetooth slave pada unit mobil dan master modul Bluetooth pada unit remote. Dan selesai.

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

Ayo nyalakan dan siap untuk bermain…….

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050
Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050



Semoga Anda menemukan ini berguna. jika ya, like, share, komentari keraguan Anda. Untuk lebih banyak proyek seperti ini, ikuti saya! Dukung pekerjaan saya dan Berlangganan Saluran YouTube saya.

Terima kasih!

Kode

Robot kendali gestur (unit remote)Arduino
//program modified on 3/10/19 by // by Shubham Shinganapure. // //for Gesture controled Robotic Car (remote ) #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" //#include "MPU6050.h" // not necessary if using MotionApps include file // Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation // is used in I2Cdev.h #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for SparkFun breakout and InvenSense evaluation board) // AD0 high = 0x69 MPU6050 mpu; #define OUTPUT_READABLE_YAWPITCHROLL // MPU control/status vars bool dmpReady = false; // set true if DMP init was successful uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU uint8_t devStatus; // return status after each device operation (0 = success, !0 = error) uint16_t packetSize; // expected DMP packet size (default is 42 bytes) uint16_t fifoCount; // count of all bytes currently in FIFO uint8_t fifoBuffer[64]; // FIFO storage buffer VectorFloat gravity; Quaternion q; float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector uint8_t teapotPacket[14] = { '$', 0x02, 0,0, 0,0, 0,0, 0,0, 0x00, 0x00, '\r', '\n' }; volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high void dmpDataReady() { mpuInterrupt = true; } #include <SoftwareSerial.h> SoftwareSerial BTSerial(10, 11); // RX | TX int bt=8; int x =1; void setup() { #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz) #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif // initialize serial communication // (115200 chosen because it is required for Teapot Demo output, but it's // really up to you depending on your project) Serial.begin(115200); BTSerial.begin(38400); // while (!Serial); // wait for Leonardo enumeration, others continue immediately Serial.println(F("Initializing I2C devices...")); mpu.initialize(); // verify connection Serial.println(F("Testing device connections...")); Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed")); // wait for ready // load and configure the DMP Serial.println(F("Initializing DMP...")); devStatus = mpu.dmpInitialize(); // supply your own gyro offsets here, scaled for min sensitivity mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); // make sure it worked (returns 0 if so) if (devStatus == 0) { // turn on the DMP, now that it's ready Serial.println(F("Enabling DMP...")); mpu.setDMPEnabled(true); // enable Arduino interrupt detection Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)...")); attachInterrupt(0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // set our DMP Ready flag so the main loop() function knows it's okay to use it Serial.println(F("DMP ready! Waiting for first interrupt...")); dmpReady = true; // get expected DMP packet size for later comparison packetSize = mpu.dmpGetFIFOPacketSize(); } else { // ERROR! // 1 = initial memory load failed // 2 = DMP configuration updates failed // (if it's going to break, usually the code will be 1) Serial.print(F("DMP Initialization failed (code ")); Serial.print(devStatus); Serial.println(F(")")); } // configure LED for output pinMode(bt,INPUT); } // ================================================================ // === MAIN PROGRAM LOOP === // ================================================================ void loop() { if(digitalRead(bt)==HIGH) { x++; delay(150); } if((x%2)==0){ // if programming failed, don't try to do anything if (!dmpReady) return; // wait for MPU interrupt or extra packet(s) available while (!mpuInterrupt && fifoCount < packetSize) { // other program behavior stuff here // . // . // . // if you are really paranoid you can frequently test in between other // stuff to see if mpuInterrupt is true, and if so, "break;" from the // while() loop to immediately process the MPU data // . // . // . } // reset interrupt flag and get INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is > 1 packet available // (this lets us immediately read more without waiting for an interrupt) fifoCount -= packetSize; #ifdef OUTPUT_READABLE_YAWPITCHROLL // display Euler angles in degrees mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); Serial.print("ypr\t"); Serial.print(ypr[0] * 180/M_PI); Serial.print("\t"); Serial.print(ypr[1] * 180/M_PI); Serial.print("\t"); Serial.println(ypr[2] * 180/M_PI); if((ypr[1] * 180/M_PI)<= -25) {BTSerial.write('F'); } else if((ypr[1] * 180/M_PI)>= 25) {BTSerial.write('B'); } else if((ypr[2] * 180/M_PI)<= -25) {BTSerial.write('L'); } else if((ypr[2] * 180/M_PI)>= 20) {BTSerial.write('R'); } else{ BTSerial.write('S'); } #endif } } else{ BTSerial.write('S'); } } 

Skematik

Buat Robot Kendali Gestur di Rumah dengan Arduino dan MPU-6050

Proses manufaktur

  1. Membangun Robot Berbasis Arduino dengan Raspberry Pi: Panduan Langkah demi Langkah
  2. Buat Mesin Menulis Tugas DIY Sendiri di Rumah
  3. Robot Penghindar Halangan Direnkai Servo: Bangun dengan Arduino & HC-SR04
  4. Buat Robot Pengikuti Garis Otonom dengan Arduino UNO
  5. Buat Tombol Keyboard Punchable Kustom dengan Arduino: Panduan Langkah demi Langkah
  6. Bangun Robot Asisten Rumah Otonom: Daftar Lengkap Komponen & Panduan Pengaturan
  7. Buat Nada Musik dengan Arduino: Panduan Langkah demi Langkah
  8. Bangun Pintu Otomatis Berbasis Arduino dengan Sensor Ultrasonik
  9. Kontrol Lengan Robot Arduino Anda melalui Aplikasi Android Khusus
  10. Kit Robot Navigasi Indoor Cerdas untuk Proyek Arduino