DIY Arduino robotu. Öz əlinizlə Arduino-da robotu necə etmək olar: evdə hazırlanmış Arduino robotu Arduino uno-da robotlar

Həm də bu lövhəyə əsaslanan hazır, tam hüquqlu robotun alınmasından. Uşaqlar üçün ibtidai məktəb və ya məktəbəqədər yaş bu cür bitmiş layihələr Arduino hətta üstünlük təşkil edir, çünki "Animasiyasız" lövhə bir az darıxdırıcı görünür. Bu yolla edənlər üçün uyğundur elektrik dövrələri xüsusilə cəlbedici deyil.

İşləyən robot modelini almaqla, yəni. əslində hazır yüksək texnologiyalı oyuncaqlara maraq oyada bilərsiniz müstəqil dizayn və robotların yaradılması. Belə bir oyuncaqla kifayət qədər oynadıqdan və onun necə işlədiyini başa düşdükdən sonra, boşaldılmış lövhədən, sürücülərdən və sensorlardan istifadə edərək, modeli təkmilləşdirməyə, hər şeyi ayırmağa və Arduino-da yeni layihələr toplamağa başlaya bilərsiniz. Arduino platformasının açıqlığı da buna imkan verir komponentlərözünüzə yeni oyuncaqlar hazırlayın.

Arduino lövhəsində hazır robotların kiçik icmalını təqdim edirik.

Arduino maşını Bluetooth vasitəsilə idarə olunur

Avtomobil Bluetooth vasitəsilə idarə olunur, qiyməti 100 dollardan azdır. Yığılmamış şəkildə verilir. Korpus, motor, təkərlər, litium batareya və şarj cihazından əlavə Arduino UNO328 lövhəsi, motor kontrolleri, Bluetooth adapteri, pult alırıq. uzaqdan nəzarət Və s.

Bu və digər robotu əks etdirən video:

Daha çox Ətraflı Təsviri oyuncaqlar və DealExtreme internet mağazasının saytında almaq imkanı.

Arduino Tısbağa Robot

Robot tısbağası montaj dəsti təxminən 90 dollara başa gəlir. Çatışmayan tək şey qabıqdır, bu qəhrəmanın həyatı üçün lazım olan hər şey daxildir: Arduino Uno lövhəsi, servolar, sensorlar, izləmə modulları, IR qəbuledicisi və uzaqdan idarəetmə, batareya.

Tısbağanı DealExtreme saytında almaq olar, oxşar daha ucuz robot Aliexpress-də.

Arduino izlənilən avtomobil cib telefonu ilə idarə olunur

İzlənən avtomobil, Bluetooth vasitəsilə idarə olunur mobil telefon , qiyməti 94 dollardır. Trek bazasına əlavə olaraq, biz Arduino Uno lövhəsi və genişləndirmə lövhəsi, Bluetooth lövhəsi, batareya və şarj cihazı alırıq.

İzlənən avtomobili DealExtreme saytında da almaq olar, orada ətraflı təsvir də var. Bəlkə daha maraqlı bir dəmir Arduino tankı Aliexpress-də.

Arduino avtomobili labirintlərdən keçir

Maşın labirintlərdən keçir, qiyməti 83 dollardır. Mühərriklərə, Arduino Uno lövhəsinə və digər zəruri əşyalara əlavə olaraq, izləmə modulları və maneələrdən yayınma modullarını ehtiva edir.

Hazır robot və ya robot üçün çərçivə

İcmalda müzakirə olunan Arduino robotlarını yaratmaq üçün hazır dəstlərdən istifadə variantına əlavə olaraq, robotun ayrıca çərçivəsini (gövdəsini) ala bilərsiniz - bu, təkərlər üzərində platforma və ya tırtıl, humanoid, hörümçək və digər modellər. Bu halda robotun içliyini özünüz etməli olacaqsınız. Bu cür halların icmalı bizdə verilmişdir.

Hazır robotları başqa haradan almaq olar?

İcmalda Çin onlayn mağazalarından ən ucuz və ən maraqlı, fikrimizcə, hazır Arduino robotlarını seçdik. Çindən bir bağlama gözləməyə vaxtınız yoxdursa - böyük seçim Amperka və DESSY onlayn mağazalarında hazır robotlar. Aşağı qiymətlər və sürətli çatdırılma ROBstore internet mağazası tərəfindən təklif olunur. Tövsiyə olunan mağazaların siyahısı.

