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

Cara Membuat Robot Kontrol Isyarat di Rumah

Komponen dan persediaan

Arduino UNO
× 1
Arduino Nano R3
× 1
Modul Bluetooth HC-05
× 2
SparkFun Triple Axis Accelerometer dan Gyro Breakout - MPU-6050
× 1
Motor DC, 12 V
× 2
roda karet
× 1
Driver motor H-Bridge Ganda Instrumen Texas L293D
× 1
Baterai 9V (generik)
× 2

Alat dan mesin yang diperlukan

Besi solder (generik)
Kawat Solder, Bebas Timah
Pita, Busa
Multitool, Obeng

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini


Ini tentang cara membuat mobil yang dikendalikan gerakan sendiri. Pada dasarnya ini adalah aplikasi sederhana dari MPU-6050 3-axis Gyroscope, Accelerometer. Anda dapat melakukan lebih banyak hal. 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.

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

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

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

dalam proyek ini, kami melakukan hal yang sama mengirim data melalui modul Bluetooth. dikumpulkan oleh sensor gyro mpu-6050 ke modul Bluetooth lain.

jadi untuk melakukan ini Pertama kita perlu mengkonfigurasi dua modul Bluetooth ini. sehingga mereka bisa secara otomatis mengikat satu sama lain setelah dihidupkan. Di sini modul pertama bertindak sebagai perangkat budak, yang akan menerima sinyal dari unit jarak jauh dan akan dipasang di mobil. Dan konfigurasikan yang kedua sebagai perangkat master yang akan bertindak sebagai unit pemancar dan akan mengirim data ke perangkat budak,

Jadi pertama-tama konfigurasikan modul bluetooth pertama sebagai perangkat budak. untuk melakukan ini, hubungkan dengan Arduino sesuai diagram pengkabelan ini.

Dan unggah kode dengan nama configure.

#include 
SoftwareSerial BTSerial (10, 11); // RX | TX
pengaturan batal()
{
Serial.begin(9600);
Serial.println("Masukkan perintah AT:");
BTSerial.begin(38400 ); // Kecepatan default HC-05 dalam perintah AT more
}
void loop()
{
// Terus membaca dari HC-05 dan kirim ke Arduino Serial Monitor
if (BTSerial.available())
Serial.write(BTSerial.read());
// Terus membaca dari Arduino Serial Monitor dan kirim ke HC-05
if (Serial. tersedia())
BTSerial.write(Serial.read());
}

Putuskan sambungan modul. Tekan dan tahan ky pada modul dan sambungkan kembali. Anda akan melihat led pada modul berkedip lebih lambat. Setiap 2 detik sekali. Ini berarti HC-05 dalam mode perintah AT. Sekarang buka monitor serial ubah baud rate menjadi 9600 dan tipe output sebagai NL &CR. Sekarang ketik AT di kotak kirim dan kirimkan. jika menjawab dengan ok, itu berarti semuanya baik-baik saja. Tetapi jika tidak, dan membalas dengan beberapa kesalahan, Kirim AT lagi. Sampai dibalas dengan koneksi ok atau chek dan kirim AT lagi …

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

AT+ORGL dan kirimkan. perintah ini akan mengatur modul dalam pengaturan pabrik.

AT+RMAAD perintah ini akan melepaskan modul dari pasangan sebelumnya

AT+UART? periksa baud rate modul saat ini

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

DI+PERAN? periksa peran apakah itu budak atau master. itu membalas dengan 0 atau 1. jika modul adalah budak itu menjawab 0 dan jika itu adalah perangkat master maka akan membalas dengan 1

mengatur peran sebagai perangkat budak. masukkan AT+ROLE=0

AT+ADDR? periksa alamat modul.

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

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

Masukkan perintah AT ini dengan urutan yang diberikan.

AT+ORGL

AT+RMAAD

AT+UART?

AT+UART=38400, 0, 0

DI+PERAN?

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

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

sekarang ikat modul ini dengan perangkat budak untuk melakukan enter,

AT+BIND=" alamat modul slave" dan semuanya selesai

sekarang instal perpustakaan untuk sensor MPU-6050 dan komunikasi I2C. Karena sensor gyro MPU-6050 memiliki antarmuka I2C. unduh pustaka dan kode sumber dari sini:http://www.mediafire.com/file/l8mru5emulb8x93/gesture_control_robot.rar/file

jika Anda telah menginstal pustaka ini, lewati ini.

Sekarang sambungkan unit mobil dengan pc menggunakan kabel USB. pilih port com dan jenis papan yang benar. Dan upload program dengan nama "Gesture_controled_Robot__car_unit_". Pastikan baterai dan modul Bluetooth tidak terhubung dengan mobil saat mengupload program.

