Bagaimana cara membuat robot bergerak dengan akurat? Gambaran Umum Robotu Platform Studuino dan Fitur

gambar

Organisasi tempat saya bekerja diminta untuk memegang webinar robotika kecil untuk Moscow International Education Salon 2020, yang diadakan dalam format online. Topik presentasi dibiarkan terbuka dan diberikan satu set pendidikan tentang robotika. Jadi saya berkenalan dengan produk-produk dari perusahaan Jepang ArTeC (ini bukan iklan dan saya bukan karyawan ArTeC - itu hanya pengalaman pribadi saya dari berkomunikasi dengan produk mereka). Setelah webinar, saya memutuskan untuk menulis artikel ini, karena di Rusia kit dari Lego Education cukup populer, dan ini adalah pertama kalinya saya menemukan perancang Jepang ini.

Artikel ini dibagi menjadi dua bagian. Bagian pertama akan berguna bagi mereka yang memilih kit untuk robotika pendidikan. Pada bagian kedua, saya memeriksa penggunaan kit untuk memecahkan masalah terapan yang mungkin terjadi dalam kehidupan.

Jadi, jika ada yang tertarik dengan robot kit apa itu dan apa yang bisa dilakukan dengannya, saya minta kucing. Jadi ayo pergi!

Sebagai dasar bangunan, perancang hanya menggunakan beberapa bagian dasar dari mana Anda dapat menyusun struktur yang cukup kompleks.

Blok Dasar Desainer ArTeC
ArTeC Designer Basis Blok

gambar
Contoh Model dari Bagian Desainer

Karena kekhususan bagian - urutan lubang dan paku yang terhuyung untuk koneksi, tidak selalu cepat untuk menemukan kombinasi bagian yang tepat untuk mencapai hasil. Dari kelebihan, tidak seperti Lego: semua bagian cukup besar, kehilangan jauh lebih sulit. Nilai tambah kedua adalah Anda tidak perlu mencari-cari bagian yang diperlukan untuk waktu yang lama, karena hanya ada 5-6 bagian dasar (perbedaan warna bagian tidak diperhitungkan). Ada minus - selama bagian-bagiannya benar-benar baru, pemisahan mereka terkadang berubah menjadi siksaan - sehingga mereka saling menempel erat. Untuk membantu melepaskan mereka datang alat khusus yang ada di kit.

Selain blok dasar di set ada beberapa varietas roda dan roda gigi, serta rak gigi.

Sekarang tentang apa yang termasuk dalam bagian elektronik dari kit robot ini. Situs web Jepang memiliki sejumlah besar sensor dan modul yang berbeda. Tentu saja, saya memiliki lebih sedikit dari mereka, tetapi mereka yang sudah memberikan ruang lingkup tertentu untuk kreativitas.

Untuk mengisi unit kontrol utama, Jepang membuat versi mereka dari papan Arduino, menyelesaikannya, dan menyebutnya Studuino. Mereka menambahkan driver kontrol motor DC ke dalamnya dan membawa garis untuk konektor 3-pin (standar BLS-3, ini ditempatkan pada servos). Di setiap konektor tersebut ada daya: plus dan minus, serta salah satu pin papan Arduino. Semua konektor ditandatangani, jadi sulit untuk membuat kesalahan saat menghubungkannya.

Platform Studuino
Platform Studuino

Untuk kompatibilitas dengan perisai Arduino standar di tempat-tempat standar, ada konektor yang mirip dengan Arduino.

Perbedaan utama dari papan Arduino adalah tegangan pengontrolnya adalah 3.3V. Ini dijelaskan oleh fakta bahwa modul kontrol pusat dipasok dengan daya melalui kompartemen baterai yang disediakan untuk 3 baterai AA (total 4,5 V). Baterai, sayangnya, tidak disediakan, bahkan tidak dapat dibeli di situs web pabrikan sebagai opsi tambahan.

Papan terletak di wadah plastik, tempat Anda dapat menempelkan bagian dasar desainer dan elemen lainnya.

