CxemCAR pada Arduino - Kawalan Bluetooth kereta dengan Android. Mesin Bluetooth ringkas pada mesin Bluetooth Arduino daripada Arduino daripada telefon

Kereta Arduino dengan kawalan Bluetooth daripada telefon Android ialah projek yang sangat mudah tetapi menarik pada Arduino UNO menggunakan modul Motor Shield. Pada halaman ini anda akan mengetahui komponen yang anda perlukan untuk membuat mesin robotik pada Arduino dengan tangan anda sendiri, arahan langkah demi langkah untuk memasang litar elektrik, dan anda akan dapat memuat turun semua program yang diperlukan untuk Android dan Arduino.

Untuk projek ini kami menggunakan modul Motor Shield L293D, dua roda bergear, papan Arduino UNO, modul Bluetooth HC-05 dan dua LED untuk lampu depan. Kawalan berlaku dari jauh melalui isyarat Bluetooth daripada telefon pintar atau tablet. Selepas memasang model dan memasang program, anda boleh menggunakan aplikasi pada telefon pintar anda untuk menghidupkan kereta, memandu ke hadapan dan ke belakang serta menghidupkan dan mematikan lampu depan.

Mesin Arduino DIY

Untuk projek ini kami memerlukan:

  • Papan Arduino Uno / Arduino Nano / Arduino Mega;
  • Perisai Kawalan Motor L293D;
  • Modul Bluetooth HC-05/06;
  • dua motor dengan kotak gear dan roda;
  • bateri 9 Volt (mahkota);
  • 2 perintang dan 2 LED;
  • badan dan roda dari kereta lama;
  • besi pematerian, pistol cair panas, wayar, pateri, dsb.
Bahagian untuk robot - kereta pada Arduino UNO

Gambar rajah pemasangan mesin Arduino

Sekiranya anda mempunyai semua bahagian yang diperlukan (anda boleh melakukannya tanpa LED dan perintang dalam projek), maka seterusnya kita akan melihat cara membuat mesin Arduino dengan tangan anda sendiri. Mula-mula, anda harus memateri wayar ke sesentuh motor dan selamatkannya dengan pita elektrik supaya sesentuh tidak tertanggal. Wayar mesti disambungkan ke blok terminal M1 dan M2 pada Motor Shield (kekutuban boleh ditukar kemudian).


Kuasa kepada modul Bluetooth datang daripada kenalan untuk pemacu servo; kami tidak memerlukan servo dalam projek. Dan bekalan kuasa adalah voltan stabil 5 Volt, yang sesuai dengan kita. Ia akan menjadi lebih mudah untuk memateri penyambung wanita ke port TX dan RX, dan pin pateri (BLS) ke port Pin0 dan Pin1 pada Motor Shield. Dengan cara ini, anda boleh dengan mudah memutuskan sambungan modul Bluetooth daripada Arduino apabila anda perlu memuat naik lakaran.

LED dikawal dari port "Pin2"; di sini wayar boleh dipateri terus ke port. Jika anda membuat beberapa mesin dengan Bluetooth yang akan anda kawal secara serentak, kami mengesyorkan agar modul HC-05 berkelip. Memaparkan modul adalah sangat mudah, dan kemudian anda tidak lagi akan mengelirukan mesin, kerana masing-masing akan memaparkan nama uniknya sendiri pada Android.

Aplikasi dan lakaran untuk mesin Arduino

Selepas memasang litar, muat turun lakaran berikut untuk mesin (jangan lupa untuk memutuskan sambungan modul Bluetooth daripada Arduino semasa memuat turun) dan pasang aplikasi pada telefon pintar anda. Semua fail untuk projek (perpustakaan AFMotor.h, lakaran untuk kereta dan aplikasi Android) boleh dimuat turun dalam satu arkib menggunakan pautan terus. Operasi lakaran boleh disemak dengan mengawal mesin daripada komputer melalui Monitor Bersiri melalui USB.

#termasuk // sambungkan perpustakaan untuk perisai AF_DCMotor motor1(1); // sambungkan motor ke blok terminal M1 AF_DCMotor motor2(2); // sambungkan motor ke blok terminal M2 int val; // kosongkan memori dalam pengawal void setup() (Serial.begin(9600);pinMode(2, OUTPUT); // Pelabuhan untuk LED motor1.setSpeed(250); motor1.run(LEPAS); // hentikan motor motor2.setSpeed(250); // tetapkan kelajuan motor maksimum motor2.run(LEPAS); // hentikan motor) gelung kosong () ( jika (Siri . tersedia ()) // semak sama ada sebarang arahan diterima( val = Serial .read (); if (val == "f") ( // pergi ke hadapan motor1.run (FORWARD); motor1.setSpeed ​​​​(250); motor2.run (FORWARD); motor2.setSpeed ​​​​​​(250) ; ) if (val == "b") ( // balik motor1.run (BACKWARD); motor1.setSpeed ​​​​(200); motor2.run (BACKWARD); motor2.setSpeed ​​​​(200 ); ) jika (val == "s") ( // berhenti motor1.run(LEPAS); motor2.run(LEPAS); ) jika (val == "l") ( // belok kiri motor1.lari(KE HADAPAN); motor1.setSpeed(100); motor2.lari(BACKWARD); motor2.setSpeed(250); ) jika (val == "r") ( // belok kanan motor1.lari(BACKWARD); motor1.setSpeed(250); motor2.lari(KE HADAPAN); motor2.setSpeed(100); ) jika (val == "1") ( // hidupkan LED digitalWrite(2,TINGGI); ) jika (val == "0") ( // matikan LED digitalWrite(2,RENDAH); ) ) )

Penjelasan untuk kod:

  1. untuk ujian, anda boleh menghantar arahan dari komputer anda melalui USB;
  2. putaran motor apabila disambungkan ke bateri akan berbeza;
  3. anda boleh menetapkan kelajuan putaran anda sendiri dengan motor.

Selepas menyemak operasi mesin, pasang aplikasi pada telefon pintar atau tablet anda. Apabila anda mula-mula menyambung ke modul Bluetooth HC-05/06, anda perlu berpasangan dengan Android (kemudian pasangan akan dilakukan secara automatik). Jika anda mengalami kesukaran menyambung, baca artikel ini

Dalam artikel ini kita akan melihat menyambung dan mengawal Arduino melalui bluetooth.

HC-06 yang digunakan secara meluas akan digunakan sebagai modul Bluetooth.

Dalam projek kami, kami akan menghidupkan dan mematikan LED yang disambungkan ke port 13 melalui bluetooth.

Mari mulakan dengan menulis aplikasi untuk telefon pintar Android. Aplikasi akan ditulis dalam persekitaran pengaturcaraan yang mudah dan ringkas, App Inventor. Program akan disusun dalam talian.

