Robot Arduino sedia dibuat. Robot berkaki empat berasaskan Arduino Kenderaan jejak berasaskan Arduino dikawal dari telefon bimbit

selamat hari! Sebelum anda, wahai, adalah robot seni yang boleh melukis pelbagai objek berbentuk sfera atau telur dengan saiz antara 4 hingga 9 cm.

Untuk membuatnya, anda memerlukan pencetak 3D, satu set alat standard + Arduino.

Nota: Jangan berputus asa dengan projek yang menggunakan pencetak 3D. Jika mahu, anda sentiasa boleh mencari tempat atau kaedah di mana anda boleh memesan pencetakan butiran yang diperlukan untuk projek itu.

Langkah 1: Sedikit tentang robot

Robot seni - dua paksi buatan sendiri, yang boleh mencetak pada kebanyakan permukaan sfera. Robot dikonfigurasikan untuk jenis objek tertentu (bola ping-pong, hiasan Krismas, mentol lampu dan telur (itik, angsa, ayam ...).

Motor stepper berketepatan tinggi dengan tork tinggi digunakan untuk memutarkan objek sfera dan menggerakkan manipulator, dan pemacu servo SG90 yang senyap dan boleh dipercayai digunakan untuk mengangkat mekanisme pemegang.

Langkah 2: Bahagian yang Diperlukan

Untuk membuat kraf buat sendiri kami akan memerlukan:

  • 2x galas 623;
  • Jepit rambut dengan diameter 3 mm dan panjang 80-90 mm;
  • 1x spring (panjang 10mm dan diameter 4.5mm);
  • 2x motor stepper NEMA 17 (torsi 4.4 kg/cm);
  • Kabel untuk motor (panjang 14 + 70 cm);
  • Wayar USB;
  • 1x SG90 servo;
  • Arduino Leonardo;
  • perisai JJRobots;

  • Pemacu motor stepper 2xA4988;
  • Bekalan kuasa 12V / 2A;
  • Skru 11x M3 6mm;
  • Skru 4x M3 16mm;
  • 4x kacang M3;
  • 2x 20mm cawan sedutan;
  • 1x kacang sayap M3;
  • 1x penanda;

Langkah 3: Skim umum

Sebagai "helaian tipu" anda boleh menggunakan skema ini.

Langkah 4: Mari mulakan!

Robot menggerakkan manipulator dengan penanda yang dipasang padanya, yang digerakkan oleh motor stepper. Satu lagi motor stepper bertanggungjawab untuk memutar objek di mana lukisan digunakan (telur, bola ...). Dua cawan sedutan digunakan untuk menahan item di tempatnya, satu dipasang pada motor stepper dan satu lagi di bahagian bertentangan item. Spring kecil akan menekan pada cawan sedutan untuk membantunya memegang item. Servo SG90 digunakan untuk menaikkan/menurunkan penanda.

Langkah 5: Manipulator

Pasang nat dalam lubang yang disediakan untuknya dan ketatkan skru 16 mm. Mari kita lakukan perkara yang sama untuk pemegang item (di sebelah kanan dalam imej di atas). Apabila membuat engsel untuk manipulator, 2 skru 16 mm digunakan. Engsel ini harus berputar dengan bebas selepas mengetatkan skru.

Langkah 6: Penyedut

Pasang salah satu daripada cawan sedutan di dalam lubang pada pemegang item.

Langkah 7: Memasang Motor Stepper

Betulkan kedua-dua motor stepper pada bingkai utama dengan 8 skru.

Langkah 8: Paksi putaran

Mari letakkan semua elemen seperti yang ditunjukkan dalam imej di atas.

  • Penyedut;
  • skru;
  • Bahagian atas;
  • Musim bunga;
  • Bearing 623 (harus dibina ke dalam cawan kiri);
  • Cawan kiri;
  • Ruang kosong untuk bingkai utama;
  • Cawan kanan;
  • Galas 623;
  • cincin pemisah;
  • Kacang sayap (M3).

Langkah 9: Letakkan Semuanya di Tempatnya

Masukkan manipulator yang dipasang pada paksi motor stepper.

Pasang sokongan kiri pada paksi motor stepper.

Penanda dan telur ditetapkan sebagai contoh (anda tidak perlu meletakkannya sekarang).

NOTA: Servo memerlukan pelarasan. Anda perlu menetapkan semula sudutnya semasa proses penentukuran.

Langkah 10: Elektronik

Betulkan elektronik di bahagian belakang bingkai utama dengan skru (2 sudah memadai).

Mari sambungkan kabel.

Jika anda membalikkan kekutuban apabila menyambungkan motor stepper, ia hanya akan berputar ke arah yang bertentangan, tetapi dengan servo keadaannya tidak begitu berbahaya! Jadi semak semula polariti sebelum menyambung!

Langkah 11: Memprogramkan Arduino Leonardo

Mari atur cara Arduino Leonardo menggunakan persekitaran perisian Arduino IDE (v 1.8.1).

  • Muat turun Arduino IDE (v 1.8.1) dan pasang program;
  • Mari jalankan perisian. Pilih papan Arduino Leonardo dan COM-PORT yang sepadan dalam menu "tools->board";
  • Mari buka dan muat turun kod Sphere-O-Bot. Mari kita bongkar semua fail di dalam satu folder dan panggil ia "Ejjduino_ARDUINO".

Langkah 12: Robot Seni Sedia Buat Karya Seni

Langkah 13: Kawalan robot

Perisian inkscape. Muat turun dan pasang perisian Inkscape (saya cadangkan versi stabil 0.91).

Muat turun dan pasang sambungan Kawalan EggBot (versi 2.4.0 telah diuji sepenuhnya).

Sambungan Kawalan EggBot untuk Inkscape ialah alat yang akan digunakan semasa menguji dan menentukur EggBot dan memindahkan lukisan ke telur. Mula-mula anda perlu melancarkan Inkscape. Selepas melancarkan Inkscape, menu "Sambungan" akan muncul, dan di dalamnya anda sudah perlu memilih submenu "Eggbot". Jika anda tidak melihat submenu Eggbot, maka anda tidak memasang sambungan dengan betul. Sandarkan dan ikuti arahan untuk memasang sambungan dengan teliti.

Itu sahaja, terima kasih atas perhatian anda!)

Hasilnya adalah robot yang agak lucu, yang dapat melihat halangan di hadapannya, menganalisis keadaan dan kemudian, hanya memilih laluan terbaik, pergi lebih jauh. Robot itu ternyata sangat mudah dikendalikan. Ia mampu berputar 180 darjah, dan sudut putaran ialah 45 dan 90 darjah. Sebagai pengawal utama, penulis menggunakan Iteaduino, yang merupakan analog Arduino.

Bahan dan alatan untuk membuat robot:
- mikropengawal (Arduino atau Iteaduino yang serupa);
- sensor ultrasonik;
- pemegang untuk bateri;
- Mainan Cina untuk mencipta jarak roda (anda boleh membeli siap);
- pemotong wayar;
- gam;
- wayar;
- motor;
- papan gentian;
- jigsaw;
- transistor (D882P).

Proses pembuatan robot:

Langkah satu. Mencipta jarak roda
Untuk mencipta jarak roda, penulis membeli dua kereta mainan Cina. Walau bagaimanapun, anda tidak perlu risau tentang perkara ini jika anda mempunyai wang tambahan, kerana anda boleh membeli pangkalan siap sedia. Dengan bantuan pemotong wayar, kereta itu dipotong kepada dua bahagian untuk membentuk dua gandar pemanduan. Bahagian-bahagian ini kemudiannya dilekatkan bersama. Walau bagaimanapun, dalam kes ini, anda boleh bekerja dengan besi pematerian, plastik dipateri dengan sempurna.

Apabila memilih kereta, lebih baik mengambil mainan dengan roda biasa, kerana, menurut pengarang, dengan pancang sepertinya, robot itu banyak melompat.

Terdapat satu lagi saat seperti itu apabila wayar akan dikeluarkan dari motor, pada salah satu daripadanya anda perlu ingat untuk menukar kekutuban.


Langkah kedua. Membuat penutup atas
Penutup atas robot diperbuat daripada papan gentian, dan kadbod tebal juga boleh digunakan untuk tujuan ini. Lubang segi empat tepat boleh dilihat di penutup, ia mesti terletak supaya paksi servo, yang akan dimasukkan ke dalamnya, adalah simetri. Bagi lubang di tengah, wayar akan dikeluarkan melaluinya.