Unit Pusat ArTeC
Unit Pusat ArTeC

Sebagai aktuator, pabrikan menawarkan dua motor DC dengan gearbox dan hingga 8 servo-drive dari desain mereka sendiri (jumlahnya dapat bervariasi tergantung pada konfigurasi kit). Motor terhubung melalui konektor khusus yang ada di papan tulis.

Motor DC dengan gigi dan koneksinya
Motor DC dengan gearbox dan sambungannya

Anda dapat merakit dengan mudah dan cepat konstruksi paling sederhana yang muncul di benak Anda: mesin robot dengan dua motor, mengendalikannya sehingga Anda dapat membuatnya bergerak ke arah yang benar.

Mesin robot sederhana dengan dua motor DC
Mesin robot sederhana dengan dua motor DC

Mesin dikontrol dengan mengatur keadaan logis terminal D2, D4, D3 untuk mesin, yang terhubung ke konektor M1 dan D7, D8, D5 untuk motor yang terhubung ke konektor M2 pada papan Studuino. Ini adalah kesimpulan bahwa pengembang papan Studuino terhubung secara paralel chip driver driver motor. Menggunakan kesimpulan ini dengan menghubungkan sirkuit Anda di sana, dan pada saat yang sama menggunakan mesin pada saat yang sama, akan gagal.

Pertimbangkan cara mengontrol mesin yang terhubung ke konektor M1. Dengan mengatur keadaan logis yang berbeda dari terminal D2 dan D4, dimungkinkan untuk mencapai putaran mesin ke arah yang diinginkan. Misalnya: dengan D2 - 1 dan D4 - 0, mesin berputar searah jarum jam, dan jika D2 - 0 dan D4 - 1, maka mesin berputar berlawanan arah jarum jam. Penting juga untuk mengatur kecepatan putaran motor dengan mengatur nilai PWM pada pin D3 - bisa berada dalam kisaran 0 hingga 255. Jika nilainya 0, motor tidak akan berputar, dan jika nilainya 255, kita akan mendapatkan kecepatan rotasi maksimum. Pengemudi mesin juga memungkinkan perubahan instan dalam arah putaran mesin dan mendukung mode pengereman engine. Untuk memperlambat mesin, keadaan logis yang sama dengan 1 harus ditetapkan pada terminal D2 dan D4.

Omong-omong, tidak ada pin D3 dan D5 di konektor yang memiliki 3 pin (GND, VCC, SIG) pada papan Studuino, tetapi mereka berada pada konektor Arduino standar, yang dibiarkan pengembang untuk menjaga kompatibilitas platform.

Demikian pula, motor dikendalikan, yang terhubung ke konektor M2. Baginya, arah rotasi ditentukan melalui keadaan terminal D7 dan D8, dan kecepatan rotasi oleh terminal D5.

Program paling sederhana yang saya tulis membuat mesin robot bergerak seperti ini:


Servo dapat dihubungkan ke konektor yang disorot dengan warna merah di papan: D2, D4, D7, D8, D9, D10, D11, D12.

Koneksi servo
Menghubungkan Servo Drive

Ada pada pin ini mikrokontroler AtMega168 memiliki PWM, yang diperlukan untuk mengontrol drive servo. Jika Anda menghubungkan jumlah maksimum servos, Anda bisa mendapatkan beberapa desain menarik. Demi demonstrasi, saya membuat analog sederhana robot berjalan dan mencoba sedikit memprogramnya. Hasilnya bisa dilihat di video:


Satu-satunya hal yang perlu diingat adalah bahwa jika Anda berencana untuk menggunakan motor DC dan servos pada saat yang sama, maka Anda tidak dapat menggunakan 2 motor DC dan 8 servos pada saat yang sama, karena mereka memiliki output bersama yang dikendalikan oleh mikrokontroler. Anda dapat membuat konfigurasi berikut: 2 motor DC + 4 servos, 1 motor DC + 6 servos atau hanya menggunakan 8 servos.