Ikuti pautan http://ai2.appinventor.mit.edu/. Di sana anda akan diminta untuk log masuk ke akaun Google, yang perlu anda buat jika anda belum memilikinya.

Selepas log masuk, anda akan dibawa ke program di mana anda boleh membuat projek dengan mengklik "mulakan projek baharu". Anda perlu memasukkan nama projek. Mari kita panggil ia led_control.

Tetingkap aplikasi kosong akan dibuka.

Di sini kami akan meletakkan komponen yang diperlukan. Pilih ListPicker dari tetingkap di sebelah kiri dan lepaskannya ke dalam projek.

Untuk komponen ListPicker dalam tetingkap di sebelah kanan, cari sifat Teks dan tukar "Teks untuk ListPicker1" kepada "Pilih peranti BT."

Buka tab Layout dalam tetingkap di sebelah kiri, letakkan komponen HorizontalArrangement dalam aplikasi, tukar sifat Widthnya kepada "Fill parent". Tambahkan 2 Butang pada Susunan Mendatar, tetapkan sifat Lebar setiap satu daripadanya kepada "Isi induk". Ia sepatutnya kelihatan seperti ini:

Mari kita tukar label pada butang: yang pertama akan menyebut LED ON, yang kedua akan menyebut LED OFF.

Di bawah kami akan menambah Label dan mengosongkan Teksnya.

Ia kekal untuk menambah komponen yang mengatur pemindahan data melalui Bluetooth. Buka tab Kesambungan dan letakkan BluetoothClient dalam projek. Komponen ini tidak akan muncul pada skrin telefon, tetapi di bawahnya, kerana ia bukan visual.

Sekarang anda boleh mula menulis program. Di bahagian atas sebelah kanan program, pilih mod Blok.

Di sini program akan disusun daripada blok grafik. Di sebelah kiri, klik pada komponen ListPicker1 dan pilih ListPicker1.BeforePicking.

Klik pada ListPicker1 sekali lagi dan pilih set ListPicker1.Elements kepada

Letakkannya seperti dalam tangkapan skrin.

Ini memberi kami senarai peranti Bluetooth yang dipasangkan. Sekarang mari kita sambungkan ke peranti yang dipilih. Tulis blok seperti dalam tangkapan skrin di bawah.

Blok merah jambu berlabel Connected ialah blok pertama dalam tab Teks. Masukkan Bersambung dalam kotak kosong.

Sekarang mari kita tulis pengendali butang. Apabila anda mengklik pada butang pertama, teks "led_on" akan dihantar, dan apabila anda mengklik pada butang kedua, "led_off" akan dihantar. Tulisan dalam Label1 juga akan berubah.

Yang tinggal hanyalah memuat turun projek ke telefon pintar anda. Klik Bina dan pilih kaedah muat turun.

Untuk pilihan pertama, anda memerlukan Internet dan pembaca kod QR. Klik dan tunggu sehingga projek dipasang dan kod QR dijana, kemudian buka pembaca kod QR pada telefon pintar anda dan baca kod tersebut. Yang tinggal hanyalah memuat turun dan memasang fail.

Dalam pilihan kedua, projek dalam format .apk akan disimpan ke komputer anda dan anda boleh memuat turunnya ke telefon pintar anda dengan cara yang mudah (contohnya melalui USB).

Sekarang mari kita mulakan dengan program Arduino.

Penerimaan dan penghantaran data dijalankan melalui port COM, jadi kami akan menggunakan Serial. Kami akan menerima isyarat aksara mengikut aksara, membentuk rentetan dan kemudian membandingkan rentetan yang dijana dengan arahan led_on dan led_off.

Arduino