Langkah ketiga. Pengisian robot
Sebaik-baiknya gunakan bekalan kuasa berasingan untuk menyambungkan casis, kerana pengawal memerlukan 9V untuk menghidupkannya, dan hanya 3V untuk motor. Secara umum, pemegang bateri sudah dibina ke dalam casis mesin sedemikian, mereka hanya perlu disambungkan secara selari.








Motor disambungkan kepada pengawal menggunakan transistor jenis D882 P. Ia ditarik keluar dari panel kawalan mesin lama. Adalah lebih baik, sudah tentu, menggunakan transistor kuasa jenis TIP120B, tetapi pengarang memilih hanya mengikut ciri yang sesuai. Seluruh bahagian elektronik disambungkan mengikut skema yang ditentukan.

Selepas perisian tegar robot, ia akan sedia untuk diuji. Agar robot mempunyai masa untuk berpusing pada sudut tertentu, anda perlu memilih masa yang sesuai untuk operasi motor.

Bagi penderia, ultrasonik mesti disambungkan ke output digital ke-7 mikropengawal. Servomotor disambungkan ke input digital ke-3, asas transistor motor kiri disambungkan ke pin ke-11, dan pangkalan motor kanan disambungkan ke ke-10.

Jika Krona digunakan sebagai kuasa, maka tolak disambungkan ke GND, dan tambah kepada VIN. Anda juga perlu menyambungkan pemancar transistor dan sentuhan negatif daripada bekalan kuasa casis robot ke GND.

Mari kita bincangkan tentang cara anda boleh menggunakan Arduino untuk mencipta robot yang mengimbangi seperti Segway.

Segway daripada bahasa Inggeris. Segway ialah kenderaan berdiri beroda dua yang dilengkapi dengan pemanduan elektrik. Mereka juga dipanggil gyroscooter atau skuter elektrik.

Pernahkah anda terfikir bagaimana Segway berfungsi? Dalam tutorial ini kami akan cuba menunjukkan kepada anda cara membuat robot Arduino yang mengimbangi dirinya seperti Segway.

Untuk mengimbangi robot, motor mesti mengatasi kejatuhan robot. Tindakan ini memerlukan maklum balas dan elemen pembetulan. Elemen maklum balas - , yang menyediakan kedua-dua pecutan dan putaran dalam ketiga-tiga paksi (). Arduino menggunakan ini untuk mengetahui orientasi semasa robot. Elemen pembetulan ialah gabungan enjin dan roda.

Hasil akhir sepatutnya seperti ini:

Skim robot

Modul Pemacu Motor L298N:

Motor Gear DC dengan Roda:

Robot pengimbangan diri pada asasnya adalah bandul terbalik. Ia boleh menjadi lebih seimbang jika pusat jisim lebih tinggi berbanding gandar roda. Pusat jisim yang lebih tinggi bermakna momen inersia jisim yang lebih tinggi, yang sepadan dengan pecutan sudut yang lebih rendah (jatuh yang lebih perlahan). Itulah sebabnya kami meletakkan pek bateri di atas. Bagaimanapun, ketinggian robot itu dipilih berdasarkan ketersediaan bahan 🙂

Versi lengkap robot pengimbangan diri boleh dilihat dalam rajah di atas. Di bahagian atas terdapat enam bateri Ni-Cd untuk menghidupkan PCB. Di antara motor, bateri 9 volt digunakan untuk pemandu motor.

Teori

Dalam teori kawalan, memegang beberapa pembolehubah (dalam kes ini kedudukan robot) memerlukan pengawal khas yang dipanggil PID (Proportional Integral Derivative). Setiap parameter ini mempunyai "gain", biasanya dirujuk sebagai Kp, Ki dan Kd. PID menyediakan pembetulan antara nilai (atau input) yang dikehendaki dan nilai sebenar (atau output). Perbezaan antara input dan output dipanggil "ralat".

Pengawal PID mengurangkan ralat kepada nilai terkecil yang mungkin dengan sentiasa melaraskan output. Dalam robot Arduino pengimbangan diri kami, input (iaitu cerun yang dikehendaki dalam darjah) ditetapkan oleh perisian. MPU6050 membaca kecondongan semasa robot dan memasukkannya ke dalam algoritma PID yang melakukan pengiraan untuk mengawal motor dan memastikan robot tegak.

PID memerlukan nilai Kp, Ki dan Kd ditetapkan kepada nilai optimum. Jurutera menggunakan perisian seperti MATLAB untuk mengira nilai ini secara automatik. Malangnya, kami tidak boleh menggunakan MATLAB dalam kes kami kerana ia akan merumitkan lagi projek. Sebaliknya, kami akan menala nilai PID. Begini cara melakukannya:

  1. Tetapkan Kp, Ki dan Kd kepada sifar.
  2. Laraskan Kp. Kp terlalu sedikit akan menyebabkan robot jatuh kerana pembaikan tidak mencukupi. Terlalu banyak Kp membuatkan robot menjadi liar ke sana ke mari. Kp yang baik akan membuat robot bersandar ke depan dan ke belakang agak sedikit (atau berayun sedikit).
  3. Setelah Kp ditetapkan, laraskan Kd. Nilai Kd yang baik akan mengurangkan ayunan sehingga robot hampir stabil. Selain itu, Kd yang betul akan mengekalkan robot walaupun ditolak.
  4. Akhir sekali, pasang Ki. Apabila dihidupkan, robot akan berayun walaupun Kp dan Kd ditetapkan, tetapi akan stabil dari semasa ke semasa. Nilai Ki yang betul akan memendekkan masa yang diperlukan untuk robot menstabilkan.

Tingkah laku robot boleh dilihat di bawah dalam video:

Kod Arduino untuk robot pengimbangan diri

Kami memerlukan empat perpustakaan luaran untuk mencipta robot kami. Pustaka PID memudahkan untuk mengira nilai P, I dan D. Pustaka LMotorController digunakan untuk mengawal dua motor dengan modul L298N. Pustaka I2Cdev dan pustaka MPU6050_6_Axis_MotionApps20 direka bentuk untuk membaca data daripada MPU6050. Anda boleh memuat turun kod termasuk perpustakaan dalam repositori ini.

#termasuk #termasuk #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #define MIN_ABS_SPEED 20 MPU605 // MPU control/status vars bool dmpReady = false; // tetapkan benar jika DMP init berjaya uint8_t mpuIntStatus; // memegang bait status gangguan sebenar daripada MPU uint8_t devStatus; // kembalikan status selepas setiap operasi peranti (0 = kejayaan, !0 = ralat) uint16_t packetSize; // saiz paket DMP dijangka (lalai ialah 42 bait) uint16_t fifoCount; // kiraan semua bait pada masa ini dalam FIFO uint8_t fifoBuffer; // penimbal storan FIFO // orientasi/gerakan vars Quaternion q; // bekas kuaternion VectorFloat gravity; // apungan vektor graviti ypr; // bekas yaw/pitch/roll dan vektor graviti //PID double originalSetpoint = 173; titik set berganda = titik set asal; double movingAngleOffset = 0.1; input berganda, keluaran; //laraskan nilai ini agar sesuai dengan reka bentuk anda sendiri double Kp = 50; ganda Kd = 1.4; double Ki = 60; PID pid(&input, &output, &setpoint, Kp, Ki, Kd, ​​​​DIRECT); dua motorSpeedFactorLeft = 0.6; dua motorSpeedFactorRight = 0.5; // PENGAWAL MOTOR int ENA = 5; int IN1 = 6; int IN2 = 7; int IN3 = 8; int IN4 = 9; int ENB = 10; LMMotorController motorController(ENA, IN1, IN2, ENB, IN3, IN4, motorSpeedFactorLeft, motorSpeedFactorRight); volatile bool mpuInterrupt = palsu; // menunjukkan sama ada pin gangguan MPU telah menjadi void tinggi dmpDataReady() ( mpuInterrupt = true; ) persediaan void() ( // sertai bas I2C (pustaka I2Cdev tidak melakukan ini secara automatik) #jika I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin( ); TWBR = 24; // Jam I2C 400kHz (200kHz jika CPU ialah 8MHz) #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif mpu.initialize(); devStatus = mpu.(dmp); // bekalkan offset gyro anda sendiri di sini, diskalakan untuk sensitiviti min mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); // 1688 lalai kilang untuk ujian saya cip // pastikan ia berfungsi (mengembalikan 0 jika ya) jika (devStatus == 0) ( // hidupkan DMP, sekarang bahawa ia sudah sedia mpu.setDMPEnabled(true); // dayakan pengesanan gangguan Arduino attachInterrupt(0 , dmpDataReady , RISING); mpuIntStatus = mpu.getIntStatus(); // tetapkan bendera DMP Ready kami supaya fungsi gelung() utama mengetahui bahawa tidak mengapa untuk menggunakannya dmpReady = true; // dapatkan DM yang diharapkan Saiz paket P untuk perbandingan kemudian packetSize = mpu.dmpGetFIFOPacketSize(); //setup PID pid.SetMode(AUTOMATIK); pid.SetSampleTime(10); pid. SetOutputLimits(-255, 255); ) else ( // RALAT! // 1 = beban memori awal gagal // 2 = Kemas kini konfigurasi DMP gagal // (jika ia akan rosak, biasanya kodnya ialah 1) Serial.print(F("DMP Initialization gagal (kod ")); Serial.print(devStatus); Serial.println(F(")); ) ) void loop() ( // jika pengaturcaraan gagal, jangan cuba lakukan apa-apa jika (!dmpReady ) kembali; // tunggu gangguan MPU atau paket tambahan tersedia sementara (!mpuInterrupt && fifoCount< packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); motorController.move(output, MIN_ABS_SPEED); } // reset interrupt flag and get INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is >1 paket tersedia // (ini membolehkan kami segera membaca lebih lanjut tanpa menunggu gangguan) fifoCount -= packetSize; mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&graviti, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); input = ypr * 180/M_PI + 180; ) )