Dalam kit robot apa pun, selain aktuator, harus ada sensor yang merupakan "mata" dan "telinga" robot apa pun. Mereka juga ada di sini. Di set saya ada sensor berikut: sensor cahaya, sensor suara, sensor akselerasi, dua sensor IR, sensor sentuh, serta LED (hijau, merah, biru, putih) dan piezodynamic.

Sensor dalam satu set
Sensor dalam satu set

Sensor terhubung ke unit pusat menggunakan kabel yang datang dengan kit. Untuk memperbaiki sensor dalam model robot di rumah, mereka memiliki paku yang dapat dilampirkan pada struktur. Saya mengumpulkan dan memprogram beberapa desain sederhana untuk melihat pengoperasian sensor.

Ini adalah cara kerja sensor sentuh:


Dan inilah cara sensor cahaya bekerja:


Jika tidak ada sensor standar yang cukup di set dan Anda ingin memperluas fungsinya, maka Anda dapat dengan mudah menggunakan papan tempat memotong roti tanpa solder dan menghubungkan sirkuit di sana, seperti pada papan Arduino standar.

Fitur Perekrutan yang Ditingkatkan
Panggilan yang disempurnakan

Poin penting berikutnya untuk kit robot apa pun adalah ketersediaan lingkungan pemrograman yang nyaman. Di sini, pabrikan menawarkan tiga opsi pemrograman berbeda.

Entry level - dirancang untuk pengguna terkecil, mereka yang masih belum benar-benar tahu cara membaca, tetapi yang sudah mengambil langkah pertama mereka ke dunia robotika dewasa. Bagi mereka, lingkungan pemrograman yang paling sederhana ditawarkan - piktogram.

Pemrograman ikon
Pemrograman ikon

Di sini Anda dapat menarik pictograms dengan tindakan dasar ke dalam program (maju, hidupkan, nyalakan LED, dll.) Dan konfigurasikan parameter dasarnya.

Ketika level ini dikuasai atau kemampuannya menjadi tidak cukup untuk menyelesaikan tugas, Anda dapat pergi ke langkah berikutnya dan mulai menggunakan lingkungan pemrograman Scratch untuk platform Studuino.

Pemrograman awal untuk Studuino
Pemrograman awal untuk Studuino

Sudah ada lebih banyak opsi pemrograman: Anda dapat menggunakan variabel dan array, ekspresi logis dan aritmatika, subrutin, serta lebih fleksibel mengkonfigurasi berbagai blok untuk dieksekusi.

Ketika kemampuan ini tidak cukup, Anda dapat melanjutkan ke pemrograman di Arduino IDE dan mendapatkan kontrol penuh atas semua kemampuan perangkat keras dari platform Studuino. Untuk menggunakan papan Studuino di Arduino IDE, Anda harus mengonfigurasi lingkungan sesuai dengan instruksi dari situs web produsen (sehingga lingkungan melihat platform Studuino dalam daftar papan yang didukung).

Lengkap dengan perangkat lunak pemrograman, pabrikan memberikan serangkaian instruksi untuk merakit berbagai model dan memprogramnya. Perangkat lunak itu sendiri tersedia secara gratis di situs web produsen.

Sekarang mari kita coba memecahkan masalah praktis kecil menggunakan set ini.

Bayangkan kita memiliki robot yang harus bergerak maju dan mundur di gudang dan kita harus membuatnya berhenti di tempat yang diberikan. Jika robot tidak dikendalikan, kecelakaan akan terjadi. Contoh kecelakaan seperti itu ditunjukkan di sini:


Memindahkan robot ke depan dan ke belakang dapat dilakukan dengan menggunakan motor DC atau menggunakan servos. Drive servo menyelesaikan masalah tentang cara menghentikan robot di tempat yang tepat (Anda dapat secara akurat mengatur sudut rotasi servo). Solusi ini memiliki batasan (kami akan menggunakan servo dari satu set dengan roda yang terpasang di atasnya) - servos tidak dapat berputar dengan sudut lebih dari 180 derajat dan dengan demikian pergerakan robot kami akan terbatas pada setengah panjang putaran roda pada servo, tetapi biasanya Anda menginginkan lebih.