Arduino layihələri haqqında rəylərimizlə də maraqlana bilərsiniz:


Arduino təlimi

Arduino öyrənməyə haradan başlayacağınızı bilmirsiniz? Sizə daha yaxın olanı düşünün - özünüzü yığmaq sadə modellər və onların tədricən mürəkkəbləşməsi və ya daha mürəkkəb, lakin hazır həllərlə tanış olması?

İnsanlar sadə robotlar yaratmaqla Arduino-nu öyrənməyə başlayırlar. Bu gün mən Arduino Uno-da it kimi əlinizi və ya infraqırmızı işığı əks etdirən hər hansı digər obyekti izləyəcək ən sadə robotdan danışacağam. Bu robot həm də uşaqları əyləndirəcək. 3 yaşlı qardaşım oğlu həvəslə robotla oynayırdı :)

Mən tikinti zamanı lazım olacaq hissələri sadalamaqla başlayacağam - Arduino UNO;

infraqırmızı məsafəölçənlər;

-ötürücü qutuları və təkərləri olan 3 voltlu mühərriklər;

- 3A batareyalar üçün birləşdiricilər;

-batareya (kifayət qədər batareya yoxdursa);

-mühərrikləri idarə etmək üçün relelər;

Yaxşı və yaradılması zamanı lazım olacaq digər materiallar.
Əvvəlcə baza düzəldirik. Onu ağacdan düzəltməyə qərar verdim. Taxta taxta və mühərrikləri yuvalara mükəmməl uyğunlaşdıracaq şəkildə kəsdi


Sonra mühərrikləri taxta bir zolaqla sıxıram, bu şeridi vidalayıram

Sonra gövdəyə arduino, rele, Bradboard, məsafəölçənlər və bazanın altına fırlanan şassi yerləşdirdim.

İndi hər şeyi diaqrama uyğun olaraq bağlayırıq

Sonda Arduino-ya aşağıdakı eskizi yükləyin:

Const int R = 13; //İQ diapazonunun qoşulduğu sancaqlar const int L = 12; int motorL = 9; //relenin qoşulduğu sancaqlar int motorR = 11; int düyməsiState = 0; etibarsız quraşdırma() ( pinMode(R,INPUT); pinMode(L,INPUT); pinMode(motorR,OUTPUT); pinMode(motorL,OUTPUT); ) boş döngə() ( ( buttonState = digitalRead(L); if (buttonState) == YÜKSƏK)( digitalWrite(motorR, HİGH); ) başqa ( digitalWrite(motorR, LOW); ) ) (( buttonState = digitalRead(R); if (buttonState == HIGH)( digitalWrite(motorL, HİGH); ) başqa ( digitalWrite(motorL,LOW); ) ) ) )

Əməliyyat prinsipi çox sadədir. Sol məsafəölçən sağ təkər, sağ isə sol üçün cavabdehdir

Daha aydın olması üçün robotun yaradılması prosesini və hərəkətini göstərən videoya baxa bilərsiniz

Bu robot çox sadədir və hər kəs bunu edə bilər. Bu, rölelər və IR məsafəölçənləri kimi modulların iş prinsiplərini və onlardan ən yaxşı şəkildə necə istifadə etməyi başa düşməyə kömək edəcək.

Ümid edirəm bu DIY-i bəyəndiniz, unutmayın ki, DIY-lər gözəldir!

Hamıya salam. Bu məqalə necə haqqında qısa bir hekayədir et robot onların əllər. Niyə hekayə, soruşursan? Bu, belə istehsalı üçün olması ilə əlaqədardır sənətkarlıq bir məqalədə təqdim etmək çox çətin olan əhəmiyyətli miqdarda bilikdən istifadə etmək lazımdır. Quraşdırma prosesini sizə təqdim edəcəyik, koda nəzər salacağıq və nəticədə Silikon Vadisi yaradılmasını həyata keçirəcəyik. Nə ilə nəticələnəcəyinizə dair bir fikir əldə etmək üçün videoya baxmağı məsləhət görürəm.

Davam etməzdən əvvəl aşağıdakılara diqqət yetirin: istehsal zamanı sənətkarlıq lazer kəsicidən istifadə olunub. From lazer kəsiciƏllərinizlə işləmək üçün kifayət qədər təcrübəniz varsa, imtina edə bilərsiniz. Dəqiqlik layihəni uğurla başa çatdırmağın açarıdır!