Nilai Kp, Ki, Kd mungkin berfungsi atau tidak. Jika tidak, ikuti langkah di atas. Ambil perhatian bahawa kecondongan dalam kod ditetapkan kepada 173 darjah. Anda boleh menukar nilai ini jika anda suka, tetapi ambil perhatian bahawa ini adalah sudut yang mesti disokong oleh robot. Selain itu, jika motor anda terlalu laju, anda boleh melaraskan nilai motorSpeedFactorLeft dan motorSpeedFactorRight.

Itu sahaja buat masa ini. jumpa awak.

Sangat mudah untuk membuat kereta yang berbeza dengan alat kawalan jauh, penderia ringkas dan logik pada Arduino. Oleh itu, baris ini sangat popular. Banyak penderia yang serasi dan papan pengembangan dijual. Internet dipenuhi dengan perpustakaan perisian siap pakai dan projek sumber terbuka untuk semua keadaan. Hampir semua soalan yang anda akan ada dalam proses menguasai Arduino telah ditanya oleh seseorang, dan anda akan sentiasa mencari jawapannya.

Mari kita mulakan dengan sesuatu, boleh? Isu utama ialah pilihan pengawal. Terdapat banyak semakan Arduino, serta klon pihak ketiga yang dibina daripada semakan tersebut. Berikut mungkin dua kelas yang paling menarik untuk kami:

  • Arduino Uno ialah pilihan terbaik untuk pemula, papan paling mudah, berpatutan dan paling biasa. Ia berdasarkan cip ATmega328 dengan frekuensi jam 16 MHz, 32 KB memori kilat, 2 KB RAM dan 1 KB EEPROM. Uno mempunyai 14 input/output digital yang boleh digunakan untuk mengawal penderia dan servos dan peranti lain;
  • Arduino Mega / Mega 2560 ialah papan yang akan berguna apabila anda mengetahui terlebih dahulu bahawa projek itu akan menjadi sukar. Perbezaan utama adalah lebih banyak input/output (48 dalam Mega, 54 dalam Mega 2560). Terdapat juga lebih banyak memori di sini: 8 KB RAM, 4 KB EEPROM dan memori kilat 128 dan 256 KB (masing-masing dalam Mega dan Mega 2560). Di antara mereka sendiri, papan juga berbeza dalam cip, kelajuan USB dan beberapa ciri lain.

Sudah tentu, terdapat juga Arduino Pro, Arduino LilyPad dan banyak lagi. Tetapi sekarang mari kita fokus pada dua model pertama. Dalam kes kami, semuanya agak mudah: Mega diperlukan untuk robot dengan banyak kaki.

Kod pertama

Mula-mula, mari pasang Arduino IDE (arduino.cc) - ini ialah persekitaran pembangunan merentas platform percuma. Sekarang, jika kita menyambungkan Arduino kita, kita boleh cuba menulis kod pertama pada contoh paling mudah: program LED berkelip. Kebanyakan pengawal Arduino memilikinya dan disambungkan ke pin 13. Dengan cara ini, dalam dunia Arduino, program biasanya dipanggil lakaran. Berikut ialah teks lakaran dengan ulasan:

// Berikan pin ini nama LED: const int LED = 13; persediaan void() ( // Mulakan pin digital // untuk output: pinMode(LED, OUTPUT); ) void loop() ( // Tetapkan logik-satu tahap // kepada pin 13 (LED cahaya): digitalWrite(LED, HIGH ); // Jeda lakaran // untuk satu saat: delay(1000); // Guna tahap sifar logik // pada pin 13 (matikan LED): digitalWrite(LED, LOW); // Jeda lakaran sekali lagi sekejap: kelewatan(1000); )

Perhatikan fungsi persediaan dan gelung. Mereka mesti ada dalam mana-mana lakaran Arduino. Persediaan dipanggil sekali apabila pengawal dihidupkan atau selepas pengawal dimulakan semula. Jika anda mahu kod dilaksanakan sekali sahaja, ia harus diletakkan di sini. Selalunya, ini adalah semua jenis prosedur permulaan untuk sesuatu. Lakaran kami tidak terkecuali: Pin digital Arduino boleh berfungsi sebagai kedua-dua input dan output. Dalam fungsi persediaan, kami mengatakan bahawa pin 13 akan berfungsi sebagai output digital pengawal.

Selepas fungsi persediaan menyelesaikan kerjanya, gelung tertutup dilancarkan secara automatik, di dalamnya fungsi gelung akan dipanggil. Kami dikehendaki menulis apa yang ingin kami lakukan di sana. Dan kami ingin menggunakan logik satu tahap (5 V) pada pin 13, iaitu, nyalakan LED, kemudian tunggu satu saat (1000 dalam milisaat), kemudian gunakan tahap sifar logik (0 V) dan tunggu satu saat lagi. Panggilan ke gelung seterusnya akan mengulangi segala-galanya.

Sekarang kami "memuat naik" lakaran kami ke pengawal. Tidak, kami tidak memerlukan pengaturcara. Pengawal Arduino, sebagai tambahan kepada lakaran kami, mengandungi program khas - pemuat but, yang, khususnya, mengawal pemuatan kod dari komputer. Jadi untuk memuat naik lakaran, kami hanya memerlukan kabel USB dan item menu Fail → Muat Naik (Ctrl + U) dalam IDE Arduino.

soalan kunci

Berapa banyak kaki sebenarnya yang kita perlukan? Mari kita takrifkan dalam pelbagai konfigurasi robot berjalan. Mengikut bilangan kaki:

  • biped - berkaki dua (prototaip - lelaki);
  • berkaki empat - berkaki empat (prototaip - kebanyakan mamalia);
  • hexapod - berkaki enam (prototaip - kebanyakan serangga);
  • octopod - berkaki lapan (prototaip - labah-labah, kala jengking, ketam dan arthropoda lain).

Selain bilangan kaki, konfigurasi setiap satu juga penting. Ciri utama kaki ialah bilangan darjah kebebasan, atau dimensi kebebasan (DOF). Darjah kebebasan ialah keupayaan untuk berputar atau membengkok di sekitar satu paksi (kurang kerap, untuk bergerak ke hadapan di sepanjangnya). Jelas sekali, jika hanya ada satu darjah kebebasan, maka anda tidak akan pergi jauh dengan kaki sedemikian. Kaki dengan dua darjah kebebasan (2DOF) sudah membenarkan robot berbilang kaki untuk bergerak, walaupun 2DOF membenarkan pergerakan bebas hujung kaki dalam satu satah sahaja. Dan kaki 3DOF menggerakkan "kaki" dalam ruang 3D (melainkan, sudah tentu, ketiga-tiga paksi adalah selari). Terdapat juga kaki 4DOF yang hanya meningkatkan fleksibiliti dan julat pergerakan kaki. Serangga paling kerap mempunyai kaki 4DOF.