Kami akan menggunakan motor DC dengan peredam dari set untuk bergerak maju dan mundur. Motor-motor ini tidak memiliki umpan balik. Setelah menyalakan mesin, kami tidak bisa mengatakan sejauh mana robot melakukan perjalanan. Anda dapat mendeteksi waktu selama robot menempuh jarak yang diperlukan selama operasi mesin dan menggunakan penundaan ini dalam program untuk menghentikan robot di tempat yang tepat. Metode ini memiliki satu kelemahan signifikan - kecepatan mesin tergantung pada tegangan yang dipasok ke sana dan pada upaya yang diperlukan. Karena baterai digunakan dalam robot, yang setelah beberapa saat akan sedikit habis dan tegangannya akan berkurang, maka pada saat yang sama robot akan mulai menempuh jarak yang lebih pendek, dan akan perlu untuk memilih waktu lagi.

Opsi paling sederhana yang dapat Anda gunakan adalah robot, melewati titik yang diinginkan, menyentuh sensor sentuh, yang akan menjadi sinyal berhenti di tempat yang tepat.

Saya membuat perubahan pada desain saya dengan menambahkan sensor sentuh pada robot, dan menempatkan elemen di sepanjang jalur robot sehingga robot menyentuhnya dengan sensor sentuh saat bergerak.


Video menunjukkan bahwa robot mencapai ujung "gudang" dan menyentuh "dinding" dengan sensor, kemudian kembali ke "dinding" yang berlawanan dari gudang dan di sana ia juga menyentuh. Setelah itu, proses diulang. Jadi, ada dua titik yang pasti "diketahui" robot - ini adalah titik ketika sensor sentuh dipicu.

Program sentuh awal untuk Studuino
Program dengan sensor sentuh dalam bahasa Scratch untuk Studuino

Terkadang ini cukup untuk menyelesaikan tugas. Tapi kami ingin lebih!

Saya membuat perubahan pada desain dan program robot dan inilah yang saya dapatkan:


Mari kita pertimbangkan secara lebih mendetail apa lagi yang saya putuskan untuk dituntut dari robot. Saya memutuskan bahwa dua breakpoint tidak cukup untuk saya dan saya ingin lebih. Untuk ini, saya menggunakan sensor IR, yang termasuk dalam kit. Saya memperbaikinya pada platform yang bergerak, dan di bawah ini saya mengatur selembar kertas dengan garis-garis hitam yang ditarik oleh penanda, di mana robot harus berhenti. Saya juga menghapus salah satu sensor sentuh dari robot (di sebelah kanan).

Robot IR
Robot dengan sensor IR

Alhasil, saya mendapat diagram klasik perangkat salah satu sumbu printer 3D atau mesin CNC. Ketika dihidupkan, printer tidak tahu di mana itu dan pergi ke satu sisi (sampai disentuh oleh saklar batas), dan setelah itu menganggap titik ini ke nol dan mulai menghitung posisinya pada sumbu ini dari itu.

Dalam desain ini, hitung mundur terjadi pada garis-garis hitam di atas kertas. Jumlah band-band ini diketahui sebelumnya, jadi ketika Anda mencapai band terakhir, Anda dapat kembali ke titik referensi nol. Program Scratch untuk Studuino disajikan di bawah ini.

Scratch IR Robot Programme untuk Studuino
Scratch IR Robot Programme untuk Studuino

