Kamis, 19 April 2018

Robot pengikut Arduino Line dengan kontrol proporsional

Teknologi anak bangsa -- Robot Line Follower Smart Arduino Membangun garis mengikuti robot adalah cara yang bagus untuk memulai pengalaman robot Arduino Anda.Ini memiliki komponen penting dalam desain robot (sensor, controller, dan motor) tetapi dengan lebih sedikit kompleksitas.Bahkan, web ini dipenuhi dengan proyek pengikut garis Arduino.Tutorial ini, bersama dengan dasar-dasar, akan menambahkan sedikit lebih banyak pada proyek robot populer ini.

Teknologi anak bangsa -- Teori Sebuah robot yang mengikuti garis, minimal, membutuhkan sensor untuk mendeteksi garis, pengontrol untuk menggerakkan motor berdasarkan data dari sensor, dan motor untuk memindahkannya.Biasanya, sensor datang berpasangan dan harus dapat membedakan garis dari latar belakang.Sensor bisa berbasis inframerah atau kamera.Kami akan menggunakan yang pertama dalam tutorial ini.

Teknologi anak bangsa -- Ketika garis berada di sebelah kanan depan robot, sensor kanan dipicu dan robot harus mengarahkan ke arah kanan.Hal yang sama terjadi ketika garis di sebelah kiri.Ketika tak satu pun dari sensor mendeteksi garis, robot berjalan maju.We juga dapat menambahkan tindakan tambahan: ketika kedua sensor melacak garis robot berhenti.

Teknologi anak bangsa -- Mekanisme pelacakan garis ini diilustrasikan di bawah ini: Kedengarannya mudah bukan.Sekarang mari kita lihat apa yang kita butuhkan untuk membangun robot ini.Bahan Arduino (UNO, Nano, Pro Mini, Mega) L293D driver motor IC 2 x Motor DC 2 x Sensor Inframerah Robot bingkai 2 x Roda Diagram Kabel Berikut ini diagram sederhana untuk membantu Anda menyambungkan komponen (Arduino UNO digambarkan tetapi Anda dapat gunakan salah satu model yang ditentukan di atas): Beberapa desain menggunakan baterai terpisah untuk motor dan Arduino.Ini adalah opsi jika baterai Anda terlalu cepat.

Teknologi anak bangsa -- Kode Kode untuk pengikut garis lurus ke depan: kami memeriksa status sensor untuk setiap loop dan memutuskan apa yang harus dilakukan dengan motor berdasarkan status.if (leftSensor == 1 && rightSensor == 0) {moveLeft (); } else if (leftSensor == 0 && rightSensor == 1) {moveRight (); } else if (leftSensor == 0 && rightSensor == 0) {moveStraight (); } else {stopMoving (); } Untuk memindahkan robot ke kiri, kitaperlu menggerakkan motor kanan ke depan sambil menghentikan motor kiri.Menggerakkan robot ke kanan mengikuti skema yang sama, dengan motor yang saling bertukar.Memindahkan motor membutuhkan pulsa ke pin "IN" dari L293D.

Teknologi anak bangsa -- Memilih motor mana yang harus dipindahkan tergantung pada pin "ENABLE" yang tinggi.Berikut ini adalah kode lengkap: int leftSN = 7; int rightSN = 6; int leftMotorEN = 2; int rightMotorEN = 4; int leftMotorIN = 5; int rightMotorIN = 3; int leftSensor, rightSensor; kekosongan setup () {pinMode (leftSN, INPUT); pinMode (rightSN, INPUT); pinMode (leftMotorEN, OUTPUT); pinMode (rightMotorEN, OUTPUT); pinMode (leftMotorIN, OUTPUT); pinMode (rightMotorIN, OUTPUT); } void loop () {checkSensors (); } void checkSensors (void) {leftSensor = digitalRead (leftSN); rightSensor = digitalRead (rightSN); if (leftSensor == 1 && rightSensor == 0) {moveLeft (); } else if (leftSensor == 0 && rightSensor == 1) {moveRight (); } else if (leftSensor == 0 && rightSensor == 0) {moveStraight (); } else {stopMoving (); }} void moveLeft (void) {leftMotorEN = 0; rightMotorEN = 1; rightMotorIN = 1; } void moveRight (void) {leftMotorEN = 1; rightMotorEN = 0; leftMotorIN = 1; } void moveStraight (void) {leftMotorEN = 1; rightMotorEN = 1; leftMotorIN = 1; rightMotorIN = 1; } void stopMoving (void) {leftMotorEN = 1; rightMotorEN = 1; } Memperbaiki dengan kontrol proporsional: Robot harus mengikuti garis hitam pada permukaan putih menggunakan kode di atas.Sementara kode "pengikut garis sederhana" berfungsi seperti yang diiklankan, gerakan robot agak gelisah saat mengikuti garis.Kita dapat memperbaikinya dengan mengendalikan kecepatan motor relatif terhadap seberapa jauh sensor dari saluran.