Apakah maknanya bagi kita? Dalam robot amatur murah, setiap tahap kebebasan dilaksanakan oleh satu motor, lebih tepat lagi, pemacu servo, atau serv. Konfigurasi kaki secara unik menentukan bilangan servos ini diperlukan. Jadi hexapod 3DOF memerlukan 18 servos, dan labah-labah 4DOF memerlukan 32. Jangan takut dengan nombor, servos kecil yang digunakan dalam model RC amatur adalah sangat murah. Di kedai dalam talian, mereka boleh didapati atas permintaan servo mikro.

Untuk memprogram servos, cukup untuk mengetahui bahawa mereka sudah mempunyai pengawal yang melakukan kerja utama. Dan semua yang diperlukan adalah untuk membekalkan kuasa dan isyarat digital yang memberitahu pengawal di kedudukan mana kita mahu memusingkan aci pemacu. Mudah untuk mencari maklumat tentang reka bentuk mereka. Protokol mereka adalah yang paling mudah daripada semua protokol komunikasi digital: modulasi lebar nadi - PWM (PWM dalam bahasa Inggeris). Semua servos ringkas mempunyai penyambung tiga pin: tanah, +5V (voltan mungkin berbeza bergantung pada saiz dan kuasa) dan input isyarat. Pengawal Arduino boleh menjana isyarat ini dalam dua cara berbeza. Yang pertama ialah PWM perkakasan, yang boleh dikeluarkan oleh cip itu sendiri pada beberapa pin I/O digitalnya. Yang kedua ialah perisian. Perisian membolehkan anda menerima lebih banyak isyarat PWM berbeza pada masa yang sama daripada perkakasan. Pembungkus yang mudah disediakan untuknya di bawah Arduino - perpustakaan Servo. Ia membolehkan anda menggunakan 12 servos serentak pada kebanyakan pengawal bersaiz kecil (Uno, Due, Nano) dan 48 servos pada Arduino Mega dan seumpamanya. Pin isyarat servo disambungkan ke pin digital Arduino. Tanah dan kuasa - jelas sekali, kepada tanah dan kuasa, mereka boleh dikongsi oleh semua servos. Dalam gelung servo tiga wayar, hitam atau coklat dikisar, biasanya merah +5 V di tengah, dan akhirnya putih atau kuning adalah isyarat. Dari sudut pandangan perisian, kawalan adalah sangat mudah:

Servo myservo; // Servo pada pin Arduino 9 myservo.attach(9); // Putar ke kedudukan 90º myservo.write(90);

Kebanyakan servos boleh memutarkan aci 180°, dan bagi mereka 90° ialah kedudukan tengah. Untuk memudahkan sambungan servos ke papan Arduino, terdapat beberapa penyelesaian. Yang paling kanonik ialah Perisai Sensor. Dengan memasangnya pada Uno dan membekalkan kuasa kepada terminal untuk servos, anda boleh menyambungkan penyambungnya terus kepadanya.

Bateri

Satu lagi isu penting ialah pemakanan. Jika anda mempunyai papan lanjutan yang membolehkan anda membekalkan keseluruhan sistem melalui satu talian kuasa (dan motor servo tidak akan mengganggu operasi pengawal), maka anda boleh bertahan dengan satu sumber. Pilihannya sangat besar, yang terbaik, sudah tentu, briket Li-Ion / Li-Po untuk model radio. Tetapi mereka juga memerlukan pengecas yang sesuai. Jika anda mempunyai pengawal yang lebih ringkas (Uno / Due / Nano), maka anda boleh kuasakannya secara berasingan, contohnya, dengan Krona 9 volt, dan sambungkan servos ke bateri berkuasa utama. Jadi servos pasti akan mempunyai kuasa yang mencukupi. Dalam kes bateri litium, anda perlu memantau voltan dengan lebih berhati-hati daripada biasa supaya tiada pelepasan berlebihan (voltan yang dibenarkan harus dijelaskan untuk jenis bateri tertentu). Untuk melakukan ini, voltmeter digital kecil juga diskrukan ke robot Sleipnir, yang akan dibincangkan lebih lanjut.

Robobug buat sendiri

Kit

  • Pengawal Arduino Uno: 1150 rubel
  • Tiga motor servo. Saya menggunakan HXT500, 200 r. sekeping
  • Petak bateri untuk "Krona" dengan suis: 50 rubel.
  • Bateri "Krona": 145 rubel.
  • Penerima IR: $90
  • Kawat keluli dengan diameter lebih kurang 1.5 mm. Sebagai contoh, saya menggunakan pemukul telur pecah

Jumlah: 2035 p.

DmitryDzz: Saya ingin menjemput anda untuk membuat kumbang robotik enam kaki kawalan jauh kecil berdasarkan pengawal Arduino Uno. Kaki akan mempunyai satu darjah kebebasan, kawalan akan dilakukan menggunakan alat kawalan jauh TV konvensional.

Saya mesti mengatakan bahawa ini adalah harga kedai Moscow yang mahal. Di kedai dalam talian Cina, semua ini akan berharga dua kali lebih murah. Mempertimbangkan penghantaran. Benar, anda perlu menunggu, dalam pengalaman saya, dari dua minggu hingga tiga bulan.

Cara yang lebih mudah ialah mengambil set pembina, kerana pada langkah pertama satu pengawal tidak akan mencukupi. Sekarang banyak kedai menawarkan set sedemikian. Sebagai contoh, terdapat kedai dalam talian yang indah "Amperka". Di sini anda akan ditawarkan beberapa pereka yang serupa, berbeza dalam kepenuhan dan, sudah tentu, dalam harga. Perkara paling mudah sudah cukup untuk saya - "Matryoshka X". Ia termasuk pengawal Arduino Uno, kabel USB untuk menyambung ke komputer, papan prototaip (perkara yang sangat diperlukan!), Satu set pelompat, LED, perintang dan perkara kecil lain.

Di kedai yang sama terdapat bahagian "Wiki", di mana anda juga akan menemui tutorial video pendek yang indah diterjemahkan ke dalam bahasa Rusia. Pastikan anda menyemaknya. Dan sudah tentu, terdapat forum di mana mereka mungkin akan cuba membantu anda.

Apa yang anda perlukan daripada alat:

  • besi pematerian dan semua yang anda perlukan untuk pematerian. Anda tidak perlu memateri banyak, dan anda tidak memerlukan banyak kemahiran;
  • pistol gam panas dan batang padanya;
  • tang untuk bekerja dengan wayar.

Jika anda mempunyai segala-galanya, mari mulakan!

Kawalan

Mari kita teruskan ke langkah pertama: kita perlu belajar cara berinteraksi dengan alat kawalan jauh dan mengetahui kod untuk menekan beberapa butangnya. Kod ini kemudiannya akan berguna untuk lakaran kawalan robot.

Pada peringkat ini, anda juga memerlukan penerima IR dan adalah bagus untuk mempunyai papan prototaip. Sebahagian besar alat kawalan jauh IR beroperasi pada frekuensi pembawa 36 kHz, 38 kHz atau 40 kHz (Panasonic, Sony). Pengecualian ialah Sharp (56 kHz), Bang & Olufsen (455 kHz), dan mungkin orang lain yang lebih eksotik. Oleh itu, mana-mana penerima IR pada 36, ​​38 atau 40 kHz agak sesuai untuk kami. Kekerapan mungkin tidak sepadan dengan frekuensi pembawa isyarat. Dalam kes ini, sensitiviti penerima akan berkurangan, tetapi dalam praktiknya saya tidak melihat sebarang ketidakselesaan menggunakan penerima IR TSOP2136 (36 kHz - dua digit terakhir - kekerapan) dan alat kawalan jauh Sony (40 kHz).

Jadi, penerima IR TSOP21xx, TSOP22xx, TSOP312xx sesuai untuk kebanyakan alat kawalan jauh. Dua digit terakhir boleh menjadi 36, 37, 38 atau 40. Sebelum menghidupkan penerima IR, periksa pinout pinnya - hanya terdapat tiga daripadanya: + 5V (kuasa), GND (tanah), Vs (output) . Mari pasang litar, seperti dalam ilustrasi (pendawaian untuk TSOP2136).