Jika Anda hati-hati melihat program, Anda dapat melihat nilai 40 dan 50 yang tidak dapat dipahami, yang dengannya nilai sensor IR dibandingkan. Untuk memahami angka-angka ini, Anda perlu mengingat sedikit tentang sinyal apa yang dapat dibaca dari sensor yang berbeda. Ada sensor digital dan analog. Sensor digital memiliki jumlah posisi tetap dan bergerak dari satu posisi ke posisi lain secara tajam dan tanpa nilai perantara. Sensor yang paling banyak digunakan dengan dua posisi. Sensor sentuh adalah contoh paling mencolok dari sensor digital: sampai sensor ditekan, ini memberikan nilai logis 1, dan ketika ditekan - nilai logis 0 (dalam konstruktor ini dan dengan sensor ini ini skema, tetapi ada skema di mana ia dilakukan sebaliknya: ditekan - 1, tidak ditekan - 0).Sensor analog menggambarkan beberapa hubungan yang tidak dapat dipisahkan antara sinyal dan tegangan atau arus pada output dan tidak memiliki nilai tetap. Sensor IR memancarkan sinyal cahaya analog, yang mungkin tergantung pada berbagai faktor, seperti cahaya sekitar, tegangan baterai, dan bahkan suhu sekitar.

Sinyal analog secara linear dikonversi menjadi angka, untuk Scratch for Studuino - dalam kisaran dari 0 hingga 100. Ini dilakukan untuk menyederhanakan pekerjaan dengan mereka kepada pengguna akhir (lingkungan pemrograman ini pertama kali dikembangkan untuk mengajar anak-anak). Dalam Arduino IDE, rentang nilai “jujur” dari 0 hingga 1023 dikeluarkan, yang sesuai dengan konverter ADC 10-bit yang ada pada pengontrol Atmega168. Jika Anda melihat perbedaan dalam grafik antara sinyal digital dan analog, menjadi jelas mengapa sinyal analog adalah rentang nilai.

Sinyal analog (kiri) dan digital (kanan)
Sinyal analog (kiri) dan digital (kanan)

Sensor inframerah, yang digunakan untuk menentukan garis tanda hitam, bekerja berdasarkan prinsip menangkap sinyal yang dipantulkan. Dua elemen dapat dilihat dengan jelas pada gambar: IR LED dan IR photodetector.

Sensor IR
Sensor IR

Jika Anda meletakkan penghalang di depan sensor dari mana sinar IR akan dipantulkan, semakin baik pantulan dari penghalang (tergantung pada jarak ke penghalang atau jenis penghalang), semakin besar mereka akan dijemput oleh fotodetektor IR dan sensor akan kembali lebih banyak. nilai bagi pengguna selama survei.

Angka 40 dan 50 dipilih secara empiris. Dalam kasus saya, sensor menunjukkan, berada di atas permukaan putih, nilai sekitar 65-75. Di atas permukaan hitam, sensor mengembalikan nilai dalam kisaran 18-25. Angka 40 adalah momen ketika sensor mulai beralih dari permukaan putih ke hitam, dan angka 50 adalah momen transisi dari permukaan hitam ke putih. Angka-angka ini diambil dengan margin kecil untuk memblokir kesalahan dalam pengukuran sensor. Ketika mengembangkan desain nyata, perlu untuk memperhitungkan kondisi di mana sensor akan membaca (pencahayaan eksternal, lokasi sensor, dll.), Karena semua faktor ini akan mempengaruhi pembacaan sensor. Anda mungkin harus mengembangkan algoritma untuk terus-menerus menyesuaikan nilai-nilai ini tergantung pada kondisi eksternal.

Biarkan saya meringkas sedikit. Dua kemungkinan solusi untuk masalah memindahkan robot di sekitar gudang dipertimbangkan. Kedua opsi ini membutuhkan "tag" eksternal tambahan, yang memandu robot. Apakah ada cara untuk melakukannya tanpa mereka? Agar robot, misalnya, untuk mengetahui pada sudut apa poros motor telah berputar dan, tergantung pada nilai sudut, telah memutuskan untuk berhenti atau melanjutkan. Ada solusi sederhana untuk masalah ini - penggunaan motor dengan encoder (sensor sudut).