//program oleh Shubham Shinganapure pada 10-03-2019
//
//untuk Mobil Robot yang Dikendalikan Gerakan
int lm1=8; //output motor kiri 1
int lm2=9; //output motor kiri 2
int rm1=10; //output motor kanan 1
int rm2=11; //output motor kanan 2
char d=0;
pengaturan kosong()
{
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();
}
jika(d=='L')
{
Kiri();
}
jika(d=='R')
{
Kanan();
}
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 Kanan()
{
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,RENDAH);
}

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

//program diubah pada 3/10/19 oleh // oleh Shubham Shinganapure.
//
//untuk Mobil Robot yang dikendalikan Gesture (jarak jauh )
#include " I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
//#include "MPU6050.h" // tidak perlu jika menggunakan MotionApps include file
// Perpustakaan Arduino Wire diperlukan jika I2Cdev Implementasi I2CDEV_ARDUINO_WIRE
// digunakan di I2Cdev.h
#jika I2CDEV_IMPLEMENTATION ==I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
// class default I2C alamatnya adalah 0x68
// alamat I2C tertentu dapat diteruskan sebagai parameter di sini
// AD0 rendah =0x68 (default untuk pelarian SparkFun dan papan evaluasi InvenSense)
// AD0 tinggi =0x69
MPU6050 mpu;
#define OUTPUT_READABLE_YAWPITCHROLL
// MPU control/status vars
bool dmpReady =false; // set true jika init DMP berhasil
uint8_t mpuIntStatus; // menyimpan byte status interupsi aktual dari MPU
uint8_t devStatus; // mengembalikan status setelah setiap operasi perangkat (0 =sukses, !0 =error)
uint16_t packetSize; // ukuran paket DMP yang diharapkan (default adalah 42 byte)
uint16_t fifoCount; // jumlah semua byte saat ini di FIFO
uint8_t fifoBuffer[64]; // buffer penyimpanan FIFO
VectorFloat gravity;
Quaternion q;
float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container dan vektor gravitasi
uint8_t teapotPacket[14] ={ '$', 0x02, 0,0, 0,0, 0,0, 0,0 , 0x00, 0x00, '\r', '\n' };
volatile bool mpuInterrupt =false; // menunjukkan apakah pin interupsi MPU menjadi tinggi
void dmpDataReady() {
mpuInterrupt =true;
}
#include
SoftwareSerial BTSerial( 10, 11); // RX | TX
int bt=8;
int x =1;
pengaturan batal() {
#if I2CDEV_IMPLEMENTATION ==I2CDEV_ARDUINO_WIRE
Wire.begin();
TWBR =24; // 400kHz I2C clock (200kHz jika CPU adalah 8MHz)
#elif I2CDEV_IMPLEMENTATION ==I2CDEV_BUILTIN_FASTWIRE
Fastwire::setup(400, true);
#endif
// inisialisasi serial komunikasi
// (115200 dipilih karena diperlukan untuk keluaran Teapot Demo, tapi itu
// terserah anda tergantung proyek anda)
Serial.begin(115200);
BTSerial.begin(38400);
// while (!Serial); // tunggu penghitungan Leonardo, yang lain segera melanjutkan
Serial.println(F("Inisialisasi perangkat I2C..."));
mpu.initialize();
// verifikasi koneksi
Serial.println(F("Menguji koneksi perangkat..."));
Serial.println(mpu.testConnection() ? F("Koneksi MPU6050 berhasil") :F("Koneksi MPU6050 gagal" ));
// tunggu siap
// load dan konfigurasikan DMP
Serial.println(F("Initializing DMP..."));
devStatus =mpu .dmpInitialize();
// sediakan offset gyro Anda sendiri di sini, diskalakan untuk sensitivitas minimum
mpu.setXGyroOffset(220);
mpu.setYGyroOffset(76);
mpu. setZGyroOffset(-85);
mpu.setZAccelOffset(1788);
// pastikan berhasil (mengembalikan 0 jika demikian)
if (devStatus ==0) {
/ / nyalakan DMP, sekarang sudah siap
Serial.println(F("Enable DMP..."));
mpu.setDMPEnabled(true);
// aktifkan interupsi Arduino deteksi
Serial.println(F("Mengaktifkan deteksi interupsi (interupsi eksternal Arduino 0)..."));
a ttachInterrupt(0, dmpDataReady, RISING);
mpuIntStatus =mpu.getIntStatus();
// setel flag DMP Ready kita sehingga fungsi loop() utama tahu boleh menggunakannya
Serial .println(F("DMP siap! Menunggu interupsi pertama..."));
dmpReady =true;
// dapatkan ukuran paket DMP yang diharapkan untuk perbandingan selanjutnya
packetSize =mpu.dmpGetFIFOPacketSize();
} else {
// ERROR!
// 1 =initial memory load gagal
// 2 =Update konfigurasi DMP gagal
// (jika akan rusak, biasanya kodenya akan menjadi 1)
Serial.print(F("Inisialisasi DMP gagal (kode "));
Serial.print(devStatus);
Serial.println(F(")"));
}
// konfigurasikan LED untuk output
pinMode(bt,INPUT);
}
// ================================================================
// ===LOOP PROGRAM UTAMA ===
// ================================================================
void loop() {
if(digitalRead(bt)==HIGH)
{
x++;
delay(150);
}
if((x%2)==0) {
// jika pemrograman gagal, jangan mencoba melakukan apa pun
if (!dmpReady) kembali;
// tunggu interupsi MPU atau paket tambahan tersedia
while (!mpuInterrupt &&fifoCount // hal-hal perilaku program lainnya di sini
// .
// .
// .
// jika Anda benar-benar paranoid, Anda dapat sering menguji di antara hal-hal
// lainnya untuk melihat apakah mpuInterrupt benar, dan jika demikian, "break;" dari loop
// while() untuk segera memproses data MPU
// .
// .
// .
}
// reset tanda interupsi dan dapatkan byte INT_STATUS
mpuInterrupt =false;
mpuIntStatus =mpu.getIntStatus( );
// dapatkan hitungan FIFO saat ini
fifoCount =mpu.getFIFOCount();
// periksa overflow (ini tidak boleh terjadi kecuali kode kita terlalu tidak efisien)
if ((mpuIntStatus &0x10) || fifoCount ==1024) {
// reset sehingga kita dapat melanjutkan dengan bersih
mpu.resetFIFO();
Serial.println(F("FIFO overflow!"));
// jika tidak, periksa interupsi siap data DMP (ini harus sering terjadi)
} else if (mpuIntStatus &0x02) {
// tunggu untuk panjang data yang tersedia benar, harus SANGAT menunggu sebentar
sementara (fifoCount // membaca paket dari FIFO
mpu.getFIFOBytes(fifoBuffer, packetSize);
// lacak hitungan FIFO di sini jika ada> 1 paket yang tersedia
// (ini memungkinkan kita segera membaca lebih lanjut tanpa menunggu interupsi)
fifoCount -=packetSize;
#ifdef OUTPUT_READABLE_YAWPITCHROLL
// display Sudut euler dalam derajat
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 budak pada unit mobil dan kuasai modul Bluetooth pada unit jarak jauh. Dan semuanya selesai.

Ayo nyalakan dan siap dimainkan…….



Harap Anda menemukan ini berguna. jika ya, suka, bagikan, komentari keraguan Anda. Untuk lebih banyak proyek seperti itu, ikuti saya! Dukung Karya Saya dan Berlangganan Saluran Saya di YouTube.

Terima kasih!

Kode

  • Robot yang dikendalikan gerakan (unit jarak jauh)
Robot yang dikendalikan gerakan (unit jarak jauh)Arduino
//program diubah pada 3/10/19 oleh // oleh Shubham Shinganapure. ////untuk Mobil Robot yang dikendalikan Gerakan (jarak jauh )#include "I2Cdev.h"#include "MPU6050_6Axis_MotionApps20.h"//#include "MPU6050.h" // tidak diperlukan jika menggunakan MotionApps include file// library Arduino Wire diperlukan jika implementasi I2Cdev I2CDEV_ARDUINO_WIRE // digunakan dalam I2Cdev.h#if I2CDEV_IMPLEMENTATION ==I2CDEV_ARDUINO_WIRE #include "Wire.h"#endif// alamat I2C default kelas adalah 0x68// alamat I2C tertentu dapat diteruskan sebagai parameter di sini// AD0 rendah =0x68 (default untuk breakout SparkFun dan papan evaluasi InvenSense)// AD0 tinggi =0x69MPU6050 mpu;#define OUTPUT_READABLE_YAWPITCHROLL// Kontrol/status MPU varsbool dmpReady =false; // set true jika DMP init berhasil mpuIntStatus; // menyimpan byte status interupsi aktual dari MPUuint8_t devStatus; // mengembalikan status setelah setiap operasi perangkat (0 =sukses, !0 =error)uint16_t packetSize; // ukuran paket DMP yang diharapkan (default adalah 42 byte)uint16_t fifoCount; // jumlah semua byte yang saat ini ada di FIFOuint8_t fifoBuffer[64]; // buffer penyimpanan FIFOVectorFloat gravity; Quaternion q; mengapung ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container dan gravity vectoruint8_t teapotPacket[14] ={ '$', 0x02, 0,0, 0,0, 0,0, 0,0, 0x00, 0x00, '\r', '\n' };volatil bool mpuInterrupt =false; // menunjukkan apakah pin interupsi MPU telah menjadi highvoid dmpDataReady() { mpuInterrupt =true;}#include  SoftwareSerial BTSerial(10, 11); // RX | TXint bt=8;int x =1;void setup() { #jika I2CDEV_IMPLEMENTATION ==I2CDEV_ARDUINO_WIRE Wire.begin(); TWBR =24; // 400kHz I2C clock (200kHz jika CPU adalah 8MHz) #elif I2CDEV_IMPLEMENTATION ==I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif // menginisialisasi komunikasi serial // (115200 dipilih karena diperlukan untuk output Teapot Demo, tapi itu // terserah Anda tergantung pada proyek Anda) Serial.begin(115200); BTSerial.begin(38400); // while (!Serial); // tunggu penghitungan Leonardo, yang lain segera melanjutkanSerial.println(F("Menginisialisasi perangkat I2C...")); mpu.initialize(); // verifikasi koneksi Serial.println(F("Menguji koneksi perangkat...")); Serial.println(mpu.testConnection() ? F("Koneksi MPU6050 berhasil") :F("Koneksi MPU6050 gagal")); // tunggu siap // muat dan konfigurasikan DMP Serial.println(F("Inisialisasi DMP...")); devStatus =mpu.dmpInitialize(); // berikan offset gyro Anda sendiri di sini, diskalakan untuk sensitivitas min mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); // pastikan itu bekerja (mengembalikan 0 jika demikian) if (devStatus ==0) { // nyalakan DMP, sekarang sudah siap Serial.println(F("Mengaktifkan DMP...")); mpu.setDMPEnabled(benar); // aktifkan deteksi interupsi Arduino Serial.println(F("Mengaktifkan deteksi interupsi (interupsi eksternal Arduino 0)...")); attachInterrupt(0, dmpDataReady, RISING); mpuIntStatus =mpu.getIntStatus(); // atur flag DMP Ready kita sehingga fungsi loop() utama tahu bahwa tidak apa-apa untuk menggunakannya Serial.println(F("DMP ready! Waiting for first interrupt...")); dmpSiap =benar; // dapatkan ukuran paket DMP yang diharapkan untuk perbandingan nanti packetSize =mpu.dmpGetFIFOPacketSize(); } lain { // GALAT! // 1 =gagal memuat memori awal // 2 =Pembaruan konfigurasi DMP gagal // (jika akan rusak, biasanya kodenya adalah 1) Serial.print(F("Inisialisasi DMP gagal (kode ")); Serial. print(devStatus); Serial.println(F(")")); } // konfigurasikan LED untuk output pinMode(bt,INPUT); }// ================================================================// ===LOOP PROGRAM UTAMA ===// ================================================================void loop() { jika (DigitalBaca(bt)==TINGGI) { x++; penundaan(150); } if((x%2)==0){ // jika pemrograman gagal, jangan mencoba melakukan apapun jika (!dmpReady) kembali; // menunggu interupsi MPU atau paket tambahan tersedia saat (!mpuInterrupt &&fifoCount  1 paket yang tersedia // (ini memungkinkan kita segera membaca lebih banyak tanpa menunggu interupsi) fifoCount -=packetSize; #ifdef OUTPUT_READABLE_YAWPITCHROLL // menampilkan sudut Euler dalam derajat mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravitasi, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravitasi); 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'); }}

Skema


Proses manufaktur

  1. Cara Membuat Platform Robot Arduino+Raspberry Pi
  2. Membuat Mesin Tulis Pekerjaan Rumah DIY di Rumah
  3. Hambatan Menghindari Robot Dengan Motor Servo
  4. Robot Pengikut Baris
  5. Cara Membuat Tombol Keyboard Punchable yang Dapat Disesuaikan
  6. Robot Asisten Rumah Otonom
  7. Cara membuat musik dengan Arduino
  8. Cara membuat Pintu Otomatis Berbasis Arduino
  9. Kontrol Lengan Robot Arduino dengan Aplikasi Android
  10. Robot untuk navigasi dalam ruangan yang sangat keren