Teknologi anak bangsa -- Kontrol kecepatan dicapai dengan mengirimkan pulsa; (yaitu menyalakan dan mematikan pin yang mengontrol motor) semakin lebar pulsa semakin cepat motor berputar dan sebaliknya.Pulsa yang lebih lebar berarti waktu ‘on’ yang lebih panjang untuk motor dan jadi lebih cepat.Seperti yang ditunjukkan ilustrasi di bawah ini, tegangan pada motor berkurang berdasarkan lebar pulsa.Metode ini lebih popudikenal sebagai Pulse Width Modulation (PWM) dan dapat dilakukan melalui fungsi Arduino analogWrite ().

Teknologi anak bangsa -- Berikut kode yang dimodifikasi: float leftKp = 0,1; float rightKp = 0,1; int leftMotorSpeed = 100; int rightMotorSpeed = 100; int newLeftMotorSpeed, newRightMotorSpeed; int leftSN = 7; int rightSN = 6; int leftMotorEN = 5; int rightMotorEN = 4; int leftMotorIN = 2; int rightMotorIN = 3; int leftSensor, rightSensor; int startTime; kekosongan setup () {pinMode (leftSN, INPUT); pinMode (rightSN, INPUT); pinMode (leftMotorEN, OUTPUT); pinMode (rightMotorEN, OUTPUT); pinMode (leftMotorIN, OUTPUT); pinMode (rightMotorIN, OUTPUT); } void loop () {checkSensors (); } void checkSensors (void) {leftSensor = digitalRead (leftSN); rightSensor = digitalRead (rightSN); if (leftSensor == 1 && rightSensor == 0) {startTime = millis (); while (leftSensor == 1) {moveLeft (); }} else if (leftSensor == 0 && rightSensor == 1) {startTime = millis (); while (rightSensor == 1) {moveRight (); }} else if (leftSensor == 0 && rightSensor == 0){moveStraight (); } else {stopMoving (); }} void moveLeft (void) {digitalWrite (leftMotorEN, LOW); digitalWrite (rightMotorEN, HIGH); newRightMotorSpeed = rightMotorSpeed rightKp * (milis () - startTime); analogWrite (rightMotorIn, newRightMotorSpeed); } void moveRight (void) {digitalWrite (leftMotorEN, HIGH); digitalWrite (rightMotorEN, LOW); newLeftMotorSpeed = leftMotorSpeed leftKp * (milis () - startTime); analogWrite (leftMotorIn, newLeftMotorSpeed); } void moveStraight (void) {digitalWrite (leftMotorEN, HIGH); digitalWrite (rightMotorEN, HIGH); analogWrite (leftMotorIn, leftMotorSpeed); analogWrite (rightMotorIn, rightMotorSpeed); } membatalkan stopMoving (void) {digitalWrite (leftMotorEN, LOW); digitalWrite (rightMotorEN, LOW); } Ada sejumlah perubahan di sini.Pertama, di bagian atas program adalah variabel baru.Variabel leftKp dan rightKp digunakan untuk menyetel kecepatan motor.Anda mungkin perlu menyesuaikan nilai-nilai ini agar sesuai dengan proyek Anda.

Teknologi anak bangsa -- Kami juga Teknologi anak bangsa kecepatan default motor.Kedua, aktiffungsi moveLeft () dan moveRight (), adalah perhitungan untuk menyesuaikan kecepatan motor.Mari saya jelaskan bagian ini secara menyeluruh, mulai di sini: if (leftSensor == 1 && rightSensor == 0) {startTime = millis (); while (leftSensor == 1) {moveLeft (); }} Ketika sensor dipicu untuk pertama kalinya, kami mencatat waktu dalam milidetik dan menyimpannya dalam variabel startTime.Kemudian jika sensor yang sama masih dipicu, kami menjaga agar robot tetap bergerak.

Teknologi anak bangsa -- Dalam potongan di atas, fungsi ini berulang kali dipanggil ketika sensor kiri dipicu: void moveLeft (void) {digitalWrite (leftMotorEN, LOW); digitalWrite (rightMotorEN, HIGH); newRightMotorSpeed = rightMotorSpeed rightKp * (milis () - startTime); analogWrite (rightMotorIn, newRightMotorSpeed); } Nilai variabel newRightMotorSpeed akan terus meningkat untuk setiap kembali ke fungsi karena nilai milis () juga meningkat.Nilai ini kemudian diterapkan ke analogWrite () untuk menghasilkan sinyal PWM ke pin yang diberikan.Seperti tIa tidak akan berhenti ketika sensor dipicu, motor akan bergerak lebih cepat, robot lebih jauh dari posisi yang tepat.Teknik yang kami terapkan untuk membuat gerakan robot lebih halus disebut kontrol proporsional.

Teknologi anak bangsa -- Ini adalah salah satu dari banyak metode kontrol dalam robotika.Bahkan, jika kita meningkatkan jumlah sensor, kita bisa membuat gerakan lebih halus dan lebih cepat.Kami akan membahasnya di tutorial selanjutnya.Untuk saat ini, bersenang-senang membuat robot Anda sendiri mengikuti baris - Kirimi kami foto dan video Anda dan kami akan mempostingnya secara online juga.

Teknologi anak bangsa -- Jika Anda baru mengenal arduino atau ingin mempelajari lebih lanjut, cobalah kursus online gratis kami.

Tidak ada komentar:

Posting Komentar