Set memiliki motor DC dengan gigi, tetapi mereka tidak memiliki encoder. Idenya muncul di benak saya: mungkin saya bisa mencoba membuat encoder sederhana dari bagian perancang, terutama karena roda gigi dari set memiliki modul yang cukup besar (ukuran gigi)?

Elemen utama pembuat enkode
Elemen utama pembuat enkode

Masalah utama adalah memilih lokasi dan memperbaiki sensor IR sehingga memotong gigi persneling saat berputar. Hasilnya, saya mendapat desain uji, yang ditunjukkan pada gambar di bawah ini.

Model Uji Pengkode
Model Tes Encoder

Seperti yang Anda lihat pada gambar di atas, sensor IR dipasang sehingga roda gigi melintasi area pengukuran yang bekerja dengan giginya selama rotasi. Berlawanan (di sisi lain roda gigi) dari sensor IR, saya juga menempatkan penghalang yang bekerja pada pantulan sinar inframerah untuk mendapatkan data yang lebih benar dari sensor. Ketika roda gigi berputar dan sensor IR mengukur pantulan sinyal, akan ada nilai besar ketika ada gigi di depan sensor dan yang lebih kecil ketika ada "lubang" di antara gigi gigi.

Program untuk bekerja dengan encoder dikembangkan di Arduino IDE. Untuk menguji efisiensi ide saya, saya menulis sebuah program sederhana yang menghidupkan mesin untuk berputar pada kecepatan konstan dan terus menerus mengeluarkan nilai-nilai dari sensor IR ke konsol debug.

Teks program
#define M1_A        2       //   1   1
#define M1_B        4       //   2   1
#define M1_PWM      3       //       1
#define SENSOR_PIN  A4      //     IR-sensor

void setup() {
  Serial.begin(9600);       //      
  pinMode(M1_A, OUTPUT);    //       " "
  pinMode(M1_B, OUTPUT);    
  analogWrite(M1_PWM, 100); //    
  digitalWrite(M1_A, HIGH); //    
  for (int i=0; i < 2000; i++) {    //   2000    -
    Serial.println(analogRead(SENSOR_PIN));   //      
  }
  digitalWrite(M1_A, LOW);  //   
}

void loop() {
}


Menurut data yang ditampilkan program pada konsol, saya mendapatkan grafik berikut:

Grafik nilai sensor IR selama rotasi gigi
Grafik perubahan nilai sensor IR selama rotasi gir

Sifat grafik menyerupai bentuk gigi suatu gigi, yang menunjukkan bahwa memang data tersebut dapat digunakan untuk mengontrol putaran mesin menggunakan roda gigi dari perancang yang ditetapkan sebagai cakram enkoder. Untuk menghilangkan "bouncing" histeresis digunakan, yang diimplementasikan sebagai berikut (simbol pada grafik): MIDDLE adalah nilai rata-rata antara nilai maksimum dan minimum dari pembacaan sensor IR, WIDTH adalah penyimpangan dari MIDDLE ke nilai yang lebih besar atau lebih kecil untuk membuat "band kesalahan" tertentu »Pengukuran sinyal (total lebar pita ini adalah 2 * LEBAR). MIDDLE dan WIDTH akan digunakan dalam algoritma kontrol putaran mesin. Algoritma untuk menghitung gigi pada gigi selama putaran mesin dapat direpresentasikan sebagai berikut:

Algoritma untuk menghitung gigi pada gigi selama putaran mesin
Algoritma untuk menghitung gigi pada gigi selama putaran mesin.

Algoritma ini menggunakan notasi berikut:

  • prev_state - status gigi sebelumnya;
  • cur_state - kondisi saat ini dari gear;
  • count - jumlah gigi yang dihitung;
  • tmp - pembacaan sensor IR.

Prinsip penghitungan gigi pada algoritma ini didasarkan pada pembacaan konstan pembacaan dari sensor IR dan perubahan nilai variabel cur_state ketika level sinyal melewati garis atas atau bawah dari "band kesalahan". Jika nilainya melampaui batas atas, maka variabel cur_state menjadi sama dengan 1, yang berarti gigi persneling, dan ketika melampaui batas bawah, variabel cur_state menjadi sama dengan 0, yang berarti celah antara gigi persneling. Penambahan variabel jumlah hanya terjadi ketika keadaan variabel cur_state berubah.

