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

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Dalam tutorial ini, kita akan mempelajari cara membuat penerima RC berbasis Arduino. Sejak saya membuat pengirim RC Arduino DIY dalam salah satu video saya sebelumnya, saya menerima banyak permintaan dari kalian untuk membuat penerima khusus untuk itu, jadi inilah hasilnya.

Anda dapat menonton video berikut atau membaca tutorial tertulis di bawahnya.

Kini kedua perangkat ini dapat dengan mudah berkomunikasi, dan kita dapat menggunakannya untuk mengontrol banyak hal secara nirkabel. Saya akan menjelaskan bagaimana semuanya bekerja melalui beberapa contoh. Dalam contoh pertama, kita akan menggunakan penerima RC Arduino ini untuk mengontrol mobil sederhana yang terdiri dari dua motor DC. Dalam contoh kedua, saya akan menunjukkan cara mengontrol motor brushless dan servo, yang merupakan komponen umum yang ditemukan di banyak pesawat RC, perahu, mobil komersial, dan sebagainya. Jika kita tahu cara mengontrolnya, kita dapat dengan mudah memodifikasi dan mengontrol banyak model RC dengan pengirim Arduino buatan kami sendiri.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Sebagai contoh ketiga, saya akan menunjukkan bagaimana saya memodifikasi dan menggunakan sistem RC berbasis Arduino ini untuk mengontrol mobil RC komersial.

Rangkaian Penerima RC Arduino

Untuk memulai, mari kita lihat diagram rangkaian sistem ini. Komunikasi radio didasarkan pada modul transceiver NRF24L01.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Pengirim terus-menerus mengirim data dari pengontrolnya, yaitu joystick, tombol, potensiometer, dan saklar geser, dan kita menerima data ini dengan penerima. Untuk detail lebih lanjut cara kerja pengirim Arduino ini, Anda dapat memeriksa tutorial terperinci lainnya yang saya buat untuk itu.

Kami juga dapat mencatat di sini bahwa penerima RC ini tidak secara khusus bekerja hanya dengan pengirim tertentu yang saya buat. Ini dapat bekerja dengan setiap pengaturan serupa lainnya yang terdiri dari papan Arduino dan modul NRF24L01.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Namun, otak dari penerima RC ini adalah papan Arduino Pro Mini. Untuk daya, kita dapat menggunakan pin VCC yang dapat dihubungkan ke 5V, atau pin RAW yang dapat dihubungkan ke 6 hingga 12V. Perhatikan bahwa ada dua versi Arduino Pro Mini, seperti yang saya gunakan di sini yang beroperasi pada 5V dan yang lainnya beroperasi pada 3.3V. Di sisi lain, modul NRF24L01 beroperasi pada 3.3V, jadi oleh karena itu kita memerlukan regulator tegangan. Kali ini saya menggunakan regulator tegangan AMS1117, yang mengeluarkan 3.3V dari inputan yang berkisar antara 5V hingga 12V.

Anda dapat mendapatkan komponen yang diperlukan untuk Penerima RC Arduino ini dari tautan di bawah ini:

Untuk komunikasi dengan Arduino, modul NRF24L01 menggunakan protokol SPI, ditambah dua pin digital tambahan. Artinya kita masih memiliki 9 pin digital yang dapat digunakan sebagai saluran output, dua di antaranya adalah pin RX dan TX. Layak diketahui, pin-pin ini harus dicopot dari apa pun saat kita mengunggah sketsa ke papan Arduino, jadi oleh karena itu saya membuatnya dapat dihubungkan atau dicopot melalui pin header terpisah. Sebenarnya, kita juga dapat menggunakan input analog sebagai output digital, jadi meskipun papan Arduino ini cukup kecil, kita memiliki banyak output atau saluran yang tersedia.

Desain PCB

Namun, untuk menjaga rangkaian ini tetap kompak, saya membuat PCB kustom menggunakan perangkat lunak desain rangkaian online gratis EasyEDA. Di sini, saya menyusun 8 saluran tepat di samping rel 5V dan Ground, jadi kita dapat langsung menghubungkan servo dan ESC ke mereka. Nomor saluran 9 terletak pada posisi terpisah, dekat pin VCC Arduino, jadi kita dapat menggunakan misalnya ESC untuk memadamkan Arduino dengan fitur Battery Eliminator Circuit yang menyediakan 5V. Tentu saja, kita dapat menggunakan saluran lain untuk tujuan itu, karena pin VCC juga terhubung ke rel 5V tersebut.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Seperti untuk saluran nomor 7 dan 8, kita dapat melihat di sini bagaimana mereka terganggu dengan pin header ini. Jika kita ingin menggunakannya, kita hanya perlu menghubungkan dua pin bersama. Header pemrograman terletak di sudut kanan atas dan kapasitor 100uF berfungsi untuk regulator tegangan dan modul NRF24L01. Di sudut kiri bawah PCB, saya menempatkan pin analog.

Di sini kita dapat mencatat satu hal lagi, yaitu beberapa papan Arduino Pro Mini mungkin memiliki susunan pin yang berbeda, jadi oleh karena itu saya menyertakan satu versi PCB lagi sehingga Anda dapat memilih yang cocok dengan papan Arduino Pro Mini Anda.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Di sini adalah tautan ke file proyek PCB ini. Jadi setelah saya selesai mendesain, saya menghasilkan file Gerber yang diperlukan untuk pembuatan PCB.

File Gerber:

Kemudian saya memesan PCB dari JLCPCB yang juga merupakan sponsor video ini.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Di sini kita cukup seret dan lepas file Gerber dan setelah diunggah, kita dapat meninjau PCB kita di penampil Gerber. Jika semuanya baik, kita dapat melanjutkan dan memilih properti yang kita inginkan untuk PCB kita. Dan itu saja, sekarang kita dapat dengan mudah memesan PCB kita dengan harga yang wajar. Perhatikan jika ini adalah pesanan pertama Anda dari JLCPCB, Anda dapat mendapatkan hingga 5 PCB hanya dengan $2.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Pengelasan PCB

Setelah beberapa hari PCB telah tiba. Kualitas PCB sangat bagus dan semuanya sama persis seperti dalam desain.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Sekarang kita dapat melanjutkan dan merakit PCB. Pertama, kita perlu memasang pin header papan Arduino. Cara yang nyaman untuk melakukannya adalah menggunakan papan roti untuk menempelkan pin header di dalamnya, sehingga papan akan tetap erat saat dipegang. Seperti yang saya katakan sebelumnya, tergantung pada papan Anda, pin mungkin sedikit bervariasi, jadi ingatlah hal itu saat memasangnya.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Selain itu, ada beberapa pin Ground yang kita perlu biarkan bebas karena ada jejak yang berjalan di PCB di bawahnya. Setelah saya memasang papan Arduino, saya memotong panjang berlebih dari pin.

Selanjutnya, saya menempatkan semua pin header lainnya di tempat. Kita memerlukan pin header jantan dan betina, atau sebenarnya terserah Anda pin header mana yang akan Anda pilih untuk digunakan. Namun, ide bagus adalah menggunakan pin header jantan untuk saluran digital karena koneksi motor servo dan ESC adalah betina, sehingga kita dapat dengan mudah menghubungkannya.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Regulator tegangan adalah komponen permukaan montase, jadi saya menggunakan perekat Blue-Tack untuk menahannya di tempat saat dipasang. Terakhir, setelah kita memasang dua kapasitor di tempat, kita dapat menempelkan modul NRF24L01 ke pin header yang sesuai.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Tergantung pada aplikasi, atau jangkauan yang kita butuhkan, kita dapat menggunakan modul normal dengan antena papan, atau yang dapat kita pasang antena yang lebih besar dan dapat mencapai komunikasi nirkabel hingga 700 meter di ruang terbuka. Jadi itu saja, Penerima RC Arduino kita sekarang siap dan kita dapat menggunakannya untuk apa pun yang kita inginkan.

Untuk memrogram penerima, atau menghubungkan Arduino Pro Mini ke komputer, kita dapat menggunakan antarmuka USB ke serial UART yang dapat dihubungkan ke header pemrograman.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Dalam menu alat IDE Arduino kita perlu memilih papan Arduino Pro atau Pro Mini, memilih versi prosesor yang tepat, memilih port, dan memilih metode pemrograman ke “USBasp”.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Dan sekarang kita dapat mengunggah kode ke Arduino.

Contoh 1 – Mobil RC Arduino

Oke, sekarang kita dapat melanjutkan dan melihat contoh pertama.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Ini adalah mobil sederhana yang terdiri dari dua motor DC 12V dan dalam beberapa video saya sebelumnya saya sudah menunjukkan cara kerjanya dan cara membangunnya.