Seperti yang anda lihat, kami menyambungkan output penerima IR ke input analog pengawal A0.

Inilah rupa kod lakaran:

#include "IRremote.h" // Input analog pengawal // yang penerima IR disambungkan: const int IR_PIN = A0; // Cipta objek penerima IR: IRrecv irrecv(IR_PIN); void setup() ( Serial.begin(9600); Serial.println("ready"); // Mula mendengar isyarat IR: irrecv.enableIRIn(); ) void loop() ( // Huraikan hasil struktur, / / di mana // diterima dan dinyahkod // arahan IR akan diletakkan: decode_results results; // Jika arahan IR diterima dan // berjaya dinyahkod, maka keluarkan // kod yang diterima ke // port bersiri pengawal: jika ( irrecv.decode (&results)) ( Serial.println(results.value); irrecv.resume(); ) )

Lakaran menggunakan perpustakaan khas IRremote.h, yang menyahkod isyarat pelbagai alat kawalan jauh IR. Perpustakaan ini adalah projek terbuka, anda boleh memuat turunnya dari https://github.com/shirriff/Arduino-IRremote. Dan untuk menyambungkannya ke projek kami, anda perlu melakukan tiga langkah:

  • salin direktori perpustakaan ke direktori perpustakaan, yang, seterusnya, terletak dalam direktori pemasangan IDE Arduino;
  • mulakan semula IDE;
  • tambahkan baris #include "IRremote.h" pada permulaan lakaran kami.

Kini fungsi penyahkodan IR akan tersedia dalam lakaran. Tetapi untuk melihat kod yang terhasil, kami masih akan menggunakan objek Serial. Dengan bantuannya, melalui port bersiri (kabel USB yang sama), kami akan memindahkan kod ke komputer. Dalam fungsi persediaan, kami memulakan objek Serial. "9600" ialah 9600 baud - kadar yang akan digunakan untuk pemindahan data. Selepas permulaan, kita boleh menulis ke port bersiri menggunakan fungsi println. Untuk melihat hasil output ini pada komputer dalam IDE Arduino, pilih item menu Tools → Serial Monitor (Ctrl + Shift + M). Cuma pastikan ia ditetapkan kepada 9600 baud.

Jadi, pengawal menerima kuasa melalui kabel USB, dan menghantar data melaluinya. Kami memuatkan lakaran, melancarkan Monitor Bersiri dan mula menekan butang pada alat kawalan jauh. Kod harus muncul dalam tetingkap Pemantau Bersiri. Protokol kawalan jauh adalah berbeza, kadangkala ia boleh menjadi satu kod, kadangkala beberapa. Walau apa pun, anda sentiasa boleh memperuntukkan kod yang unik untuk setiap butang pada alat kawalan jauh.

Kami memerlukan 13 butang kawalan jauh. Saya menggunakan yang berikut:

  • 1 - pusingan lancar ke kiri;
  • 2 - bergerak ke hadapan;
  • 3 - pusingan lancar ke kanan;
  • 4 - belok kiri di tempat kejadian;
  • 5 - berhenti;
  • 6 - belok kanan di tempat kejadian;
  • 7 - pergerakan ke belakang dengan pusingan ke kanan;
  • 8 - pergerakan ke belakang;
  • 9 - pergerakan ke belakang dengan belok ke kiri;
  • butang biru - sangat perlahan;
  • kuning - perlahan-lahan;
  • hijau - cepat;
  • merah - sangat cepat.

Tulis kod untuk butang ini, anda akan memerlukannya kemudian untuk lakaran kawalan robot.

Algoritma pergerakan

Lakaran kawalan robot tersedia di halaman projek kami (bit.ly/1dEwNDC). Jangan lupa untuk menukar nilai pemalar kod butang kawalan jauh yang ditekan kepada kod alat kawalan jauh anda (pemalar IR_COMMAND_XXX_CODES dalam fail ir_command_codes.h).

Kami tidak akan menganalisis lakaran secara terperinci, saya rasa komen dalam kod sudah cukup, tetapi satu soalan masih perlu dipertimbangkan.

Pergerakan serangga sangat menarik. Dan walaupun semua kumbang ini jatuh sangat dekat dengan tanah, atas sebab tertentu mereka sentiasa stabil: pada bila-bila masa, sekurang-kurangnya tiga kaki (dua di satu sisi dan satu di sisi lain) berdiri di permukaan. Dan sementara kaki ini menarik kumbang ke arah salah satu sasaran yang didorongnya, tiga yang lain ditarik ke atas untuk mengulangi pergerakan ini. Matlamat kami adalah untuk melakukan sesuatu yang serupa.

Pepijat robot kami mempunyai tiga motor servo yang disusun dalam satu baris berserenjang dengan pergerakan. Untuk motor servo kiri dan kanan, paksi aci diarahkan ke atas, dan untuk yang tengah, ia ke hadapan. Tugas, sebagai contoh, servo kiri adalah untuk mengepam dua kaki serentak: bahagian depan kiri dan belakang kiri. Ngomong-ngomong, mereka saling tegar dan terpaku pada penggoncang servo ini. Tugas servo pusat ialah mengangkat sebelah kiri kumbang, kemudian sebelah kanan. Oleh itu, kaki kiri dan kanan tengah dilekatkan pada kerusi goyang enjin ini, yang merupakan bahagian tunggal berbentuk U.

Lakaran hendaklah memastikan robot bergerak ke hadapan, ke belakang, licin berpusing dalam gerakan dan berpusing di tempatnya. Dan saya juga ingin mengawal kelajuan kumbang itu. Untuk menerangkan pergerakan ini secara pemrograman, kita memerlukan matematik. Tengok rajah.


Bulatan biru menunjukkan kaki kumbang robot, berdiri di permukaan, dan bulatan putih adalah di udara. Sila ambil perhatian bahawa apabila bergerak ke hadapan atau ke belakang, motor servo kiri dan kanan mesti bergerak dengan cara yang sama. Dan apabila berputar di tempatnya, enjin harus berputar dalam arah yang berbeza (secara simetri). Ia juga menarik bahawa pergerakan ke hadapan dan ke belakang berbeza hanya dalam fasa servomotor pusat.

Jadi bagaimana ia dilaksanakan? Kami ingat bahawa pengawal sentiasa memanggil fungsi gelung. Jadi, dalam fungsi ini kita mesti meletakkan kod yang menentukan kedudukan semasa servos dan menetapkannya ke kedudukan ini. Setiap motor servo mesti berayun. Kita boleh mengira kedudukan motor servo pada masa t menggunakan formula berikut:

X = A sin(2Ï€t/T),

di mana X ialah kedudukan motor servo yang dikehendaki, A ialah amplitud ayunan, T ialah tempoh ayunan.

Jadi, bergantung pada momen masa t, kita akan mendapat perubahan dalam nilai X dalam julat dari -A hingga +A. Servomotors boleh mengambil kedudukan dalam julat dari 0 hingga 180°. Oleh itu, adalah lebih baik untuk kita berayun di sekitar kedudukan "sifar" pada 90 °. Dan jika kita ingin memberikan ayunan dengan tempoh 1 s di sekitar kedudukan 90 ° dengan amplitud 30 °, maka formula ditukar kepada bentuk berikut:

X = 90 + 30 sin(2Ï€t/1000),

dengan t ialah masa dalam milisaat sejak permulaan ayunan. Untuk mengawal kelajuan robocall, kita boleh menukar tempoh ayunan. Semakin besar, semakin rendah kelajuannya.

Dan sekarang mari kita kembali ke skema kita semula, kerana formula yang ditulis di atas masih belum lengkap. Bagaimana untuk memastikan bahawa segerak, maka pergerakan bertentangan servomotor kiri dan kanan? Bagaimana untuk menukar fasa servomotor pusat? Kita perlu menambah fasa ayunan kepada formula kita. Mengalihkan hujah sinus dengan π untuk, sebagai contoh, enjin kanan akan menjadikannya berfungsi dalam antifasa ke kiri, iaitu, cara kita perlu berpusing di tempatnya. Inilah rupa formula kami sekarang:

X = 90 + 30 sin(2πt/1000 + Φ),

di mana Φ ialah fasa ayunan, nilainya ialah dari 0 hingga 2π.

Lihat jadual untuk memahami apakah fasa ayunan motor servo sepatutnya untuk setiap jenis pergerakan.

perhimpunan