Addım 1: Bu necə işləyir?

Robotun 4 ayağı var, hər birində 3 servo var ki, bu da onun üzvlərini 3 sərbəstlikdə hərəkət etdirməyə imkan verir. O, “sürünən yeriş”lə hərəkət edir. Yavaş ola bilər, amma ən hamarlardan biridir.

Əvvəlcə robota irəli, geri, sola və sağa hərəkət etməyi öyrətməlisiniz, sonra maneələri/maneələri aşkar etməyə kömək edəcək ultrasəs sensoru, sonra isə Bluetooth modulu əlavə etməlisiniz, bunun sayəsində robotun idarə edilməsi yeni səviyyəyə çatacaqdır. .

Addım 2: Lazımi hissələr

Skelet 2 mm qalınlığında pleksiglasdan hazırlanmışdır.

Evdə hazırlanmış məhsulun elektron hissəsi aşağıdakılardan ibarət olacaq:

  • 12 servo;
  • arduino nano (hər hansı digər arduino lövhəsi ilə əvəz edilə bilər);

  • Servoları idarə etmək üçün qalxan;
  • enerji təchizatı (layihədə 5V 4A enerji təchizatı istifadə edilmişdir);

  • ultrasəs sensoru;
  • hc 05 bluetooth modulu;

Bir qalxan etmək üçün sizə lazım olacaq:

  • dövrə lövhəsi (üstünlük elektrik və yerin ümumi xətləri (avtobusları) ilə);
  • lövhələrarası pin bağlayıcıları - 30 ədəd;
  • hər lövhə üçün rozetkalar - 36 ədəd;

  • məftillər.

Alətlər:

  • lazer kəsici (və ya bacarıqlı əllər);
  • super yapışqan;
  • İsti əriyən yapışqan.

Addım 3: Skelet

Skeletin komponentlərini çəkmək üçün qrafik proqramdan istifadə edək.

Bundan sonra istənilən vaxt sərfəli yol gələcək robotun 30 hissəsini kəsin.

Addım 4: Montaj

Kəsdikdən sonra pleksiglasdan qoruyucu kağız örtüyü çıxarın.

Sonra ayaqları yığmağa başlayırıq. Skeletin hissələrinə quraşdırılmış bərkidici elementlər. Qalan şey hissələri bir-birinə bağlamaqdır. Bağlantı olduqca sıxdır, lakin daha çox etibarlılıq üçün bağlayıcılara bir damla superglue tətbiq edə bilərsiniz.

Sonra servoları dəyişdirməlisiniz (servo vallarının əksinə bir vint yapışdırın).

Bu modifikasiya ilə biz robotu daha dayanıqlı edəcəyik. Yalnız 8 servo dəyişdirilməlidir, qalan 4-ü birbaşa gövdəyə bağlanacaqdır.

Ayaqları birləşdirən elementə (əyri hissə) və bu da öz növbəsində bədəndəki servo sürücüyə bağlayırıq.

Addım 5: Qalxanı düzəldin

Addımda təqdim olunan fotoşəkillərə əməl etsəniz, lövhə hazırlamaq olduqca sadədir.

Addım 6: Elektronika

Servo sürücü sancaqlarını arduino lövhəsinə əlavə edək. Nəticələr əlaqəli olmalıdır düzgün ardıcıllıq, əks halda heç nə işləməyəcək!

Addım 7: Proqramlaşdırma

Frankenstein-i canlandırmağın vaxtı gəldi. Əvvəlcə legs_init proqramını yükləyək və robotun şəkildəki kimi vəziyyətdə olduğundan əmin olaq. Sonra, robotun irəli, geri, sola və sağa hərəkət kimi əsas hərəkətlərə cavab verib-vermədiyini yoxlamaq üçün quattro_test yükləyəcəyik.

ƏHƏMİYYƏTLİ: Arduino IDE-yə əlavə kitabxana əlavə etməlisiniz. Kitabxanaya keçid aşağıda verilmişdir:

Robot 5 addım irəli, 5 addım geri, sola 90 dərəcə, sağa 90 dərəcə dönməlidir. Frankenstein hər şeyi düzgün edirsə, biz düzgün istiqamətdə hərəkət edirik.

P. S: Robotu stenddə olduğu kimi fincanın üzərinə qoyun ki, onu hər dəfə başlanğıc nöqtəsinə təyin etməyəsiniz. Testlər göstərdiyi kimi normal iş robotu yerə/yerə yerləşdirərək testi davam etdirə bilərik.