Lihat juga: Pengemudi Motor L298N – Antarmuka Arduino, Cara Kerjanya, Kode, Skematis

Kali ini kita akan menggunakan penerima RC Arduino baru kita untuk mengontrolnya. Untuk menggerakkan motor DC, kita menggunakan pengemudi motor L298N dan untuk daya, kita menggunakan 3 baterai Li-ion yang menyediakan sekitar 12V.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Anda dapat mendapatkan komponen yang diperlukan untuk contoh ini dari tautan di bawah ini:

Jadi, koneksinya sangat sederhana, 12V dari baterai pergi ke pin 12V pada penerima kita, dan enam pin kontrol pengemudi pergi ke 6 saluran. Kita perlu mencatat di sini bahwa untuk dapat mengontrol kecepatan motor kita perlu memberikan sinyal PWM ke pin Enable A dan Enable B pengemudi. Dalam penerima kita saluran nomor 2, 3, 6 dan 9 dapat mengeluarkan sinyal PWM, jadi di sana saya menghubungkan pin Enable pengemudi ke saluran nomor 2 dan 6 dalam hal ini.

Mari kita lihat kode Arduino sekarang.

/* Arduino RC Receiver - Car Example by Dejan, www.HowToMechatronics.com Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define enA 9 // Arduino pin D9 - CH6 on PCB board - PWM output #define in1 8 // D8 - CH5 #define in2 7 // D7 - CH4 #define in3 6 // D6 - CH3 #define in4 4 // D4 - CH1 #define enB 5 // D5 - CH2 - PWM output RF24 radio(3, 2); // nRF24L01 (CE, CSN) const byte address[6] = "00001"; unsigned long lastReceiveTime = 0; unsigned long currentTime = 0; // Max size of this struct is 32 bytes struct Data_Package { byte j1PotX; byte j1PotY; byte j1Button; byte j2PotX; byte j2PotY; byte j2Button; byte pot1; byte pot2; byte tSwitch1; byte tSwitch2; byte button1; byte button2; byte button3; byte button4; }; Data_Package data; //Create a variable with the above structure int steering, throttle; int motorSpeedA = 0; int motorSpeedB = 0; void setup() { pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); //Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setAutoAck(false); radio.setDataRate(RF24_250KBPS); radio.setPALevel(RF24_PA_LOW); radio.startListening(); // Set the module as receiver resetData(); } void loop() { // Check whether we keep receving data, or we have a connection between the two modules currentTime = millis(); if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone jas a throttle up, if we lose connection it can keep flying away if we dont reset the function } // Check whether there is data to be received if (radio.available()) { radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure lastReceiveTime = millis(); // At this moment we have received the data } // Parse the data from the Joystic 1 to the throttle and steering variables throttle = data.j1PotY; steering = data.j1PotX; // Throttle used for forward and backward control // Joystick values: 0 to 255; down = 0; middle = 127; up = 255 if (throttle < 110) { // Set Motor A backward digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // Set Motor B backward digitalWrite(in3, HIGH); digitalWrite(in4, LOW); // Convert the declining throttle readings for going backward from 110 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed motorSpeedA = map(throttle, 110, 0, 0, 255); motorSpeedB = map(throttle, 110, 0, 0, 255); } else if (throttle > 140) { // Set Motor A forward digitalWrite(in1, LOW); digitalWrite(in2, HIGH); // Set Motor B forward digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // Convert the increasing throttle readings for going forward from 140 to 255 into 0 to 255 value for the PWM signal for increasing the motor speed motorSpeedA = map(throttle, 140, 255, 0, 255); motorSpeedB = map(throttle, 140, 255, 0, 255); } // If joystick stays in middle the motors are not moving else { motorSpeedA = 0; motorSpeedB = 0; } // Steering used for left and right control if (steering < 110) { // Convert the declining steering readings from 140 to 255 into increasing 0 to 255 value int xMapped = map(steering, 110, 0, 0, 255); // Move to left - decrease left motor speed, increase right motor speed motorSpeedA = motorSpeedA - xMapped; motorSpeedB = motorSpeedB + xMapped; // Confine the range from 0 to 255 if (motorSpeedA < 0) { motorSpeedA = 0; } if (motorSpeedB > 255) { motorSpeedB = 255; } } if (steering > 140) { // Convert the increasing steering readings from 110 to 0 into 0 to 255 value int xMapped = map(steering, 140, 255, 0, 255); // Move right - decrease right motor speed, increase left motor speed motorSpeedA = motorSpeedA + xMapped; motorSpeedB = motorSpeedB - xMapped; // Confine the range from 0 to 255 if (motorSpeedA > 255) { motorSpeedA = 255; } if (motorSpeedB < 0) { motorSpeedB = 0; } } // Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70) if (motorSpeedA < 70) { motorSpeedA = 0; } if (motorSpeedB < 70) { motorSpeedB = 0; } analogWrite(enA, motorSpeedA); // Send PWM signal to motor A analogWrite(enB, motorSpeedB); // Send PWM signal to motor B } void resetData() { // Reset the values when there is no radio connection - Set initial default values data.j1PotX = 127; data.j1PotY = 127; data.j2PotX = 127; data.j2PotY = 127; data.j1Button = 1; data.j2Button = 1; data.pot1 = 1; data.pot2 = 1; data.tSwitch1 = 1; data.tSwitch2 = 1; data.button1 = 1; data.button2 = 1; data.button3 = 1; data.button4 = 1; }Code language: Arduino (arduino)

Deskripsi: Jadi pertama kita perlu menyertakan pustaka SPI dan RF24, menentukan beberapa pin, objek radio, dan struktur data tempat kita akan menyimpan data masuk dari pengirim. Di bagian setup kita perlu menentukan output pin dan memulai komunikasi radio. Untuk detail lebih lanjut bagaimana ini bekerja dan apa yang dilakukan oleh setiap baris ini, Anda dapat memeriksa tutorial terperinci NRF24L01 saya.

Di bagian loop, kita terus-menerus memeriksa apakah kita menerima data dan jika kita melakukannya, kita membaca data masuk tersebut. Jika kita melihat sekilas kode pengirim, kita dapat melihat jenis data apa yang dikirimnya ke penerima. Ini membaca data dari semua pengontrolnya, joystick, potensiometer dan tombol, dan mengirim data itu sebagai satu paket ke penerima.

Jadi, setelah kita membaca data tersebut, kita dapat melakukan apa pun yang kita inginkan dengannya. Dalam hal ini, kita akan menggunakan nilai sumbu Y Joystick 1 untuk mengontrol throttle dan nilai sumbu X untuk mengontrol steering. Saya memasukkan data ini ke dalam variabel throttle dan steering terpisah. Nilai yang kita peroleh dari joystick adalah dari 0 hingga 255. Jadi, jika kita memindahkan joystick ke bawah, kita akan mengatur pin kontrol pengemudi dengan benar sehingga mobil bergerak mundur, dan menggunakan nilai throttle untuk mengontrol kecepatan pergerakan. Prinsip yang sama berlaku untuk mengemudi ke depan, kiri dan kanan. Lagi, saya sudah memiliki tutorial terperinci tentang cara kerja mobil ini jadi Anda dapat memeriksanya untuk pemahaman yang lebih baik. Di bagian bawah kode kita dapat mencatat fungsi kustom resetData(), yang mereset semua nilai ke nilai default awalnya sehingga jika komunikasi radio terputus, mobil akan berhenti bergerak.

Contoh 2 – Kontrol Servo dan Motor Brushless Penerima RC Arduino

Baiklah, sekarang kita dapat melanjutkan dengan contoh kedua, mengontrol servo dan motor brushless menggunakan penerima RC Arduino ini.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Untuk mengontrol motor brushless, kita membutuhkan ESC, atau Pengendali Kecepatan Elektronik. Arduino berkomunikasi dengan ESC dengan hanya satu pin. Untuk mengontrol ESC, Arduino mengirim sinyal PWM tertentu ke ESC dan dengan itu ESC mengontrol kecepatan motor. ESC dengan koneksi yang sama menyediakan 5V melalui fitur Battery Eliminator Circuit, jadi kita juga dapat memadamkan penerima kita dengannya.

Lihat juga: Tutorial Kontrol Motor Brushless Arduino | ESC | BLDC

Untuk motor servo, mereka memiliki jenis koneksi yang sama dengan ESC dan kita dapat dengan mudah memasangnya ke salah satu saluran yang tersedia.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Anda dapat mendapatkan komponen yang diperlukan untuk contoh ini dari tautan di bawah ini:

Sinyal input untuk mengontrol servo dan motor brushless menggunakan ESC hampir sama. Mereka menggunakan sinyal PWM 50Hz tertentu yang dapat dengan mudah dihasilkan menggunakan pustaka Servo Arduino.

Catatan: Saat menggunakan servo MG996R dengan pengaturan ini, mereka mungkin menyebabkan masalah dalam rangkaian dan membakar Arduino Pro Mini. Mereka mungkin menarik arus yang lebih tinggi dan yang dapat menyebabkan lonjakan tegangan pada rel 5V. Arduino Pro Mini seharusnya dapat menangani hingga 5.5v pada pin 5V, tetapi ketika lonjakan itu terjadi itu dapat membakar Arduino. Saya mengalami masalah ini saat menguji rangkaian, dan seseorang di bagian komentar juga melaporkan hal yang sama. Solusinya mungkin menempatkan kapasitor penyaring yang lebih besar pada servo tetapi saya tidak yakin dan saya belum mengujinya. Jadi harap waspadai masalah ini.

Di sisi lain, dalam contoh saya menggunakan dua servo MG996R lainnya yang tidak membakar Arduino, saya kira karena mereka tidak menyebabkan lonjakan yang begitu tinggi. Saya juga menggunakan contoh ini dengan 4 servo S90 yang lebih kecil dan tidak ada masalahnya.

Lihat juga: Cara Kerja Motor Servo &#038; Cara Mengontrol Servo menggunakan Arduino

/* DIY RC Receiver - Servos and Brushless motors control by Dejan, www.HowToMechatronics.com Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <Servo.h> RF24 radio(3, 2); // nRF24L01 (CE, CSN) const byte address[6] = "00001"; unsigned long lastReceiveTime = 0; unsigned long currentTime = 0; Servo esc; // create servo object to control the ESC Servo servo1; Servo servo2; int escValue, servo1Value, servo2Value; // Max size of this struct is 32 bytes - NRF24L01 buffer limit struct Data_Package { byte j1PotX; byte j1PotY; byte j1Button; byte j2PotX; byte j2PotY; byte j2Button; byte pot1; byte pot2; byte tSwitch1; byte tSwitch2; byte button1; byte button2; byte button3; byte button4; }; Data_Package data; //Create a variable with the above structure void setup() { Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setAutoAck(false); radio.setDataRate(RF24_250KBPS); radio.setPALevel(RF24_PA_LOW); radio.startListening(); // Set the module as receiver resetData(); esc.attach(10); // Arduino digital pin D10 - CH9 on PCB board servo1.attach(4); // D4 - CH1 servo2.attach(5); // D5 - CH2 } void loop() { // Check whether we keep receving data, or we have a connection between the two modules currentTime = millis(); if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone jas a throttle up, if we lose connection it can keep flying away if we dont reset the function } // Check whether there is data to be received if (radio.available()) { radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure lastReceiveTime = millis(); // At this moment we have received the data } // Controlling servos servo1Value = map(data.j2PotX, 0, 255, 0, 180); // Map the receiving value form 0 to 255 to 0 to 180(degrees), values used for controlling servos servo2Value = map(data.j2PotY, 0, 255, 0, 180); servo1.write(servo1Value); servo2.write(servo2Value); // Controlling brushless motor with ESC escValue = map(data.j1PotY, 127, 255, 1000, 2000); // Map the receiving value form 127 to 255 to 1000 to 2000, values used for controlling ESCs esc.writeMicroseconds(escValue); // Send the PWM control singal to the ESC } void resetData() { // Reset the values when there is no radio connection - Set initial default values data.j1PotX = 127; data.j1PotY = 127; data.j2PotX = 127; data.j2PotY = 127; data.j1Button = 1; data.j2Button = 1; data.pot1 = 1; data.pot2 = 1; data.tSwitch1 = 1; data.tSwitch2 = 1; data.button1 = 1; data.button2 = 1; data.button3 = 1; data.button4 = 1; }Code language: Arduino (arduino)

Jadi, setelah menerima data dari pengirim, kita mengonversi nilai dari 0 hingga 255 menjadi nilai dari 0 hingga 180 untuk mengontrol servo menggunakan fungsi write(). Dengan cara yang sama, kita mengonversi data untuk mengontrol ESC menjadi nilai dari 1000 hingga 2000. Dalam contoh ini kita mengontrol ESC ini dari titik tengah Joystick nomor 1, ke posisi atas, oleh karena itu kita mengonversi nilai dari tengah, 127 hingga 255 menjadi nilai dari 1000 hingga 2000. Menggunakan fungsi writeMicroseconds() Pustaka Servo kita mengirim sinyal PWM ke ESC dan jadi kita dapat mengontrol kecepatan motor brushless dari minimum hingga maksimum.

Lihat juga: Pesawat RC Arduino | 100% DIY

Jadi, inilah cara kita dapat mengontrol pesawat RC, mobil, perahu dan sebagainya, karena mereka biasanya menggunakan jenis motor, servo dan motor brushless ini.

Contoh 3 – Kontrol Model Mobil RC

Mobil RC datang dengan pengirimnya sendiri yang dapat mengontrol roda depan untuk bergerak kiri dan kanan, serta menggerakkan mobil ke depan dan ke belakang.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Namun, karena ini adalah mobil RC murah, kontrolnya digital, atau mati atau nyala, ke posisi kiri dan kanan maksimum dan kecepatan maksimum. Terlepas dari itu, saya membongkar mobil untuk melihat apa yang ada di dalamnya dan bagaimana saya dapat menerapkan penerima RC Arduino untuk mengontrolnya.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Setelah saya membuka komponen elektronik, saya menyadari bahwa dua motor itu sebenarnya motor DC sederhana yang beroperasi pada 5V. Bahkan motor depan yang mengontrol gerakan terbatas untuk steering adalah motor DC rotasi berkelanjutan sederhana.

Jadi, sepertinya kita sudah tahu cara mengontrol motor DC, jadi mengganti papan rangkaian ini dengan penerima Arduino DIY kita akan cukup mudah. Selain penerima kita kita hanya membutuhkan pengemudi motor yang mampu mengemudikan dua motor secara bersamaan. Ada banyak opsi untuk tujuan itu, bahkan yang kita gunakan dalam contoh pertama, pengemudi L298N.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Namun, itu terlalu besar untuk aplikasi ini, jadi saya memilih pengemudi motor MX1508. Ini adalah pengemudi motor DC dual sederhana yang memiliki fitur H-bridge dan kontrol PWM. Ini memiliki 4 pin input kontrol, 4 pin untuk motor, dan 2 pin untuk daya.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Saya melepas koneksi motor dari papan rangkaian mobil RC dan memasangnya ke pengemudi. Di sisi belakang saya memasang pin daya dan yang tersisa sekarang adalah menghubungkan pengemudi ini dengan penerima. Daya untuk mobil RC ini berasal dari baterai Ni-Cd 4.8V yang terletak di bagian bawah mobil.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Jadi, menggunakan kabel loncat saya menghubungkan pin ini ke pin VCC Arduino, dan juga menghubungkan 4 pin input kontrol pengemudi ke 4 saluran digital. Seperti yang saya katakan, pengemudi ini mendukung kontrol PWM, jadi untuk motor B, atau motor belakang, saya menggunakan saluran PWM nomor 2 dan 3.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Anda dapat mendapatkan komponen yang diperlukan untuk contoh ini dari tautan di bawah ini:

Kode untuk mobil RC ini sangat mirip dengan contoh pertama.

/* Arduino RC Receiver - RC Model control by Dejan , www.HowToMechatronics.com Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define in3 5 // D5 - CH2 - PWM output #define in4 6 // D6 - CH3 - PWM output #define in1 7 // D7 - CH4 #define in2 8 // D8 - CH5 RF24 radio(3, 2); // nRF24L01 (CE, CSN) const byte address[6] = "00001"; unsigned long lastReceiveTime = 0; unsigned long currentTime = 0; // Max size of this struct is 32 bytes struct Data_Package { byte j1PotX; byte j1PotY; byte j1Button; byte j2PotX; byte j2PotY; byte j2Button; byte pot1; byte pot2; byte tSwitch1; byte tSwitch2; byte button1; byte button2; byte button3; byte button4; }; Data_Package data; //Create a variable with the above structure int steering, throttle; int motorSpeedA = 0; int motorSpeedB = 0; void setup() { pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setAutoAck(false); radio.setDataRate(RF24_250KBPS); radio.setPALevel(RF24_PA_LOW); radio.startListening(); // Set the module as receiver resetData(); } void loop() { // Check whether we keep receving data, or we have a connection between the two modules currentTime = millis(); if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone jas a throttle up, if we lose connection it can keep flying away if we dont reset the function } // Check whether there is data to be received if (radio.available()) { radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure lastReceiveTime = millis(); // At this moment we have received the data } // Parse the data from the Joystic 1 to the steering and throttle variables steering = data.j2PotX; throttle = data.j1PotY; // Throttle used for forward and backward control if (throttle < 110) { // Convert the declining throttle readings for going backward from 110 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed motorSpeedB = map(throttle, 110, 0, 0, 255); // Set Motor B backward analogWrite(in3, motorSpeedB); digitalWrite(in4, LOW); } else if (throttle > 140) { // Convert the increasing throttle readings for going forward from 140 to 255 into 0 to 255 value for the PWM signal for increasing the motor speed motorSpeedB = map(throttle, 140, 255, 0, 255); // Set Motor B forward digitalWrite(in3, LOW); analogWrite(in4, motorSpeedB); } // If joystick stays in middle the motors are not moving else { digitalWrite(in3, HIGH); digitalWrite(in4, HIGH); } // steering used for left and right control if (steering < 110) { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); } if (steering > 140) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); } // If joystick stays in middle the motors are not moving else { digitalWrite(in1, HIGH); digitalWrite(in2, HIGH); } } void resetData() { // Reset the values when there is no radio connection - Set initial default values data.j1PotX = 127; data.j1PotY = 127; data.j2PotX = 127; data.j2PotY = 127; data.j1Button = 1; data.j2Button = 1; data.pot1 = 1; data.pot2 = 1; data.tSwitch1 = 1; data.tSwitch2 = 1; data.button1 = 1; data.button2 = 1; data.button3 = 1; data.button4 = 1; }Code language: Arduino (arduino)

Kita menggunakan data yang datang dari joystick untuk mengontrol throttle dan steering mobil RC. Untuk bergerak mundur kita menggunakan fungsi analogWrite() untuk mengirim sinyal PWM ke pengemudi pada pin Input3, sementara kita memegang pin input4 LOW. Untuk bergerak maju, kita melakukan itu dengan cara yang sebaliknya. Jika joystick tetap di tengah, kita memberikan perintah ke pengemudi untuk rem atau menghentikan motor. Prinsip yang sama digunakan untuk motor steering, meskipun di sini kita tidak perlu menggunakan fungsi analogWrite() karena kita tidak perlu mengontrol kecepatan motor ini.

Setelah mengunggah sketsa ini ke Arduino, saya harus merakit kembali mobil RC. Saya menempatkan pengemudi kecil di dalam perapian dan mengamankan bagian sisa dengan baut. Saya menghubungkan kembali penerima dengan pengemudi, dan menempatkannya di bawah perapian luar mobil yang memiliki cukup tempat untuk memuat penerima.

Membuat Penerima RC Arduino yang Handal untuk Model dan Proyek

Jadi, tidak hanya kita memodifikasi mobil RC ini untuk dikontrol dengan pengirim RC DIY kita, tetapi juga meningkatkannya dengan menambahkan kontrol PWM sehingga sekarang kita juga dapat mengontrol kecepatan mobil. Jika model RC yang ingin Anda modifikasi memiliki servo dan motor brushless alih-alih motor DC, Anda dapat mengikuti metode yang dijelaskan dalam contoh kedua.

Saya harap Anda menyukai tutorial ini dan mempelajari hal baru. Jangan ragu untuk bertanya apa pun di bagian komentar di bawah dan jangan lupa untuk memeriksa koleksi Proyek Arduino saya.


Proses manufaktur

  1. Kontrol Suhu Homebrew DIY: Pantau & Atur dengan Arduino
  2. Pengukuran dan Pencatatan Termokopel Presisi untuk Eksperimen Laboratorium dan Sains
  3. Router CNC vs. Pemotong Laser CNC: Mana yang Terbaik untuk Proyek Craft DIY Anda
  4. Buat Animasi LCD dan Game Menarik dengan Arduino UNO
  5. Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah
  6. Buat Voltmeter DIY dengan Arduino dan Layar Nokia 5110 – Panduan Langkah demi Langkah
  7. Python 3 ke Arduino UNO: Kontrol Perintah Mudah dan Demo LED
  8. Bagaimana Model CAD Mendorong Sukses dalam Proyek Pabrikasi Logam
  9. Mesin Bubut Speed Twister: Polishing & Deburring Canggih dengan Daya 50% Lebih Banyak & Kontrol Regeneratif
  10. Pinout MKR1000 Dijelaskan: Papan Andalan untuk Pengembangan IoT