Sekarang mari pasang robot pada papan prototaip dan isikan lakaran kawalan.

Ini adalah langkah yang sangat penting sebelum pemasangan. Cuba putuskan sambungan kabel USB dan kuasakan susun atur daripada bateri Krona. Semak semua fasa pergerakan dan pastikan semuanya berfungsi. Selepas memasang robot, menukar apa-apa (contohnya, menggantikan motor servo yang rosak) akan menjadi lebih sukar.


Sekarang mari kita beralih kepada perhimpunan itu sendiri. Elemen galas utama ialah petak bateri. Saya menasihati anda untuk menggunakan petak jenis tertutup dan sentiasa dengan suis.

Cara paling mudah untuk membetulkan butiran kumbang adalah dengan gam panas. Mulakan dengan servomotors. Tanggalkan telinga pengikat yang tidak perlu dan sambungkan kereta bersama-sama. Kemudian gamkan pemasangan tiga "servos" ini pada penutup bateri. Jangan lupa bahawa petak bateri mesti terbuka dengan bebas untuk menukar bateri.

Cara paling mudah ialah melekatkan pengawal ke teluk, tetapi saya tidak begitu menyukai pilihan ini, kerana saya perlu memberikan Arduino Uno kepada pepijat selama-lamanya. Oleh itu, anda boleh merumitkan kehidupan anda dan menggunakan penyambung Arduino untuk memasang petak bateri. Lekatkan penyambung pin pada bahagian bawah petak dengan pic 2.54 mm di antara pin. Ia harus diletakkan supaya ia memasuki soket pengawal di kawasan keluaran digital 8-11. Kami masih tidak memerlukannya. Jika penyambung tidak ada, klip kertas melengkung berbentuk U akan berfungsi.

Wayar yang datang dari petak bateri mesti disambungkan ke terminal Vin dan GND bersebelahan dengannya. Jangan terbalikkan polariti! Tambah "Krona" pada Vin, tolak pada GND. Untuk memastikan hubungan wayar yang boleh dipercayai dengan penyambung Arduino, anda hanya boleh tin hujung wayar lebih tebal, tetapi saya menggunakan sekeping pendek klip kertas sebagai palam. Dan tempat pematerian ditutup dengan tiub pengecutan haba.


Penyambung daripada kabel servo hendaklah diputuskan, wayar kuasa (+5 V - biasanya merah dan GND - hitam atau coklat) hendaklah digabungkan dan disambungkan kepada bicu 5V dan GND bersebelahan pada pengawal. Nanti kita sambung sikit. Wayar isyarat kawalan (biasanya kuning) adalah output kepada output digital pengawal: motor servo kiri pada pin 2, yang tengah pada pin 4, yang kanan pada pin 7.

"+" dan "-" penerima IR boleh dipalamkan ke dalam penyambung Arduino (5V dan GND bersebelahan). Benar, membongkok separuh, menggandakan ketebalannya. Kami memateri wayar kuasa yang telah disambungkan sebelum ini ke servomotors ke kaki kuasa yang sama pada penerima IR. Output isyarat penerima IR tidak mungkin mencapai input analog pengawal A0, dan anda perlu meningkatkannya dengan wayar.

Beberapa petua untuk membuat kaki. Pertama, sediakan kaki "depan-belakang" kiri dan kanan. Pastikan ia simetri (perhatikan kedua-dua panjang dan sudut selekoh). Mula melekatkan kaki hanya selepas memastikan bahawa servomotors ditetapkan pada kedudukan "sifar" (90°).

Letakkan sepasang kaki tengah terakhir. Saya menasihati anda untuk terlebih dahulu membuat kaki tengah lebih panjang, dan kemudian selepas pemasangan, potong ke panjang yang dikehendaki. Dalam kedudukan "sifar", semua enam kaki harus berada di permukaan. Gulungan kaki tengah dengan amplitud 15° tidak boleh mengganggu pusingan depan belakang.

Apa yang akan datang?

Robobug ialah platform mudah alih siap pakai berdasarkan salah satu pengawal yang paling popular dan berpatutan. Projek ini dibuka: https://github.com/beetle-ringo/arduino . Buat garpu (cawangan) dalam GitHub dan tambahkan fungsi anda. Biarkan imaginasi anda berjalan liar - tambahkan LED IR dan robot bersedia untuk pertempuran robot. Sambungkan pencari jarak, penderia sentuhan, giroskop... Ajar robot untuk memintas halangan atau berjalan di sepanjang garisan, cuba pasang kamera web padanya. Terdapat sejuta idea, dan anda sentiasa boleh memilih yang paling menarik.

Robot Sleipnir

Kit

  • Pengawal Robot Labah-labah Arduino Uno Dagu: $2530
  • Servo pemacu SG90 9g (16 keping) 1150 Ñ€.
  • Pek bateri LiPo, 7.4 V, 1800 mAh $4.99
  • Modul radio 4 Pin Bluetooth RF Transceiver 270 Ñ€.
  • Penunjuk voltan (pilihan) DC 3.3-30V Meter Panel LED Merah $100
  • Sudut aluminium. Dalam pasaran pembinaan terdekat 135 rubel.
  • Bolt dan nat. Di pasar loak terdekat 35 rubel.

Jumlah: 4710 r.

*Komponen dibeli pada masa yang berbeza dan banyak kedudukan boleh dioptimumkan

poconoco: Mari cuba memasang konfigurasi bukan standard - robot 2DOF berkaki lapan. Kaki 2DOF lebih mudah untuk diprogramkan, ditambah saya mempunyai banyak stok servos yang tidak digunakan. Dan yang paling penting, adalah mungkin untuk menamakannya sebagai penghormatan kepada kuda berkaki lapan dewa Odin Sleipnir (sentiasa diimpikan!).

Sleipnir kami akan mempunyai empat kaki dengan dua engsel pada setiap sisi. Setiap sambungan adalah servo, jadi lapan servos setiap sisi. Untuk kesederhanaan, semua lapan engsel satu sisi kuda akan berputar dalam satah yang sama. Walaupun ini tidak perlu sama sekali. Lebih-lebih lagi, jika kaki di satu sisi dimasukkan ke dalam sedikit "catur" supaya dua kaki yang bersebelahan tidak boleh menyentuh satu sama lain, ia akan menjadi lebih baik, ia akan membolehkan anda mengambil langkah yang lebih luas dan berlari.


Penyelesaian yang kemas dan berfungsi, tetapi jauh daripada penyelesaian yang paling murah ialah menggunakan papan pengawal bukan standard, dioptimumkan untuk menyambungkan servos dalam jumlah yang banyak. Saya terjumpa Pengawal Robot Labah-labah Dagu - ini adalah Arduino Mega yang sama, tetapi pada papan dengan penyambung pin 3-pin pra-pateri, di mana anda boleh segera menyambungkan 48 servos yang sama tanpa sebarang perisai. Sesuai untuk robot Arduino berbilang kaki.

Kawalan

Kami akan dikawal melalui Bluetooth. Terdapat pelbagai penyelesaian perkakasan untuk ini. Ini adalah perisai, dan tudung berasingan dengan antara muka bersiri UART (seperti port com biasa, hanya dengan tahap isyarat 5 V). Bagi saya yang paling praktikal ialah selendang kecil dengan antara muka UART. Menyambung ke pin UART/Serial yang sepadan pada port Arduino. Kami perhatikan dua nuansa: hanya terdapat satu port sedemikian pada Uno / Due / Nano dan sebagainya, dan ia juga digunakan untuk berkelip melalui USB. Oleh itu, anda mungkin perlu mematikan modul Bluetooth semasa perisian tegar. Dan nuansa kedua - jangan lupa bahawa RX-pin modul disambungkan ke TX-pin Arduino, dan TX - ke RX. Perkara sebegini ada dalam UART.

Pengaturcaraan Bluetooth tidak lebih sukar daripada servos, data boleh dibaca bait demi bait, yang akan kami gunakan:

Charcmd; Serial.begin(9600); jika (Serial.available()) cmd = Serial.read();

Jika Arduino Mega digunakan dan Bluetooth disambungkan ke port kedua, maka Serial1 ditulis dan bukannya Serial. Perlu diperhatikan bahawa anda tidak boleh menggunakan Bluetooth, tetapi mengawal robot secara langsung melalui USB. Dan tiada apa yang akan berubah dalam kod di atas! Ia hanya berfungsi dengan port bersiri, dan sama ada pemancar BT atau penukar Serial USB tergantung di sana - ia tidak penting kepada kami.