Program yang menggunakan algoritma ini disajikan di bawah ini. Di dalamnya, saya menggambarkan sebuah subrutin yang menunggu sampai mesin memutar gigi dengan jumlah gigi yang telah ditentukan dan setelah itu mentransfer kontrol ke program utama.

Teks program
#define M1_A        2       //   1   1
#define M1_B        4       //   2   1
#define M1_PWM      3       //       1
#define SENSOR_PIN  A4      //     IR-sensor

#define MIDDLE      550     //         
                            // ""
#define WIDTH       50      //      ,   
      //    -     
      // 

int enc_tooth = 0;          // ,    
int cur_state = 0;          //   :  (1)  "" (0)
int prev_state = 0;         //   
int tmp;                    //      

void init_enc() {
  enc_tooth = 0;
  cur_state = 0;
  prev_state = 0;

  //         cur_state
  //    ,   = 1,    ""      
  //   0      
  if (analogRead(SENSOR_PIN)>MIDDLE) {
    prev_state = 1;
    cur_state = 1;
    enc_tooth++;
  }  
}

void wait_by_count(int count) {
  //       count,       IR 
  //           ""
  while (enc_tooth <= count) {
    //    IR-    
    tmp = analogRead(SENSOR_PIN);

    //       +  ,    
    if ((tmp + WIDTH) > MIDDLE) {
      cur_state = 1;
    } else {
    //       -  ,    ""
      if ((tmp - WIDTH) < MIDDLE) {
        cur_state = 0;
      }
    }

    //       ,      
    // ,     ""   -  ""  
    if (cur_state != prev_state) {
    //   ,   0  - ,     
    // 
      enc_tooth += cur_state;
    
    //        
      prev_state = cur_state;
    }
  }
}

void setup() {
  //        
  Serial.begin(115200);

  //        ""
  pinMode(M1_A, OUTPUT);
  pinMode(M1_B, OUTPUT);

  //   
  init_enc();

  //    
  analogWrite(M1_PWM, 100);
 
  //    ,      1 (    
  //  0)
  digitalWrite(M1_A, 1);

  // ,    30  
  wait_by_count(30);
  
  //   
  digitalWrite(M1_B, 1);

  Serial.print("  = ");
  Serial.println(enc_tooth);

}

void loop() {
}


Program menghidupkan mesin dan menunggu sampai gigi berputar 30 gigi - cukup banyak gigi dalam gigi, dan setelah itu berhenti motor. Di bawah ini adalah video yang menunjukkan operasi program:


Pada selembar kertas putih, yang direkatkan ke roda gigi, Anda dapat melacak putarannya sebesar 360 derajat.

Tentang ini saya ingin mengakhiri artikel ini. Sebagai kesimpulan, saya dapat mengatakan bahwa saya tidak berhenti pada model encoder. Platform robot lengkap dirakit dengan dua motor dan dua encoders (satu untuk setiap roda) dan sebuah program dibuat untuk menyinkronkan rotasi roda sesuai dengan encoders, tapi ini adalah topik untuk artikel lain ...

Platform robot dengan encoders berdasarkan sensor IR
Platform robot dengan encoders berdasarkan sensor IR

Sebagai perancang pendidikan dalam robotika, ini adalah pilihan yang baik untuk anak-anak (yah, orang dewasa) yang ingin bergabung dalam kelas-kelas seperti itu, terutama karena pabrikan melakukan segalanya untuk memaksimalkan rentang usia mereka yang dapat menggunakan produk ini (keberadaan lingkungan pemrograman yang berbeda ) Anda bisa mulai dengan elemen yang paling sederhana dan paling dasar, dan setelah mendapatkan pengetahuan dasar, lanjut ke tingkat pengembangan robotika dan elektronik.

All Articles