Addım 8: Tərs Kinematika

Tərs kinematika robotu həqiqətən idarə edən şeydir (əgər bu layihənin riyazi tərəfi ilə maraqlanmırsınızsa və layihəni bitirməyə tələsirsinizsə, bu addımı atlaya bilərsiniz, lakin robotu nəyin idarə etdiyini bilmək həmişə faydalı olacaq).

Sadə sözlə, tərs kinematika və ya qısaca IR, triqonometrik tənliklərin ayağın kəskin ucunun mövqeyini, hər bir servo bucağını və s. Məsələn, robotun hər addımının uzunluğu və ya bədənin hərəkət/istirahət zamanı yerləşəcəyi hündürlük. Bu əvvəlcədən təyin edilmiş parametrlərdən istifadə edərək, sistem verilmiş əmrlərdən istifadə edərək robotu idarə etmək üçün hər bir servonun hərəkət etdirilməsi lazım olan məbləği çıxaracaq.

Robot haqqında bir az. İlk növbədə, layihə mümkün qədər ucuz olmalı idi. Bədən heç bir hesablama və ya balanslaşdırma olmadan yaradılmışdır, bədən üçün əsas tələb minimum ölçülər idi; Beləliklə, bu robotu yığmağa başlayaq.

Hissələrin siyahısı:
1. 1,5 mm pleksiglasdan hazırlanmış bədən hissələri və pəncələr dəsti.
2. Arduino Mega və ya Uno (Mega istifadə olunur) - 1 ədəd.
3. Mikro servo sürücü (TowerPro SG90 istifadə olunur) - 8 ədəd.
4. Ultrasəs məsafəölçən HC-SR04 - 1 əd.
5. Akkumulyatorun ölçüsü 18560, 3.7V (TrustFire 2400 mAh istifadə olunur) - 2 ədəd.
6. Batareya tutacağı ölçüsü 18560 (çevrilmiş konteynerdən istifadə etməklə - qablaşdırma) - 1 ədəd.
7. üçün durun çap dövrə lövhəsi 25 mm. (belə stendlərdən istifadə olunur) - 4 ədəd.
8. Çörək lövhəsinin bir hissəsi.
9. Keçirici naqillər.
10. Vida DIN 7985 M2, 8 mm. - 18 ədəd.
11. Qoz DIN 934 M2 - 18 ədəd.

Z-RoboDog robotunun yığılması:

1. Robotun korpusu 1,5 mm qalınlığında şəffaf pleksiglasdan hazırlanıb. Bütün hissələr CorelDraw-da çəkilmiş rəsmə uyğun olaraq lazerlə kəsilir:

2. Bədəni yapışdırın ikinci yapışqan. Yapışqan bədənin gücü olduqca kifayət edəcəkdir. Montaj edərkən, alt qapaqdakı deliklərin mövqeyini nəzərə alın (şəkilə baxın) və ya daha yaxşısı, lövhəni əlavə edin və hər şeyin uyğun olduğundan əmin olun. Yan divarları yapışdırın ki, naqillər üçün deliklər onlara daha yaxın olsun arxa divar. Arxa divardakı daha geniş dəlik USB kabel üçündür, lütfən, yığarkən bunu nəzərə alın.


3. Delikləri qeyd edin və qazın (2 mm qazma biti). Bolt və qaykalardan istifadə edərək servoları korpusa bərkidin (siyahıdan 10, 11-ci maddələr). Ön servo valları ön divara daha yaxın olmalıdır. Arxa servo sürücü valları arxa divara daha yaxındır.




4.1. Pəncələri toplayın. Pəncələrin yuxarı hissələrini götürün (iki deşik ilə). Parçanın ortasını qeyd edin. Servo sürücü rokerini yerləşdirdikdən sonra montaj nöqtələrini vintlər və qazma delikləri ilə qeyd edin (1,5 mm qazma). Rokçuları elə bərkidin ki, vint başlıqları oturacaqların yan tərəfində olsun. Rokçuları müxtəlif tərəfdən bərkidin və oturacaqlarçünki əvvəllər vallar əks istiqamətdə idi.


4.2. Servoları quraşdırmaq üçün delikləri qeyd edin və qazın (2 mm qazma biti). Qoşulmuş servoların şaftları pəncənin dar kənarına yaxın olmalıdır.


4.3. Pəncələrin sürüşməsinin qarşısını almaq üçün, məsələn, onlara rezin yapışdırın. Ancaq it addımlayanda pəncənin ön hissəsini yapışdırmamalısınız, o, tutula bilər; Maşından yapışqan mat zolaqlarına yapışdırdım.

5. Ultrasəs diapazonunun quraşdırılması üçün delikləri qeyd edin və qazın (2 mm qazma). Təmas ayaqları yuxarıya baxaraq məsafəölçəni quraşdırın.

6. Batareya tutacağını elə quraşdırın ki, o, korpusun ortasında olsun. Arduino lövhəsini bərkidin və bütün komponentləri birləşdirin. Çörək lövhəsinin bir hissəsi enerji paylanması üçün istifadə edilmişdir.

Z-RoboDog robotunun qurulması və işə salınması:

Bu nöqtədə, addımların kalibrlənməsi üçün ayaqları özünüz quraşdırmalı olacaqsınız. Əsas problem vallara yalnız müəyyən mövqelərdə bağlanan rokçulardır. Həm də servoların özləri işləmə dərəcələrində fərqlənə bilər.

Mənim itimin pəncələri belə görünür ekstremal nöqtələr servo açılar (dəyişənlər zs1, zs2, zs3 və s.). Pəncələrinizi fotoşəkildə olduğu kimi yerləşdirməyə çalışın. Vizual olaraq, pəncələr eyni mövqelərdə olmalıdır.

Əsas duruşda pəncələrinizi də çıxara bilərsiniz. Sonra rokçuları servo vallara vidalamağı unutmayın.


Z-RoboDog proqram hissəsi:

Kod çox sadədir, şərhlər hər yerdə əlavə olunur. Bütün hərəkətlər bir sıradır, rəqəmlərdə çaşqınlıq olmaması üçün hər bir servo üçün dəyişənlərdən istifadə etdim. Məsələn, s1 servo 1, s2 servo 2 və s. Anlamağı asanlaşdırmaq üçün sizə bu diaqramı təqdim edirəm.

Pəncələr diaqramda nömrələnir; pəncənin hər bir hissəsi onu hərəkət etdirən bir servo sürücü ilə əlaqələndirilir. Həmçinin, hər bir pəncə üçün hərəkət istiqamətləri göstərilir, bucaq artdıqda və ya azaldıqda pəncənin harada hərəkət edəcəyini göstərir; Başlanğıc bucaqları əsas postun küncləri idi (s1, s2, s3 və s.). Məsələn, 2-ci ayağı uzatmaq lazımdırsa, s3 və s4 bucağını artırmalısınız, massivdə bu belə görünəcək (s1, s2, s3+100, s4+50, s5, s6, s7, s8) . Budur tam eskiz. Kod mənim biliklərimə əsasən yazılmışdır, zəhmət olmasa, səhv həyata keçirmə yolunu seçdiyim təqdirdə mənə bildirin.

Video:


Arxivdə eskiz: Sizin serverimizdən faylları endirmək imkanınız yoxdur

Segway kimi tarazlıqda olan robot yaratmaq üçün Arduino-dan necə istifadə edə biləcəyinizdən danışaq.

İngilis dilindən Segway. Segway elektrik ötürücü ilə təchiz edilmiş iki təkərli dayanan avtomobildir. Onlara hoverbordlar və ya elektrikli skuterlər də deyilir.

Segway-in necə işlədiyini heç düşünmüsünüzmü? Bu dərslikdə biz sizə Segway kimi özünü tarazlayan Arduino robotunu necə edəcəyinizi göstərməyə çalışacağıq.

Robotu tarazlaşdırmaq üçün mühərriklər robotun düşməsinə müqavimət göstərməlidir. Bu fəaliyyət geribildirim və düzəldici elementlər tələb edir. Əlaqə elementi - hər üç oxda həm sürətlənmə, həm də fırlanma təmin edən (). Arduino robotun cari oriyentasiyasını bilmək üçün bundan istifadə edir. Düzəliş elementi mühərrik və təkərin birləşməsidir.

Son nəticə belə bir şey olmalıdır:

Robot diaqramı

L298N Motor Sürücü Modulu:

Təkərli DC dişli mühərrik:

Özünü tarazlayan robot mahiyyətcə tərs sarkaçdır. Kütlənin mərkəzi təkər oxlarına nisbətən daha yüksək olarsa, daha yaxşı balanslaşdırılmış ola bilər. Daha yüksək kütlə mərkəzi daha aşağı bucaq sürətlənməsinə (daha yavaş düşmə) uyğun gələn kütlənin daha yüksək ətalət momenti deməkdir. Buna görə batareya paketini üstünə qoyuruq. Bununla belə, robotun hündürlüyü materialların mövcudluğuna əsasən seçildi :)

Özünü balanslaşdıran robotun tamamlanmış versiyasını yuxarıdakı şəkildə görmək olar. Üst hissədə PCB-ni gücləndirmək üçün altı Ni-Cd batareyası var. Mühərriklər arasında motor sürücüsü üçün 9 voltluq batareya istifadə olunur.

Nəzəriyyə

Nəzarət nəzəriyyəsində bəzi dəyişəni (bu halda robotun mövqeyini) saxlamaq PID (proporsional inteqral törəmə) adlı xüsusi nəzarətçi tələb edir. Bu parametrlərin hər biri adətən Kp, Ki və Kd adlanan “qazanc”a malikdir. PID istədiyiniz dəyər (və ya giriş) və faktiki dəyər (və ya çıxış) arasında düzəliş təmin edir. Giriş və çıxış arasındakı fərq "səhv" adlanır.

PID nəzarətçi çıxışı davamlı olaraq tənzimləməklə səhvi mümkün olan ən kiçik dəyərə endirir. Arduino özünü balanslaşdıran robotumuzda giriş (dərəcə ilə istədiyiniz əyilmədir) proqram təminatı tərəfindən təyin edilir. MPU6050 robotun cari əyilməsini oxuyur və onu motoru idarə etmək və robotu dik vəziyyətdə saxlamaq üçün hesablamalar aparan PID alqoritminə ötürür.

PID Kp, Ki və Kd dəyərlərinin optimal dəyərlərə uyğunlaşdırılmasını tələb edir. Mühəndislər bu dəyərləri avtomatik hesablamaq üçün MATLAB kimi proqramlardan istifadə edirlər. Təəssüf ki, bizim vəziyyətimizdə MATLAB-dan istifadə edə bilmirik, çünki bu, layihəni daha da çətinləşdirəcək. Bunun əvəzinə biz PID dəyərlərini sazlayacağıq. Bunu necə etmək olar:

  1. Kp, Ki və Kd sıfıra bərabər olsun.
  2. Kp-ni tənzimləyin. Çox kiçik bir Kp robotun düşməsinə səbəb olacaq, çünki düzəliş kifayət deyil. Həddindən artıq Kp robotun vəhşicəsinə irəli-geri getməsinə səbəb olur. Yaxşı bir Kp robotu bir qədər irəli-geri hərəkət etdirəcək (və ya bir az salınacaq).
  3. Kp təyin edildikdən sonra Kd-ni tənzimləyin. Yaxşı dəyər Kd, robot demək olar ki, sabit olana qədər salınımları azaldacaq. Bundan əlavə, düzgün Kd itələsə belə robotu saxlayacaq.
  4. Nəhayət, Ki-ni quraşdırın. Yandırıldıqda robot Kp və Kd təyin olunsa belə salınacaq, lakin zamanla sabitləşəcək. Düzgün Ki dəyəri robotu sabitləşdirmək üçün tələb olunan vaxtı azaldacaq.

Robotun davranışını aşağıdakı videoda görmək olar:

Özünü tarazlayan robot üçün Arduino kodu

Robotumuzu yaratmaq üçün bizə dörd xarici kitabxana lazım idi. PID kitabxanası P, I və D dəyərlərinin hesablanmasını asanlaşdırır LMotorController kitabxanası L298N modulu ilə iki mühərriki idarə etmək üçün istifadə olunur. I2Cdev kitabxanası və MPU6050_6_Axis_MotionApps20 kitabxanası MPU6050-dən məlumatları oxumaq üçün nəzərdə tutulub. Kitabxanalar daxil olmaqla kodu bu depoda yükləyə bilərsiniz.

#daxildir #daxildir #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #əgər I2CDEV_INPLEMENTATION == I2CDEV_ARDUINO_WIRE #daxil et "Wire.h" #endif #MIN_ABS_SPEED 200 MPU-nu müəyyən edin; // MPU nəzarəti/vəziyyəti bool dmpReady = false; // əgər DMP başlanğıcı uğurlu olarsa doğru təyin edin uint8_t mpuIntStatus; // MPU uint8_t devStatus-dan faktiki kəsmə statusu baytını saxlayır; // hər cihaz əməliyyatından sonra statusu qaytarmaq (0 = müvəffəqiyyət, !0 = xəta) uint16_t packetSize; // gözlənilən DMP paket ölçüsü (defolt olaraq 42 baytdır) uint16_t fifoCount; // hal-hazırda FIFO uint8_t fifoBuffer-də olan bütün baytların sayı; // FIFO saxlama buferi // oriyentasiya/hərəkət vars Quaternion q; // quaternion konteyner VectorFloat çəkisi; // cazibə vektoru float ypr; //yaw/pitch/roll konteyner və cazibə vektoru //PID double originalSetpoint = 173; ikiqat təyinat nöqtəsi = orijinal təyin nöqtəsi; ikiqat hərəkət edənAngleOffset = 0.1; ikiqat giriş, çıxış; //bu dəyərləri öz dizaynınıza uyğunlaşdırmaq üçün tənzimləyin double Kp = 50; ikiqat Kd = 1,4; ikiqat Ki = 60; PID pid(&giriş, &çıxış, və təyinat nöqtəsi, Kp, Ki, Kd, ​​DIRECT); ikiqat motorSpeedFactorLeft = 0,6; ikiqat motorSpeedFactorRight = 0,5; //MOTOR CONTROLLER int ENA = 5; int IN1 = 6; int IN2 = 7; int IN3 = 8; int IN4 = 9; int ENB = 10; LMotorController motorController(ENA, IN1, IN2, ENB, IN3, IN4, motorSpeedFactorLeft, motorSpeedFactorRight); uçucu bool mpuInterrupt = false; // MPU kəsmə pininin yüksək olub-olmadığını göstərir void dmpDataReady() ( mpuInterrupt = true; ) void setup() ( // I2C avtobusuna qoşulun (I2Cdev kitabxanası bunu avtomatik etmir) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin( ); TWBR = 24; // 400kHz I2C clock (əgər CPU 8MHz-dirsə 200kHz) #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true your own); , min həssaslıq üçün ölçülür mpu.setXGyroOffset(-85); mpu.setZAccelOffset(1788); DMP-ni yandırın, indi o hazırdır mpu.setDMPEnabled(doğru); // Arduino kəsilməsinin aşkarlanmasını aktivləşdirinInterrupt(0 , dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // DMP Hazır bayrağımızı əsas kimi təyin edin loop() funksiyası ondan istifadə etməyin düzgün olduğunu bilir dmpReady = true; // sonradan müqayisə üçün gözlənilən DMP paket ölçüsünü əldə edin packetSize = mpu.dmpGetFIFOPacketSize(); //PID-i qurun.SetMode(AVTOMATİK); pid.SetSampleTime(10); pid. SetOutputLimits(-255, 255); ) else ( // ERROR! // 1 = ilkin yaddaş yükləməsi uğursuz oldu // 2 = DMP konfiqurasiya yeniləmələri uğursuz oldu // (əgər pozulacaqsa, adətən kod 1 olacaq) Serial.print(F("DMP Initialization" uğursuz oldu (kod ")); Serial.print(devStatus); Serial.println(F(")")); ) ) void loop() ( // proqramlaşdırma uğursuz olarsa, (!dmpReady) heç nə etməyə çalışmayın. ) qayıt; // MPU kəsilməsini və ya əlavə paket(lər) mövcud olduqda gözləyin (!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 mövcuddur // (bu, fasilə gözləmədən dərhal daha çox oxumağa imkan verir) fifoCount -= packetSize; mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); giriş = ypr * 180/M_PI + 180; ) )

Kp, Ki, Kd dəyərləri işləyə bilər və ya olmaya bilər. Əgər onlar yoxdursa, yuxarıdakı addımları izləyin. Qeyd edək ki, kodda əyilmə 173 dərəcə təyin olunub. İstəsəniz bu dəyəri dəyişə bilərsiniz, lakin nəzərə alın ki, bu, robotun saxlamalı olduğu əyilmə bucağıdır. Əlavə olaraq, mühərrikləriniz çox sürətlidirsə, siz motorSpeedFactorLeft və motorSpeedFactorRight dəyərlərini tənzimləyə bilərsiniz.

Hələlik bu qədər. görüşənədək.