Bahagian Lain Bluetooth

Cara paling mudah untuk menyambung adalah melalui utiliti Linux standard. Untuk berfungsi, kami memerlukan sdptool, utiliti rfcomm (termasuk dalam pakej bluez dalam repositori Ubuntu), serta minicom (pakej itu dipanggil begitu). Arahan untuk menggunakan utiliti ini boleh didapati di Web.

Algoritma pergerakan


Untuk hexapod, gaya berjalan yang paling mudah ialah ini: kaki dibahagikan kepada dua kumpulan tiga kaki, dan satu daripada kumpulan itu sepenuhnya di atas tanah, yang lain di udara, disusun semula ke hadapan. Ini jauh dari satu-satunya gaya berjalan yang mungkin. Anda boleh menyimpan hanya dua cakar di udara, atau bahkan satu, dan baki empat atau lima di atas tanah. Untuk octapod, terdapat juga banyak gaya berjalan. Kami akan mengambil yang paling mudah, juga dengan dua kumpulan empat kaki.

Jadi apa yang perlu kita lakukan untuk bekerja dengan 16 servos dan gaya berjalan yang dipilih? Jawapan yang betul ialah membaca tentang kinematik songsang (IK). Jumlah artikel tidak membenarkan mengembangkan topik secara meluas, tetapi terdapat banyak bahan di Internet. Ringkasnya, IR menyelesaikan masalah mencari isyarat kawalan yang diperlukan agar sistem mengambil kedudukan yang dikehendaki di angkasa. Untuk kaki, ini bermakna mengikut koordinat titik di mana kaki harus memukul, adalah perlu untuk menentukan sudut servos yang perlu ditetapkan untuk ini. Dan dengan mengawal koordinat kaki, anda boleh mengawal kedudukan badan. Kami mempunyai kaki 2DOF, kapaknya selari, jadi kaki sentiasa bergerak dalam satah yang sama. Masalah IR dalam kes ini dikurangkan kepada ruang 2D, yang sangat memudahkannya.

Biarkan untuk setiap kaki asal tempatan O menjadi batang servo atas, iaitu paha. Dan kami mempunyai koordinat titik A, di mana kaki perlu memukul. Maka mudah untuk melihat bahawa adalah perlu untuk menyelesaikan masalah mencari titik persilangan dua bulatan (lihat gambar rajah kaki sebelah, ini digambarkan di sana pada kaki paling kanan). Setelah menemui titik B persilangan bulatan (memilih mana-mana daripadanya), mudah untuk mengira sudut yang dikehendaki menggunakan penukaran daripada koordinat Cartesan kepada kutub. Dalam kod, penyelesaian kepada masalah ini kelihatan seperti ini:

Terapung A = -2*x; terapung B = -2 * y; float C = sqr(x) + sqr(y) + sqr(hipLength) - sqr(shinLength); terapung X0 = -A * C / (sqr(A) + sqr(B)); terapung Y0 = -B * C / (petak(A) + petak(B)); float D = sqrt(sqr(hipLength) - (sqr(C) / (sqr(A) + sqr(B)))); float mult = sqrt(sqr(D) / (sqr(A) + sqr(B))); kapak terapung, ay, bx, oleh; ax = X0 + B*mult; bx = X0 - B*mult; ay = Y0 - A*mult; oleh = Y0 + A*mult; // atau bx untuk satu lagi titik persimpangan apungan jointLocalX = ax; // atau oleh untuk titik persimpangan lain float jointLocalY = ay; float hipPrimaryAngle = polarAngle(jointLocalX, jointLocalY); float hipAngle = pinggulPrimaryAngle - hipStartAngle; float shinPrimaryAngle = polarAngle(x - jointLocalX, y - jointLocalY); float shinAngle = (shinPrimaryAngle - hipAngle) - shinStartAngle;

di mana x dan y ialah koordinat titik yang anda perlu capai dengan kaki anda; hipStartAngle - sudut di mana "pinggul" pada mulanya dipusing (dengan servo di kedudukan tengah), begitu juga - shinStartAngle. Dengan cara ini, dalam pengiraan ini, sudut jelas dalam radian, dan ia perlu dipindahkan ke objek Servo sudah dalam darjah. Kod perisian tegar yang berfungsi penuh, termasuk bahagian ini, disiarkan pada GitHub, lihat pautan di penghujung artikel. Ini adalah sekeping IC, tetapi selain itu, anda memerlukan beberapa kod yang cukup mudah untuk menggunakan IC ini pada semua kaki (lihat fungsi legsReachTo(), legWrite()). Anda juga memerlukan kod yang benar-benar melaksanakan berjalan - pergerakan satu kumpulan kaki "kembali" (supaya robot bergerak ke hadapan), manakala kumpulan kaki yang lain naik dan bergerak ke hadapan untuk langkah seterusnya, lihat stepForward () fungsi. Dia mengambil satu langkah dengan parameter yang diberikan. Parameter ini, dengan cara itu, boleh mengambil langkah ke belakang, walaupun nama fungsinya. Jika fungsi ini dipanggil dalam gelung, robot akan melangkah ke hadapan.

Kini menerima arahan dan tafsirannya. Mari tambah keadaan pada program:

Keadaan Enum ( BERHENTI, HADAPAN, BELAKANG, HADAPAN_KANAN, HADAPAN_KIRI );

Dan dalam gelung pelaksanaan gelung() utama, kita akan melihat keadaan semasa (pembolehubah keadaan) dan tarik stepForward() jika kita bergerak ke hadapan (dengan atau tanpa putaran), dan sekali lagi stepForward(), tetapi dengan hujah xamp negatif , jika kita perlu bergerak ke belakang. Pusingan kemudian akan dikendalikan dalam legWrite(), dan untuk pusingan ke kanan, kaki di sebelah kanan akan berdiri diam (sementara baris kiri). Inilah kereta kebal kuda. Kejam, tetapi sangat mudah dan berkesan. Pusingan lancar hanya boleh dilakukan dengan kaki 3DOF, contoh ini boleh dilihat dalam repo buggybug.

Suis (keadaan) ( kes FORWARD: kes FORWARD_RIGHT: kes FORWARD_LEFT: stepForward(h, dh, xamp, xshift); break; kes BACKWARD: stepForward(h, dh, - xamp, xshift); break; )

Perintah Char; manakala (Serial1.available()) arahan = Serial1.read(); suis (perintah) ( huruf "w": keadaan = HADAPAN; putus; huruf "s": keadaan = KEMBARA; putus; huruf "d": keadaan = HADAPAN_KANAN; putus; huruf "a": keadaan = HADAPAN_KIRI; putus; lalai : negeri = BERHENTI; )

Mengenai ini, perkara utama firmware telah berakhir, selebihnya adalah semua perkara kecil. Walaupun terdapat satu lagi, mungkin, perkara penting - keupayaan untuk memperhalusi servos. Walaupun dengan pemasangan yang paling berhati-hati, jika semua servos diarahkan untuk memusingkan 90°, sesetengah daripadanya masih akan menjadi sedikit tersasar. Itulah sebabnya anda perlu dapat menyesuaikannya. Anda boleh melihat bagaimana saya melakukannya dalam kaedah hipsWrite() dan shinsWrite() dan dalam tatasusunan penalaan halus hipsTune dan shinsTune.

perhimpunan

Untuk struktur sedemikian, tiada apa yang istimewa diperlukan: sekeping kaca plexiglass dengan ketebalan yang sesuai (dari pasar lambak rumah terdekat) dan gergaji jig atau gergaji besi akan dilakukan untuk memotong butiran. Dan sudah tentu, gerudi untuk menggerudi lubang. Daripada plexiglass, anda boleh menggunakan papan lapis (maka anda masih boleh membuat inskripsi peringatan pada reka bentuk akhir dengan pembakar). Kepingan atau sudut aluminium juga boleh digunakan. Dengan Sleipnir, saya menggunakan sudut aluminium dengan rusuk 1 cm (saya membelinya di suatu tempat di pasar raya perkakasan).


Pangkalan akan menjadi bingkai segi empat tepat. Anggota badan - jalur 4 sentimeter. Ia juga bernilai menyimpan dengan banyak bolt kecil, kacang. Kami memotong sudut ke dalam kepingan yang diperlukan, memotong alur untuk servos, lubang gerudi untuk memasang bolt dan skru. Reka bentuk adalah lebih baik untuk ditunjukkan daripada menggambarkan. Saiz boleh apa-apa, robot harus pelbagai. Tetapi ingat: semakin panjang kaki, semakin banyak leverage yang perlu ditekan oleh servo dan semakin besar beban di atasnya. Sehingga kemustahilan untuk berbalik dan juga pecah. Tetapi 4-5 cm tiada masalah.

Untuk robot ringan bajet, mereka selalunya tidak mengganggu pusingan berasingan anggota badan, dan keseluruhan beban jatuh sepenuhnya pada aci servo. Dengan berat yang kecil, ini sama sekali tidak kritikal. Dan dengan lebih berat, anda harus memikirkan servos dengan gear logam dan aci galas bebola.

Setiap servo biasanya disertakan dengan beberapa skru dan satu set bit yang boleh diskrukan ke aci untuk pelbagai aplikasi. Satu "tanduk" (atau tanduk) paling sesuai untuk kami, yang membolehkan anda memasang bar pada servo. Jadi, paksi dua servos dilekatkan pada satu bar, dan bar menjadi "paha". Dalam kes ini, satu serv dilekatkan pada badan, dan satu lagi menjadi sebahagian daripada kaki bawah. Ia patut mengacaukan bar lain padanya, hanya untuk memanjangkan atau menjadikan anggota badan lebih menarik. Kerja keras sedikit - dan platform sudah siap (set berguna pemutar skru, sepana, pinset, pemotong wayar, dll. sangat mempercepatkan proses).

Apa yang akan datang?

Keseluruhan projek boleh didapati di https://github.com/poconoco/sleipnir. Saya menerangkan salah satu konfigurasi yang paling tidak praktikal - banyak kaki 2DOF, tinggi, sempit, mudah jatuh di sisinya. Cuba buat robot yang lebih baik dengan kaki 3DOF. Dengan kaki 4DOF. Dengan kuku atau rahang. Sebagai contoh kinematik songsang 3DOF, anda boleh merujuk kepada repositori buggybug - terdapat perisian tegar hexapod. Anda juga boleh membuat robot bukan terkawal tetapi pintar, meletakkan penderia jarak dan bukannya Bluetooth, dan mengajar robot untuk memintas dinding dan halangan. Jika anda meletakkan sensor sedemikian pada pemacu servo dan memutarnya, maka anda boleh mengimbas kawasan itu, hampir seperti sonar.

Hello. Artikel ini adalah cerita pendek tentang bagaimana buat robot mereka tangan. Mengapa cerita, anda bertanya? Semua disebabkan oleh fakta bahawa untuk pembuatan sedemikian kraftangan adalah perlu untuk menggunakan sejumlah besar pengetahuan, yang sangat sukar untuk dibentangkan dalam satu artikel. Kami akan melalui proses binaan, melihat kod dan akhirnya menghidupkan penciptaan Silicon Valley. Saya menasihati anda untuk menonton video untuk mendapat idea tentang apa yang harus berlaku pada akhirnya.

Sebelum meneruskan, sila ambil perhatian yang berikut, bahawa dalam pembuatan kraftangan menggunakan pemotong laser. Anda boleh menolak pemotong laser jika anda mempunyai pengalaman yang mencukupi dalam bekerja dengan tangan anda. Ketepatan adalah kunci untuk menyelesaikan projek dengan jayanya!

Langkah 1: Bagaimana ia berfungsi?

Robot itu mempunyai 4 kaki, dengan 3 servos pada setiap kaki, yang membolehkannya menggerakkan anggotanya dalam 3 darjah kebebasan. Dia bergerak dengan "gait menjalar". Biarkan ia perlahan, tetapi salah satu yang paling lancar.

Mula-mula anda perlu mengajar robot untuk bergerak ke hadapan, ke belakang, kiri dan kanan, kemudian tambahkan sensor ultrasonik, yang akan membantu mengesan halangan / halangan, dan selepas itu modul Bluetooth, terima kasih kepada kawalan robot akan mencapai tahap yang baru.

Langkah 2: Bahagian yang Diperlukan

Rangka diperbuat daripada kaca plexiglass setebal 2 mm.

Bahagian elektronik produk buatan sendiri akan terdiri daripada:

  • 12 servos;
  • arduino nano (boleh digantikan dengan mana-mana papan arduino lain);

  • Perisai untuk kawalan servo;
  • bekalan kuasa (dalam projek itu, unit bekalan kuasa 5V 4A telah digunakan);

  • sensor ultrasonik;
  • modul bluetooth hc 05;

Untuk membuat perisai, anda memerlukan:

  • papan litar (sebaik-baiknya dengan talian biasa (bas) kuasa dan tanah);
  • penyambung pin antara papan - 30 pcs;
  • soket setiap papan - 36 pcs;

  • wayar.

Instrumen:

  • Pemotong laser (atau tangan yang mahir);
  • Gam super;
  • Gam panas.

Langkah 3: Rangka

Mari gunakan atur cara grafik untuk melukis bahagian komponen rangka.

Selepas itu, dalam apa jua cara yang ada, kami memotong 30 bahagian robot masa hadapan.

Langkah 4: Perhimpunan

Selepas memotong, keluarkan salutan kertas pelindung dari kaca plexiglass.

Seterusnya, teruskan ke pemasangan kaki. Pengikat dibina ke dalam bahagian rangka. Apa yang perlu dilakukan ialah meletakkan kepingan bersama-sama. Sambungan agak ketat, tetapi untuk kebolehpercayaan yang lebih besar, anda boleh menggunakan setitik superglue pada pengikat.

Kemudian anda perlu mengubah suai servos (gamkan skru bertentangan dengan aci servo).

Dengan penghalusan ini, kami akan menjadikan robot lebih stabil. Penapisan perlu dilakukan hanya untuk 8 servos, baki 4 akan dilekatkan terus ke badan.

Kami melampirkan kaki ke elemen penyambung (bahagian melengkung), dan ia, seterusnya, ke servo pada badan.

Langkah 5: Membuat Perisai

Membuat papan adalah agak mudah jika anda mengikuti foto yang dibentangkan dalam langkah.

Langkah 6: Elektronik

Betulkan pin servo pada papan arduino. Pin mesti disambungkan dalam urutan yang betul, jika tidak, tiada apa yang akan berfungsi!

Langkah 7: Pengaturcaraan

Sudah tiba masanya untuk menghidupkan Frankenstein. Mula-mula, muatkan program legs_init dan pastikan robot berada dalam kedudukan yang ditunjukkan dalam gambar. Seterusnya, muatkan quattro_test untuk melihat sama ada robot bertindak balas kepada pergerakan asas seperti ke hadapan, ke belakang, kiri dan kanan.

PENTING: Anda perlu menambah perpustakaan tambahan pada arduino IDE. Pautan ke perpustakaan diberikan di bawah:

Robot mesti mengambil 5 langkah ke hadapan, 5 langkah ke belakang, belok kiri 90 darjah, belok kanan 90 darjah. Jika Frankenstein melakukan segala-galanya dengan betul, kami bergerak ke arah yang betul.

P. S: tetapkan robot pada cawan, seperti pada dirian, supaya setiap kali ia tidak menetapkannya ke titik asal. Apabila ujian telah menunjukkan operasi normal robot, kami boleh meneruskan ujian dengan meletakkannya di bawah / lantai.

Langkah 8: Kinematik Songsang

Kinematik songsang ialah apa yang sebenarnya mengawal robot (jika anda tidak berminat dengan bahagian matematik projek ini dan anda tergesa-gesa untuk menyelesaikan projek, anda boleh melangkau langkah ini, tetapi mengetahui apa yang mendorong robot akan sentiasa berguna).

Dengan kata mudah, kinematik songsang atau singkatannya IK ialah "bahagian" persamaan trigonometri yang menentukan kedudukan hujung tajam kaki, sudut setiap servo, dsb., yang akhirnya menentukan beberapa tetapan awal. Sebagai contoh, panjang setiap langkah robot atau ketinggian di mana badan akan ditempatkan semasa pergerakan / rehat. Menggunakan parameter yang dipratentukan ini, sistem akan mengekstrak jumlah yang setiap servo mesti dialihkan untuk mengawal robot dengan arahan yang diberikan.

Apa lagi yang perlu dibaca