String val = ""; persediaan void() ( Serial.begin(9600); pinMode(13, OUTPUT); ) void loop() ( while (Serial.available()) ( //semasa data tiba char c = Serial.read(); // baca mereka val += c; //dan bentuk kelewatan rentetan(3); ) if (val != "") ( Serial.println(val); ) if (val == "led_on") ( digitalWrite(13, HIGH ); ) else if (val == "led_off") ( digitalWrite(13, LOW); ) val = ""; )

String val = "" ;

persediaan batal() (

bersiri. mula (9600);

pinMode(13, OUTPUT);

gelung kosong() (

manakala (Siri . tersedia () ) ( //semasa data tiba

char c = Bersiri . baca(); //baca mereka

val += c ; //dan buat rentetan

kelewatan(3);

}

Muat naik kod ke Arduino.

Kini anda boleh menyambungkan modul Bluetooth HC-06. Ia menghubungkan dengan sangat mudah:

Vcc 5v (3.3 v mungkin)

JIKA ANDA CUBA MEMUAT PROGRAM KE DALAM ARDUINO DENGAN MODUL YANG DIHUBUNGKAN, MAKA RALAT AKAN KELUAR, KERANA KEDUA-DUA MODUL DAN PEMBATAN PROGRAM MENGGUNAKAN PORT RX DAN TX!

Gunakan kuasa pada Arduino. LED pada modul Bluetooth harus berkelip, ini bermakna ia sedang menunggu sambungan. Ambil telefon pintar anda, cari bluetooth dalam tetapan, hidupkan dan mula mencari. Cari peranti bernama hc-06 dan sambungkannya. Ia mungkin tidak berjaya pada kali pertama. Selepas berjaya berpasangan sekali, anda boleh melancarkan program pada telefon pintar anda.

Pertama, klik pada "Pilih peranti BT" dan pilih modul daripada peranti yang dipasangkan. Seterusnya, tekan butang hidup dan mati LED. Jika semuanya dilakukan dengan betul, semuanya akan berfungsi.

Kami membuat aplikasi yang sangat mudah menggunakan Bluetooth, tanpa reka bentuk atau pun menyemak sama ada kami disambungkan ke modul atau tidak. Dalam pelajaran berikut, kami akan membuat aplikasi yang lebih kompleks dan lebih mengenali App Inventor.

Dan bekerja dengannya.

Naik Taraf Motor Shield

Ternyata pengeluar modul Motor Shield menafikan pelanggan mereka peluang untuk memasang modul lain di atas produk mereka. Nampaknya mereka suka berada di atas atau hanya memerah panel kenalan biasa.

Nuansa ini tidak sesuai dengan saya sama sekali. Itulah sebabnya saya memutuskan untuk menggunakan besi pematerian dan membawa Perisai Motor ke bentuk yang sesuai untuk saya.


Saya dengan berhati-hati mengoyakkan soket sesentuh asal dan membuangnya.


Saya memasang yang biasa di tempat mereka.


Dalam bentuk ini, modul telah menjadi lebih mudah untuk digunakan. Sekarang saya boleh menyambung wayar Bluetooth dengan betul ke penyambung, dan tidak mematerinya dengan ketat pada kenalan pada Motor Shield.

Modul Bluetooth JY-MCU untuk Arduino


Modul Bluetooth JY-MCU itu sendiri agak kecil. Set penghantaran termasuk kabel sambungan. Tugasan pin ditunjukkan pada bahagian belakang.


Ia boleh dikuasakan daripada sumber kuasa 3.6-6V. Ini memberi kita peluang untuk menyambungkannya terus ke Arduino tanpa menggunakan pengatur atau pembahagi voltan.

Kod yang digunakan semasa menyambung ke peranti: 1234.

Menyambungkan Bluetooth JY-MCU ke Arduino Mega 2560

Sambungannya agak mudah.

Gambar rajah sambungan rasmi:

  • TXT pada JY-MCU bersambung ke RX (0) pada Arduino
  • Sambungkan RXD pada JY-MCU ke TX (1) pada Arduino

Dengan pilihan sambungan ini, anda perlu mematikan kuasa modul Bluetooth setiap kali sebelum memuatkan lakaran. Jangan lupa tentang ini.

Saya tidak berpuas hati dengan pilihan ini, jadi saya memutuskan untuk menggunakan port diskret dengan sokongan Serial.

Gambar rajah sambungan tidak rasmi:

  • VCC pada JY-MCU disambungkan kepada +5V Arduino
  • Sambungkan GND pada JY-MCU ke GND Arduino
  • TXT pada JY-MCU disambungkan kepada PIN diskret 50 pada Arduino
  • Sambungkan RXD pada JY-MCU ke PIN diskret 51 pada Arduino

Kini anda boleh memuat naik lakaran tanpa mematikan kuasa ke modul Bluetooth.

Untuk memastikan Bluetooth, saya memutuskan untuk menggunakan papan Proto Shield dan papan roti tanpa pateri kecil. Pada masa hadapan saya akan menyambungkan peralatan, kawalan dan paparan lain kepadanya.




Lakaran untuk mengawal robot pada Arduino melalui Bluetooth melalui telefon pintar Android

Dalam lakaran saya, saya melaksanakan fungsi berikut:

  • Pergerakan ke hadapan
  • Bergerak ke belakang
  • Belok kiri
  • Belok kanan
  • Belok kiri lancar apabila bergerak ke hadapan
  • Pusing licin ke kanan apabila bergerak ke hadapan
  • Belok kiri lancar apabila bergerak ke belakang
  • Pusing licin ke kanan apabila bergerak ke belakang
  • Berhenti
  • Tetapan kelajuan 0%

    Tetapan kelajuan 10%

    Tetapan kelajuan 20%

    Tetapan kelajuan 30%

    Tetapan kelajuan 40%

    Tetapan kelajuan 50%

    Tetapan kelajuan 60%

    Tetapan kelajuan 70%

    Tetapan kelajuan 80%

    Tetapan kelajuan 90%

    Tetapan kelajuan 100%

Saya menggunakan fungsi dalam lakaran supaya tidak menduplikasi kod untuk acara yang serupa.

#termasuk // Sambungkan perpustakaan kawalan enjin
#termasuk // Sambungkan perpustakaan untuk servos
#termasuk // Sambungkan perpustakaan untuk berfungsi dengan Serial melalui port diskret

//Buat objek untuk enjin
AF_DCMotor motor1(1); //saluran M1 pada Motor Shield - kiri belakang
AF_DCMotor motor2(2); //saluran M2 pada Motor Shield - belakang kanan
AF_DCMotor motor3(3); //saluran M3 pada Motor Shield - kiri hadapan
AF_DCMotor motor4(4); //saluran M4 pada Motor Shield - depan kanan

// Cipta objek untuk servo
Servo vsservo;

SoftwareSerial BTSerial(50, 51); // RX, TX

// Cipta pembolehubah untuk arahan Bluetooth
char vcmd;
// Cipta pembolehubah untuk mengingati kelajuan motor
int vspdL, vspdR;
/* Buat pembolehubah yang nilainya akan mengurangkan kelajuan semasa pusingan lancar.
Kelajuan semasa mestilah lebih besar daripada nilai ini. Jika tidak, motor pada arah putaran tidak akan berputar */
int vspd = 200;

persediaan batal() (
// Tetapkan kadar pemindahan data Bluetooth
BTSerial.begin(9600);
// Tetapkan kelajuan pemindahan data melalui kabel
Serial.begin(9600);
// Pilih pin yang mana servo disambungkan
vservo.attach(9); // atau 10, jika dipalamkan ke penyambung paling luar
// Putar servo kepada 90 darjah setiap kali ia dihidupkan
vservo.write(90);
// Tetapkan kelajuan putaran maksimum enjin
vspeed(255,255);
}

gelung kosong() (
// Jika ada data
jika (BTSerial.available())
{
// Baca arahan dan masukkan ke dalam pembolehubah. char menukar kod aksara arahan kepada aksara
vcmd = (char)BTSerial.read();
// Hantar arahan ke port supaya ia boleh disemak dalam "Port Monitor"
Serial.println(vcmd);

// Ke hadapan
jika (vcmd == "F") (
vforward();
}
// Belakang
jika (vcmd == "B")
{
vbackward();
}
// Dibiarkan
jika (vcmd == "L")
{
vleft();
}
// Betul
jika (vcmd == "R")
{
vright();
}
// Lurus dan kiri
jika (vcmd == "G")
{
vforwardleft();
}
// Lurus dan kanan
jika (vcmd == "Saya")
{
vforwardright();
}
// Belakang dan kiri
jika (vcmd == "H")
{
vbackwardleft();
}
// Belakang dan kanan
jika (vcmd == "J")
{
vbackwardright();
}
// Berhenti
jika (vcmd == "S")
{
vrelease();
}
// Kelajuan 0%
jika (vcmd == "0")
{
vspeed(0,0);
}
// Kelajuan 10%
jika (vcmd == "1")
{
vspeed(25,25);
}
// Kelajuan 20%
jika (vcmd == "2")
{
vspeed(50,50);
}
// Kelajuan 30%
jika (vcmd == "3")
{
vspeed(75,75);
}
// Kelajuan 40%
jika (vcmd == "4")
{
vspeed(100,100);
}
// Kelajuan 50%
jika (vcmd == "5")
{
vspeed(125,125);
}
// Kelajuan 60%
jika (vcmd == "6")
{
vspeed(150,150);
}
// Kelajuan 70%
jika (vcmd == "7")
{
vspeed(175,175);
}
// Kelajuan 80%
jika (vcmd == "8")
{
vspeed(200,200);
}
// Kelajuan 90%
jika (vcmd == "9")
{
vspeed(225,225);
}
// Kelajuan 100%
jika (vcmd == "q")
{
vspeed(255,255);
}
}
}

// Ke hadapan
void vforward() (
vspeed(vspdL,vspdR);
vforwardRL();
}

// Maju untuk RL
void vforwardRL() (
motor1.lari(KE HADAPAN);
motor2.lari(KE HADAPAN);
motor3.lari(KE HADAPAN);
motor4.lari(KE HADAPAN);
}

// Belakang
void vbackward() (
vspeed(vspdL,vspdR);
vbackwardRL();
}

// Kembali ke RL
void vbackwardRL() (
motor1.lari(BACKWARD);
motor2.lari(BACKWARD);
motor3.lari(BACKWARD);
motor4.lari(BACKWARD);
}

// Dibiarkan
void vleft() (
vspeed(vspdL,vspdR);
motor1.lari(BACKWARD);
motor2.lari(KE HADAPAN);
motor3.lari(BACKWARD);
motor4.lari(KE HADAPAN);
}

// Betul
void vright() (
vspeed(vspdL,vspdR);
motor1.lari(KE HADAPAN);
motor2.lari(BACKWARD);
motor3.lari(KE HADAPAN);
motor4.lari(BACKWARD);
}

// Ke hadapan dan kiri
void vforwardleft() (
jika (vspdL > vspd) (
vspeed(vspdL-vspd,vspdR);
}
lain
{
vspeed(0,vspdR);
}
vforwardRL();
}

// Hadapan dan kanan
void vforwardright() (
jika (vspdR > vspd) (
vspeed(vspdL,vspdR-vspd);
}
lain
{
vspeed(vspdL,0);
}
vforwardRL();
}

// Belakang dan kiri
void vbackwardleft() (
jika (vspdL > vspd) (
vspeed(vspdL-vspd,vspdR);
}
lain
{
vspeed(0,vspdR);
}
vbackwardRL();
}

// Belakang dan kanan
void vbackwardright() (
jika (vspdR > vspd) (
vspeed(vspdL,vspdR-vspd);
}
lain
{
vspeed(vspdL,0);
}
vbackwardRL();
}

// Berhenti
void vrelease())(
motor1.run(LEPAS);
motor2.run(LEPAS);
motor3.run(LEPAS);
motor4.run(LEPAS);
}

// Tukar kelajuan
void vspeed(int spdL,int spdR)(
jika (spdL == spdR) (
vspdL=spdL;
vspdR=spdR;
}
motor1.setSpeed(spdL);
motor2.setSpeed(spdR);
motor3.setSpeed(spdL);
motor4.setSpeed(spdR);
}

Program Bluetooth RC Car - mengawal kereta robot daripada telefon pintar Android

Saya memasang program Bluetooth RC Car pada telefon pintar saya. Pada pendapat saya, ini adalah perisian terbaik untuk mengawal kereta robot.


Program ini membolehkan anda menghantar arahan apabila menekan butang atau bertindak balas kepada data daripada pecutan dalam telefon pintar anda, laraskan kelajuan pergerakan dengan peluncur, hidupkan lampu depan dan belakang, hidupkan dan matikan isyarat bunyi, hidupkan dan matikan. isyarat kecemasan.




Program ini memerlukan Android versi 2.3.3 atau lebih tinggi. Saiz program ialah 3 megabait.

Senarai arahan:

  • F – hadapan
  • B - belakang
  • L - kiri
  • R – betul
  • G - lurus dan kiri
  • Saya - lurus dan ke kanan
  • H - belakang dan kiri
  • J - belakang dan kanan
  • S - berhenti
  • W – lampu depan dihidupkan
  • w – lampu hadapan dimatikan
  • U – lampu belakang menyala
  • u – lampu belakang dimatikan
  • V – isyarat bunyi dihidupkan
  • v – isyarat bunyi dimatikan
  • X – isyarat kecemasan dihidupkan
  • x - isyarat kecemasan dimatikan
  • 0 – kelajuan pergerakan 0%
  • 1 – kelajuan pergerakan 10%
  • 2 – kelajuan pergerakan 20%
  • 3 – kelajuan pergerakan 30%
  • 4 – kelajuan pergerakan 40%
  • 5 – kelajuan pergerakan 50%
  • 6 – kelajuan pergerakan 60%
  • 7 – kelajuan pergerakan 70%
  • 8 – kelajuan pergerakan 80%
  • 9 – kelajuan pergerakan 90%
  • q – kelajuan pergerakan 100%

Seperti yang anda lihat, medan ujian untuk kreativiti adalah agak baik. Saya juga akan menambah keupayaan untuk menghidupkan lampu kanan dan kiri secara berasingan untuk lampu hadapan dan belakang.

Saya telah menyerlahkan dalam huruf tebal arahan yang telah disokong dalam lakaran. Saya akan menggunakan selebihnya untuk tujuan lain.

Prinsip menghantar arahan: apabila anda menekan butang dalam program, arahan dihantar melalui Bluetooth sekali, dan apabila butang dilepaskan, arahan S-stop dihantar dengan serta-merta.

Demonstrasi kerja

Lain kali saya bercadang untuk menyambungkan pencari julat ultrasonik kepada robot dan melaksanakan algoritma pengelakan halangan.

Jangan kita beli mainan buruk daripada orang Cina, tetapi mari kita beli daripada mereka set-casis pembinaan yang murah, beberapa modul dan letakkan tangan kita kepadanya!

Inilah yang saya dapat akhirnya: casis yang boleh dilalui, boleh dikawal - TA-DA!!! - daripada telefon pintar Android saya.


"Saya lurus, saya sisi,
Dengan satu pusingan dan lompatan,
Baik dari larian mahupun di tempat kejadian,
Dan dua kaki bersama..."

Hari ini kita akan membina kereta lucu dengan alat kawalan jauh melalui Bluetooth. Sumber program kawalan untuk Android disertakan.

Contoh mainan yang baik

Saya mempunyai dua orang anak, seorang perempuan dan seorang lelaki. Kedua-duanya diberikan mainan untuk hari lahir mereka. Apa yang mereka berikan kepada anak perempuan saya, sebagai peraturan, tidak menyebabkan reaksi negatif saya. Dan anak lelaki, seperti yang diharapkan, diberikan semua jenis kereta, kereta kebal dan peralatan lain. Daripada semua runtuhan barangan Cina ini, satu-satunya perkara yang saya tidak perlu aduan ialah gergaji mainan, yang saya hadiahkan sendiri.

Kenapa begitu? Mungkin kerana gergaji ini dijual di kedai alat STIHL. Seperti yang saya percaya, STIHL membuat analog mainan produknya dalam edisi promosi kecil. Akibatnya, mainan yang benar-benar waras dilahirkan, sangat mirip dengan abangnya. Rantai getah berputar, 80 peratus daripada kawalan dilaksanakan. Malah terdapat kord dengan pemegang untuk menggulung gergaji, suis dan butang gas. Kit termasuk rantai ganti dan alat untuk menukar rantai.


Ini gergaji mainan

Apa yang saya cakapkan? Oh ya, tentang seni bina! Apa yang saya maksudkan ialah jika anda mahu, anda boleh membuat mainan yang sangat baik. Dan ada sesuatu yang perlu dicari.

Jom bina kereta dengan alat kawalan jauh!

Mainan kawalan radio mempunyai kepentingan praktikal dan teknikal. Walau bagaimanapun, kanak-kanak berumur 4-6 tahun tidak akan diberikan mainan dengan kawalan berkadar "dewasa". Kemungkinan besar, mainan itu akan rosak dan wang akan dibazirkan.
Akibatnya, mereka biasanya memberikan sesuatu yang murah. Daripada semua ini - "murah" - kereta sama ada sangat laju atau perlahan; kereta kebal lemah; dan kelemahan lain yang jelas dan tersembunyi. Dan sudah tentu tiada kawalan berkadar.

Pada suatu hari, roda kanan salah satu kereta berhenti berputar. Saya mengeluarkannya dan memeriksa motor - ia berfungsi.
Terdapat tiga litar mikro pada papan kawalan - China bodoh, saya tidak menemui sebarang dokumentasi yang waras. Satu cip ialah penerima isyarat radio dengan output logik dan dua pemandu motor jambatan. Salah seorang pemandu telah gagal. Saya tidak dapat memasang pemandu motor jambatan dengan segera daripada komponen diskret.

Kedai alat ganti radio tempatan tidak mempunyai apa-apa yang sesuai. Jadi saya pergi ke negara yang jauh untuk litar mikro ajaib. Saya mengumpul barang-barang saya, mengisi poket saya dengan keropok, menuangkan secawan kopi, melancarkan pelayar saya dan pergi... .
Saya menemui pemandu motor yang sepadan dengan parameter dan memesan dua sekaligus. Kalau-kalau, tiba-tiba ada yang rosak atau saya terbakar sendiri. Ketika itulah idea kereta saya sendiri mula timbul. Selepas pakej tiba dari China yang mulia, saya berjaya menggantikan pemandu dan mesin telah dibaiki.

Tanpa mengetepikan idea kereta saya sendiri, saya sekali lagi memilih asas - casis kereta masa depan. Casis berbeza untuk pengangkutan darat: dijejaki, beroda, dengan dua, tiga, empat roda, dsb.

Bagaimana saya memilih casis

Pertama, saya memilih mod pengangkutan darat, yang bermaksud saya akan mempunyai casis darat. Casis yang dijejaki biasanya lebih mahal dan tidak terlalu pantas. Kenderaan dua atau tiga roda pada saya nampaknya kurang boleh dilalui; casis seperti itu hanya boleh memandu di permukaan rata.
Saya menetap di. Pada pendapat saya, casis sedemikian akan mempunyai kebolehgerakan dan kelajuan yang sangat baik.


Termasuk dengan casis:
dua plat akrilik dengan sekumpulan lubang teknologi untuk memasang semua penderia yang mungkin, papan kawalan dan komponen lain
4 roda
4 pemacu dipasang (motor elektrik + kotak gear)
4 cakera dengan slot untuk penderia kelajuan, satu untuk setiap roda
pengikat
Ya, itu China lagi. Ya, murah. Ya, kualiti yang cukup baik. TAPI! Lebih baik kita mencubanya dahulu. Lagipun, casis "dewasa" berharga seperti orang dewasa, kami belum dewasa lagi.

Paya Pemikiran dan Terma Rujukan

Apabila anda memegang sesuatu yang menjanjikan di tangan anda, sebagai contoh, dari segi kemungkinan melengkapkan model dengan semua jenis sensor, servos, dll., anda mula tenggelam dalam paya pemikiran dan prospek prospek. Tetapi katakan pada diri kita sendiri - BERHENTI! Dan kami akan merangka spesifikasi spesifikasi mini untuk prototaip dengan penerangan ringkas tentang semua komponen.
Kita harus mempunyai model RC kenderaan darat yang dikawal melalui Bluetooth, dengan keupayaan untuk mengundur dan mengawal kelajuan roda dengan lancar.

Apa yang kita perlukan untuk memasang mesin?

.


Tiada roda pusing, yang bermaksud bahawa kawalan pusingan akan menjadi seperti kenderaan yang dikesan. Iaitu, untuk gerakan ke hadapan/terbalik, bahagian kanan dan kiri pemacu berputar pada kelajuan yang sama. Dan untuk membuat pusingan, kelajuan putaran pada satu sisi mestilah kurang atau lebih.


Untuk mengawal mesin dari jauh, kami menggunakan saluran Bluetooth. Modul "HC-06" ialah jambatan Bluetooth, antara muka bersiri yang membolehkan data dipindahkan ke kedua-dua arah. Input mengandungi isyarat antara muka bersiri TTL "RxD" dan "TxD" untuk sambungan ke mikropengawal (papan sasaran).
Telefon bimbit Android akan berfungsi sebagai alat kawalan jauh. Mari kita tulis program kita sendiri!



Pemandu adalah dua saluran, untuk sepasang roda kiri dan kanan. Pemacu mempunyai input logik untuk menukar kekutuban keluaran (arah putaran) dan input PWM, ia akan dapat mengawal kelajuan putaran.


Papan ini dipilih kerana berbaring di dalam laci meja dan sangat sesuai untuk tujuan kami. Terdapat input/output diskret, isyarat MK "RxD" dan "TxD" adalah output, di mana "HC-06" akan disambungkan.
Melihat ke hadapan, saya akan mengatakan bahawa produk Olimex MOD-IO adalah keterlaluan yang sukar. Adalah bagus untuk menggunakan yang biasa, seperti yang akan kita bincangkan dalam kesinambungan cerita!

Jumlah: casis + papan kawalan + modul Bluetooth + program kawalan untuk Android.

Gambar rajah sambungan am

Bukan gambar rajah dalam bentuk tulen, tetapi gambar rajah sambungan, kerana kami mempunyai semua papan sedia, dan yang tinggal hanyalah menyambungkannya bersama.

Skim dalam Proteus


Saya tidak akan menerangkan apa yang saya sambungkan dan di mana. Kemungkinan besar anda akan mempunyai papan kawalan yang berbeza. Saya melampirkan kod sumber, supaya anda boleh mengedit perisian tegar. Nah, jika seseorang tidak dapat menyusun perisian tegar untuk papan mereka, sila hubungi saya - saya akan membantu kerana saya mempunyai masa lapang.

Program pengawal mikro

Program MK boleh menerima arahan melalui antara muka bersiri daripada modul Bluetooth.
Dan, mengikut arahan, kawal pasangan pemacu kiri dan kanan. Kerja-kerja kawalan undur dan kelajuan menggunakan PWM.

Kod itu diulas secukupnya. Saya ingin membincangkan secara berasingan mengenai pelaksanaan pertukaran data saya.
Saya menerima data melalui penimbal cincin. Perkara itu bukan baru dan terdapat banyak pelaksanaan.

Saya telah meletakkan fungsi penimbal cincin dalam perpustakaan berasingan yang terdiri daripada:
fail pengepala ring_buffer.h dan fail pelaksanaan fungsi ring_buffer.c
Untuk menggunakan perpustakaan anda perlu memasukkannya ke dalam main.c
#include "ring_buffer.h"

Seterusnya, anda perlu mengkonfigurasi perpustakaan dalam fail pengepala. Untuk mengkonfigurasi, anda perlu menentukan hanya empat arahan:
#define RX_PACKET_SIZE 7 // Saiz paket RxD #define BUFFER_SIZE 16 // Terima saiz buffer. Mesti dua kali ganda saiz RX_PACKET_SIZE #define START_BYTE "s" // Start byte #define STOP_BYTE "e" // Stop byte

Sebenarnya, tiada apa lagi yang perlu dikonfigurasikan.

Menggunakan kod Dalam main.c kami mengkonfigurasi USART mikropengawal.
Memanggil fungsi konfigurasi USART
USART_Init(MYUBRR);

#define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 void USART_Init(unsigned int ubrr) ( /* Set baud rate */ UBRRH = (unsigned char)(ubrr >> 8); UBRRL = (unsigned char)ubrr; /* Dayakan penerima dan pemancar */ UCSRB = (1<< TXCIE) | (1 << RXCIE)| (1 << TXEN) | (1 << RXEN); /* Set frame format: 8data, 2stop bit */ UCSRC = (1 << URSEL) | (0 << USBS) | (3 << UCSZ0); }

Menerima paket data

Dalam fungsi pengendali gangguan penerimaan bait USART, kita hanya perlu meletakkan bait yang diterima ke dalam penimbal cincin. Kami akan menghuraikan pakej itu kemudian.
ISR(USART_RXC_vect) ( uint8_t Data = UDR; RB_push_char(Data); // Tambahkan bait yang diterima ke dalam penimbal cincin )
Ya, saya telah mengabaikan semua pemeriksaan bingkai buat masa ini.

Sekarang kita hanya perlu menyemak penimbal kita dari semasa ke semasa. Untuk melakukan ini, saya memulakan pemasa di mana saya menetapkan bendera yang membolehkan menyemak penimbal cincin
ISR(TIMER0_OVF_vect) ( TCNT0 = 0x64; ReadRingBuffer = 1; )

Dalam gelung utama kami menambah syarat untuk menyemak bendera.
if (ReadRingBuffer) ( if (RB_read_buffer((uint8_t*)&RxPacket) == 1) Membaca buffer ( // Parse paket, lakukan sesuatu ) ReadRingBuffer = 0; )

Fungsi RB_read_buffer menyemak penimbal cincin, jika saiz paket, bait mula dan henti sudah ada - paket dianggap sah, fungsi mengembalikan "1". Sebagai hujah, fungsi mengambil penunjuk untuk menambah paket yang diterima.
Untuk kebolehpercayaan yang lebih tinggi, pakej boleh dilengkapi dengan checksum; dalam salah satu projek komersial saya, saya melakukan perkara itu. Iaitu, selain menyemak saiz dan bait mula/henti, semakan semak juga ditambah. Tetapi buat masa ini kita akan melakukannya tanpanya.

Bagaimana saya boleh membuka bungkusan

Sekarang bahagian yang menarik ialah bagaimana saya membuka bungkusan itu. Paket boleh menghantar data yang lebih besar daripada bait, data yang ditandatangani, atau data titik terapung.
Saya akan menerangkan menggunakan contoh pakej untuk kawalan casis. Sebagai tambahan kepada bait permulaan dan henti, dalam paket saya, saya perlu menghantar satu arahan, dan dua nilai PWM, untuk bahagian kiri dan kanan pemacu. Untuk arahan, satu bait sudah cukup untuk saya, dan untuk setiap nilai PWM, saya menghantar int16- 16 bit, jenis yang ditandatangani. Iaitu, saya tidak menghantar bendera arah (bait/tanda). Untuk menukar arah, saya lulus nilai PWM positif atau negatif.

Pakej penerimaan saya disusun dalam bentuk struktur.
struct RxPacket ( uint8_t StartByte; uint8_t Command; int16_t Left_PWM; int16_t Right_PWM; uint8_t StopByte; ) RxPacket;

Memanggil fungsi RB_read_buffer ((uint8_t*)&RxPacket ), sebagai hujah kami menyampaikan penunjuk kepada struktur paket penerima. Iaitu, apabila paket diterima, semuanya akan disusun mengikut tempatnya sendiri dalam struktur RxPacket. Kemudian yang tinggal hanyalah membaca data ini dari struktur, contohnya seperti ini:
lCmd = RxPacket.Command; lLPWM = RxPacket.Left_PWM; lRPWM = RxPacket.Right_PWM;

Penghantaran paket data

Walaupun penghantaran belum digunakan dalam program saya, namun, kemungkinan penghantaran telah dilaksanakan. Memindahkan data lebih mudah. Dengan cara yang sama seperti untuk pakej penerima, mari buat struktur:
struct TxPacket ( uint8_t StartByte; uint8_t Rc5System; uint8_t Rc5Command; uint8_t StopByte; ) TxPacket;

Di mana, terdapat bait mula dan henti dan bahagian maklumat. Kami telah memulakan penerima USART.
Untuk memulakan penghantaran paket, panggil fungsi
void send_packet() ( // Tulis bait permulaan ke daftar UDR UDR = START_BYTE; )
Dalam contoh ini, dalam fungsi ini, saya hanya menulis bait permulaan kepada daftar UDR. Ia tidak kelihatan seperti banyak, tetapi dalam fungsi yang sama anda boleh melaksanakan penyediaan pakej atau sesuatu yang berguna. Dan ini, pada pendapat saya, lebih logik. Ia masuk akal dari segi kod pendokumentasian sendiri. Iaitu, jika saya dalam kod, saya hanya menulis nilai ke daftar UDR, ini boleh dianggap sebagai memindahkan hanya satu bait, dan memanggil fungsi bercakap sendiri hantar_paket()- Saya bercakap tentang hakikat bahawa saya menghantar paket data.

Seterusnya, apabila pemancar USART menghantar keseluruhan bait daripada daftar UDR, pengendali gangguan penghantaran akan dipanggil.
ISR(USART_TXC_vect) ( unsigned char *Penunjuk = (unsigned char *)&(TxPacket); statik unsigned char TxIndex = 1; if (TxIndex< sizeof(TxPacket)) { UDR = *(Pointer + TxIndex); TxIndex++; } else TxIndex = 1; }

Dalam pengendali saya mengisytiharkan pembolehubah penunjuk dan memberikannya alamat struktur TxPacket. Seterusnya, pembolehubah statik diisytiharkan - indeks bait yang dihantar, yang diberikan nilai apabila diisytiharkan 1 . Kami mulakan dengan satu kerana kami telah menghantar bait pertama dari struktur. Secara umum, struktur boleh dilakukan tanpa bait permulaan; bagaimanapun, saya menghantarnya secara berasingan, tetapi pengisytiharan bait ini dibiarkan dalam struktur untuk memahami rupa paket itu.

Syarat jika (TxIndex< sizeof(TxPacket)) проверяет, что индекс меньше чем размер пакета. Если условие верно, то записываем байт в регистр UDR: UDR = *(Pointer + TxIndex);
kenaikan TxIndex. Apabila USART menghantar bait seterusnya, kami akan sekali lagi masuk ke pengendali, tetapi bait seterusnya daripada struktur akan dihantar, dan oleh itu semua bait struktur akan dihantar. Apabila TxIndex lebih besar daripada saiz struktur, syarat itu tidak akan benar dan kita akan berakhir dengan TxIndex = 1; Di mana TxIndex akan dimulakan, tetapi tiada apa yang akan ditulis pada daftar UDR, jadi pengendali tidak akan dipanggil lagi sehingga penghantaran paket seterusnya dimulakan. Oleh itu, proses pemindahan adalah automatik sepenuhnya, dan walaupun kita menukar struktur pakej, pengendali tidak perlu ditulis semula.

Sebagai sebahagian daripada penerangan program MK, masih perlu dibincangkan tentang pelaksanaan pengurusan pemandu. Pemandu dikawal oleh tiga isyarat: A1 (B1), A2 (B2) dan PWMA (PWMB). A1 dan A2 direka untuk menghidupkan/mematikan pemacu dan untuk menukar kekutuban keluaran. Isyarat PWM daripada MK dibekalkan kepada input PWMA - anda boleh mengawal kelajuan putaran. Untuk isyarat PWM, saya menggunakan dua pemasa PWM perkakasan 1.
#define _WGM13 0 #define _WGM12 1 #define _WGM11 0 #define _WGM10 1 // Pemasa 1 init TCCR1A = (1<< COM1A1) | (0 << COM1A0) | (1 << COM1B1) | (0 << COM1B0) | (_WGM11 << WGM11) | (_WGM10 << WGM10); TCCR1B = (0 << CS12) | (0 << CS11) | (1 << CS10) | (_WGM13 << WGM13) | (_WGM12 << WGM12); TCNT1 =0x0000; OCR1A = 0; OCR1B = 0;

Pemasa adalah 16-bit, tetapi PWM dimulakan kepada 8 bit. Dan seperti yang mungkin anda perhatikan, dalam pakej penerima saya mempunyai dua nilai untuk menetapkan PWM, untuk pemacu kiri dan kanan, masing-masing. Pembolehubah yang ditandatangani adalah 16-bit.
Saya akan menerangkan mengapa saya melakukan ini.

Pertama sekali, ia datang daripada program untuk Android. Hakikatnya di Jawa tidak ada jenis yang ditandatangani dan saya telah pun memijak rake ini. Dan untuk menghantar nombor dari 0 hingga 255 saya perlu mengelak. Saya memutuskan untuk mengambil laluan yang lebih mudah - saya menghantar nombor 16-bit yang ditandatangani. Pada masa yang sama, 16 bit jenis yang ditandatangani adalah dari -32786 hingga 32768, yang cukup untuk kami.

Kedua, pada pendapat saya, ia lebih telus - kelajuan putaran dan arah diterangkan oleh hanya satu pembolehubah.

Dan ketiga, apa sahaja yang boleh dikatakan, untuk tujuan kami adalah mustahil untuk menyimpannya dalam masa kurang daripada tiga bait. Mari kita korbankan satu bait lagi, tetapi semuanya menjadi jelas: nilai PWM positif bermakna putaran ke hadapan, nilai negatif bermakna putaran terbalik.

Untuk mengawal pemacu saya menulis fungsi pemacu (int leftPWM, int rightPWM);.
pemacu batal(int leftPWM, int rightPWM) ( // Gerakkan KE HADAPAN roda kiri jika (kiriPWM > 0)( ClearBit(A2_PORT, A2_PIN); SetBit(A1_PORT, A1_PIN); ) // Gerakkan KEMBALI roda kiri jika (leftPWM< 0){ ClearBit(A1_PORT, A1_PIN); SetBit(A2_PORT, A2_PIN); } // Движение ВПЕРЁД правое колесо if (rightPWM >0)( ClearBit(B2_PORT, B2_PIN); SetBit(B1_PORT, B1_PIN); ) // Gerakkan KEMBALI roda kanan jika (kananPWM< 0){ ClearBit(B1_PORT, B1_PIN); SetBit(B2_PORT, B2_PIN); } // Остановка if (leftPWM == 0){ ClearBit(A1_PORT, A1_PIN); ClearBit(A2_PORT, A2_PIN); } // Остановка if (rightPWM == 0){ ClearBit(B1_PORT, B1_PIN); ClearBit(B2_PORT, B2_PIN); } set_PWM((uint8_t)(abs(leftPWM)), (uint8_t)(abs(rightPWM))); }
Selaras dengan nilai PWM, isyarat A1 (B1), A2 (B2) dikawal dan nilai PWM ditetapkan dengan memanggil fungsi set_PWM(leftPWM, rightPWM).

Uff, saya sesak nafas...
Untuk meringkaskan: menerima pakej, menghuraikannya, lulus nilai PWM kepada fungsi memandu.

Aplikasi Android untuk kereta

Tidak, saya tidak akan menerangkan secara terperinci seperti program untuk MK. Saya masih baru dalam pembangunan perisian untuk Android dan saya belum bersedia untuk bercakap dengan cekap dan mendalam.

Fungsi utama program- pemindahan data ke modul HC-06 melalui Bluetooth. Program ini mempunyai antara muka yang mudah.

Di bahagian atas terdapat senarai lungsur turun peranti Bluetooth yang dipasangkan untuk memilih modul. Pada mulanya senarai ini tidak ada di sana, tetapi menjelang akhir mengerjakan artikel, saya memutuskan untuk melakukannya secara manusiawi, kerana tidak semua orang akan dapat memahami kod sumber.

Seterusnya, butang "Mati" menghidupkan/mematikan komunikasi dengan "HC-06". Di bawah dari kiri ke kanan: menghantar nilai PWM saluran kiri, jenis sensor, nilai saluran kanan. Di bawah ialah dua peluncur untuk melaraskan kelajuan dan sensitiviti putaran.

Program ini melaksanakan dua jenis kawalan mesin. Untuk menukar jenis penderia, anda perlu menyentuh nama penderia: "Condongkan" atau "Shuffle".

1. Kawal mesin dengan mencondongkan telefon. Kedudukan sifar telefon adalah mendatar. Apabila telefon dicondongkan ke hadapan, nilai PWM meningkat mengikut kadar kecondongan dalam julat dari 0 hingga 255. Apabila anda condongkan telefon ke belakang, nilai PWM berkurangan mengikut kadar kecondongan dalam julat dari 0 hingga -255


Untuk membelok ke kiri atau kanan, anda perlu mencondongkan telefon ke hadapan atau ke belakang dan, pada masa yang sama, kiri atau kanan, masing-masing. Ya, sama seperti dalam kereta sebenar, ia tidak berputar sehingga anda memijak petrol.

2. Kawalan sentuh. Nama dagangan saya untuk jenis kawalan ini ialah "shuffle."


Boleh dianggap sebagai pad sentuh. Apabila anda menyentuh dalam segi empat sama kelabu, nilai PWM meningkat/berkurang bergantung pada lokasi sentuhan; semakin jauh ke bawah atau ke atas dari tengah, semakin tinggi/rendah nilainya.

Tiada loceng dan wisel. Nampaknya itu sahaja.

Lalat kecil dalam salap pada "ski"

Ada masalah dengan telefon saya. Ya, telefon "ski" ialah LG G2 mini. Ia tidak mewujudkan sambungan Bluetooth yang mencukupi. Sambungan diwujudkan seperti biasa hanya jika Bluetooth dihidupkan serta-merta sebelum melancarkan aplikasi.
Saya melakukan ini: semasa memulakan aplikasi, saya menyemak sama ada Bluetooth dihidupkan, jika ia dimatikan, saya membuat permintaan untuk menghidupkannya. Dan apabila saya "meminimumkan" atau menutup aplikasi, saya mematikan Bluetooth secara paksa.
Dan satu perkara lagi, apabila anda menukar orientasi skrin, Bluetooth dimatikan dan sekali lagi anda digesa untuk menghidupkannya, anda perlu mematikan pensuisan automatik putaran skrin.

Ringkasan

Saya percaya saya telah mencapai matlamat saya! Dengan tidak banyak usaha, saya mencipta model RC dengan kawalan berkadar yang waras. Malah orang dewasa boleh bermain dengan kereta dengan penuh semangat, membuat selekoh di tempat kejadian, melakukan pirouette yang kompleks, memperlahankan dan memecut jika perlu.
Dan ia mudah dibaiki jika ia rosak.

Masih ada ruang untuk aktiviti, ada ruang untuk berkembang. Anda boleh menyesuaikan casis, anda boleh menaik taraf dan menambah baik perisian untuk telefon anda.
Dan akan ada kesinambungan ini!


Dalam bahan ini kami cadangkan belajar bagaimana anda boleh membuat kereta kawalan radio di rumah.

Untuk membuat mesin, kami memerlukan:
- kereta mainan;
- dua kad Arduino Uno;
- dua papan modul radio NRF24;
- kapasitor 470 mF, 25 volt;
- Papan pemandu motor L298N;
- enjin;
- pemacu servo;
- kayu bedik analog;
- bateri boleh dicas semula;
- bateri mahkota;
- dua butang hidup dan mati;
- bingkai.

Langkah pertama ialah menyolder kapasitor ke pin kuasa modul radio. Anda juga perlu terlebih dahulu memasang bateri untuk mendapatkan jumlah kuasa 12 volt untuk menggerakkan motor dan papan Arduino.

Ia adalah perlu untuk menjaga sistem pusingan kereta. Untuk melakukan ini, kami memotong bahagian yang dimaksudkan untuk memasang roda depan.

Kini anda perlu membuat lubang dengan diameter 4 mm di bahagian bawah badan mesin dan roda.

Kami mengumpul segala-galanya. Kami memasukkan skru ke dalam roda dan selamatkannya dengan dua kacang.

Kami memasukkan satu lagi skru ke dalam lubang pada badan dan mengikatnya dengan kacang.

Akhirnya, yang tinggal hanyalah meletakkan roda dengan sudut pada nat dalam badan mesin dan selamatkannya dengan beberapa kacang lagi. Kami melakukan perkara yang sama dengan roda kedua.

Sekarang anda perlu menyambungkan pemacu servo ke sistem berputar.

Enjin juga mempunyai lubang pelekap khas di mana anda perlu memasukkan dua skru untuk mengikat enjin ke badan mesin.

Sekarang anda perlu memuat naik kod ke papan Arduino. Pada akhir artikel, kod untuk penerima akan dibentangkan, serta kod untuk pemancar.

Kami membentangkan gambar rajah untuk memasang kayu bedik atau pemancar.

Di bawah anda boleh melihat gambar rajah pemasangan penerima.

Akhirnya, yang tinggal hanyalah memasang elektronik dan mekanik kereta kawalan radio buatan sendiri. Apabila menghidupkannya, anda mesti menghidupkan panel kawalan dahulu, kemudian mesin itu sendiri.

Seperti yang dijanjikan, di bawah kami menyediakan pautan kepada kod yang diperlukan untuk memprogramkan papan
Kod penerima: (muat turun: 3609)
Kod pemancar: (muat turun: 2617)

Kami juga akan membentangkan arahan ringkas mengenai perisian tegar berkelip untuk papan Arduino Uno. Papan mesti disambungkan ke komputer melalui kabel USB. Seterusnya, anda perlu memuat turun program percuma dari laman web rasmi (), pasangkannya, pasang pemacu papan dan kilatkannya menggunakan program ini.

Jika anda menggunakan papan Cina, maka anda boleh memuat turun pemacunya dari pautan ini: